commit e871d43bdbc1fce380d61e13805fc6c501f1f323 Author: Elizabeth Date: Wed Aug 14 19:39:40 2024 +0200 vault backup: 2024-08-14 19:39:40 diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..e609a07 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,3 @@ +{ + "promptDelete": false +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json new file mode 100644 index 0000000..62b7143 --- /dev/null +++ b/.obsidian/community-plugins.json @@ -0,0 +1,4 @@ +[ + "folder-note-plugin", + "obsidian-git" +] \ No newline at end of file diff --git a/.obsidian/core-plugins-migration.json b/.obsidian/core-plugins-migration.json new file mode 100644 index 0000000..436f43c --- /dev/null +++ b/.obsidian/core-plugins-migration.json @@ -0,0 +1,30 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "properties": false, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false +} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..9405bfd --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,20 @@ +[ + "file-explorer", + "global-search", + "switcher", + "graph", + "backlink", + "canvas", + "outgoing-link", + "tag-pane", + "page-preview", + "daily-notes", + "templates", + "note-composer", + "command-palette", + "editor-status", + "bookmarks", + "outline", + "word-count", + "file-recovery" +] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json new file mode 100644 index 0000000..e21a18d --- /dev/null +++ b/.obsidian/graph.json @@ -0,0 +1,22 @@ +{ + "collapse-filter": true, + "search": "", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": true, + "colorGroups": [], + "collapse-display": true, + "showArrow": false, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 1, + "close": false +} \ No newline at end of file diff --git a/.obsidian/plugins/folder-note-plugin/data.json b/.obsidian/plugins/folder-note-plugin/data.json new file mode 100644 index 0000000..f33a714 --- /dev/null +++ b/.obsidian/plugins/folder-note-plugin/data.json @@ -0,0 +1,9 @@ +{ + "folderNoteHide": true, + "folderNoteType": "inside", + "folderNoteName": "_about_", + "folderNoteKey": "ctrl", + "folderNoteAutoRename": true, + "folderDelete2Note": false, + "folderNoteStrInit": "" +} \ No newline at end of file diff --git a/.obsidian/plugins/folder-note-plugin/main.js b/.obsidian/plugins/folder-note-plugin/main.js new file mode 100644 index 0000000..99575e5 --- /dev/null +++ b/.obsidian/plugins/folder-note-plugin/main.js @@ -0,0 +1,9281 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +// ------------------------------------------------------------ +// Card block +// ------------------------------------------------------------ +var CardStyle; +(function (CardStyle) { + CardStyle[CardStyle["Folder"] = 0] = "Folder"; + CardStyle[CardStyle["Note"] = 1] = "Note"; + CardStyle[CardStyle["Image"] = 2] = "Image"; +})(CardStyle || (CardStyle = {})); +var CardBlock = /** @class */ (function () { + function CardBlock() { + this.style = 'card'; + this.cards = []; + this.col = -1; + this.imagePrefix = ''; + } + CardBlock.prototype.addCard = function (card) { + this.cards.push(card); + }; + CardBlock.prototype.clear = function () { + this.cards = []; + }; + CardBlock.prototype.getCardNum = function () { + return this.cards.length; + }; + CardBlock.prototype.getDocElement = function (app) { + var cardDiv = document.createElement('div'); + if (this.style == 'strip') { + cardDiv.addClass('strip-card-band'); + for (var i in this.cards) { + var cardEl = this.cards[i].getBoxElement(app, this.imagePrefix); + cardEl.addClass('strip-card-view'); + cardDiv.appendChild(cardEl); + } + } + else { // default: this.style == 'card' + cardDiv.addClass('cute-card-band'); + for (var i in this.cards) { + var cardEl = this.cards[i].getBoxElement(app, this.imagePrefix); + cardEl.addClass('cute-card-view'); + cardDiv.appendChild(cardEl); + } + if (this.col > 0) { + cardDiv.setAttr('style', "grid-template-columns: repeat(" + this.col + ", 1fr);"); + } + } + return cardDiv; + }; + CardBlock.prototype.getYamlCode = function () { + var yamlStr = ''; + var nCard = this.getCardNum(); + if (nCard > 0) { + yamlStr = '\n```ccard\nitems: ['; + for (var i in this.cards) { + yamlStr += '\n {\n'; + yamlStr += this.cards[i].getYamlCode(' '); + yamlStr += ' },'; + } + // get rid of last period + yamlStr = yamlStr.substring(0, yamlStr.length - 1); + yamlStr += '\n]\n'; + if (this.col > 0) { + yamlStr += "col: " + this.col + "\n"; + } + yamlStr += '```\n'; + } + return yamlStr; + }; + CardBlock.prototype.fromYamlCards = function (yaml) { + // parser options + this.fromYamlOptions(yaml); + // parser items + if (yaml.items) { + this.clear(); + var allItems = yaml.items; + for (var i in allItems) { + var cardInfo = allItems[i]; + if ('title' in cardInfo) { + var cardItem = new CardItem(cardInfo['title'], CardStyle.Note); + cardItem.fromDict(cardInfo); + this.addCard(cardItem); + } + } + } + // return + return (this.getCardNum() > 0); + }; + CardBlock.prototype.fromYamlOptions = function (yaml) { + if (yaml.style) { + this.style = yaml.style; + } + if (yaml.col) { + this.col = yaml.col; + } + if (yaml.imagePrefix) { + this.imagePrefix = yaml.imagePrefix; + } + }; + return CardBlock; +}()); +var CardItem = /** @class */ (function () { + function CardItem(title, style) { + this.title = title; + this.abstract = "No abstract."; + this.cardStyle = style; + } + CardItem.prototype.setHeadText = function (text) { + this.headText = text; + }; + CardItem.prototype.setHeadImage = function (linkUrl) { + this.headImage = linkUrl; + }; + CardItem.prototype.setTitle = function (title) { + this.title = title; + }; + CardItem.prototype.setTitleLink = function (linkUrl) { + this.titleLink = linkUrl; + }; + CardItem.prototype.setAbstract = function (abstract) { + this.abstract = abstract; + }; + CardItem.prototype.setFootnote = function (footnote) { + this.footnote = footnote; + }; + CardItem.prototype.fromDict = function (dict) { + if ('head' in dict) { + this.headText = dict['head']; + if (this.headText == 'Folder') { + this.cardStyle = CardStyle.Folder; + } + else if (this.headText == 'Note') { + this.cardStyle = CardStyle.Note; + } + } + if ('image' in dict) + this.headImage = dict['image']; + if ('link' in dict) + this.titleLink = dict['link']; + if ('brief' in dict) + this.abstract = dict['brief']; + if ('foot' in dict) + this.footnote = dict['foot']; + }; + CardItem.prototype.yamlEscapeQuotes = function (org) { + return org.replace(/'/gi, "''"); + }; + CardItem.prototype.getYamlCode = function (prefix) { + var yamlStr = ''; + yamlStr += prefix + "title: '" + this.yamlEscapeQuotes(this.title) + "'"; + if (this.titleLink) + yamlStr += ",\n" + prefix + "link: '" + this.yamlEscapeQuotes(this.titleLink) + "'"; + if (this.abstract) + yamlStr += ",\n" + prefix + "brief: '" + this.yamlEscapeQuotes(this.abstract) + "'"; + if (this.footnote) + yamlStr += ",\n" + prefix + "foot: '" + this.yamlEscapeQuotes(this.footnote) + "'"; + if (this.headImage) { + yamlStr += ",\n" + prefix + "image: '" + this.yamlEscapeQuotes(this.headImage) + "'"; + } + else if (this.headText) { + yamlStr += ",\n" + prefix + "head: '" + this.yamlEscapeQuotes(this.headText) + "'"; + } + else { + if (this.cardStyle == CardStyle.Folder) { + yamlStr += ",\n" + prefix + "head: 'Folder'"; + } + else if (this.cardStyle == CardStyle.Note) { + yamlStr += ",\n" + prefix + "head: 'Note'"; + } + else { + yamlStr += ",\n" + prefix + "head: 'Card'"; + } + } + yamlStr += '\n'; + return yamlStr; + }; + CardItem.prototype.getBoxElement = function (app, imagePrefix) { + var cardEl = document.createElement('div'); + // Heading + var headEl = cardEl.appendChild(document.createElement('div')); + if (this.headImage) { + this.cardStyle = CardStyle.Image; + if (this.headImage.startsWith("#")) { + // color + headEl.addClass('thumb-color'); + headEl.setAttr('style', "background-color: " + this.headImage + ";"); + } + else if (this.headImage.contains("://")) { + // app local image + headEl.addClass('thumb'); + headEl.setAttr('style', "background-image: url(" + this.headImage + ");"); + } + else { + // asset file name? + var imageUrl = this.headImage; + if (imagePrefix.length > 0) { + // skip explicitly path + var urlPathList = imageUrl.split('/').join(' ').trimStart(); + var fixPathList = imagePrefix.split('/').join(' ').trimStart(); + if (!urlPathList.startsWith(fixPathList)) { + imageUrl = imagePrefix + this.headImage; + } + } + if (!imageUrl.contains('://')) { + imageUrl = app.vault.adapter.getResourcePath(imageUrl); + } + headEl.addClass('thumb'); + headEl.setAttr('style', "background-image: url(" + imageUrl + ");"); + } + if (this.headText) { + headEl.textContent = this.headText; + } + } + else if (this.cardStyle == CardStyle.Folder) { + headEl.addClasses(['thumb-color', 'thumb-color-folder']); + headEl.textContent = 'Folder'; + } + else if (this.cardStyle == CardStyle.Note) { + headEl.addClasses(['thumb-color', 'thumb-color-note']); + headEl.textContent = 'Note'; + } + // article + var articleEl = cardEl.appendChild(document.createElement('article')); + // Title + if (this.titleLink) { + var titleEl = articleEl.appendChild(document.createElement('a')); + if (this.titleLink.endsWith('.md')) { + titleEl.addClass('internal-link'); + } + titleEl.href = this.titleLink; + var h1El = document.createElement('h1'); + h1El.textContent = this.title; + titleEl.appendChild(h1El); + } + else { + var titleEl = articleEl.appendChild(document.createElement('h1')); + titleEl.textContent = this.title; + } + // abstract + var briefEl = articleEl.appendChild(document.createElement('p')); + briefEl.textContent = this.abstract; + // footnote + if (this.footnote) { + var footEl = articleEl.appendChild(document.createElement('span')); + footEl.textContent = this.footnote; + } + // close + return cardEl; + }; + return CardItem; +}()); + +// ------------------------------------------------------------ +// Folder Brief +// ------------------------------------------------------------ +var FolderBrief = /** @class */ (function () { + function FolderBrief(app) { + this.app = app; + this.folderPath = ''; + this.briefMax = 64; + this.noteOnly = false; + } + // for cards type: folder_brief + FolderBrief.prototype.yamlFolderBrief = function (yaml) { + return __awaiter(this, void 0, void 0, function () { + var folderPath, activeFile, notePath, folderExist, view, briefCards, cardsElem; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + folderPath = ''; + activeFile = this.app.workspace.getActiveFile(); + notePath = activeFile.path; + if (!yaml.cards.folder) return [3 /*break*/, 2]; + folderPath = yaml.cards.folder; + return [4 /*yield*/, this.app.vault.adapter.exists(folderPath)]; + case 1: + folderExist = _a.sent(); + if (!folderExist) + folderPath = ''; + return [3 /*break*/, 3]; + case 2: + folderPath = activeFile.parent.path; + _a.label = 3; + case 3: + if (!(folderPath.length > 0)) return [3 /*break*/, 5]; + view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view) return [3 /*break*/, 5]; + return [4 /*yield*/, this.makeBriefCards(folderPath, notePath)]; + case 4: + briefCards = _a.sent(); + cardsElem = briefCards.getDocElement(this.app); + return [2 /*return*/, cardsElem]; + case 5: return [2 /*return*/, null]; + } + }); + }); + }; + // generate folder overview + FolderBrief.prototype.makeBriefCards = function (folderPath, activeNotePath) { + return __awaiter(this, void 0, void 0, function () { + var cardBlock, pathList, subFolderList, subFileList, i, subFolderPath, noteExists, folderCard, i, subFilePath, noteCard; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + cardBlock = new CardBlock(); + return [4 /*yield*/, this.app.vault.adapter.list(folderPath)]; + case 1: + pathList = _a.sent(); + subFolderList = pathList.folders; + subFileList = pathList.files; + if (!!this.noteOnly) return [3 /*break*/, 6]; + i = 0; + _a.label = 2; + case 2: + if (!(i < subFolderList.length)) return [3 /*break*/, 6]; + subFolderPath = subFolderList[i]; + return [4 /*yield*/, this.app.vault.adapter.exists(subFolderPath + '.md')]; + case 3: + noteExists = _a.sent(); + if (!!noteExists) return [3 /*break*/, 5]; + return [4 /*yield*/, this.makeFolderCard(folderPath, subFolderPath)]; + case 4: + folderCard = _a.sent(); + cardBlock.addCard(folderCard); + _a.label = 5; + case 5: + i++; + return [3 /*break*/, 2]; + case 6: + i = 0; + _a.label = 7; + case 7: + if (!(i < subFileList.length)) return [3 /*break*/, 10]; + subFilePath = subFileList[i]; + if (!subFilePath.endsWith('.md')) + return [3 /*break*/, 9]; + if (subFilePath == activeNotePath) + return [3 /*break*/, 9]; // omit self includeing + return [4 /*yield*/, this.makeNoteCard(folderPath, subFilePath)]; + case 8: + noteCard = _a.sent(); + cardBlock.addCard(noteCard); + _a.label = 9; + case 9: + i++; + return [3 /*break*/, 7]; + case 10: + // return + return [2 /*return*/, cardBlock]; + } + }); + }); + }; + // make folder brief card + FolderBrief.prototype.makeFolderCard = function (folderPath, subFolderPath) { + return __awaiter(this, void 0, void 0, function () { + var subFolderName, card, subPathList, folderBrief; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + subFolderName = subFolderPath.split('/').pop(); + card = new CardItem(subFolderName, CardStyle.Folder); + return [4 /*yield*/, this.app.vault.adapter.list(subFolderPath)]; + case 1: + subPathList = _a.sent(); + folderBrief = 'Contains '; + folderBrief += subPathList.folders.length.toString() + ' folders, '; + folderBrief += subPathList.files.length.toString() + ' notes.'; + card.setAbstract(folderBrief); + // footnote, use date in the future + card.setFootnote(subFolderPath.replace(folderPath + '/', '')); + // return + return [2 /*return*/, card]; + } + }); + }); + }; + // make note brief card + FolderBrief.prototype.makeNoteCard = function (folderPath, notePath) { + return __awaiter(this, void 0, void 0, function () { + var noteName, noteTitle, card, file, contentOrg, imageUrl, contentBrief, fileSt, date; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + noteName = notePath.split('/').pop(); + noteTitle = noteName.substring(0, noteName.length - 3); + card = new CardItem(noteTitle, CardStyle.Note); + card.setTitleLink(notePath); + file = this.app.vault.getAbstractFileByPath(notePath); + if (!(file && file instanceof obsidian.TFile)) return [3 /*break*/, 2]; + return [4 /*yield*/, this.app.vault.cachedRead(file)]; + case 1: + contentOrg = _a.sent(); + imageUrl = this.getContentImage(contentOrg, folderPath); + if (imageUrl.length > 0) { + card.setHeadImage(imageUrl); + } + contentBrief = this.getContentBrief(contentOrg); + if (contentBrief.length > 0) { + if (contentBrief.length > this.briefMax) { + contentBrief = contentBrief.substring(0, this.briefMax); + contentBrief += '...'; + } + card.setAbstract(contentBrief); + } + fileSt = file; + if (fileSt.stat) { + date = new Date(fileSt.stat.mtime); + card.setFootnote(date.toLocaleString()); + } + else { + card.setFootnote(notePath.replace(folderPath + '/', '')); + } + _a.label = 2; + case 2: + // return + return [2 /*return*/, card]; + } + }); + }); + }; + FolderBrief.prototype.getContentImage = function (contentOrg, folderPath) { + var imageUrl = ''; + // for patten: ![xxx.png] + var regexImg = new RegExp('!\\[(.*?)\\]\\((.*?)\\)'); + var match = regexImg.exec(contentOrg); + if (match != null) { + imageUrl = match[2]; + } + else { + // for patten: ![[xxx.png]] + var regexImg2 = new RegExp('!\\[\\[(.*?)\\]\\]'); + match = regexImg2.exec(contentOrg); + if (match != null) + imageUrl = match[1]; + } + // add image url + if (imageUrl.length > 0) { + if (!imageUrl.startsWith('http')) { + var headPath = folderPath; + var relativePath = false; + while (imageUrl.startsWith('../')) { + imageUrl = imageUrl.substring(3); + headPath = headPath.substring(0, headPath.lastIndexOf('/')); + relativePath = true; + } + if (relativePath) { + imageUrl = headPath + '/' + imageUrl; + } + imageUrl = imageUrl.replace(/\%20/g, ' '); + // imageUrl = this.app.vault.adapter.getResourcePath(imageUrl); + } + } + return imageUrl; + }; + FolderBrief.prototype.getContentBrief = function (contentOrg) { + // remove some special content + var content = contentOrg.trim(); + // skip yaml head + if (content.startsWith('---\r') || content.startsWith('---\n')) { + var hPos2 = content.indexOf('---', 4); + if (hPos2 >= 0 && (content[hPos2 - 1] == '\n' || (content[hPos2 - 1] == '\r'))) { + content = content.substring(hPos2 + 4).trim(); + } + } + content = content + // Remove YAML code + // .replace(/^---[\r\n][^(---)]*[\r\n]---[\r\n]/g, '') + // Remove HTML tags + .replace(/<[^>]*>/g, '') + // wiki style links + .replace(/\!\[\[(.*?)\]\]/g, '') + .replace(/\[\[(.*?)\]\]/g, '$1') + // Remove images + .replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, '') + // Remove inline links + .replace(/\[(.*?)\][\[\(].*?[\]\)]/g, '$1') + // Remove emphasis (repeat the line to remove double emphasis) + .replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, '$2') + // Remove blockquotes + .replace(/\n(>|\>)(.*)/g, '') + // Remove code blocks + .replace(/(```[^\s]*\n[\s\S]*?\n```)/g, '') + // Remove inline code + .replace(/`(.+?)`/g, '$1') + .trim(); + // try to get the first paragraph + var contentBrief = ''; + content = '\n' + content + '\n'; + var regexP1 = new RegExp('\n([^\n|^#|^>])([^\n]+)\n', 'g'); + var match = null; + if ((match = regexP1.exec(content)) !== null) { + contentBrief = match[1] + match[2]; + } + // console.log('contentBrief', contentBrief); + contentBrief = contentBrief.trim(); + // use section headings + if (contentBrief.length == 0) { + var regexHead = new RegExp('^#{1,6}(?!#)(.*)[\r\n]', 'mg'); + while ((match = regexHead.exec(content)) !== null) { + contentBrief += match[1] + ', '; + if (contentBrief.length > this.briefMax) { + break; + } + } + if (contentBrief.endsWith(', ')) { + contentBrief = contentBrief.substring(0, contentBrief.length - 2); + } + } + // return + return contentBrief; + }; + return FolderBrief; +}()); + +// ------------------------------------------------------------ +// Folder Note +// ------------------------------------------------------------ +var NoteFileMethod; +(function (NoteFileMethod) { + NoteFileMethod[NoteFileMethod["Index"] = 0] = "Index"; + NoteFileMethod[NoteFileMethod["Inside"] = 1] = "Inside"; + NoteFileMethod[NoteFileMethod["Outside"] = 2] = "Outside"; +})(NoteFileMethod || (NoteFileMethod = {})); +var FolderNote = /** @class */ (function () { + function FolderNote(app, methodStr, indexBase) { + this.app = app; + this.setMethod(methodStr, indexBase); + this.emptyPath(); + // for rename + this.filesToRename = []; + this.filesToRenameSet = false; + } + // set the method + FolderNote.prototype.setMethod = function (methodStr, indexBase) { + if (methodStr == 'index') { + this.method = NoteFileMethod.Index; + this.indexBase = indexBase; + } + else if (methodStr == 'inside') { + this.method = NoteFileMethod.Inside; + } + else if (methodStr == 'outside') { + this.method = NoteFileMethod.Outside; + } + }; + // clear + FolderNote.prototype.emptyPath = function () { + this.folderPath = ''; + this.notePath = ''; + this.noteBase = ''; + }; + // set by folder path + FolderNote.prototype.setByFolderPath = function (path) { + this.emptyPath(); + var folderPath = path.trim(); + if (folderPath.length == 0) + return; + // set + this.folderPath = folderPath; + var notePaths = this.getFolderNotePath(folderPath); + this.notePath = notePaths[0]; + this.noteBase = notePaths[1]; + }; + // set by note, should ends with .md + FolderNote.prototype.setByNotePath = function (path) { + this.emptyPath(); + var notePath = path.trim(); + if (notePath.length == 0) + return; + if (!notePath.endsWith('.md')) + return; + // set + this.notePath = notePath; + this.noteBase = this.getFileBaseName(notePath); + this.folderPath = this.getNoteFolderPath(notePath); + }; + // set by folder element + FolderNote.prototype.setByFolderElement = function (folderItemEl) { + var folderPath = ''; + var folderName = ''; + var className = folderItemEl.className.toString(); + var folderElem = folderItemEl; + if (className.contains('nav-folder-title-content')) { + folderName = folderElem.getText(); + folderElem = folderItemEl.parentElement; + folderPath = folderElem.attributes.getNamedItem('data-path').textContent; + } + else if (className.contains('nav-folder-title')) { + folderPath = folderItemEl.attributes.getNamedItem('data-path').textContent; + folderName = folderItemEl.lastElementChild.getText(); + } + // fix the folder path + if (folderPath.length > 0) { + var slashLast = folderPath.lastIndexOf('/'); + var folderPathLast = folderPath.split('/').pop(); + if (folderPathLast != folderName) { + folderPath = folderPath.substring(0, slashLast + 1) + folderName; + } + } + // set to mine + this.setByFolderPath(folderPath); + // return the element in useage + return folderElem; + }; + // get file base name + FolderNote.prototype.getFileBaseName = function (filePath) { + var baseName = filePath.split('/').pop(); + var dotPos = baseName.lastIndexOf('.'); + if (dotPos > 0) + baseName = baseName.substring(0, dotPos); + return baseName; + }; + // get folder note path by folder path + FolderNote.prototype.getFolderNotePath = function (folderPath) { + var notePath = ''; + var noteBaseName = this.indexBase; + if (this.method == NoteFileMethod.Index) { + notePath = folderPath + '/' + noteBaseName + '.md'; + } + else { + noteBaseName = folderPath.split('/').pop(); + if (this.method == NoteFileMethod.Inside) { + notePath = folderPath + '/' + noteBaseName + '.md'; + } + else if (this.method == NoteFileMethod.Outside) { + notePath = folderPath + '.md'; + } + } + // console.log('notePath: ', notePath); + return [notePath, noteBaseName]; + }; + // get note folder, make sure it is a note file + FolderNote.prototype.getNoteFolderPath = function (notePath) { + var folderPath = ''; + if (this.method == NoteFileMethod.Index) { + folderPath = notePath.substring(0, notePath.lastIndexOf('/')); + } + else if (this.method == NoteFileMethod.Inside) { + folderPath = notePath.substring(0, notePath.lastIndexOf('/')); + } + else if (this.method == NoteFileMethod.Outside) { + folderPath = notePath.substring(0, notePath.length - 3); + } + return folderPath; + }; + // check if it is folder note name + FolderNote.prototype.isFolderNotePath = function (notePath) { + return __awaiter(this, void 0, void 0, function () { + var isFN, noteBaseName, folderPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + isFN = false; + if (!notePath.endsWith('.md')) + return [2 /*return*/, false]; + if (!(this.method == NoteFileMethod.Index)) return [3 /*break*/, 1]; + isFN = notePath.endsWith("/" + this.indexBase + ".md"); + return [3 /*break*/, 4]; + case 1: + if (!(this.method == NoteFileMethod.Inside)) return [3 /*break*/, 2]; + noteBaseName = this.getFileBaseName(notePath); + if (notePath.endsWith(noteBaseName + '/' + noteBaseName + '.md')) { + isFN = true; + } + return [3 /*break*/, 4]; + case 2: + if (!(this.method == NoteFileMethod.Outside)) return [3 /*break*/, 4]; + folderPath = notePath.substring(0, notePath.length - 3); + return [4 /*yield*/, this.app.vault.adapter.exists(folderPath)]; + case 3: + isFN = _a.sent(); + _a.label = 4; + case 4: return [2 /*return*/, isFN]; + } + }); + }); + }; + // check is folder note file? + FolderNote.prototype.isFolderNote = function (notePath) { + return __awaiter(this, void 0, void 0, function () { + var isFN, noteBaseName, folderPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + isFN = false; + if (!(this.method == NoteFileMethod.Index)) return [3 /*break*/, 1]; + isFN = notePath.endsWith("/" + this.indexBase + ".md"); + return [3 /*break*/, 4]; + case 1: + if (!(this.method == NoteFileMethod.Inside)) return [3 /*break*/, 2]; + noteBaseName = this.getFileBaseName(notePath); + isFN = notePath.endsWith(noteBaseName + "/" + noteBaseName + ".md"); + return [3 /*break*/, 4]; + case 2: + if (!(this.method == NoteFileMethod.Outside)) return [3 /*break*/, 4]; + folderPath = notePath.substring(0, notePath.length - 3); + return [4 /*yield*/, this.app.vault.adapter.exists(folderPath)]; + case 3: + isFN = _a.sent(); + _a.label = 4; + case 4: return [2 /*return*/, isFN]; + } + }); + }); + }; + // open note file + FolderNote.prototype.openFolderNote = function (folderElem, doCreate) { + return __awaiter(this, void 0, void 0, function () { + var folderNoteExists; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.app.vault.adapter.exists(this.notePath)]; + case 1: + folderNoteExists = _a.sent(); + if (!(!folderNoteExists && doCreate)) return [3 /*break*/, 3]; + return [4 /*yield*/, this.newFolderNote()]; + case 2: + _a.sent(); + folderNoteExists = true; + _a.label = 3; + case 3: + // open the note + if (folderNoteExists) { + this.hideFolderNote(folderElem); + // show the note + this.app.workspace.openLinkText(this.notePath, '', false, { active: true }); + } + else if (folderElem.hasClass('has-folder-note')) { + folderElem.removeClass('has-folder-note'); + } + return [2 /*return*/]; + } + }); + }); + }; + // create folder note + FolderNote.prototype.newFolderNote = function () { + return __awaiter(this, void 0, void 0, function () { + var noteInitContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.expandContent(this.initContent)]; + case 1: + noteInitContent = _a.sent(); + return [4 /*yield*/, this.app.vault.adapter.write(this.notePath, noteInitContent)]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + // create folder by note + FolderNote.prototype.newNoteFolder = function () { + return __awaiter(this, void 0, void 0, function () { + var folderExists, folderPath, folderExists, newNotePath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(this.method == NoteFileMethod.Outside)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.app.vault.adapter.exists(this.folderPath)]; + case 1: + folderExists = _a.sent(); + if (!!folderExists) return [3 /*break*/, 3]; + return [4 /*yield*/, this.app.vault.adapter.mkdir(this.folderPath)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [3 /*break*/, 8]; + case 4: + if (!(this.method == NoteFileMethod.Inside)) return [3 /*break*/, 8]; + folderPath = this.notePath.substring(0, this.notePath.length - 3); + return [4 /*yield*/, this.app.vault.adapter.exists(folderPath)]; + case 5: + folderExists = _a.sent(); + if (!!folderExists) return [3 /*break*/, 8]; + return [4 /*yield*/, this.app.vault.adapter.mkdir(folderPath)]; + case 6: + _a.sent(); + newNotePath = folderPath + '/' + this.noteBase + '.md'; + return [4 /*yield*/, this.app.vault.adapter.rename(this.notePath, newNotePath)]; + case 7: + _a.sent(); + this.app.workspace.openLinkText(newNotePath, '', false, { active: true }); + _a.label = 8; + case 8: return [2 /*return*/]; + } + }); + }); + }; + // expand content template + FolderNote.prototype.expandContent = function (template) { + return __awaiter(this, void 0, void 0, function () { + var folderName, content, folderBrief, briefCards, briefLiveCode; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + folderName = this.folderPath.split('/').pop(); + content = template + .replace(/{{FOLDER_NAME}}/g, folderName) + .replace(/{{FOLDER_PATH}}/g, this.folderPath); + if (!content.contains('{{FOLDER_BRIEF}}')) return [3 /*break*/, 2]; + folderBrief = new FolderBrief(this.app); + return [4 /*yield*/, folderBrief.makeBriefCards(this.folderPath, this.notePath)]; + case 1: + briefCards = _a.sent(); + content = content.replace('{{FOLDER_BRIEF}}', briefCards.getYamlCode()); + _a.label = 2; + case 2: + // keyword: {{FOLDER_BRIEF_LIVE}} + if (content.contains('{{FOLDER_BRIEF_LIVE}}')) { + briefLiveCode = '\n```ccard\ntype: folder_brief_live\n```\n'; + content = content.replace('{{FOLDER_BRIEF_LIVE}}', briefLiveCode); + } + return [2 /*return*/, content]; + } + }); + }); + }; + // hide folder note + FolderNote.prototype.hideFolderNote = function (folderElem) { + // modify the element + var hideSetting = this.hideNoteFile; + folderElem.addClass('has-folder-note'); + var parentElem = folderElem.parentElement; + var fileSelector = ':scope > div.nav-folder-children > div.nav-file > div.nav-file-title'; + var isOutsideMethod = (this.method == NoteFileMethod.Outside); + if (isOutsideMethod) { + parentElem = parentElem.parentElement; + fileSelector = ':scope > div.nav-file > div.nav-file-title'; + } + var noteBase = this.noteBase; + parentElem.querySelectorAll(fileSelector) + .forEach(function (fileElem) { + var fileNodeTitle = fileElem.firstElementChild.textContent; + // console.log('fileNoteTitle: ', fileNodeTitle); + if (hideSetting && (fileNodeTitle == noteBase)) { + fileElem.addClass('is-folder-note'); + } + else if (!isOutsideMethod) { + fileElem.removeClass('is-folder-note'); + } + // console.log('isOutsideMethod: ', isOutsideMethod); + }); + }; + // get the file breif path + FolderNote.prototype.getNoteFolderBriefPath = function (notePath) { + return __awaiter(this, void 0, void 0, function () { + var folderPath, isFN; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + folderPath = ''; + return [4 /*yield*/, this.isFolderNote(notePath)]; + case 1: + isFN = _a.sent(); + if (isFN) { + folderPath = this.getNoteFolderPath(notePath); + } + else { + folderPath = notePath.substring(0, notePath.lastIndexOf('/')); + } + return [2 /*return*/, folderPath]; + } + }); + }); + }; + // delete a folder + FolderNote.prototype.deleteFolder = function (pathToDel) { + return __awaiter(this, void 0, void 0, function () { + var myNotePath, noteExists; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(this.method == NoteFileMethod.Outside && !pathToDel.endsWith('.md'))) return [3 /*break*/, 3]; + myNotePath = pathToDel + '.md'; + return [4 /*yield*/, this.app.vault.adapter.exists(myNotePath)]; + case 1: + noteExists = _a.sent(); + if (!noteExists) return [3 /*break*/, 3]; + return [4 /*yield*/, this.app.vault.adapter.trashLocal(myNotePath)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }); + }; + // sync folder / note name + FolderNote.prototype.syncName = function (newPath, oldPath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(this.method == NoteFileMethod.Outside)) return [3 /*break*/, 2]; + return [4 /*yield*/, this.syncNameOutside(newPath, oldPath)]; + case 1: + _a.sent(); + return [3 /*break*/, 4]; + case 2: + if (!(this.method == NoteFileMethod.Inside)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.syncNameInside(newPath, oldPath)]; + case 3: + _a.sent(); + _a.label = 4; + case 4: return [2 /*return*/]; + } + }); + }); + }; + // sync folder / note name for outside + FolderNote.prototype.syncNameOutside = function (newPath, oldPath) { + return __awaiter(this, void 0, void 0, function () { + var noteExists, oldNotePaths, newNotePaths, isFN, oldFolderPath, newFolderPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!!oldPath.endsWith('.md')) return [3 /*break*/, 4]; + return [4 /*yield*/, this.app.vault.adapter.exists(oldPath + '.md')]; + case 1: + noteExists = _a.sent(); + if (!noteExists) return [3 /*break*/, 3]; + oldNotePaths = this.getFolderNotePath(oldPath); + newNotePaths = this.getFolderNotePath(newPath.path); + if (!(oldNotePaths[1] != newNotePaths[1])) return [3 /*break*/, 3]; + return [4 /*yield*/, this.app.vault.adapter.rename(oldNotePaths[0], newNotePaths[0])]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [3 /*break*/, 7]; + case 4: return [4 /*yield*/, this.isFolderNote(oldPath)]; + case 5: + isFN = _a.sent(); + if (!isFN) return [3 /*break*/, 7]; + oldFolderPath = this.getNoteFolderPath(oldPath); + newFolderPath = this.getNoteFolderPath(newPath.path); + return [4 /*yield*/, this.app.vault.adapter.rename(oldFolderPath, newFolderPath)]; + case 6: + _a.sent(); + _a.label = 7; + case 7: return [2 /*return*/]; + } + }); + }); + }; + // sync folder / note name for inside case + FolderNote.prototype.syncNameInside = function (newPath, oldPath) { + return __awaiter(this, void 0, void 0, function () { + var oldNotePaths, newNotePaths, oldNotePathNew, noteExists, isFN, oldFolderPath, noteDir, noteBase, newFolderPath; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!!oldPath.endsWith('.md')) return [3 /*break*/, 2]; + oldNotePaths = this.getFolderNotePath(oldPath); + newNotePaths = this.getFolderNotePath(newPath.path); + oldNotePathNew = newPath.path + '/' + oldNotePaths[1] + '.md'; + return [4 /*yield*/, this.app.vault.adapter.exists(oldNotePathNew)]; + case 1: + noteExists = _a.sent(); + if (noteExists) { + if (newNotePaths[0] != oldNotePathNew) { + // put it to rename + this.filesToRename.push(oldNotePathNew); + this.filesToRename.push(newNotePaths[0]); + } + } + return [3 /*break*/, 4]; + case 2: + if (!(this.filesToRename.length == 0)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.isFolderNote(oldPath)]; + case 3: + isFN = _a.sent(); + if (isFN) { + oldFolderPath = this.getNoteFolderPath(oldPath); + noteDir = newPath.path; + noteDir = noteDir.substring(0, noteDir.lastIndexOf('/')); + noteDir = noteDir.substring(0, noteDir.lastIndexOf('/')); + noteBase = newPath.path.split('/').pop(); + noteBase = noteBase.substring(0, noteBase.length - 3); + newFolderPath = ''; + if (noteDir.length > 0) { + newFolderPath = noteDir + '/' + noteBase; + } + else { + newFolderPath = noteBase; + } + // put it to rename + if (oldFolderPath != newFolderPath) { + this.filesToRename.push(oldFolderPath); + this.filesToRename.push(newFolderPath); + } + } + _a.label = 4; + case 4: + // only do once a time + if (!this.filesToRenameSet && this.filesToRename.length > 0) { + this.filesToRenameSet = true; + setTimeout(function () { + // console.log('rename is running after 1 s.'); + if (_this.filesToRename.length) { + var oldFolderPath = _this.filesToRename[0]; + var newFolderPath = _this.filesToRename[1]; + // console.log('Mod Old Path:', oldFolderPath); + // console.log('Mod New Path:', newFolderPath); + _this.app.vault.adapter.rename(oldFolderPath, newFolderPath); + _this.filesToRename = []; + _this.filesToRenameSet = false; + } + }, 1000); + } + return [2 /*return*/]; + } + }); + }); + }; + return FolderNote; +}()); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) _setPrototypeOf(subClass, superClass); +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; +} + +function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } + + return _assertThisInitialized(self); +} + +function _createSuper(Derived) { + var hasNativeReflectConstruct = _isNativeReflectConstruct(); + + return function () { + var Super = _getPrototypeOf(Derived), + result; + + if (hasNativeReflectConstruct) { + var NewTarget = _getPrototypeOf(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; +} + +function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + + return object; +} + +function _get(target, property, receiver) { + if (typeof Reflect !== "undefined" && Reflect.get) { + _get = Reflect.get; + } else { + _get = function _get(target, property, receiver) { + var base = _superPropBase(target, property); + + if (!base) return; + var desc = Object.getOwnPropertyDescriptor(base, property); + + if (desc.get) { + return desc.get.call(receiver); + } + + return desc.value; + }; + } + + return _get(target, property, receiver || target); +} + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} + +function _toArray(arr) { + return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} + +function _iterableToArrayLimit(arr, i) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _createForOfIteratorHelper(o) { + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + var i = 0; + + var F = function () {}; + + return { + s: F, + n: function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function (e) { + throw e; + }, + f: F + }; + } + + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var it, + normalCompletion = true, + didErr = false, + err; + return { + s: function () { + it = o[Symbol.iterator](); + }, + n: function () { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function (e) { + didErr = true; + err = e; + }, + f: function () { + try { + if (!normalCompletion && it.return != null) it.return(); + } finally { + if (didErr) throw err; + } + } + }; +} + +var Char = { + ANCHOR: '&', + COMMENT: '#', + TAG: '!', + DIRECTIVES_END: '-', + DOCUMENT_END: '.' +}; +var Type = { + ALIAS: 'ALIAS', + BLANK_LINE: 'BLANK_LINE', + BLOCK_FOLDED: 'BLOCK_FOLDED', + BLOCK_LITERAL: 'BLOCK_LITERAL', + COMMENT: 'COMMENT', + DIRECTIVE: 'DIRECTIVE', + DOCUMENT: 'DOCUMENT', + FLOW_MAP: 'FLOW_MAP', + FLOW_SEQ: 'FLOW_SEQ', + MAP: 'MAP', + MAP_KEY: 'MAP_KEY', + MAP_VALUE: 'MAP_VALUE', + PLAIN: 'PLAIN', + QUOTE_DOUBLE: 'QUOTE_DOUBLE', + QUOTE_SINGLE: 'QUOTE_SINGLE', + SEQ: 'SEQ', + SEQ_ITEM: 'SEQ_ITEM' +}; +var defaultTagPrefix = 'tag:yaml.org,2002:'; +var defaultTags = { + MAP: 'tag:yaml.org,2002:map', + SEQ: 'tag:yaml.org,2002:seq', + STR: 'tag:yaml.org,2002:str' +}; + +function findLineStarts(src) { + var ls = [0]; + var offset = src.indexOf('\n'); + + while (offset !== -1) { + offset += 1; + ls.push(offset); + offset = src.indexOf('\n', offset); + } + + return ls; +} + +function getSrcInfo(cst) { + var lineStarts, src; + + if (typeof cst === 'string') { + lineStarts = findLineStarts(cst); + src = cst; + } else { + if (Array.isArray(cst)) cst = cst[0]; + + if (cst && cst.context) { + if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src); + lineStarts = cst.lineStarts; + src = cst.context.src; + } + } + + return { + lineStarts: lineStarts, + src: src + }; +} +/** + * @typedef {Object} LinePos - One-indexed position in the source + * @property {number} line + * @property {number} col + */ + +/** + * Determine the line/col position matching a character offset. + * + * Accepts a source string or a CST document as the second parameter. With + * the latter, starting indices for lines are cached in the document as + * `lineStarts: number[]`. + * + * Returns a one-indexed `{ line, col }` location if found, or + * `undefined` otherwise. + * + * @param {number} offset + * @param {string|Document|Document[]} cst + * @returns {?LinePos} + */ + + +function getLinePos(offset, cst) { + if (typeof offset !== 'number' || offset < 0) return null; + + var _getSrcInfo = getSrcInfo(cst), + lineStarts = _getSrcInfo.lineStarts, + src = _getSrcInfo.src; + + if (!lineStarts || !src || offset > src.length) return null; + + for (var i = 0; i < lineStarts.length; ++i) { + var start = lineStarts[i]; + + if (offset < start) { + return { + line: i, + col: offset - lineStarts[i - 1] + 1 + }; + } + + if (offset === start) return { + line: i + 1, + col: 1 + }; + } + + var line = lineStarts.length; + return { + line: line, + col: offset - lineStarts[line - 1] + 1 + }; +} +/** + * Get a specified line from the source. + * + * Accepts a source string or a CST document as the second parameter. With + * the latter, starting indices for lines are cached in the document as + * `lineStarts: number[]`. + * + * Returns the line as a string if found, or `null` otherwise. + * + * @param {number} line One-indexed line number + * @param {string|Document|Document[]} cst + * @returns {?string} + */ + +function getLine(line, cst) { + var _getSrcInfo2 = getSrcInfo(cst), + lineStarts = _getSrcInfo2.lineStarts, + src = _getSrcInfo2.src; + + if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null; + var start = lineStarts[line - 1]; + var end = lineStarts[line]; // undefined for last line; that's ok for slice() + + while (end && end > start && src[end - 1] === '\n') { + --end; + } + + return src.slice(start, end); +} +/** + * Pretty-print the starting line from the source indicated by the range `pos` + * + * Trims output to `maxWidth` chars while keeping the starting column visible, + * using `…` at either end to indicate dropped characters. + * + * Returns a two-line string (or `null`) with `\n` as separator; the second line + * will hold appropriately indented `^` marks indicating the column range. + * + * @param {Object} pos + * @param {LinePos} pos.start + * @param {LinePos} [pos.end] + * @param {string|Document|Document[]*} cst + * @param {number} [maxWidth=80] + * @returns {?string} + */ + +function getPrettyContext(_ref, cst) { + var start = _ref.start, + end = _ref.end; + var maxWidth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 80; + var src = getLine(start.line, cst); + if (!src) return null; + var col = start.col; + + if (src.length > maxWidth) { + if (col <= maxWidth - 10) { + src = src.substr(0, maxWidth - 1) + '…'; + } else { + var halfWidth = Math.round(maxWidth / 2); + if (src.length > col + halfWidth) src = src.substr(0, col + halfWidth - 1) + '…'; + col -= src.length - maxWidth; + src = '…' + src.substr(1 - maxWidth); + } + } + + var errLen = 1; + var errEnd = ''; + + if (end) { + if (end.line === start.line && col + (end.col - start.col) <= maxWidth + 1) { + errLen = end.col - start.col; + } else { + errLen = Math.min(src.length + 1, maxWidth) - col; + errEnd = '…'; + } + } + + var offset = col > 1 ? ' '.repeat(col - 1) : ''; + var err = '^'.repeat(errLen); + return "".concat(src, "\n").concat(offset).concat(err).concat(errEnd); +} + +var Range = /*#__PURE__*/function () { + _createClass(Range, null, [{ + key: "copy", + value: function copy(orig) { + return new Range(orig.start, orig.end); + } + }]); + + function Range(start, end) { + _classCallCheck(this, Range); + + this.start = start; + this.end = end || start; + } + + _createClass(Range, [{ + key: "isEmpty", + value: function isEmpty() { + return typeof this.start !== 'number' || !this.end || this.end <= this.start; + } + /** + * Set `origStart` and `origEnd` to point to the original source range for + * this node, which may differ due to dropped CR characters. + * + * @param {number[]} cr - Positions of dropped CR characters + * @param {number} offset - Starting index of `cr` from the last call + * @returns {number} - The next offset, matching the one found for `origStart` + */ + + }, { + key: "setOrigRange", + value: function setOrigRange(cr, offset) { + var start = this.start, + end = this.end; + + if (cr.length === 0 || end <= cr[0]) { + this.origStart = start; + this.origEnd = end; + return offset; + } + + var i = offset; + + while (i < cr.length) { + if (cr[i] > start) break;else ++i; + } + + this.origStart = start + i; + var nextOffset = i; + + while (i < cr.length) { + // if end was at \n, it should now be at \r + if (cr[i] >= end) break;else ++i; + } + + this.origEnd = end + i; + return nextOffset; + } + }]); + + return Range; +}(); + +/** Root class of all nodes */ + +var Node = /*#__PURE__*/function () { + _createClass(Node, null, [{ + key: "addStringTerminator", + value: function addStringTerminator(src, offset, str) { + if (str[str.length - 1] === '\n') return str; + var next = Node.endOfWhiteSpace(src, offset); + return next >= src.length || src[next] === '\n' ? str + '\n' : str; + } // ^(---|...) + + }, { + key: "atDocumentBoundary", + value: function atDocumentBoundary(src, offset, sep) { + var ch0 = src[offset]; + if (!ch0) return true; + var prev = src[offset - 1]; + if (prev && prev !== '\n') return false; + + if (sep) { + if (ch0 !== sep) return false; + } else { + if (ch0 !== Char.DIRECTIVES_END && ch0 !== Char.DOCUMENT_END) return false; + } + + var ch1 = src[offset + 1]; + var ch2 = src[offset + 2]; + if (ch1 !== ch0 || ch2 !== ch0) return false; + var ch3 = src[offset + 3]; + return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' '; + } + }, { + key: "endOfIdentifier", + value: function endOfIdentifier(src, offset) { + var ch = src[offset]; + var isVerbatim = ch === '<'; + var notOk = isVerbatim ? ['\n', '\t', ' ', '>'] : ['\n', '\t', ' ', '[', ']', '{', '}', ',']; + + while (ch && notOk.indexOf(ch) === -1) { + ch = src[offset += 1]; + } + + if (isVerbatim && ch === '>') offset += 1; + return offset; + } + }, { + key: "endOfIndent", + value: function endOfIndent(src, offset) { + var ch = src[offset]; + + while (ch === ' ') { + ch = src[offset += 1]; + } + + return offset; + } + }, { + key: "endOfLine", + value: function endOfLine(src, offset) { + var ch = src[offset]; + + while (ch && ch !== '\n') { + ch = src[offset += 1]; + } + + return offset; + } + }, { + key: "endOfWhiteSpace", + value: function endOfWhiteSpace(src, offset) { + var ch = src[offset]; + + while (ch === '\t' || ch === ' ') { + ch = src[offset += 1]; + } + + return offset; + } + }, { + key: "startOfLine", + value: function startOfLine(src, offset) { + var ch = src[offset - 1]; + if (ch === '\n') return offset; + + while (ch && ch !== '\n') { + ch = src[offset -= 1]; + } + + return offset + 1; + } + /** + * End of indentation, or null if the line's indent level is not more + * than `indent` + * + * @param {string} src + * @param {number} indent + * @param {number} lineStart + * @returns {?number} + */ + + }, { + key: "endOfBlockIndent", + value: function endOfBlockIndent(src, indent, lineStart) { + var inEnd = Node.endOfIndent(src, lineStart); + + if (inEnd > lineStart + indent) { + return inEnd; + } else { + var wsEnd = Node.endOfWhiteSpace(src, inEnd); + var ch = src[wsEnd]; + if (!ch || ch === '\n') return wsEnd; + } + + return null; + } + }, { + key: "atBlank", + value: function atBlank(src, offset, endAsBlank) { + var ch = src[offset]; + return ch === '\n' || ch === '\t' || ch === ' ' || endAsBlank && !ch; + } + }, { + key: "nextNodeIsIndented", + value: function nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) { + if (!ch || indentDiff < 0) return false; + if (indentDiff > 0) return true; + return indicatorAsIndent && ch === '-'; + } // should be at line or string end, or at next non-whitespace char + + }, { + key: "normalizeOffset", + value: function normalizeOffset(src, offset) { + var ch = src[offset]; + return !ch ? offset : ch !== '\n' && src[offset - 1] === '\n' ? offset - 1 : Node.endOfWhiteSpace(src, offset); + } // fold single newline into space, multiple newlines to N - 1 newlines + // presumes src[offset] === '\n' + + }, { + key: "foldNewline", + value: function foldNewline(src, offset, indent) { + var inCount = 0; + var error = false; + var fold = ''; + var ch = src[offset + 1]; + + while (ch === ' ' || ch === '\t' || ch === '\n') { + switch (ch) { + case '\n': + inCount = 0; + offset += 1; + fold += '\n'; + break; + + case '\t': + if (inCount <= indent) error = true; + offset = Node.endOfWhiteSpace(src, offset + 2) - 1; + break; + + case ' ': + inCount += 1; + offset += 1; + break; + } + + ch = src[offset + 1]; + } + + if (!fold) fold = ' '; + if (ch && inCount <= indent) error = true; + return { + fold: fold, + offset: offset, + error: error + }; + } + }]); + + function Node(type, props, context) { + _classCallCheck(this, Node); + + Object.defineProperty(this, 'context', { + value: context || null, + writable: true + }); + this.error = null; + this.range = null; + this.valueRange = null; + this.props = props || []; + this.type = type; + this.value = null; + } + + _createClass(Node, [{ + key: "getPropValue", + value: function getPropValue(idx, key, skipKey) { + if (!this.context) return null; + var src = this.context.src; + var prop = this.props[idx]; + return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null; + } + }, { + key: "commentHasRequiredWhitespace", + value: function commentHasRequiredWhitespace(start) { + var src = this.context.src; + if (this.header && start === this.header.end) return false; + if (!this.valueRange) return false; + var end = this.valueRange.end; + return start !== end || Node.atBlank(src, end - 1); + } + }, { + key: "parseComment", + value: function parseComment(start) { + var src = this.context.src; + + if (src[start] === Char.COMMENT) { + var end = Node.endOfLine(src, start + 1); + var commentRange = new Range(start, end); + this.props.push(commentRange); + return end; + } + + return start; + } + /** + * Populates the `origStart` and `origEnd` values of all ranges for this + * node. Extended by child classes to handle descendant nodes. + * + * @param {number[]} cr - Positions of dropped CR characters + * @param {number} offset - Starting index of `cr` from the last call + * @returns {number} - The next offset, matching the one found for `origStart` + */ + + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + if (this.range) offset = this.range.setOrigRange(cr, offset); + if (this.valueRange) this.valueRange.setOrigRange(cr, offset); + this.props.forEach(function (prop) { + return prop.setOrigRange(cr, offset); + }); + return offset; + } + }, { + key: "toString", + value: function toString() { + var src = this.context.src, + range = this.range, + value = this.value; + if (value != null) return value; + var str = src.slice(range.start, range.end); + return Node.addStringTerminator(src, range.end, str); + } + }, { + key: "anchor", + get: function get() { + for (var i = 0; i < this.props.length; ++i) { + var anchor = this.getPropValue(i, Char.ANCHOR, true); + if (anchor != null) return anchor; + } + + return null; + } + }, { + key: "comment", + get: function get() { + var comments = []; + + for (var i = 0; i < this.props.length; ++i) { + var comment = this.getPropValue(i, Char.COMMENT, true); + if (comment != null) comments.push(comment); + } + + return comments.length > 0 ? comments.join('\n') : null; + } + }, { + key: "hasComment", + get: function get() { + if (this.context) { + var src = this.context.src; + + for (var i = 0; i < this.props.length; ++i) { + if (src[this.props[i].start] === Char.COMMENT) return true; + } + } + + return false; + } + }, { + key: "hasProps", + get: function get() { + if (this.context) { + var src = this.context.src; + + for (var i = 0; i < this.props.length; ++i) { + if (src[this.props[i].start] !== Char.COMMENT) return true; + } + } + + return false; + } + }, { + key: "includesTrailingLines", + get: function get() { + return false; + } + }, { + key: "jsonLike", + get: function get() { + var jsonLikeTypes = [Type.FLOW_MAP, Type.FLOW_SEQ, Type.QUOTE_DOUBLE, Type.QUOTE_SINGLE]; + return jsonLikeTypes.indexOf(this.type) !== -1; + } + }, { + key: "rangeAsLinePos", + get: function get() { + if (!this.range || !this.context) return undefined; + var start = getLinePos(this.range.start, this.context.root); + if (!start) return undefined; + var end = getLinePos(this.range.end, this.context.root); + return { + start: start, + end: end + }; + } + }, { + key: "rawValue", + get: function get() { + if (!this.valueRange || !this.context) return null; + var _this$valueRange = this.valueRange, + start = _this$valueRange.start, + end = _this$valueRange.end; + return this.context.src.slice(start, end); + } + }, { + key: "tag", + get: function get() { + for (var i = 0; i < this.props.length; ++i) { + var tag = this.getPropValue(i, Char.TAG, false); + + if (tag != null) { + if (tag[1] === '<') { + return { + verbatim: tag.slice(2, -1) + }; + } else { + // eslint-disable-next-line no-unused-vars + var _tag$match = tag.match(/^(.*!)([^!]*)$/), + _tag$match2 = _slicedToArray(_tag$match, 3); + _tag$match2[0]; + var handle = _tag$match2[1], + suffix = _tag$match2[2]; + + return { + handle: handle, + suffix: suffix + }; + } + } + } + + return null; + } + }, { + key: "valueRangeContainsNewline", + get: function get() { + if (!this.valueRange || !this.context) return false; + var _this$valueRange2 = this.valueRange, + start = _this$valueRange2.start, + end = _this$valueRange2.end; + var src = this.context.src; + + for (var i = start; i < end; ++i) { + if (src[i] === '\n') return true; + } + + return false; + } + }]); + + return Node; +}(); + +var YAMLError = /*#__PURE__*/function (_Error) { + _inherits(YAMLError, _Error); + + var _super = _createSuper(YAMLError); + + function YAMLError(name, source, message) { + var _this; + + _classCallCheck(this, YAMLError); + + if (!message || !(source instanceof Node)) throw new Error("Invalid arguments for new ".concat(name)); + _this = _super.call(this); + _this.name = name; + _this.message = message; + _this.source = source; + return _this; + } + + _createClass(YAMLError, [{ + key: "makePretty", + value: function makePretty() { + if (!this.source) return; + this.nodeType = this.source.type; + var cst = this.source.context && this.source.context.root; + + if (typeof this.offset === 'number') { + this.range = new Range(this.offset, this.offset + 1); + var start = cst && getLinePos(this.offset, cst); + + if (start) { + var end = { + line: start.line, + col: start.col + 1 + }; + this.linePos = { + start: start, + end: end + }; + } + + delete this.offset; + } else { + this.range = this.source.range; + this.linePos = this.source.rangeAsLinePos; + } + + if (this.linePos) { + var _this$linePos$start = this.linePos.start, + line = _this$linePos$start.line, + col = _this$linePos$start.col; + this.message += " at line ".concat(line, ", column ").concat(col); + var ctx = cst && getPrettyContext(this.linePos, cst); + if (ctx) this.message += ":\n\n".concat(ctx, "\n"); + } + + delete this.source; + } + }]); + + return YAMLError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +var YAMLReferenceError = /*#__PURE__*/function (_YAMLError) { + _inherits(YAMLReferenceError, _YAMLError); + + var _super2 = _createSuper(YAMLReferenceError); + + function YAMLReferenceError(source, message) { + _classCallCheck(this, YAMLReferenceError); + + return _super2.call(this, 'YAMLReferenceError', source, message); + } + + return YAMLReferenceError; +}(YAMLError); +var YAMLSemanticError = /*#__PURE__*/function (_YAMLError2) { + _inherits(YAMLSemanticError, _YAMLError2); + + var _super3 = _createSuper(YAMLSemanticError); + + function YAMLSemanticError(source, message) { + _classCallCheck(this, YAMLSemanticError); + + return _super3.call(this, 'YAMLSemanticError', source, message); + } + + return YAMLSemanticError; +}(YAMLError); +var YAMLSyntaxError = /*#__PURE__*/function (_YAMLError3) { + _inherits(YAMLSyntaxError, _YAMLError3); + + var _super4 = _createSuper(YAMLSyntaxError); + + function YAMLSyntaxError(source, message) { + _classCallCheck(this, YAMLSyntaxError); + + return _super4.call(this, 'YAMLSyntaxError', source, message); + } + + return YAMLSyntaxError; +}(YAMLError); +var YAMLWarning = /*#__PURE__*/function (_YAMLError4) { + _inherits(YAMLWarning, _YAMLError4); + + var _super5 = _createSuper(YAMLWarning); + + function YAMLWarning(source, message) { + _classCallCheck(this, YAMLWarning); + + return _super5.call(this, 'YAMLWarning', source, message); + } + + return YAMLWarning; +}(YAMLError); + +var PlainValue = /*#__PURE__*/function (_Node) { + _inherits(PlainValue, _Node); + + var _super = _createSuper(PlainValue); + + function PlainValue() { + _classCallCheck(this, PlainValue); + + return _super.apply(this, arguments); + } + + _createClass(PlainValue, [{ + key: "parseBlockValue", + value: function parseBlockValue(start) { + var _this$context = this.context, + indent = _this$context.indent, + inFlow = _this$context.inFlow, + src = _this$context.src; + var offset = start; + var valueEnd = start; + + for (var ch = src[offset]; ch === '\n'; ch = src[offset]) { + if (Node.atDocumentBoundary(src, offset + 1)) break; + var end = Node.endOfBlockIndent(src, indent, offset + 1); + if (end === null || src[end] === '#') break; + + if (src[end] === '\n') { + offset = end; + } else { + valueEnd = PlainValue.endOfLine(src, end, inFlow); + offset = valueEnd; + } + } + + if (this.valueRange.isEmpty()) this.valueRange.start = start; + this.valueRange.end = valueEnd; + return valueEnd; + } + /** + * Parses a plain value from the source + * + * Accepted forms are: + * ``` + * #comment + * + * first line + * + * first line #comment + * + * first line + * block + * lines + * + * #comment + * block + * lines + * ``` + * where block lines are empty or have an indent level greater than `indent`. + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar, may be `\n` + */ + + }, { + key: "parse", + value: function parse(context, start) { + this.context = context; + var inFlow = context.inFlow, + src = context.src; + var offset = start; + var ch = src[offset]; + + if (ch && ch !== '#' && ch !== '\n') { + offset = PlainValue.endOfLine(src, start, inFlow); + } + + this.valueRange = new Range(start, offset); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + + if (!this.hasComment || this.valueRange.isEmpty()) { + offset = this.parseBlockValue(offset); + } + + return offset; + } + }, { + key: "strValue", + get: function get() { + if (!this.valueRange || !this.context) return null; + var _this$valueRange = this.valueRange, + start = _this$valueRange.start, + end = _this$valueRange.end; + var src = this.context.src; + var ch = src[end - 1]; + + while (start < end && (ch === '\n' || ch === '\t' || ch === ' ')) { + ch = src[--end - 1]; + } + + var str = ''; + + for (var i = start; i < end; ++i) { + var _ch = src[i]; + + if (_ch === '\n') { + var _Node$foldNewline = Node.foldNewline(src, i, -1), + fold = _Node$foldNewline.fold, + offset = _Node$foldNewline.offset; + + str += fold; + i = offset; + } else if (_ch === ' ' || _ch === '\t') { + // trim trailing whitespace + var wsStart = i; + var next = src[i + 1]; + + while (i < end && (next === ' ' || next === '\t')) { + i += 1; + next = src[i + 1]; + } + + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : _ch; + } else { + str += _ch; + } + } + + var ch0 = src[start]; + + switch (ch0) { + case '\t': + { + var msg = 'Plain value cannot start with a tab character'; + var errors = [new YAMLSemanticError(this, msg)]; + return { + errors: errors, + str: str + }; + } + + case '@': + case '`': + { + var _msg = "Plain value cannot start with reserved character ".concat(ch0); + + var _errors = [new YAMLSemanticError(this, _msg)]; + return { + errors: _errors, + str: str + }; + } + + default: + return str; + } + } + }], [{ + key: "endOfLine", + value: function endOfLine(src, start, inFlow) { + var ch = src[start]; + var offset = start; + + while (ch && ch !== '\n') { + if (inFlow && (ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')) break; + var next = src[offset + 1]; + if (ch === ':' && (!next || next === '\n' || next === '\t' || next === ' ' || inFlow && next === ',')) break; + if ((ch === ' ' || ch === '\t') && next === '#') break; + offset += 1; + ch = next; + } + + return offset; + } + }]); + + return PlainValue; +}(Node); + +var BlankLine = /*#__PURE__*/function (_Node) { + _inherits(BlankLine, _Node); + + var _super = _createSuper(BlankLine); + + function BlankLine() { + _classCallCheck(this, BlankLine); + + return _super.call(this, Type.BLANK_LINE); + } + /* istanbul ignore next */ + + + _createClass(BlankLine, [{ + key: "parse", + + /** + * Parses a blank line from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first \n character + * @returns {number} - Index of the character after this + */ + value: function parse(context, start) { + this.context = context; + this.range = new Range(start, start + 1); + return start + 1; + } + }, { + key: "includesTrailingLines", + get: function get() { + // This is never called from anywhere, but if it were, + // this is the value it should return. + return true; + } + }]); + + return BlankLine; +}(Node); + +var CollectionItem = /*#__PURE__*/function (_Node) { + _inherits(CollectionItem, _Node); + + var _super = _createSuper(CollectionItem); + + function CollectionItem(type, props) { + var _this; + + _classCallCheck(this, CollectionItem); + + _this = _super.call(this, type, props); + _this.node = null; + return _this; + } + + _createClass(CollectionItem, [{ + key: "parse", + + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ + value: function parse(context, start) { + this.context = context; + var parseNode = context.parseNode, + src = context.src; + var atLineStart = context.atLineStart, + lineStart = context.lineStart; + if (!atLineStart && this.type === Type.SEQ_ITEM) this.error = new YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line'); + var indent = atLineStart ? start - lineStart : context.indent; + var offset = Node.endOfWhiteSpace(src, start + 1); + var ch = src[offset]; + var inlineComment = ch === '#'; + var comments = []; + var blankLine = null; + + while (ch === '\n' || ch === '#') { + if (ch === '#') { + var _end = Node.endOfLine(src, offset + 1); + + comments.push(new Range(offset, _end)); + offset = _end; + } else { + atLineStart = true; + lineStart = offset + 1; + var wsEnd = Node.endOfWhiteSpace(src, lineStart); + + if (src[wsEnd] === '\n' && comments.length === 0) { + blankLine = new BlankLine(); + lineStart = blankLine.parse({ + src: src + }, lineStart); + } + + offset = Node.endOfIndent(src, lineStart); + } + + ch = src[offset]; + } + + if (Node.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== Type.SEQ_ITEM)) { + this.node = parseNode({ + atLineStart: atLineStart, + inCollection: false, + indent: indent, + lineStart: lineStart, + parent: this + }, offset); + } else if (ch && lineStart > start + 1) { + offset = lineStart - 1; + } + + if (this.node) { + if (blankLine) { + // Only blank lines preceding non-empty nodes are captured. Note that + // this means that collection item range start indices do not always + // increase monotonically. -- eemeli/yaml#126 + var items = context.parent.items || context.parent.contents; + if (items) items.push(blankLine); + } + + if (comments.length) Array.prototype.push.apply(this.props, comments); + offset = this.node.range.end; + } else { + if (inlineComment) { + var c = comments[0]; + this.props.push(c); + offset = c.end; + } else { + offset = Node.endOfLine(src, start + 1); + } + } + + var end = this.node ? this.node.valueRange.end : offset; + this.valueRange = new Range(start, end); + return offset; + } + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + offset = _get(_getPrototypeOf(CollectionItem.prototype), "setOrigRanges", this).call(this, cr, offset); + return this.node ? this.node.setOrigRanges(cr, offset) : offset; + } + }, { + key: "toString", + value: function toString() { + var src = this.context.src, + node = this.node, + range = this.range, + value = this.value; + if (value != null) return value; + var str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end); + return Node.addStringTerminator(src, range.end, str); + } + }, { + key: "includesTrailingLines", + get: function get() { + return !!this.node && this.node.includesTrailingLines; + } + }]); + + return CollectionItem; +}(Node); + +var Comment = /*#__PURE__*/function (_Node) { + _inherits(Comment, _Node); + + var _super = _createSuper(Comment); + + function Comment() { + _classCallCheck(this, Comment); + + return _super.call(this, Type.COMMENT); + } + /** + * Parses a comment line from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ + + + _createClass(Comment, [{ + key: "parse", + value: function parse(context, start) { + this.context = context; + var offset = this.parseComment(start); + this.range = new Range(start, offset); + return offset; + } + }]); + + return Comment; +}(Node); + +function grabCollectionEndComments(node) { + var cnode = node; + + while (cnode instanceof CollectionItem) { + cnode = cnode.node; + } + + if (!(cnode instanceof Collection)) return null; + var len = cnode.items.length; + var ci = -1; + + for (var i = len - 1; i >= 0; --i) { + var n = cnode.items[i]; + + if (n.type === Type.COMMENT) { + // Keep sufficiently indented comments with preceding node + var _n$context = n.context, + indent = _n$context.indent, + lineStart = _n$context.lineStart; + if (indent > 0 && n.range.start >= lineStart + indent) break; + ci = i; + } else if (n.type === Type.BLANK_LINE) ci = i;else break; + } + + if (ci === -1) return null; + var ca = cnode.items.splice(ci, len - ci); + var prevEnd = ca[0].range.start; + + while (true) { + cnode.range.end = prevEnd; + if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd; + if (cnode === node) break; + cnode = cnode.context.parent; + } + + return ca; +} +var Collection = /*#__PURE__*/function (_Node) { + _inherits(Collection, _Node); + + var _super = _createSuper(Collection); + + _createClass(Collection, null, [{ + key: "nextContentHasIndent", + value: function nextContentHasIndent(src, offset, indent) { + var lineStart = Node.endOfLine(src, offset) + 1; + offset = Node.endOfWhiteSpace(src, lineStart); + var ch = src[offset]; + if (!ch) return false; + if (offset >= lineStart + indent) return true; + if (ch !== '#' && ch !== '\n') return false; + return Collection.nextContentHasIndent(src, offset, indent); + } + }]); + + function Collection(firstItem) { + var _this; + + _classCallCheck(this, Collection); + + _this = _super.call(this, firstItem.type === Type.SEQ_ITEM ? Type.SEQ : Type.MAP); + + for (var i = firstItem.props.length - 1; i >= 0; --i) { + if (firstItem.props[i].start < firstItem.context.lineStart) { + // props on previous line are assumed by the collection + _this.props = firstItem.props.slice(0, i + 1); + firstItem.props = firstItem.props.slice(i + 1); + var itemRange = firstItem.props[0] || firstItem.valueRange; + firstItem.range.start = itemRange.start; + break; + } + } + + _this.items = [firstItem]; + var ec = grabCollectionEndComments(firstItem); + if (ec) Array.prototype.push.apply(_this.items, ec); + return _this; + } + + _createClass(Collection, [{ + key: "parse", + + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ + value: function parse(context, start) { + this.context = context; + var parseNode = context.parseNode, + src = context.src; // It's easier to recalculate lineStart here rather than tracking down the + // last context from which to read it -- eemeli/yaml#2 + + var lineStart = Node.startOfLine(src, start); + var firstItem = this.items[0]; // First-item context needs to be correct for later comment handling + // -- eemeli/yaml#17 + + firstItem.context.parent = this; + this.valueRange = Range.copy(firstItem.valueRange); + var indent = firstItem.range.start - firstItem.context.lineStart; + var offset = start; + offset = Node.normalizeOffset(src, offset); + var ch = src[offset]; + var atLineStart = Node.endOfWhiteSpace(src, lineStart) === offset; + var prevIncludesTrailingLines = false; + + while (ch) { + while (ch === '\n' || ch === '#') { + if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) { + var blankLine = new BlankLine(); + offset = blankLine.parse({ + src: src + }, offset); + this.valueRange.end = offset; + + if (offset >= src.length) { + ch = null; + break; + } + + this.items.push(blankLine); + offset -= 1; // blankLine.parse() consumes terminal newline + } else if (ch === '#') { + if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) { + return offset; + } + + var comment = new Comment(); + offset = comment.parse({ + indent: indent, + lineStart: lineStart, + src: src + }, offset); + this.items.push(comment); + this.valueRange.end = offset; + + if (offset >= src.length) { + ch = null; + break; + } + } + + lineStart = offset + 1; + offset = Node.endOfIndent(src, lineStart); + + if (Node.atBlank(src, offset)) { + var wsEnd = Node.endOfWhiteSpace(src, offset); + var next = src[wsEnd]; + + if (!next || next === '\n' || next === '#') { + offset = wsEnd; + } + } + + ch = src[offset]; + atLineStart = true; + } + + if (!ch) { + break; + } + + if (offset !== lineStart + indent && (atLineStart || ch !== ':')) { + if (offset < lineStart + indent) { + if (lineStart > start) offset = lineStart; + break; + } else if (!this.error) { + var msg = 'All collection items must start at the same column'; + this.error = new YAMLSyntaxError(this, msg); + } + } + + if (firstItem.type === Type.SEQ_ITEM) { + if (ch !== '-') { + if (lineStart > start) offset = lineStart; + break; + } + } else if (ch === '-' && !this.error) { + // map key may start with -, as long as it's followed by a non-whitespace char + var _next = src[offset + 1]; + + if (!_next || _next === '\n' || _next === '\t' || _next === ' ') { + var _msg = 'A collection cannot be both a mapping and a sequence'; + this.error = new YAMLSyntaxError(this, _msg); + } + } + + var node = parseNode({ + atLineStart: atLineStart, + inCollection: true, + indent: indent, + lineStart: lineStart, + parent: this + }, offset); + if (!node) return offset; // at next document start + + this.items.push(node); + this.valueRange.end = node.valueRange.end; + offset = Node.normalizeOffset(src, node.range.end); + ch = src[offset]; + atLineStart = false; + prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range + // has advanced to check the current line's indentation level + // -- eemeli/yaml#10 & eemeli/yaml#38 + + if (ch) { + var ls = offset - 1; + var prev = src[ls]; + + while (prev === ' ' || prev === '\t') { + prev = src[--ls]; + } + + if (prev === '\n') { + lineStart = ls + 1; + atLineStart = true; + } + } + + var ec = grabCollectionEndComments(node); + if (ec) Array.prototype.push.apply(this.items, ec); + } + + return offset; + } + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + offset = _get(_getPrototypeOf(Collection.prototype), "setOrigRanges", this).call(this, cr, offset); + this.items.forEach(function (node) { + offset = node.setOrigRanges(cr, offset); + }); + return offset; + } + }, { + key: "toString", + value: function toString() { + var src = this.context.src, + items = this.items, + range = this.range, + value = this.value; + if (value != null) return value; + var str = src.slice(range.start, items[0].range.start) + String(items[0]); + + for (var i = 1; i < items.length; ++i) { + var item = items[i]; + var _item$context = item.context, + atLineStart = _item$context.atLineStart, + indent = _item$context.indent; + if (atLineStart) for (var _i = 0; _i < indent; ++_i) { + str += ' '; + } + str += String(item); + } + + return Node.addStringTerminator(src, range.end, str); + } + }, { + key: "includesTrailingLines", + get: function get() { + return this.items.length > 0; + } + }]); + + return Collection; +}(Node); + +var Directive = /*#__PURE__*/function (_Node) { + _inherits(Directive, _Node); + + var _super = _createSuper(Directive); + + function Directive() { + var _this; + + _classCallCheck(this, Directive); + + _this = _super.call(this, Type.DIRECTIVE); + _this.name = null; + return _this; + } + + _createClass(Directive, [{ + key: "parseName", + value: function parseName(start) { + var src = this.context.src; + var offset = start; + var ch = src[offset]; + + while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') { + ch = src[offset += 1]; + } + + this.name = src.slice(start, offset); + return offset; + } + }, { + key: "parseParameters", + value: function parseParameters(start) { + var src = this.context.src; + var offset = start; + var ch = src[offset]; + + while (ch && ch !== '\n' && ch !== '#') { + ch = src[offset += 1]; + } + + this.valueRange = new Range(start, offset); + return offset; + } + }, { + key: "parse", + value: function parse(context, start) { + this.context = context; + var offset = this.parseName(start + 1); + offset = this.parseParameters(offset); + offset = this.parseComment(offset); + this.range = new Range(start, offset); + return offset; + } + }, { + key: "parameters", + get: function get() { + var raw = this.rawValue; + return raw ? raw.trim().split(/[ \t]+/) : []; + } + }]); + + return Directive; +}(Node); + +var Document = /*#__PURE__*/function (_Node) { + _inherits(Document, _Node); + + var _super = _createSuper(Document); + + _createClass(Document, null, [{ + key: "startCommentOrEndBlankLine", + value: function startCommentOrEndBlankLine(src, start) { + var offset = Node.endOfWhiteSpace(src, start); + var ch = src[offset]; + return ch === '#' || ch === '\n' ? offset : start; + } + }]); + + function Document() { + var _this; + + _classCallCheck(this, Document); + + _this = _super.call(this, Type.DOCUMENT); + _this.directives = null; + _this.contents = null; + _this.directivesEndMarker = null; + _this.documentEndMarker = null; + return _this; + } + + _createClass(Document, [{ + key: "parseDirectives", + value: function parseDirectives(start) { + var src = this.context.src; + this.directives = []; + var atLineStart = true; + var hasDirectives = false; + var offset = start; + + while (!Node.atDocumentBoundary(src, offset, Char.DIRECTIVES_END)) { + offset = Document.startCommentOrEndBlankLine(src, offset); + + switch (src[offset]) { + case '\n': + if (atLineStart) { + var blankLine = new BlankLine(); + offset = blankLine.parse({ + src: src + }, offset); + + if (offset < src.length) { + this.directives.push(blankLine); + } + } else { + offset += 1; + atLineStart = true; + } + + break; + + case '#': + { + var comment = new Comment(); + offset = comment.parse({ + src: src + }, offset); + this.directives.push(comment); + atLineStart = false; + } + break; + + case '%': + { + var directive = new Directive(); + offset = directive.parse({ + parent: this, + src: src + }, offset); + this.directives.push(directive); + hasDirectives = true; + atLineStart = false; + } + break; + + default: + if (hasDirectives) { + this.error = new YAMLSemanticError(this, 'Missing directives-end indicator line'); + } else if (this.directives.length > 0) { + this.contents = this.directives; + this.directives = []; + } + + return offset; + } + } + + if (src[offset]) { + this.directivesEndMarker = new Range(offset, offset + 3); + return offset + 3; + } + + if (hasDirectives) { + this.error = new YAMLSemanticError(this, 'Missing directives-end indicator line'); + } else if (this.directives.length > 0) { + this.contents = this.directives; + this.directives = []; + } + + return offset; + } + }, { + key: "parseContents", + value: function parseContents(start) { + var _this$context = this.context, + parseNode = _this$context.parseNode, + src = _this$context.src; + if (!this.contents) this.contents = []; + var lineStart = start; + + while (src[lineStart - 1] === '-') { + lineStart -= 1; + } + + var offset = Node.endOfWhiteSpace(src, start); + var atLineStart = lineStart === start; + this.valueRange = new Range(offset); + + while (!Node.atDocumentBoundary(src, offset, Char.DOCUMENT_END)) { + switch (src[offset]) { + case '\n': + if (atLineStart) { + var blankLine = new BlankLine(); + offset = blankLine.parse({ + src: src + }, offset); + + if (offset < src.length) { + this.contents.push(blankLine); + } + } else { + offset += 1; + atLineStart = true; + } + + lineStart = offset; + break; + + case '#': + { + var comment = new Comment(); + offset = comment.parse({ + src: src + }, offset); + this.contents.push(comment); + atLineStart = false; + } + break; + + default: + { + var iEnd = Node.endOfIndent(src, offset); + var context = { + atLineStart: atLineStart, + indent: -1, + inFlow: false, + inCollection: false, + lineStart: lineStart, + parent: this + }; + var node = parseNode(context, iEnd); + if (!node) return this.valueRange.end = iEnd; // at next document start + + this.contents.push(node); + offset = node.range.end; + atLineStart = false; + var ec = grabCollectionEndComments(node); + if (ec) Array.prototype.push.apply(this.contents, ec); + } + } + + offset = Document.startCommentOrEndBlankLine(src, offset); + } + + this.valueRange.end = offset; + + if (src[offset]) { + this.documentEndMarker = new Range(offset, offset + 3); + offset += 3; + + if (src[offset]) { + offset = Node.endOfWhiteSpace(src, offset); + + if (src[offset] === '#') { + var _comment = new Comment(); + + offset = _comment.parse({ + src: src + }, offset); + this.contents.push(_comment); + } + + switch (src[offset]) { + case '\n': + offset += 1; + break; + + case undefined: + break; + + default: + this.error = new YAMLSyntaxError(this, 'Document end marker line cannot have a non-comment suffix'); + } + } + } + + return offset; + } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ + + }, { + key: "parse", + value: function parse(context, start) { + context.root = this; + this.context = context; + var src = context.src; + var offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start; // skip BOM + + offset = this.parseDirectives(offset); + offset = this.parseContents(offset); + return offset; + } + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + offset = _get(_getPrototypeOf(Document.prototype), "setOrigRanges", this).call(this, cr, offset); + this.directives.forEach(function (node) { + offset = node.setOrigRanges(cr, offset); + }); + if (this.directivesEndMarker) offset = this.directivesEndMarker.setOrigRange(cr, offset); + this.contents.forEach(function (node) { + offset = node.setOrigRanges(cr, offset); + }); + if (this.documentEndMarker) offset = this.documentEndMarker.setOrigRange(cr, offset); + return offset; + } + }, { + key: "toString", + value: function toString() { + var contents = this.contents, + directives = this.directives, + value = this.value; + if (value != null) return value; + var str = directives.join(''); + + if (contents.length > 0) { + if (directives.length > 0 || contents[0].type === Type.COMMENT) str += '---\n'; + str += contents.join(''); + } + + if (str[str.length - 1] !== '\n') str += '\n'; + return str; + } + }]); + + return Document; +}(Node); + +var Alias = /*#__PURE__*/function (_Node) { + _inherits(Alias, _Node); + + var _super = _createSuper(Alias); + + function Alias() { + _classCallCheck(this, Alias); + + return _super.apply(this, arguments); + } + + _createClass(Alias, [{ + key: "parse", + + /** + * Parses an *alias from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ + value: function parse(context, start) { + this.context = context; + var src = context.src; + var offset = Node.endOfIdentifier(src, start + 1); + this.valueRange = new Range(start + 1, offset); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } + }]); + + return Alias; +}(Node); + +var Chomp = { + CLIP: 'CLIP', + KEEP: 'KEEP', + STRIP: 'STRIP' +}; +var BlockValue = /*#__PURE__*/function (_Node) { + _inherits(BlockValue, _Node); + + var _super = _createSuper(BlockValue); + + function BlockValue(type, props) { + var _this; + + _classCallCheck(this, BlockValue); + + _this = _super.call(this, type, props); + _this.blockIndent = null; + _this.chomping = Chomp.CLIP; + _this.header = null; + return _this; + } + + _createClass(BlockValue, [{ + key: "parseBlockHeader", + value: function parseBlockHeader(start) { + var src = this.context.src; + var offset = start + 1; + var bi = ''; + + while (true) { + var ch = src[offset]; + + switch (ch) { + case '-': + this.chomping = Chomp.STRIP; + break; + + case '+': + this.chomping = Chomp.KEEP; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + bi += ch; + break; + + default: + this.blockIndent = Number(bi) || null; + this.header = new Range(start, offset); + return offset; + } + + offset += 1; + } + } + }, { + key: "parseBlockValue", + value: function parseBlockValue(start) { + var _this$context = this.context, + indent = _this$context.indent, + src = _this$context.src; + var explicit = !!this.blockIndent; + var offset = start; + var valueEnd = start; + var minBlockIndent = 1; + + for (var ch = src[offset]; ch === '\n'; ch = src[offset]) { + offset += 1; + if (Node.atDocumentBoundary(src, offset)) break; + var end = Node.endOfBlockIndent(src, indent, offset); // should not include tab? + + if (end === null) break; + var _ch = src[end]; + var lineIndent = end - (offset + indent); + + if (!this.blockIndent) { + // no explicit block indent, none yet detected + if (src[end] !== '\n') { + // first line with non-whitespace content + if (lineIndent < minBlockIndent) { + var msg = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'; + this.error = new YAMLSemanticError(this, msg); + } + + this.blockIndent = lineIndent; + } else if (lineIndent > minBlockIndent) { + // empty line with more whitespace + minBlockIndent = lineIndent; + } + } else if (_ch && _ch !== '\n' && lineIndent < this.blockIndent) { + if (src[end] === '#') break; + + if (!this.error) { + var _src = explicit ? 'explicit indentation indicator' : 'first line'; + + var _msg = "Block scalars must not be less indented than their ".concat(_src); + + this.error = new YAMLSemanticError(this, _msg); + } + } + + if (src[end] === '\n') { + offset = end; + } else { + offset = valueEnd = Node.endOfLine(src, end); + } + } + + if (this.chomping !== Chomp.KEEP) { + offset = src[valueEnd] ? valueEnd + 1 : valueEnd; + } + + this.valueRange = new Range(start + 1, offset); + return offset; + } + /** + * Parses a block value from the source + * + * Accepted forms are: + * ``` + * BS + * block + * lines + * + * BS #comment + * block + * lines + * ``` + * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines + * are empty or have an indent level greater than `indent`. + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this block + */ + + }, { + key: "parse", + value: function parse(context, start) { + this.context = context; + var src = context.src; + var offset = this.parseBlockHeader(start); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + offset = this.parseBlockValue(offset); + return offset; + } + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + offset = _get(_getPrototypeOf(BlockValue.prototype), "setOrigRanges", this).call(this, cr, offset); + return this.header ? this.header.setOrigRange(cr, offset) : offset; + } + }, { + key: "includesTrailingLines", + get: function get() { + return this.chomping === Chomp.KEEP; + } + }, { + key: "strValue", + get: function get() { + if (!this.valueRange || !this.context) return null; + var _this$valueRange = this.valueRange, + start = _this$valueRange.start, + end = _this$valueRange.end; + var _this$context2 = this.context, + indent = _this$context2.indent, + src = _this$context2.src; + if (this.valueRange.isEmpty()) return ''; + var lastNewLine = null; + var ch = src[end - 1]; + + while (ch === '\n' || ch === '\t' || ch === ' ') { + end -= 1; + + if (end <= start) { + if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens + } + + if (ch === '\n') lastNewLine = end; + ch = src[end - 1]; + } + + var keepStart = end + 1; + + if (lastNewLine) { + if (this.chomping === Chomp.KEEP) { + keepStart = lastNewLine; + end = this.valueRange.end; + } else { + end = lastNewLine; + } + } + + var bi = indent + this.blockIndent; + var folded = this.type === Type.BLOCK_FOLDED; + var atStart = true; + var str = ''; + var sep = ''; + var prevMoreIndented = false; + + for (var i = start; i < end; ++i) { + for (var j = 0; j < bi; ++j) { + if (src[i] !== ' ') break; + i += 1; + } + + var _ch2 = src[i]; + + if (_ch2 === '\n') { + if (sep === '\n') str += '\n';else sep = '\n'; + } else { + var lineEnd = Node.endOfLine(src, i); + var line = src.slice(i, lineEnd); + i = lineEnd; + + if (folded && (_ch2 === ' ' || _ch2 === '\t') && i < keepStart) { + if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n'; + str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '') + + sep = lineEnd < end && src[lineEnd] || ''; + prevMoreIndented = true; + } else { + str += sep + line; + sep = folded && i < keepStart ? ' ' : '\n'; + prevMoreIndented = false; + } + + if (atStart && line !== '') atStart = false; + } + } + + return this.chomping === Chomp.STRIP ? str : str + '\n'; + } + }]); + + return BlockValue; +}(Node); + +var FlowCollection = /*#__PURE__*/function (_Node) { + _inherits(FlowCollection, _Node); + + var _super = _createSuper(FlowCollection); + + function FlowCollection(type, props) { + var _this; + + _classCallCheck(this, FlowCollection); + + _this = _super.call(this, type, props); + _this.items = null; + return _this; + } + + _createClass(FlowCollection, [{ + key: "prevNodeIsJsonLike", + value: function prevNodeIsJsonLike() { + var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.items.length; + var node = this.items[idx - 1]; + return !!node && (node.jsonLike || node.type === Type.COMMENT && this.prevNodeIsJsonLike(idx - 1)); + } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ + + }, { + key: "parse", + value: function parse(context, start) { + this.context = context; + var parseNode = context.parseNode, + src = context.src; + var indent = context.indent, + lineStart = context.lineStart; + var char = src[start]; // { or [ + + this.items = [{ + char: char, + offset: start + }]; + var offset = Node.endOfWhiteSpace(src, start + 1); + char = src[offset]; + + while (char && char !== ']' && char !== '}') { + switch (char) { + case '\n': + { + lineStart = offset + 1; + var wsEnd = Node.endOfWhiteSpace(src, lineStart); + + if (src[wsEnd] === '\n') { + var blankLine = new BlankLine(); + lineStart = blankLine.parse({ + src: src + }, lineStart); + this.items.push(blankLine); + } + + offset = Node.endOfIndent(src, lineStart); + + if (offset <= lineStart + indent) { + char = src[offset]; + + if (offset < lineStart + indent || char !== ']' && char !== '}') { + var msg = 'Insufficient indentation in flow collection'; + this.error = new YAMLSemanticError(this, msg); + } + } + } + break; + + case ',': + { + this.items.push({ + char: char, + offset: offset + }); + offset += 1; + } + break; + + case '#': + { + var comment = new Comment(); + offset = comment.parse({ + src: src + }, offset); + this.items.push(comment); + } + break; + + case '?': + case ':': + { + var next = src[offset + 1]; + + if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace + char === ':' && this.prevNodeIsJsonLike()) { + this.items.push({ + char: char, + offset: offset + }); + offset += 1; + break; + } + } + // fallthrough + + default: + { + var node = parseNode({ + atLineStart: false, + inCollection: false, + inFlow: true, + indent: -1, + lineStart: lineStart, + parent: this + }, offset); + + if (!node) { + // at next document start + this.valueRange = new Range(start, offset); + return offset; + } + + this.items.push(node); + offset = Node.normalizeOffset(src, node.range.end); + } + } + + offset = Node.endOfWhiteSpace(src, offset); + char = src[offset]; + } + + this.valueRange = new Range(start, offset + 1); + + if (char) { + this.items.push({ + char: char, + offset: offset + }); + offset = Node.endOfWhiteSpace(src, offset + 1); + offset = this.parseComment(offset); + } + + return offset; + } + }, { + key: "setOrigRanges", + value: function setOrigRanges(cr, offset) { + offset = _get(_getPrototypeOf(FlowCollection.prototype), "setOrigRanges", this).call(this, cr, offset); + this.items.forEach(function (node) { + if (node instanceof Node) { + offset = node.setOrigRanges(cr, offset); + } else if (cr.length === 0) { + node.origOffset = node.offset; + } else { + var i = offset; + + while (i < cr.length) { + if (cr[i] > node.offset) break;else ++i; + } + + node.origOffset = node.offset + i; + offset = i; + } + }); + return offset; + } + }, { + key: "toString", + value: function toString() { + var src = this.context.src, + items = this.items, + range = this.range, + value = this.value; + if (value != null) return value; + var nodes = items.filter(function (item) { + return item instanceof Node; + }); + var str = ''; + var prevEnd = range.start; + nodes.forEach(function (node) { + var prefix = src.slice(prevEnd, node.range.start); + prevEnd = node.range.end; + str += prefix + String(node); + + if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') { + // Comment range does not include the terminal newline, but its + // stringified value does. Without this fix, newlines at comment ends + // get duplicated. + prevEnd += 1; + } + }); + str += src.slice(prevEnd, range.end); + return Node.addStringTerminator(src, range.end, str); + } + }]); + + return FlowCollection; +}(Node); + +var QuoteDouble = /*#__PURE__*/function (_Node) { + _inherits(QuoteDouble, _Node); + + var _super = _createSuper(QuoteDouble); + + function QuoteDouble() { + _classCallCheck(this, QuoteDouble); + + return _super.apply(this, arguments); + } + + _createClass(QuoteDouble, [{ + key: "parseCharCode", + value: function parseCharCode(offset, length, errors) { + var src = this.context.src; + var cc = src.substr(offset, length); + var ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); + var code = ok ? parseInt(cc, 16) : NaN; + + if (isNaN(code)) { + errors.push(new YAMLSyntaxError(this, "Invalid escape sequence ".concat(src.substr(offset - 2, length + 2)))); + return src.substr(offset - 2, length + 2); + } + + return String.fromCodePoint(code); + } + /** + * Parses a "double quoted" value from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ + + }, { + key: "parse", + value: function parse(context, start) { + this.context = context; + var src = context.src; + var offset = QuoteDouble.endOfQuote(src, start + 1); + this.valueRange = new Range(start, offset); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } + }, { + key: "strValue", + + /** + * @returns {string | { str: string, errors: YAMLSyntaxError[] }} + */ + get: function get() { + if (!this.valueRange || !this.context) return null; + var errors = []; + var _this$valueRange = this.valueRange, + start = _this$valueRange.start, + end = _this$valueRange.end; + var _this$context = this.context, + indent = _this$context.indent, + src = _this$context.src; + if (src[end - 1] !== '"') errors.push(new YAMLSyntaxError(this, 'Missing closing "quote')); // Using String#replace is too painful with escaped newlines preceded by + // escaped backslashes; also, this should be faster. + + var str = ''; + + for (var i = start + 1; i < end - 1; ++i) { + var ch = src[i]; + + if (ch === '\n') { + if (Node.atDocumentBoundary(src, i + 1)) errors.push(new YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); + + var _Node$foldNewline = Node.foldNewline(src, i, indent), + fold = _Node$foldNewline.fold, + offset = _Node$foldNewline.offset, + error = _Node$foldNewline.error; + + str += fold; + i = offset; + if (error) errors.push(new YAMLSemanticError(this, 'Multi-line double-quoted string needs to be sufficiently indented')); + } else if (ch === '\\') { + i += 1; + + switch (src[i]) { + case '0': + str += '\0'; + break; + // null character + + case 'a': + str += '\x07'; + break; + // bell character + + case 'b': + str += '\b'; + break; + // backspace + + case 'e': + str += '\x1b'; + break; + // escape character + + case 'f': + str += '\f'; + break; + // form feed + + case 'n': + str += '\n'; + break; + // line feed + + case 'r': + str += '\r'; + break; + // carriage return + + case 't': + str += '\t'; + break; + // horizontal tab + + case 'v': + str += '\v'; + break; + // vertical tab + + case 'N': + str += "\x85"; + break; + // Unicode next line + + case '_': + str += "\xA0"; + break; + // Unicode non-breaking space + + case 'L': + str += "\u2028"; + break; + // Unicode line separator + + case 'P': + str += "\u2029"; + break; + // Unicode paragraph separator + + case ' ': + str += ' '; + break; + + case '"': + str += '"'; + break; + + case '/': + str += '/'; + break; + + case '\\': + str += '\\'; + break; + + case '\t': + str += '\t'; + break; + + case 'x': + str += this.parseCharCode(i + 1, 2, errors); + i += 2; + break; + + case 'u': + str += this.parseCharCode(i + 1, 4, errors); + i += 4; + break; + + case 'U': + str += this.parseCharCode(i + 1, 8, errors); + i += 8; + break; + + case '\n': + // skip escaped newlines, but still trim the following line + while (src[i + 1] === ' ' || src[i + 1] === '\t') { + i += 1; + } + + break; + + default: + errors.push(new YAMLSyntaxError(this, "Invalid escape sequence ".concat(src.substr(i - 1, 2)))); + str += '\\' + src[i]; + } + } else if (ch === ' ' || ch === '\t') { + // trim trailing whitespace + var wsStart = i; + var next = src[i + 1]; + + while (next === ' ' || next === '\t') { + i += 1; + next = src[i + 1]; + } + + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; + } else { + str += ch; + } + } + + return errors.length > 0 ? { + errors: errors, + str: str + } : str; + } + }], [{ + key: "endOfQuote", + value: function endOfQuote(src, offset) { + var ch = src[offset]; + + while (ch && ch !== '"') { + offset += ch === '\\' ? 2 : 1; + ch = src[offset]; + } + + return offset + 1; + } + }]); + + return QuoteDouble; +}(Node); + +var QuoteSingle = /*#__PURE__*/function (_Node) { + _inherits(QuoteSingle, _Node); + + var _super = _createSuper(QuoteSingle); + + function QuoteSingle() { + _classCallCheck(this, QuoteSingle); + + return _super.apply(this, arguments); + } + + _createClass(QuoteSingle, [{ + key: "parse", + + /** + * Parses a 'single quoted' value from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ + value: function parse(context, start) { + this.context = context; + var src = context.src; + var offset = QuoteSingle.endOfQuote(src, start + 1); + this.valueRange = new Range(start, offset); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } + }, { + key: "strValue", + + /** + * @returns {string | { str: string, errors: YAMLSyntaxError[] }} + */ + get: function get() { + if (!this.valueRange || !this.context) return null; + var errors = []; + var _this$valueRange = this.valueRange, + start = _this$valueRange.start, + end = _this$valueRange.end; + var _this$context = this.context, + indent = _this$context.indent, + src = _this$context.src; + if (src[end - 1] !== "'") errors.push(new YAMLSyntaxError(this, "Missing closing 'quote")); + var str = ''; + + for (var i = start + 1; i < end - 1; ++i) { + var ch = src[i]; + + if (ch === '\n') { + if (Node.atDocumentBoundary(src, i + 1)) errors.push(new YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); + + var _Node$foldNewline = Node.foldNewline(src, i, indent), + fold = _Node$foldNewline.fold, + offset = _Node$foldNewline.offset, + error = _Node$foldNewline.error; + + str += fold; + i = offset; + if (error) errors.push(new YAMLSemanticError(this, 'Multi-line single-quoted string needs to be sufficiently indented')); + } else if (ch === "'") { + str += ch; + i += 1; + if (src[i] !== "'") errors.push(new YAMLSyntaxError(this, 'Unescaped single quote? This should not happen.')); + } else if (ch === ' ' || ch === '\t') { + // trim trailing whitespace + var wsStart = i; + var next = src[i + 1]; + + while (next === ' ' || next === '\t') { + i += 1; + next = src[i + 1]; + } + + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; + } else { + str += ch; + } + } + + return errors.length > 0 ? { + errors: errors, + str: str + } : str; + } + }], [{ + key: "endOfQuote", + value: function endOfQuote(src, offset) { + var ch = src[offset]; + + while (ch) { + if (ch === "'") { + if (src[offset + 1] !== "'") break; + ch = src[offset += 2]; + } else { + ch = src[offset += 1]; + } + } + + return offset + 1; + } + }]); + + return QuoteSingle; +}(Node); + +function createNewNode(type, props) { + switch (type) { + case Type.ALIAS: + return new Alias(type, props); + + case Type.BLOCK_FOLDED: + case Type.BLOCK_LITERAL: + return new BlockValue(type, props); + + case Type.FLOW_MAP: + case Type.FLOW_SEQ: + return new FlowCollection(type, props); + + case Type.MAP_KEY: + case Type.MAP_VALUE: + case Type.SEQ_ITEM: + return new CollectionItem(type, props); + + case Type.COMMENT: + case Type.PLAIN: + return new PlainValue(type, props); + + case Type.QUOTE_DOUBLE: + return new QuoteDouble(type, props); + + case Type.QUOTE_SINGLE: + return new QuoteSingle(type, props); + + /* istanbul ignore next */ + + default: + return null; + // should never happen + } +} +/** + * @param {boolean} atLineStart - Node starts at beginning of line + * @param {boolean} inFlow - true if currently in a flow context + * @param {boolean} inCollection - true if currently in a collection context + * @param {number} indent - Current level of indentation + * @param {number} lineStart - Start of the current line + * @param {Node} parent - The parent of the node + * @param {string} src - Source of the YAML document + */ + + +var ParseContext = /*#__PURE__*/function () { + _createClass(ParseContext, null, [{ + key: "parseType", + value: function parseType(src, offset, inFlow) { + switch (src[offset]) { + case '*': + return Type.ALIAS; + + case '>': + return Type.BLOCK_FOLDED; + + case '|': + return Type.BLOCK_LITERAL; + + case '{': + return Type.FLOW_MAP; + + case '[': + return Type.FLOW_SEQ; + + case '?': + return !inFlow && Node.atBlank(src, offset + 1, true) ? Type.MAP_KEY : Type.PLAIN; + + case ':': + return !inFlow && Node.atBlank(src, offset + 1, true) ? Type.MAP_VALUE : Type.PLAIN; + + case '-': + return !inFlow && Node.atBlank(src, offset + 1, true) ? Type.SEQ_ITEM : Type.PLAIN; + + case '"': + return Type.QUOTE_DOUBLE; + + case "'": + return Type.QUOTE_SINGLE; + + default: + return Type.PLAIN; + } + } + }]); + + function ParseContext() { + var _this = this; + + var orig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + atLineStart = _ref.atLineStart, + inCollection = _ref.inCollection, + inFlow = _ref.inFlow, + indent = _ref.indent, + lineStart = _ref.lineStart, + parent = _ref.parent; + + _classCallCheck(this, ParseContext); + + _defineProperty(this, "parseNode", function (overlay, start) { + if (Node.atDocumentBoundary(_this.src, start)) return null; + var context = new ParseContext(_this, overlay); + + var _context$parseProps = context.parseProps(start), + props = _context$parseProps.props, + type = _context$parseProps.type, + valueStart = _context$parseProps.valueStart; + + var node = createNewNode(type, props); + var offset = node.parse(context, valueStart); + node.range = new Range(start, offset); + /* istanbul ignore if */ + + if (offset <= start) { + // This should never happen, but if it does, let's make sure to at least + // step one character forward to avoid a busy loop. + node.error = new Error("Node#parse consumed no characters"); + node.error.parseEnd = offset; + node.error.source = node; + node.range.end = start + 1; + } + + if (context.nodeStartsCollection(node)) { + if (!node.error && !context.atLineStart && context.parent.type === Type.DOCUMENT) { + node.error = new YAMLSyntaxError(node, 'Block collection must not have preceding content here (e.g. directives-end indicator)'); + } + + var collection = new Collection(node); + offset = collection.parse(new ParseContext(context), offset); + collection.range = new Range(start, offset); + return collection; + } + + return node; + }); + + this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false; + this.inCollection = inCollection != null ? inCollection : orig.inCollection || false; + this.inFlow = inFlow != null ? inFlow : orig.inFlow || false; + this.indent = indent != null ? indent : orig.indent; + this.lineStart = lineStart != null ? lineStart : orig.lineStart; + this.parent = parent != null ? parent : orig.parent || {}; + this.root = orig.root; + this.src = orig.src; + } + + _createClass(ParseContext, [{ + key: "nodeStartsCollection", + value: function nodeStartsCollection(node) { + var inCollection = this.inCollection, + inFlow = this.inFlow, + src = this.src; + if (inCollection || inFlow) return false; + if (node instanceof CollectionItem) return true; // check for implicit key + + var offset = node.range.end; + if (src[offset] === '\n' || src[offset - 1] === '\n') return false; + offset = Node.endOfWhiteSpace(src, offset); + return src[offset] === ':'; + } // Anchor and tag are before type, which determines the node implementation + // class; hence this intermediate step. + + }, { + key: "parseProps", + value: function parseProps(offset) { + var inFlow = this.inFlow, + parent = this.parent, + src = this.src; + var props = []; + var lineHasProps = false; + offset = this.atLineStart ? Node.endOfIndent(src, offset) : Node.endOfWhiteSpace(src, offset); + var ch = src[offset]; + + while (ch === Char.ANCHOR || ch === Char.COMMENT || ch === Char.TAG || ch === '\n') { + if (ch === '\n') { + var lineStart = offset + 1; + var inEnd = Node.endOfIndent(src, lineStart); + var indentDiff = inEnd - (lineStart + this.indent); + var noIndicatorAsIndent = parent.type === Type.SEQ_ITEM && parent.context.atLineStart; + if (!Node.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)) break; + this.atLineStart = true; + this.lineStart = lineStart; + lineHasProps = false; + offset = inEnd; + } else if (ch === Char.COMMENT) { + var end = Node.endOfLine(src, offset + 1); + props.push(new Range(offset, end)); + offset = end; + } else { + var _end = Node.endOfIdentifier(src, offset + 1); + + if (ch === Char.TAG && src[_end] === ',' && /^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+,\d\d\d\d(-\d\d){0,2}\/\S/.test(src.slice(offset + 1, _end + 13))) { + // Let's presume we're dealing with a YAML 1.0 domain tag here, rather + // than an empty but 'foo.bar' private-tagged node in a flow collection + // followed without whitespace by a plain string starting with a year + // or date divided by something. + _end = Node.endOfIdentifier(src, _end + 5); + } + + props.push(new Range(offset, _end)); + lineHasProps = true; + offset = Node.endOfWhiteSpace(src, _end); + } + + ch = src[offset]; + } // '- &a : b' has an anchor on an empty node + + + if (lineHasProps && ch === ':' && Node.atBlank(src, offset + 1, true)) offset -= 1; + var type = ParseContext.parseType(src, offset, inFlow); + return { + props: props, + type: type, + valueStart: offset + }; + } + /** + * Parses a node from the source + * @param {ParseContext} overlay + * @param {number} start - Index of first non-whitespace character for the node + * @returns {?Node} - null if at a document boundary + */ + + }]); + + return ParseContext; +}(); + +// Published as 'yaml/parse-cst' +function parse(src) { + var cr = []; + + if (src.indexOf('\r') !== -1) { + src = src.replace(/\r\n?/g, function (match, offset) { + if (match.length > 1) cr.push(offset); + return '\n'; + }); + } + + var documents = []; + var offset = 0; + + do { + var doc = new Document(); + var context = new ParseContext({ + src: src + }); + offset = doc.parse(context, offset); + documents.push(doc); + } while (offset < src.length); + + documents.setOrigRanges = function () { + if (cr.length === 0) return false; + + for (var i = 1; i < cr.length; ++i) { + cr[i] -= i; + } + + var crOffset = 0; + + for (var _i = 0; _i < documents.length; ++_i) { + crOffset = documents[_i].setOrigRanges(cr, crOffset); + } + + cr.splice(0, cr.length); + return true; + }; + + documents.toString = function () { + return documents.join('...\n'); + }; + + return documents; +} + +function addCommentBefore(str, indent, comment) { + if (!comment) return str; + var cc = comment.replace(/[\s\S]^/gm, "$&".concat(indent, "#")); + return "#".concat(cc, "\n").concat(indent).concat(str); +} +function addComment(str, indent, comment) { + return !comment ? str : comment.indexOf('\n') === -1 ? "".concat(str, " #").concat(comment) : "".concat(str, "\n") + comment.replace(/^/gm, "".concat(indent || '', "#")); +} + +var Node$1 = function Node() { + _classCallCheck(this, Node); +}; + +function toJSON(value, arg, ctx) { + if (Array.isArray(value)) return value.map(function (v, i) { + return toJSON(v, String(i), ctx); + }); + + if (value && typeof value.toJSON === 'function') { + var anchor = ctx && ctx.anchors && ctx.anchors.get(value); + if (anchor) ctx.onCreate = function (res) { + anchor.res = res; + delete ctx.onCreate; + }; + var res = value.toJSON(arg, ctx); + if (anchor && ctx.onCreate) ctx.onCreate(res); + return res; + } + + if ((!ctx || !ctx.keep) && typeof value === 'bigint') return Number(value); + return value; +} + +var Scalar = /*#__PURE__*/function (_Node) { + _inherits(Scalar, _Node); + + var _super = _createSuper(Scalar); + + function Scalar(value) { + var _this; + + _classCallCheck(this, Scalar); + + _this = _super.call(this); + _this.value = value; + return _this; + } + + _createClass(Scalar, [{ + key: "toJSON", + value: function toJSON$1(arg, ctx) { + return ctx && ctx.keep ? this.value : toJSON(this.value, arg, ctx); + } + }, { + key: "toString", + value: function toString() { + return String(this.value); + } + }]); + + return Scalar; +}(Node$1); + +function collectionFromPath(schema, path, value) { + var v = value; + + for (var i = path.length - 1; i >= 0; --i) { + var k = path[i]; + var o = Number.isInteger(k) && k >= 0 ? [] : {}; + o[k] = v; + v = o; + } + + return schema.createNode(v, false); +} // null, undefined, or an empty non-string iterable (e.g. []) + + +var isEmptyPath = function isEmptyPath(path) { + return path == null || _typeof(path) === 'object' && path[Symbol.iterator]().next().done; +}; +var Collection$1 = /*#__PURE__*/function (_Node) { + _inherits(Collection, _Node); + + var _super = _createSuper(Collection); + + function Collection(schema) { + var _this; + + _classCallCheck(this, Collection); + + _this = _super.call(this); + + _defineProperty(_assertThisInitialized(_this), "items", []); + + _this.schema = schema; + return _this; + } + + _createClass(Collection, [{ + key: "addIn", + value: function addIn(path, value) { + if (isEmptyPath(path)) this.add(value);else { + var _path = _toArray(path), + key = _path[0], + rest = _path.slice(1); + + var node = this.get(key, true); + if (node instanceof Collection) node.addIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); + } + } + }, { + key: "deleteIn", + value: function deleteIn(_ref) { + var _ref2 = _toArray(_ref), + key = _ref2[0], + rest = _ref2.slice(1); + + if (rest.length === 0) return this.delete(key); + var node = this.get(key, true); + if (node instanceof Collection) return node.deleteIn(rest);else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); + } + }, { + key: "getIn", + value: function getIn(_ref3, keepScalar) { + var _ref4 = _toArray(_ref3), + key = _ref4[0], + rest = _ref4.slice(1); + + var node = this.get(key, true); + if (rest.length === 0) return !keepScalar && node instanceof Scalar ? node.value : node;else return node instanceof Collection ? node.getIn(rest, keepScalar) : undefined; + } + }, { + key: "hasAllNullValues", + value: function hasAllNullValues() { + return this.items.every(function (node) { + if (!node || node.type !== 'PAIR') return false; + var n = node.value; + return n == null || n instanceof Scalar && n.value == null && !n.commentBefore && !n.comment && !n.tag; + }); + } + }, { + key: "hasIn", + value: function hasIn(_ref5) { + var _ref6 = _toArray(_ref5), + key = _ref6[0], + rest = _ref6.slice(1); + + if (rest.length === 0) return this.has(key); + var node = this.get(key, true); + return node instanceof Collection ? node.hasIn(rest) : false; + } + }, { + key: "setIn", + value: function setIn(_ref7, value) { + var _ref8 = _toArray(_ref7), + key = _ref8[0], + rest = _ref8.slice(1); + + if (rest.length === 0) { + this.set(key, value); + } else { + var node = this.get(key, true); + if (node instanceof Collection) node.setIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); + } + } // overridden in implementations + + /* istanbul ignore next */ + + }, { + key: "toJSON", + value: function toJSON() { + return null; + } + }, { + key: "toString", + value: function toString(ctx, _ref9, onComment, onChompKeep) { + var _this2 = this; + + var blockItem = _ref9.blockItem, + flowChars = _ref9.flowChars, + isMap = _ref9.isMap, + itemIndent = _ref9.itemIndent; + var _ctx = ctx, + indent = _ctx.indent, + indentStep = _ctx.indentStep, + stringify = _ctx.stringify; + var inFlow = this.type === Type.FLOW_MAP || this.type === Type.FLOW_SEQ || ctx.inFlow; + if (inFlow) itemIndent += indentStep; + var allNullValues = isMap && this.hasAllNullValues(); + ctx = Object.assign({}, ctx, { + allNullValues: allNullValues, + indent: itemIndent, + inFlow: inFlow, + type: null + }); + var chompKeep = false; + var hasItemWithNewLine = false; + var nodes = this.items.reduce(function (nodes, item, i) { + var comment; + + if (item) { + if (!chompKeep && item.spaceBefore) nodes.push({ + type: 'comment', + str: '' + }); + if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(function (line) { + nodes.push({ + type: 'comment', + str: "#".concat(line) + }); + }); + if (item.comment) comment = item.comment; + if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true; + } + + chompKeep = false; + var str = stringify(item, ctx, function () { + return comment = null; + }, function () { + return chompKeep = true; + }); + if (inFlow && !hasItemWithNewLine && str.includes('\n')) hasItemWithNewLine = true; + if (inFlow && i < _this2.items.length - 1) str += ','; + str = addComment(str, itemIndent, comment); + if (chompKeep && (comment || inFlow)) chompKeep = false; + nodes.push({ + type: 'item', + str: str + }); + return nodes; + }, []); + var str; + + if (nodes.length === 0) { + str = flowChars.start + flowChars.end; + } else if (inFlow) { + var start = flowChars.start, + end = flowChars.end; + var strings = nodes.map(function (n) { + return n.str; + }); + + if (hasItemWithNewLine || strings.reduce(function (sum, str) { + return sum + str.length + 2; + }, 2) > Collection.maxFlowStringSingleLineLength) { + str = start; + + var _iterator = _createForOfIteratorHelper(strings), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var s = _step.value; + str += s ? "\n".concat(indentStep).concat(indent).concat(s) : '\n'; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + str += "\n".concat(indent).concat(end); + } else { + str = "".concat(start, " ").concat(strings.join(' '), " ").concat(end); + } + } else { + var _strings = nodes.map(blockItem); + + str = _strings.shift(); + + var _iterator2 = _createForOfIteratorHelper(_strings), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var _s = _step2.value; + str += _s ? "\n".concat(indent).concat(_s) : '\n'; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + + if (this.comment) { + str += '\n' + this.comment.replace(/^/gm, "".concat(indent, "#")); + if (onComment) onComment(); + } else if (chompKeep && onChompKeep) onChompKeep(); + + return str; + } + }]); + + return Collection; +}(Node$1); + +_defineProperty(Collection$1, "maxFlowStringSingleLineLength", 60); + +function asItemIndex(key) { + var idx = key instanceof Scalar ? key.value : key; + if (idx && typeof idx === 'string') idx = Number(idx); + return Number.isInteger(idx) && idx >= 0 ? idx : null; +} + +var YAMLSeq = /*#__PURE__*/function (_Collection) { + _inherits(YAMLSeq, _Collection); + + var _super = _createSuper(YAMLSeq); + + function YAMLSeq() { + _classCallCheck(this, YAMLSeq); + + return _super.apply(this, arguments); + } + + _createClass(YAMLSeq, [{ + key: "add", + value: function add(value) { + this.items.push(value); + } + }, { + key: "delete", + value: function _delete(key) { + var idx = asItemIndex(key); + if (typeof idx !== 'number') return false; + var del = this.items.splice(idx, 1); + return del.length > 0; + } + }, { + key: "get", + value: function get(key, keepScalar) { + var idx = asItemIndex(key); + if (typeof idx !== 'number') return undefined; + var it = this.items[idx]; + return !keepScalar && it instanceof Scalar ? it.value : it; + } + }, { + key: "has", + value: function has(key) { + var idx = asItemIndex(key); + return typeof idx === 'number' && idx < this.items.length; + } + }, { + key: "set", + value: function set(key, value) { + var idx = asItemIndex(key); + if (typeof idx !== 'number') throw new Error("Expected a valid index, not ".concat(key, ".")); + this.items[idx] = value; + } + }, { + key: "toJSON", + value: function toJSON$1(_, ctx) { + var seq = []; + if (ctx && ctx.onCreate) ctx.onCreate(seq); + var i = 0; + + var _iterator = _createForOfIteratorHelper(this.items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var item = _step.value; + seq.push(toJSON(item, String(i++), ctx)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return seq; + } + }, { + key: "toString", + value: function toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); + return _get(_getPrototypeOf(YAMLSeq.prototype), "toString", this).call(this, ctx, { + blockItem: function blockItem(n) { + return n.type === 'comment' ? n.str : "- ".concat(n.str); + }, + flowChars: { + start: '[', + end: ']' + }, + isMap: false, + itemIndent: (ctx.indent || '') + ' ' + }, onComment, onChompKeep); + } + }]); + + return YAMLSeq; +}(Collection$1); + +var stringifyKey = function stringifyKey(key, jsKey, ctx) { + if (jsKey === null) return ''; + if (_typeof(jsKey) !== 'object') return String(jsKey); + if (key instanceof Node$1 && ctx && ctx.doc) return key.toString({ + anchors: {}, + doc: ctx.doc, + indent: '', + indentStep: ctx.indentStep, + inFlow: true, + inStringifyKey: true, + stringify: ctx.stringify + }); + return JSON.stringify(jsKey); +}; + +var Pair = /*#__PURE__*/function (_Node) { + _inherits(Pair, _Node); + + var _super = _createSuper(Pair); + + function Pair(key) { + var _this; + + var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + _classCallCheck(this, Pair); + + _this = _super.call(this); + _this.key = key; + _this.value = value; + _this.type = Pair.Type.PAIR; + return _this; + } + + _createClass(Pair, [{ + key: "addToJSMap", + value: function addToJSMap(ctx, map) { + var key = toJSON(this.key, '', ctx); + + if (map instanceof Map) { + var value = toJSON(this.value, key, ctx); + map.set(key, value); + } else if (map instanceof Set) { + map.add(key); + } else { + var stringKey = stringifyKey(this.key, key, ctx); + map[stringKey] = toJSON(this.value, stringKey, ctx); + } + + return map; + } + }, { + key: "toJSON", + value: function toJSON(_, ctx) { + var pair = ctx && ctx.mapAsMap ? new Map() : {}; + return this.addToJSMap(ctx, pair); + } + }, { + key: "toString", + value: function toString(ctx, onComment, onChompKeep) { + if (!ctx || !ctx.doc) return JSON.stringify(this); + var _ctx$doc$options = ctx.doc.options, + indentSize = _ctx$doc$options.indent, + indentSeq = _ctx$doc$options.indentSeq, + simpleKeys = _ctx$doc$options.simpleKeys; + var key = this.key, + value = this.value; + var keyComment = key instanceof Node$1 && key.comment; + + if (simpleKeys) { + if (keyComment) { + throw new Error('With simple keys, key nodes cannot have comments'); + } + + if (key instanceof Collection$1) { + var msg = 'With simple keys, collection cannot be used as a key value'; + throw new Error(msg); + } + } + + var explicitKey = !simpleKeys && (!key || keyComment || key instanceof Collection$1 || key.type === Type.BLOCK_FOLDED || key.type === Type.BLOCK_LITERAL); + var _ctx = ctx, + doc = _ctx.doc, + indent = _ctx.indent, + indentStep = _ctx.indentStep, + stringify = _ctx.stringify; + ctx = Object.assign({}, ctx, { + implicitKey: !explicitKey, + indent: indent + indentStep + }); + var chompKeep = false; + var str = stringify(key, ctx, function () { + return keyComment = null; + }, function () { + return chompKeep = true; + }); + str = addComment(str, ctx.indent, keyComment); + + if (ctx.allNullValues && !simpleKeys) { + if (this.comment) { + str = addComment(str, ctx.indent, this.comment); + if (onComment) onComment(); + } else if (chompKeep && !keyComment && onChompKeep) onChompKeep(); + + return ctx.inFlow ? str : "? ".concat(str); + } + + str = explicitKey ? "? ".concat(str, "\n").concat(indent, ":") : "".concat(str, ":"); + + if (this.comment) { + // expected (but not strictly required) to be a single-line comment + str = addComment(str, ctx.indent, this.comment); + if (onComment) onComment(); + } + + var vcb = ''; + var valueComment = null; + + if (value instanceof Node$1) { + if (value.spaceBefore) vcb = '\n'; + + if (value.commentBefore) { + var cs = value.commentBefore.replace(/^/gm, "".concat(ctx.indent, "#")); + vcb += "\n".concat(cs); + } + + valueComment = value.comment; + } else if (value && _typeof(value) === 'object') { + value = doc.schema.createNode(value, true); + } + + ctx.implicitKey = false; + if (!explicitKey && !this.comment && value instanceof Scalar) ctx.indentAtStart = str.length + 1; + chompKeep = false; + + if (!indentSeq && indentSize >= 2 && !ctx.inFlow && !explicitKey && value instanceof YAMLSeq && value.type !== Type.FLOW_SEQ && !value.tag && !doc.anchors.getName(value)) { + // If indentSeq === false, consider '- ' as part of indentation where possible + ctx.indent = ctx.indent.substr(2); + } + + var valueStr = stringify(value, ctx, function () { + return valueComment = null; + }, function () { + return chompKeep = true; + }); + var ws = ' '; + + if (vcb || this.comment) { + ws = "".concat(vcb, "\n").concat(ctx.indent); + } else if (!explicitKey && value instanceof Collection$1) { + var flow = valueStr[0] === '[' || valueStr[0] === '{'; + if (!flow || valueStr.includes('\n')) ws = "\n".concat(ctx.indent); + } + + if (chompKeep && !valueComment && onChompKeep) onChompKeep(); + return addComment(str + ws + valueStr, ctx.indent, valueComment); + } + }, { + key: "commentBefore", + get: function get() { + return this.key instanceof Node$1 ? this.key.commentBefore : undefined; + }, + set: function set(cb) { + if (this.key == null) this.key = new Scalar(null); + if (this.key instanceof Node$1) this.key.commentBefore = cb;else { + var msg = 'Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.'; + throw new Error(msg); + } + } + }]); + + return Pair; +}(Node$1); + +_defineProperty(Pair, "Type", { + PAIR: 'PAIR', + MERGE_PAIR: 'MERGE_PAIR' +}); + +var getAliasCount = function getAliasCount(node, anchors) { + if (node instanceof Alias$1) { + var anchor = anchors.get(node.source); + return anchor.count * anchor.aliasCount; + } else if (node instanceof Collection$1) { + var count = 0; + + var _iterator = _createForOfIteratorHelper(node.items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var item = _step.value; + var c = getAliasCount(item, anchors); + if (c > count) count = c; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return count; + } else if (node instanceof Pair) { + var kc = getAliasCount(node.key, anchors); + var vc = getAliasCount(node.value, anchors); + return Math.max(kc, vc); + } + + return 1; +}; + +var Alias$1 = /*#__PURE__*/function (_Node) { + _inherits(Alias, _Node); + + var _super = _createSuper(Alias); + + _createClass(Alias, null, [{ + key: "stringify", + value: function stringify(_ref, _ref2) { + var range = _ref.range, + source = _ref.source; + var anchors = _ref2.anchors, + doc = _ref2.doc, + implicitKey = _ref2.implicitKey, + inStringifyKey = _ref2.inStringifyKey; + var anchor = Object.keys(anchors).find(function (a) { + return anchors[a] === source; + }); + if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName(); + if (anchor) return "*".concat(anchor).concat(implicitKey ? ' ' : ''); + var msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node'; + throw new Error("".concat(msg, " [").concat(range, "]")); + } + }]); + + function Alias(source) { + var _this; + + _classCallCheck(this, Alias); + + _this = _super.call(this); + _this.source = source; + _this.type = Type.ALIAS; + return _this; + } + + _createClass(Alias, [{ + key: "toJSON", + value: function toJSON$1(arg, ctx) { + if (!ctx) return toJSON(this.source, arg, ctx); + var anchors = ctx.anchors, + maxAliasCount = ctx.maxAliasCount; + var anchor = anchors.get(this.source); + /* istanbul ignore if */ + + if (!anchor || anchor.res === undefined) { + var msg = 'This should not happen: Alias anchor was not resolved?'; + if (this.cstNode) throw new YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg); + } + + if (maxAliasCount >= 0) { + anchor.count += 1; + if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors); + + if (anchor.count * anchor.aliasCount > maxAliasCount) { + var _msg = 'Excessive alias count indicates a resource exhaustion attack'; + if (this.cstNode) throw new YAMLReferenceError(this.cstNode, _msg);else throw new ReferenceError(_msg); + } + } + + return anchor.res; + } // Only called when stringifying an alias mapping key while constructing + // Object output. + + }, { + key: "toString", + value: function toString(ctx) { + return Alias.stringify(this, ctx); + } + }, { + key: "tag", + set: function set(t) { + throw new Error('Alias nodes cannot have tags'); + } + }]); + + return Alias; +}(Node$1); + +_defineProperty(Alias$1, "default", true); + +function findPair(items, key) { + var k = key instanceof Scalar ? key.value : key; + + var _iterator = _createForOfIteratorHelper(items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var it = _step.value; + + if (it instanceof Pair) { + if (it.key === key || it.key === k) return it; + if (it.key && it.key.value === k) return it; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return undefined; +} +var YAMLMap = /*#__PURE__*/function (_Collection) { + _inherits(YAMLMap, _Collection); + + var _super = _createSuper(YAMLMap); + + function YAMLMap() { + _classCallCheck(this, YAMLMap); + + return _super.apply(this, arguments); + } + + _createClass(YAMLMap, [{ + key: "add", + value: function add(pair, overwrite) { + if (!pair) pair = new Pair(pair);else if (!(pair instanceof Pair)) pair = new Pair(pair.key || pair, pair.value); + var prev = findPair(this.items, pair.key); + var sortEntries = this.schema && this.schema.sortMapEntries; + + if (prev) { + if (overwrite) prev.value = pair.value;else throw new Error("Key ".concat(pair.key, " already set")); + } else if (sortEntries) { + var i = this.items.findIndex(function (item) { + return sortEntries(pair, item) < 0; + }); + if (i === -1) this.items.push(pair);else this.items.splice(i, 0, pair); + } else { + this.items.push(pair); + } + } + }, { + key: "delete", + value: function _delete(key) { + var it = findPair(this.items, key); + if (!it) return false; + var del = this.items.splice(this.items.indexOf(it), 1); + return del.length > 0; + } + }, { + key: "get", + value: function get(key, keepScalar) { + var it = findPair(this.items, key); + var node = it && it.value; + return !keepScalar && node instanceof Scalar ? node.value : node; + } + }, { + key: "has", + value: function has(key) { + return !!findPair(this.items, key); + } + }, { + key: "set", + value: function set(key, value) { + this.add(new Pair(key, value), true); + } + /** + * @param {*} arg ignored + * @param {*} ctx Conversion context, originally set in Document#toJSON() + * @param {Class} Type If set, forces the returned collection type + * @returns {*} Instance of Type, Map, or Object + */ + + }, { + key: "toJSON", + value: function toJSON(_, ctx, Type) { + var map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {}; + if (ctx && ctx.onCreate) ctx.onCreate(map); + + var _iterator2 = _createForOfIteratorHelper(this.items), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var item = _step2.value; + item.addToJSMap(ctx, map); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + return map; + } + }, { + key: "toString", + value: function toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); + + var _iterator3 = _createForOfIteratorHelper(this.items), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var item = _step3.value; + if (!(item instanceof Pair)) throw new Error("Map items must all be pairs; found ".concat(JSON.stringify(item), " instead")); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + return _get(_getPrototypeOf(YAMLMap.prototype), "toString", this).call(this, ctx, { + blockItem: function blockItem(n) { + return n.str; + }, + flowChars: { + start: '{', + end: '}' + }, + isMap: true, + itemIndent: ctx.indent || '' + }, onComment, onChompKeep); + } + }]); + + return YAMLMap; +}(Collection$1); + +var MERGE_KEY = '<<'; +var Merge = /*#__PURE__*/function (_Pair) { + _inherits(Merge, _Pair); + + var _super = _createSuper(Merge); + + function Merge(pair) { + var _this; + + _classCallCheck(this, Merge); + + if (pair instanceof Pair) { + var seq = pair.value; + + if (!(seq instanceof YAMLSeq)) { + seq = new YAMLSeq(); + seq.items.push(pair.value); + seq.range = pair.value.range; + } + + _this = _super.call(this, pair.key, seq); + _this.range = pair.range; + } else { + _this = _super.call(this, new Scalar(MERGE_KEY), new YAMLSeq()); + } + + _this.type = Pair.Type.MERGE_PAIR; + return _possibleConstructorReturn(_this); + } // If the value associated with a merge key is a single mapping node, each of + // its key/value pairs is inserted into the current mapping, unless the key + // already exists in it. If the value associated with the merge key is a + // sequence, then this sequence is expected to contain mapping nodes and each + // of these nodes is merged in turn according to its order in the sequence. + // Keys in mapping nodes earlier in the sequence override keys specified in + // later mapping nodes. -- http://yaml.org/type/merge.html + + + _createClass(Merge, [{ + key: "addToJSMap", + value: function addToJSMap(ctx, map) { + var _iterator = _createForOfIteratorHelper(this.value.items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var source = _step.value.source; + if (!(source instanceof YAMLMap)) throw new Error('Merge sources must be maps'); + var srcMap = source.toJSON(null, ctx, Map); + + var _iterator2 = _createForOfIteratorHelper(srcMap), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var _step2$value = _slicedToArray(_step2.value, 2), + key = _step2$value[0], + value = _step2$value[1]; + + if (map instanceof Map) { + if (!map.has(key)) map.set(key, value); + } else if (map instanceof Set) { + map.add(key); + } else { + if (!Object.prototype.hasOwnProperty.call(map, key)) map[key] = value; + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return map; + } + }, { + key: "toString", + value: function toString(ctx, onComment) { + var seq = this.value; + if (seq.items.length > 1) return _get(_getPrototypeOf(Merge.prototype), "toString", this).call(this, ctx, onComment); + this.value = seq.items[0]; + + var str = _get(_getPrototypeOf(Merge.prototype), "toString", this).call(this, ctx, onComment); + + this.value = seq; + return str; + } + }]); + + return Merge; +}(Pair); + +var binaryOptions = { + defaultType: Type.BLOCK_LITERAL, + lineWidth: 76 +}; +var boolOptions = { + trueStr: 'true', + falseStr: 'false' +}; +var intOptions = { + asBigInt: false +}; +var nullOptions = { + nullStr: 'null' +}; +var strOptions = { + defaultType: Type.PLAIN, + doubleQuoted: { + jsonEncoding: false, + minMultiLineLength: 40 + }, + fold: { + lineWidth: 80, + minContentWidth: 20 + } +}; + +function resolveScalar(str, tags, scalarFallback) { + var _iterator = _createForOfIteratorHelper(tags), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _step$value = _step.value, + format = _step$value.format, + test = _step$value.test, + resolve = _step$value.resolve; + + if (test) { + var match = str.match(test); + + if (match) { + var res = resolve.apply(null, match); + if (!(res instanceof Scalar)) res = new Scalar(res); + if (format) res.format = format; + return res; + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + if (scalarFallback) str = scalarFallback(str); + return new Scalar(str); +} + +var FOLD_FLOW = 'flow'; +var FOLD_BLOCK = 'block'; +var FOLD_QUOTED = 'quoted'; // presumes i+1 is at the start of a line +// returns index of last newline in more-indented block + +var consumeMoreIndentedLines = function consumeMoreIndentedLines(text, i) { + var ch = text[i + 1]; + + while (ch === ' ' || ch === '\t') { + do { + ch = text[i += 1]; + } while (ch && ch !== '\n'); + + ch = text[i + 1]; + } + + return i; +}; +/** + * Tries to keep input at up to `lineWidth` characters, splitting only on spaces + * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are + * terminated with `\n` and started with `indent`. + * + * @param {string} text + * @param {string} indent + * @param {string} [mode='flow'] `'block'` prevents more-indented lines + * from being folded; `'quoted'` allows for `\` escapes, including escaped + * newlines + * @param {Object} options + * @param {number} [options.indentAtStart] Accounts for leading contents on + * the first line, defaulting to `indent.length` + * @param {number} [options.lineWidth=80] + * @param {number} [options.minContentWidth=20] Allow highly indented lines to + * stretch the line width + * @param {function} options.onFold Called once if the text is folded + * @param {function} options.onFold Called once if any line of text exceeds + * lineWidth characters + */ + + +function foldFlowLines(text, indent, mode, _ref) { + var indentAtStart = _ref.indentAtStart, + _ref$lineWidth = _ref.lineWidth, + lineWidth = _ref$lineWidth === void 0 ? 80 : _ref$lineWidth, + _ref$minContentWidth = _ref.minContentWidth, + minContentWidth = _ref$minContentWidth === void 0 ? 20 : _ref$minContentWidth, + onFold = _ref.onFold, + onOverflow = _ref.onOverflow; + if (!lineWidth || lineWidth < 0) return text; + var endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); + if (text.length <= endStep) return text; + var folds = []; + var escapedFolds = {}; + var end = lineWidth - (typeof indentAtStart === 'number' ? indentAtStart : indent.length); + var split = undefined; + var prev = undefined; + var overflow = false; + var i = -1; + + if (mode === FOLD_BLOCK) { + i = consumeMoreIndentedLines(text, i); + if (i !== -1) end = i + endStep; + } + + for (var ch; ch = text[i += 1];) { + if (mode === FOLD_QUOTED && ch === '\\') { + switch (text[i + 1]) { + case 'x': + i += 3; + break; + + case 'u': + i += 5; + break; + + case 'U': + i += 9; + break; + + default: + i += 1; + } + } + + if (ch === '\n') { + if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i); + end = i + endStep; + split = undefined; + } else { + if (ch === ' ' && prev && prev !== ' ' && prev !== '\n' && prev !== '\t') { + // space surrounded by non-space can be replaced with newline + indent + var next = text[i + 1]; + if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i; + } + + if (i >= end) { + if (split) { + folds.push(split); + end = split + endStep; + split = undefined; + } else if (mode === FOLD_QUOTED) { + // white-space collected at end may stretch past lineWidth + while (prev === ' ' || prev === '\t') { + prev = ch; + ch = text[i += 1]; + overflow = true; + } // i - 2 accounts for not-dropped last char + newline-escaping \ + + + folds.push(i - 2); + escapedFolds[i - 2] = true; + end = i - 2 + endStep; + split = undefined; + } else { + overflow = true; + } + } + } + + prev = ch; + } + + if (overflow && onOverflow) onOverflow(); + if (folds.length === 0) return text; + if (onFold) onFold(); + var res = text.slice(0, folds[0]); + + for (var _i = 0; _i < folds.length; ++_i) { + var fold = folds[_i]; + + var _end = folds[_i + 1] || text.length; + + if (mode === FOLD_QUOTED && escapedFolds[fold]) res += "".concat(text[fold], "\\"); + res += "\n".concat(indent).concat(text.slice(fold + 1, _end)); + } + + return res; +} + +var getFoldOptions = function getFoldOptions(_ref) { + var indentAtStart = _ref.indentAtStart; + return indentAtStart ? Object.assign({ + indentAtStart: indentAtStart + }, strOptions.fold) : strOptions.fold; +}; // Also checks for lines starting with %, as parsing the output as YAML 1.1 will +// presume that's starting a new document. + + +var containsDocumentMarker = function containsDocumentMarker(str) { + return /^(%|---|\.\.\.)/m.test(str); +}; + +function lineLengthOverLimit(str, limit) { + var strLen = str.length; + if (strLen <= limit) return false; + + for (var i = 0, start = 0; i < strLen; ++i) { + if (str[i] === '\n') { + if (i - start > limit) return true; + start = i + 1; + if (strLen - start <= limit) return false; + } + } + + return true; +} + +function doubleQuotedString(value, ctx) { + var implicitKey = ctx.implicitKey; + var _strOptions$doubleQuo = strOptions.doubleQuoted, + jsonEncoding = _strOptions$doubleQuo.jsonEncoding, + minMultiLineLength = _strOptions$doubleQuo.minMultiLineLength; + var json = JSON.stringify(value); + if (jsonEncoding) return json; + var indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); + var str = ''; + var start = 0; + + for (var i = 0, ch = json[i]; ch; ch = json[++i]) { + if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') { + // space before newline needs to be escaped to not be folded + str += json.slice(start, i) + '\\ '; + i += 1; + start = i; + ch = '\\'; + } + + if (ch === '\\') switch (json[i + 1]) { + case 'u': + { + str += json.slice(start, i); + var code = json.substr(i + 2, 4); + + switch (code) { + case '0000': + str += '\\0'; + break; + + case '0007': + str += '\\a'; + break; + + case '000b': + str += '\\v'; + break; + + case '001b': + str += '\\e'; + break; + + case '0085': + str += '\\N'; + break; + + case '00a0': + str += '\\_'; + break; + + case '2028': + str += '\\L'; + break; + + case '2029': + str += '\\P'; + break; + + default: + if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2);else str += json.substr(i, 6); + } + + i += 5; + start = i + 1; + } + break; + + case 'n': + if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) { + i += 1; + } else { + // folding will eat first newline + str += json.slice(start, i) + '\n\n'; + + while (json[i + 2] === '\\' && json[i + 3] === 'n' && json[i + 4] !== '"') { + str += '\n'; + i += 2; + } + + str += indent; // space after newline needs to be escaped to not be folded + + if (json[i + 2] === ' ') str += '\\'; + i += 1; + start = i + 1; + } + + break; + + default: + i += 1; + } + } + + str = start ? str + json.slice(start) : json; + return implicitKey ? str : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx)); +} + +function singleQuotedString(value, ctx) { + if (ctx.implicitKey) { + if (/\n/.test(value)) return doubleQuotedString(value, ctx); + } else { + // single quoted string can't have leading or trailing whitespace around newline + if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx); + } + + var indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); + var res = "'" + value.replace(/'/g, "''").replace(/\n+/g, "$&\n".concat(indent)) + "'"; + return ctx.implicitKey ? res : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx)); +} + +function blockString(_ref2, ctx, onComment, onChompKeep) { + var comment = _ref2.comment, + type = _ref2.type, + value = _ref2.value; + + // 1. Block can't end in whitespace unless the last line is non-empty. + // 2. Strings consisting of only whitespace are best rendered explicitly. + if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) { + return doubleQuotedString(value, ctx); + } + + var indent = ctx.indent || (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : ''); + var indentSize = indent ? '2' : '1'; // root is at -1 + + var literal = type === Type.BLOCK_FOLDED ? false : type === Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, strOptions.fold.lineWidth - indent.length); + var header = literal ? '|' : '>'; + if (!value) return header + '\n'; + var wsStart = ''; + var wsEnd = ''; + value = value.replace(/[\n\t ]*$/, function (ws) { + var n = ws.indexOf('\n'); + + if (n === -1) { + header += '-'; // strip + } else if (value === ws || n !== ws.length - 1) { + header += '+'; // keep + + if (onChompKeep) onChompKeep(); + } + + wsEnd = ws.replace(/\n$/, ''); + return ''; + }).replace(/^[\n ]*/, function (ws) { + if (ws.indexOf(' ') !== -1) header += indentSize; + var m = ws.match(/ +$/); + + if (m) { + wsStart = ws.slice(0, -m[0].length); + return m[0]; + } else { + wsStart = ws; + return ''; + } + }); + if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, "$&".concat(indent)); + if (wsStart) wsStart = wsStart.replace(/\n+/g, "$&".concat(indent)); + + if (comment) { + header += ' #' + comment.replace(/ ?[\r\n]+/g, ' '); + if (onComment) onComment(); + } + + if (!value) return "".concat(header).concat(indentSize, "\n").concat(indent).concat(wsEnd); + + if (literal) { + value = value.replace(/\n+/g, "$&".concat(indent)); + return "".concat(header, "\n").concat(indent).concat(wsStart).concat(value).concat(wsEnd); + } + + value = value.replace(/\n+/g, '\n$&').replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded + // ^ ind.line ^ empty ^ capture next empty lines only at end of indent + .replace(/\n+/g, "$&".concat(indent)); + var body = foldFlowLines("".concat(wsStart).concat(value).concat(wsEnd), indent, FOLD_BLOCK, strOptions.fold); + return "".concat(header, "\n").concat(indent).concat(body); +} + +function plainString(item, ctx, onComment, onChompKeep) { + var comment = item.comment, + type = item.type, + value = item.value; + var actualString = ctx.actualString, + implicitKey = ctx.implicitKey, + indent = ctx.indent, + inFlow = ctx.inFlow; + + if (implicitKey && /[\n[\]{},]/.test(value) || inFlow && /[[\]{},]/.test(value)) { + return doubleQuotedString(value, ctx); + } + + if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { + // not allowed: + // - empty string, '-' or '?' + // - start with an indicator character (except [?:-]) or /[?-] / + // - '\n ', ': ' or ' \n' anywhere + // - '#' not preceded by a non-space char + // - end with ' ' or ':' + return implicitKey || inFlow || value.indexOf('\n') === -1 ? value.indexOf('"') !== -1 && value.indexOf("'") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep); + } + + if (!implicitKey && !inFlow && type !== Type.PLAIN && value.indexOf('\n') !== -1) { + // Where allowed & type not set explicitly, prefer block style for multiline strings + return blockString(item, ctx, onComment, onChompKeep); + } + + if (indent === '' && containsDocumentMarker(value)) { + ctx.forceBlockIndent = true; + return blockString(item, ctx, onComment, onChompKeep); + } + + var str = value.replace(/\n+/g, "$&\n".concat(indent)); // Verify that output will be parsed as a string, as e.g. plain numbers and + // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'), + // and others in v1.1. + + if (actualString) { + var tags = ctx.doc.schema.tags; + var resolved = resolveScalar(str, tags, tags.scalarFallback).value; + if (typeof resolved !== 'string') return doubleQuotedString(value, ctx); + } + + var body = implicitKey ? str : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx)); + + if (comment && !inFlow && (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) { + if (onComment) onComment(); + return addCommentBefore(body, indent, comment); + } + + return body; +} + +function stringifyString(item, ctx, onComment, onChompKeep) { + var defaultType = strOptions.defaultType; + var implicitKey = ctx.implicitKey, + inFlow = ctx.inFlow; + var _item = item, + type = _item.type, + value = _item.value; + + if (typeof value !== 'string') { + value = String(value); + item = Object.assign({}, item, { + value: value + }); + } + + var _stringify = function _stringify(_type) { + switch (_type) { + case Type.BLOCK_FOLDED: + case Type.BLOCK_LITERAL: + return blockString(item, ctx, onComment, onChompKeep); + + case Type.QUOTE_DOUBLE: + return doubleQuotedString(value, ctx); + + case Type.QUOTE_SINGLE: + return singleQuotedString(value, ctx); + + case Type.PLAIN: + return plainString(item, ctx, onComment, onChompKeep); + + default: + return null; + } + }; + + if (type !== Type.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)) { + // force double quotes on control characters + type = Type.QUOTE_DOUBLE; + } else if ((implicitKey || inFlow) && (type === Type.BLOCK_FOLDED || type === Type.BLOCK_LITERAL)) { + // should not happen; blocks are not valid inside flow containers + type = Type.QUOTE_DOUBLE; + } + + var res = _stringify(type); + + if (res === null) { + res = _stringify(defaultType); + if (res === null) throw new Error("Unsupported default string type ".concat(defaultType)); + } + + return res; +} + +function stringifyNumber(_ref) { + var format = _ref.format, + minFractionDigits = _ref.minFractionDigits, + tag = _ref.tag, + value = _ref.value; + if (typeof value === 'bigint') return String(value); + if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf'; + var n = JSON.stringify(value); + + if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\d/.test(n)) { + var i = n.indexOf('.'); + + if (i < 0) { + i = n.length; + n += '.'; + } + + var d = minFractionDigits - (n.length - i - 1); + + while (d-- > 0) { + n += '0'; + } + } + + return n; +} + +function checkFlowCollectionEnd(errors, cst) { + var char, name; + + switch (cst.type) { + case Type.FLOW_MAP: + char = '}'; + name = 'flow map'; + break; + + case Type.FLOW_SEQ: + char = ']'; + name = 'flow sequence'; + break; + + default: + errors.push(new YAMLSemanticError(cst, 'Not a flow collection!?')); + return; + } + + var lastItem; + + for (var i = cst.items.length - 1; i >= 0; --i) { + var item = cst.items[i]; + + if (!item || item.type !== Type.COMMENT) { + lastItem = item; + break; + } + } + + if (lastItem && lastItem.char !== char) { + var msg = "Expected ".concat(name, " to end with ").concat(char); + var err; + + if (typeof lastItem.offset === 'number') { + err = new YAMLSemanticError(cst, msg); + err.offset = lastItem.offset + 1; + } else { + err = new YAMLSemanticError(lastItem, msg); + if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start; + } + + errors.push(err); + } +} +function checkFlowCommentSpace(errors, comment) { + var prev = comment.context.src[comment.range.start - 1]; + + if (prev !== '\n' && prev !== '\t' && prev !== ' ') { + var msg = 'Comments must be separated from other tokens by white space characters'; + errors.push(new YAMLSemanticError(comment, msg)); + } +} +function getLongKeyError(source, key) { + var sk = String(key); + var k = sk.substr(0, 8) + '...' + sk.substr(-8); + return new YAMLSemanticError(source, "The \"".concat(k, "\" key is too long")); +} +function resolveComments(collection, comments) { + var _iterator = _createForOfIteratorHelper(comments), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _step$value = _step.value, + afterKey = _step$value.afterKey, + before = _step$value.before, + comment = _step$value.comment; + var item = collection.items[before]; + + if (!item) { + if (comment !== undefined) { + if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment; + } + } else { + if (afterKey && item.value) item = item.value; + + if (comment === undefined) { + if (afterKey || !item.commentBefore) item.spaceBefore = true; + } else { + if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment; + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } +} + +// on error, will return { str: string, errors: Error[] } +function resolveString(doc, node) { + var res = node.strValue; + if (!res) return ''; + if (typeof res === 'string') return res; + res.errors.forEach(function (error) { + if (!error.source) error.source = node; + doc.errors.push(error); + }); + return res.str; +} + +function resolveTagHandle(doc, node) { + var _node$tag = node.tag, + handle = _node$tag.handle, + suffix = _node$tag.suffix; + var prefix = doc.tagPrefixes.find(function (p) { + return p.handle === handle; + }); + + if (!prefix) { + var dtp = doc.getDefaults().tagPrefixes; + if (dtp) prefix = dtp.find(function (p) { + return p.handle === handle; + }); + if (!prefix) throw new YAMLSemanticError(node, "The ".concat(handle, " tag handle is non-default and was not declared.")); + } + + if (!suffix) throw new YAMLSemanticError(node, "The ".concat(handle, " tag has no suffix.")); + + if (handle === '!' && (doc.version || doc.options.version) === '1.0') { + if (suffix[0] === '^') { + doc.warnings.push(new YAMLWarning(node, 'YAML 1.0 ^ tag expansion is not supported')); + return suffix; + } + + if (/[:/]/.test(suffix)) { + // word/foo -> tag:word.yaml.org,2002:foo + var vocab = suffix.match(/^([a-z0-9-]+)\/(.*)/i); + return vocab ? "tag:".concat(vocab[1], ".yaml.org,2002:").concat(vocab[2]) : "tag:".concat(suffix); + } + } + + return prefix.prefix + decodeURIComponent(suffix); +} + +function resolveTagName(doc, node) { + var tag = node.tag, + type = node.type; + var nonSpecific = false; + + if (tag) { + var handle = tag.handle, + suffix = tag.suffix, + verbatim = tag.verbatim; + + if (verbatim) { + if (verbatim !== '!' && verbatim !== '!!') return verbatim; + var msg = "Verbatim tags aren't resolved, so ".concat(verbatim, " is invalid."); + doc.errors.push(new YAMLSemanticError(node, msg)); + } else if (handle === '!' && !suffix) { + nonSpecific = true; + } else { + try { + return resolveTagHandle(doc, node); + } catch (error) { + doc.errors.push(error); + } + } + } + + switch (type) { + case Type.BLOCK_FOLDED: + case Type.BLOCK_LITERAL: + case Type.QUOTE_DOUBLE: + case Type.QUOTE_SINGLE: + return defaultTags.STR; + + case Type.FLOW_MAP: + case Type.MAP: + return defaultTags.MAP; + + case Type.FLOW_SEQ: + case Type.SEQ: + return defaultTags.SEQ; + + case Type.PLAIN: + return nonSpecific ? defaultTags.STR : null; + + default: + return null; + } +} + +function resolveByTagName(doc, node, tagName) { + var tags = doc.schema.tags; + var matchWithTest = []; + + var _iterator = _createForOfIteratorHelper(tags), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var tag = _step.value; + + if (tag.tag === tagName) { + if (tag.test) matchWithTest.push(tag);else { + var res = tag.resolve(doc, node); + return res instanceof Collection$1 ? res : new Scalar(res); + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + var str = resolveString(doc, node); + if (typeof str === 'string' && matchWithTest.length > 0) return resolveScalar(str, matchWithTest, tags.scalarFallback); + return null; +} + +function getFallbackTagName(_ref) { + var type = _ref.type; + + switch (type) { + case Type.FLOW_MAP: + case Type.MAP: + return defaultTags.MAP; + + case Type.FLOW_SEQ: + case Type.SEQ: + return defaultTags.SEQ; + + default: + return defaultTags.STR; + } +} + +function resolveTag(doc, node, tagName) { + try { + var res = resolveByTagName(doc, node, tagName); + + if (res) { + if (tagName && node.tag) res.tag = tagName; + return res; + } + } catch (error) { + /* istanbul ignore if */ + if (!error.source) error.source = node; + doc.errors.push(error); + return null; + } + + try { + var fallback = getFallbackTagName(node); + if (!fallback) throw new Error("The tag ".concat(tagName, " is unavailable")); + var msg = "The tag ".concat(tagName, " is unavailable, falling back to ").concat(fallback); + doc.warnings.push(new YAMLWarning(node, msg)); + + var _res = resolveByTagName(doc, node, fallback); + + _res.tag = tagName; + return _res; + } catch (error) { + var refError = new YAMLReferenceError(node, error.message); + refError.stack = error.stack; + doc.errors.push(refError); + return null; + } +} + +var isCollectionItem = function isCollectionItem(node) { + if (!node) return false; + var type = node.type; + return type === Type.MAP_KEY || type === Type.MAP_VALUE || type === Type.SEQ_ITEM; +}; + +function resolveNodeProps(errors, node) { + var comments = { + before: [], + after: [] + }; + var hasAnchor = false; + var hasTag = false; + var props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props; + + var _iterator = _createForOfIteratorHelper(props), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _step$value = _step.value, + start = _step$value.start, + end = _step$value.end; + + switch (node.context.src[start]) { + case Char.COMMENT: + { + if (!node.commentHasRequiredWhitespace(start)) { + var msg = 'Comments must be separated from other tokens by white space characters'; + errors.push(new YAMLSemanticError(node, msg)); + } + + var header = node.header, + valueRange = node.valueRange; + var cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before; + cc.push(node.context.src.slice(start + 1, end)); + break; + } + // Actual anchor & tag resolution is handled by schema, here we just complain + + case Char.ANCHOR: + if (hasAnchor) { + var _msg = 'A node can have at most one anchor'; + errors.push(new YAMLSemanticError(node, _msg)); + } + + hasAnchor = true; + break; + + case Char.TAG: + if (hasTag) { + var _msg2 = 'A node can have at most one tag'; + errors.push(new YAMLSemanticError(node, _msg2)); + } + + hasTag = true; + break; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return { + comments: comments, + hasAnchor: hasAnchor, + hasTag: hasTag + }; +} + +function resolveNodeValue(doc, node) { + var anchors = doc.anchors, + errors = doc.errors, + schema = doc.schema; + + if (node.type === Type.ALIAS) { + var name = node.rawValue; + var src = anchors.getNode(name); + + if (!src) { + var msg = "Aliased anchor not found: ".concat(name); + errors.push(new YAMLReferenceError(node, msg)); + return null; + } // Lazy resolution for circular references + + + var res = new Alias$1(src); + + anchors._cstAliases.push(res); + + return res; + } + + var tagName = resolveTagName(doc, node); + if (tagName) return resolveTag(doc, node, tagName); + + if (node.type !== Type.PLAIN) { + var _msg3 = "Failed to resolve ".concat(node.type, " node here"); + + errors.push(new YAMLSyntaxError(node, _msg3)); + return null; + } + + try { + var str = resolveString(doc, node); + return resolveScalar(str, schema.tags, schema.tags.scalarFallback); + } catch (error) { + if (!error.source) error.source = node; + errors.push(error); + return null; + } +} // sets node.resolved on success + + +function resolveNode(doc, node) { + if (!node) return null; + if (node.error) doc.errors.push(node.error); + + var _resolveNodeProps = resolveNodeProps(doc.errors, node), + comments = _resolveNodeProps.comments, + hasAnchor = _resolveNodeProps.hasAnchor, + hasTag = _resolveNodeProps.hasTag; + + if (hasAnchor) { + var anchors = doc.anchors; + var name = node.anchor; + var prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor + // name have already been resolved, so it may safely be renamed. + + if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as + // anchors need to be available during resolution to allow for + // circular references. + + anchors.map[name] = node; + } + + if (node.type === Type.ALIAS && (hasAnchor || hasTag)) { + var msg = 'An alias node must not specify any properties'; + doc.errors.push(new YAMLSemanticError(node, msg)); + } + + var res = resolveNodeValue(doc, node); + + if (res) { + res.range = [node.range.start, node.range.end]; + if (doc.options.keepCstNodes) res.cstNode = node; + if (doc.options.keepNodeTypes) res.type = node.type; + var cb = comments.before.join('\n'); + + if (cb) { + res.commentBefore = res.commentBefore ? "".concat(res.commentBefore, "\n").concat(cb) : cb; + } + + var ca = comments.after.join('\n'); + if (ca) res.comment = res.comment ? "".concat(res.comment, "\n").concat(ca) : ca; + } + + return node.resolved = res; +} + +function resolveMap(doc, cst) { + if (cst.type !== Type.MAP && cst.type !== Type.FLOW_MAP) { + var msg = "A ".concat(cst.type, " node cannot be resolved as a mapping"); + doc.errors.push(new YAMLSyntaxError(cst, msg)); + return null; + } + + var _ref = cst.type === Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst), + comments = _ref.comments, + items = _ref.items; + + var map = new YAMLMap(); + map.items = items; + resolveComments(map, comments); + var hasCollectionKey = false; + + for (var i = 0; i < items.length; ++i) { + var iKey = items[i].key; + if (iKey instanceof Collection$1) hasCollectionKey = true; + + if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) { + items[i] = new Merge(items[i]); + var sources = items[i].value.items; + var error = null; + sources.some(function (node) { + if (node instanceof Alias$1) { + // During parsing, alias sources are CST nodes; to account for + // circular references their resolved values can't be used here. + var type = node.source.type; + if (type === Type.MAP || type === Type.FLOW_MAP) return false; + return error = 'Merge nodes aliases can only point to maps'; + } + + return error = 'Merge nodes can only have Alias nodes as values'; + }); + if (error) doc.errors.push(new YAMLSemanticError(cst, error)); + } else { + for (var j = i + 1; j < items.length; ++j) { + var jKey = items[j].key; + + if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) { + var _msg = "Map keys must be unique; \"".concat(iKey, "\" is repeated"); + + doc.errors.push(new YAMLSemanticError(cst, _msg)); + break; + } + } + } + } + + if (hasCollectionKey && !doc.options.mapAsMap) { + var warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; + doc.warnings.push(new YAMLWarning(cst, warn)); + } + + cst.resolved = map; + return map; +} + +var valueHasPairComment = function valueHasPairComment(_ref2) { + var _ref2$context = _ref2.context, + lineStart = _ref2$context.lineStart, + node = _ref2$context.node, + src = _ref2$context.src, + props = _ref2.props; + if (props.length === 0) return false; + var start = props[0].start; + if (node && start > node.valueRange.start) return false; + if (src[start] !== Char.COMMENT) return false; + + for (var i = lineStart; i < start; ++i) { + if (src[i] === '\n') return false; + } + + return true; +}; + +function resolvePairComment(item, pair) { + if (!valueHasPairComment(item)) return; + var comment = item.getPropValue(0, Char.COMMENT, true); + var found = false; + var cb = pair.value.commentBefore; + + if (cb && cb.startsWith(comment)) { + pair.value.commentBefore = cb.substr(comment.length + 1); + found = true; + } else { + var cc = pair.value.comment; + + if (!item.node && cc && cc.startsWith(comment)) { + pair.value.comment = cc.substr(comment.length + 1); + found = true; + } + } + + if (found) pair.comment = comment; +} + +function resolveBlockMapItems(doc, cst) { + var comments = []; + var items = []; + var key = undefined; + var keyStart = null; + + for (var i = 0; i < cst.items.length; ++i) { + var item = cst.items[i]; + + switch (item.type) { + case Type.BLANK_LINE: + comments.push({ + afterKey: !!key, + before: items.length + }); + break; + + case Type.COMMENT: + comments.push({ + afterKey: !!key, + before: items.length, + comment: item.comment + }); + break; + + case Type.MAP_KEY: + if (key !== undefined) items.push(new Pair(key)); + if (item.error) doc.errors.push(item.error); + key = resolveNode(doc, item.node); + keyStart = null; + break; + + case Type.MAP_VALUE: + { + if (key === undefined) key = null; + if (item.error) doc.errors.push(item.error); + + if (!item.context.atLineStart && item.node && item.node.type === Type.MAP && !item.node.context.atLineStart) { + var msg = 'Nested mappings are not allowed in compact mappings'; + doc.errors.push(new YAMLSemanticError(item.node, msg)); + } + + var valueNode = item.node; + + if (!valueNode && item.props.length > 0) { + // Comments on an empty mapping value need to be preserved, so we + // need to construct a minimal empty node here to use instead of the + // missing `item.node`. -- eemeli/yaml#19 + valueNode = new PlainValue(Type.PLAIN, []); + valueNode.context = { + parent: item, + src: item.context.src + }; + var pos = item.range.start + 1; + valueNode.range = { + start: pos, + end: pos + }; + valueNode.valueRange = { + start: pos, + end: pos + }; + + if (typeof item.range.origStart === 'number') { + var origPos = item.range.origStart + 1; + valueNode.range.origStart = valueNode.range.origEnd = origPos; + valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos; + } + } + + var pair = new Pair(key, resolveNode(doc, valueNode)); + resolvePairComment(item, pair); + items.push(pair); + + if (key && typeof keyStart === 'number') { + if (item.range.start > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key)); + } + + key = undefined; + keyStart = null; + } + break; + + default: + if (key !== undefined) items.push(new Pair(key)); + key = resolveNode(doc, item); + keyStart = item.range.start; + if (item.error) doc.errors.push(item.error); + + next: for (var j = i + 1;; ++j) { + var nextItem = cst.items[j]; + + switch (nextItem && nextItem.type) { + case Type.BLANK_LINE: + case Type.COMMENT: + continue next; + + case Type.MAP_VALUE: + break next; + + default: + { + var _msg2 = 'Implicit map keys need to be followed by map values'; + doc.errors.push(new YAMLSemanticError(item, _msg2)); + break next; + } + } + } + + if (item.valueRangeContainsNewline) { + var _msg3 = 'Implicit map keys need to be on a single line'; + doc.errors.push(new YAMLSemanticError(item, _msg3)); + } + + } + } + + if (key !== undefined) items.push(new Pair(key)); + return { + comments: comments, + items: items + }; +} + +function resolveFlowMapItems(doc, cst) { + var comments = []; + var items = []; + var key = undefined; + var explicitKey = false; + var next = '{'; + + for (var i = 0; i < cst.items.length; ++i) { + var item = cst.items[i]; + + if (typeof item.char === 'string') { + var char = item.char, + offset = item.offset; + + if (char === '?' && key === undefined && !explicitKey) { + explicitKey = true; + next = ':'; + continue; + } + + if (char === ':') { + if (key === undefined) key = null; + + if (next === ':') { + next = ','; + continue; + } + } else { + if (explicitKey) { + if (key === undefined && char !== ',') key = null; + explicitKey = false; + } + + if (key !== undefined) { + items.push(new Pair(key)); + key = undefined; + + if (char === ',') { + next = ':'; + continue; + } + } + } + + if (char === '}') { + if (i === cst.items.length - 1) continue; + } else if (char === next) { + next = ':'; + continue; + } + + var msg = "Flow map contains an unexpected ".concat(char); + var err = new YAMLSyntaxError(cst, msg); + err.offset = offset; + doc.errors.push(err); + } else if (item.type === Type.BLANK_LINE) { + comments.push({ + afterKey: !!key, + before: items.length + }); + } else if (item.type === Type.COMMENT) { + checkFlowCommentSpace(doc.errors, item); + comments.push({ + afterKey: !!key, + before: items.length, + comment: item.comment + }); + } else if (key === undefined) { + if (next === ',') doc.errors.push(new YAMLSemanticError(item, 'Separator , missing in flow map')); + key = resolveNode(doc, item); + } else { + if (next !== ',') doc.errors.push(new YAMLSemanticError(item, 'Indicator : missing in flow map entry')); + items.push(new Pair(key, resolveNode(doc, item))); + key = undefined; + explicitKey = false; + } + } + + checkFlowCollectionEnd(doc.errors, cst); + if (key !== undefined) items.push(new Pair(key)); + return { + comments: comments, + items: items + }; +} + +function resolveSeq(doc, cst) { + if (cst.type !== Type.SEQ && cst.type !== Type.FLOW_SEQ) { + var msg = "A ".concat(cst.type, " node cannot be resolved as a sequence"); + doc.errors.push(new YAMLSyntaxError(cst, msg)); + return null; + } + + var _ref = cst.type === Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst), + comments = _ref.comments, + items = _ref.items; + + var seq = new YAMLSeq(); + seq.items = items; + resolveComments(seq, comments); + + if (!doc.options.mapAsMap && items.some(function (it) { + return it instanceof Pair && it.key instanceof Collection$1; + })) { + var warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; + doc.warnings.push(new YAMLWarning(cst, warn)); + } + + cst.resolved = seq; + return seq; +} + +function resolveBlockSeqItems(doc, cst) { + var comments = []; + var items = []; + + for (var i = 0; i < cst.items.length; ++i) { + var item = cst.items[i]; + + switch (item.type) { + case Type.BLANK_LINE: + comments.push({ + before: items.length + }); + break; + + case Type.COMMENT: + comments.push({ + comment: item.comment, + before: items.length + }); + break; + + case Type.SEQ_ITEM: + if (item.error) doc.errors.push(item.error); + items.push(resolveNode(doc, item.node)); + + if (item.hasProps) { + var msg = 'Sequence items cannot have tags or anchors before the - indicator'; + doc.errors.push(new YAMLSemanticError(item, msg)); + } + + break; + + default: + if (item.error) doc.errors.push(item.error); + doc.errors.push(new YAMLSyntaxError(item, "Unexpected ".concat(item.type, " node in sequence"))); + } + } + + return { + comments: comments, + items: items + }; +} + +function resolveFlowSeqItems(doc, cst) { + var comments = []; + var items = []; + var explicitKey = false; + var key = undefined; + var keyStart = null; + var next = '['; + var prevItem = null; + + for (var i = 0; i < cst.items.length; ++i) { + var item = cst.items[i]; + + if (typeof item.char === 'string') { + var char = item.char, + offset = item.offset; + + if (char !== ':' && (explicitKey || key !== undefined)) { + if (explicitKey && key === undefined) key = next ? items.pop() : null; + items.push(new Pair(key)); + explicitKey = false; + key = undefined; + keyStart = null; + } + + if (char === next) { + next = null; + } else if (!next && char === '?') { + explicitKey = true; + } else if (next !== '[' && char === ':' && key === undefined) { + if (next === ',') { + key = items.pop(); + + if (key instanceof Pair) { + var msg = 'Chaining flow sequence pairs is invalid'; + var err = new YAMLSemanticError(cst, msg); + err.offset = offset; + doc.errors.push(err); + } + + if (!explicitKey && typeof keyStart === 'number') { + var keyEnd = item.range ? item.range.start : item.offset; + if (keyEnd > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key)); + var src = prevItem.context.src; + + for (var _i = keyStart; _i < keyEnd; ++_i) { + if (src[_i] === '\n') { + var _msg = 'Implicit keys of flow sequence pairs need to be on a single line'; + doc.errors.push(new YAMLSemanticError(prevItem, _msg)); + break; + } + } + } + } else { + key = null; + } + + keyStart = null; + explicitKey = false; + next = null; + } else if (next === '[' || char !== ']' || i < cst.items.length - 1) { + var _msg2 = "Flow sequence contains an unexpected ".concat(char); + + var _err = new YAMLSyntaxError(cst, _msg2); + + _err.offset = offset; + doc.errors.push(_err); + } + } else if (item.type === Type.BLANK_LINE) { + comments.push({ + before: items.length + }); + } else if (item.type === Type.COMMENT) { + checkFlowCommentSpace(doc.errors, item); + comments.push({ + comment: item.comment, + before: items.length + }); + } else { + if (next) { + var _msg3 = "Expected a ".concat(next, " in flow sequence"); + + doc.errors.push(new YAMLSemanticError(item, _msg3)); + } + + var value = resolveNode(doc, item); + + if (key === undefined) { + items.push(value); + prevItem = item; + } else { + items.push(new Pair(key, value)); + key = undefined; + } + + keyStart = item.range.start; + next = ','; + } + } + + checkFlowCollectionEnd(doc.errors, cst); + if (key !== undefined) items.push(new Pair(key)); + return { + comments: comments, + items: items + }; +} + +/* global atob, btoa, Buffer */ +var binary = { + identify: function identify(value) { + return value instanceof Uint8Array; + }, + // Buffer inherits from Uint8Array + default: false, + tag: 'tag:yaml.org,2002:binary', + + /** + * Returns a Buffer in node and an Uint8Array in browsers + * + * To use the resulting buffer as an image, you'll want to do something like: + * + * const blob = new Blob([buffer], { type: 'image/jpeg' }) + * document.querySelector('#photo').src = URL.createObjectURL(blob) + */ + resolve: function resolve(doc, node) { + var src = resolveString(doc, node); + + if (typeof Buffer === 'function') { + return Buffer.from(src, 'base64'); + } else if (typeof atob === 'function') { + // On IE 11, atob() can't handle newlines + var str = atob(src.replace(/[\n\r]/g, '')); + var buffer = new Uint8Array(str.length); + + for (var i = 0; i < str.length; ++i) { + buffer[i] = str.charCodeAt(i); + } + + return buffer; + } else { + var msg = 'This environment does not support reading binary tags; either Buffer or atob is required'; + doc.errors.push(new YAMLReferenceError(node, msg)); + return null; + } + }, + options: binaryOptions, + stringify: function stringify(_ref, ctx, onComment, onChompKeep) { + var comment = _ref.comment, + type = _ref.type, + value = _ref.value; + var src; + + if (typeof Buffer === 'function') { + src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64'); + } else if (typeof btoa === 'function') { + var s = ''; + + for (var i = 0; i < value.length; ++i) { + s += String.fromCharCode(value[i]); + } + + src = btoa(s); + } else { + throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required'); + } + + if (!type) type = binaryOptions.defaultType; + + if (type === Type.QUOTE_DOUBLE) { + value = src; + } else { + var lineWidth = binaryOptions.lineWidth; + var n = Math.ceil(src.length / lineWidth); + var lines = new Array(n); + + for (var _i = 0, o = 0; _i < n; ++_i, o += lineWidth) { + lines[_i] = src.substr(o, lineWidth); + } + + value = lines.join(type === Type.BLOCK_LITERAL ? '\n' : ' '); + } + + return stringifyString({ + comment: comment, + type: type, + value: value + }, ctx, onComment, onChompKeep); + } +}; + +function parsePairs(doc, cst) { + var seq = resolveSeq(doc, cst); + + for (var i = 0; i < seq.items.length; ++i) { + var item = seq.items[i]; + if (item instanceof Pair) continue;else if (item instanceof YAMLMap) { + if (item.items.length > 1) { + var msg = 'Each pair must have its own sequence indicator'; + throw new YAMLSemanticError(cst, msg); + } + + var pair = item.items[0] || new Pair(); + if (item.commentBefore) pair.commentBefore = pair.commentBefore ? "".concat(item.commentBefore, "\n").concat(pair.commentBefore) : item.commentBefore; + if (item.comment) pair.comment = pair.comment ? "".concat(item.comment, "\n").concat(pair.comment) : item.comment; + item = pair; + } + seq.items[i] = item instanceof Pair ? item : new Pair(item); + } + + return seq; +} +function createPairs(schema, iterable, ctx) { + var pairs = new YAMLSeq(schema); + pairs.tag = 'tag:yaml.org,2002:pairs'; + + var _iterator = _createForOfIteratorHelper(iterable), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var it = _step.value; + var key = void 0, + value = void 0; + + if (Array.isArray(it)) { + if (it.length === 2) { + key = it[0]; + value = it[1]; + } else throw new TypeError("Expected [key, value] tuple: ".concat(it)); + } else if (it && it instanceof Object) { + var keys = Object.keys(it); + + if (keys.length === 1) { + key = keys[0]; + value = it[key]; + } else throw new TypeError("Expected { key: value } tuple: ".concat(it)); + } else { + key = it; + } + + var pair = schema.createPair(key, value, ctx); + pairs.items.push(pair); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return pairs; +} +var pairs = { + default: false, + tag: 'tag:yaml.org,2002:pairs', + resolve: parsePairs, + createNode: createPairs +}; + +var YAMLOMap = /*#__PURE__*/function (_YAMLSeq) { + _inherits(YAMLOMap, _YAMLSeq); + + var _super = _createSuper(YAMLOMap); + + function YAMLOMap() { + var _this; + + _classCallCheck(this, YAMLOMap); + + _this = _super.call(this); + + _defineProperty(_assertThisInitialized(_this), "add", YAMLMap.prototype.add.bind(_assertThisInitialized(_this))); + + _defineProperty(_assertThisInitialized(_this), "delete", YAMLMap.prototype.delete.bind(_assertThisInitialized(_this))); + + _defineProperty(_assertThisInitialized(_this), "get", YAMLMap.prototype.get.bind(_assertThisInitialized(_this))); + + _defineProperty(_assertThisInitialized(_this), "has", YAMLMap.prototype.has.bind(_assertThisInitialized(_this))); + + _defineProperty(_assertThisInitialized(_this), "set", YAMLMap.prototype.set.bind(_assertThisInitialized(_this))); + + _this.tag = YAMLOMap.tag; + return _this; + } + + _createClass(YAMLOMap, [{ + key: "toJSON", + value: function toJSON$1(_, ctx) { + var map = new Map(); + if (ctx && ctx.onCreate) ctx.onCreate(map); + + var _iterator = _createForOfIteratorHelper(this.items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var pair = _step.value; + var key = void 0, + value = void 0; + + if (pair instanceof Pair) { + key = toJSON(pair.key, '', ctx); + value = toJSON(pair.value, key, ctx); + } else { + key = toJSON(pair, '', ctx); + } + + if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys'); + map.set(key, value); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return map; + } + }]); + + return YAMLOMap; +}(YAMLSeq); + +_defineProperty(YAMLOMap, "tag", 'tag:yaml.org,2002:omap'); + +function parseOMap(doc, cst) { + var pairs = parsePairs(doc, cst); + var seenKeys = []; + + var _iterator2 = _createForOfIteratorHelper(pairs.items), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var key = _step2.value.key; + + if (key instanceof Scalar) { + if (seenKeys.includes(key.value)) { + var msg = 'Ordered maps must not include duplicate keys'; + throw new YAMLSemanticError(cst, msg); + } else { + seenKeys.push(key.value); + } + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + return Object.assign(new YAMLOMap(), pairs); +} + +function createOMap(schema, iterable, ctx) { + var pairs = createPairs(schema, iterable, ctx); + var omap = new YAMLOMap(); + omap.items = pairs.items; + return omap; +} + +var omap = { + identify: function identify(value) { + return value instanceof Map; + }, + nodeClass: YAMLOMap, + default: false, + tag: 'tag:yaml.org,2002:omap', + resolve: parseOMap, + createNode: createOMap +}; + +var YAMLSet = /*#__PURE__*/function (_YAMLMap) { + _inherits(YAMLSet, _YAMLMap); + + var _super = _createSuper(YAMLSet); + + function YAMLSet() { + var _this; + + _classCallCheck(this, YAMLSet); + + _this = _super.call(this); + _this.tag = YAMLSet.tag; + return _this; + } + + _createClass(YAMLSet, [{ + key: "add", + value: function add(key) { + var pair = key instanceof Pair ? key : new Pair(key); + var prev = findPair(this.items, pair.key); + if (!prev) this.items.push(pair); + } + }, { + key: "get", + value: function get(key, keepPair) { + var pair = findPair(this.items, key); + return !keepPair && pair instanceof Pair ? pair.key instanceof Scalar ? pair.key.value : pair.key : pair; + } + }, { + key: "set", + value: function set(key, value) { + if (typeof value !== 'boolean') throw new Error("Expected boolean value for set(key, value) in a YAML set, not ".concat(_typeof(value))); + var prev = findPair(this.items, key); + + if (prev && !value) { + this.items.splice(this.items.indexOf(prev), 1); + } else if (!prev && value) { + this.items.push(new Pair(key)); + } + } + }, { + key: "toJSON", + value: function toJSON(_, ctx) { + return _get(_getPrototypeOf(YAMLSet.prototype), "toJSON", this).call(this, _, ctx, Set); + } + }, { + key: "toString", + value: function toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); + if (this.hasAllNullValues()) return _get(_getPrototypeOf(YAMLSet.prototype), "toString", this).call(this, ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values'); + } + }]); + + return YAMLSet; +}(YAMLMap); + +_defineProperty(YAMLSet, "tag", 'tag:yaml.org,2002:set'); + +function parseSet(doc, cst) { + var map = resolveMap(doc, cst); + if (!map.hasAllNullValues()) throw new YAMLSemanticError(cst, 'Set items must all have null values'); + return Object.assign(new YAMLSet(), map); +} + +function createSet(schema, iterable, ctx) { + var set = new YAMLSet(); + + var _iterator = _createForOfIteratorHelper(iterable), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var value = _step.value; + set.items.push(schema.createPair(value, null, ctx)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return set; +} + +var set = { + identify: function identify(value) { + return value instanceof Set; + }, + nodeClass: YAMLSet, + default: false, + tag: 'tag:yaml.org,2002:set', + resolve: parseSet, + createNode: createSet +}; + +var parseSexagesimal = function parseSexagesimal(sign, parts) { + var n = parts.split(':').reduce(function (n, p) { + return n * 60 + Number(p); + }, 0); + return sign === '-' ? -n : n; +}; // hhhh:mm:ss.sss + + +var stringifySexagesimal = function stringifySexagesimal(_ref) { + var value = _ref.value; + if (isNaN(value) || !isFinite(value)) return stringifyNumber(value); + var sign = ''; + + if (value < 0) { + sign = '-'; + value = Math.abs(value); + } + + var parts = [value % 60]; // seconds, including ms + + if (value < 60) { + parts.unshift(0); // at least one : is required + } else { + value = Math.round((value - parts[0]) / 60); + parts.unshift(value % 60); // minutes + + if (value >= 60) { + value = Math.round((value - parts[0]) / 60); + parts.unshift(value); // hours + } + } + + return sign + parts.map(function (n) { + return n < 10 ? '0' + String(n) : String(n); + }).join(':').replace(/000000\d*$/, '') // % 60 may introduce error + ; +}; + +var intTime = { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'TIME', + test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/, + resolve: function resolve(str, sign, parts) { + return parseSexagesimal(sign, parts.replace(/_/g, '')); + }, + stringify: stringifySexagesimal +}; +var floatTime = { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'TIME', + test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/, + resolve: function resolve(str, sign, parts) { + return parseSexagesimal(sign, parts.replace(/_/g, '')); + }, + stringify: stringifySexagesimal +}; +var timestamp = { + identify: function identify(value) { + return value instanceof Date; + }, + default: true, + tag: 'tag:yaml.org,2002:timestamp', + // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part + // may be omitted altogether, resulting in a date format. In such a case, the time part is + // assumed to be 00:00:00Z (start of day, UTC). + test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd + '(?:(?:t|T|[ \\t]+)' + // t | T | whitespace + '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)? + '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30 + ')?' + ')$'), + resolve: function resolve(str, year, month, day, hour, minute, second, millisec, tz) { + if (millisec) millisec = (millisec + '00').substr(1, 3); + var date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0); + + if (tz && tz !== 'Z') { + var d = parseSexagesimal(tz[0], tz.slice(1)); + if (Math.abs(d) < 30) d *= 60; + date -= 60000 * d; + } + + return new Date(date); + }, + stringify: function stringify(_ref2) { + var value = _ref2.value; + return value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, ''); + } +}; + +/* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */ +function shouldWarn(deprecation) { + var env = typeof process !== 'undefined' && process.env || {}; + + if (deprecation) { + if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined') return !YAML_SILENCE_DEPRECATION_WARNINGS; + return !env.YAML_SILENCE_DEPRECATION_WARNINGS; + } + + if (typeof YAML_SILENCE_WARNINGS !== 'undefined') return !YAML_SILENCE_WARNINGS; + return !env.YAML_SILENCE_WARNINGS; +} + +function warn(warning, type) { + if (shouldWarn(false)) { + var emit = typeof process !== 'undefined' && process.emitWarning; // This will throw in Jest if `warning` is an Error instance due to + // https://github.com/facebook/jest/issues/2549 + + if (emit) emit(warning, type);else { + // eslint-disable-next-line no-console + console.warn(type ? "".concat(type, ": ").concat(warning) : warning); + } + } +} +var warned = {}; +function warnOptionDeprecation(name, alternative) { + if (!warned[name] && shouldWarn(true)) { + warned[name] = true; + var msg = "The option '".concat(name, "' will be removed in a future release"); + msg += alternative ? ", use '".concat(alternative, "' instead.") : '.'; + warn(msg, 'DeprecationWarning'); + } +} + +function createMap(schema, obj, ctx) { + var map = new YAMLMap(schema); + + if (obj instanceof Map) { + var _iterator = _createForOfIteratorHelper(obj), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _step$value = _slicedToArray(_step.value, 2), + key = _step$value[0], + value = _step$value[1]; + + map.items.push(schema.createPair(key, value, ctx)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else if (obj && _typeof(obj) === 'object') { + for (var _i = 0, _Object$keys = Object.keys(obj); _i < _Object$keys.length; _i++) { + var _key = _Object$keys[_i]; + map.items.push(schema.createPair(_key, obj[_key], ctx)); + } + } + + if (typeof schema.sortMapEntries === 'function') { + map.items.sort(schema.sortMapEntries); + } + + return map; +} + +var map = { + createNode: createMap, + default: true, + nodeClass: YAMLMap, + tag: 'tag:yaml.org,2002:map', + resolve: resolveMap +}; + +function createSeq(schema, obj, ctx) { + var seq = new YAMLSeq(schema); + + if (obj && obj[Symbol.iterator]) { + var _iterator = _createForOfIteratorHelper(obj), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var it = _step.value; + var v = schema.createNode(it, ctx.wrapScalars, null, ctx); + seq.items.push(v); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + return seq; +} + +var seq = { + createNode: createSeq, + default: true, + nodeClass: YAMLSeq, + tag: 'tag:yaml.org,2002:seq', + resolve: resolveSeq +}; + +var string = { + identify: function identify(value) { + return typeof value === 'string'; + }, + default: true, + tag: 'tag:yaml.org,2002:str', + resolve: resolveString, + stringify: function stringify(item, ctx, onComment, onChompKeep) { + ctx = Object.assign({ + actualString: true + }, ctx); + return stringifyString(item, ctx, onComment, onChompKeep); + }, + options: strOptions +}; + +var failsafe = [map, seq, string]; + +/* global BigInt */ + +var intIdentify = function intIdentify(value) { + return typeof value === 'bigint' || Number.isInteger(value); +}; + +var intResolve = function intResolve(src, part, radix) { + return intOptions.asBigInt ? BigInt(src) : parseInt(part, radix); +}; + +function intStringify(node, radix, prefix) { + var value = node.value; + if (intIdentify(value) && value >= 0) return prefix + value.toString(radix); + return stringifyNumber(node); +} + +var nullObj = { + identify: function identify(value) { + return value == null; + }, + createNode: function createNode(schema, value, ctx) { + return ctx.wrapScalars ? new Scalar(null) : null; + }, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^(?:~|[Nn]ull|NULL)?$/, + resolve: function resolve() { + return null; + }, + options: nullOptions, + stringify: function stringify() { + return nullOptions.nullStr; + } +}; +var boolObj = { + identify: function identify(value) { + return typeof value === 'boolean'; + }, + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, + resolve: function resolve(str) { + return str[0] === 't' || str[0] === 'T'; + }, + options: boolOptions, + stringify: function stringify(_ref) { + var value = _ref.value; + return value ? boolOptions.trueStr : boolOptions.falseStr; + } +}; +var octObj = { + identify: function identify(value) { + return intIdentify(value) && value >= 0; + }, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'OCT', + test: /^0o([0-7]+)$/, + resolve: function resolve(str, oct) { + return intResolve(str, oct, 8); + }, + options: intOptions, + stringify: function stringify(node) { + return intStringify(node, 8, '0o'); + } +}; +var intObj = { + identify: intIdentify, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^[-+]?[0-9]+$/, + resolve: function resolve(str) { + return intResolve(str, str, 10); + }, + options: intOptions, + stringify: stringifyNumber +}; +var hexObj = { + identify: function identify(value) { + return intIdentify(value) && value >= 0; + }, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'HEX', + test: /^0x([0-9a-fA-F]+)$/, + resolve: function resolve(str, hex) { + return intResolve(str, hex, 16); + }, + options: intOptions, + stringify: function stringify(node) { + return intStringify(node, 16, '0x'); + } +}; +var nanObj = { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^(?:[-+]?\.inf|(\.nan))$/i, + resolve: function resolve(str, nan) { + return nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + }, + stringify: stringifyNumber +}; +var expObj = { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'EXP', + test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/, + resolve: function resolve(str) { + return parseFloat(str); + }, + stringify: function stringify(_ref2) { + var value = _ref2.value; + return Number(value).toExponential(); + } +}; +var floatObj = { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^[-+]?(?:\.([0-9]+)|[0-9]+\.([0-9]*))$/, + resolve: function resolve(str, frac1, frac2) { + var frac = frac1 || frac2; + var node = new Scalar(parseFloat(str)); + if (frac && frac[frac.length - 1] === '0') node.minFractionDigits = frac.length; + return node; + }, + stringify: stringifyNumber +}; +var core = failsafe.concat([nullObj, boolObj, octObj, intObj, hexObj, nanObj, expObj, floatObj]); + +/* global BigInt */ + +var intIdentify$1 = function intIdentify(value) { + return typeof value === 'bigint' || Number.isInteger(value); +}; + +var stringifyJSON = function stringifyJSON(_ref) { + var value = _ref.value; + return JSON.stringify(value); +}; + +var json = [map, seq, { + identify: function identify(value) { + return typeof value === 'string'; + }, + default: true, + tag: 'tag:yaml.org,2002:str', + resolve: resolveString, + stringify: stringifyJSON +}, { + identify: function identify(value) { + return value == null; + }, + createNode: function createNode(schema, value, ctx) { + return ctx.wrapScalars ? new Scalar(null) : null; + }, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^null$/, + resolve: function resolve() { + return null; + }, + stringify: stringifyJSON +}, { + identify: function identify(value) { + return typeof value === 'boolean'; + }, + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^true|false$/, + resolve: function resolve(str) { + return str === 'true'; + }, + stringify: stringifyJSON +}, { + identify: intIdentify$1, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^-?(?:0|[1-9][0-9]*)$/, + resolve: function resolve(str) { + return intOptions.asBigInt ? BigInt(str) : parseInt(str, 10); + }, + stringify: function stringify(_ref2) { + var value = _ref2.value; + return intIdentify$1(value) ? value.toString() : JSON.stringify(value); + } +}, { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, + resolve: function resolve(str) { + return parseFloat(str); + }, + stringify: stringifyJSON +}]; + +json.scalarFallback = function (str) { + throw new SyntaxError("Unresolved plain scalar ".concat(JSON.stringify(str))); +}; + +/* global BigInt */ + +var boolStringify = function boolStringify(_ref) { + var value = _ref.value; + return value ? boolOptions.trueStr : boolOptions.falseStr; +}; + +var intIdentify$2 = function intIdentify(value) { + return typeof value === 'bigint' || Number.isInteger(value); +}; + +function intResolve$1(sign, src, radix) { + var str = src.replace(/_/g, ''); + + if (intOptions.asBigInt) { + switch (radix) { + case 2: + str = "0b".concat(str); + break; + + case 8: + str = "0o".concat(str); + break; + + case 16: + str = "0x".concat(str); + break; + } + + var _n = BigInt(str); + + return sign === '-' ? BigInt(-1) * _n : _n; + } + + var n = parseInt(str, radix); + return sign === '-' ? -1 * n : n; +} + +function intStringify$1(node, radix, prefix) { + var value = node.value; + + if (intIdentify$2(value)) { + var str = value.toString(radix); + return value < 0 ? '-' + prefix + str.substr(1) : prefix + str; + } + + return stringifyNumber(node); +} + +var yaml11 = failsafe.concat([{ + identify: function identify(value) { + return value == null; + }, + createNode: function createNode(schema, value, ctx) { + return ctx.wrapScalars ? new Scalar(null) : null; + }, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^(?:~|[Nn]ull|NULL)?$/, + resolve: function resolve() { + return null; + }, + options: nullOptions, + stringify: function stringify() { + return nullOptions.nullStr; + } +}, { + identify: function identify(value) { + return typeof value === 'boolean'; + }, + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, + resolve: function resolve() { + return true; + }, + options: boolOptions, + stringify: boolStringify +}, { + identify: function identify(value) { + return typeof value === 'boolean'; + }, + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i, + resolve: function resolve() { + return false; + }, + options: boolOptions, + stringify: boolStringify +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'BIN', + test: /^([-+]?)0b([0-1_]+)$/, + resolve: function resolve(str, sign, bin) { + return intResolve$1(sign, bin, 2); + }, + stringify: function stringify(node) { + return intStringify$1(node, 2, '0b'); + } +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'OCT', + test: /^([-+]?)0([0-7_]+)$/, + resolve: function resolve(str, sign, oct) { + return intResolve$1(sign, oct, 8); + }, + stringify: function stringify(node) { + return intStringify$1(node, 8, '0'); + } +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^([-+]?)([0-9][0-9_]*)$/, + resolve: function resolve(str, sign, abs) { + return intResolve$1(sign, abs, 10); + }, + stringify: stringifyNumber +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'HEX', + test: /^([-+]?)0x([0-9a-fA-F_]+)$/, + resolve: function resolve(str, sign, hex) { + return intResolve$1(sign, hex, 16); + }, + stringify: function stringify(node) { + return intStringify$1(node, 16, '0x'); + } +}, { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^(?:[-+]?\.inf|(\.nan))$/i, + resolve: function resolve(str, nan) { + return nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + }, + stringify: stringifyNumber +}, { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'EXP', + test: /^[-+]?([0-9][0-9_]*)?(\.[0-9_]*)?[eE][-+]?[0-9]+$/, + resolve: function resolve(str) { + return parseFloat(str.replace(/_/g, '')); + }, + stringify: function stringify(_ref2) { + var value = _ref2.value; + return Number(value).toExponential(); + } +}, { + identify: function identify(value) { + return typeof value === 'number'; + }, + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^[-+]?(?:[0-9][0-9_]*)?\.([0-9_]*)$/, + resolve: function resolve(str, frac) { + var node = new Scalar(parseFloat(str.replace(/_/g, ''))); + + if (frac) { + var f = frac.replace(/_/g, ''); + if (f[f.length - 1] === '0') node.minFractionDigits = f.length; + } + + return node; + }, + stringify: stringifyNumber +}], binary, omap, pairs, set, intTime, floatTime, timestamp); + +var schemas = { + core: core, + failsafe: failsafe, + json: json, + yaml11: yaml11 +}; +var tags = { + binary: binary, + bool: boolObj, + float: floatObj, + floatExp: expObj, + floatNaN: nanObj, + floatTime: floatTime, + int: intObj, + intHex: hexObj, + intOct: octObj, + intTime: intTime, + map: map, + null: nullObj, + omap: omap, + pairs: pairs, + seq: seq, + set: set, + timestamp: timestamp +}; + +function findTagObject(value, tagName, tags) { + if (tagName) { + var match = tags.filter(function (t) { + return t.tag === tagName; + }); + var tagObj = match.find(function (t) { + return !t.format; + }) || match[0]; + if (!tagObj) throw new Error("Tag ".concat(tagName, " not found")); + return tagObj; + } // TODO: deprecate/remove class check + + + return tags.find(function (t) { + return (t.identify && t.identify(value) || t.class && value instanceof t.class) && !t.format; + }); +} + +function createNode(value, tagName, ctx) { + if (value instanceof Node$1) return value; + var defaultPrefix = ctx.defaultPrefix, + onTagObj = ctx.onTagObj, + prevObjects = ctx.prevObjects, + schema = ctx.schema, + wrapScalars = ctx.wrapScalars; + if (tagName && tagName.startsWith('!!')) tagName = defaultPrefix + tagName.slice(2); + var tagObj = findTagObject(value, tagName, schema.tags); + + if (!tagObj) { + if (typeof value.toJSON === 'function') value = value.toJSON(); + if (_typeof(value) !== 'object') return wrapScalars ? new Scalar(value) : value; + tagObj = value instanceof Map ? map : value[Symbol.iterator] ? seq : map; + } + + if (onTagObj) { + onTagObj(tagObj); + delete ctx.onTagObj; + } // Detect duplicate references to the same object & use Alias nodes for all + // after first. The `obj` wrapper allows for circular references to resolve. + + + var obj = {}; + + if (value && _typeof(value) === 'object' && prevObjects) { + var prev = prevObjects.get(value); + + if (prev) { + var alias = new Alias$1(prev); // leaves source dirty; must be cleaned by caller + + ctx.aliasNodes.push(alias); // defined along with prevObjects + + return alias; + } + + obj.value = value; + prevObjects.set(value, obj); + } + + obj.node = tagObj.createNode ? tagObj.createNode(ctx.schema, value, ctx) : wrapScalars ? new Scalar(value) : value; + if (tagName && obj.node instanceof Node$1) obj.node.tag = tagName; + return obj.node; +} + +function getSchemaTags(schemas, knownTags, customTags, schemaId) { + var tags = schemas[schemaId.replace(/\W/g, '')]; // 'yaml-1.1' -> 'yaml11' + + if (!tags) { + var keys = Object.keys(schemas).map(function (key) { + return JSON.stringify(key); + }).join(', '); + throw new Error("Unknown schema \"".concat(schemaId, "\"; use one of ").concat(keys)); + } + + if (Array.isArray(customTags)) { + var _iterator = _createForOfIteratorHelper(customTags), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var tag = _step.value; + tags = tags.concat(tag); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else if (typeof customTags === 'function') { + tags = customTags(tags.slice()); + } + + for (var i = 0; i < tags.length; ++i) { + var _tag = tags[i]; + + if (typeof _tag === 'string') { + var tagObj = knownTags[_tag]; + + if (!tagObj) { + var _keys = Object.keys(knownTags).map(function (key) { + return JSON.stringify(key); + }).join(', '); + + throw new Error("Unknown custom tag \"".concat(_tag, "\"; use one of ").concat(_keys)); + } + + tags[i] = tagObj; + } + } + + return tags; +} + +var sortMapEntriesByKey = function sortMapEntriesByKey(a, b) { + return a.key < b.key ? -1 : a.key > b.key ? 1 : 0; +}; + +var Schema = /*#__PURE__*/function () { + // TODO: remove in v2 + // TODO: remove in v2 + function Schema(_ref) { + var customTags = _ref.customTags, + merge = _ref.merge, + schema = _ref.schema, + sortMapEntries = _ref.sortMapEntries, + deprecatedCustomTags = _ref.tags; + + _classCallCheck(this, Schema); + + this.merge = !!merge; + this.name = schema; + this.sortMapEntries = sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null; + if (!customTags && deprecatedCustomTags) warnOptionDeprecation('tags', 'customTags'); + this.tags = getSchemaTags(schemas, tags, customTags || deprecatedCustomTags, schema); + } + + _createClass(Schema, [{ + key: "createNode", + value: function createNode$1(value, wrapScalars, tagName, ctx) { + var baseCtx = { + defaultPrefix: Schema.defaultPrefix, + schema: this, + wrapScalars: wrapScalars + }; + var createCtx = ctx ? Object.assign(ctx, baseCtx) : baseCtx; + return createNode(value, tagName, createCtx); + } + }, { + key: "createPair", + value: function createPair(key, value, ctx) { + if (!ctx) ctx = { + wrapScalars: true + }; + var k = this.createNode(key, ctx.wrapScalars, null, ctx); + var v = this.createNode(value, ctx.wrapScalars, null, ctx); + return new Pair(k, v); + } + }]); + + return Schema; +}(); + +_defineProperty(Schema, "defaultPrefix", defaultTagPrefix); + +_defineProperty(Schema, "defaultTags", defaultTags); + +var defaultOptions = { + anchorPrefix: 'a', + customTags: null, + indent: 2, + indentSeq: true, + keepCstNodes: false, + keepNodeTypes: true, + keepBlobsInJSON: true, + mapAsMap: false, + maxAliasCount: 100, + prettyErrors: false, + // TODO Set true in v2 + simpleKeys: false, + version: '1.2' +}; +var scalarOptions = { + get binary() { + return binaryOptions; + }, + + set binary(opt) { + Object.assign(binaryOptions, opt); + }, + + get bool() { + return boolOptions; + }, + + set bool(opt) { + Object.assign(boolOptions, opt); + }, + + get int() { + return intOptions; + }, + + set int(opt) { + Object.assign(intOptions, opt); + }, + + get null() { + return nullOptions; + }, + + set null(opt) { + Object.assign(nullOptions, opt); + }, + + get str() { + return strOptions; + }, + + set str(opt) { + Object.assign(strOptions, opt); + } + +}; +var documentOptions = { + '1.0': { + schema: 'yaml-1.1', + merge: true, + tagPrefixes: [{ + handle: '!', + prefix: defaultTagPrefix + }, { + handle: '!!', + prefix: 'tag:private.yaml.org,2002:' + }] + }, + '1.1': { + schema: 'yaml-1.1', + merge: true, + tagPrefixes: [{ + handle: '!', + prefix: '!' + }, { + handle: '!!', + prefix: defaultTagPrefix + }] + }, + '1.2': { + schema: 'core', + merge: false, + tagPrefixes: [{ + handle: '!', + prefix: '!' + }, { + handle: '!!', + prefix: defaultTagPrefix + }] + } +}; + +function stringifyTag(doc, tag) { + if ((doc.version || doc.options.version) === '1.0') { + var priv = tag.match(/^tag:private\.yaml\.org,2002:([^:/]+)$/); + if (priv) return '!' + priv[1]; + var vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\.yaml\.org,2002:(.*)/); + return vocab ? "!".concat(vocab[1], "/").concat(vocab[2]) : "!".concat(tag.replace(/^tag:/, '')); + } + + var p = doc.tagPrefixes.find(function (p) { + return tag.indexOf(p.prefix) === 0; + }); + + if (!p) { + var dtp = doc.getDefaults().tagPrefixes; + p = dtp && dtp.find(function (p) { + return tag.indexOf(p.prefix) === 0; + }); + } + + if (!p) return tag[0] === '!' ? tag : "!<".concat(tag, ">"); + var suffix = tag.substr(p.prefix.length).replace(/[!,[\]{}]/g, function (ch) { + return { + '!': '%21', + ',': '%2C', + '[': '%5B', + ']': '%5D', + '{': '%7B', + '}': '%7D' + }[ch]; + }); + return p.handle + suffix; +} + +function getTagObject(tags, item) { + if (item instanceof Alias$1) return Alias$1; + + if (item.tag) { + var match = tags.filter(function (t) { + return t.tag === item.tag; + }); + if (match.length > 0) return match.find(function (t) { + return t.format === item.format; + }) || match[0]; + } + + var tagObj, obj; + + if (item instanceof Scalar) { + obj = item.value; // TODO: deprecate/remove class check + + var _match = tags.filter(function (t) { + return t.identify && t.identify(obj) || t.class && obj instanceof t.class; + }); + + tagObj = _match.find(function (t) { + return t.format === item.format; + }) || _match.find(function (t) { + return !t.format; + }); + } else { + obj = item; + tagObj = tags.find(function (t) { + return t.nodeClass && obj instanceof t.nodeClass; + }); + } + + if (!tagObj) { + var name = obj && obj.constructor ? obj.constructor.name : _typeof(obj); + throw new Error("Tag not resolved for ".concat(name, " value")); + } + + return tagObj; +} // needs to be called before value stringifier to allow for circular anchor refs + + +function stringifyProps(node, tagObj, _ref) { + var anchors = _ref.anchors, + doc = _ref.doc; + var props = []; + var anchor = doc.anchors.getName(node); + + if (anchor) { + anchors[anchor] = node; + props.push("&".concat(anchor)); + } + + if (node.tag) { + props.push(stringifyTag(doc, node.tag)); + } else if (!tagObj.default) { + props.push(stringifyTag(doc, tagObj.tag)); + } + + return props.join(' '); +} + +function stringify(item, ctx, onComment, onChompKeep) { + var _ctx$doc = ctx.doc, + anchors = _ctx$doc.anchors, + schema = _ctx$doc.schema; + var tagObj; + + if (!(item instanceof Node$1)) { + var createCtx = { + aliasNodes: [], + onTagObj: function onTagObj(o) { + return tagObj = o; + }, + prevObjects: new Map() + }; + item = schema.createNode(item, true, null, createCtx); + + var _iterator = _createForOfIteratorHelper(createCtx.aliasNodes), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var alias = _step.value; + alias.source = alias.source.node; + var name = anchors.getName(alias.source); + + if (!name) { + name = anchors.newName(); + anchors.map[name] = alias.source; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + if (item instanceof Pair) return item.toString(ctx, onComment, onChompKeep); + if (!tagObj) tagObj = getTagObject(schema.tags, item); + var props = stringifyProps(item, tagObj, ctx); + if (props.length > 0) ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1; + var str = typeof tagObj.stringify === 'function' ? tagObj.stringify(item, ctx, onComment, onChompKeep) : item instanceof Scalar ? stringifyString(item, ctx, onComment, onChompKeep) : item.toString(ctx, onComment, onChompKeep); + if (!props) return str; + return item instanceof Scalar || str[0] === '{' || str[0] === '[' ? "".concat(props, " ").concat(str) : "".concat(props, "\n").concat(ctx.indent).concat(str); +} + +var Anchors = /*#__PURE__*/function () { + _createClass(Anchors, null, [{ + key: "validAnchorNode", + value: function validAnchorNode(node) { + return node instanceof Scalar || node instanceof YAMLSeq || node instanceof YAMLMap; + } + }]); + + function Anchors(prefix) { + _classCallCheck(this, Anchors); + + _defineProperty(this, "map", {}); + + this.prefix = prefix; + } + + _createClass(Anchors, [{ + key: "createAlias", + value: function createAlias(node, name) { + this.setAnchor(node, name); + return new Alias$1(node); + } + }, { + key: "createMergePair", + value: function createMergePair() { + var _this = this; + + var merge = new Merge(); + + for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + merge.value.items = sources.map(function (s) { + if (s instanceof Alias$1) { + if (s.source instanceof YAMLMap) return s; + } else if (s instanceof YAMLMap) { + return _this.createAlias(s); + } + + throw new Error('Merge sources must be Map nodes or their Aliases'); + }); + return merge; + } + }, { + key: "getName", + value: function getName(node) { + var map = this.map; + return Object.keys(map).find(function (a) { + return map[a] === node; + }); + } + }, { + key: "getNames", + value: function getNames() { + return Object.keys(this.map); + } + }, { + key: "getNode", + value: function getNode(name) { + return this.map[name]; + } + }, { + key: "newName", + value: function newName(prefix) { + if (!prefix) prefix = this.prefix; + var names = Object.keys(this.map); + + for (var i = 1; true; ++i) { + var name = "".concat(prefix).concat(i); + if (!names.includes(name)) return name; + } + } // During parsing, map & aliases contain CST nodes + + }, { + key: "resolveNodes", + value: function resolveNodes() { + var map = this.map, + _cstAliases = this._cstAliases; + Object.keys(map).forEach(function (a) { + map[a] = map[a].resolved; + }); + + _cstAliases.forEach(function (a) { + a.source = a.source.resolved; + }); + + delete this._cstAliases; + } + }, { + key: "setAnchor", + value: function setAnchor(node, name) { + if (node != null && !Anchors.validAnchorNode(node)) { + throw new Error('Anchors may only be set for Scalar, Seq and Map nodes'); + } + + if (name && /[\x00-\x19\s,[\]{}]/.test(name)) { + throw new Error('Anchor names must not contain whitespace or control characters'); + } + + var map = this.map; + var prev = node && Object.keys(map).find(function (a) { + return map[a] === node; + }); + + if (prev) { + if (!name) { + return prev; + } else if (prev !== name) { + delete map[prev]; + map[name] = node; + } + } else { + if (!name) { + if (!node) return null; + name = this.newName(); + } + + map[name] = node; + } + + return name; + } + }]); + + return Anchors; +}(); + +var visit = function visit(node, tags) { + if (node && _typeof(node) === 'object') { + var tag = node.tag; + + if (node instanceof Collection$1) { + if (tag) tags[tag] = true; + node.items.forEach(function (n) { + return visit(n, tags); + }); + } else if (node instanceof Pair) { + visit(node.key, tags); + visit(node.value, tags); + } else if (node instanceof Scalar) { + if (tag) tags[tag] = true; + } + } + + return tags; +}; + +var listTagNames = function listTagNames(node) { + return Object.keys(visit(node, {})); +}; + +function parseContents(doc, contents) { + var comments = { + before: [], + after: [] + }; + var body = undefined; + var spaceBefore = false; + + var _iterator = _createForOfIteratorHelper(contents), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var node = _step.value; + + if (node.valueRange) { + if (body !== undefined) { + var msg = 'Document contains trailing content not separated by a ... or --- line'; + doc.errors.push(new YAMLSyntaxError(node, msg)); + break; + } + + var res = resolveNode(doc, node); + + if (spaceBefore) { + res.spaceBefore = true; + spaceBefore = false; + } + + body = res; + } else if (node.comment !== null) { + var cc = body === undefined ? comments.before : comments.after; + cc.push(node.comment); + } else if (node.type === Type.BLANK_LINE) { + spaceBefore = true; + + if (body === undefined && comments.before.length > 0 && !doc.commentBefore) { + // space-separated comments at start are parsed as document comments + doc.commentBefore = comments.before.join('\n'); + comments.before = []; + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + doc.contents = body || null; + + if (!body) { + doc.comment = comments.before.concat(comments.after).join('\n') || null; + } else { + var cb = comments.before.join('\n'); + + if (cb) { + var cbNode = body instanceof Collection$1 && body.items[0] ? body.items[0] : body; + cbNode.commentBefore = cbNode.commentBefore ? "".concat(cb, "\n").concat(cbNode.commentBefore) : cb; + } + + doc.comment = comments.after.join('\n') || null; + } +} + +function resolveTagDirective(_ref, directive) { + var tagPrefixes = _ref.tagPrefixes; + + var _directive$parameters = _slicedToArray(directive.parameters, 2), + handle = _directive$parameters[0], + prefix = _directive$parameters[1]; + + if (!handle || !prefix) { + var msg = 'Insufficient parameters given for %TAG directive'; + throw new YAMLSemanticError(directive, msg); + } + + if (tagPrefixes.some(function (p) { + return p.handle === handle; + })) { + var _msg = 'The %TAG directive must only be given at most once per handle in the same document.'; + throw new YAMLSemanticError(directive, _msg); + } + + return { + handle: handle, + prefix: prefix + }; +} + +function resolveYamlDirective(doc, directive) { + var _directive$parameters2 = _slicedToArray(directive.parameters, 1), + version = _directive$parameters2[0]; + + if (directive.name === 'YAML:1.0') version = '1.0'; + + if (!version) { + var msg = 'Insufficient parameters given for %YAML directive'; + throw new YAMLSemanticError(directive, msg); + } + + if (!documentOptions[version]) { + var v0 = doc.version || doc.options.version; + + var _msg2 = "Document will be parsed as YAML ".concat(v0, " rather than YAML ").concat(version); + + doc.warnings.push(new YAMLWarning(directive, _msg2)); + } + + return version; +} + +function parseDirectives(doc, directives, prevDoc) { + var directiveComments = []; + var hasDirectives = false; + + var _iterator = _createForOfIteratorHelper(directives), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var directive = _step.value; + var comment = directive.comment, + name = directive.name; + + switch (name) { + case 'TAG': + try { + doc.tagPrefixes.push(resolveTagDirective(doc, directive)); + } catch (error) { + doc.errors.push(error); + } + + hasDirectives = true; + break; + + case 'YAML': + case 'YAML:1.0': + if (doc.version) { + var msg = 'The %YAML directive must only be given at most once per document.'; + doc.errors.push(new YAMLSemanticError(directive, msg)); + } + + try { + doc.version = resolveYamlDirective(doc, directive); + } catch (error) { + doc.errors.push(error); + } + + hasDirectives = true; + break; + + default: + if (name) { + var _msg3 = "YAML only supports %TAG and %YAML directives, and not %".concat(name); + + doc.warnings.push(new YAMLWarning(directive, _msg3)); + } + + } + + if (comment) directiveComments.push(comment); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + if (prevDoc && !hasDirectives && '1.1' === (doc.version || prevDoc.version || doc.options.version)) { + var copyTagPrefix = function copyTagPrefix(_ref2) { + var handle = _ref2.handle, + prefix = _ref2.prefix; + return { + handle: handle, + prefix: prefix + }; + }; + + doc.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix); + doc.version = prevDoc.version; + } + + doc.commentBefore = directiveComments.join('\n') || null; +} + +function assertCollection(contents) { + if (contents instanceof Collection$1) return true; + throw new Error('Expected a YAML collection as document contents'); +} + +var Document$1 = /*#__PURE__*/function () { + function Document(options) { + _classCallCheck(this, Document); + + this.anchors = new Anchors(options.anchorPrefix); + this.commentBefore = null; + this.comment = null; + this.contents = null; + this.directivesEndMarker = null; + this.errors = []; + this.options = options; + this.schema = null; + this.tagPrefixes = []; + this.version = null; + this.warnings = []; + } + + _createClass(Document, [{ + key: "add", + value: function add(value) { + assertCollection(this.contents); + return this.contents.add(value); + } + }, { + key: "addIn", + value: function addIn(path, value) { + assertCollection(this.contents); + this.contents.addIn(path, value); + } + }, { + key: "delete", + value: function _delete(key) { + assertCollection(this.contents); + return this.contents.delete(key); + } + }, { + key: "deleteIn", + value: function deleteIn(path) { + if (isEmptyPath(path)) { + if (this.contents == null) return false; + this.contents = null; + return true; + } + + assertCollection(this.contents); + return this.contents.deleteIn(path); + } + }, { + key: "getDefaults", + value: function getDefaults() { + return Document.defaults[this.version] || Document.defaults[this.options.version] || {}; + } + }, { + key: "get", + value: function get(key, keepScalar) { + return this.contents instanceof Collection$1 ? this.contents.get(key, keepScalar) : undefined; + } + }, { + key: "getIn", + value: function getIn(path, keepScalar) { + if (isEmptyPath(path)) return !keepScalar && this.contents instanceof Scalar ? this.contents.value : this.contents; + return this.contents instanceof Collection$1 ? this.contents.getIn(path, keepScalar) : undefined; + } + }, { + key: "has", + value: function has(key) { + return this.contents instanceof Collection$1 ? this.contents.has(key) : false; + } + }, { + key: "hasIn", + value: function hasIn(path) { + if (isEmptyPath(path)) return this.contents !== undefined; + return this.contents instanceof Collection$1 ? this.contents.hasIn(path) : false; + } + }, { + key: "set", + value: function set(key, value) { + assertCollection(this.contents); + this.contents.set(key, value); + } + }, { + key: "setIn", + value: function setIn(path, value) { + if (isEmptyPath(path)) this.contents = value;else { + assertCollection(this.contents); + this.contents.setIn(path, value); + } + } + }, { + key: "setSchema", + value: function setSchema(id, customTags) { + if (!id && !customTags && this.schema) return; + if (typeof id === 'number') id = id.toFixed(1); + + if (id === '1.0' || id === '1.1' || id === '1.2') { + if (this.version) this.version = id;else this.options.version = id; + delete this.options.schema; + } else if (id && typeof id === 'string') { + this.options.schema = id; + } + + if (Array.isArray(customTags)) this.options.customTags = customTags; + var opt = Object.assign({}, this.getDefaults(), this.options); + this.schema = new Schema(opt); + } + }, { + key: "parse", + value: function parse(node, prevDoc) { + if (this.options.keepCstNodes) this.cstNode = node; + if (this.options.keepNodeTypes) this.type = 'DOCUMENT'; + var _node$directives = node.directives, + directives = _node$directives === void 0 ? [] : _node$directives, + _node$contents = node.contents, + contents = _node$contents === void 0 ? [] : _node$contents, + directivesEndMarker = node.directivesEndMarker, + error = node.error, + valueRange = node.valueRange; + + if (error) { + if (!error.source) error.source = this; + this.errors.push(error); + } + + parseDirectives(this, directives, prevDoc); + if (directivesEndMarker) this.directivesEndMarker = true; + this.range = valueRange ? [valueRange.start, valueRange.end] : null; + this.setSchema(); + this.anchors._cstAliases = []; + parseContents(this, contents); + this.anchors.resolveNodes(); + + if (this.options.prettyErrors) { + var _iterator = _createForOfIteratorHelper(this.errors), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _error = _step.value; + if (_error instanceof YAMLError) _error.makePretty(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + var _iterator2 = _createForOfIteratorHelper(this.warnings), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var warn = _step2.value; + if (warn instanceof YAMLError) warn.makePretty(); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + + return this; + } + }, { + key: "listNonDefaultTags", + value: function listNonDefaultTags() { + return listTagNames(this.contents).filter(function (t) { + return t.indexOf(Schema.defaultPrefix) !== 0; + }); + } + }, { + key: "setTagPrefix", + value: function setTagPrefix(handle, prefix) { + if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !'); + + if (prefix) { + var prev = this.tagPrefixes.find(function (p) { + return p.handle === handle; + }); + if (prev) prev.prefix = prefix;else this.tagPrefixes.push({ + handle: handle, + prefix: prefix + }); + } else { + this.tagPrefixes = this.tagPrefixes.filter(function (p) { + return p.handle !== handle; + }); + } + } + }, { + key: "toJSON", + value: function toJSON$1(arg, onAnchor) { + var _this = this; + + var _this$options = this.options, + keepBlobsInJSON = _this$options.keepBlobsInJSON, + mapAsMap = _this$options.mapAsMap, + maxAliasCount = _this$options.maxAliasCount; + var keep = keepBlobsInJSON && (typeof arg !== 'string' || !(this.contents instanceof Scalar)); + var ctx = { + doc: this, + indentStep: ' ', + keep: keep, + mapAsMap: keep && !!mapAsMap, + maxAliasCount: maxAliasCount, + stringify: stringify // Requiring directly in Pair would create circular dependencies + + }; + var anchorNames = Object.keys(this.anchors.map); + if (anchorNames.length > 0) ctx.anchors = new Map(anchorNames.map(function (name) { + return [_this.anchors.map[name], { + alias: [], + aliasCount: 0, + count: 1 + }]; + })); + + var res = toJSON(this.contents, arg, ctx); + + if (typeof onAnchor === 'function' && ctx.anchors) { + var _iterator3 = _createForOfIteratorHelper(ctx.anchors.values()), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var _step3$value = _step3.value, + count = _step3$value.count, + _res = _step3$value.res; + onAnchor(_res, count); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + + return res; + } + }, { + key: "toString", + value: function toString() { + if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified'); + var indentSize = this.options.indent; + + if (!Number.isInteger(indentSize) || indentSize <= 0) { + var s = JSON.stringify(indentSize); + throw new Error("\"indent\" option must be a positive integer, not ".concat(s)); + } + + this.setSchema(); + var lines = []; + var hasDirectives = false; + + if (this.version) { + var vd = '%YAML 1.2'; + + if (this.schema.name === 'yaml-1.1') { + if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1'; + } + + lines.push(vd); + hasDirectives = true; + } + + var tagNames = this.listNonDefaultTags(); + this.tagPrefixes.forEach(function (_ref) { + var handle = _ref.handle, + prefix = _ref.prefix; + + if (tagNames.some(function (t) { + return t.indexOf(prefix) === 0; + })) { + lines.push("%TAG ".concat(handle, " ").concat(prefix)); + hasDirectives = true; + } + }); + if (hasDirectives || this.directivesEndMarker) lines.push('---'); + + if (this.commentBefore) { + if (hasDirectives || !this.directivesEndMarker) lines.unshift(''); + lines.unshift(this.commentBefore.replace(/^/gm, '#')); + } + + var ctx = { + anchors: {}, + doc: this, + indent: '', + indentStep: ' '.repeat(indentSize), + stringify: stringify // Requiring directly in nodes would create circular dependencies + + }; + var chompKeep = false; + var contentComment = null; + + if (this.contents) { + if (this.contents instanceof Node$1) { + if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push(''); + if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment + + ctx.forceBlockIndent = !!this.comment; + contentComment = this.contents.comment; + } + + var onChompKeep = contentComment ? null : function () { + return chompKeep = true; + }; + var body = stringify(this.contents, ctx, function () { + return contentComment = null; + }, onChompKeep); + lines.push(addComment(body, '', contentComment)); + } else if (this.contents !== undefined) { + lines.push(stringify(this.contents, ctx)); + } + + if (this.comment) { + if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push(''); + lines.push(this.comment.replace(/^/gm, '#')); + } + + return lines.join('\n') + '\n'; + } + }]); + + return Document; +}(); + +_defineProperty(Document$1, "defaults", documentOptions); + +function createNode$1(value) { + var wrapScalars = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var tag = arguments.length > 2 ? arguments[2] : undefined; + + if (tag === undefined && typeof wrapScalars === 'string') { + tag = wrapScalars; + wrapScalars = true; + } + + var options = Object.assign({}, Document$1.defaults[defaultOptions.version], defaultOptions); + var schema = new Schema(options); + return schema.createNode(value, wrapScalars, tag); +} + +var Document$1$1 = /*#__PURE__*/function (_YAMLDocument) { + _inherits(Document, _YAMLDocument); + + var _super = _createSuper(Document); + + function Document(options) { + _classCallCheck(this, Document); + + return _super.call(this, Object.assign({}, defaultOptions, options)); + } + + return Document; +}(Document$1); + +function parseAllDocuments(src, options) { + var stream = []; + var prev; + + var _iterator = _createForOfIteratorHelper(parse(src)), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var cstDoc = _step.value; + var doc = new Document$1$1(options); + doc.parse(cstDoc, prev); + stream.push(doc); + prev = doc; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return stream; +} + +function parseDocument(src, options) { + var cst = parse(src); + var doc = new Document$1$1(options).parse(cst[0]); + + if (cst.length > 1) { + var errMsg = 'Source contains multiple documents; please use YAML.parseAllDocuments()'; + doc.errors.unshift(new YAMLSemanticError(cst[1], errMsg)); + } + + return doc; +} + +function parse$1(src, options) { + var doc = parseDocument(src, options); + doc.warnings.forEach(function (warning) { + return warn(warning); + }); + if (doc.errors.length > 0) throw doc.errors[0]; + return doc.toJSON(); +} + +function stringify$1(value, options) { + var doc = new Document$1$1(options); + doc.contents = value; + return String(doc); +} + +var YAML = { + createNode: createNode$1, + defaultOptions: defaultOptions, + Document: Document$1$1, + parse: parse$1, + parseAllDocuments: parseAllDocuments, + parseCST: parse, + parseDocument: parseDocument, + scalarOptions: scalarOptions, + stringify: stringify$1 +}; + +var dist = /*#__PURE__*/Object.freeze({ + __proto__: null, + YAML: YAML +}); + +function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +var require$$0 = /*@__PURE__*/getAugmentedNamespace(dist); + +var browser = require$$0.YAML; + +// ------------------------------------------------------------ +// ccards processor +// ------------------------------------------------------------ +var ccardProcessor = /** @class */ (function () { + function ccardProcessor(app) { + this.app = app; + } + ccardProcessor.prototype.run = function (source, el, ctx, folderNote) { + return __awaiter(this, void 0, void 0, function () { + var yaml, docEl, docEl, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 5, , 6]); + yaml = browser.parse(source); + if (!yaml) + return [2 /*return*/]; + // set default + if (yaml.type === undefined) + yaml.type = 'static'; + if (yaml.style === undefined) + yaml.style = 'card'; + if (!(yaml.type == 'static')) return [3 /*break*/, 2]; + return [4 /*yield*/, this.docElemStatic(yaml)]; + case 1: + docEl = _a.sent(); + if (docEl) { + el.appendChild(docEl); + } + return [3 /*break*/, 4]; + case 2: + if (!(yaml.type == 'folder_brief_live')) return [3 /*break*/, 4]; + return [4 /*yield*/, this.docElemFolderBriefLive(yaml, folderNote)]; + case 3: + docEl = _a.sent(); + if (docEl) { + el.appendChild(docEl); + } + _a.label = 4; + case 4: return [3 /*break*/, 6]; + case 5: + error_1 = _a.sent(); + console.log('Code Block: ccard', error_1); + return [3 /*break*/, 6]; + case 6: return [2 /*return*/]; + } + }); + }); + }; + // static + ccardProcessor.prototype.docElemStatic = function (yaml) { + return __awaiter(this, void 0, void 0, function () { + var cardBlock, cardsElem; + return __generator(this, function (_a) { + if (yaml.items && (yaml.items instanceof Array)) { + cardBlock = new CardBlock(); + cardBlock.fromYamlCards(yaml); + cardsElem = cardBlock.getDocElement(this.app); + return [2 /*return*/, cardsElem]; + } + return [2 /*return*/, null]; + }); + }); + }; + // folder_brief_live + ccardProcessor.prototype.docElemFolderBriefLive = function (yaml, folderNote) { + return __awaiter(this, void 0, void 0, function () { + var folderPath, activeFile, notePath, folderExist, view, folderBrief, briefCards, ccardElem; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + folderPath = ''; + activeFile = this.app.workspace.getActiveFile(); + notePath = activeFile.path; + if (!yaml.folder) return [3 /*break*/, 2]; + return [4 /*yield*/, this.app.vault.adapter.exists(yaml.folder)]; + case 1: + folderExist = _a.sent(); + if (folderExist) + folderPath = yaml.folder; + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, folderNote.getNoteFolderBriefPath(notePath)]; + case 3: + folderPath = _a.sent(); + _a.label = 4; + case 4: + if (!(folderPath.length > 0)) return [3 /*break*/, 6]; + view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view) return [3 /*break*/, 6]; + folderBrief = new FolderBrief(this.app); + // brief options + if (yaml.briefMax) { + folderBrief.briefMax = yaml.briefMax; + } + if (yaml.noteOnly != undefined) { + folderBrief.noteOnly = yaml.noteOnly; + } + return [4 /*yield*/, folderBrief.makeBriefCards(folderPath, notePath)]; + case 5: + briefCards = _a.sent(); + briefCards.fromYamlOptions(yaml); + ccardElem = briefCards.getDocElement(this.app); + return [2 /*return*/, ccardElem]; + case 6: return [2 /*return*/, null]; + } + }); + }); + }; + return ccardProcessor; +}()); + +var FOLDER_NOTE_DEFAULT_SETTINGS = { + folderNoteHide: true, + folderNoteType: 'inside', + folderNoteName: '_about_', + folderNoteKey: 'ctrl', + folderNoteAutoRename: true, + folderDelete2Note: false, + folderNoteStrInit: '# {{FOLDER_NAME}} Overview\n {{FOLDER_BRIEF_LIVE}} \n' +}; +// ------------------------------------------------------------ +// Settings Tab +// ------------------------------------------------------------ +var FolderNoteSettingTab = /** @class */ (function (_super) { + __extends(FolderNoteSettingTab, _super); + function FolderNoteSettingTab(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.plugin = plugin; + return _this; + } + FolderNoteSettingTab.prototype.display = function () { + var _this = this; + var containerEl = this.containerEl; + containerEl.empty(); + containerEl.createEl('h2', { text: 'Folder Note Plugin: Settings.' }); + new obsidian.Setting(containerEl) + .setName('Note File Method') + .setDesc('Select the method to put your folder note file. (Read doc for more information.)') + .addDropdown(function (dropDown) { + return dropDown + .addOption('index', 'Index File') + .addOption('inside', 'Folder Name Inside') + .addOption('outside', 'Folder Name Outside') + .setValue(_this.plugin.settings.folderNoteType || 'inside') + .onChange(function (value) { + _this.plugin.settings.folderNoteType = value; + _this.plugin.saveSettings(); + _this.display(); + }); + }); + if (this.plugin.settings.folderNoteType == 'index') { + new obsidian.Setting(containerEl) + .setName('Index File Name') + .setDesc('Set the index file name for folder note. (only for the Index method)') + .addText(function (text) { return text + .setValue(_this.plugin.settings.folderNoteName) + .onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // console.log('Secret: ' + value); + this.plugin.settings.folderNoteName = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); }); + } + new obsidian.Setting(containerEl) + .setName('Inital Content') + .setDesc('Set the inital content for new folder note. {{FOLDER_NAME}} will be replaced with current folder name.') + .addTextArea(function (text) { + text + .setPlaceholder('About the folder.') + .setValue(_this.plugin.settings.folderNoteStrInit) + .onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + this.plugin.settings.folderNoteStrInit = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + _a.sent(); + return [2 /*return*/, false]; + case 3: return [2 /*return*/]; + } + }); + }); }); + text.inputEl.rows = 8; + text.inputEl.cols = 50; + }); + new obsidian.Setting(containerEl) + .setName('Key for New Note') + .setDesc('Key + Click a folder to create folder note file. ') + .addDropdown(function (dropDown) { + return dropDown + .addOption('ctrl', 'Ctrl + Click') + .addOption('alt', 'Alt + Click') + .setValue(_this.plugin.settings.folderNoteKey || 'ctrl') + .onChange(function (value) { + _this.plugin.settings.folderNoteKey = value; + _this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName('Hide Folder Note') + .setDesc('Hide the folder note file in the file explorer panel.') + .addToggle(function (toggle) { + toggle.setValue(_this.plugin.settings.folderNoteHide); + toggle.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.plugin.settings.folderNoteHide = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + }); + if (this.plugin.settings.folderNoteType != 'index') { + new obsidian.Setting(containerEl) + .setName('Auto Rename') + .setDesc('Try to automatically rename the folder note if a folder name is changed. (Experimental)') + .addToggle(function (toggle) { + toggle.setValue(_this.plugin.settings.folderNoteAutoRename); + toggle.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.plugin.settings.folderNoteAutoRename = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + }); + } + if (this.plugin.settings.folderNoteType == 'outside') { + new obsidian.Setting(containerEl) + .setName('Delete Folder Note') + .setDesc('Try to delete folder note when a folder is deleted. (Dangerous)') + .addToggle(function (toggle) { + toggle.setValue(_this.plugin.settings.folderDelete2Note); + toggle.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.plugin.settings.folderDelete2Note = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + }); + } + }; + return FolderNoteSettingTab; +}(obsidian.PluginSettingTab)); + +// ------------------------------------------------------------ +// FolderNotePlugin +// ------------------------------------------------------------ +var NoteFileMethod$1; +(function (NoteFileMethod) { + NoteFileMethod[NoteFileMethod["Index"] = 0] = "Index"; + NoteFileMethod[NoteFileMethod["Inside"] = 1] = "Inside"; + NoteFileMethod[NoteFileMethod["Outside"] = 2] = "Outside"; +})(NoteFileMethod$1 || (NoteFileMethod$1 = {})); +var FolderNotePlugin = /** @class */ (function (_super) { + __extends(FolderNotePlugin, _super); + function FolderNotePlugin() { + return _super !== null && _super.apply(this, arguments) || this; + } + FolderNotePlugin.prototype.onload = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log('Loading Folder Note plugin.'); + // load settings + return [4 /*yield*/, this.loadSettings()]; + case 1: + // load settings + _a.sent(); + // for ccard rendering + this.registerMarkdownCodeBlockProcessor('ccard', function (source, el, ctx) { return __awaiter(_this, void 0, void 0, function () { + var proc; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + proc = new ccardProcessor(this.app); + return [4 /*yield*/, proc.run(source, el, ctx, this.folderNote)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }); + // for rename event + this.registerEvent(this.app.vault.on('rename', function (newPath, oldPath) { return _this.handleFileRename(newPath, oldPath); })); + // for remove folder + this.registerEvent(this.app.vault.on('delete', function (file) { return _this.handleFileDelete(file); })); + // for settings + this.addSettingTab(new FolderNoteSettingTab(this.app, this)); + // for file explorer click + this.registerDomEvent(document, 'click', function (evt) { + // get the folder path + var elemTarget = evt.target; + var folderElem = _this.folderNote.setByFolderElement(elemTarget); + // open the infor note + if (_this.folderNote.folderPath.length > 0) { + // any key? + var newKey = false; + if (_this.settings.folderNoteKey == 'ctrl') { + newKey = (evt.ctrlKey || evt.metaKey); + } + else if (_this.settings.folderNoteKey == 'alt') { + newKey = evt.altKey; + } + // open it + _this.folderNote.openFolderNote(folderElem, newKey); + } + }); + this.addCommand({ + id: 'insert-folder-brief', + name: 'Insert Folder Brief', + callback: function () { return __awaiter(_this, void 0, void 0, function () { + var view, editor, activeFile, folderBrief, folderPath, briefCards; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view) return [3 /*break*/, 3]; + editor = view.sourceMode.cmEditor; + activeFile = this.app.workspace.getActiveFile(); + folderBrief = new FolderBrief(this.app); + return [4 /*yield*/, this.folderNote.getNoteFolderBriefPath(activeFile.path)]; + case 1: + folderPath = _a.sent(); + return [4 /*yield*/, folderBrief.makeBriefCards(folderPath, activeFile.path)]; + case 2: + briefCards = _a.sent(); + editor.replaceSelection(briefCards.getYamlCode(), "end"); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }); }, + hotkeys: [] + }); + this.addCommand({ + id: 'note-to-folder', + name: 'Make Current Note to Folder', + callback: function () { return __awaiter(_this, void 0, void 0, function () { + var view, activeFile; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view) return [3 /*break*/, 2]; + activeFile = this.app.workspace.getActiveFile(); + this.folderNote.setByNotePath(activeFile.path); + return [4 /*yield*/, this.folderNote.newNoteFolder()]; + case 1: + _a.sent(); + _a.label = 2; + case 2: return [2 /*return*/]; + } + }); + }); }, + hotkeys: [] + }); + return [2 /*return*/]; + } + }); + }); + }; + FolderNotePlugin.prototype.onunload = function () { + console.log('Unloading Folder Note plugin'); + }; + FolderNotePlugin.prototype.updateFolderNote = function () { + this.folderNote = new FolderNote(this.app, this.settings.folderNoteType, this.settings.folderNoteName); + this.folderNote.initContent = this.settings.folderNoteStrInit; + this.folderNote.hideNoteFile = this.settings.folderNoteHide; + }; + FolderNotePlugin.prototype.loadSettings = function () { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = this; + _c = (_b = Object).assign; + _d = [FOLDER_NOTE_DEFAULT_SETTINGS]; + return [4 /*yield*/, this.loadData()]; + case 1: + _a.settings = _c.apply(_b, _d.concat([_e.sent()])); + this.updateFolderNote(); + return [2 /*return*/]; + } + }); + }); + }; + FolderNotePlugin.prototype.saveSettings = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.saveData(this.settings)]; + case 1: + _a.sent(); + this.updateFolderNote(); + return [2 /*return*/]; + } + }); + }); + }; + // keep notefile name to be the folder name + FolderNotePlugin.prototype.handleFileRename = function (newPath, oldPath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!this.settings.folderNoteAutoRename) + return [2 /*return*/]; + this.folderNote.syncName(newPath, oldPath); + return [2 /*return*/]; + }); + }); + }; + // delete folder + FolderNotePlugin.prototype.handleFileDelete = function (pathToDel) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!this.settings.folderDelete2Note) + return [2 /*return*/]; + this.folderNote.deleteFolder(pathToDel.path); + return [2 /*return*/]; + }); + }); + }; + return FolderNotePlugin; +}(obsidian.Plugin)); + +module.exports = FolderNotePlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9jYXJkLWl0ZW0udHMiLCJzcmMvZm9sZGVyLWJyaWVmLnRzIiwic3JjL2ZvbGRlci1ub3RlLnRzIiwibm9kZV9tb2R1bGVzL3lhbWwvYnJvd3Nlci9kaXN0L1BsYWluVmFsdWUtZmY1MTQ3YzYuanMiLCJub2RlX21vZHVsZXMveWFtbC9icm93c2VyL2Rpc3QvcGFyc2UtY3N0LmpzIiwibm9kZV9tb2R1bGVzL3lhbWwvYnJvd3Nlci9kaXN0L3Jlc29sdmVTZXEtMDQ4MjVmMzAuanMiLCJub2RlX21vZHVsZXMveWFtbC9icm93c2VyL2Rpc3Qvd2FybmluZ3MtMGU0YjcwZDMuanMiLCJub2RlX21vZHVsZXMveWFtbC9icm93c2VyL2Rpc3QvU2NoZW1hLTJiZjJjNzRlLmpzIiwibm9kZV9tb2R1bGVzL3lhbWwvYnJvd3Nlci9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3lhbWwvYnJvd3Nlci9pbmRleC5qcyIsInNyYy9jY2FyZC1ibG9jay50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsIlxuaW1wb3J0IHsgQXBwLCB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENhcmQgYmxvY2tcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZW51bSBDYXJkU3R5bGUge1xuICAgIEZvbGRlciwgTm90ZSwgSW1hZ2UsXG59XG5cbmV4cG9ydCBjbGFzcyBDYXJkQmxvY2sge1xuICAgIHN0eWxlOiBzdHJpbmc7XG4gICAgY29sOiBudW1iZXI7XG4gICAgY2FyZHM6IENhcmRJdGVtW107XG4gICAgaW1hZ2VQcmVmaXg6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0eWxlID0gJ2NhcmQnO1xuICAgICAgICB0aGlzLmNhcmRzID0gW107XG4gICAgICAgIHRoaXMuY29sID0gLTE7XG4gICAgICAgIHRoaXMuaW1hZ2VQcmVmaXggPSAnJztcbiAgICB9XG5cbiAgICBhZGRDYXJkKGNhcmQ6IENhcmRJdGVtKSB7XG4gICAgICAgIHRoaXMuY2FyZHMucHVzaChjYXJkKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5jYXJkcyA9IFtdO1xuICAgIH1cblxuICAgIGdldENhcmROdW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcmRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXREb2NFbGVtZW50KGFwcDogQXBwKSB7XG4gICAgICAgIGNvbnN0IGNhcmREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgPT0gJ3N0cmlwJykge1xuICAgICAgICAgICAgY2FyZERpdi5hZGRDbGFzcygnc3RyaXAtY2FyZC1iYW5kJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuY2FyZHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2FyZEVsID0gdGhpcy5jYXJkc1tpXS5nZXRCb3hFbGVtZW50KGFwcCwgdGhpcy5pbWFnZVByZWZpeCk7XG4gICAgICAgICAgICAgICAgY2FyZEVsLmFkZENsYXNzKCdzdHJpcC1jYXJkLXZpZXcnKTtcbiAgICAgICAgICAgICAgICBjYXJkRGl2LmFwcGVuZENoaWxkKGNhcmRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGRlZmF1bHQ6IHRoaXMuc3R5bGUgPT0gJ2NhcmQnXG4gICAgICAgICAgICBjYXJkRGl2LmFkZENsYXNzKCdjdXRlLWNhcmQtYmFuZCcpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmNhcmRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNhcmRFbCA9IHRoaXMuY2FyZHNbaV0uZ2V0Qm94RWxlbWVudChhcHAsIHRoaXMuaW1hZ2VQcmVmaXgpO1xuICAgICAgICAgICAgICAgIGNhcmRFbC5hZGRDbGFzcygnY3V0ZS1jYXJkLXZpZXcnKTtcbiAgICAgICAgICAgICAgICBjYXJkRGl2LmFwcGVuZENoaWxkKGNhcmRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb2wgPiAwKSB7XG4gICAgICAgICAgICAgICAgY2FyZERpdi5zZXRBdHRyKCdzdHlsZScgLCBcbiAgICAgICAgICAgICAgICBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoJHt0aGlzLmNvbH0sIDFmcik7YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcmREaXY7XG4gICAgfVxuXG4gICAgZ2V0WWFtbENvZGUoKSB7XG4gICAgICAgIGxldCB5YW1sU3RyID0gJyc7XG4gICAgICAgIGNvbnN0IG5DYXJkID0gdGhpcy5nZXRDYXJkTnVtKCk7XG4gICAgICAgIGlmIChuQ2FyZCA+IDApIHtcbiAgICAgICAgICAgIHlhbWxTdHIgPSAnXFxuYGBgY2NhcmRcXG5pdGVtczogWyc7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuY2FyZHMpIHtcbiAgICAgICAgICAgICAgICB5YW1sU3RyICs9ICdcXG4gIHtcXG4nXG4gICAgICAgICAgICAgICAgeWFtbFN0ciArPSB0aGlzLmNhcmRzW2ldLmdldFlhbWxDb2RlKCcgICAgJyk7XG4gICAgICAgICAgICAgICAgeWFtbFN0ciArPSAnICB9LCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGdldCByaWQgb2YgbGFzdCBwZXJpb2RcbiAgICAgICAgICAgIHlhbWxTdHIgPSB5YW1sU3RyLnN1YnN0cmluZygwLCB5YW1sU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgeWFtbFN0ciArPSAnXFxuXVxcbic7XG4gICAgICAgICAgICBpZiAodGhpcy5jb2wgPiAwKSB7XG4gICAgICAgICAgICAgICAgeWFtbFN0ciArPSBgY29sOiAke3RoaXMuY29sfVxcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5YW1sU3RyICs9ICdgYGBcXG4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5YW1sU3RyO1xuICAgIH1cblxuICAgIGZyb21ZYW1sQ2FyZHMoeWFtbDogYW55KSB7XG4gICAgICAgIC8vIHBhcnNlciBvcHRpb25zXG4gICAgICAgIHRoaXMuZnJvbVlhbWxPcHRpb25zKHlhbWwpO1xuXG4gICAgICAgIC8vIHBhcnNlciBpdGVtc1xuICAgICAgICBpZiAoeWFtbC5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgYWxsSXRlbXMgPSB5YW1sLml0ZW1zO1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhbGxJdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRJbmZvID0gYWxsSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCd0aXRsZScgaW4gY2FyZEluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhcmRJdGVtID0gbmV3IENhcmRJdGVtKGNhcmRJbmZvWyd0aXRsZSddLCBDYXJkU3R5bGUuTm90ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLmZyb21EaWN0KGNhcmRJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDYXJkKGNhcmRJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgcmV0dXJuICh0aGlzLmdldENhcmROdW0oKSA+IDApO1xuICAgIH1cblxuICAgIGZyb21ZYW1sT3B0aW9ucyh5YW1sOiBhbnkpIHtcbiAgICAgICAgaWYgKHlhbWwuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSB5YW1sLnN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5YW1sLmNvbCkge1xuICAgICAgICAgICAgdGhpcy5jb2wgPSB5YW1sLmNvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeWFtbC5pbWFnZVByZWZpeCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZVByZWZpeCA9IHlhbWwuaW1hZ2VQcmVmaXg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYXJkSXRlbSB7XG4gICAgY2FyZFN0eWxlOiBDYXJkU3R5bGU7XG4gICAgaGVhZFRleHQ6IHN0cmluZztcbiAgICBoZWFkSW1hZ2U6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHRpdGxlTGluazogc3RyaW5nO1xuICAgIGFic3RyYWN0OiBzdHJpbmc7XG4gICAgZm9vdG5vdGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRpdGxlOiBzdHJpbmcsIHN0eWxlOiBDYXJkU3R5bGUpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmFic3RyYWN0ID0gXCJObyBhYnN0cmFjdC5cIjtcbiAgICAgICAgdGhpcy5jYXJkU3R5bGUgPSBzdHlsZTtcbiAgICB9XG5cbiAgICBzZXRIZWFkVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5oZWFkVGV4dCA9IHRleHQ7XG4gICAgfVxuXG4gICAgc2V0SGVhZEltYWdlKGxpbmtVcmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmhlYWRJbWFnZSA9IGxpbmtVcmw7XG4gICAgfVxuXG4gICAgc2V0VGl0bGUodGl0bGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgfVxuXG4gICAgc2V0VGl0bGVMaW5rKGxpbmtVcmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRpdGxlTGluayA9IGxpbmtVcmw7XG4gICAgfVxuXG4gICAgc2V0QWJzdHJhY3QoYWJzdHJhY3Q6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFic3RyYWN0ID0gYWJzdHJhY3Q7XG4gICAgfVxuXG4gICAgc2V0Rm9vdG5vdGUoZm9vdG5vdGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZvb3Rub3RlID0gZm9vdG5vdGU7XG4gICAgfVxuXG4gICAgZnJvbURpY3QoZGljdDogYW55KSB7XG4gICAgICAgIGlmICgnaGVhZCcgaW4gZGljdCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkVGV4dCA9IGRpY3RbJ2hlYWQnXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWRUZXh0ID09ICdGb2xkZXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkU3R5bGUgPSBDYXJkU3R5bGUuRm9sZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5oZWFkVGV4dCA9PSAnTm90ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRTdHlsZSA9IENhcmRTdHlsZS5Ob3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgnaW1hZ2UnIGluIGRpY3QpIHRoaXMuaGVhZEltYWdlID0gZGljdFsnaW1hZ2UnXTtcbiAgICAgICAgaWYgKCdsaW5rJyBpbiBkaWN0KSB0aGlzLnRpdGxlTGluayA9IGRpY3RbJ2xpbmsnXTtcbiAgICAgICAgaWYgKCdicmllZicgaW4gZGljdCkgdGhpcy5hYnN0cmFjdCA9IGRpY3RbJ2JyaWVmJ107XG4gICAgICAgIGlmICgnZm9vdCcgaW4gZGljdCkgdGhpcy5mb290bm90ZSA9IGRpY3RbJ2Zvb3QnXTtcbiAgICB9XG5cbiAgICB5YW1sRXNjYXBlUXVvdGVzKG9yZzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBvcmcucmVwbGFjZSgvJy9naSwgXCInJ1wiKTtcbiAgICB9XG5cbiAgICBnZXRZYW1sQ29kZShwcmVmaXg6IHN0cmluZykge1xuICAgICAgICB2YXIgeWFtbFN0ciA9ICcnO1xuICAgICAgICB5YW1sU3RyICs9IGAke3ByZWZpeH10aXRsZTogJyR7dGhpcy55YW1sRXNjYXBlUXVvdGVzKHRoaXMudGl0bGUpfSdgO1xuICAgICAgICBpZiAodGhpcy50aXRsZUxpbmspIHlhbWxTdHIgKz0gYCxcXG4ke3ByZWZpeH1saW5rOiAnJHt0aGlzLnlhbWxFc2NhcGVRdW90ZXModGhpcy50aXRsZUxpbmspfSdgO1xuICAgICAgICBpZiAodGhpcy5hYnN0cmFjdCkgeWFtbFN0ciArPSBgLFxcbiR7cHJlZml4fWJyaWVmOiAnJHt0aGlzLnlhbWxFc2NhcGVRdW90ZXModGhpcy5hYnN0cmFjdCl9J2A7XG4gICAgICAgIGlmICh0aGlzLmZvb3Rub3RlKSB5YW1sU3RyICs9IGAsXFxuJHtwcmVmaXh9Zm9vdDogJyR7dGhpcy55YW1sRXNjYXBlUXVvdGVzKHRoaXMuZm9vdG5vdGUpfSdgO1xuICAgICAgICBpZiAodGhpcy5oZWFkSW1hZ2UpIHtcbiAgICAgICAgICAgIHlhbWxTdHIgKz0gYCxcXG4ke3ByZWZpeH1pbWFnZTogJyR7dGhpcy55YW1sRXNjYXBlUXVvdGVzKHRoaXMuaGVhZEltYWdlKX0nYDtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodGhpcy5oZWFkVGV4dCkge1xuICAgICAgICAgICAgeWFtbFN0ciArPSBgLFxcbiR7cHJlZml4fWhlYWQ6ICcke3RoaXMueWFtbEVzY2FwZVF1b3Rlcyh0aGlzLmhlYWRUZXh0KX0nYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcmRTdHlsZSA9PSBDYXJkU3R5bGUuRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgeWFtbFN0ciArPSBgLFxcbiR7cHJlZml4fWhlYWQ6ICdGb2xkZXInYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY2FyZFN0eWxlID09IENhcmRTdHlsZS5Ob3RlKSB7XG4gICAgICAgICAgICAgICAgeWFtbFN0ciArPSBgLFxcbiR7cHJlZml4fWhlYWQ6ICdOb3RlJ2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5YW1sU3RyICs9IGAsXFxuJHtwcmVmaXh9aGVhZDogJ0NhcmQnYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5YW1sU3RyICs9ICdcXG4nO1xuICAgICAgICByZXR1cm4geWFtbFN0cjtcbiAgICB9XG5cbiAgICBnZXRCb3hFbGVtZW50KGFwcDogQXBwLCBpbWFnZVByZWZpeDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjYXJkRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgLy8gSGVhZGluZ1xuICAgICAgICBsZXQgaGVhZEVsID0gY2FyZEVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgaWYgKHRoaXMuaGVhZEltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRTdHlsZSA9IENhcmRTdHlsZS5JbWFnZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWRJbWFnZS5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbG9yXG4gICAgICAgICAgICAgICAgaGVhZEVsLmFkZENsYXNzKCd0aHVtYi1jb2xvcicpO1xuICAgICAgICAgICAgICAgIGhlYWRFbC5zZXRBdHRyKCdzdHlsZScsIGBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuaGVhZEltYWdlfTtgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaGVhZEltYWdlLmNvbnRhaW5zKFwiOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXBwIGxvY2FsIGltYWdlXG4gICAgICAgICAgICAgICAgaGVhZEVsLmFkZENsYXNzKCd0aHVtYicpO1xuICAgICAgICAgICAgICAgIGhlYWRFbC5zZXRBdHRyKCdzdHlsZScsIGBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHt0aGlzLmhlYWRJbWFnZX0pO2ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhc3NldCBmaWxlIG5hbWU/XG4gICAgICAgICAgICAgICAgbGV0IGltYWdlVXJsID0gdGhpcy5oZWFkSW1hZ2U7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlUHJlZml4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBleHBsaWNpdGx5IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybFBhdGhMaXN0ID0gaW1hZ2VVcmwuc3BsaXQoJy8nKS5qb2luKCcgJykudHJpbVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXhQYXRoTGlzdCA9IGltYWdlUHJlZml4LnNwbGl0KCcvJykuam9pbignICcpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybFBhdGhMaXN0LnN0YXJ0c1dpdGgoZml4UGF0aExpc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVVybCA9IGltYWdlUHJlZml4ICsgdGhpcy5oZWFkSW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpbWFnZVVybC5jb250YWlucygnOi8vJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmwgPSBhcHAudmF1bHQuYWRhcHRlci5nZXRSZXNvdXJjZVBhdGgoaW1hZ2VVcmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoZWFkRWwuYWRkQ2xhc3MoJ3RodW1iJyk7XG4gICAgICAgICAgICAgICAgaGVhZEVsLnNldEF0dHIoJ3N0eWxlJywgYGJhY2tncm91bmQtaW1hZ2U6IHVybCgke2ltYWdlVXJsfSk7YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWRUZXh0KSB7XG4gICAgICAgICAgICAgICAgaGVhZEVsLnRleHRDb250ZW50ID0gdGhpcy5oZWFkVGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhcmRTdHlsZSA9PSBDYXJkU3R5bGUuRm9sZGVyKSB7XG4gICAgICAgICAgICBoZWFkRWwuYWRkQ2xhc3NlcyhbJ3RodW1iLWNvbG9yJywgJ3RodW1iLWNvbG9yLWZvbGRlciddKTtcbiAgICAgICAgICAgIGhlYWRFbC50ZXh0Q29udGVudCA9ICdGb2xkZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY2FyZFN0eWxlID09IENhcmRTdHlsZS5Ob3RlKSB7XG4gICAgICAgICAgICBoZWFkRWwuYWRkQ2xhc3NlcyhbJ3RodW1iLWNvbG9yJywgJ3RodW1iLWNvbG9yLW5vdGUnXSk7XG4gICAgICAgICAgICBoZWFkRWwudGV4dENvbnRlbnQgPSAnTm90ZSc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXJ0aWNsZVxuICAgICAgICBsZXQgYXJ0aWNsZUVsID0gY2FyZEVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FydGljbGUnKSk7XG4gICAgICAgIC8vIFRpdGxlXG4gICAgICAgIGlmICh0aGlzLnRpdGxlTGluaykge1xuICAgICAgICAgICAgbGV0IHRpdGxlRWwgPSBhcnRpY2xlRWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpdGxlTGluay5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgICAgICAgICB0aXRsZUVsLmFkZENsYXNzKCdpbnRlcm5hbC1saW5rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aXRsZUVsLmhyZWYgPSB0aGlzLnRpdGxlTGluaztcbiAgICAgICAgICAgIGxldCBoMUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDEnKTtcbiAgICAgICAgICAgIGgxRWwudGV4dENvbnRlbnQgPSB0aGlzLnRpdGxlO1xuICAgICAgICAgICAgdGl0bGVFbC5hcHBlbmRDaGlsZChoMUVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0aXRsZUVsID0gYXJ0aWNsZUVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gxJykpO1xuICAgICAgICAgICAgdGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWJzdHJhY3RcbiAgICAgICAgbGV0IGJyaWVmRWwgPSBhcnRpY2xlRWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpKTtcbiAgICAgICAgYnJpZWZFbC50ZXh0Q29udGVudCA9IHRoaXMuYWJzdHJhY3Q7XG4gICAgICAgIC8vIGZvb3Rub3RlXG4gICAgICAgIGlmICh0aGlzLmZvb3Rub3RlKSB7XG4gICAgICAgICAgICBsZXQgZm9vdEVsID0gYXJ0aWNsZUVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSk7XG4gICAgICAgICAgICBmb290RWwudGV4dENvbnRlbnQgPSB0aGlzLmZvb3Rub3RlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb3NlXG4gICAgICAgIHJldHVybiBjYXJkRWw7XG4gICAgfVxufVxuXG4iLCJcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBURmlsZSwgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IENhcmRTdHlsZSwgQ2FyZEJsb2NrLCBDYXJkSXRlbSB9IGZyb20gJy4vY2FyZC1pdGVtJ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZvbGRlciBCcmllZlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBGb2xkZXJCcmllZiB7XG4gICAgYXBwOiBBcHA7XG4gICAgZm9sZGVyUGF0aDogc3RyaW5nO1xuICAgIGJyaWVmTWF4OiBudW1iZXI7XG4gICAgbm90ZU9ubHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5mb2xkZXJQYXRoID0gJyc7XG4gICAgICAgIHRoaXMuYnJpZWZNYXggPSA2NDtcbiAgICAgICAgdGhpcy5ub3RlT25seSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGZvciBjYXJkcyB0eXBlOiBmb2xkZXJfYnJpZWZcbiAgICBhc3luYyB5YW1sRm9sZGVyQnJpZWYoeWFtbDogYW55KSB7XG4gICAgICAgIHZhciBmb2xkZXJQYXRoID0gJyc7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuICAgICAgICB2YXIgbm90ZVBhdGggPSBhY3RpdmVGaWxlLnBhdGg7XG4gICAgICAgIGlmICh5YW1sLmNhcmRzLmZvbGRlcikge1xuICAgICAgICAgICAgZm9sZGVyUGF0aCA9IHlhbWwuY2FyZHMuZm9sZGVyO1xuICAgICAgICAgICAgbGV0IGZvbGRlckV4aXN0ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5leGlzdHMoZm9sZGVyUGF0aCk7XG4gICAgICAgICAgICBpZiAoIWZvbGRlckV4aXN0KSBmb2xkZXJQYXRoID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb2xkZXJQYXRoID0gYWN0aXZlRmlsZS5wYXJlbnQucGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdlbmVyYXRlXG4gICAgICAgIGlmIChmb2xkZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnJpZWZDYXJkcyA9IGF3YWl0IHRoaXMubWFrZUJyaWVmQ2FyZHMoZm9sZGVyUGF0aCwgbm90ZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRzRWxlbSA9IGJyaWVmQ2FyZHMuZ2V0RG9jRWxlbWVudCh0aGlzLmFwcCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhcmRzRWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgLy8gZ2VuZXJhdGUgZm9sZGVyIG92ZXJ2aWV3XG4gICAgYXN5bmMgbWFrZUJyaWVmQ2FyZHMoZm9sZGVyUGF0aDogc3RyaW5nLCBhY3RpdmVOb3RlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIC8vIHNldCBub3RlIG5hbWVcbiAgICAgICAgbGV0IGNhcmRCbG9jayA9IG5ldyBDYXJkQmxvY2soKTtcblxuICAgICAgICAvLyBjaGlsZHJlbiBzdGF0aXN0aWNcbiAgICAgICAgbGV0IHBhdGhMaXN0ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5saXN0KGZvbGRlclBhdGgpO1xuICAgICAgICBjb25zdCBzdWJGb2xkZXJMaXN0ID0gcGF0aExpc3QuZm9sZGVycztcbiAgICAgICAgY29uc3Qgc3ViRmlsZUxpc3QgPSBwYXRoTGlzdC5maWxlcztcblxuICAgICAgICAvLyBzdWIgZm9sZGVyc1xuICAgICAgICBpZiAoIXRoaXMubm90ZU9ubHkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViRm9sZGVyTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBzdWJGb2xkZXJQYXRoID0gc3ViRm9sZGVyTGlzdFtpXTtcbiAgICAgICAgICAgICAgICAvLyBoYXZlIG91dHNpZGUgZm9sZGVyIG5vdGU/XG4gICAgICAgICAgICAgICAgbGV0IG5vdGVFeGlzdHMgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhzdWJGb2xkZXJQYXRoICsgJy5tZCcpO1xuICAgICAgICAgICAgICAgIGlmICghbm90ZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyQ2FyZCA9IGF3YWl0IHRoaXMubWFrZUZvbGRlckNhcmQoZm9sZGVyUGF0aCwgc3ViRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmRCbG9jay5hZGRDYXJkKGZvbGRlckNhcmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vdGVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViRmlsZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdWJGaWxlUGF0aCA9IHN1YkZpbGVMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKCFzdWJGaWxlUGF0aC5lbmRzV2l0aCgnLm1kJykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHN1YkZpbGVQYXRoID09IGFjdGl2ZU5vdGVQYXRoKSBjb250aW51ZTsgLy8gb21pdCBzZWxmIGluY2x1ZGVpbmdcbiAgICAgICAgICAgIGxldCBub3RlQ2FyZCA9IGF3YWl0IHRoaXMubWFrZU5vdGVDYXJkKGZvbGRlclBhdGgsIHN1YkZpbGVQYXRoKTtcbiAgICAgICAgICAgIGNhcmRCbG9jay5hZGRDYXJkKG5vdGVDYXJkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVyblxuICAgICAgICByZXR1cm4gY2FyZEJsb2NrO1xuICAgIH1cblxuICAgIC8vIG1ha2UgZm9sZGVyIGJyaWVmIGNhcmRcbiAgICBhc3luYyBtYWtlRm9sZGVyQ2FyZChmb2xkZXJQYXRoOiBzdHJpbmcsIHN1YkZvbGRlclBhdGg6IHN0cmluZykge1xuICAgICAgICAvLyB0aXRsZVxuICAgICAgICB2YXIgc3ViRm9sZGVyTmFtZSA9IHN1YkZvbGRlclBhdGguc3BsaXQoJy8nKS5wb3AoKTtcbiAgICAgICAgbGV0IGNhcmQgPSBuZXcgQ2FyZEl0ZW0oc3ViRm9sZGVyTmFtZSwgQ2FyZFN0eWxlLkZvbGRlcik7XG5cbiAgICAgICAgLy8gZGVzY3JpcHRpb25cbiAgICAgICAgbGV0IHN1YlBhdGhMaXN0ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5saXN0KHN1YkZvbGRlclBhdGgpO1xuICAgICAgICB2YXIgZm9sZGVyQnJpZWYgPSAnQ29udGFpbnMgJztcbiAgICAgICAgZm9sZGVyQnJpZWYgKz0gc3ViUGF0aExpc3QuZm9sZGVycy5sZW5ndGgudG9TdHJpbmcoKSArICcgZm9sZGVycywgJztcbiAgICAgICAgZm9sZGVyQnJpZWYgKz0gc3ViUGF0aExpc3QuZmlsZXMubGVuZ3RoLnRvU3RyaW5nKCkgKyAnIG5vdGVzLic7XG4gICAgICAgIGNhcmQuc2V0QWJzdHJhY3QoZm9sZGVyQnJpZWYpO1xuXG4gICAgICAgIC8vIGZvb3Rub3RlLCB1c2UgZGF0ZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGNhcmQuc2V0Rm9vdG5vdGUoc3ViRm9sZGVyUGF0aC5yZXBsYWNlKGZvbGRlclBhdGggKyAnLycsICcnKSk7XG4gICAgICAgIFxuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBub3RlIGJyaWVmIGNhcmRcbiAgICBhc3luYyBtYWtlTm90ZUNhcmQoZm9sZGVyUGF0aDogc3RyaW5nLCBub3RlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIC8vIHRpdGlsZVxuICAgICAgICB2YXIgbm90ZU5hbWUgPSBub3RlUGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgICB2YXIgbm90ZVRpdGxlID0gbm90ZU5hbWUuc3Vic3RyaW5nKDAsIG5vdGVOYW1lLmxlbmd0aCAtIDMpO1xuICAgICAgICBsZXQgY2FyZCA9IG5ldyBDYXJkSXRlbShub3RlVGl0bGUsIENhcmRTdHlsZS5Ob3RlKTtcbiAgICAgICAgY2FyZC5zZXRUaXRsZUxpbmsobm90ZVBhdGgpO1xuXG4gICAgICAgIC8vIHJlYWQgY29udGVudFxuICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChub3RlUGF0aCk7XG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRPcmcgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgLy8gbGV0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQobm90ZVBhdGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY29udGVudCk7XG5cbiAgICAgICAgICAgIC8vIGltYWdlXG4gICAgICAgICAgICB2YXIgaW1hZ2VVcmwgPSB0aGlzLmdldENvbnRlbnRJbWFnZShjb250ZW50T3JnLCBmb2xkZXJQYXRoKTtcbiAgICAgICAgICAgIGlmIChpbWFnZVVybC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY2FyZC5zZXRIZWFkSW1hZ2UoaW1hZ2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb250ZW50P1xuICAgICAgICAgICAgdmFyIGNvbnRlbnRCcmllZiA9IHRoaXMuZ2V0Q29udGVudEJyaWVmKGNvbnRlbnRPcmcpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRCcmllZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRCcmllZi5sZW5ndGggPiB0aGlzLmJyaWVmTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCcmllZiA9IGNvbnRlbnRCcmllZi5zdWJzdHJpbmcoMCwgdGhpcy5icmllZk1heCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCcmllZiArPSAnLi4uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FyZC5zZXRBYnN0cmFjdChjb250ZW50QnJpZWYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb290IG5vdGVcbiAgICAgICAgICAgIGNvbnN0IGZpbGVTdCA9IChmaWxlIGFzIFRGaWxlKTtcbiAgICAgICAgICAgIGlmIChmaWxlU3Quc3RhdCkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoZmlsZVN0LnN0YXQubXRpbWUpO1xuICAgICAgICAgICAgICAgIGNhcmQuc2V0Rm9vdG5vdGUoZGF0ZS50b0xvY2FsZVN0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcmQuc2V0Rm9vdG5vdGUobm90ZVBhdGgucmVwbGFjZShmb2xkZXJQYXRoICsgJy8nLCAnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV0dXJuXG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgIH1cblxuICAgIGdldENvbnRlbnRJbWFnZShjb250ZW50T3JnOiBzdHJpbmcsIGZvbGRlclBhdGg6IHN0cmluZykge1xuICAgICAgICB2YXIgaW1hZ2VVcmwgPSAnJztcbiAgICAgICAgLy8gZm9yIHBhdHRlbjogIVt4eHgucG5nXVxuICAgICAgICBsZXQgcmVnZXhJbWcgPSBuZXcgUmVnRXhwKCchXFxcXFsoLio/KVxcXFxdXFxcXCgoLio/KVxcXFwpJyk7XG4gICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4SW1nLmV4ZWMoY29udGVudE9yZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbWFnZVVybCA9IG1hdGNoWzJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZm9yIHBhdHRlbjogIVtbeHh4LnBuZ11dXG4gICAgICAgICAgICBsZXQgcmVnZXhJbWcyID0gbmV3IFJlZ0V4cCgnIVxcXFxbXFxcXFsoLio/KVxcXFxdXFxcXF0nKTtcbiAgICAgICAgICAgIG1hdGNoID0gcmVnZXhJbWcyLmV4ZWMoY29udGVudE9yZyk7XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkgaW1hZ2VVcmwgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgaW1hZ2UgdXJsXG4gICAgICAgIGlmIChpbWFnZVVybC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoIWltYWdlVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICAgIGxldCBoZWFkUGF0aCA9IGZvbGRlclBhdGg7XG4gICAgICAgICAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpbWFnZVVybC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZVVybCA9IGltYWdlVXJsLnN1YnN0cmluZygzKTtcbiAgICAgICAgICAgICAgICAgICAgaGVhZFBhdGggPSBoZWFkUGF0aC5zdWJzdHJpbmcoMCwgaGVhZFBhdGgubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmwgPSBoZWFkUGF0aCArICcvJyArIGltYWdlVXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbWFnZVVybCA9IGltYWdlVXJsLnJlcGxhY2UoL1xcJTIwL2csICcgJylcbiAgICAgICAgICAgICAgICAvLyBpbWFnZVVybCA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0UmVzb3VyY2VQYXRoKGltYWdlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW1hZ2VVcmw7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudEJyaWVmKGNvbnRlbnRPcmc6IHN0cmluZykge1xuICAgICAgICAvLyByZW1vdmUgc29tZSBzcGVjaWFsIGNvbnRlbnRcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50T3JnLnRyaW0oKTtcblxuICAgICAgICAvLyBza2lwIHlhbWwgaGVhZFxuICAgICAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCctLS1cXHInKSB8fCBjb250ZW50LnN0YXJ0c1dpdGgoJy0tLVxcbicpICkge1xuICAgICAgICAgICAgY29uc3QgaFBvczIgPSBjb250ZW50LmluZGV4T2YoJy0tLScsIDQpO1xuICAgICAgICAgICAgaWYgKGhQb3MyID49IDAgJiYgKGNvbnRlbnRbaFBvczItMV0gPT0gJ1xcbicgfHwgKGNvbnRlbnRbaFBvczItMV0gPT0gJ1xccicpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhoUG9zMis0KS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZW50ID0gY29udGVudFxuICAgICAgICAvLyBSZW1vdmUgWUFNTCBjb2RlXG4gICAgICAgIC8vIC5yZXBsYWNlKC9eLS0tW1xcclxcbl1bXigtLS0pXSpbXFxyXFxuXS0tLVtcXHJcXG5dL2csICcnKVxuICAgICAgICAvLyBSZW1vdmUgSFRNTCB0YWdzXG4gICAgICAgIC5yZXBsYWNlKC88W14+XSo+L2csICcnKVxuICAgICAgICAvLyB3aWtpIHN0eWxlIGxpbmtzXG4gICAgICAgIC5yZXBsYWNlKC9cXCFcXFtcXFsoLio/KVxcXVxcXS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcW1xcWyguKj8pXFxdXFxdL2csICckMScpXG4gICAgICAgIC8vIFJlbW92ZSBpbWFnZXNcbiAgICAgICAgLnJlcGxhY2UoL1xcIVxcWyguKj8pXFxdW1xcW1xcKF0uKj9bXFxdXFwpXS9nLCAnJylcbiAgICAgICAgLy8gUmVtb3ZlIGlubGluZSBsaW5rc1xuICAgICAgICAucmVwbGFjZSgvXFxbKC4qPylcXF1bXFxbXFwoXS4qP1tcXF1cXCldL2csICckMScpXG4gICAgICAgIC8vIFJlbW92ZSBlbXBoYXNpcyAocmVwZWF0IHRoZSBsaW5lIHRvIHJlbW92ZSBkb3VibGUgZW1waGFzaXMpXG4gICAgICAgIC5yZXBsYWNlKC8oW1xcKl9dezEsM30pKFxcUy4qP1xcU3swLDF9KVxcMS9nLCAnJDInKVxuICAgICAgICAvLyBSZW1vdmUgYmxvY2txdW90ZXNcbiAgICAgICAgLnJlcGxhY2UoL1xcbigmZ3Q7fFxcPikoLiopL2csICcnKVxuICAgICAgICAvLyBSZW1vdmUgY29kZSBibG9ja3NcbiAgICAgICAgLnJlcGxhY2UoLyhgYGBbXlxcc10qXFxuW1xcc1xcU10qP1xcbmBgYCkvZywgJycpXG4gICAgICAgIC8vIFJlbW92ZSBpbmxpbmUgY29kZVxuICAgICAgICAucmVwbGFjZSgvYCguKz8pYC9nLCAnJDEnKVxuICAgICAgICAudHJpbSgpXG5cbiAgICAgICAgLy8gdHJ5IHRvIGdldCB0aGUgZmlyc3QgcGFyYWdyYXBoXG4gICAgICAgIHZhciBjb250ZW50QnJpZWYgPSAnJztcbiAgICAgICAgY29udGVudCA9ICdcXG4nICsgY29udGVudCArICdcXG4nO1xuICAgICAgICBsZXQgcmVnZXhQMSA9IG5ldyBSZWdFeHAoJ1xcbihbXlxcbnxeI3xePl0pKFteXFxuXSspXFxuJywgJ2cnKTsgXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XG4gICAgICAgIGlmICgobWF0Y2ggPSByZWdleFAxLmV4ZWMoY29udGVudCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250ZW50QnJpZWYgPSBtYXRjaFsxXSArIG1hdGNoWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvbnRlbnRCcmllZicsIGNvbnRlbnRCcmllZik7XG4gICAgICAgIGNvbnRlbnRCcmllZiA9IGNvbnRlbnRCcmllZi50cmltKCk7XG5cbiAgICAgICAgLy8gdXNlIHNlY3Rpb24gaGVhZGluZ3NcbiAgICAgICAgaWYgKGNvbnRlbnRCcmllZi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgbGV0IHJlZ2V4SGVhZCA9IG5ldyBSZWdFeHAoJ14jezEsNn0oPyEjKSguKilbXFxyXFxuXScsICdtZycpO1xuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4SGVhZC5leGVjKGNvbnRlbnQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRCcmllZiArPSBtYXRjaFsxXSArICcsICc7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRCcmllZi5sZW5ndGggPiB0aGlzLmJyaWVmTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb250ZW50QnJpZWYuZW5kc1dpdGgoJywgJykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50QnJpZWYgPSBjb250ZW50QnJpZWYuc3Vic3RyaW5nKDAsIGNvbnRlbnRCcmllZi5sZW5ndGgtMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRCcmllZjtcbiAgICB9XG59XG4iLCJcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBURmlsZSwgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEZvbGRlckJyaWVmIH0gZnJvbSAnLi9mb2xkZXItYnJpZWYnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZvbGRlciBOb3RlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZW51bSBOb3RlRmlsZU1ldGhvZCB7XG4gICAgSW5kZXgsIEluc2lkZSwgT3V0c2lkZSxcbn1cblxuZXhwb3J0IGNsYXNzIEZvbGRlck5vdGUge1xuICAgIGFwcDogQXBwO1xuICAgIC8vIGNvcHkgZnJvbSBzZXR0aW5nc1xuICAgIG1ldGhvZDogTm90ZUZpbGVNZXRob2Q7XG4gICAgaW5kZXhCYXNlOiBzdHJpbmc7XG4gICAgaW5pdENvbnRlbnQ6IHN0cmluZztcbiAgICBoaWRlTm90ZUZpbGU6IGJvb2xlYW47XG4gICAgLy8gbG9jYWwgdmFyc1xuICAgIGZvbGRlclBhdGg6IHN0cmluZztcbiAgICBub3RlUGF0aDogc3RyaW5nO1xuICAgIG5vdGVCYXNlOiBzdHJpbmc7XG4gICAgLy8gZm9yIHJlbmFtZVxuICAgIGZpbGVzVG9SZW5hbWU6IHN0cmluZ1tdO1xuICAgIGZpbGVzVG9SZW5hbWVTZXQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgbWV0aG9kU3RyOiBzdHJpbmcsIGluZGV4QmFzZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICB0aGlzLnNldE1ldGhvZChtZXRob2RTdHIsIGluZGV4QmFzZSk7XG4gICAgICAgIHRoaXMuZW1wdHlQYXRoKCk7XG4gICAgICAgIC8vIGZvciByZW5hbWVcbiAgICAgICAgdGhpcy5maWxlc1RvUmVuYW1lID0gW107XG4gICAgICAgIHRoaXMuZmlsZXNUb1JlbmFtZVNldCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbWV0aG9kXG4gICAgc2V0TWV0aG9kKG1ldGhvZFN0cjogc3RyaW5nLCBpbmRleEJhc2U6IHN0cmluZykge1xuICAgICAgICBpZiAobWV0aG9kU3RyID09ICdpbmRleCcpIHtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kID0gTm90ZUZpbGVNZXRob2QuSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmluZGV4QmFzZSA9IGluZGV4QmFzZTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAobWV0aG9kU3RyID09ICdpbnNpZGUnKSB7IFxuICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBOb3RlRmlsZU1ldGhvZC5JbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWV0aG9kU3RyID09ICdvdXRzaWRlJykgeyBcbiAgICAgICAgICAgIHRoaXMubWV0aG9kID0gTm90ZUZpbGVNZXRob2QuT3V0c2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyXG4gICAgZW1wdHlQYXRoKCkge1xuICAgICAgICB0aGlzLmZvbGRlclBhdGggPSAnJztcbiAgICAgICAgdGhpcy5ub3RlUGF0aCA9ICcnO1xuICAgICAgICB0aGlzLm5vdGVCYXNlID0gJyc7XG4gICAgfVxuXG4gICAgLy8gc2V0IGJ5IGZvbGRlciBwYXRoXG4gICAgc2V0QnlGb2xkZXJQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtcHR5UGF0aCgpO1xuICAgICAgICB2YXIgZm9sZGVyUGF0aCA9IHBhdGgudHJpbSgpO1xuICAgICAgICBpZiAoZm9sZGVyUGF0aC5sZW5ndGggPT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIHNldFxuICAgICAgICB0aGlzLmZvbGRlclBhdGggPSBmb2xkZXJQYXRoO1xuICAgICAgICB2YXIgbm90ZVBhdGhzID0gdGhpcy5nZXRGb2xkZXJOb3RlUGF0aChmb2xkZXJQYXRoKTtcbiAgICAgICAgdGhpcy5ub3RlUGF0aCA9IG5vdGVQYXRoc1swXTtcbiAgICAgICAgdGhpcy5ub3RlQmFzZSA9IG5vdGVQYXRoc1sxXTtcbiAgICB9XG5cbiAgICAvLyBzZXQgYnkgbm90ZSwgc2hvdWxkIGVuZHMgd2l0aCAubWRcbiAgICBzZXRCeU5vdGVQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtcHR5UGF0aCgpO1xuICAgICAgICB2YXIgbm90ZVBhdGggPSBwYXRoLnRyaW0oKTtcbiAgICAgICAgaWYgKG5vdGVQYXRoLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgICAgIGlmICghbm90ZVBhdGguZW5kc1dpdGgoJy5tZCcpKSByZXR1cm47XG5cbiAgICAgICAgLy8gc2V0XG4gICAgICAgIHRoaXMubm90ZVBhdGggPSBub3RlUGF0aDtcbiAgICAgICAgdGhpcy5ub3RlQmFzZSA9IHRoaXMuZ2V0RmlsZUJhc2VOYW1lKG5vdGVQYXRoKTtcbiAgICAgICAgdGhpcy5mb2xkZXJQYXRoID0gdGhpcy5nZXROb3RlRm9sZGVyUGF0aChub3RlUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGJ5IGZvbGRlciBlbGVtZW50XG4gICAgc2V0QnlGb2xkZXJFbGVtZW50KGZvbGRlckl0ZW1FbDogRWxlbWVudCkge1xuICAgICAgICB2YXIgZm9sZGVyUGF0aCA9ICcnO1xuICAgICAgICB2YXIgZm9sZGVyTmFtZSA9ICcnO1xuXG4gICAgICAgIHZhciBjbGFzc05hbWUgPSBmb2xkZXJJdGVtRWwuY2xhc3NOYW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBmb2xkZXJFbGVtID0gZm9sZGVySXRlbUVsO1xuICAgICAgICBpZiAoY2xhc3NOYW1lLmNvbnRhaW5zKCduYXYtZm9sZGVyLXRpdGxlLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgZm9sZGVyTmFtZSA9IGZvbGRlckVsZW0uZ2V0VGV4dCgpO1xuICAgICAgICAgICAgZm9sZGVyRWxlbSA9IGZvbGRlckl0ZW1FbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgZm9sZGVyUGF0aCA9IGZvbGRlckVsZW0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtcGF0aCcpLnRleHRDb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNsYXNzTmFtZS5jb250YWlucygnbmF2LWZvbGRlci10aXRsZScpKSB7XG4gICAgICAgICAgICBmb2xkZXJQYXRoID0gZm9sZGVySXRlbUVsLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLXBhdGgnKS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIGZvbGRlck5hbWUgPSBmb2xkZXJJdGVtRWwubGFzdEVsZW1lbnRDaGlsZC5nZXRUZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaXggdGhlIGZvbGRlciBwYXRoXG4gICAgICAgIGlmIChmb2xkZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBzbGFzaExhc3QgPSBmb2xkZXJQYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICB2YXIgZm9sZGVyUGF0aExhc3QgPSBmb2xkZXJQYXRoLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgICAgICBpZiAoZm9sZGVyUGF0aExhc3QgIT0gZm9sZGVyTmFtZSkge1xuICAgICAgICAgICAgICAgIGZvbGRlclBhdGggPSBmb2xkZXJQYXRoLnN1YnN0cmluZygwLCBzbGFzaExhc3QgKyAxKSArIGZvbGRlck5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgdG8gbWluZVxuICAgICAgICB0aGlzLnNldEJ5Rm9sZGVyUGF0aChmb2xkZXJQYXRoKTtcblxuICAgICAgICAvLyByZXR1cm4gdGhlIGVsZW1lbnQgaW4gdXNlYWdlXG4gICAgICAgIHJldHVybiBmb2xkZXJFbGVtO1xuICAgIH1cblxuICAgIC8vIGdldCBmaWxlIGJhc2UgbmFtZVxuICAgIGdldEZpbGVCYXNlTmFtZShmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHZhciBiYXNlTmFtZSA9IGZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgIHZhciBkb3RQb3MgPSBiYXNlTmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICBpZiAoZG90UG9zID4gMCkgYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgZG90UG9zKTtcbiAgICAgICAgcmV0dXJuIGJhc2VOYW1lO1xuICAgIH1cblxuICAgIC8vIGdldCBmb2xkZXIgbm90ZSBwYXRoIGJ5IGZvbGRlciBwYXRoXG4gICAgZ2V0Rm9sZGVyTm90ZVBhdGgoZm9sZGVyUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHZhciBub3RlUGF0aCA9ICcnO1xuICAgICAgICB2YXIgbm90ZUJhc2VOYW1lID0gdGhpcy5pbmRleEJhc2U7XG4gICAgICAgIGlmICh0aGlzLm1ldGhvZCA9PSBOb3RlRmlsZU1ldGhvZC5JbmRleCkge1xuICAgICAgICAgICAgbm90ZVBhdGggPSBmb2xkZXJQYXRoICsgJy8nICsgbm90ZUJhc2VOYW1lICsgJy5tZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RlQmFzZU5hbWUgPSBmb2xkZXJQYXRoLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuSW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgbm90ZVBhdGggPSBmb2xkZXJQYXRoICsgJy8nICsgbm90ZUJhc2VOYW1lICsgJy5tZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG5vdGVQYXRoID0gZm9sZGVyUGF0aCArICcubWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3RlUGF0aDogJywgbm90ZVBhdGgpO1xuICAgICAgICByZXR1cm4gW25vdGVQYXRoLCBub3RlQmFzZU5hbWVdO1xuICAgIH1cblxuICAgIC8vIGdldCBub3RlIGZvbGRlciwgbWFrZSBzdXJlIGl0IGlzIGEgbm90ZSBmaWxlXG4gICAgZ2V0Tm90ZUZvbGRlclBhdGgobm90ZVBhdGg6IHN0cmluZykge1xuICAgICAgICB2YXIgZm9sZGVyUGF0aCA9ICcnO1xuICAgICAgICBpZiAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuSW5kZXgpIHtcbiAgICAgICAgICAgIGZvbGRlclBhdGggPSBub3RlUGF0aC5zdWJzdHJpbmcoMCwgbm90ZVBhdGgubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuSW5zaWRlKSB7XG4gICAgICAgICAgICBmb2xkZXJQYXRoID0gbm90ZVBhdGguc3Vic3RyaW5nKDAsIG5vdGVQYXRoLmxhc3RJbmRleE9mKCcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLk91dHNpZGUpIHtcbiAgICAgICAgICAgIGZvbGRlclBhdGggPSBub3RlUGF0aC5zdWJzdHJpbmcoMCwgIG5vdGVQYXRoLmxlbmd0aC0zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sZGVyUGF0aDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBpdCBpcyBmb2xkZXIgbm90ZSBuYW1lXG4gICAgYXN5bmMgaXNGb2xkZXJOb3RlUGF0aChub3RlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHZhciBpc0ZOID0gZmFsc2U7XG4gICAgICAgIGlmICghbm90ZVBhdGguZW5kc1dpdGgoJy5tZCcpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLkluZGV4KSB7XG4gICAgICAgICAgICBpc0ZOID0gbm90ZVBhdGguZW5kc1dpdGgoYC8ke3RoaXMuaW5kZXhCYXNlfS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLkluc2lkZSkge1xuICAgICAgICAgICAgdmFyIG5vdGVCYXNlTmFtZSA9IHRoaXMuZ2V0RmlsZUJhc2VOYW1lKG5vdGVQYXRoKTtcbiAgICAgICAgICAgIGlmIChub3RlUGF0aC5lbmRzV2l0aChub3RlQmFzZU5hbWUgKyAnLycgKyBub3RlQmFzZU5hbWUgKyAnLm1kJykpICB7XG4gICAgICAgICAgICAgICAgaXNGTiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuT3V0c2lkZSkge1xuICAgICAgICAgICAgdmFyIGZvbGRlclBhdGggPSBub3RlUGF0aC5zdWJzdHJpbmcoMCwgbm90ZVBhdGgubGVuZ3RoLTMpO1xuICAgICAgICAgICAgaXNGTiA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGZvbGRlclBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0ZOO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlzIGZvbGRlciBub3RlIGZpbGU/XG4gICAgYXN5bmMgaXNGb2xkZXJOb3RlKG5vdGVQYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIGlzRk4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLkluZGV4KSB7XG4gICAgICAgICAgICBpc0ZOID0gbm90ZVBhdGguZW5kc1dpdGgoYC8ke3RoaXMuaW5kZXhCYXNlfS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLkluc2lkZSkge1xuICAgICAgICAgICAgdmFyIG5vdGVCYXNlTmFtZSA9IHRoaXMuZ2V0RmlsZUJhc2VOYW1lKG5vdGVQYXRoKTtcbiAgICAgICAgICAgIGlzRk4gPSBub3RlUGF0aC5lbmRzV2l0aChgJHtub3RlQmFzZU5hbWV9LyR7bm90ZUJhc2VOYW1lfS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLk91dHNpZGUpIHtcbiAgICAgICAgICAgIHZhciBmb2xkZXJQYXRoID0gbm90ZVBhdGguc3Vic3RyaW5nKDAsIG5vdGVQYXRoLmxlbmd0aC0zKTtcbiAgICAgICAgICAgIGlzRk4gPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhmb2xkZXJQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNGTjtcbiAgICB9XG5cbiAgICAvLyBvcGVuIG5vdGUgZmlsZVxuICAgIGFzeW5jIG9wZW5Gb2xkZXJOb3RlKGZvbGRlckVsZW06IEVsZW1lbnQsIGRvQ3JlYXRlOiBib29sZWFuKSB7XG4gICAgICAgIC8vIGNoZWNrIG5vdGUgZmlsZVxuICAgICAgICBsZXQgZm9sZGVyTm90ZUV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHRoaXMubm90ZVBhdGgpO1xuICAgICAgICBpZiAoIWZvbGRlck5vdGVFeGlzdHMgJiYgZG9DcmVhdGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmV3Rm9sZGVyTm90ZSgpO1xuICAgICAgICAgICAgZm9sZGVyTm90ZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvcGVuIHRoZSBub3RlXG4gICAgICAgIGlmIChmb2xkZXJOb3RlRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVGb2xkZXJOb3RlKGZvbGRlckVsZW0pO1xuICAgICAgICAgICAgLy8gc2hvdyB0aGUgbm90ZVxuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dCh0aGlzLm5vdGVQYXRoLCAnJywgZmFsc2UsIHsgYWN0aXZlOiB0cnVlIH0pO1xuICAgICAgICB9IFxuICAgICAgICBlbHNlIGlmIChmb2xkZXJFbGVtLmhhc0NsYXNzKCdoYXMtZm9sZGVyLW5vdGUnKSkge1xuICAgICAgICAgICAgZm9sZGVyRWxlbS5yZW1vdmVDbGFzcygnaGFzLWZvbGRlci1ub3RlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgZm9sZGVyIG5vdGVcbiAgICBhc3luYyBuZXdGb2xkZXJOb3RlKCkge1xuICAgICAgICBsZXQgbm90ZUluaXRDb250ZW50ID0gYXdhaXQgdGhpcy5leHBhbmRDb250ZW50KHRoaXMuaW5pdENvbnRlbnQpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLndyaXRlKHRoaXMubm90ZVBhdGgsIG5vdGVJbml0Q29udGVudCk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGZvbGRlciBieSBub3RlXG4gICAgYXN5bmMgbmV3Tm90ZUZvbGRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLk91dHNpZGUpIHtcbiAgICAgICAgICAgIGxldCBmb2xkZXJFeGlzdHMgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyh0aGlzLmZvbGRlclBhdGgpO1xuICAgICAgICAgICAgaWYgKCFmb2xkZXJFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKHRoaXMuZm9sZGVyUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5tZXRob2QgPT0gTm90ZUZpbGVNZXRob2QuSW5zaWRlKSB7XG4gICAgICAgICAgICB2YXIgZm9sZGVyUGF0aCA9IHRoaXMubm90ZVBhdGguc3Vic3RyaW5nKDAsIHRoaXMubm90ZVBhdGgubGVuZ3RoLTMpO1xuICAgICAgICAgICAgbGV0IGZvbGRlckV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGZvbGRlclBhdGgpO1xuICAgICAgICAgICAgaWYgKCFmb2xkZXJFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKGZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIHZhciBuZXdOb3RlUGF0aCA9IGZvbGRlclBhdGggKyAnLycgKyB0aGlzLm5vdGVCYXNlICsgJy5tZCc7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZW5hbWUodGhpcy5ub3RlUGF0aCwgbmV3Tm90ZVBhdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQobmV3Tm90ZVBhdGgsICcnLCBmYWxzZSwgeyBhY3RpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleHBhbmQgY29udGVudCB0ZW1wbGF0ZVxuICAgIGFzeW5jIGV4cGFuZENvbnRlbnQodGVtcGxhdGU6IHN0cmluZykge1xuICAgICAgICAvLyBrZXl3b3JkOiB7e0ZPTERFUl9OQU1FfX0sIHt7Rk9MREVSX1BBVEh9fVxuICAgICAgICB2YXIgZm9sZGVyTmFtZSA9IHRoaXMuZm9sZGVyUGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgICB2YXIgY29udGVudCA9IHRlbXBsYXRlXG4gICAgICAgICAgICAucmVwbGFjZSgve3tGT0xERVJfTkFNRX19L2csIGZvbGRlck5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tGT0xERVJfUEFUSH19L2csIHRoaXMuZm9sZGVyUGF0aClcbiAgICAgICAgLy8ga2V5d29yZDoge3tGT0xERVJfQlJJRUZ9fVxuICAgICAgICBpZiAoY29udGVudC5jb250YWlucygne3tGT0xERVJfQlJJRUZ9fScpKSB7XG4gICAgICAgICAgICBsZXQgZm9sZGVyQnJpZWYgPSBuZXcgRm9sZGVyQnJpZWYodGhpcy5hcHApO1xuICAgICAgICAgICAgbGV0IGJyaWVmQ2FyZHMgPSBhd2FpdCBmb2xkZXJCcmllZi5tYWtlQnJpZWZDYXJkcyh0aGlzLmZvbGRlclBhdGgsIHRoaXMubm90ZVBhdGgpO1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgne3tGT0xERVJfQlJJRUZ9fScsIGJyaWVmQ2FyZHMuZ2V0WWFtbENvZGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2V5d29yZDoge3tGT0xERVJfQlJJRUZfTElWRX19XG4gICAgICAgIGlmIChjb250ZW50LmNvbnRhaW5zKCd7e0ZPTERFUl9CUklFRl9MSVZFfX0nKSkge1xuICAgICAgICAgICAgY29uc3QgYnJpZWZMaXZlQ29kZSA9ICdcXG5gYGBjY2FyZFxcbnR5cGU6IGZvbGRlcl9icmllZl9saXZlXFxuYGBgXFxuJztcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJ3t7Rk9MREVSX0JSSUVGX0xJVkV9fScsIGJyaWVmTGl2ZUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIC8vIGhpZGUgZm9sZGVyIG5vdGVcbiAgICBoaWRlRm9sZGVyTm90ZShmb2xkZXJFbGVtOiBFbGVtZW50KSB7XG4gICAgICAgIC8vIG1vZGlmeSB0aGUgZWxlbWVudFxuICAgICAgICBjb25zdCBoaWRlU2V0dGluZyA9IHRoaXMuaGlkZU5vdGVGaWxlO1xuICAgICAgICBmb2xkZXJFbGVtLmFkZENsYXNzKCdoYXMtZm9sZGVyLW5vdGUnKTtcbiAgICAgICAgdmFyIHBhcmVudEVsZW0gPSBmb2xkZXJFbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHZhciBmaWxlU2VsZWN0b3IgPSAnOnNjb3BlID4gZGl2Lm5hdi1mb2xkZXItY2hpbGRyZW4gPiBkaXYubmF2LWZpbGUgPiBkaXYubmF2LWZpbGUtdGl0bGUnO1xuICAgICAgICB2YXIgaXNPdXRzaWRlTWV0aG9kID0gKHRoaXMubWV0aG9kID09IE5vdGVGaWxlTWV0aG9kLk91dHNpZGUpO1xuICAgICAgICBpZiAoaXNPdXRzaWRlTWV0aG9kKSB7XG4gICAgICAgICAgICBwYXJlbnRFbGVtID0gcGFyZW50RWxlbS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgZmlsZVNlbGVjdG9yID0gJzpzY29wZSA+IGRpdi5uYXYtZmlsZSA+IGRpdi5uYXYtZmlsZS10aXRsZSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5vdGVCYXNlID0gdGhpcy5ub3RlQmFzZTtcbiAgICAgICAgcGFyZW50RWxlbS5xdWVyeVNlbGVjdG9yQWxsKGZpbGVTZWxlY3RvcilcbiAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlRWxlbSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTm9kZVRpdGxlID0gZmlsZUVsZW0uZmlyc3RFbGVtZW50Q2hpbGQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpbGVOb3RlVGl0bGU6ICcsIGZpbGVOb2RlVGl0bGUpO1xuICAgICAgICAgICAgICAgIGlmIChoaWRlU2V0dGluZyAmJiAoZmlsZU5vZGVUaXRsZSA9PSBub3RlQmFzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUVsZW0uYWRkQ2xhc3MoJ2lzLWZvbGRlci1ub3RlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc091dHNpZGVNZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUVsZW0ucmVtb3ZlQ2xhc3MoJ2lzLWZvbGRlci1ub3RlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpc091dHNpZGVNZXRob2Q6ICcsIGlzT3V0c2lkZU1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIC8vIGdldCB0aGUgZmlsZSBicmVpZiBwYXRoXG4gICAgYXN5bmMgZ2V0Tm90ZUZvbGRlckJyaWVmUGF0aChub3RlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHZhciBmb2xkZXJQYXRoID0gJyc7XG4gICAgICAgIGxldCBpc0ZOID0gYXdhaXQgdGhpcy5pc0ZvbGRlck5vdGUobm90ZVBhdGgpO1xuICAgICAgICBpZiAoaXNGTikge1xuICAgICAgICAgICAgZm9sZGVyUGF0aCA9IHRoaXMuZ2V0Tm90ZUZvbGRlclBhdGgobm90ZVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9sZGVyUGF0aCA9IG5vdGVQYXRoLnN1YnN0cmluZygwLCBub3RlUGF0aC5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sZGVyUGF0aDtcbiAgICB9XG5cbiAgICAvLyBkZWxldGUgYSBmb2xkZXIgXG4gICAgYXN5bmMgZGVsZXRlRm9sZGVyKHBhdGhUb0RlbDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1ldGhvZCA9PSBOb3RlRmlsZU1ldGhvZC5PdXRzaWRlICYmICFwYXRoVG9EZWwuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgICAgICAvLyBkZWxldGUgYSBmb2xkZXJcbiAgICAgICAgICAgIGxldCBteU5vdGVQYXRoID0gcGF0aFRvRGVsICsgJy5tZCc7XG4gICAgICAgICAgICBsZXQgbm90ZUV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKG15Tm90ZVBhdGgpO1xuICAgICAgICAgICAgaWYgKG5vdGVFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnRyYXNoTG9jYWwobXlOb3RlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzeW5jIGZvbGRlciAvIG5vdGUgbmFtZVxuICAgIGFzeW5jIHN5bmNOYW1lKG5ld1BhdGg6IGFueSwgb2xkUGF0aDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1ldGhvZCA9PSBOb3RlRmlsZU1ldGhvZC5PdXRzaWRlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN5bmNOYW1lT3V0c2lkZShuZXdQYXRoLCBvbGRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1ldGhvZCA9PSBOb3RlRmlsZU1ldGhvZC5JbnNpZGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3luY05hbWVJbnNpZGUobmV3UGF0aCwgb2xkUGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzeW5jIGZvbGRlciAvIG5vdGUgbmFtZSBmb3Igb3V0c2lkZVxuICAgIGFzeW5jIHN5bmNOYW1lT3V0c2lkZShuZXdQYXRoOiBhbnksIG9sZFBhdGg6IGFueSkge1xuICAgICAgICBpZiAoIW9sZFBhdGguZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyBmb2xkZXIgbmFtZVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NoYW5naW5nIGZvbGRlciEhIScpXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnb2xkUGF0aDogJywgb2xkUGF0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbmV3UGF0aDogJywgbmV3UGF0aC5wYXRoKTtcbiAgICAgICAgICAgIGxldCBub3RlRXhpc3RzID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5leGlzdHMob2xkUGF0aCArICcubWQnKTtcbiAgICAgICAgICAgIGlmIChub3RlRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9sZE5vdGVQYXRocyA9IHRoaXMuZ2V0Rm9sZGVyTm90ZVBhdGgob2xkUGF0aCk7XG4gICAgICAgICAgICAgICAgdmFyIG5ld05vdGVQYXRocyA9IHRoaXMuZ2V0Rm9sZGVyTm90ZVBhdGgobmV3UGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkTm90ZVBhdGhzWzFdICE9IG5ld05vdGVQYXRoc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlbmFtZShvbGROb3RlUGF0aHNbMF0sIG5ld05vdGVQYXRoc1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gY2hhbmdlaW5nIG5vdGUgbmFtZVxuICAgICAgICAgICAgbGV0IGlzRk4gPSBhd2FpdCB0aGlzLmlzRm9sZGVyTm90ZShvbGRQYXRoKTtcbiAgICAgICAgICAgIGlmIChpc0ZOKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ29sZFBhdGg6ICcsIG9sZFBhdGgpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXdQYXRoOiAnLCBuZXdQYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIHZhciBvbGRGb2xkZXJQYXRoID0gdGhpcy5nZXROb3RlRm9sZGVyUGF0aChvbGRQYXRoKTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Rm9sZGVyUGF0aCA9IHRoaXMuZ2V0Tm90ZUZvbGRlclBhdGgobmV3UGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlbmFtZShvbGRGb2xkZXJQYXRoLCBuZXdGb2xkZXJQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vICBzeW5jIGZvbGRlciAvIG5vdGUgbmFtZSBmb3IgaW5zaWRlIGNhc2VcbiAgICBhc3luYyBzeW5jTmFtZUluc2lkZShuZXdQYXRoOiBhbnksIG9sZFBhdGg6IGFueSkge1xuICAgICAgICBpZiAoIW9sZFBhdGguZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyBmb2xkZXIgbmFtZVxuICAgICAgICAgICAgdmFyIG9sZE5vdGVQYXRocyA9IHRoaXMuZ2V0Rm9sZGVyTm90ZVBhdGgob2xkUGF0aCk7XG4gICAgICAgICAgICB2YXIgbmV3Tm90ZVBhdGhzID0gdGhpcy5nZXRGb2xkZXJOb3RlUGF0aChuZXdQYXRoLnBhdGgpO1xuICAgICAgICAgICAgdmFyIG9sZE5vdGVQYXRoTmV3ID0gbmV3UGF0aC5wYXRoICsgJy8nICsgb2xkTm90ZVBhdGhzWzFdICsgJy5tZCc7XG4gICAgICAgICAgICBsZXQgbm90ZUV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKG9sZE5vdGVQYXRoTmV3KTtcbiAgICAgICAgICAgIGlmIChub3RlRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld05vdGVQYXRoc1swXSAhPSBvbGROb3RlUGF0aE5ldykge1xuICAgICAgICAgICAgICAgICAgICAvLyBwdXQgaXQgdG8gcmVuYW1lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNUb1JlbmFtZS5wdXNoKG9sZE5vdGVQYXRoTmV3KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1RvUmVuYW1lLnB1c2gobmV3Tm90ZVBhdGhzWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5maWxlc1RvUmVuYW1lLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyBub3RlIG5hbWVcbiAgICAgICAgICAgIGxldCBpc0ZOID0gYXdhaXQgdGhpcy5pc0ZvbGRlck5vdGUob2xkUGF0aCk7XG4gICAgICAgICAgICBpZiAoaXNGTikge1xuICAgICAgICAgICAgICAgIHZhciBvbGRGb2xkZXJQYXRoID0gdGhpcy5nZXROb3RlRm9sZGVyUGF0aChvbGRQYXRoKTtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBuZXcgcGF0aFxuICAgICAgICAgICAgICAgIHZhciBub3RlRGlyID0gbmV3UGF0aC5wYXRoO1xuICAgICAgICAgICAgICAgIG5vdGVEaXIgPSBub3RlRGlyLnN1YnN0cmluZygwLCBub3RlRGlyLmxhc3RJbmRleE9mKCcvJykpO1xuICAgICAgICAgICAgICAgIG5vdGVEaXIgPSBub3RlRGlyLnN1YnN0cmluZygwLCBub3RlRGlyLmxhc3RJbmRleE9mKCcvJykpO1xuICAgICAgICAgICAgICAgIHZhciBub3RlQmFzZSA9IG5ld1BhdGgucGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgICAgICAgICAgIG5vdGVCYXNlID0gbm90ZUJhc2Uuc3Vic3RyaW5nKDAsIG5vdGVCYXNlLmxlbmd0aC0zKTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Rm9sZGVyUGF0aCA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChub3RlRGlyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Rm9sZGVyUGF0aCA9IG5vdGVEaXIgKyAnLycgKyBub3RlQmFzZTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdGb2xkZXJQYXRoID0gbm90ZUJhc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHB1dCBpdCB0byByZW5hbWVcbiAgICAgICAgICAgICAgICBpZiAob2xkRm9sZGVyUGF0aCAhPSBuZXdGb2xkZXJQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNUb1JlbmFtZS5wdXNoKG9sZEZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzVG9SZW5hbWUucHVzaChuZXdGb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBkbyBvbmNlIGEgdGltZVxuICAgICAgICBpZiAoIXRoaXMuZmlsZXNUb1JlbmFtZVNldCAmJiB0aGlzLmZpbGVzVG9SZW5hbWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc1RvUmVuYW1lU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZW5hbWUgaXMgcnVubmluZyBhZnRlciAxIHMuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNUb1JlbmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEZvbGRlclBhdGggPSB0aGlzLmZpbGVzVG9SZW5hbWVbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdGb2xkZXJQYXRoID0gdGhpcy5maWxlc1RvUmVuYW1lWzFdO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTW9kIE9sZCBQYXRoOicsIG9sZEZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTW9kIE5ldyBQYXRoOicsIG5ld0ZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlbmFtZShvbGRGb2xkZXJQYXRoLCBuZXdGb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1RvUmVuYW1lID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNUb1JlbmFtZVNldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSxcbiAgICAgICAgcmVzdWx0O1xuXG4gICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG5cbiAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICB9IGVsc2Uge1xuICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuXG4gICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG5cbiAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbn1cblxuZnVuY3Rpb24gX3RvQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobykge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChvID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSkge1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiBGLFxuICAgICAgICBuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogb1tpKytdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9LFxuICAgICAgICBmOiBGXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBpdCxcbiAgICAgIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLFxuICAgICAgZGlkRXJyID0gZmFsc2UsXG4gICAgICBlcnI7XG4gIHJldHVybiB7XG4gICAgczogZnVuY3Rpb24gKCkge1xuICAgICAgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXQubmV4dCgpO1xuICAgICAgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTtcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpZEVyciA9IHRydWU7XG4gICAgICBlcnIgPSBlO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0LnJldHVybiAhPSBudWxsKSBpdC5yZXR1cm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChkaWRFcnIpIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciBDaGFyID0ge1xuICBBTkNIT1I6ICcmJyxcbiAgQ09NTUVOVDogJyMnLFxuICBUQUc6ICchJyxcbiAgRElSRUNUSVZFU19FTkQ6ICctJyxcbiAgRE9DVU1FTlRfRU5EOiAnLidcbn07XG52YXIgVHlwZSA9IHtcbiAgQUxJQVM6ICdBTElBUycsXG4gIEJMQU5LX0xJTkU6ICdCTEFOS19MSU5FJyxcbiAgQkxPQ0tfRk9MREVEOiAnQkxPQ0tfRk9MREVEJyxcbiAgQkxPQ0tfTElURVJBTDogJ0JMT0NLX0xJVEVSQUwnLFxuICBDT01NRU5UOiAnQ09NTUVOVCcsXG4gIERJUkVDVElWRTogJ0RJUkVDVElWRScsXG4gIERPQ1VNRU5UOiAnRE9DVU1FTlQnLFxuICBGTE9XX01BUDogJ0ZMT1dfTUFQJyxcbiAgRkxPV19TRVE6ICdGTE9XX1NFUScsXG4gIE1BUDogJ01BUCcsXG4gIE1BUF9LRVk6ICdNQVBfS0VZJyxcbiAgTUFQX1ZBTFVFOiAnTUFQX1ZBTFVFJyxcbiAgUExBSU46ICdQTEFJTicsXG4gIFFVT1RFX0RPVUJMRTogJ1FVT1RFX0RPVUJMRScsXG4gIFFVT1RFX1NJTkdMRTogJ1FVT1RFX1NJTkdMRScsXG4gIFNFUTogJ1NFUScsXG4gIFNFUV9JVEVNOiAnU0VRX0lURU0nXG59O1xudmFyIGRlZmF1bHRUYWdQcmVmaXggPSAndGFnOnlhbWwub3JnLDIwMDI6JztcbnZhciBkZWZhdWx0VGFncyA9IHtcbiAgTUFQOiAndGFnOnlhbWwub3JnLDIwMDI6bWFwJyxcbiAgU0VROiAndGFnOnlhbWwub3JnLDIwMDI6c2VxJyxcbiAgU1RSOiAndGFnOnlhbWwub3JnLDIwMDI6c3RyJ1xufTtcblxuZnVuY3Rpb24gZmluZExpbmVTdGFydHMoc3JjKSB7XG4gIHZhciBscyA9IFswXTtcbiAgdmFyIG9mZnNldCA9IHNyYy5pbmRleE9mKCdcXG4nKTtcblxuICB3aGlsZSAob2Zmc2V0ICE9PSAtMSkge1xuICAgIG9mZnNldCArPSAxO1xuICAgIGxzLnB1c2gob2Zmc2V0KTtcbiAgICBvZmZzZXQgPSBzcmMuaW5kZXhPZignXFxuJywgb2Zmc2V0KTtcbiAgfVxuXG4gIHJldHVybiBscztcbn1cblxuZnVuY3Rpb24gZ2V0U3JjSW5mbyhjc3QpIHtcbiAgdmFyIGxpbmVTdGFydHMsIHNyYztcblxuICBpZiAodHlwZW9mIGNzdCA9PT0gJ3N0cmluZycpIHtcbiAgICBsaW5lU3RhcnRzID0gZmluZExpbmVTdGFydHMoY3N0KTtcbiAgICBzcmMgPSBjc3Q7XG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3N0KSkgY3N0ID0gY3N0WzBdO1xuXG4gICAgaWYgKGNzdCAmJiBjc3QuY29udGV4dCkge1xuICAgICAgaWYgKCFjc3QubGluZVN0YXJ0cykgY3N0LmxpbmVTdGFydHMgPSBmaW5kTGluZVN0YXJ0cyhjc3QuY29udGV4dC5zcmMpO1xuICAgICAgbGluZVN0YXJ0cyA9IGNzdC5saW5lU3RhcnRzO1xuICAgICAgc3JjID0gY3N0LmNvbnRleHQuc3JjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGluZVN0YXJ0czogbGluZVN0YXJ0cyxcbiAgICBzcmM6IHNyY1xuICB9O1xufVxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMaW5lUG9zIC0gT25lLWluZGV4ZWQgcG9zaXRpb24gaW4gdGhlIHNvdXJjZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxpbmVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb2xcbiAqL1xuXG4vKipcbiAqIERldGVybWluZSB0aGUgbGluZS9jb2wgcG9zaXRpb24gbWF0Y2hpbmcgYSBjaGFyYWN0ZXIgb2Zmc2V0LlxuICpcbiAqIEFjY2VwdHMgYSBzb3VyY2Ugc3RyaW5nIG9yIGEgQ1NUIGRvY3VtZW50IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBXaXRoXG4gKiB0aGUgbGF0dGVyLCBzdGFydGluZyBpbmRpY2VzIGZvciBsaW5lcyBhcmUgY2FjaGVkIGluIHRoZSBkb2N1bWVudCBhc1xuICogYGxpbmVTdGFydHM6IG51bWJlcltdYC5cbiAqXG4gKiBSZXR1cm5zIGEgb25lLWluZGV4ZWQgYHsgbGluZSwgY29sIH1gIGxvY2F0aW9uIGlmIGZvdW5kLCBvclxuICogYHVuZGVmaW5lZGAgb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nfERvY3VtZW50fERvY3VtZW50W119IGNzdFxuICogQHJldHVybnMgez9MaW5lUG9zfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGluZVBvcyhvZmZzZXQsIGNzdCkge1xuICBpZiAodHlwZW9mIG9mZnNldCAhPT0gJ251bWJlcicgfHwgb2Zmc2V0IDwgMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIF9nZXRTcmNJbmZvID0gZ2V0U3JjSW5mbyhjc3QpLFxuICAgICAgbGluZVN0YXJ0cyA9IF9nZXRTcmNJbmZvLmxpbmVTdGFydHMsXG4gICAgICBzcmMgPSBfZ2V0U3JjSW5mby5zcmM7XG5cbiAgaWYgKCFsaW5lU3RhcnRzIHx8ICFzcmMgfHwgb2Zmc2V0ID4gc3JjLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lU3RhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0c1tpXTtcblxuICAgIGlmIChvZmZzZXQgPCBzdGFydCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogaSxcbiAgICAgICAgY29sOiBvZmZzZXQgLSBsaW5lU3RhcnRzW2kgLSAxXSArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9mZnNldCA9PT0gc3RhcnQpIHJldHVybiB7XG4gICAgICBsaW5lOiBpICsgMSxcbiAgICAgIGNvbDogMVxuICAgIH07XG4gIH1cblxuICB2YXIgbGluZSA9IGxpbmVTdGFydHMubGVuZ3RoO1xuICByZXR1cm4ge1xuICAgIGxpbmU6IGxpbmUsXG4gICAgY29sOiBvZmZzZXQgLSBsaW5lU3RhcnRzW2xpbmUgLSAxXSArIDFcbiAgfTtcbn1cbi8qKlxuICogR2V0IGEgc3BlY2lmaWVkIGxpbmUgZnJvbSB0aGUgc291cmNlLlxuICpcbiAqIEFjY2VwdHMgYSBzb3VyY2Ugc3RyaW5nIG9yIGEgQ1NUIGRvY3VtZW50IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBXaXRoXG4gKiB0aGUgbGF0dGVyLCBzdGFydGluZyBpbmRpY2VzIGZvciBsaW5lcyBhcmUgY2FjaGVkIGluIHRoZSBkb2N1bWVudCBhc1xuICogYGxpbmVTdGFydHM6IG51bWJlcltdYC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBsaW5lIGFzIGEgc3RyaW5nIGlmIGZvdW5kLCBvciBgbnVsbGAgb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lIE9uZS1pbmRleGVkIGxpbmUgbnVtYmVyXG4gKiBAcGFyYW0ge3N0cmluZ3xEb2N1bWVudHxEb2N1bWVudFtdfSBjc3RcbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGdldExpbmUobGluZSwgY3N0KSB7XG4gIHZhciBfZ2V0U3JjSW5mbzIgPSBnZXRTcmNJbmZvKGNzdCksXG4gICAgICBsaW5lU3RhcnRzID0gX2dldFNyY0luZm8yLmxpbmVTdGFydHMsXG4gICAgICBzcmMgPSBfZ2V0U3JjSW5mbzIuc3JjO1xuXG4gIGlmICghbGluZVN0YXJ0cyB8fCAhKGxpbmUgPj0gMSkgfHwgbGluZSA+IGxpbmVTdGFydHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0c1tsaW5lIC0gMV07XG4gIHZhciBlbmQgPSBsaW5lU3RhcnRzW2xpbmVdOyAvLyB1bmRlZmluZWQgZm9yIGxhc3QgbGluZTsgdGhhdCdzIG9rIGZvciBzbGljZSgpXG5cbiAgd2hpbGUgKGVuZCAmJiBlbmQgPiBzdGFydCAmJiBzcmNbZW5kIC0gMV0gPT09ICdcXG4nKSB7XG4gICAgLS1lbmQ7XG4gIH1cblxuICByZXR1cm4gc3JjLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuLyoqXG4gKiBQcmV0dHktcHJpbnQgdGhlIHN0YXJ0aW5nIGxpbmUgZnJvbSB0aGUgc291cmNlIGluZGljYXRlZCBieSB0aGUgcmFuZ2UgYHBvc2BcbiAqXG4gKiBUcmltcyBvdXRwdXQgdG8gYG1heFdpZHRoYCBjaGFycyB3aGlsZSBrZWVwaW5nIHRoZSBzdGFydGluZyBjb2x1bW4gdmlzaWJsZSxcbiAqIHVzaW5nIGDigKZgIGF0IGVpdGhlciBlbmQgdG8gaW5kaWNhdGUgZHJvcHBlZCBjaGFyYWN0ZXJzLlxuICpcbiAqIFJldHVybnMgYSB0d28tbGluZSBzdHJpbmcgKG9yIGBudWxsYCkgd2l0aCBgXFxuYCBhcyBzZXBhcmF0b3I7IHRoZSBzZWNvbmQgbGluZVxuICogd2lsbCBob2xkIGFwcHJvcHJpYXRlbHkgaW5kZW50ZWQgYF5gIG1hcmtzIGluZGljYXRpbmcgdGhlIGNvbHVtbiByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zXG4gKiBAcGFyYW0ge0xpbmVQb3N9IHBvcy5zdGFydFxuICogQHBhcmFtIHtMaW5lUG9zfSBbcG9zLmVuZF1cbiAqIEBwYXJhbSB7c3RyaW5nfERvY3VtZW50fERvY3VtZW50W10qfSBjc3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4V2lkdGg9ODBdXG4gKiBAcmV0dXJucyB7P3N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBnZXRQcmV0dHlDb250ZXh0KF9yZWYsIGNzdCkge1xuICB2YXIgc3RhcnQgPSBfcmVmLnN0YXJ0LFxuICAgICAgZW5kID0gX3JlZi5lbmQ7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogODA7XG4gIHZhciBzcmMgPSBnZXRMaW5lKHN0YXJ0LmxpbmUsIGNzdCk7XG4gIGlmICghc3JjKSByZXR1cm4gbnVsbDtcbiAgdmFyIGNvbCA9IHN0YXJ0LmNvbDtcblxuICBpZiAoc3JjLmxlbmd0aCA+IG1heFdpZHRoKSB7XG4gICAgaWYgKGNvbCA8PSBtYXhXaWR0aCAtIDEwKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyKDAsIG1heFdpZHRoIC0gMSkgKyAn4oCmJztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGhhbGZXaWR0aCA9IE1hdGgucm91bmQobWF4V2lkdGggLyAyKTtcbiAgICAgIGlmIChzcmMubGVuZ3RoID4gY29sICsgaGFsZldpZHRoKSBzcmMgPSBzcmMuc3Vic3RyKDAsIGNvbCArIGhhbGZXaWR0aCAtIDEpICsgJ+KApic7XG4gICAgICBjb2wgLT0gc3JjLmxlbmd0aCAtIG1heFdpZHRoO1xuICAgICAgc3JjID0gJ+KApicgKyBzcmMuc3Vic3RyKDEgLSBtYXhXaWR0aCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVyckxlbiA9IDE7XG4gIHZhciBlcnJFbmQgPSAnJztcblxuICBpZiAoZW5kKSB7XG4gICAgaWYgKGVuZC5saW5lID09PSBzdGFydC5saW5lICYmIGNvbCArIChlbmQuY29sIC0gc3RhcnQuY29sKSA8PSBtYXhXaWR0aCArIDEpIHtcbiAgICAgIGVyckxlbiA9IGVuZC5jb2wgLSBzdGFydC5jb2w7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyckxlbiA9IE1hdGgubWluKHNyYy5sZW5ndGggKyAxLCBtYXhXaWR0aCkgLSBjb2w7XG4gICAgICBlcnJFbmQgPSAn4oCmJztcbiAgICB9XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gY29sID4gMSA/ICcgJy5yZXBlYXQoY29sIC0gMSkgOiAnJztcbiAgdmFyIGVyciA9ICdeJy5yZXBlYXQoZXJyTGVuKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHNyYywgXCJcXG5cIikuY29uY2F0KG9mZnNldCkuY29uY2F0KGVycikuY29uY2F0KGVyckVuZCk7XG59XG5cbnZhciBSYW5nZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIF9jcmVhdGVDbGFzcyhSYW5nZSwgbnVsbCwgW3tcbiAgICBrZXk6IFwiY29weVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb3B5KG9yaWcpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2Uob3JpZy5zdGFydCwgb3JpZy5lbmQpO1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmFuZ2UpO1xuXG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kIHx8IHN0YXJ0O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFJhbmdlLCBbe1xuICAgIGtleTogXCJpc0VtcHR5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMuc3RhcnQgIT09ICdudW1iZXInIHx8ICF0aGlzLmVuZCB8fCB0aGlzLmVuZCA8PSB0aGlzLnN0YXJ0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYG9yaWdTdGFydGAgYW5kIGBvcmlnRW5kYCB0byBwb2ludCB0byB0aGUgb3JpZ2luYWwgc291cmNlIHJhbmdlIGZvclxuICAgICAqIHRoaXMgbm9kZSwgd2hpY2ggbWF5IGRpZmZlciBkdWUgdG8gZHJvcHBlZCBDUiBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gY3IgLSBQb3NpdGlvbnMgb2YgZHJvcHBlZCBDUiBjaGFyYWN0ZXJzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFN0YXJ0aW5nIGluZGV4IG9mIGBjcmAgZnJvbSB0aGUgbGFzdCBjYWxsXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgbmV4dCBvZmZzZXQsIG1hdGNoaW5nIHRoZSBvbmUgZm91bmQgZm9yIGBvcmlnU3RhcnRgXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJzZXRPcmlnUmFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0T3JpZ1JhbmdlKGNyLCBvZmZzZXQpIHtcbiAgICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdGhpcy5lbmQ7XG5cbiAgICAgIGlmIChjci5sZW5ndGggPT09IDAgfHwgZW5kIDw9IGNyWzBdKSB7XG4gICAgICAgIHRoaXMub3JpZ1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMub3JpZ0VuZCA9IGVuZDtcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICAgIH1cblxuICAgICAgdmFyIGkgPSBvZmZzZXQ7XG5cbiAgICAgIHdoaWxlIChpIDwgY3IubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjcltpXSA+IHN0YXJ0KSBicmVhaztlbHNlICsraTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcmlnU3RhcnQgPSBzdGFydCArIGk7XG4gICAgICB2YXIgbmV4dE9mZnNldCA9IGk7XG5cbiAgICAgIHdoaWxlIChpIDwgY3IubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIGVuZCB3YXMgYXQgXFxuLCBpdCBzaG91bGQgbm93IGJlIGF0IFxcclxuICAgICAgICBpZiAoY3JbaV0gPj0gZW5kKSBicmVhaztlbHNlICsraTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcmlnRW5kID0gZW5kICsgaTtcbiAgICAgIHJldHVybiBuZXh0T2Zmc2V0O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSYW5nZTtcbn0oKTtcblxuLyoqIFJvb3QgY2xhc3Mgb2YgYWxsIG5vZGVzICovXG5cbnZhciBOb2RlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgX2NyZWF0ZUNsYXNzKE5vZGUsIG51bGwsIFt7XG4gICAga2V5OiBcImFkZFN0cmluZ1Rlcm1pbmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkU3RyaW5nVGVybWluYXRvcihzcmMsIG9mZnNldCwgc3RyKSB7XG4gICAgICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJ1xcbicpIHJldHVybiBzdHI7XG4gICAgICB2YXIgbmV4dCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgIHJldHVybiBuZXh0ID49IHNyYy5sZW5ndGggfHwgc3JjW25leHRdID09PSAnXFxuJyA/IHN0ciArICdcXG4nIDogc3RyO1xuICAgIH0gLy8gXigtLS18Li4uKVxuXG4gIH0sIHtcbiAgICBrZXk6IFwiYXREb2N1bWVudEJvdW5kYXJ5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGF0RG9jdW1lbnRCb3VuZGFyeShzcmMsIG9mZnNldCwgc2VwKSB7XG4gICAgICB2YXIgY2gwID0gc3JjW29mZnNldF07XG4gICAgICBpZiAoIWNoMCkgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgcHJldiA9IHNyY1tvZmZzZXQgLSAxXTtcbiAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICdcXG4nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGlmIChzZXApIHtcbiAgICAgICAgaWYgKGNoMCAhPT0gc2VwKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2gwICE9PSBDaGFyLkRJUkVDVElWRVNfRU5EICYmIGNoMCAhPT0gQ2hhci5ET0NVTUVOVF9FTkQpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoMSA9IHNyY1tvZmZzZXQgKyAxXTtcbiAgICAgIHZhciBjaDIgPSBzcmNbb2Zmc2V0ICsgMl07XG4gICAgICBpZiAoY2gxICE9PSBjaDAgfHwgY2gyICE9PSBjaDApIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBjaDMgPSBzcmNbb2Zmc2V0ICsgM107XG4gICAgICByZXR1cm4gIWNoMyB8fCBjaDMgPT09ICdcXG4nIHx8IGNoMyA9PT0gJ1xcdCcgfHwgY2gzID09PSAnICc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZE9mSWRlbnRpZmllclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmRPZklkZW50aWZpZXIoc3JjLCBvZmZzZXQpIHtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuICAgICAgdmFyIGlzVmVyYmF0aW0gPSBjaCA9PT0gJzwnO1xuICAgICAgdmFyIG5vdE9rID0gaXNWZXJiYXRpbSA/IFsnXFxuJywgJ1xcdCcsICcgJywgJz4nXSA6IFsnXFxuJywgJ1xcdCcsICcgJywgJ1snLCAnXScsICd7JywgJ30nLCAnLCddO1xuXG4gICAgICB3aGlsZSAoY2ggJiYgbm90T2suaW5kZXhPZihjaCkgPT09IC0xKSB7XG4gICAgICAgIGNoID0gc3JjW29mZnNldCArPSAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzVmVyYmF0aW0gJiYgY2ggPT09ICc+Jykgb2Zmc2V0ICs9IDE7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmRPZkluZGVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmRPZkluZGVudChzcmMsIG9mZnNldCkge1xuICAgICAgdmFyIGNoID0gc3JjW29mZnNldF07XG5cbiAgICAgIHdoaWxlIChjaCA9PT0gJyAnKSB7XG4gICAgICAgIGNoID0gc3JjW29mZnNldCArPSAxXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5kT2ZMaW5lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuZE9mTGluZShzcmMsIG9mZnNldCkge1xuICAgICAgdmFyIGNoID0gc3JjW29mZnNldF07XG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCAhPT0gJ1xcbicpIHtcbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0ICs9IDFdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmRPZldoaXRlU3BhY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KSB7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcblxuICAgICAgd2hpbGUgKGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJyAnKSB7XG4gICAgICAgIGNoID0gc3JjW29mZnNldCArPSAxXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRPZkxpbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRPZkxpbmUoc3JjLCBvZmZzZXQpIHtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXQgLSAxXTtcbiAgICAgIGlmIChjaCA9PT0gJ1xcbicpIHJldHVybiBvZmZzZXQ7XG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCAhPT0gJ1xcbicpIHtcbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0IC09IDFdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0ICsgMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5kIG9mIGluZGVudGF0aW9uLCBvciBudWxsIGlmIHRoZSBsaW5lJ3MgaW5kZW50IGxldmVsIGlzIG5vdCBtb3JlXG4gICAgICogdGhhbiBgaW5kZW50YFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNyY1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRlbnRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVN0YXJ0XG4gICAgICogQHJldHVybnMgez9udW1iZXJ9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJlbmRPZkJsb2NrSW5kZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuZE9mQmxvY2tJbmRlbnQoc3JjLCBpbmRlbnQsIGxpbmVTdGFydCkge1xuICAgICAgdmFyIGluRW5kID0gTm9kZS5lbmRPZkluZGVudChzcmMsIGxpbmVTdGFydCk7XG5cbiAgICAgIGlmIChpbkVuZCA+IGxpbmVTdGFydCArIGluZGVudCkge1xuICAgICAgICByZXR1cm4gaW5FbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgd3NFbmQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIGluRW5kKTtcbiAgICAgICAgdmFyIGNoID0gc3JjW3dzRW5kXTtcbiAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcbicpIHJldHVybiB3c0VuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImF0QmxhbmtcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXRCbGFuayhzcmMsIG9mZnNldCwgZW5kQXNCbGFuaykge1xuICAgICAgdmFyIGNoID0gc3JjW29mZnNldF07XG4gICAgICByZXR1cm4gY2ggPT09ICdcXG4nIHx8IGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJyAnIHx8IGVuZEFzQmxhbmsgJiYgIWNoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJuZXh0Tm9kZUlzSW5kZW50ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dE5vZGVJc0luZGVudGVkKGNoLCBpbmRlbnREaWZmLCBpbmRpY2F0b3JBc0luZGVudCkge1xuICAgICAgaWYgKCFjaCB8fCBpbmRlbnREaWZmIDwgMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGluZGVudERpZmYgPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBpbmRpY2F0b3JBc0luZGVudCAmJiBjaCA9PT0gJy0nO1xuICAgIH0gLy8gc2hvdWxkIGJlIGF0IGxpbmUgb3Igc3RyaW5nIGVuZCwgb3IgYXQgbmV4dCBub24td2hpdGVzcGFjZSBjaGFyXG5cbiAgfSwge1xuICAgIGtleTogXCJub3JtYWxpemVPZmZzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHNyYywgb2Zmc2V0KSB7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcbiAgICAgIHJldHVybiAhY2ggPyBvZmZzZXQgOiBjaCAhPT0gJ1xcbicgJiYgc3JjW29mZnNldCAtIDFdID09PSAnXFxuJyA/IG9mZnNldCAtIDEgOiBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIG9mZnNldCk7XG4gICAgfSAvLyBmb2xkIHNpbmdsZSBuZXdsaW5lIGludG8gc3BhY2UsIG11bHRpcGxlIG5ld2xpbmVzIHRvIE4gLSAxIG5ld2xpbmVzXG4gICAgLy8gcHJlc3VtZXMgc3JjW29mZnNldF0gPT09ICdcXG4nXG5cbiAgfSwge1xuICAgIGtleTogXCJmb2xkTmV3bGluZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2xkTmV3bGluZShzcmMsIG9mZnNldCwgaW5kZW50KSB7XG4gICAgICB2YXIgaW5Db3VudCA9IDA7XG4gICAgICB2YXIgZXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBmb2xkID0gJyc7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0ICsgMV07XG5cbiAgICAgIHdoaWxlIChjaCA9PT0gJyAnIHx8IGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgIGNhc2UgJ1xcbic6XG4gICAgICAgICAgICBpbkNvdW50ID0gMDtcbiAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgZm9sZCArPSAnXFxuJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIGlmIChpbkNvdW50IDw9IGluZGVudCkgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBvZmZzZXQgKyAyKSAtIDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgaW5Db3VudCArPSAxO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNoID0gc3JjW29mZnNldCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvbGQpIGZvbGQgPSAnICc7XG4gICAgICBpZiAoY2ggJiYgaW5Db3VudCA8PSBpbmRlbnQpIGVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbGQ6IGZvbGQsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gTm9kZSh0eXBlLCBwcm9wcywgY29udGV4dCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb2RlKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29udGV4dCcsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0IHx8IG51bGwsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMucmFuZ2UgPSBudWxsO1xuICAgIHRoaXMudmFsdWVSYW5nZSA9IG51bGw7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzIHx8IFtdO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTm9kZSwgW3tcbiAgICBrZXk6IFwiZ2V0UHJvcFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFByb3BWYWx1ZShpZHgsIGtleSwgc2tpcEtleSkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHNyYyA9IHRoaXMuY29udGV4dC5zcmM7XG4gICAgICB2YXIgcHJvcCA9IHRoaXMucHJvcHNbaWR4XTtcbiAgICAgIHJldHVybiBwcm9wICYmIHNyY1twcm9wLnN0YXJ0XSA9PT0ga2V5ID8gc3JjLnNsaWNlKHByb3Auc3RhcnQgKyAoc2tpcEtleSA/IDEgOiAwKSwgcHJvcC5lbmQpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tbWVudEhhc1JlcXVpcmVkV2hpdGVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21tZW50SGFzUmVxdWlyZWRXaGl0ZXNwYWNlKHN0YXJ0KSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYztcbiAgICAgIGlmICh0aGlzLmhlYWRlciAmJiBzdGFydCA9PT0gdGhpcy5oZWFkZXIuZW5kKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIXRoaXMudmFsdWVSYW5nZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGVuZCA9IHRoaXMudmFsdWVSYW5nZS5lbmQ7XG4gICAgICByZXR1cm4gc3RhcnQgIT09IGVuZCB8fCBOb2RlLmF0Qmxhbmsoc3JjLCBlbmQgLSAxKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFyc2VDb21tZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQ29tbWVudChzdGFydCkge1xuICAgICAgdmFyIHNyYyA9IHRoaXMuY29udGV4dC5zcmM7XG5cbiAgICAgIGlmIChzcmNbc3RhcnRdID09PSBDaGFyLkNPTU1FTlQpIHtcbiAgICAgICAgdmFyIGVuZCA9IE5vZGUuZW5kT2ZMaW5lKHNyYywgc3RhcnQgKyAxKTtcbiAgICAgICAgdmFyIGNvbW1lbnRSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5wcm9wcy5wdXNoKGNvbW1lbnRSYW5nZSk7XG4gICAgICAgIHJldHVybiBlbmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGFydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUG9wdWxhdGVzIHRoZSBgb3JpZ1N0YXJ0YCBhbmQgYG9yaWdFbmRgIHZhbHVlcyBvZiBhbGwgcmFuZ2VzIGZvciB0aGlzXG4gICAgICogbm9kZS4gRXh0ZW5kZWQgYnkgY2hpbGQgY2xhc3NlcyB0byBoYW5kbGUgZGVzY2VuZGFudCBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IGNyIC0gUG9zaXRpb25zIG9mIGRyb3BwZWQgQ1IgY2hhcmFjdGVyc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBTdGFydGluZyBpbmRleCBvZiBgY3JgIGZyb20gdGhlIGxhc3QgY2FsbFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIG5leHQgb2Zmc2V0LCBtYXRjaGluZyB0aGUgb25lIGZvdW5kIGZvciBgb3JpZ1N0YXJ0YFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3JpZ1Jhbmdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpIHtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSBvZmZzZXQgPSB0aGlzLnJhbmdlLnNldE9yaWdSYW5nZShjciwgb2Zmc2V0KTtcbiAgICAgIGlmICh0aGlzLnZhbHVlUmFuZ2UpIHRoaXMudmFsdWVSYW5nZS5zZXRPcmlnUmFuZ2UoY3IsIG9mZnNldCk7XG4gICAgICB0aGlzLnByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHByb3Auc2V0T3JpZ1JhbmdlKGNyLCBvZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmNvbnRleHQuc3JjLFxuICAgICAgICAgIHJhbmdlID0gdGhpcy5yYW5nZSxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICAgICAgdmFyIHN0ciA9IHNyYy5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICAgIHJldHVybiBOb2RlLmFkZFN0cmluZ1Rlcm1pbmF0b3Ioc3JjLCByYW5nZS5lbmQsIHN0cik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFuY2hvclwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmdldFByb3BWYWx1ZShpLCBDaGFyLkFOQ0hPUiwgdHJ1ZSk7XG4gICAgICAgIGlmIChhbmNob3IgIT0gbnVsbCkgcmV0dXJuIGFuY2hvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbW1lbnRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBjb21tZW50cyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLmdldFByb3BWYWx1ZShpLCBDaGFyLkNPTU1FTlQsIHRydWUpO1xuICAgICAgICBpZiAoY29tbWVudCAhPSBudWxsKSBjb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbWVudHMubGVuZ3RoID4gMCA/IGNvbW1lbnRzLmpvaW4oJ1xcbicpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzQ29tbWVudFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYztcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpZiAoc3JjW3RoaXMucHJvcHNbaV0uc3RhcnRdID09PSBDaGFyLkNPTU1FTlQpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzUHJvcHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXMuY29udGV4dC5zcmM7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKHNyY1t0aGlzLnByb3BzW2ldLnN0YXJ0XSAhPT0gQ2hhci5DT01NRU5UKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluY2x1ZGVzVHJhaWxpbmdMaW5lc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJqc29uTGlrZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGpzb25MaWtlVHlwZXMgPSBbVHlwZS5GTE9XX01BUCwgVHlwZS5GTE9XX1NFUSwgVHlwZS5RVU9URV9ET1VCTEUsIFR5cGUuUVVPVEVfU0lOR0xFXTtcbiAgICAgIHJldHVybiBqc29uTGlrZVR5cGVzLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJhbmdlQXNMaW5lUG9zXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoIXRoaXMucmFuZ2UgfHwgIXRoaXMuY29udGV4dCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHZhciBzdGFydCA9IGdldExpbmVQb3ModGhpcy5yYW5nZS5zdGFydCwgdGhpcy5jb250ZXh0LnJvb3QpO1xuICAgICAgaWYgKCFzdGFydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHZhciBlbmQgPSBnZXRMaW5lUG9zKHRoaXMucmFuZ2UuZW5kLCB0aGlzLmNvbnRleHQucm9vdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyYXdWYWx1ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlUmFuZ2UgfHwgIXRoaXMuY29udGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkdmFsdWVSYW5nZSA9IHRoaXMudmFsdWVSYW5nZSxcbiAgICAgICAgICBzdGFydCA9IF90aGlzJHZhbHVlUmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgZW5kID0gX3RoaXMkdmFsdWVSYW5nZS5lbmQ7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnNyYy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidGFnXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHRhZyA9IHRoaXMuZ2V0UHJvcFZhbHVlKGksIENoYXIuVEFHLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHRhZyAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhZ1sxXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2ZXJiYXRpbTogdGFnLnNsaWNlKDIsIC0xKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgICAgICB2YXIgX3RhZyRtYXRjaCA9IHRhZy5tYXRjaCgvXiguKiEpKFteIV0qKSQvKSxcbiAgICAgICAgICAgICAgICBfdGFnJG1hdGNoMiA9IF9zbGljZWRUb0FycmF5KF90YWckbWF0Y2gsIDMpLFxuICAgICAgICAgICAgICAgIF8gPSBfdGFnJG1hdGNoMlswXSxcbiAgICAgICAgICAgICAgICBoYW5kbGUgPSBfdGFnJG1hdGNoMlsxXSxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBfdGFnJG1hdGNoMlsyXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGUsXG4gICAgICAgICAgICAgIHN1ZmZpeDogc3VmZml4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsdWVSYW5nZUNvbnRhaW5zTmV3bGluZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlUmFuZ2UgfHwgIXRoaXMuY29udGV4dCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIF90aGlzJHZhbHVlUmFuZ2UyID0gdGhpcy52YWx1ZVJhbmdlLFxuICAgICAgICAgIHN0YXJ0ID0gX3RoaXMkdmFsdWVSYW5nZTIuc3RhcnQsXG4gICAgICAgICAgZW5kID0gX3RoaXMkdmFsdWVSYW5nZTIuZW5kO1xuICAgICAgdmFyIHNyYyA9IHRoaXMuY29udGV4dC5zcmM7XG5cbiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICAgIGlmIChzcmNbaV0gPT09ICdcXG4nKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBOb2RlO1xufSgpO1xuXG52YXIgWUFNTEVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXJyb3IpIHtcbiAgX2luaGVyaXRzKFlBTUxFcnJvciwgX0Vycm9yKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFlBTUxFcnJvcik7XG5cbiAgZnVuY3Rpb24gWUFNTEVycm9yKG5hbWUsIHNvdXJjZSwgbWVzc2FnZSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZQU1MRXJyb3IpO1xuXG4gICAgaWYgKCFtZXNzYWdlIHx8ICEoc291cmNlIGluc3RhbmNlb2YgTm9kZSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBuZXcgXCIuY29uY2F0KG5hbWUpKTtcbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoWUFNTEVycm9yLCBbe1xuICAgIGtleTogXCJtYWtlUHJldHR5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1ha2VQcmV0dHkoKSB7XG4gICAgICBpZiAoIXRoaXMuc291cmNlKSByZXR1cm47XG4gICAgICB0aGlzLm5vZGVUeXBlID0gdGhpcy5zb3VyY2UudHlwZTtcbiAgICAgIHZhciBjc3QgPSB0aGlzLnNvdXJjZS5jb250ZXh0ICYmIHRoaXMuc291cmNlLmNvbnRleHQucm9vdDtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9mZnNldCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5yYW5nZSA9IG5ldyBSYW5nZSh0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKyAxKTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gY3N0ICYmIGdldExpbmVQb3ModGhpcy5vZmZzZXQsIGNzdCk7XG5cbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgdmFyIGVuZCA9IHtcbiAgICAgICAgICAgIGxpbmU6IHN0YXJ0LmxpbmUsXG4gICAgICAgICAgICBjb2w6IHN0YXJ0LmNvbCArIDFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMubGluZVBvcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogZW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLm9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLnNvdXJjZS5yYW5nZTtcbiAgICAgICAgdGhpcy5saW5lUG9zID0gdGhpcy5zb3VyY2UucmFuZ2VBc0xpbmVQb3M7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbmVQb3MpIHtcbiAgICAgICAgdmFyIF90aGlzJGxpbmVQb3Mkc3RhcnQgPSB0aGlzLmxpbmVQb3Muc3RhcnQsXG4gICAgICAgICAgICBsaW5lID0gX3RoaXMkbGluZVBvcyRzdGFydC5saW5lLFxuICAgICAgICAgICAgY29sID0gX3RoaXMkbGluZVBvcyRzdGFydC5jb2w7XG4gICAgICAgIHRoaXMubWVzc2FnZSArPSBcIiBhdCBsaW5lIFwiLmNvbmNhdChsaW5lLCBcIiwgY29sdW1uIFwiKS5jb25jYXQoY29sKTtcbiAgICAgICAgdmFyIGN0eCA9IGNzdCAmJiBnZXRQcmV0dHlDb250ZXh0KHRoaXMubGluZVBvcywgY3N0KTtcbiAgICAgICAgaWYgKGN0eCkgdGhpcy5tZXNzYWdlICs9IFwiOlxcblxcblwiLmNvbmNhdChjdHgsIFwiXFxuXCIpO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgdGhpcy5zb3VyY2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFlBTUxFcnJvcjtcbn0oIC8qI19fUFVSRV9fKi9fd3JhcE5hdGl2ZVN1cGVyKEVycm9yKSk7XG52YXIgWUFNTFJlZmVyZW5jZUVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWUFNTEVycm9yKSB7XG4gIF9pbmhlcml0cyhZQU1MUmVmZXJlbmNlRXJyb3IsIF9ZQU1MRXJyb3IpO1xuXG4gIHZhciBfc3VwZXIyID0gX2NyZWF0ZVN1cGVyKFlBTUxSZWZlcmVuY2VFcnJvcik7XG5cbiAgZnVuY3Rpb24gWUFNTFJlZmVyZW5jZUVycm9yKHNvdXJjZSwgbWVzc2FnZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZQU1MUmVmZXJlbmNlRXJyb3IpO1xuXG4gICAgcmV0dXJuIF9zdXBlcjIuY2FsbCh0aGlzLCAnWUFNTFJlZmVyZW5jZUVycm9yJywgc291cmNlLCBtZXNzYWdlKTtcbiAgfVxuXG4gIHJldHVybiBZQU1MUmVmZXJlbmNlRXJyb3I7XG59KFlBTUxFcnJvcik7XG52YXIgWUFNTFNlbWFudGljRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9ZQU1MRXJyb3IyKSB7XG4gIF9pbmhlcml0cyhZQU1MU2VtYW50aWNFcnJvciwgX1lBTUxFcnJvcjIpO1xuXG4gIHZhciBfc3VwZXIzID0gX2NyZWF0ZVN1cGVyKFlBTUxTZW1hbnRpY0Vycm9yKTtcblxuICBmdW5jdGlvbiBZQU1MU2VtYW50aWNFcnJvcihzb3VyY2UsIG1lc3NhZ2UpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgWUFNTFNlbWFudGljRXJyb3IpO1xuXG4gICAgcmV0dXJuIF9zdXBlcjMuY2FsbCh0aGlzLCAnWUFNTFNlbWFudGljRXJyb3InLCBzb3VyY2UsIG1lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIFlBTUxTZW1hbnRpY0Vycm9yO1xufShZQU1MRXJyb3IpO1xudmFyIFlBTUxTeW50YXhFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1lBTUxFcnJvcjMpIHtcbiAgX2luaGVyaXRzKFlBTUxTeW50YXhFcnJvciwgX1lBTUxFcnJvcjMpO1xuXG4gIHZhciBfc3VwZXI0ID0gX2NyZWF0ZVN1cGVyKFlBTUxTeW50YXhFcnJvcik7XG5cbiAgZnVuY3Rpb24gWUFNTFN5bnRheEVycm9yKHNvdXJjZSwgbWVzc2FnZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZQU1MU3ludGF4RXJyb3IpO1xuXG4gICAgcmV0dXJuIF9zdXBlcjQuY2FsbCh0aGlzLCAnWUFNTFN5bnRheEVycm9yJywgc291cmNlLCBtZXNzYWdlKTtcbiAgfVxuXG4gIHJldHVybiBZQU1MU3ludGF4RXJyb3I7XG59KFlBTUxFcnJvcik7XG52YXIgWUFNTFdhcm5pbmcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9ZQU1MRXJyb3I0KSB7XG4gIF9pbmhlcml0cyhZQU1MV2FybmluZywgX1lBTUxFcnJvcjQpO1xuXG4gIHZhciBfc3VwZXI1ID0gX2NyZWF0ZVN1cGVyKFlBTUxXYXJuaW5nKTtcblxuICBmdW5jdGlvbiBZQU1MV2FybmluZyhzb3VyY2UsIG1lc3NhZ2UpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgWUFNTFdhcm5pbmcpO1xuXG4gICAgcmV0dXJuIF9zdXBlcjUuY2FsbCh0aGlzLCAnWUFNTFdhcm5pbmcnLCBzb3VyY2UsIG1lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIFlBTUxXYXJuaW5nO1xufShZQU1MRXJyb3IpO1xuXG52YXIgUGxhaW5WYWx1ZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKFBsYWluVmFsdWUsIF9Ob2RlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFBsYWluVmFsdWUpO1xuXG4gIGZ1bmN0aW9uIFBsYWluVmFsdWUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBsYWluVmFsdWUpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBsYWluVmFsdWUsIFt7XG4gICAga2V5OiBcInBhcnNlQmxvY2tWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJsb2NrVmFsdWUoc3RhcnQpIHtcbiAgICAgIHZhciBfdGhpcyRjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICAgIGluZGVudCA9IF90aGlzJGNvbnRleHQuaW5kZW50LFxuICAgICAgICAgIGluRmxvdyA9IF90aGlzJGNvbnRleHQuaW5GbG93LFxuICAgICAgICAgIHNyYyA9IF90aGlzJGNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0O1xuICAgICAgdmFyIHZhbHVlRW5kID0gc3RhcnQ7XG5cbiAgICAgIGZvciAodmFyIGNoID0gc3JjW29mZnNldF07IGNoID09PSAnXFxuJzsgY2ggPSBzcmNbb2Zmc2V0XSkge1xuICAgICAgICBpZiAoTm9kZS5hdERvY3VtZW50Qm91bmRhcnkoc3JjLCBvZmZzZXQgKyAxKSkgYnJlYWs7XG4gICAgICAgIHZhciBlbmQgPSBOb2RlLmVuZE9mQmxvY2tJbmRlbnQoc3JjLCBpbmRlbnQsIG9mZnNldCArIDEpO1xuICAgICAgICBpZiAoZW5kID09PSBudWxsIHx8IHNyY1tlbmRdID09PSAnIycpIGJyZWFrO1xuXG4gICAgICAgIGlmIChzcmNbZW5kXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVFbmQgPSBQbGFpblZhbHVlLmVuZE9mTGluZShzcmMsIGVuZCwgaW5GbG93KTtcbiAgICAgICAgICBvZmZzZXQgPSB2YWx1ZUVuZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52YWx1ZVJhbmdlLmlzRW1wdHkoKSkgdGhpcy52YWx1ZVJhbmdlLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICB0aGlzLnZhbHVlUmFuZ2UuZW5kID0gdmFsdWVFbmQ7XG4gICAgICByZXR1cm4gdmFsdWVFbmQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHBsYWluIHZhbHVlIGZyb20gdGhlIHNvdXJjZVxuICAgICAqXG4gICAgICogQWNjZXB0ZWQgZm9ybXMgYXJlOlxuICAgICAqIGBgYFxuICAgICAqICNjb21tZW50XG4gICAgICpcbiAgICAgKiBmaXJzdCBsaW5lXG4gICAgICpcbiAgICAgKiBmaXJzdCBsaW5lICNjb21tZW50XG4gICAgICpcbiAgICAgKiBmaXJzdCBsaW5lXG4gICAgICogYmxvY2tcbiAgICAgKiBsaW5lc1xuICAgICAqXG4gICAgICogI2NvbW1lbnRcbiAgICAgKiBibG9ja1xuICAgICAqIGxpbmVzXG4gICAgICogYGBgXG4gICAgICogd2hlcmUgYmxvY2sgbGluZXMgYXJlIGVtcHR5IG9yIGhhdmUgYW4gaW5kZW50IGxldmVsIGdyZWF0ZXIgdGhhbiBgaW5kZW50YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgc2NhbGFyLCBtYXkgYmUgYFxcbmBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGNvbnRleHQsIHN0YXJ0KSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdmFyIGluRmxvdyA9IGNvbnRleHQuaW5GbG93LFxuICAgICAgICAgIHNyYyA9IGNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0O1xuICAgICAgdmFyIGNoID0gc3JjW29mZnNldF07XG5cbiAgICAgIGlmIChjaCAmJiBjaCAhPT0gJyMnICYmIGNoICE9PSAnXFxuJykge1xuICAgICAgICBvZmZzZXQgPSBQbGFpblZhbHVlLmVuZE9mTGluZShzcmMsIHN0YXJ0LCBpbkZsb3cpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZhbHVlUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgPSB0aGlzLnBhcnNlQ29tbWVudChvZmZzZXQpO1xuXG4gICAgICBpZiAoIXRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLnZhbHVlUmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICAgIG9mZnNldCA9IHRoaXMucGFyc2VCbG9ja1ZhbHVlKG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0clZhbHVlXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWVSYW5nZSB8fCAhdGhpcy5jb250ZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBfdGhpcyR2YWx1ZVJhbmdlID0gdGhpcy52YWx1ZVJhbmdlLFxuICAgICAgICAgIHN0YXJ0ID0gX3RoaXMkdmFsdWVSYW5nZS5zdGFydCxcbiAgICAgICAgICBlbmQgPSBfdGhpcyR2YWx1ZVJhbmdlLmVuZDtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmNvbnRleHQuc3JjO1xuICAgICAgdmFyIGNoID0gc3JjW2VuZCAtIDFdO1xuXG4gICAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xcdCcgfHwgY2ggPT09ICcgJykpIHtcbiAgICAgICAgY2ggPSBzcmNbLS1lbmQgLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgICB2YXIgX2NoID0gc3JjW2ldO1xuXG4gICAgICAgIGlmIChfY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgdmFyIF9Ob2RlJGZvbGROZXdsaW5lID0gTm9kZS5mb2xkTmV3bGluZShzcmMsIGksIC0xKSxcbiAgICAgICAgICAgICAgZm9sZCA9IF9Ob2RlJGZvbGROZXdsaW5lLmZvbGQsXG4gICAgICAgICAgICAgIG9mZnNldCA9IF9Ob2RlJGZvbGROZXdsaW5lLm9mZnNldDtcblxuICAgICAgICAgIHN0ciArPSBmb2xkO1xuICAgICAgICAgIGkgPSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoX2NoID09PSAnICcgfHwgX2NoID09PSAnXFx0Jykge1xuICAgICAgICAgIC8vIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgICAgICAgIHZhciB3c1N0YXJ0ID0gaTtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNyY1tpICsgMV07XG5cbiAgICAgICAgICB3aGlsZSAoaSA8IGVuZCAmJiAobmV4dCA9PT0gJyAnIHx8IG5leHQgPT09ICdcXHQnKSkge1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgbmV4dCA9IHNyY1tpICsgMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5leHQgIT09ICdcXG4nKSBzdHIgKz0gaSA+IHdzU3RhcnQgPyBzcmMuc2xpY2Uod3NTdGFydCwgaSArIDEpIDogX2NoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSBfY2g7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNoMCA9IHNyY1tzdGFydF07XG5cbiAgICAgIHN3aXRjaCAoY2gwKSB7XG4gICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG1zZyA9ICdQbGFpbiB2YWx1ZSBjYW5ub3Qgc3RhcnQgd2l0aCBhIHRhYiBjaGFyYWN0ZXInO1xuICAgICAgICAgICAgdmFyIGVycm9ycyA9IFtuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgbXNnKV07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgICAgICAgICAgc3RyOiBzdHJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICdgJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21zZyA9IFwiUGxhaW4gdmFsdWUgY2Fubm90IHN0YXJ0IHdpdGggcmVzZXJ2ZWQgY2hhcmFjdGVyIFwiLmNvbmNhdChjaDApO1xuXG4gICAgICAgICAgICB2YXIgX2Vycm9ycyA9IFtuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgX21zZyldO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3JzOiBfZXJyb3JzLFxuICAgICAgICAgICAgICBzdHI6IHN0clxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImVuZE9mTGluZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmRPZkxpbmUoc3JjLCBzdGFydCwgaW5GbG93KSB7XG4gICAgICB2YXIgY2ggPSBzcmNbc3RhcnRdO1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0O1xuXG4gICAgICB3aGlsZSAoY2ggJiYgY2ggIT09ICdcXG4nKSB7XG4gICAgICAgIGlmIChpbkZsb3cgJiYgKGNoID09PSAnWycgfHwgY2ggPT09ICddJyB8fCBjaCA9PT0gJ3snIHx8IGNoID09PSAnfScgfHwgY2ggPT09ICcsJykpIGJyZWFrO1xuICAgICAgICB2YXIgbmV4dCA9IHNyY1tvZmZzZXQgKyAxXTtcbiAgICAgICAgaWYgKGNoID09PSAnOicgJiYgKCFuZXh0IHx8IG5leHQgPT09ICdcXG4nIHx8IG5leHQgPT09ICdcXHQnIHx8IG5leHQgPT09ICcgJyB8fCBpbkZsb3cgJiYgbmV4dCA9PT0gJywnKSkgYnJlYWs7XG4gICAgICAgIGlmICgoY2ggPT09ICcgJyB8fCBjaCA9PT0gJ1xcdCcpICYmIG5leHQgPT09ICcjJykgYnJlYWs7XG4gICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICBjaCA9IG5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsYWluVmFsdWU7XG59KE5vZGUpO1xuXG5leHBvcnQgeyBDaGFyIGFzIEMsIE5vZGUgYXMgTiwgUGxhaW5WYWx1ZSBhcyBQLCBSYW5nZSBhcyBSLCBUeXBlIGFzIFQsIFlBTUxTeW50YXhFcnJvciBhcyBZLCBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciBhcyBfLCBfdHlwZW9mIGFzIGEsIF9jcmVhdGVDbGFzcyBhcyBiLCBfY2xhc3NDYWxsQ2hlY2sgYXMgYywgZGVmYXVsdFRhZ1ByZWZpeCBhcyBkLCBfZGVmaW5lUHJvcGVydHkgYXMgZSwgWUFNTFdhcm5pbmcgYXMgZiwgWUFNTFNlbWFudGljRXJyb3IgYXMgZywgX3NsaWNlZFRvQXJyYXkgYXMgaCwgWUFNTEVycm9yIGFzIGksIF9pbmhlcml0cyBhcyBqLCBfY3JlYXRlU3VwZXIgYXMgaywgX2dldCBhcyBsLCBfZ2V0UHJvdG90eXBlT2YgYXMgbSwgZGVmYXVsdFRhZ3MgYXMgbiwgWUFNTFJlZmVyZW5jZUVycm9yIGFzIG8sIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgcCwgX3RvQXJyYXkgYXMgcSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgciB9O1xuIiwiaW1wb3J0IHsgaiBhcyBfaW5oZXJpdHMsIGsgYXMgX2NyZWF0ZVN1cGVyLCBjIGFzIF9jbGFzc0NhbGxDaGVjaywgVCBhcyBUeXBlLCBiIGFzIF9jcmVhdGVDbGFzcywgUiBhcyBSYW5nZSwgTiBhcyBOb2RlLCBnIGFzIFlBTUxTZW1hbnRpY0Vycm9yLCBsIGFzIF9nZXQsIG0gYXMgX2dldFByb3RvdHlwZU9mLCBZIGFzIFlBTUxTeW50YXhFcnJvciwgQyBhcyBDaGFyLCBlIGFzIF9kZWZpbmVQcm9wZXJ0eSwgUCBhcyBQbGFpblZhbHVlIH0gZnJvbSAnLi9QbGFpblZhbHVlLWZmNTE0N2M2LmpzJztcblxudmFyIEJsYW5rTGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKEJsYW5rTGluZSwgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQmxhbmtMaW5lKTtcblxuICBmdW5jdGlvbiBCbGFua0xpbmUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJsYW5rTGluZSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgVHlwZS5CTEFOS19MSU5FKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKEJsYW5rTGluZSwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGJsYW5rIGxpbmUgZnJvbSB0aGUgc291cmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhcnNlQ29udGV4dH0gY29udGV4dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIEluZGV4IG9mIGZpcnN0IFxcbiBjaGFyYWN0ZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhpc1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgMSk7XG4gICAgICByZXR1cm4gc3RhcnQgKyAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbmNsdWRlc1RyYWlsaW5nTGluZXNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgbmV2ZXIgY2FsbGVkIGZyb20gYW55d2hlcmUsIGJ1dCBpZiBpdCB3ZXJlLFxuICAgICAgLy8gdGhpcyBpcyB0aGUgdmFsdWUgaXQgc2hvdWxkIHJldHVybi5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBCbGFua0xpbmU7XG59KE5vZGUpO1xuXG52YXIgQ29sbGVjdGlvbkl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhDb2xsZWN0aW9uSXRlbSwgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29sbGVjdGlvbkl0ZW0pO1xuXG4gIGZ1bmN0aW9uIENvbGxlY3Rpb25JdGVtKHR5cGUsIHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxlY3Rpb25JdGVtKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSwgcHJvcHMpO1xuICAgIF90aGlzLm5vZGUgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb2xsZWN0aW9uSXRlbSwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXNcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoY29udGV4dCwgc3RhcnQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB2YXIgcGFyc2VOb2RlID0gY29udGV4dC5wYXJzZU5vZGUsXG4gICAgICAgICAgc3JjID0gY29udGV4dC5zcmM7XG4gICAgICB2YXIgYXRMaW5lU3RhcnQgPSBjb250ZXh0LmF0TGluZVN0YXJ0LFxuICAgICAgICAgIGxpbmVTdGFydCA9IGNvbnRleHQubGluZVN0YXJ0O1xuICAgICAgaWYgKCFhdExpbmVTdGFydCAmJiB0aGlzLnR5cGUgPT09IFR5cGUuU0VRX0lURU0pIHRoaXMuZXJyb3IgPSBuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgJ1NlcXVlbmNlIGl0ZW1zIG11c3Qgbm90IGhhdmUgcHJlY2VkaW5nIGNvbnRlbnQgb24gdGhlIHNhbWUgbGluZScpO1xuICAgICAgdmFyIGluZGVudCA9IGF0TGluZVN0YXJ0ID8gc3RhcnQgLSBsaW5lU3RhcnQgOiBjb250ZXh0LmluZGVudDtcbiAgICAgIHZhciBvZmZzZXQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIHN0YXJ0ICsgMSk7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcbiAgICAgIHZhciBpbmxpbmVDb21tZW50ID0gY2ggPT09ICcjJztcbiAgICAgIHZhciBjb21tZW50cyA9IFtdO1xuICAgICAgdmFyIGJsYW5rTGluZSA9IG51bGw7XG5cbiAgICAgIHdoaWxlIChjaCA9PT0gJ1xcbicgfHwgY2ggPT09ICcjJykge1xuICAgICAgICBpZiAoY2ggPT09ICcjJykge1xuICAgICAgICAgIHZhciBfZW5kID0gTm9kZS5lbmRPZkxpbmUoc3JjLCBvZmZzZXQgKyAxKTtcblxuICAgICAgICAgIGNvbW1lbnRzLnB1c2gobmV3IFJhbmdlKG9mZnNldCwgX2VuZCkpO1xuICAgICAgICAgIG9mZnNldCA9IF9lbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXRMaW5lU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIGxpbmVTdGFydCA9IG9mZnNldCArIDE7XG4gICAgICAgICAgdmFyIHdzRW5kID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBsaW5lU3RhcnQpO1xuXG4gICAgICAgICAgaWYgKHNyY1t3c0VuZF0gPT09ICdcXG4nICYmIGNvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYmxhbmtMaW5lID0gbmV3IEJsYW5rTGluZSgpO1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gYmxhbmtMaW5lLnBhcnNlKHtcbiAgICAgICAgICAgICAgc3JjOiBzcmNcbiAgICAgICAgICAgIH0sIGxpbmVTdGFydCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0ID0gTm9kZS5lbmRPZkluZGVudChzcmMsIGxpbmVTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IHNyY1tvZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoTm9kZS5uZXh0Tm9kZUlzSW5kZW50ZWQoY2gsIG9mZnNldCAtIChsaW5lU3RhcnQgKyBpbmRlbnQpLCB0aGlzLnR5cGUgIT09IFR5cGUuU0VRX0lURU0pKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHBhcnNlTm9kZSh7XG4gICAgICAgICAgYXRMaW5lU3RhcnQ6IGF0TGluZVN0YXJ0LFxuICAgICAgICAgIGluQ29sbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgaW5kZW50OiBpbmRlbnQsXG4gICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgcGFyZW50OiB0aGlzXG4gICAgICAgIH0sIG9mZnNldCk7XG4gICAgICB9IGVsc2UgaWYgKGNoICYmIGxpbmVTdGFydCA+IHN0YXJ0ICsgMSkge1xuICAgICAgICBvZmZzZXQgPSBsaW5lU3RhcnQgLSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5ub2RlKSB7XG4gICAgICAgIGlmIChibGFua0xpbmUpIHtcbiAgICAgICAgICAvLyBPbmx5IGJsYW5rIGxpbmVzIHByZWNlZGluZyBub24tZW1wdHkgbm9kZXMgYXJlIGNhcHR1cmVkLiBOb3RlIHRoYXRcbiAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgY29sbGVjdGlvbiBpdGVtIHJhbmdlIHN0YXJ0IGluZGljZXMgZG8gbm90IGFsd2F5c1xuICAgICAgICAgIC8vIGluY3JlYXNlIG1vbm90b25pY2FsbHkuIC0tIGVlbWVsaS95YW1sIzEyNlxuICAgICAgICAgIHZhciBpdGVtcyA9IGNvbnRleHQucGFyZW50Lml0ZW1zIHx8IGNvbnRleHQucGFyZW50LmNvbnRlbnRzO1xuICAgICAgICAgIGlmIChpdGVtcykgaXRlbXMucHVzaChibGFua0xpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1lbnRzLmxlbmd0aCkgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wcm9wcywgY29tbWVudHMpO1xuICAgICAgICBvZmZzZXQgPSB0aGlzLm5vZGUucmFuZ2UuZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlubGluZUNvbW1lbnQpIHtcbiAgICAgICAgICB2YXIgYyA9IGNvbW1lbnRzWzBdO1xuICAgICAgICAgIHRoaXMucHJvcHMucHVzaChjKTtcbiAgICAgICAgICBvZmZzZXQgPSBjLmVuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgPSBOb2RlLmVuZE9mTGluZShzcmMsIHN0YXJ0ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGVuZCA9IHRoaXMubm9kZSA/IHRoaXMubm9kZS52YWx1ZVJhbmdlLmVuZCA6IG9mZnNldDtcbiAgICAgIHRoaXMudmFsdWVSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKTtcbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldE9yaWdSYW5nZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0T3JpZ1Jhbmdlcyhjciwgb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihDb2xsZWN0aW9uSXRlbS5wcm90b3R5cGUpLCBcInNldE9yaWdSYW5nZXNcIiwgdGhpcykuY2FsbCh0aGlzLCBjciwgb2Zmc2V0KTtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUgPyB0aGlzLm5vZGUuc2V0T3JpZ1Jhbmdlcyhjciwgb2Zmc2V0KSA6IG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYyxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIHJhbmdlID0gdGhpcy5yYW5nZSxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICAgICAgdmFyIHN0ciA9IG5vZGUgPyBzcmMuc2xpY2UocmFuZ2Uuc3RhcnQsIG5vZGUucmFuZ2Uuc3RhcnQpICsgU3RyaW5nKG5vZGUpIDogc3JjLnNsaWNlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgcmV0dXJuIE5vZGUuYWRkU3RyaW5nVGVybWluYXRvcihzcmMsIHJhbmdlLmVuZCwgc3RyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5jbHVkZXNUcmFpbGluZ0xpbmVzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLmluY2x1ZGVzVHJhaWxpbmdMaW5lcztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGVjdGlvbkl0ZW07XG59KE5vZGUpO1xuXG52YXIgQ29tbWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKENvbW1lbnQsIF9Ob2RlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENvbW1lbnQpO1xuXG4gIGZ1bmN0aW9uIENvbW1lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbW1lbnQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIFR5cGUuQ09NTUVOVCk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbW1lbnQgbGluZSBmcm9tIHRoZSBzb3VyY2VcbiAgICpcbiAgICogQHBhcmFtIHtQYXJzZUNvbnRleHR9IGNvbnRleHRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gSW5kZXggb2YgdGhlIGNoYXJhY3RlciBhZnRlciB0aGlzIHNjYWxhclxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb21tZW50LCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnBhcnNlQ29tbWVudChzdGFydCk7XG4gICAgICB0aGlzLnJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBvZmZzZXQpO1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29tbWVudDtcbn0oTm9kZSk7XG5cbmZ1bmN0aW9uIGdyYWJDb2xsZWN0aW9uRW5kQ29tbWVudHMobm9kZSkge1xuICB2YXIgY25vZGUgPSBub2RlO1xuXG4gIHdoaWxlIChjbm9kZSBpbnN0YW5jZW9mIENvbGxlY3Rpb25JdGVtKSB7XG4gICAgY25vZGUgPSBjbm9kZS5ub2RlO1xuICB9XG5cbiAgaWYgKCEoY25vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSkgcmV0dXJuIG51bGw7XG4gIHZhciBsZW4gPSBjbm9kZS5pdGVtcy5sZW5ndGg7XG4gIHZhciBjaSA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgIHZhciBuID0gY25vZGUuaXRlbXNbaV07XG5cbiAgICBpZiAobi50eXBlID09PSBUeXBlLkNPTU1FTlQpIHtcbiAgICAgIC8vIEtlZXAgc3VmZmljaWVudGx5IGluZGVudGVkIGNvbW1lbnRzIHdpdGggcHJlY2VkaW5nIG5vZGVcbiAgICAgIHZhciBfbiRjb250ZXh0ID0gbi5jb250ZXh0LFxuICAgICAgICAgIGluZGVudCA9IF9uJGNvbnRleHQuaW5kZW50LFxuICAgICAgICAgIGxpbmVTdGFydCA9IF9uJGNvbnRleHQubGluZVN0YXJ0O1xuICAgICAgaWYgKGluZGVudCA+IDAgJiYgbi5yYW5nZS5zdGFydCA+PSBsaW5lU3RhcnQgKyBpbmRlbnQpIGJyZWFrO1xuICAgICAgY2kgPSBpO1xuICAgIH0gZWxzZSBpZiAobi50eXBlID09PSBUeXBlLkJMQU5LX0xJTkUpIGNpID0gaTtlbHNlIGJyZWFrO1xuICB9XG5cbiAgaWYgKGNpID09PSAtMSkgcmV0dXJuIG51bGw7XG4gIHZhciBjYSA9IGNub2RlLml0ZW1zLnNwbGljZShjaSwgbGVuIC0gY2kpO1xuICB2YXIgcHJldkVuZCA9IGNhWzBdLnJhbmdlLnN0YXJ0O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY25vZGUucmFuZ2UuZW5kID0gcHJldkVuZDtcbiAgICBpZiAoY25vZGUudmFsdWVSYW5nZSAmJiBjbm9kZS52YWx1ZVJhbmdlLmVuZCA+IHByZXZFbmQpIGNub2RlLnZhbHVlUmFuZ2UuZW5kID0gcHJldkVuZDtcbiAgICBpZiAoY25vZGUgPT09IG5vZGUpIGJyZWFrO1xuICAgIGNub2RlID0gY25vZGUuY29udGV4dC5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gY2E7XG59XG52YXIgQ29sbGVjdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKENvbGxlY3Rpb24sIF9Ob2RlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENvbGxlY3Rpb24pO1xuXG4gIF9jcmVhdGVDbGFzcyhDb2xsZWN0aW9uLCBudWxsLCBbe1xuICAgIGtleTogXCJuZXh0Q29udGVudEhhc0luZGVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0Q29udGVudEhhc0luZGVudChzcmMsIG9mZnNldCwgaW5kZW50KSB7XG4gICAgICB2YXIgbGluZVN0YXJ0ID0gTm9kZS5lbmRPZkxpbmUoc3JjLCBvZmZzZXQpICsgMTtcbiAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgbGluZVN0YXJ0KTtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuICAgICAgaWYgKCFjaCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKG9mZnNldCA+PSBsaW5lU3RhcnQgKyBpbmRlbnQpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGNoICE9PSAnIycgJiYgY2ggIT09ICdcXG4nKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gQ29sbGVjdGlvbi5uZXh0Q29udGVudEhhc0luZGVudChzcmMsIG9mZnNldCwgaW5kZW50KTtcbiAgICB9XG4gIH1dKTtcblxuICBmdW5jdGlvbiBDb2xsZWN0aW9uKGZpcnN0SXRlbSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xsZWN0aW9uKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZmlyc3RJdGVtLnR5cGUgPT09IFR5cGUuU0VRX0lURU0gPyBUeXBlLlNFUSA6IFR5cGUuTUFQKTtcblxuICAgIGZvciAodmFyIGkgPSBmaXJzdEl0ZW0ucHJvcHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIGlmIChmaXJzdEl0ZW0ucHJvcHNbaV0uc3RhcnQgPCBmaXJzdEl0ZW0uY29udGV4dC5saW5lU3RhcnQpIHtcbiAgICAgICAgLy8gcHJvcHMgb24gcHJldmlvdXMgbGluZSBhcmUgYXNzdW1lZCBieSB0aGUgY29sbGVjdGlvblxuICAgICAgICBfdGhpcy5wcm9wcyA9IGZpcnN0SXRlbS5wcm9wcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICAgIGZpcnN0SXRlbS5wcm9wcyA9IGZpcnN0SXRlbS5wcm9wcy5zbGljZShpICsgMSk7XG4gICAgICAgIHZhciBpdGVtUmFuZ2UgPSBmaXJzdEl0ZW0ucHJvcHNbMF0gfHwgZmlyc3RJdGVtLnZhbHVlUmFuZ2U7XG4gICAgICAgIGZpcnN0SXRlbS5yYW5nZS5zdGFydCA9IGl0ZW1SYW5nZS5zdGFydDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuaXRlbXMgPSBbZmlyc3RJdGVtXTtcbiAgICB2YXIgZWMgPSBncmFiQ29sbGVjdGlvbkVuZENvbW1lbnRzKGZpcnN0SXRlbSk7XG4gICAgaWYgKGVjKSBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShfdGhpcy5pdGVtcywgZWMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb2xsZWN0aW9uLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtQYXJzZUNvbnRleHR9IGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhpc1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHZhciBwYXJzZU5vZGUgPSBjb250ZXh0LnBhcnNlTm9kZSxcbiAgICAgICAgICBzcmMgPSBjb250ZXh0LnNyYzsgLy8gSXQncyBlYXNpZXIgdG8gcmVjYWxjdWxhdGUgbGluZVN0YXJ0IGhlcmUgcmF0aGVyIHRoYW4gdHJhY2tpbmcgZG93biB0aGVcbiAgICAgIC8vIGxhc3QgY29udGV4dCBmcm9tIHdoaWNoIHRvIHJlYWQgaXQgLS0gZWVtZWxpL3lhbWwjMlxuXG4gICAgICB2YXIgbGluZVN0YXJ0ID0gTm9kZS5zdGFydE9mTGluZShzcmMsIHN0YXJ0KTtcbiAgICAgIHZhciBmaXJzdEl0ZW0gPSB0aGlzLml0ZW1zWzBdOyAvLyBGaXJzdC1pdGVtIGNvbnRleHQgbmVlZHMgdG8gYmUgY29ycmVjdCBmb3IgbGF0ZXIgY29tbWVudCBoYW5kbGluZ1xuICAgICAgLy8gLS0gZWVtZWxpL3lhbWwjMTdcblxuICAgICAgZmlyc3RJdGVtLmNvbnRleHQucGFyZW50ID0gdGhpcztcbiAgICAgIHRoaXMudmFsdWVSYW5nZSA9IFJhbmdlLmNvcHkoZmlyc3RJdGVtLnZhbHVlUmFuZ2UpO1xuICAgICAgdmFyIGluZGVudCA9IGZpcnN0SXRlbS5yYW5nZS5zdGFydCAtIGZpcnN0SXRlbS5jb250ZXh0LmxpbmVTdGFydDtcbiAgICAgIHZhciBvZmZzZXQgPSBzdGFydDtcbiAgICAgIG9mZnNldCA9IE5vZGUubm9ybWFsaXplT2Zmc2V0KHNyYywgb2Zmc2V0KTtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuICAgICAgdmFyIGF0TGluZVN0YXJ0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBsaW5lU3RhcnQpID09PSBvZmZzZXQ7XG4gICAgICB2YXIgcHJldkluY2x1ZGVzVHJhaWxpbmdMaW5lcyA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgd2hpbGUgKGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGF0TGluZVN0YXJ0ICYmIGNoID09PSAnXFxuJyAmJiAhcHJldkluY2x1ZGVzVHJhaWxpbmdMaW5lcykge1xuICAgICAgICAgICAgdmFyIGJsYW5rTGluZSA9IG5ldyBCbGFua0xpbmUoKTtcbiAgICAgICAgICAgIG9mZnNldCA9IGJsYW5rTGluZS5wYXJzZSh7XG4gICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICB9LCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZVJhbmdlLmVuZCA9IG9mZnNldDtcblxuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBzcmMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChibGFua0xpbmUpO1xuICAgICAgICAgICAgb2Zmc2V0IC09IDE7IC8vIGJsYW5rTGluZS5wYXJzZSgpIGNvbnN1bWVzIHRlcm1pbmFsIG5ld2xpbmVcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnIycpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCBsaW5lU3RhcnQgKyBpbmRlbnQgJiYgIUNvbGxlY3Rpb24ubmV4dENvbnRlbnRIYXNJbmRlbnQoc3JjLCBvZmZzZXQsIGluZGVudCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQ29tbWVudCgpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gY29tbWVudC5wYXJzZSh7XG4gICAgICAgICAgICAgIGluZGVudDogaW5kZW50LFxuICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgc3JjOiBzcmNcbiAgICAgICAgICAgIH0sIG9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlUmFuZ2UuZW5kID0gb2Zmc2V0O1xuXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID49IHNyYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY2ggPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lU3RhcnQgPSBvZmZzZXQgKyAxO1xuICAgICAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZJbmRlbnQoc3JjLCBsaW5lU3RhcnQpO1xuXG4gICAgICAgICAgaWYgKE5vZGUuYXRCbGFuayhzcmMsIG9mZnNldCkpIHtcbiAgICAgICAgICAgIHZhciB3c0VuZCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gc3JjW3dzRW5kXTtcblxuICAgICAgICAgICAgaWYgKCFuZXh0IHx8IG5leHQgPT09ICdcXG4nIHx8IG5leHQgPT09ICcjJykge1xuICAgICAgICAgICAgICBvZmZzZXQgPSB3c0VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaCA9IHNyY1tvZmZzZXRdO1xuICAgICAgICAgIGF0TGluZVN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2gpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvZmZzZXQgIT09IGxpbmVTdGFydCArIGluZGVudCAmJiAoYXRMaW5lU3RhcnQgfHwgY2ggIT09ICc6JykpIHtcbiAgICAgICAgICBpZiAob2Zmc2V0IDwgbGluZVN0YXJ0ICsgaW5kZW50KSB7XG4gICAgICAgICAgICBpZiAobGluZVN0YXJ0ID4gc3RhcnQpIG9mZnNldCA9IGxpbmVTdGFydDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBtc2cgPSAnQWxsIGNvbGxlY3Rpb24gaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW4nO1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBZQU1MU3ludGF4RXJyb3IodGhpcywgbXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlyc3RJdGVtLnR5cGUgPT09IFR5cGUuU0VRX0lURU0pIHtcbiAgICAgICAgICBpZiAoY2ggIT09ICctJykge1xuICAgICAgICAgICAgaWYgKGxpbmVTdGFydCA+IHN0YXJ0KSBvZmZzZXQgPSBsaW5lU3RhcnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICctJyAmJiAhdGhpcy5lcnJvcikge1xuICAgICAgICAgIC8vIG1hcCBrZXkgbWF5IHN0YXJ0IHdpdGggLSwgYXMgbG9uZyBhcyBpdCdzIGZvbGxvd2VkIGJ5IGEgbm9uLXdoaXRlc3BhY2UgY2hhclxuICAgICAgICAgIHZhciBfbmV4dCA9IHNyY1tvZmZzZXQgKyAxXTtcblxuICAgICAgICAgIGlmICghX25leHQgfHwgX25leHQgPT09ICdcXG4nIHx8IF9uZXh0ID09PSAnXFx0JyB8fCBfbmV4dCA9PT0gJyAnKSB7XG4gICAgICAgICAgICB2YXIgX21zZyA9ICdBIGNvbGxlY3Rpb24gY2Fubm90IGJlIGJvdGggYSBtYXBwaW5nIGFuZCBhIHNlcXVlbmNlJztcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgWUFNTFN5bnRheEVycm9yKHRoaXMsIF9tc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlID0gcGFyc2VOb2RlKHtcbiAgICAgICAgICBhdExpbmVTdGFydDogYXRMaW5lU3RhcnQsXG4gICAgICAgICAgaW5Db2xsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIGluZGVudDogaW5kZW50LFxuICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgIHBhcmVudDogdGhpc1xuICAgICAgICB9LCBvZmZzZXQpO1xuICAgICAgICBpZiAoIW5vZGUpIHJldHVybiBvZmZzZXQ7IC8vIGF0IG5leHQgZG9jdW1lbnQgc3RhcnRcblxuICAgICAgICB0aGlzLml0ZW1zLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMudmFsdWVSYW5nZS5lbmQgPSBub2RlLnZhbHVlUmFuZ2UuZW5kO1xuICAgICAgICBvZmZzZXQgPSBOb2RlLm5vcm1hbGl6ZU9mZnNldChzcmMsIG5vZGUucmFuZ2UuZW5kKTtcbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0XTtcbiAgICAgICAgYXRMaW5lU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgcHJldkluY2x1ZGVzVHJhaWxpbmdMaW5lcyA9IG5vZGUuaW5jbHVkZXNUcmFpbGluZ0xpbmVzOyAvLyBOZWVkIHRvIHJlc2V0IGxpbmVTdGFydCBhbmQgYXRMaW5lU3RhcnQgaGVyZSBpZiBwcmVjZWRpbmcgbm9kZSdzIHJhbmdlXG4gICAgICAgIC8vIGhhcyBhZHZhbmNlZCB0byBjaGVjayB0aGUgY3VycmVudCBsaW5lJ3MgaW5kZW50YXRpb24gbGV2ZWxcbiAgICAgICAgLy8gLS0gZWVtZWxpL3lhbWwjMTAgJiBlZW1lbGkveWFtbCMzOFxuXG4gICAgICAgIGlmIChjaCkge1xuICAgICAgICAgIHZhciBscyA9IG9mZnNldCAtIDE7XG4gICAgICAgICAgdmFyIHByZXYgPSBzcmNbbHNdO1xuXG4gICAgICAgICAgd2hpbGUgKHByZXYgPT09ICcgJyB8fCBwcmV2ID09PSAnXFx0Jykge1xuICAgICAgICAgICAgcHJldiA9IHNyY1stLWxzXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJldiA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGxzICsgMTtcbiAgICAgICAgICAgIGF0TGluZVN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWMgPSBncmFiQ29sbGVjdGlvbkVuZENvbW1lbnRzKG5vZGUpO1xuICAgICAgICBpZiAoZWMpIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuaXRlbXMsIGVjKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3JpZ1Jhbmdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IF9nZXQoX2dldFByb3RvdHlwZU9mKENvbGxlY3Rpb24ucHJvdG90eXBlKSwgXCJzZXRPcmlnUmFuZ2VzXCIsIHRoaXMpLmNhbGwodGhpcywgY3IsIG9mZnNldCk7XG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgb2Zmc2V0ID0gbm9kZS5zZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmNvbnRleHQuc3JjLFxuICAgICAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcyxcbiAgICAgICAgICByYW5nZSA9IHRoaXMucmFuZ2UsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgIHZhciBzdHIgPSBzcmMuc2xpY2UocmFuZ2Uuc3RhcnQsIGl0ZW1zWzBdLnJhbmdlLnN0YXJ0KSArIFN0cmluZyhpdGVtc1swXSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgdmFyIF9pdGVtJGNvbnRleHQgPSBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICBhdExpbmVTdGFydCA9IF9pdGVtJGNvbnRleHQuYXRMaW5lU3RhcnQsXG4gICAgICAgICAgICBpbmRlbnQgPSBfaXRlbSRjb250ZXh0LmluZGVudDtcbiAgICAgICAgaWYgKGF0TGluZVN0YXJ0KSBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW5kZW50OyArK19pKSB7XG4gICAgICAgICAgc3RyICs9ICcgJztcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gU3RyaW5nKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTm9kZS5hZGRTdHJpbmdUZXJtaW5hdG9yKHNyYywgcmFuZ2UuZW5kLCBzdHIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbmNsdWRlc1RyYWlsaW5nTGluZXNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbGxlY3Rpb247XG59KE5vZGUpO1xuXG52YXIgRGlyZWN0aXZlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTm9kZSkge1xuICBfaW5oZXJpdHMoRGlyZWN0aXZlLCBfTm9kZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihEaXJlY3RpdmUpO1xuXG4gIGZ1bmN0aW9uIERpcmVjdGl2ZSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlyZWN0aXZlKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgVHlwZS5ESVJFQ1RJVkUpO1xuICAgIF90aGlzLm5hbWUgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEaXJlY3RpdmUsIFt7XG4gICAga2V5OiBcInBhcnNlTmFtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZU5hbWUoc3RhcnQpIHtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0O1xuICAgICAgdmFyIGNoID0gc3JjW29mZnNldF07XG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCAhPT0gJ1xcbicgJiYgY2ggIT09ICdcXHQnICYmIGNoICE9PSAnICcpIHtcbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0ICs9IDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5hbWUgPSBzcmMuc2xpY2Uoc3RhcnQsIG9mZnNldCk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVBhcmFtZXRlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzKHN0YXJ0KSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYztcbiAgICAgIHZhciBvZmZzZXQgPSBzdGFydDtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuXG4gICAgICB3aGlsZSAoY2ggJiYgY2ggIT09ICdcXG4nICYmIGNoICE9PSAnIycpIHtcbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0ICs9IDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZhbHVlUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIG9mZnNldCk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnBhcnNlTmFtZShzdGFydCArIDEpO1xuICAgICAgb2Zmc2V0ID0gdGhpcy5wYXJzZVBhcmFtZXRlcnMob2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IHRoaXMucGFyc2VDb21tZW50KG9mZnNldCk7XG4gICAgICB0aGlzLnJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBvZmZzZXQpO1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFyYW1ldGVyc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHJhdyA9IHRoaXMucmF3VmFsdWU7XG4gICAgICByZXR1cm4gcmF3ID8gcmF3LnRyaW0oKS5zcGxpdCgvWyBcXHRdKy8pIDogW107XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERpcmVjdGl2ZTtcbn0oTm9kZSk7XG5cbnZhciBEb2N1bWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKERvY3VtZW50LCBfTm9kZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihEb2N1bWVudCk7XG5cbiAgX2NyZWF0ZUNsYXNzKERvY3VtZW50LCBudWxsLCBbe1xuICAgIGtleTogXCJzdGFydENvbW1lbnRPckVuZEJsYW5rTGluZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydENvbW1lbnRPckVuZEJsYW5rTGluZShzcmMsIHN0YXJ0KSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBzdGFydCk7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcbiAgICAgIHJldHVybiBjaCA9PT0gJyMnIHx8IGNoID09PSAnXFxuJyA/IG9mZnNldCA6IHN0YXJ0O1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIERvY3VtZW50KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEb2N1bWVudCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFR5cGUuRE9DVU1FTlQpO1xuICAgIF90aGlzLmRpcmVjdGl2ZXMgPSBudWxsO1xuICAgIF90aGlzLmNvbnRlbnRzID0gbnVsbDtcbiAgICBfdGhpcy5kaXJlY3RpdmVzRW5kTWFya2VyID0gbnVsbDtcbiAgICBfdGhpcy5kb2N1bWVudEVuZE1hcmtlciA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERvY3VtZW50LCBbe1xuICAgIGtleTogXCJwYXJzZURpcmVjdGl2ZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VEaXJlY3RpdmVzKHN0YXJ0KSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYztcbiAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IFtdO1xuICAgICAgdmFyIGF0TGluZVN0YXJ0ID0gdHJ1ZTtcbiAgICAgIHZhciBoYXNEaXJlY3RpdmVzID0gZmFsc2U7XG4gICAgICB2YXIgb2Zmc2V0ID0gc3RhcnQ7XG5cbiAgICAgIHdoaWxlICghTm9kZS5hdERvY3VtZW50Qm91bmRhcnkoc3JjLCBvZmZzZXQsIENoYXIuRElSRUNUSVZFU19FTkQpKSB7XG4gICAgICAgIG9mZnNldCA9IERvY3VtZW50LnN0YXJ0Q29tbWVudE9yRW5kQmxhbmtMaW5lKHNyYywgb2Zmc2V0KTtcblxuICAgICAgICBzd2l0Y2ggKHNyY1tvZmZzZXRdKSB7XG4gICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgIGlmIChhdExpbmVTdGFydCkge1xuICAgICAgICAgICAgICB2YXIgYmxhbmtMaW5lID0gbmV3IEJsYW5rTGluZSgpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBibGFua0xpbmUucGFyc2Uoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICAgIH0sIG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IHNyYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMucHVzaChibGFua0xpbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgYXRMaW5lU3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IG5ldyBDb21tZW50KCk7XG4gICAgICAgICAgICAgIG9mZnNldCA9IGNvbW1lbnQucGFyc2Uoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICAgIH0sIG9mZnNldCk7XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICBhdExpbmVTdGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IG5ldyBEaXJlY3RpdmUoKTtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gZGlyZWN0aXZlLnBhcnNlKHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcbiAgICAgICAgICAgICAgfSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZlKTtcbiAgICAgICAgICAgICAgaGFzRGlyZWN0aXZlcyA9IHRydWU7XG4gICAgICAgICAgICAgIGF0TGluZVN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoaGFzRGlyZWN0aXZlcykge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IFlBTUxTZW1hbnRpY0Vycm9yKHRoaXMsICdNaXNzaW5nIGRpcmVjdGl2ZXMtZW5kIGluZGljYXRvciBsaW5lJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSB0aGlzLmRpcmVjdGl2ZXM7XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmNbb2Zmc2V0XSkge1xuICAgICAgICB0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIgPSBuZXcgUmFuZ2Uob2Zmc2V0LCBvZmZzZXQgKyAzKTtcbiAgICAgICAgcmV0dXJuIG9mZnNldCArIDM7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgJ01pc3NpbmcgZGlyZWN0aXZlcy1lbmQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb250ZW50cyA9IHRoaXMuZGlyZWN0aXZlcztcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhcnNlQ29udGVudHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VDb250ZW50cyhzdGFydCkge1xuICAgICAgdmFyIF90aGlzJGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgcGFyc2VOb2RlID0gX3RoaXMkY29udGV4dC5wYXJzZU5vZGUsXG4gICAgICAgICAgc3JjID0gX3RoaXMkY29udGV4dC5zcmM7XG4gICAgICBpZiAoIXRoaXMuY29udGVudHMpIHRoaXMuY29udGVudHMgPSBbXTtcbiAgICAgIHZhciBsaW5lU3RhcnQgPSBzdGFydDtcblxuICAgICAgd2hpbGUgKHNyY1tsaW5lU3RhcnQgLSAxXSA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVTdGFydCAtPSAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBzdGFydCk7XG4gICAgICB2YXIgYXRMaW5lU3RhcnQgPSBsaW5lU3RhcnQgPT09IHN0YXJ0O1xuICAgICAgdGhpcy52YWx1ZVJhbmdlID0gbmV3IFJhbmdlKG9mZnNldCk7XG5cbiAgICAgIHdoaWxlICghTm9kZS5hdERvY3VtZW50Qm91bmRhcnkoc3JjLCBvZmZzZXQsIENoYXIuRE9DVU1FTlRfRU5EKSkge1xuICAgICAgICBzd2l0Y2ggKHNyY1tvZmZzZXRdKSB7XG4gICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgIGlmIChhdExpbmVTdGFydCkge1xuICAgICAgICAgICAgICB2YXIgYmxhbmtMaW5lID0gbmV3IEJsYW5rTGluZSgpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBibGFua0xpbmUucGFyc2Uoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICAgIH0sIG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IHNyYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRzLnB1c2goYmxhbmtMaW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgIGF0TGluZVN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGluZVN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQ29tbWVudCgpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBjb21tZW50LnBhcnNlKHtcbiAgICAgICAgICAgICAgICBzcmM6IHNyY1xuICAgICAgICAgICAgICB9LCBvZmZzZXQpO1xuICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgIGF0TGluZVN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBpRW5kID0gTm9kZS5lbmRPZkluZGVudChzcmMsIG9mZnNldCk7XG4gICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGF0TGluZVN0YXJ0OiBhdExpbmVTdGFydCxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IC0xLFxuICAgICAgICAgICAgICAgIGluRmxvdzogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5Db2xsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdmFyIG5vZGUgPSBwYXJzZU5vZGUoY29udGV4dCwgaUVuZCk7XG4gICAgICAgICAgICAgIGlmICghbm9kZSkgcmV0dXJuIHRoaXMudmFsdWVSYW5nZS5lbmQgPSBpRW5kOyAvLyBhdCBuZXh0IGRvY3VtZW50IHN0YXJ0XG5cbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBub2RlLnJhbmdlLmVuZDtcbiAgICAgICAgICAgICAgYXRMaW5lU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFyIGVjID0gZ3JhYkNvbGxlY3Rpb25FbmRDb21tZW50cyhub2RlKTtcbiAgICAgICAgICAgICAgaWYgKGVjKSBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmNvbnRlbnRzLCBlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgPSBEb2N1bWVudC5zdGFydENvbW1lbnRPckVuZEJsYW5rTGluZShzcmMsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudmFsdWVSYW5nZS5lbmQgPSBvZmZzZXQ7XG5cbiAgICAgIGlmIChzcmNbb2Zmc2V0XSkge1xuICAgICAgICB0aGlzLmRvY3VtZW50RW5kTWFya2VyID0gbmV3IFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgMyk7XG4gICAgICAgIG9mZnNldCArPSAzO1xuXG4gICAgICAgIGlmIChzcmNbb2Zmc2V0XSkge1xuICAgICAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcblxuICAgICAgICAgIGlmIChzcmNbb2Zmc2V0XSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB2YXIgX2NvbW1lbnQgPSBuZXcgQ29tbWVudCgpO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSBfY29tbWVudC5wYXJzZSh7XG4gICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICB9LCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5wdXNoKF9jb21tZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKHNyY1tvZmZzZXRdKSB7XG4gICAgICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBZQU1MU3ludGF4RXJyb3IodGhpcywgJ0RvY3VtZW50IGVuZCBtYXJrZXIgbGluZSBjYW5ub3QgaGF2ZSBhIG5vbi1jb21tZW50IHN1ZmZpeCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1BhcnNlQ29udGV4dH0gY29udGV4dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gSW5kZXggb2YgdGhlIGNoYXJhY3RlciBhZnRlciB0aGlzXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgY29udGV4dC5yb290ID0gdGhpcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB2YXIgc3JjID0gY29udGV4dC5zcmM7XG4gICAgICB2YXIgb2Zmc2V0ID0gc3JjLmNoYXJDb2RlQXQoc3RhcnQpID09PSAweGZlZmYgPyBzdGFydCArIDEgOiBzdGFydDsgLy8gc2tpcCBCT01cblxuICAgICAgb2Zmc2V0ID0gdGhpcy5wYXJzZURpcmVjdGl2ZXMob2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IHRoaXMucGFyc2VDb250ZW50cyhvZmZzZXQpO1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3JpZ1Jhbmdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IF9nZXQoX2dldFByb3RvdHlwZU9mKERvY3VtZW50LnByb3RvdHlwZSksIFwic2V0T3JpZ1Jhbmdlc1wiLCB0aGlzKS5jYWxsKHRoaXMsIGNyLCBvZmZzZXQpO1xuICAgICAgdGhpcy5kaXJlY3RpdmVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgb2Zmc2V0ID0gbm9kZS5zZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5kaXJlY3RpdmVzRW5kTWFya2VyKSBvZmZzZXQgPSB0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIuc2V0T3JpZ1JhbmdlKGNyLCBvZmZzZXQpO1xuICAgICAgdGhpcy5jb250ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG9mZnNldCA9IG5vZGUuc2V0T3JpZ1Jhbmdlcyhjciwgb2Zmc2V0KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRFbmRNYXJrZXIpIG9mZnNldCA9IHRoaXMuZG9jdW1lbnRFbmRNYXJrZXIuc2V0T3JpZ1JhbmdlKGNyLCBvZmZzZXQpO1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgY29udGVudHMgPSB0aGlzLmNvbnRlbnRzLFxuICAgICAgICAgIGRpcmVjdGl2ZXMgPSB0aGlzLmRpcmVjdGl2ZXMsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgIHZhciBzdHIgPSBkaXJlY3RpdmVzLmpvaW4oJycpO1xuXG4gICAgICBpZiAoY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGlyZWN0aXZlcy5sZW5ndGggPiAwIHx8IGNvbnRlbnRzWzBdLnR5cGUgPT09IFR5cGUuQ09NTUVOVCkgc3RyICs9ICctLS1cXG4nO1xuICAgICAgICBzdHIgKz0gY29udGVudHMuam9pbignJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJbc3RyLmxlbmd0aCAtIDFdICE9PSAnXFxuJykgc3RyICs9ICdcXG4nO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRG9jdW1lbnQ7XG59KE5vZGUpO1xuXG52YXIgQWxpYXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhBbGlhcywgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQWxpYXMpO1xuXG4gIGZ1bmN0aW9uIEFsaWFzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbGlhcyk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQWxpYXMsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYW4gKmFsaWFzIGZyb20gdGhlIHNvdXJjZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtQYXJzZUNvbnRleHR9IGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhpcyBzY2FsYXJcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoY29udGV4dCwgc3RhcnQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB2YXIgc3JjID0gY29udGV4dC5zcmM7XG4gICAgICB2YXIgb2Zmc2V0ID0gTm9kZS5lbmRPZklkZW50aWZpZXIoc3JjLCBzdGFydCArIDEpO1xuICAgICAgdGhpcy52YWx1ZVJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0ICsgMSwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IHRoaXMucGFyc2VDb21tZW50KG9mZnNldCk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBbGlhcztcbn0oTm9kZSk7XG5cbnZhciBDaG9tcCA9IHtcbiAgQ0xJUDogJ0NMSVAnLFxuICBLRUVQOiAnS0VFUCcsXG4gIFNUUklQOiAnU1RSSVAnXG59O1xudmFyIEJsb2NrVmFsdWUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhCbG9ja1ZhbHVlLCBfTm9kZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihCbG9ja1ZhbHVlKTtcblxuICBmdW5jdGlvbiBCbG9ja1ZhbHVlKHR5cGUsIHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJsb2NrVmFsdWUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlLCBwcm9wcyk7XG4gICAgX3RoaXMuYmxvY2tJbmRlbnQgPSBudWxsO1xuICAgIF90aGlzLmNob21waW5nID0gQ2hvbXAuQ0xJUDtcbiAgICBfdGhpcy5oZWFkZXIgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhCbG9ja1ZhbHVlLCBbe1xuICAgIGtleTogXCJwYXJzZUJsb2NrSGVhZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQmxvY2tIZWFkZXIoc3RhcnQpIHtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0ICsgMTtcbiAgICAgIHZhciBiaSA9ICcnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcblxuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICB0aGlzLmNob21waW5nID0gQ2hvbXAuU1RSSVA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgdGhpcy5jaG9tcGluZyA9IENob21wLktFRVA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgIGNhc2UgJzMnOlxuICAgICAgICAgIGNhc2UgJzQnOlxuICAgICAgICAgIGNhc2UgJzUnOlxuICAgICAgICAgIGNhc2UgJzYnOlxuICAgICAgICAgIGNhc2UgJzcnOlxuICAgICAgICAgIGNhc2UgJzgnOlxuICAgICAgICAgIGNhc2UgJzknOlxuICAgICAgICAgICAgYmkgKz0gY2g7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmJsb2NrSW5kZW50ID0gTnVtYmVyKGJpKSB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgUmFuZ2Uoc3RhcnQsIG9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhcnNlQmxvY2tWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJsb2NrVmFsdWUoc3RhcnQpIHtcbiAgICAgIHZhciBfdGhpcyRjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICAgIGluZGVudCA9IF90aGlzJGNvbnRleHQuaW5kZW50LFxuICAgICAgICAgIHNyYyA9IF90aGlzJGNvbnRleHQuc3JjO1xuICAgICAgdmFyIGV4cGxpY2l0ID0gISF0aGlzLmJsb2NrSW5kZW50O1xuICAgICAgdmFyIG9mZnNldCA9IHN0YXJ0O1xuICAgICAgdmFyIHZhbHVlRW5kID0gc3RhcnQ7XG4gICAgICB2YXIgbWluQmxvY2tJbmRlbnQgPSAxO1xuXG4gICAgICBmb3IgKHZhciBjaCA9IHNyY1tvZmZzZXRdOyBjaCA9PT0gJ1xcbic7IGNoID0gc3JjW29mZnNldF0pIHtcbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgIGlmIChOb2RlLmF0RG9jdW1lbnRCb3VuZGFyeShzcmMsIG9mZnNldCkpIGJyZWFrO1xuICAgICAgICB2YXIgZW5kID0gTm9kZS5lbmRPZkJsb2NrSW5kZW50KHNyYywgaW5kZW50LCBvZmZzZXQpOyAvLyBzaG91bGQgbm90IGluY2x1ZGUgdGFiP1xuXG4gICAgICAgIGlmIChlbmQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICB2YXIgX2NoID0gc3JjW2VuZF07XG4gICAgICAgIHZhciBsaW5lSW5kZW50ID0gZW5kIC0gKG9mZnNldCArIGluZGVudCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJsb2NrSW5kZW50KSB7XG4gICAgICAgICAgLy8gbm8gZXhwbGljaXQgYmxvY2sgaW5kZW50LCBub25lIHlldCBkZXRlY3RlZFxuICAgICAgICAgIGlmIChzcmNbZW5kXSAhPT0gJ1xcbicpIHtcbiAgICAgICAgICAgIC8vIGZpcnN0IGxpbmUgd2l0aCBub24td2hpdGVzcGFjZSBjb250ZW50XG4gICAgICAgICAgICBpZiAobGluZUluZGVudCA8IG1pbkJsb2NrSW5kZW50KSB7XG4gICAgICAgICAgICAgIHZhciBtc2cgPSAnQmxvY2sgc2NhbGFycyB3aXRoIG1vcmUtaW5kZW50ZWQgbGVhZGluZyBlbXB0eSBsaW5lcyBtdXN0IHVzZSBhbiBleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3InO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IFlBTUxTZW1hbnRpY0Vycm9yKHRoaXMsIG1zZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYmxvY2tJbmRlbnQgPSBsaW5lSW5kZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAobGluZUluZGVudCA+IG1pbkJsb2NrSW5kZW50KSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBsaW5lIHdpdGggbW9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICBtaW5CbG9ja0luZGVudCA9IGxpbmVJbmRlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9jaCAmJiBfY2ggIT09ICdcXG4nICYmIGxpbmVJbmRlbnQgPCB0aGlzLmJsb2NrSW5kZW50KSB7XG4gICAgICAgICAgaWYgKHNyY1tlbmRdID09PSAnIycpIGJyZWFrO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmVycm9yKSB7XG4gICAgICAgICAgICB2YXIgX3NyYyA9IGV4cGxpY2l0ID8gJ2V4cGxpY2l0IGluZGVudGF0aW9uIGluZGljYXRvcicgOiAnZmlyc3QgbGluZSc7XG5cbiAgICAgICAgICAgIHZhciBfbXNnID0gXCJCbG9jayBzY2FsYXJzIG11c3Qgbm90IGJlIGxlc3MgaW5kZW50ZWQgdGhhbiB0aGVpciBcIi5jb25jYXQoX3NyYyk7XG5cbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgX21zZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNyY1tlbmRdID09PSAnXFxuJykge1xuICAgICAgICAgIG9mZnNldCA9IGVuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgPSB2YWx1ZUVuZCA9IE5vZGUuZW5kT2ZMaW5lKHNyYywgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jaG9tcGluZyAhPT0gQ2hvbXAuS0VFUCkge1xuICAgICAgICBvZmZzZXQgPSBzcmNbdmFsdWVFbmRdID8gdmFsdWVFbmQgKyAxIDogdmFsdWVFbmQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudmFsdWVSYW5nZSA9IG5ldyBSYW5nZShzdGFydCArIDEsIG9mZnNldCk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBibG9jayB2YWx1ZSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKlxuICAgICAqIEFjY2VwdGVkIGZvcm1zIGFyZTpcbiAgICAgKiBgYGBcbiAgICAgKiBCU1xuICAgICAqIGJsb2NrXG4gICAgICogbGluZXNcbiAgICAgKlxuICAgICAqIEJTICNjb21tZW50XG4gICAgICogYmxvY2tcbiAgICAgKiBsaW5lc1xuICAgICAqIGBgYFxuICAgICAqIHdoZXJlIHRoZSBibG9jayBzdHlsZSBCUyBtYXRjaGVzIHRoZSByZWdleHAgYFt8Pl1bLSsxLTldKmAgYW5kIGJsb2NrIGxpbmVzXG4gICAgICogYXJlIGVtcHR5IG9yIGhhdmUgYW4gaW5kZW50IGxldmVsIGdyZWF0ZXIgdGhhbiBgaW5kZW50YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgYmxvY2tcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGNvbnRleHQsIHN0YXJ0KSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdmFyIHNyYyA9IGNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IHRoaXMucGFyc2VCbG9ja0hlYWRlcihzdGFydCk7XG4gICAgICBvZmZzZXQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgPSB0aGlzLnBhcnNlQ29tbWVudChvZmZzZXQpO1xuICAgICAgb2Zmc2V0ID0gdGhpcy5wYXJzZUJsb2NrVmFsdWUob2Zmc2V0KTtcbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldE9yaWdSYW5nZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0T3JpZ1Jhbmdlcyhjciwgb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihCbG9ja1ZhbHVlLnByb3RvdHlwZSksIFwic2V0T3JpZ1Jhbmdlc1wiLCB0aGlzKS5jYWxsKHRoaXMsIGNyLCBvZmZzZXQpO1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyID8gdGhpcy5oZWFkZXIuc2V0T3JpZ1JhbmdlKGNyLCBvZmZzZXQpIDogb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbmNsdWRlc1RyYWlsaW5nTGluZXNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNob21waW5nID09PSBDaG9tcC5LRUVQO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdHJWYWx1ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlUmFuZ2UgfHwgIXRoaXMuY29udGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkdmFsdWVSYW5nZSA9IHRoaXMudmFsdWVSYW5nZSxcbiAgICAgICAgICBzdGFydCA9IF90aGlzJHZhbHVlUmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgZW5kID0gX3RoaXMkdmFsdWVSYW5nZS5lbmQ7XG4gICAgICB2YXIgX3RoaXMkY29udGV4dDIgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgaW5kZW50ID0gX3RoaXMkY29udGV4dDIuaW5kZW50LFxuICAgICAgICAgIHNyYyA9IF90aGlzJGNvbnRleHQyLnNyYztcbiAgICAgIGlmICh0aGlzLnZhbHVlUmFuZ2UuaXNFbXB0eSgpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgbGFzdE5ld0xpbmUgPSBudWxsO1xuICAgICAgdmFyIGNoID0gc3JjW2VuZCAtIDFdO1xuXG4gICAgICB3aGlsZSAoY2ggPT09ICdcXG4nIHx8IGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJyAnKSB7XG4gICAgICAgIGVuZCAtPSAxO1xuXG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICAgICAgICBpZiAodGhpcy5jaG9tcGluZyA9PT0gQ2hvbXAuS0VFUCkgYnJlYWs7ZWxzZSByZXR1cm4gJyc7IC8vIHByb2JhYmx5IG5ldmVyIGhhcHBlbnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpIGxhc3ROZXdMaW5lID0gZW5kO1xuICAgICAgICBjaCA9IHNyY1tlbmQgLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtlZXBTdGFydCA9IGVuZCArIDE7XG5cbiAgICAgIGlmIChsYXN0TmV3TGluZSkge1xuICAgICAgICBpZiAodGhpcy5jaG9tcGluZyA9PT0gQ2hvbXAuS0VFUCkge1xuICAgICAgICAgIGtlZXBTdGFydCA9IGxhc3ROZXdMaW5lO1xuICAgICAgICAgIGVuZCA9IHRoaXMudmFsdWVSYW5nZS5lbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kID0gbGFzdE5ld0xpbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJpID0gaW5kZW50ICsgdGhpcy5ibG9ja0luZGVudDtcbiAgICAgIHZhciBmb2xkZWQgPSB0aGlzLnR5cGUgPT09IFR5cGUuQkxPQ0tfRk9MREVEO1xuICAgICAgdmFyIGF0U3RhcnQgPSB0cnVlO1xuICAgICAgdmFyIHN0ciA9ICcnO1xuICAgICAgdmFyIHNlcCA9ICcnO1xuICAgICAgdmFyIHByZXZNb3JlSW5kZW50ZWQgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiaTsgKytqKSB7XG4gICAgICAgICAgaWYgKHNyY1tpXSAhPT0gJyAnKSBicmVhaztcbiAgICAgICAgICBpICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2NoMiA9IHNyY1tpXTtcblxuICAgICAgICBpZiAoX2NoMiA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBpZiAoc2VwID09PSAnXFxuJykgc3RyICs9ICdcXG4nO2Vsc2Ugc2VwID0gJ1xcbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGxpbmVFbmQgPSBOb2RlLmVuZE9mTGluZShzcmMsIGkpO1xuICAgICAgICAgIHZhciBsaW5lID0gc3JjLnNsaWNlKGksIGxpbmVFbmQpO1xuICAgICAgICAgIGkgPSBsaW5lRW5kO1xuXG4gICAgICAgICAgaWYgKGZvbGRlZCAmJiAoX2NoMiA9PT0gJyAnIHx8IF9jaDIgPT09ICdcXHQnKSAmJiBpIDwga2VlcFN0YXJ0KSB7XG4gICAgICAgICAgICBpZiAoc2VwID09PSAnICcpIHNlcCA9ICdcXG4nO2Vsc2UgaWYgKCFwcmV2TW9yZUluZGVudGVkICYmICFhdFN0YXJ0ICYmIHNlcCA9PT0gJ1xcbicpIHNlcCA9ICdcXG5cXG4nO1xuICAgICAgICAgICAgc3RyICs9IHNlcCArIGxpbmU7IC8vKyAoKGxpbmVFbmQgPCBlbmQgJiYgc3JjW2xpbmVFbmRdKSB8fCAnJylcblxuICAgICAgICAgICAgc2VwID0gbGluZUVuZCA8IGVuZCAmJiBzcmNbbGluZUVuZF0gfHwgJyc7XG4gICAgICAgICAgICBwcmV2TW9yZUluZGVudGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyICs9IHNlcCArIGxpbmU7XG4gICAgICAgICAgICBzZXAgPSBmb2xkZWQgJiYgaSA8IGtlZXBTdGFydCA/ICcgJyA6ICdcXG4nO1xuICAgICAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdFN0YXJ0ICYmIGxpbmUgIT09ICcnKSBhdFN0YXJ0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY2hvbXBpbmcgPT09IENob21wLlNUUklQID8gc3RyIDogc3RyICsgJ1xcbic7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJsb2NrVmFsdWU7XG59KE5vZGUpO1xuXG52YXIgRmxvd0NvbGxlY3Rpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhGbG93Q29sbGVjdGlvbiwgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRmxvd0NvbGxlY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIEZsb3dDb2xsZWN0aW9uKHR5cGUsIHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZsb3dDb2xsZWN0aW9uKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSwgcHJvcHMpO1xuICAgIF90aGlzLml0ZW1zID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRmxvd0NvbGxlY3Rpb24sIFt7XG4gICAga2V5OiBcInByZXZOb2RlSXNKc29uTGlrZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmV2Tm9kZUlzSnNvbkxpa2UoKSB7XG4gICAgICB2YXIgaWR4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpZHggLSAxXTtcbiAgICAgIHJldHVybiAhIW5vZGUgJiYgKG5vZGUuanNvbkxpa2UgfHwgbm9kZS50eXBlID09PSBUeXBlLkNPTU1FTlQgJiYgdGhpcy5wcmV2Tm9kZUlzSnNvbkxpa2UoaWR4IC0gMSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1BhcnNlQ29udGV4dH0gY29udGV4dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gSW5kZXggb2YgdGhlIGNoYXJhY3RlciBhZnRlciB0aGlzXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHZhciBwYXJzZU5vZGUgPSBjb250ZXh0LnBhcnNlTm9kZSxcbiAgICAgICAgICBzcmMgPSBjb250ZXh0LnNyYztcbiAgICAgIHZhciBpbmRlbnQgPSBjb250ZXh0LmluZGVudCxcbiAgICAgICAgICBsaW5lU3RhcnQgPSBjb250ZXh0LmxpbmVTdGFydDtcbiAgICAgIHZhciBjaGFyID0gc3JjW3N0YXJ0XTsgLy8geyBvciBbXG5cbiAgICAgIHRoaXMuaXRlbXMgPSBbe1xuICAgICAgICBjaGFyOiBjaGFyLFxuICAgICAgICBvZmZzZXQ6IHN0YXJ0XG4gICAgICB9XTtcbiAgICAgIHZhciBvZmZzZXQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIHN0YXJ0ICsgMSk7XG4gICAgICBjaGFyID0gc3JjW29mZnNldF07XG5cbiAgICAgIHdoaWxlIChjaGFyICYmIGNoYXIgIT09ICddJyAmJiBjaGFyICE9PSAnfScpIHtcbiAgICAgICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gb2Zmc2V0ICsgMTtcbiAgICAgICAgICAgICAgdmFyIHdzRW5kID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBsaW5lU3RhcnQpO1xuXG4gICAgICAgICAgICAgIGlmIChzcmNbd3NFbmRdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgIHZhciBibGFua0xpbmUgPSBuZXcgQmxhbmtMaW5lKCk7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gYmxhbmtMaW5lLnBhcnNlKHtcbiAgICAgICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICAgICAgfSwgbGluZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goYmxhbmtMaW5lKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZJbmRlbnQoc3JjLCBsaW5lU3RhcnQpO1xuXG4gICAgICAgICAgICAgIGlmIChvZmZzZXQgPD0gbGluZVN0YXJ0ICsgaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgY2hhciA9IHNyY1tvZmZzZXRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IGxpbmVTdGFydCArIGluZGVudCB8fCBjaGFyICE9PSAnXScgJiYgY2hhciAhPT0gJ30nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbXNnID0gJ0luc3VmZmljaWVudCBpbmRlbnRhdGlvbiBpbiBmbG93IGNvbGxlY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBZQU1MU2VtYW50aWNFcnJvcih0aGlzLCBtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjaGFyOiBjaGFyLFxuICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBjb21tZW50ID0gbmV3IENvbW1lbnQoKTtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gY29tbWVudC5wYXJzZSh7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcbiAgICAgICAgICAgICAgfSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIG5leHQgPSBzcmNbb2Zmc2V0ICsgMV07XG5cbiAgICAgICAgICAgICAgaWYgKG5leHQgPT09ICdcXG4nIHx8IG5leHQgPT09ICdcXHQnIHx8IG5leHQgPT09ICcgJyB8fCBuZXh0ID09PSAnLCcgfHwgLy8gaW4tZmxvdyA6IGFmdGVyIEpTT04tbGlrZSBrZXkgZG9lcyBub3QgbmVlZCB0byBiZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgIGNoYXIgPT09ICc6JyAmJiB0aGlzLnByZXZOb2RlSXNKc29uTGlrZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGNoYXI6IGNoYXIsXG4gICAgICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBub2RlID0gcGFyc2VOb2RlKHtcbiAgICAgICAgICAgICAgICBhdExpbmVTdGFydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5Db2xsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbkZsb3c6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5kZW50OiAtMSxcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXNcbiAgICAgICAgICAgICAgfSwgb2Zmc2V0KTtcblxuICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBhdCBuZXh0IGRvY3VtZW50IHN0YXJ0XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgIG9mZnNldCA9IE5vZGUubm9ybWFsaXplT2Zmc2V0KHNyYywgbm9kZS5yYW5nZS5lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBvZmZzZXQpO1xuICAgICAgICBjaGFyID0gc3JjW29mZnNldF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMudmFsdWVSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgb2Zmc2V0ICsgMSk7XG5cbiAgICAgIGlmIChjaGFyKSB7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgY2hhcjogY2hhcixcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgICB9KTtcbiAgICAgICAgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBvZmZzZXQgKyAxKTtcbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5wYXJzZUNvbW1lbnQob2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3JpZ1Jhbmdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcmlnUmFuZ2VzKGNyLCBvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IF9nZXQoX2dldFByb3RvdHlwZU9mKEZsb3dDb2xsZWN0aW9uLnByb3RvdHlwZSksIFwic2V0T3JpZ1Jhbmdlc1wiLCB0aGlzKS5jYWxsKHRoaXMsIGNyLCBvZmZzZXQpO1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIG9mZnNldCA9IG5vZGUuc2V0T3JpZ1Jhbmdlcyhjciwgb2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIGlmIChjci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBub2RlLm9yaWdPZmZzZXQgPSBub2RlLm9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaSA9IG9mZnNldDtcblxuICAgICAgICAgIHdoaWxlIChpIDwgY3IubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoY3JbaV0gPiBub2RlLm9mZnNldCkgYnJlYWs7ZWxzZSArK2k7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZS5vcmlnT2Zmc2V0ID0gbm9kZS5vZmZzZXQgKyBpO1xuICAgICAgICAgIG9mZnNldCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYyxcbiAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMsXG4gICAgICAgICAgcmFuZ2UgPSB0aGlzLnJhbmdlLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSByZXR1cm4gdmFsdWU7XG4gICAgICB2YXIgbm9kZXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBOb2RlO1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RyID0gJyc7XG4gICAgICB2YXIgcHJldkVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgcHJlZml4ID0gc3JjLnNsaWNlKHByZXZFbmQsIG5vZGUucmFuZ2Uuc3RhcnQpO1xuICAgICAgICBwcmV2RW5kID0gbm9kZS5yYW5nZS5lbmQ7XG4gICAgICAgIHN0ciArPSBwcmVmaXggKyBTdHJpbmcobm9kZSk7XG5cbiAgICAgICAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICdcXG4nICYmIHNyY1twcmV2RW5kIC0gMV0gIT09ICdcXG4nICYmIHNyY1twcmV2RW5kXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAvLyBDb21tZW50IHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgdGhlIHRlcm1pbmFsIG5ld2xpbmUsIGJ1dCBpdHNcbiAgICAgICAgICAvLyBzdHJpbmdpZmllZCB2YWx1ZSBkb2VzLiBXaXRob3V0IHRoaXMgZml4LCBuZXdsaW5lcyBhdCBjb21tZW50IGVuZHNcbiAgICAgICAgICAvLyBnZXQgZHVwbGljYXRlZC5cbiAgICAgICAgICBwcmV2RW5kICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3RyICs9IHNyYy5zbGljZShwcmV2RW5kLCByYW5nZS5lbmQpO1xuICAgICAgcmV0dXJuIE5vZGUuYWRkU3RyaW5nVGVybWluYXRvcihzcmMsIHJhbmdlLmVuZCwgc3RyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRmxvd0NvbGxlY3Rpb247XG59KE5vZGUpO1xuXG52YXIgUXVvdGVEb3VibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhRdW90ZURvdWJsZSwgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUXVvdGVEb3VibGUpO1xuXG4gIGZ1bmN0aW9uIFF1b3RlRG91YmxlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBRdW90ZURvdWJsZSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUXVvdGVEb3VibGUsIFt7XG4gICAga2V5OiBcInBhcnNlQ2hhckNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VDaGFyQ29kZShvZmZzZXQsIGxlbmd0aCwgZXJyb3JzKSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5jb250ZXh0LnNyYztcbiAgICAgIHZhciBjYyA9IHNyYy5zdWJzdHIob2Zmc2V0LCBsZW5ndGgpO1xuICAgICAgdmFyIG9rID0gY2MubGVuZ3RoID09PSBsZW5ndGggJiYgL15bMC05YS1mQS1GXSskLy50ZXN0KGNjKTtcbiAgICAgIHZhciBjb2RlID0gb2sgPyBwYXJzZUludChjYywgMTYpIDogTmFOO1xuXG4gICAgICBpZiAoaXNOYU4oY29kZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFlBTUxTeW50YXhFcnJvcih0aGlzLCBcIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlIFwiLmNvbmNhdChzcmMuc3Vic3RyKG9mZnNldCAtIDIsIGxlbmd0aCArIDIpKSkpO1xuICAgICAgICByZXR1cm4gc3JjLnN1YnN0cihvZmZzZXQgLSAyLCBsZW5ndGggKyAyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBcImRvdWJsZSBxdW90ZWRcIiB2YWx1ZSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgc2NhbGFyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjb250ZXh0LCBzdGFydCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHZhciBzcmMgPSBjb250ZXh0LnNyYztcbiAgICAgIHZhciBvZmZzZXQgPSBRdW90ZURvdWJsZS5lbmRPZlF1b3RlKHNyYywgc3RhcnQgKyAxKTtcbiAgICAgIHRoaXMudmFsdWVSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCA9IHRoaXMucGFyc2VDb21tZW50KG9mZnNldCk7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdHJWYWx1ZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge3N0cmluZyB8IHsgc3RyOiBzdHJpbmcsIGVycm9yczogWUFNTFN5bnRheEVycm9yW10gfX1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZVJhbmdlIHx8ICF0aGlzLmNvbnRleHQpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHZhbHVlUmFuZ2UgPSB0aGlzLnZhbHVlUmFuZ2UsXG4gICAgICAgICAgc3RhcnQgPSBfdGhpcyR2YWx1ZVJhbmdlLnN0YXJ0LFxuICAgICAgICAgIGVuZCA9IF90aGlzJHZhbHVlUmFuZ2UuZW5kO1xuICAgICAgdmFyIF90aGlzJGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgaW5kZW50ID0gX3RoaXMkY29udGV4dC5pbmRlbnQsXG4gICAgICAgICAgc3JjID0gX3RoaXMkY29udGV4dC5zcmM7XG4gICAgICBpZiAoc3JjW2VuZCAtIDFdICE9PSAnXCInKSBlcnJvcnMucHVzaChuZXcgWUFNTFN5bnRheEVycm9yKHRoaXMsICdNaXNzaW5nIGNsb3NpbmcgXCJxdW90ZScpKTsgLy8gVXNpbmcgU3RyaW5nI3JlcGxhY2UgaXMgdG9vIHBhaW5mdWwgd2l0aCBlc2NhcGVkIG5ld2xpbmVzIHByZWNlZGVkIGJ5XG4gICAgICAvLyBlc2NhcGVkIGJhY2tzbGFzaGVzOyBhbHNvLCB0aGlzIHNob3VsZCBiZSBmYXN0ZXIuXG5cbiAgICAgIHZhciBzdHIgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0ICsgMTsgaSA8IGVuZCAtIDE7ICsraSkge1xuICAgICAgICB2YXIgY2ggPSBzcmNbaV07XG5cbiAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgIGlmIChOb2RlLmF0RG9jdW1lbnRCb3VuZGFyeShzcmMsIGkgKyAxKSkgZXJyb3JzLnB1c2gobmV3IFlBTUxTZW1hbnRpY0Vycm9yKHRoaXMsICdEb2N1bWVudCBib3VuZGFyeSBpbmRpY2F0b3JzIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4gc3RyaW5nIHZhbHVlcycpKTtcblxuICAgICAgICAgIHZhciBfTm9kZSRmb2xkTmV3bGluZSA9IE5vZGUuZm9sZE5ld2xpbmUoc3JjLCBpLCBpbmRlbnQpLFxuICAgICAgICAgICAgICBmb2xkID0gX05vZGUkZm9sZE5ld2xpbmUuZm9sZCxcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gX05vZGUkZm9sZE5ld2xpbmUub2Zmc2V0LFxuICAgICAgICAgICAgICBlcnJvciA9IF9Ob2RlJGZvbGROZXdsaW5lLmVycm9yO1xuXG4gICAgICAgICAgc3RyICs9IGZvbGQ7XG4gICAgICAgICAgaSA9IG9mZnNldDtcbiAgICAgICAgICBpZiAoZXJyb3IpIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcih0aGlzLCAnTXVsdGktbGluZSBkb3VibGUtcXVvdGVkIHN0cmluZyBuZWVkcyB0byBiZSBzdWZmaWNpZW50bHkgaW5kZW50ZWQnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgIGkgKz0gMTtcblxuICAgICAgICAgIHN3aXRjaCAoc3JjW2ldKSB7XG4gICAgICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXDAnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIG51bGwgY2hhcmFjdGVyXG5cbiAgICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xceDA3JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBiZWxsIGNoYXJhY3RlclxuXG4gICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXGInO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGJhY2tzcGFjZVxuXG4gICAgICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXHgxYic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlclxuXG4gICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXGYnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGZvcm0gZmVlZFxuXG4gICAgICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXG4nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGxpbmUgZmVlZFxuXG4gICAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXHInO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGNhcnJpYWdlIHJldHVyblxuXG4gICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGhvcml6b250YWwgdGFiXG5cbiAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcdic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdmVydGljYWwgdGFiXG5cbiAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICBzdHIgKz0gXCJcXHg4NVwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIFVuaWNvZGUgbmV4dCBsaW5lXG5cbiAgICAgICAgICAgIGNhc2UgJ18nOlxuICAgICAgICAgICAgICBzdHIgKz0gXCJcXHhBMFwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIFVuaWNvZGUgbm9uLWJyZWFraW5nIHNwYWNlXG5cbiAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICBzdHIgKz0gXCJcXHUyMDI4XCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gVW5pY29kZSBsaW5lIHNlcGFyYXRvclxuXG4gICAgICAgICAgICBjYXNlICdQJzpcbiAgICAgICAgICAgICAgc3RyICs9IFwiXFx1MjAyOVwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIFVuaWNvZGUgcGFyYWdyYXBoIHNlcGFyYXRvclxuXG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgc3RyICs9ICcgJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcIic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgICAgc3RyICs9ICcvJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgIHN0ciArPSB0aGlzLnBhcnNlQ2hhckNvZGUoaSArIDEsIDIsIGVycm9ycyk7XG4gICAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5wYXJzZUNoYXJDb2RlKGkgKyAxLCA0LCBlcnJvcnMpO1xuICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICAgICAgc3RyICs9IHRoaXMucGFyc2VDaGFyQ29kZShpICsgMSwgOCwgZXJyb3JzKTtcbiAgICAgICAgICAgICAgaSArPSA4O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgLy8gc2tpcCBlc2NhcGVkIG5ld2xpbmVzLCBidXQgc3RpbGwgdHJpbSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgICAgd2hpbGUgKHNyY1tpICsgMV0gPT09ICcgJyB8fCBzcmNbaSArIDFdID09PSAnXFx0Jykge1xuICAgICAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgWUFNTFN5bnRheEVycm9yKHRoaXMsIFwiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgXCIuY29uY2F0KHNyYy5zdWJzdHIoaSAtIDEsIDIpKSkpO1xuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFwnICsgc3JjW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJyAnIHx8IGNoID09PSAnXFx0Jykge1xuICAgICAgICAgIC8vIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgICAgICAgIHZhciB3c1N0YXJ0ID0gaTtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNyY1tpICsgMV07XG5cbiAgICAgICAgICB3aGlsZSAobmV4dCA9PT0gJyAnIHx8IG5leHQgPT09ICdcXHQnKSB7XG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICBuZXh0ID0gc3JjW2kgKyAxXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gJ1xcbicpIHN0ciArPSBpID4gd3NTdGFydCA/IHNyYy5zbGljZSh3c1N0YXJ0LCBpICsgMSkgOiBjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8ge1xuICAgICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgICAgc3RyOiBzdHJcbiAgICAgIH0gOiBzdHI7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZW5kT2ZRdW90ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmRPZlF1b3RlKHNyYywgb2Zmc2V0KSB7XG4gICAgICB2YXIgY2ggPSBzcmNbb2Zmc2V0XTtcblxuICAgICAgd2hpbGUgKGNoICYmIGNoICE9PSAnXCInKSB7XG4gICAgICAgIG9mZnNldCArPSBjaCA9PT0gJ1xcXFwnID8gMiA6IDE7XG4gICAgICAgIGNoID0gc3JjW29mZnNldF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQgKyAxO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBRdW90ZURvdWJsZTtcbn0oTm9kZSk7XG5cbnZhciBRdW90ZVNpbmdsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUpIHtcbiAgX2luaGVyaXRzKFF1b3RlU2luZ2xlLCBfTm9kZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihRdW90ZVNpbmdsZSk7XG5cbiAgZnVuY3Rpb24gUXVvdGVTaW5nbGUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFF1b3RlU2luZ2xlKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhRdW90ZVNpbmdsZSwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhICdzaW5nbGUgcXVvdGVkJyB2YWx1ZSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gLSBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgc2NhbGFyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGNvbnRleHQsIHN0YXJ0KSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdmFyIHNyYyA9IGNvbnRleHQuc3JjO1xuICAgICAgdmFyIG9mZnNldCA9IFF1b3RlU2luZ2xlLmVuZE9mUXVvdGUoc3JjLCBzdGFydCArIDEpO1xuICAgICAgdGhpcy52YWx1ZVJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ID0gTm9kZS5lbmRPZldoaXRlU3BhY2Uoc3JjLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ID0gdGhpcy5wYXJzZUNvbW1lbnQob2Zmc2V0KTtcbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0clZhbHVlXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgeyBzdHI6IHN0cmluZywgZXJyb3JzOiBZQU1MU3ludGF4RXJyb3JbXSB9fVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlUmFuZ2UgfHwgIXRoaXMuY29udGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgX3RoaXMkdmFsdWVSYW5nZSA9IHRoaXMudmFsdWVSYW5nZSxcbiAgICAgICAgICBzdGFydCA9IF90aGlzJHZhbHVlUmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgZW5kID0gX3RoaXMkdmFsdWVSYW5nZS5lbmQ7XG4gICAgICB2YXIgX3RoaXMkY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgICBpbmRlbnQgPSBfdGhpcyRjb250ZXh0LmluZGVudCxcbiAgICAgICAgICBzcmMgPSBfdGhpcyRjb250ZXh0LnNyYztcbiAgICAgIGlmIChzcmNbZW5kIC0gMV0gIT09IFwiJ1wiKSBlcnJvcnMucHVzaChuZXcgWUFNTFN5bnRheEVycm9yKHRoaXMsIFwiTWlzc2luZyBjbG9zaW5nICdxdW90ZVwiKSk7XG4gICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSBzdGFydCArIDE7IGkgPCBlbmQgLSAxOyArK2kpIHtcbiAgICAgICAgdmFyIGNoID0gc3JjW2ldO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBpZiAoTm9kZS5hdERvY3VtZW50Qm91bmRhcnkoc3JjLCBpICsgMSkpIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcih0aGlzLCAnRG9jdW1lbnQgYm91bmRhcnkgaW5kaWNhdG9ycyBhcmUgbm90IGFsbG93ZWQgd2l0aGluIHN0cmluZyB2YWx1ZXMnKSk7XG5cbiAgICAgICAgICB2YXIgX05vZGUkZm9sZE5ld2xpbmUgPSBOb2RlLmZvbGROZXdsaW5lKHNyYywgaSwgaW5kZW50KSxcbiAgICAgICAgICAgICAgZm9sZCA9IF9Ob2RlJGZvbGROZXdsaW5lLmZvbGQsXG4gICAgICAgICAgICAgIG9mZnNldCA9IF9Ob2RlJGZvbGROZXdsaW5lLm9mZnNldCxcbiAgICAgICAgICAgICAgZXJyb3IgPSBfTm9kZSRmb2xkTmV3bGluZS5lcnJvcjtcblxuICAgICAgICAgIHN0ciArPSBmb2xkO1xuICAgICAgICAgIGkgPSBvZmZzZXQ7XG4gICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3IodGhpcywgJ011bHRpLWxpbmUgc2luZ2xlLXF1b3RlZCBzdHJpbmcgbmVlZHMgdG8gYmUgc3VmZmljaWVudGx5IGluZGVudGVkJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIidcIikge1xuICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgaWYgKHNyY1tpXSAhPT0gXCInXCIpIGVycm9ycy5wdXNoKG5ldyBZQU1MU3ludGF4RXJyb3IodGhpcywgJ1VuZXNjYXBlZCBzaW5nbGUgcXVvdGU/IFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgLy8gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAgICAgICAgdmFyIHdzU3RhcnQgPSBpO1xuICAgICAgICAgIHZhciBuZXh0ID0gc3JjW2kgKyAxXTtcblxuICAgICAgICAgIHdoaWxlIChuZXh0ID09PSAnICcgfHwgbmV4dCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIG5leHQgPSBzcmNbaSArIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXh0ICE9PSAnXFxuJykgc3RyICs9IGkgPiB3c1N0YXJ0ID8gc3JjLnNsaWNlKHdzU3RhcnQsIGkgKyAxKSA6IGNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyB7XG4gICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICBzdHI6IHN0clxuICAgICAgfSA6IHN0cjtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJlbmRPZlF1b3RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuZE9mUXVvdGUoc3JjLCBvZmZzZXQpIHtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuXG4gICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgaWYgKGNoID09PSBcIidcIikge1xuICAgICAgICAgIGlmIChzcmNbb2Zmc2V0ICsgMV0gIT09IFwiJ1wiKSBicmVhaztcbiAgICAgICAgICBjaCA9IHNyY1tvZmZzZXQgKz0gMl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2ggPSBzcmNbb2Zmc2V0ICs9IDFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQgKyAxO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBRdW90ZVNpbmdsZTtcbn0oTm9kZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld05vZGUodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBUeXBlLkFMSUFTOlxuICAgICAgcmV0dXJuIG5ldyBBbGlhcyh0eXBlLCBwcm9wcyk7XG5cbiAgICBjYXNlIFR5cGUuQkxPQ0tfRk9MREVEOlxuICAgIGNhc2UgVHlwZS5CTE9DS19MSVRFUkFMOlxuICAgICAgcmV0dXJuIG5ldyBCbG9ja1ZhbHVlKHR5cGUsIHByb3BzKTtcblxuICAgIGNhc2UgVHlwZS5GTE9XX01BUDpcbiAgICBjYXNlIFR5cGUuRkxPV19TRVE6XG4gICAgICByZXR1cm4gbmV3IEZsb3dDb2xsZWN0aW9uKHR5cGUsIHByb3BzKTtcblxuICAgIGNhc2UgVHlwZS5NQVBfS0VZOlxuICAgIGNhc2UgVHlwZS5NQVBfVkFMVUU6XG4gICAgY2FzZSBUeXBlLlNFUV9JVEVNOlxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uSXRlbSh0eXBlLCBwcm9wcyk7XG5cbiAgICBjYXNlIFR5cGUuQ09NTUVOVDpcbiAgICBjYXNlIFR5cGUuUExBSU46XG4gICAgICByZXR1cm4gbmV3IFBsYWluVmFsdWUodHlwZSwgcHJvcHMpO1xuXG4gICAgY2FzZSBUeXBlLlFVT1RFX0RPVUJMRTpcbiAgICAgIHJldHVybiBuZXcgUXVvdGVEb3VibGUodHlwZSwgcHJvcHMpO1xuXG4gICAgY2FzZSBUeXBlLlFVT1RFX1NJTkdMRTpcbiAgICAgIHJldHVybiBuZXcgUXVvdGVTaW5nbGUodHlwZSwgcHJvcHMpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhdExpbmVTdGFydCAtIE5vZGUgc3RhcnRzIGF0IGJlZ2lubmluZyBvZiBsaW5lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluRmxvdyAtIHRydWUgaWYgY3VycmVudGx5IGluIGEgZmxvdyBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluQ29sbGVjdGlvbiAtIHRydWUgaWYgY3VycmVudGx5IGluIGEgY29sbGVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZW50IC0gQ3VycmVudCBsZXZlbCBvZiBpbmRlbnRhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGxpbmVTdGFydCAtIFN0YXJ0IG9mIHRoZSBjdXJyZW50IGxpbmVcbiAqIEBwYXJhbSB7Tm9kZX0gcGFyZW50IC0gVGhlIHBhcmVudCBvZiB0aGUgbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHNyYyAtIFNvdXJjZSBvZiB0aGUgWUFNTCBkb2N1bWVudFxuICovXG5cblxudmFyIFBhcnNlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIF9jcmVhdGVDbGFzcyhQYXJzZUNvbnRleHQsIG51bGwsIFt7XG4gICAga2V5OiBcInBhcnNlVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZVR5cGUoc3JjLCBvZmZzZXQsIGluRmxvdykge1xuICAgICAgc3dpdGNoIChzcmNbb2Zmc2V0XSkge1xuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICByZXR1cm4gVHlwZS5BTElBUztcblxuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICByZXR1cm4gVHlwZS5CTE9DS19GT0xERUQ7XG5cbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgcmV0dXJuIFR5cGUuQkxPQ0tfTElURVJBTDtcblxuICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICByZXR1cm4gVHlwZS5GTE9XX01BUDtcblxuICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICByZXR1cm4gVHlwZS5GTE9XX1NFUTtcblxuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICByZXR1cm4gIWluRmxvdyAmJiBOb2RlLmF0Qmxhbmsoc3JjLCBvZmZzZXQgKyAxLCB0cnVlKSA/IFR5cGUuTUFQX0tFWSA6IFR5cGUuUExBSU47XG5cbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgcmV0dXJuICFpbkZsb3cgJiYgTm9kZS5hdEJsYW5rKHNyYywgb2Zmc2V0ICsgMSwgdHJ1ZSkgPyBUeXBlLk1BUF9WQUxVRSA6IFR5cGUuUExBSU47XG5cbiAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgcmV0dXJuICFpbkZsb3cgJiYgTm9kZS5hdEJsYW5rKHNyYywgb2Zmc2V0ICsgMSwgdHJ1ZSkgPyBUeXBlLlNFUV9JVEVNIDogVHlwZS5QTEFJTjtcblxuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgcmV0dXJuIFR5cGUuUVVPVEVfRE9VQkxFO1xuXG4gICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgcmV0dXJuIFR5cGUuUVVPVEVfU0lOR0xFO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFR5cGUuUExBSU47XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gUGFyc2VDb250ZXh0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3JpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgIGF0TGluZVN0YXJ0ID0gX3JlZi5hdExpbmVTdGFydCxcbiAgICAgICAgaW5Db2xsZWN0aW9uID0gX3JlZi5pbkNvbGxlY3Rpb24sXG4gICAgICAgIGluRmxvdyA9IF9yZWYuaW5GbG93LFxuICAgICAgICBpbmRlbnQgPSBfcmVmLmluZGVudCxcbiAgICAgICAgbGluZVN0YXJ0ID0gX3JlZi5saW5lU3RhcnQsXG4gICAgICAgIHBhcmVudCA9IF9yZWYucGFyZW50O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBhcnNlQ29udGV4dCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwYXJzZU5vZGVcIiwgZnVuY3Rpb24gKG92ZXJsYXksIHN0YXJ0KSB7XG4gICAgICBpZiAoTm9kZS5hdERvY3VtZW50Qm91bmRhcnkoX3RoaXMuc3JjLCBzdGFydCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbnRleHQgPSBuZXcgUGFyc2VDb250ZXh0KF90aGlzLCBvdmVybGF5KTtcblxuICAgICAgdmFyIF9jb250ZXh0JHBhcnNlUHJvcHMgPSBjb250ZXh0LnBhcnNlUHJvcHMoc3RhcnQpLFxuICAgICAgICAgIHByb3BzID0gX2NvbnRleHQkcGFyc2VQcm9wcy5wcm9wcyxcbiAgICAgICAgICB0eXBlID0gX2NvbnRleHQkcGFyc2VQcm9wcy50eXBlLFxuICAgICAgICAgIHZhbHVlU3RhcnQgPSBfY29udGV4dCRwYXJzZVByb3BzLnZhbHVlU3RhcnQ7XG5cbiAgICAgIHZhciBub2RlID0gY3JlYXRlTmV3Tm9kZSh0eXBlLCBwcm9wcyk7XG4gICAgICB2YXIgb2Zmc2V0ID0gbm9kZS5wYXJzZShjb250ZXh0LCB2YWx1ZVN0YXJ0KTtcbiAgICAgIG5vZGUucmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIG9mZnNldCk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblxuICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCBsZXQncyBtYWtlIHN1cmUgdG8gYXQgbGVhc3RcbiAgICAgICAgLy8gc3RlcCBvbmUgY2hhcmFjdGVyIGZvcndhcmQgdG8gYXZvaWQgYSBidXN5IGxvb3AuXG4gICAgICAgIG5vZGUuZXJyb3IgPSBuZXcgRXJyb3IoXCJOb2RlI3BhcnNlIGNvbnN1bWVkIG5vIGNoYXJhY3RlcnNcIik7XG4gICAgICAgIG5vZGUuZXJyb3IucGFyc2VFbmQgPSBvZmZzZXQ7XG4gICAgICAgIG5vZGUuZXJyb3Iuc291cmNlID0gbm9kZTtcbiAgICAgICAgbm9kZS5yYW5nZS5lbmQgPSBzdGFydCArIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0Lm5vZGVTdGFydHNDb2xsZWN0aW9uKG5vZGUpKSB7XG4gICAgICAgIGlmICghbm9kZS5lcnJvciAmJiAhY29udGV4dC5hdExpbmVTdGFydCAmJiBjb250ZXh0LnBhcmVudC50eXBlID09PSBUeXBlLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgbm9kZS5lcnJvciA9IG5ldyBZQU1MU3ludGF4RXJyb3Iobm9kZSwgJ0Jsb2NrIGNvbGxlY3Rpb24gbXVzdCBub3QgaGF2ZSBwcmVjZWRpbmcgY29udGVudCBoZXJlIChlLmcuIGRpcmVjdGl2ZXMtZW5kIGluZGljYXRvciknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24obm9kZSk7XG4gICAgICAgIG9mZnNldCA9IGNvbGxlY3Rpb24ucGFyc2UobmV3IFBhcnNlQ29udGV4dChjb250ZXh0KSwgb2Zmc2V0KTtcbiAgICAgICAgY29sbGVjdGlvbi5yYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hdExpbmVTdGFydCA9IGF0TGluZVN0YXJ0ICE9IG51bGwgPyBhdExpbmVTdGFydCA6IG9yaWcuYXRMaW5lU3RhcnQgfHwgZmFsc2U7XG4gICAgdGhpcy5pbkNvbGxlY3Rpb24gPSBpbkNvbGxlY3Rpb24gIT0gbnVsbCA/IGluQ29sbGVjdGlvbiA6IG9yaWcuaW5Db2xsZWN0aW9uIHx8IGZhbHNlO1xuICAgIHRoaXMuaW5GbG93ID0gaW5GbG93ICE9IG51bGwgPyBpbkZsb3cgOiBvcmlnLmluRmxvdyB8fCBmYWxzZTtcbiAgICB0aGlzLmluZGVudCA9IGluZGVudCAhPSBudWxsID8gaW5kZW50IDogb3JpZy5pbmRlbnQ7XG4gICAgdGhpcy5saW5lU3RhcnQgPSBsaW5lU3RhcnQgIT0gbnVsbCA/IGxpbmVTdGFydCA6IG9yaWcubGluZVN0YXJ0O1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50ICE9IG51bGwgPyBwYXJlbnQgOiBvcmlnLnBhcmVudCB8fCB7fTtcbiAgICB0aGlzLnJvb3QgPSBvcmlnLnJvb3Q7XG4gICAgdGhpcy5zcmMgPSBvcmlnLnNyYztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQYXJzZUNvbnRleHQsIFt7XG4gICAga2V5OiBcIm5vZGVTdGFydHNDb2xsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5vZGVTdGFydHNDb2xsZWN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBpbkNvbGxlY3Rpb24gPSB0aGlzLmluQ29sbGVjdGlvbixcbiAgICAgICAgICBpbkZsb3cgPSB0aGlzLmluRmxvdyxcbiAgICAgICAgICBzcmMgPSB0aGlzLnNyYztcbiAgICAgIGlmIChpbkNvbGxlY3Rpb24gfHwgaW5GbG93KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbGxlY3Rpb25JdGVtKSByZXR1cm4gdHJ1ZTsgLy8gY2hlY2sgZm9yIGltcGxpY2l0IGtleVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gbm9kZS5yYW5nZS5lbmQ7XG4gICAgICBpZiAoc3JjW29mZnNldF0gPT09ICdcXG4nIHx8IHNyY1tvZmZzZXQgLSAxXSA9PT0gJ1xcbicpIHJldHVybiBmYWxzZTtcbiAgICAgIG9mZnNldCA9IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgIHJldHVybiBzcmNbb2Zmc2V0XSA9PT0gJzonO1xuICAgIH0gLy8gQW5jaG9yIGFuZCB0YWcgYXJlIGJlZm9yZSB0eXBlLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBub2RlIGltcGxlbWVudGF0aW9uXG4gICAgLy8gY2xhc3M7IGhlbmNlIHRoaXMgaW50ZXJtZWRpYXRlIHN0ZXAuXG5cbiAgfSwge1xuICAgIGtleTogXCJwYXJzZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlUHJvcHMob2Zmc2V0KSB7XG4gICAgICB2YXIgaW5GbG93ID0gdGhpcy5pbkZsb3csXG4gICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICAgICAgc3JjID0gdGhpcy5zcmM7XG4gICAgICB2YXIgcHJvcHMgPSBbXTtcbiAgICAgIHZhciBsaW5lSGFzUHJvcHMgPSBmYWxzZTtcbiAgICAgIG9mZnNldCA9IHRoaXMuYXRMaW5lU3RhcnQgPyBOb2RlLmVuZE9mSW5kZW50KHNyYywgb2Zmc2V0KSA6IE5vZGUuZW5kT2ZXaGl0ZVNwYWNlKHNyYywgb2Zmc2V0KTtcbiAgICAgIHZhciBjaCA9IHNyY1tvZmZzZXRdO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IENoYXIuQU5DSE9SIHx8IGNoID09PSBDaGFyLkNPTU1FTlQgfHwgY2ggPT09IENoYXIuVEFHIHx8IGNoID09PSAnXFxuJykge1xuICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgdmFyIGxpbmVTdGFydCA9IG9mZnNldCArIDE7XG4gICAgICAgICAgdmFyIGluRW5kID0gTm9kZS5lbmRPZkluZGVudChzcmMsIGxpbmVTdGFydCk7XG4gICAgICAgICAgdmFyIGluZGVudERpZmYgPSBpbkVuZCAtIChsaW5lU3RhcnQgKyB0aGlzLmluZGVudCk7XG4gICAgICAgICAgdmFyIG5vSW5kaWNhdG9yQXNJbmRlbnQgPSBwYXJlbnQudHlwZSA9PT0gVHlwZS5TRVFfSVRFTSAmJiBwYXJlbnQuY29udGV4dC5hdExpbmVTdGFydDtcbiAgICAgICAgICBpZiAoIU5vZGUubmV4dE5vZGVJc0luZGVudGVkKHNyY1tpbkVuZF0sIGluZGVudERpZmYsICFub0luZGljYXRvckFzSW5kZW50KSkgYnJlYWs7XG4gICAgICAgICAgdGhpcy5hdExpbmVTdGFydCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7XG4gICAgICAgICAgbGluZUhhc1Byb3BzID0gZmFsc2U7XG4gICAgICAgICAgb2Zmc2V0ID0gaW5FbmQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IENoYXIuQ09NTUVOVCkge1xuICAgICAgICAgIHZhciBlbmQgPSBOb2RlLmVuZE9mTGluZShzcmMsIG9mZnNldCArIDEpO1xuICAgICAgICAgIHByb3BzLnB1c2gobmV3IFJhbmdlKG9mZnNldCwgZW5kKSk7XG4gICAgICAgICAgb2Zmc2V0ID0gZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfZW5kID0gTm9kZS5lbmRPZklkZW50aWZpZXIoc3JjLCBvZmZzZXQgKyAxKTtcblxuICAgICAgICAgIGlmIChjaCA9PT0gQ2hhci5UQUcgJiYgc3JjW19lbmRdID09PSAnLCcgJiYgL15bYS16QS1aMC05LV0rXFwuW2EtekEtWjAtOS1dKyxcXGRcXGRcXGRcXGQoLVxcZFxcZCl7MCwyfVxcL1xcUy8udGVzdChzcmMuc2xpY2Uob2Zmc2V0ICsgMSwgX2VuZCArIDEzKSkpIHtcbiAgICAgICAgICAgIC8vIExldCdzIHByZXN1bWUgd2UncmUgZGVhbGluZyB3aXRoIGEgWUFNTCAxLjAgZG9tYWluIHRhZyBoZXJlLCByYXRoZXJcbiAgICAgICAgICAgIC8vIHRoYW4gYW4gZW1wdHkgYnV0ICdmb28uYmFyJyBwcml2YXRlLXRhZ2dlZCBub2RlIGluIGEgZmxvdyBjb2xsZWN0aW9uXG4gICAgICAgICAgICAvLyBmb2xsb3dlZCB3aXRob3V0IHdoaXRlc3BhY2UgYnkgYSBwbGFpbiBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIHllYXJcbiAgICAgICAgICAgIC8vIG9yIGRhdGUgZGl2aWRlZCBieSBzb21ldGhpbmcuXG4gICAgICAgICAgICBfZW5kID0gTm9kZS5lbmRPZklkZW50aWZpZXIoc3JjLCBfZW5kICsgNSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvcHMucHVzaChuZXcgUmFuZ2Uob2Zmc2V0LCBfZW5kKSk7XG4gICAgICAgICAgbGluZUhhc1Byb3BzID0gdHJ1ZTtcbiAgICAgICAgICBvZmZzZXQgPSBOb2RlLmVuZE9mV2hpdGVTcGFjZShzcmMsIF9lbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2ggPSBzcmNbb2Zmc2V0XTtcbiAgICAgIH0gLy8gJy0gJmEgOiBiJyBoYXMgYW4gYW5jaG9yIG9uIGFuIGVtcHR5IG5vZGVcblxuXG4gICAgICBpZiAobGluZUhhc1Byb3BzICYmIGNoID09PSAnOicgJiYgTm9kZS5hdEJsYW5rKHNyYywgb2Zmc2V0ICsgMSwgdHJ1ZSkpIG9mZnNldCAtPSAxO1xuICAgICAgdmFyIHR5cGUgPSBQYXJzZUNvbnRleHQucGFyc2VUeXBlKHNyYywgb2Zmc2V0LCBpbkZsb3cpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZVN0YXJ0OiBvZmZzZXRcbiAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIG5vZGUgZnJvbSB0aGUgc291cmNlXG4gICAgICogQHBhcmFtIHtQYXJzZUNvbnRleHR9IG92ZXJsYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBJbmRleCBvZiBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgZm9yIHRoZSBub2RlXG4gICAgICogQHJldHVybnMgez9Ob2RlfSAtIG51bGwgaWYgYXQgYSBkb2N1bWVudCBib3VuZGFyeVxuICAgICAqL1xuXG4gIH1dKTtcblxuICByZXR1cm4gUGFyc2VDb250ZXh0O1xufSgpO1xuXG4vLyBQdWJsaXNoZWQgYXMgJ3lhbWwvcGFyc2UtY3N0J1xuZnVuY3Rpb24gcGFyc2Uoc3JjKSB7XG4gIHZhciBjciA9IFtdO1xuXG4gIGlmIChzcmMuaW5kZXhPZignXFxyJykgIT09IC0xKSB7XG4gICAgc3JjID0gc3JjLnJlcGxhY2UoL1xcclxcbj8vZywgZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQpIHtcbiAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxKSBjci5wdXNoKG9mZnNldCk7XG4gICAgICByZXR1cm4gJ1xcbic7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgZG9jdW1lbnRzID0gW107XG4gIHZhciBvZmZzZXQgPSAwO1xuXG4gIGRvIHtcbiAgICB2YXIgZG9jID0gbmV3IERvY3VtZW50KCk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgUGFyc2VDb250ZXh0KHtcbiAgICAgIHNyYzogc3JjXG4gICAgfSk7XG4gICAgb2Zmc2V0ID0gZG9jLnBhcnNlKGNvbnRleHQsIG9mZnNldCk7XG4gICAgZG9jdW1lbnRzLnB1c2goZG9jKTtcbiAgfSB3aGlsZSAob2Zmc2V0IDwgc3JjLmxlbmd0aCk7XG5cbiAgZG9jdW1lbnRzLnNldE9yaWdSYW5nZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjci5sZW5ndGg7ICsraSkge1xuICAgICAgY3JbaV0gLT0gaTtcbiAgICB9XG5cbiAgICB2YXIgY3JPZmZzZXQgPSAwO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRvY3VtZW50cy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgIGNyT2Zmc2V0ID0gZG9jdW1lbnRzW19pXS5zZXRPcmlnUmFuZ2VzKGNyLCBjck9mZnNldCk7XG4gICAgfVxuXG4gICAgY3Iuc3BsaWNlKDAsIGNyLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgZG9jdW1lbnRzLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkb2N1bWVudHMuam9pbignLi4uXFxuJyk7XG4gIH07XG5cbiAgcmV0dXJuIGRvY3VtZW50cztcbn1cblxuZXhwb3J0IHsgcGFyc2UgfTtcbiIsImltcG9ydCB7IGMgYXMgX2NsYXNzQ2FsbENoZWNrLCBqIGFzIF9pbmhlcml0cywgayBhcyBfY3JlYXRlU3VwZXIsIGIgYXMgX2NyZWF0ZUNsYXNzLCBlIGFzIF9kZWZpbmVQcm9wZXJ0eSwgcCBhcyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBhIGFzIF90eXBlb2YsIHEgYXMgX3RvQXJyYXksIFQgYXMgVHlwZSwgXyBhcyBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciwgbCBhcyBfZ2V0LCBtIGFzIF9nZXRQcm90b3R5cGVPZiwgbyBhcyBZQU1MUmVmZXJlbmNlRXJyb3IsIHIgYXMgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIGggYXMgX3NsaWNlZFRvQXJyYXksIGcgYXMgWUFNTFNlbWFudGljRXJyb3IsIG4gYXMgZGVmYXVsdFRhZ3MsIGYgYXMgWUFNTFdhcm5pbmcsIEMgYXMgQ2hhciwgWSBhcyBZQU1MU3ludGF4RXJyb3IsIFAgYXMgUGxhaW5WYWx1ZSB9IGZyb20gJy4vUGxhaW5WYWx1ZS1mZjUxNDdjNi5qcyc7XG5cbmZ1bmN0aW9uIGFkZENvbW1lbnRCZWZvcmUoc3RyLCBpbmRlbnQsIGNvbW1lbnQpIHtcbiAgaWYgKCFjb21tZW50KSByZXR1cm4gc3RyO1xuICB2YXIgY2MgPSBjb21tZW50LnJlcGxhY2UoL1tcXHNcXFNdXi9nbSwgXCIkJlwiLmNvbmNhdChpbmRlbnQsIFwiI1wiKSk7XG4gIHJldHVybiBcIiNcIi5jb25jYXQoY2MsIFwiXFxuXCIpLmNvbmNhdChpbmRlbnQpLmNvbmNhdChzdHIpO1xufVxuZnVuY3Rpb24gYWRkQ29tbWVudChzdHIsIGluZGVudCwgY29tbWVudCkge1xuICByZXR1cm4gIWNvbW1lbnQgPyBzdHIgOiBjb21tZW50LmluZGV4T2YoJ1xcbicpID09PSAtMSA/IFwiXCIuY29uY2F0KHN0ciwgXCIgI1wiKS5jb25jYXQoY29tbWVudCkgOiBcIlwiLmNvbmNhdChzdHIsIFwiXFxuXCIpICsgY29tbWVudC5yZXBsYWNlKC9eL2dtLCBcIlwiLmNvbmNhdChpbmRlbnQgfHwgJycsIFwiI1wiKSk7XG59XG5cbnZhciBOb2RlID0gZnVuY3Rpb24gTm9kZSgpIHtcbiAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vZGUpO1xufTtcblxuZnVuY3Rpb24gdG9KU09OKHZhbHVlLCBhcmcsIGN0eCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYsIGkpIHtcbiAgICByZXR1cm4gdG9KU09OKHYsIFN0cmluZyhpKSwgY3R4KTtcbiAgfSk7XG5cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYW5jaG9yID0gY3R4ICYmIGN0eC5hbmNob3JzICYmIGN0eC5hbmNob3JzLmdldCh2YWx1ZSk7XG4gICAgaWYgKGFuY2hvcikgY3R4Lm9uQ3JlYXRlID0gZnVuY3Rpb24gKHJlcykge1xuICAgICAgYW5jaG9yLnJlcyA9IHJlcztcbiAgICAgIGRlbGV0ZSBjdHgub25DcmVhdGU7XG4gICAgfTtcbiAgICB2YXIgcmVzID0gdmFsdWUudG9KU09OKGFyZywgY3R4KTtcbiAgICBpZiAoYW5jaG9yICYmIGN0eC5vbkNyZWF0ZSkgY3R4Lm9uQ3JlYXRlKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGlmICgoIWN0eCB8fCAhY3R4LmtlZXApICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBTY2FsYXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhTY2FsYXIsIF9Ob2RlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNjYWxhcik7XG5cbiAgZnVuY3Rpb24gU2NhbGFyKHZhbHVlKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNjYWxhcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNjYWxhciwgW3tcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTiQxKGFyZywgY3R4KSB7XG4gICAgICByZXR1cm4gY3R4ICYmIGN0eC5rZWVwID8gdGhpcy52YWx1ZSA6IHRvSlNPTih0aGlzLnZhbHVlLCBhcmcsIGN0eCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2NhbGFyO1xufShOb2RlKTtcblxuZnVuY3Rpb24gY29sbGVjdGlvbkZyb21QYXRoKHNjaGVtYSwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIHYgPSB2YWx1ZTtcblxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgIHZhciBrID0gcGF0aFtpXTtcbiAgICB2YXIgbyA9IE51bWJlci5pc0ludGVnZXIoaykgJiYgayA+PSAwID8gW10gOiB7fTtcbiAgICBvW2tdID0gdjtcbiAgICB2ID0gbztcbiAgfVxuXG4gIHJldHVybiBzY2hlbWEuY3JlYXRlTm9kZSh2LCBmYWxzZSk7XG59IC8vIG51bGwsIHVuZGVmaW5lZCwgb3IgYW4gZW1wdHkgbm9uLXN0cmluZyBpdGVyYWJsZSAoZS5nLiBbXSlcblxuXG52YXIgaXNFbXB0eVBhdGggPSBmdW5jdGlvbiBpc0VtcHR5UGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoID09IG51bGwgfHwgX3R5cGVvZihwYXRoKSA9PT0gJ29iamVjdCcgJiYgcGF0aFtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmU7XG59O1xudmFyIENvbGxlY3Rpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0cyhDb2xsZWN0aW9uLCBfTm9kZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsZWN0aW9uKTtcblxuICBmdW5jdGlvbiBDb2xsZWN0aW9uKHNjaGVtYSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xsZWN0aW9uKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXRlbXNcIiwgW10pO1xuXG4gICAgX3RoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb2xsZWN0aW9uLCBbe1xuICAgIGtleTogXCJhZGRJblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgaWYgKGlzRW1wdHlQYXRoKHBhdGgpKSB0aGlzLmFkZCh2YWx1ZSk7ZWxzZSB7XG4gICAgICAgIHZhciBfcGF0aCA9IF90b0FycmF5KHBhdGgpLFxuICAgICAgICAgICAga2V5ID0gX3BhdGhbMF0sXG4gICAgICAgICAgICByZXN0ID0gX3BhdGguc2xpY2UoMSk7XG5cbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIG5vZGUuYWRkSW4ocmVzdCwgdmFsdWUpO2Vsc2UgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSkgdGhpcy5zZXQoa2V5LCBjb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIHJlc3QsIHZhbHVlKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgXCIuY29uY2F0KGtleSwgXCIuIFJlbWFpbmluZyBwYXRoOiBcIikuY29uY2F0KHJlc3QpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlSW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZXRlSW4oX3JlZikge1xuICAgICAgdmFyIF9yZWYyID0gX3RvQXJyYXkoX3JlZiksXG4gICAgICAgICAga2V5ID0gX3JlZjJbMF0sXG4gICAgICAgICAgcmVzdCA9IF9yZWYyLnNsaWNlKDEpO1xuXG4gICAgICBpZiAocmVzdC5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSByZXR1cm4gbm9kZS5kZWxldGVJbihyZXN0KTtlbHNlIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIFlBTUwgY29sbGVjdGlvbiBhdCBcIi5jb25jYXQoa2V5LCBcIi4gUmVtYWluaW5nIHBhdGg6IFwiKS5jb25jYXQocmVzdCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbihfcmVmMywga2VlcFNjYWxhcikge1xuICAgICAgdmFyIF9yZWY0ID0gX3RvQXJyYXkoX3JlZjMpLFxuICAgICAgICAgIGtleSA9IF9yZWY0WzBdLFxuICAgICAgICAgIHJlc3QgPSBfcmVmNC5zbGljZSgxKTtcblxuICAgICAgdmFyIG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKSByZXR1cm4gIWtlZXBTY2FsYXIgJiYgbm9kZSBpbnN0YW5jZW9mIFNjYWxhciA/IG5vZGUudmFsdWUgOiBub2RlO2Vsc2UgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uID8gbm9kZS5nZXRJbihyZXN0LCBrZWVwU2NhbGFyKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzQWxsTnVsbFZhbHVlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNBbGxOdWxsVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZXZlcnkoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUudHlwZSAhPT0gJ1BBSVInKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBuID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG4gPT0gbnVsbCB8fCBuIGluc3RhbmNlb2YgU2NhbGFyICYmIG4udmFsdWUgPT0gbnVsbCAmJiAhbi5jb21tZW50QmVmb3JlICYmICFuLmNvbW1lbnQgJiYgIW4udGFnO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0luXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0luKF9yZWY1KSB7XG4gICAgICB2YXIgX3JlZjYgPSBfdG9BcnJheShfcmVmNSksXG4gICAgICAgICAga2V5ID0gX3JlZjZbMF0sXG4gICAgICAgICAgcmVzdCA9IF9yZWY2LnNsaWNlKDEpO1xuXG4gICAgICBpZiAocmVzdC5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLmhhcyhrZXkpO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uID8gbm9kZS5oYXNJbihyZXN0KSA6IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRJblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRJbihfcmVmNywgdmFsdWUpIHtcbiAgICAgIHZhciBfcmVmOCA9IF90b0FycmF5KF9yZWY3KSxcbiAgICAgICAgICBrZXkgPSBfcmVmOFswXSxcbiAgICAgICAgICByZXN0ID0gX3JlZjguc2xpY2UoMSk7XG5cbiAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5nZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSBub2RlLnNldEluKHJlc3QsIHZhbHVlKTtlbHNlIGlmIChub2RlID09PSB1bmRlZmluZWQgJiYgdGhpcy5zY2hlbWEpIHRoaXMuc2V0KGtleSwgY29sbGVjdGlvbkZyb21QYXRoKHRoaXMuc2NoZW1hLCByZXN0LCB2YWx1ZSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0IFwiLmNvbmNhdChrZXksIFwiLiBSZW1haW5pbmcgcGF0aDogXCIpLmNvbmNhdChyZXN0KSk7XG4gICAgICB9XG4gICAgfSAvLyBvdmVycmlkZGVuIGluIGltcGxlbWVudGF0aW9uc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoY3R4LCBfcmVmOSwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBibG9ja0l0ZW0gPSBfcmVmOS5ibG9ja0l0ZW0sXG4gICAgICAgICAgZmxvd0NoYXJzID0gX3JlZjkuZmxvd0NoYXJzLFxuICAgICAgICAgIGlzTWFwID0gX3JlZjkuaXNNYXAsXG4gICAgICAgICAgaXRlbUluZGVudCA9IF9yZWY5Lml0ZW1JbmRlbnQ7XG4gICAgICB2YXIgX2N0eCA9IGN0eCxcbiAgICAgICAgICBpbmRlbnQgPSBfY3R4LmluZGVudCxcbiAgICAgICAgICBpbmRlbnRTdGVwID0gX2N0eC5pbmRlbnRTdGVwLFxuICAgICAgICAgIHN0cmluZ2lmeSA9IF9jdHguc3RyaW5naWZ5O1xuICAgICAgdmFyIGluRmxvdyA9IHRoaXMudHlwZSA9PT0gVHlwZS5GTE9XX01BUCB8fCB0aGlzLnR5cGUgPT09IFR5cGUuRkxPV19TRVEgfHwgY3R4LmluRmxvdztcbiAgICAgIGlmIChpbkZsb3cpIGl0ZW1JbmRlbnQgKz0gaW5kZW50U3RlcDtcbiAgICAgIHZhciBhbGxOdWxsVmFsdWVzID0gaXNNYXAgJiYgdGhpcy5oYXNBbGxOdWxsVmFsdWVzKCk7XG4gICAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgYWxsTnVsbFZhbHVlczogYWxsTnVsbFZhbHVlcyxcbiAgICAgICAgaW5kZW50OiBpdGVtSW5kZW50LFxuICAgICAgICBpbkZsb3c6IGluRmxvdyxcbiAgICAgICAgdHlwZTogbnVsbFxuICAgICAgfSk7XG4gICAgICB2YXIgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgICB2YXIgaGFzSXRlbVdpdGhOZXdMaW5lID0gZmFsc2U7XG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLml0ZW1zLnJlZHVjZShmdW5jdGlvbiAobm9kZXMsIGl0ZW0sIGkpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQ7XG5cbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBpZiAoIWNob21wS2VlcCAmJiBpdGVtLnNwYWNlQmVmb3JlKSBub2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgICAgIHN0cjogJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXRlbS5jb21tZW50QmVmb3JlKSBpdGVtLmNvbW1lbnRCZWZvcmUubWF0Y2goL14uKiQvZ20pLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgICAgICAgICAgIHN0cjogXCIjXCIuY29uY2F0KGxpbmUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXRlbS5jb21tZW50KSBjb21tZW50ID0gaXRlbS5jb21tZW50O1xuICAgICAgICAgIGlmIChpbkZsb3cgJiYgKCFjaG9tcEtlZXAgJiYgaXRlbS5zcGFjZUJlZm9yZSB8fCBpdGVtLmNvbW1lbnRCZWZvcmUgfHwgaXRlbS5jb21tZW50IHx8IGl0ZW0ua2V5ICYmIChpdGVtLmtleS5jb21tZW50QmVmb3JlIHx8IGl0ZW0ua2V5LmNvbW1lbnQpIHx8IGl0ZW0udmFsdWUgJiYgKGl0ZW0udmFsdWUuY29tbWVudEJlZm9yZSB8fCBpdGVtLnZhbHVlLmNvbW1lbnQpKSkgaGFzSXRlbVdpdGhOZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNob21wS2VlcCA9IGZhbHNlO1xuICAgICAgICB2YXIgc3RyID0gc3RyaW5naWZ5KGl0ZW0sIGN0eCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb21tZW50ID0gbnVsbDtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjaG9tcEtlZXAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGluRmxvdyAmJiAhaGFzSXRlbVdpdGhOZXdMaW5lICYmIHN0ci5pbmNsdWRlcygnXFxuJykpIGhhc0l0ZW1XaXRoTmV3TGluZSA9IHRydWU7XG4gICAgICAgIGlmIChpbkZsb3cgJiYgaSA8IF90aGlzMi5pdGVtcy5sZW5ndGggLSAxKSBzdHIgKz0gJywnO1xuICAgICAgICBzdHIgPSBhZGRDb21tZW50KHN0ciwgaXRlbUluZGVudCwgY29tbWVudCk7XG4gICAgICAgIGlmIChjaG9tcEtlZXAgJiYgKGNvbW1lbnQgfHwgaW5GbG93KSkgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdpdGVtJyxcbiAgICAgICAgICBzdHI6IHN0clxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgfSwgW10pO1xuICAgICAgdmFyIHN0cjtcblxuICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdHIgPSBmbG93Q2hhcnMuc3RhcnQgKyBmbG93Q2hhcnMuZW5kO1xuICAgICAgfSBlbHNlIGlmIChpbkZsb3cpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZmxvd0NoYXJzLnN0YXJ0LFxuICAgICAgICAgICAgZW5kID0gZmxvd0NoYXJzLmVuZDtcbiAgICAgICAgdmFyIHN0cmluZ3MgPSBub2Rlcy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICByZXR1cm4gbi5zdHI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNJdGVtV2l0aE5ld0xpbmUgfHwgc3RyaW5ncy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgc3RyKSB7XG4gICAgICAgICAgcmV0dXJuIHN1bSArIHN0ci5sZW5ndGggKyAyO1xuICAgICAgICB9LCAyKSA+IENvbGxlY3Rpb24ubWF4Rmxvd1N0cmluZ1NpbmdsZUxpbmVMZW5ndGgpIHtcbiAgICAgICAgICBzdHIgPSBzdGFydDtcblxuICAgICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzdHJpbmdzKSxcbiAgICAgICAgICAgICAgX3N0ZXA7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgdmFyIHMgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgc3RyICs9IHMgPyBcIlxcblwiLmNvbmNhdChpbmRlbnRTdGVwKS5jb25jYXQoaW5kZW50KS5jb25jYXQocykgOiAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IFwiXFxuXCIuY29uY2F0KGluZGVudCkuY29uY2F0KGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gXCJcIi5jb25jYXQoc3RhcnQsIFwiIFwiKS5jb25jYXQoc3RyaW5ncy5qb2luKCcgJyksIFwiIFwiKS5jb25jYXQoZW5kKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9zdHJpbmdzID0gbm9kZXMubWFwKGJsb2NrSXRlbSk7XG5cbiAgICAgICAgc3RyID0gX3N0cmluZ3Muc2hpZnQoKTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKF9zdHJpbmdzKSxcbiAgICAgICAgICAgIF9zdGVwMjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICB2YXIgX3MgPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgICBzdHIgKz0gX3MgPyBcIlxcblwiLmNvbmNhdChpbmRlbnQpLmNvbmNhdChfcykgOiAnXFxuJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvcjIuZigpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgc3RyICs9ICdcXG4nICsgdGhpcy5jb21tZW50LnJlcGxhY2UoL14vZ20sIFwiXCIuY29uY2F0KGluZGVudCwgXCIjXCIpKTtcbiAgICAgICAgaWYgKG9uQ29tbWVudCkgb25Db21tZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKGNob21wS2VlcCAmJiBvbkNob21wS2VlcCkgb25DaG9tcEtlZXAoKTtcblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGVjdGlvbjtcbn0oTm9kZSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShDb2xsZWN0aW9uLCBcIm1heEZsb3dTdHJpbmdTaW5nbGVMaW5lTGVuZ3RoXCIsIDYwKTtcblxuZnVuY3Rpb24gYXNJdGVtSW5kZXgoa2V5KSB7XG4gIHZhciBpZHggPSBrZXkgaW5zdGFuY2VvZiBTY2FsYXIgPyBrZXkudmFsdWUgOiBrZXk7XG4gIGlmIChpZHggJiYgdHlwZW9mIGlkeCA9PT0gJ3N0cmluZycpIGlkeCA9IE51bWJlcihpZHgpO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpZHgpICYmIGlkeCA+PSAwID8gaWR4IDogbnVsbDtcbn1cblxudmFyIFlBTUxTZXEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db2xsZWN0aW9uKSB7XG4gIF9pbmhlcml0cyhZQU1MU2VxLCBfQ29sbGVjdGlvbik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihZQU1MU2VxKTtcblxuICBmdW5jdGlvbiBZQU1MU2VxKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZQU1MU2VxKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhZQU1MU2VxLCBbe1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICB0aGlzLml0ZW1zLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZWxldGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2RlbGV0ZShrZXkpIHtcbiAgICAgIHZhciBpZHggPSBhc0l0ZW1JbmRleChrZXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZGVsID0gdGhpcy5pdGVtcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIHJldHVybiBkZWwubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgIHZhciBpZHggPSBhc0l0ZW1JbmRleChrZXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdmFyIGl0ID0gdGhpcy5pdGVtc1tpZHhdO1xuICAgICAgcmV0dXJuICFrZWVwU2NhbGFyICYmIGl0IGluc3RhbmNlb2YgU2NhbGFyID8gaXQudmFsdWUgOiBpdDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHZhciBpZHggPSBhc0l0ZW1JbmRleChrZXkpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBpZHggPT09ICdudW1iZXInICYmIGlkeCA8IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBpZHggPSBhc0l0ZW1JbmRleChrZXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBhIHZhbGlkIGluZGV4LCBub3QgXCIuY29uY2F0KGtleSwgXCIuXCIpKTtcbiAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IHZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OJDEoXywgY3R4KSB7XG4gICAgICB2YXIgc2VxID0gW107XG4gICAgICBpZiAoY3R4ICYmIGN0eC5vbkNyZWF0ZSkgY3R4Lm9uQ3JlYXRlKHNlcSk7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLml0ZW1zKSxcbiAgICAgICAgICBfc3RlcDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIHNlcS5wdXNoKHRvSlNPTihpdGVtLCBTdHJpbmcoaSsrKSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlcTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICBpZiAoIWN0eCkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFlBTUxTZXEucHJvdG90eXBlKSwgXCJ0b1N0cmluZ1wiLCB0aGlzKS5jYWxsKHRoaXMsIGN0eCwge1xuICAgICAgICBibG9ja0l0ZW06IGZ1bmN0aW9uIGJsb2NrSXRlbShuKSB7XG4gICAgICAgICAgcmV0dXJuIG4udHlwZSA9PT0gJ2NvbW1lbnQnID8gbi5zdHIgOiBcIi0gXCIuY29uY2F0KG4uc3RyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmxvd0NoYXJzOiB7XG4gICAgICAgICAgc3RhcnQ6ICdbJyxcbiAgICAgICAgICBlbmQ6ICddJ1xuICAgICAgICB9LFxuICAgICAgICBpc01hcDogZmFsc2UsXG4gICAgICAgIGl0ZW1JbmRlbnQ6IChjdHguaW5kZW50IHx8ICcnKSArICcgICdcbiAgICAgIH0sIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBZQU1MU2VxO1xufShDb2xsZWN0aW9uKTtcblxudmFyIHN0cmluZ2lmeUtleSA9IGZ1bmN0aW9uIHN0cmluZ2lmeUtleShrZXksIGpzS2V5LCBjdHgpIHtcbiAgaWYgKGpzS2V5ID09PSBudWxsKSByZXR1cm4gJyc7XG4gIGlmIChfdHlwZW9mKGpzS2V5KSAhPT0gJ29iamVjdCcpIHJldHVybiBTdHJpbmcoanNLZXkpO1xuICBpZiAoa2V5IGluc3RhbmNlb2YgTm9kZSAmJiBjdHggJiYgY3R4LmRvYykgcmV0dXJuIGtleS50b1N0cmluZyh7XG4gICAgYW5jaG9yczoge30sXG4gICAgZG9jOiBjdHguZG9jLFxuICAgIGluZGVudDogJycsXG4gICAgaW5kZW50U3RlcDogY3R4LmluZGVudFN0ZXAsXG4gICAgaW5GbG93OiB0cnVlLFxuICAgIGluU3RyaW5naWZ5S2V5OiB0cnVlLFxuICAgIHN0cmluZ2lmeTogY3R4LnN0cmluZ2lmeVxuICB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzS2V5KTtcbn07XG5cbnZhciBQYWlyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTm9kZSkge1xuICBfaW5oZXJpdHMoUGFpciwgX05vZGUpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUGFpcik7XG5cbiAgZnVuY3Rpb24gUGFpcihrZXkpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFpcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLmtleSA9IGtleTtcbiAgICBfdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIF90aGlzLnR5cGUgPSBQYWlyLlR5cGUuUEFJUjtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUGFpciwgW3tcbiAgICBrZXk6IFwiYWRkVG9KU01hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRUb0pTTWFwKGN0eCwgbWFwKSB7XG4gICAgICB2YXIga2V5ID0gdG9KU09OKHRoaXMua2V5LCAnJywgY3R4KTtcblxuICAgICAgaWYgKG1hcCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0b0pTT04odGhpcy52YWx1ZSwga2V5LCBjdHgpO1xuICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChtYXAgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgbWFwLmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHN0cmluZ0tleSA9IHN0cmluZ2lmeUtleSh0aGlzLmtleSwga2V5LCBjdHgpO1xuICAgICAgICBtYXBbc3RyaW5nS2V5XSA9IHRvSlNPTih0aGlzLnZhbHVlLCBzdHJpbmdLZXksIGN0eCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oXywgY3R4KSB7XG4gICAgICB2YXIgcGFpciA9IGN0eCAmJiBjdHgubWFwQXNNYXAgPyBuZXcgTWFwKCkgOiB7fTtcbiAgICAgIHJldHVybiB0aGlzLmFkZFRvSlNNYXAoY3R4LCBwYWlyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICBpZiAoIWN0eCB8fCAhY3R4LmRvYykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuICAgICAgdmFyIF9jdHgkZG9jJG9wdGlvbnMgPSBjdHguZG9jLm9wdGlvbnMsXG4gICAgICAgICAgaW5kZW50U2l6ZSA9IF9jdHgkZG9jJG9wdGlvbnMuaW5kZW50LFxuICAgICAgICAgIGluZGVudFNlcSA9IF9jdHgkZG9jJG9wdGlvbnMuaW5kZW50U2VxLFxuICAgICAgICAgIHNpbXBsZUtleXMgPSBfY3R4JGRvYyRvcHRpb25zLnNpbXBsZUtleXM7XG4gICAgICB2YXIga2V5ID0gdGhpcy5rZXksXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdmFyIGtleUNvbW1lbnQgPSBrZXkgaW5zdGFuY2VvZiBOb2RlICYmIGtleS5jb21tZW50O1xuXG4gICAgICBpZiAoc2ltcGxlS2V5cykge1xuICAgICAgICBpZiAoa2V5Q29tbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2l0aCBzaW1wbGUga2V5cywga2V5IG5vZGVzIGNhbm5vdCBoYXZlIGNvbW1lbnRzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgQ29sbGVjdGlvbikge1xuICAgICAgICAgIHZhciBtc2cgPSAnV2l0aCBzaW1wbGUga2V5cywgY29sbGVjdGlvbiBjYW5ub3QgYmUgdXNlZCBhcyBhIGtleSB2YWx1ZSc7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV4cGxpY2l0S2V5ID0gIXNpbXBsZUtleXMgJiYgKCFrZXkgfHwga2V5Q29tbWVudCB8fCBrZXkgaW5zdGFuY2VvZiBDb2xsZWN0aW9uIHx8IGtleS50eXBlID09PSBUeXBlLkJMT0NLX0ZPTERFRCB8fCBrZXkudHlwZSA9PT0gVHlwZS5CTE9DS19MSVRFUkFMKTtcbiAgICAgIHZhciBfY3R4ID0gY3R4LFxuICAgICAgICAgIGRvYyA9IF9jdHguZG9jLFxuICAgICAgICAgIGluZGVudCA9IF9jdHguaW5kZW50LFxuICAgICAgICAgIGluZGVudFN0ZXAgPSBfY3R4LmluZGVudFN0ZXAsXG4gICAgICAgICAgc3RyaW5naWZ5ID0gX2N0eC5zdHJpbmdpZnk7XG4gICAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgaW1wbGljaXRLZXk6ICFleHBsaWNpdEtleSxcbiAgICAgICAgaW5kZW50OiBpbmRlbnQgKyBpbmRlbnRTdGVwXG4gICAgICB9KTtcbiAgICAgIHZhciBjaG9tcEtlZXAgPSBmYWxzZTtcbiAgICAgIHZhciBzdHIgPSBzdHJpbmdpZnkoa2V5LCBjdHgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGtleUNvbW1lbnQgPSBudWxsO1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY2hvbXBLZWVwID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgc3RyID0gYWRkQ29tbWVudChzdHIsIGN0eC5pbmRlbnQsIGtleUNvbW1lbnQpO1xuXG4gICAgICBpZiAoY3R4LmFsbE51bGxWYWx1ZXMgJiYgIXNpbXBsZUtleXMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkge1xuICAgICAgICAgIHN0ciA9IGFkZENvbW1lbnQoc3RyLCBjdHguaW5kZW50LCB0aGlzLmNvbW1lbnQpO1xuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIG9uQ29tbWVudCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGNob21wS2VlcCAmJiAha2V5Q29tbWVudCAmJiBvbkNob21wS2VlcCkgb25DaG9tcEtlZXAoKTtcblxuICAgICAgICByZXR1cm4gY3R4LmluRmxvdyA/IHN0ciA6IFwiPyBcIi5jb25jYXQoc3RyKTtcbiAgICAgIH1cblxuICAgICAgc3RyID0gZXhwbGljaXRLZXkgPyBcIj8gXCIuY29uY2F0KHN0ciwgXCJcXG5cIikuY29uY2F0KGluZGVudCwgXCI6XCIpIDogXCJcIi5jb25jYXQoc3RyLCBcIjpcIik7XG5cbiAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgLy8gZXhwZWN0ZWQgKGJ1dCBub3Qgc3RyaWN0bHkgcmVxdWlyZWQpIHRvIGJlIGEgc2luZ2xlLWxpbmUgY29tbWVudFxuICAgICAgICBzdHIgPSBhZGRDb21tZW50KHN0ciwgY3R4LmluZGVudCwgdGhpcy5jb21tZW50KTtcbiAgICAgICAgaWYgKG9uQ29tbWVudCkgb25Db21tZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2Y2IgPSAnJztcbiAgICAgIHZhciB2YWx1ZUNvbW1lbnQgPSBudWxsO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIGlmICh2YWx1ZS5zcGFjZUJlZm9yZSkgdmNiID0gJ1xcbic7XG5cbiAgICAgICAgaWYgKHZhbHVlLmNvbW1lbnRCZWZvcmUpIHtcbiAgICAgICAgICB2YXIgY3MgPSB2YWx1ZS5jb21tZW50QmVmb3JlLnJlcGxhY2UoL14vZ20sIFwiXCIuY29uY2F0KGN0eC5pbmRlbnQsIFwiI1wiKSk7XG4gICAgICAgICAgdmNiICs9IFwiXFxuXCIuY29uY2F0KGNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlQ29tbWVudCA9IHZhbHVlLmNvbW1lbnQ7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZSA9IGRvYy5zY2hlbWEuY3JlYXRlTm9kZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN0eC5pbXBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgaWYgKCFleHBsaWNpdEtleSAmJiAhdGhpcy5jb21tZW50ICYmIHZhbHVlIGluc3RhbmNlb2YgU2NhbGFyKSBjdHguaW5kZW50QXRTdGFydCA9IHN0ci5sZW5ndGggKyAxO1xuICAgICAgY2hvbXBLZWVwID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5kZW50U2VxICYmIGluZGVudFNpemUgPj0gMiAmJiAhY3R4LmluRmxvdyAmJiAhZXhwbGljaXRLZXkgJiYgdmFsdWUgaW5zdGFuY2VvZiBZQU1MU2VxICYmIHZhbHVlLnR5cGUgIT09IFR5cGUuRkxPV19TRVEgJiYgIXZhbHVlLnRhZyAmJiAhZG9jLmFuY2hvcnMuZ2V0TmFtZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gSWYgaW5kZW50U2VxID09PSBmYWxzZSwgY29uc2lkZXIgJy0gJyBhcyBwYXJ0IG9mIGluZGVudGF0aW9uIHdoZXJlIHBvc3NpYmxlXG4gICAgICAgIGN0eC5pbmRlbnQgPSBjdHguaW5kZW50LnN1YnN0cigyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlU3RyID0gc3RyaW5naWZ5KHZhbHVlLCBjdHgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlQ29tbWVudCA9IG51bGw7XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjaG9tcEtlZXAgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICB2YXIgd3MgPSAnICc7XG5cbiAgICAgIGlmICh2Y2IgfHwgdGhpcy5jb21tZW50KSB7XG4gICAgICAgIHdzID0gXCJcIi5jb25jYXQodmNiLCBcIlxcblwiKS5jb25jYXQoY3R4LmluZGVudCk7XG4gICAgICB9IGVsc2UgaWYgKCFleHBsaWNpdEtleSAmJiB2YWx1ZSBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHtcbiAgICAgICAgdmFyIGZsb3cgPSB2YWx1ZVN0clswXSA9PT0gJ1snIHx8IHZhbHVlU3RyWzBdID09PSAneyc7XG4gICAgICAgIGlmICghZmxvdyB8fCB2YWx1ZVN0ci5pbmNsdWRlcygnXFxuJykpIHdzID0gXCJcXG5cIi5jb25jYXQoY3R4LmluZGVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaG9tcEtlZXAgJiYgIXZhbHVlQ29tbWVudCAmJiBvbkNob21wS2VlcCkgb25DaG9tcEtlZXAoKTtcbiAgICAgIHJldHVybiBhZGRDb21tZW50KHN0ciArIHdzICsgdmFsdWVTdHIsIGN0eC5pbmRlbnQsIHZhbHVlQ29tbWVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbW1lbnRCZWZvcmVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleSBpbnN0YW5jZW9mIE5vZGUgPyB0aGlzLmtleS5jb21tZW50QmVmb3JlIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoY2IpIHtcbiAgICAgIGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IG5ldyBTY2FsYXIobnVsbCk7XG4gICAgICBpZiAodGhpcy5rZXkgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLmtleS5jb21tZW50QmVmb3JlID0gY2I7ZWxzZSB7XG4gICAgICAgIHZhciBtc2cgPSAnUGFpci5jb21tZW50QmVmb3JlIGlzIGFuIGFsaWFzIGZvciBQYWlyLmtleS5jb21tZW50QmVmb3JlLiBUbyBzZXQgaXQsIHRoZSBrZXkgbXVzdCBiZSBhIE5vZGUuJztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhaXI7XG59KE5vZGUpO1xuXG5fZGVmaW5lUHJvcGVydHkoUGFpciwgXCJUeXBlXCIsIHtcbiAgUEFJUjogJ1BBSVInLFxuICBNRVJHRV9QQUlSOiAnTUVSR0VfUEFJUidcbn0pO1xuXG52YXIgZ2V0QWxpYXNDb3VudCA9IGZ1bmN0aW9uIGdldEFsaWFzQ291bnQobm9kZSwgYW5jaG9ycykge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIEFsaWFzKSB7XG4gICAgdmFyIGFuY2hvciA9IGFuY2hvcnMuZ2V0KG5vZGUuc291cmNlKTtcbiAgICByZXR1cm4gYW5jaG9yLmNvdW50ICogYW5jaG9yLmFsaWFzQ291bnQ7XG4gIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHtcbiAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG5vZGUuaXRlbXMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICB2YXIgaXRlbSA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgYyA9IGdldEFsaWFzQ291bnQoaXRlbSwgYW5jaG9ycyk7XG4gICAgICAgIGlmIChjID4gY291bnQpIGNvdW50ID0gYztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYWlyKSB7XG4gICAgdmFyIGtjID0gZ2V0QWxpYXNDb3VudChub2RlLmtleSwgYW5jaG9ycyk7XG4gICAgdmFyIHZjID0gZ2V0QWxpYXNDb3VudChub2RlLnZhbHVlLCBhbmNob3JzKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoa2MsIHZjKTtcbiAgfVxuXG4gIHJldHVybiAxO1xufTtcblxudmFyIEFsaWFzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTm9kZSkge1xuICBfaW5oZXJpdHMoQWxpYXMsIF9Ob2RlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEFsaWFzKTtcblxuICBfY3JlYXRlQ2xhc3MoQWxpYXMsIG51bGwsIFt7XG4gICAga2V5OiBcInN0cmluZ2lmeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmdpZnkoX3JlZiwgX3JlZjIpIHtcbiAgICAgIHZhciByYW5nZSA9IF9yZWYucmFuZ2UsXG4gICAgICAgICAgc291cmNlID0gX3JlZi5zb3VyY2U7XG4gICAgICB2YXIgYW5jaG9ycyA9IF9yZWYyLmFuY2hvcnMsXG4gICAgICAgICAgZG9jID0gX3JlZjIuZG9jLFxuICAgICAgICAgIGltcGxpY2l0S2V5ID0gX3JlZjIuaW1wbGljaXRLZXksXG4gICAgICAgICAgaW5TdHJpbmdpZnlLZXkgPSBfcmVmMi5pblN0cmluZ2lmeUtleTtcbiAgICAgIHZhciBhbmNob3IgPSBPYmplY3Qua2V5cyhhbmNob3JzKS5maW5kKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBhbmNob3JzW2FdID09PSBzb3VyY2U7XG4gICAgICB9KTtcbiAgICAgIGlmICghYW5jaG9yICYmIGluU3RyaW5naWZ5S2V5KSBhbmNob3IgPSBkb2MuYW5jaG9ycy5nZXROYW1lKHNvdXJjZSkgfHwgZG9jLmFuY2hvcnMubmV3TmFtZSgpO1xuICAgICAgaWYgKGFuY2hvcikgcmV0dXJuIFwiKlwiLmNvbmNhdChhbmNob3IpLmNvbmNhdChpbXBsaWNpdEtleSA/ICcgJyA6ICcnKTtcbiAgICAgIHZhciBtc2cgPSBkb2MuYW5jaG9ycy5nZXROYW1lKHNvdXJjZSkgPyAnQWxpYXMgbm9kZSBtdXN0IGJlIGFmdGVyIHNvdXJjZSBub2RlJyA6ICdTb3VyY2Ugbm9kZSBub3QgZm91bmQgZm9yIGFsaWFzIG5vZGUnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KG1zZywgXCIgW1wiKS5jb25jYXQocmFuZ2UsIFwiXVwiKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gQWxpYXMoc291cmNlKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFsaWFzKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgIF90aGlzLnR5cGUgPSBUeXBlLkFMSUFTO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBbGlhcywgW3tcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTiQxKGFyZywgY3R4KSB7XG4gICAgICBpZiAoIWN0eCkgcmV0dXJuIHRvSlNPTih0aGlzLnNvdXJjZSwgYXJnLCBjdHgpO1xuICAgICAgdmFyIGFuY2hvcnMgPSBjdHguYW5jaG9ycyxcbiAgICAgICAgICBtYXhBbGlhc0NvdW50ID0gY3R4Lm1heEFsaWFzQ291bnQ7XG4gICAgICB2YXIgYW5jaG9yID0gYW5jaG9ycy5nZXQodGhpcy5zb3VyY2UpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cbiAgICAgIGlmICghYW5jaG9yIHx8IGFuY2hvci5yZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbXNnID0gJ1RoaXMgc2hvdWxkIG5vdCBoYXBwZW46IEFsaWFzIGFuY2hvciB3YXMgbm90IHJlc29sdmVkPyc7XG4gICAgICAgIGlmICh0aGlzLmNzdE5vZGUpIHRocm93IG5ldyBZQU1MUmVmZXJlbmNlRXJyb3IodGhpcy5jc3ROb2RlLCBtc2cpO2Vsc2UgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKG1zZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhBbGlhc0NvdW50ID49IDApIHtcbiAgICAgICAgYW5jaG9yLmNvdW50ICs9IDE7XG4gICAgICAgIGlmIChhbmNob3IuYWxpYXNDb3VudCA9PT0gMCkgYW5jaG9yLmFsaWFzQ291bnQgPSBnZXRBbGlhc0NvdW50KHRoaXMuc291cmNlLCBhbmNob3JzKTtcblxuICAgICAgICBpZiAoYW5jaG9yLmNvdW50ICogYW5jaG9yLmFsaWFzQ291bnQgPiBtYXhBbGlhc0NvdW50KSB7XG4gICAgICAgICAgdmFyIF9tc2cgPSAnRXhjZXNzaXZlIGFsaWFzIGNvdW50IGluZGljYXRlcyBhIHJlc291cmNlIGV4aGF1c3Rpb24gYXR0YWNrJztcbiAgICAgICAgICBpZiAodGhpcy5jc3ROb2RlKSB0aHJvdyBuZXcgWUFNTFJlZmVyZW5jZUVycm9yKHRoaXMuY3N0Tm9kZSwgX21zZyk7ZWxzZSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoX21zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFuY2hvci5yZXM7XG4gICAgfSAvLyBPbmx5IGNhbGxlZCB3aGVuIHN0cmluZ2lmeWluZyBhbiBhbGlhcyBtYXBwaW5nIGtleSB3aGlsZSBjb25zdHJ1Y3RpbmdcbiAgICAvLyBPYmplY3Qgb3V0cHV0LlxuXG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoY3R4KSB7XG4gICAgICByZXR1cm4gQWxpYXMuc3RyaW5naWZ5KHRoaXMsIGN0eCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRhZ1wiLFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWxpYXMgbm9kZXMgY2Fubm90IGhhdmUgdGFncycpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBbGlhcztcbn0oTm9kZSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShBbGlhcywgXCJkZWZhdWx0XCIsIHRydWUpO1xuXG5mdW5jdGlvbiBmaW5kUGFpcihpdGVtcywga2V5KSB7XG4gIHZhciBrID0ga2V5IGluc3RhbmNlb2YgU2NhbGFyID8ga2V5LnZhbHVlIDoga2V5O1xuXG4gIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihpdGVtcyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgaXQgPSBfc3RlcC52YWx1ZTtcblxuICAgICAgaWYgKGl0IGluc3RhbmNlb2YgUGFpcikge1xuICAgICAgICBpZiAoaXQua2V5ID09PSBrZXkgfHwgaXQua2V5ID09PSBrKSByZXR1cm4gaXQ7XG4gICAgICAgIGlmIChpdC5rZXkgJiYgaXQua2V5LnZhbHVlID09PSBrKSByZXR1cm4gaXQ7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxudmFyIFlBTUxNYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db2xsZWN0aW9uKSB7XG4gIF9pbmhlcml0cyhZQU1MTWFwLCBfQ29sbGVjdGlvbik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihZQU1MTWFwKTtcblxuICBmdW5jdGlvbiBZQU1MTWFwKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZQU1MTWFwKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhZQU1MTWFwLCBbe1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKHBhaXIsIG92ZXJ3cml0ZSkge1xuICAgICAgaWYgKCFwYWlyKSBwYWlyID0gbmV3IFBhaXIocGFpcik7ZWxzZSBpZiAoIShwYWlyIGluc3RhbmNlb2YgUGFpcikpIHBhaXIgPSBuZXcgUGFpcihwYWlyLmtleSB8fCBwYWlyLCBwYWlyLnZhbHVlKTtcbiAgICAgIHZhciBwcmV2ID0gZmluZFBhaXIodGhpcy5pdGVtcywgcGFpci5rZXkpO1xuICAgICAgdmFyIHNvcnRFbnRyaWVzID0gdGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEuc29ydE1hcEVudHJpZXM7XG5cbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIGlmIChvdmVyd3JpdGUpIHByZXYudmFsdWUgPSBwYWlyLnZhbHVlO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFwiS2V5IFwiLmNvbmNhdChwYWlyLmtleSwgXCIgYWxyZWFkeSBzZXRcIikpO1xuICAgICAgfSBlbHNlIGlmIChzb3J0RW50cmllcykge1xuICAgICAgICB2YXIgaSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIHNvcnRFbnRyaWVzKHBhaXIsIGl0ZW0pIDwgMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpID09PSAtMSkgdGhpcy5pdGVtcy5wdXNoKHBhaXIpO2Vsc2UgdGhpcy5pdGVtcy5zcGxpY2UoaSwgMCwgcGFpcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2gocGFpcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgdmFyIGl0ID0gZmluZFBhaXIodGhpcy5pdGVtcywga2V5KTtcbiAgICAgIGlmICghaXQpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBkZWwgPSB0aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmluZGV4T2YoaXQpLCAxKTtcbiAgICAgIHJldHVybiBkZWwubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgIHZhciBpdCA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICB2YXIgbm9kZSA9IGl0ICYmIGl0LnZhbHVlO1xuICAgICAgcmV0dXJuICFrZWVwU2NhbGFyICYmIG5vZGUgaW5zdGFuY2VvZiBTY2FsYXIgPyBub2RlLnZhbHVlIDogbm9kZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiAhIWZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5hZGQobmV3IFBhaXIoa2V5LCB2YWx1ZSksIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyp9IGFyZyBpZ25vcmVkXG4gICAgICogQHBhcmFtIHsqfSBjdHggQ29udmVyc2lvbiBjb250ZXh0LCBvcmlnaW5hbGx5IHNldCBpbiBEb2N1bWVudCN0b0pTT04oKVxuICAgICAqIEBwYXJhbSB7Q2xhc3N9IFR5cGUgSWYgc2V0LCBmb3JjZXMgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gdHlwZVxuICAgICAqIEByZXR1cm5zIHsqfSBJbnN0YW5jZSBvZiBUeXBlLCBNYXAsIG9yIE9iamVjdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTihfLCBjdHgsIFR5cGUpIHtcbiAgICAgIHZhciBtYXAgPSBUeXBlID8gbmV3IFR5cGUoKSA6IGN0eCAmJiBjdHgubWFwQXNNYXAgPyBuZXcgTWFwKCkgOiB7fTtcbiAgICAgIGlmIChjdHggJiYgY3R4Lm9uQ3JlYXRlKSBjdHgub25DcmVhdGUobWFwKTtcblxuICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLml0ZW1zKSxcbiAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgaXRlbS5hZGRUb0pTTWFwKGN0eCwgbWFwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgaWYgKCFjdHgpIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcblxuICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLml0ZW1zKSxcbiAgICAgICAgICBfc3RlcDM7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yMy5zKCk7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBfc3RlcDMudmFsdWU7XG4gICAgICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIFBhaXIpKSB0aHJvdyBuZXcgRXJyb3IoXCJNYXAgaXRlbXMgbXVzdCBhbGwgYmUgcGFpcnM7IGZvdW5kIFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShpdGVtKSwgXCIgaW5zdGVhZFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IzLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvcjMuZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoWUFNTE1hcC5wcm90b3R5cGUpLCBcInRvU3RyaW5nXCIsIHRoaXMpLmNhbGwodGhpcywgY3R4LCB7XG4gICAgICAgIGJsb2NrSXRlbTogZnVuY3Rpb24gYmxvY2tJdGVtKG4pIHtcbiAgICAgICAgICByZXR1cm4gbi5zdHI7XG4gICAgICAgIH0sXG4gICAgICAgIGZsb3dDaGFyczoge1xuICAgICAgICAgIHN0YXJ0OiAneycsXG4gICAgICAgICAgZW5kOiAnfSdcbiAgICAgICAgfSxcbiAgICAgICAgaXNNYXA6IHRydWUsXG4gICAgICAgIGl0ZW1JbmRlbnQ6IGN0eC5pbmRlbnQgfHwgJydcbiAgICAgIH0sIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBZQU1MTWFwO1xufShDb2xsZWN0aW9uKTtcblxudmFyIE1FUkdFX0tFWSA9ICc8PCc7XG52YXIgTWVyZ2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYWlyKSB7XG4gIF9pbmhlcml0cyhNZXJnZSwgX1BhaXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTWVyZ2UpO1xuXG4gIGZ1bmN0aW9uIE1lcmdlKHBhaXIpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWVyZ2UpO1xuXG4gICAgaWYgKHBhaXIgaW5zdGFuY2VvZiBQYWlyKSB7XG4gICAgICB2YXIgc2VxID0gcGFpci52YWx1ZTtcblxuICAgICAgaWYgKCEoc2VxIGluc3RhbmNlb2YgWUFNTFNlcSkpIHtcbiAgICAgICAgc2VxID0gbmV3IFlBTUxTZXEoKTtcbiAgICAgICAgc2VxLml0ZW1zLnB1c2gocGFpci52YWx1ZSk7XG4gICAgICAgIHNlcS5yYW5nZSA9IHBhaXIudmFsdWUucmFuZ2U7XG4gICAgICB9XG5cbiAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcGFpci5rZXksIHNlcSk7XG4gICAgICBfdGhpcy5yYW5nZSA9IHBhaXIucmFuZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmV3IFNjYWxhcihNRVJHRV9LRVkpLCBuZXcgWUFNTFNlcSgpKTtcbiAgICB9XG5cbiAgICBfdGhpcy50eXBlID0gUGFpci5UeXBlLk1FUkdFX1BBSVI7XG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTtcbiAgfSAvLyBJZiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgbWVyZ2Uga2V5IGlzIGEgc2luZ2xlIG1hcHBpbmcgbm9kZSwgZWFjaCBvZlxuICAvLyBpdHMga2V5L3ZhbHVlIHBhaXJzIGlzIGluc2VydGVkIGludG8gdGhlIGN1cnJlbnQgbWFwcGluZywgdW5sZXNzIHRoZSBrZXlcbiAgLy8gYWxyZWFkeSBleGlzdHMgaW4gaXQuIElmIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lcmdlIGtleSBpcyBhXG4gIC8vIHNlcXVlbmNlLCB0aGVuIHRoaXMgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBtYXBwaW5nIG5vZGVzIGFuZCBlYWNoXG4gIC8vIG9mIHRoZXNlIG5vZGVzIGlzIG1lcmdlZCBpbiB0dXJuIGFjY29yZGluZyB0byBpdHMgb3JkZXIgaW4gdGhlIHNlcXVlbmNlLlxuICAvLyBLZXlzIGluIG1hcHBpbmcgbm9kZXMgZWFybGllciBpbiB0aGUgc2VxdWVuY2Ugb3ZlcnJpZGUga2V5cyBzcGVjaWZpZWQgaW5cbiAgLy8gbGF0ZXIgbWFwcGluZyBub2Rlcy4gLS0gaHR0cDovL3lhbWwub3JnL3R5cGUvbWVyZ2UuaHRtbFxuXG5cbiAgX2NyZWF0ZUNsYXNzKE1lcmdlLCBbe1xuICAgIGtleTogXCJhZGRUb0pTTWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFRvSlNNYXAoY3R4LCBtYXApIHtcbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnZhbHVlLml0ZW1zKSxcbiAgICAgICAgICBfc3RlcDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gX3N0ZXAudmFsdWUuc291cmNlO1xuICAgICAgICAgIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIFlBTUxNYXApKSB0aHJvdyBuZXcgRXJyb3IoJ01lcmdlIHNvdXJjZXMgbXVzdCBiZSBtYXBzJyk7XG4gICAgICAgICAgdmFyIHNyY01hcCA9IHNvdXJjZS50b0pTT04obnVsbCwgY3R4LCBNYXApO1xuXG4gICAgICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzcmNNYXApLFxuICAgICAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IyLnMoKTsgIShfc3RlcDIgPSBfaXRlcmF0b3IyLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgdmFyIF9zdGVwMiR2YWx1ZSA9IF9zbGljZWRUb0FycmF5KF9zdGVwMi52YWx1ZSwgMiksXG4gICAgICAgICAgICAgICAgICBrZXkgPSBfc3RlcDIkdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9zdGVwMiR2YWx1ZVsxXTtcblxuICAgICAgICAgICAgICBpZiAobWFwIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXAuaGFzKGtleSkpIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgbWFwLmFkZChrZXkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkgbWFwW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIF9pdGVyYXRvcjIuZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZyhjdHgsIG9uQ29tbWVudCkge1xuICAgICAgdmFyIHNlcSA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoc2VxLml0ZW1zLmxlbmd0aCA+IDEpIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihNZXJnZS5wcm90b3R5cGUpLCBcInRvU3RyaW5nXCIsIHRoaXMpLmNhbGwodGhpcywgY3R4LCBvbkNvbW1lbnQpO1xuICAgICAgdGhpcy52YWx1ZSA9IHNlcS5pdGVtc1swXTtcblxuICAgICAgdmFyIHN0ciA9IF9nZXQoX2dldFByb3RvdHlwZU9mKE1lcmdlLnByb3RvdHlwZSksIFwidG9TdHJpbmdcIiwgdGhpcykuY2FsbCh0aGlzLCBjdHgsIG9uQ29tbWVudCk7XG5cbiAgICAgIHRoaXMudmFsdWUgPSBzZXE7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNZXJnZTtcbn0oUGFpcik7XG5cbnZhciBiaW5hcnlPcHRpb25zID0ge1xuICBkZWZhdWx0VHlwZTogVHlwZS5CTE9DS19MSVRFUkFMLFxuICBsaW5lV2lkdGg6IDc2XG59O1xudmFyIGJvb2xPcHRpb25zID0ge1xuICB0cnVlU3RyOiAndHJ1ZScsXG4gIGZhbHNlU3RyOiAnZmFsc2UnXG59O1xudmFyIGludE9wdGlvbnMgPSB7XG4gIGFzQmlnSW50OiBmYWxzZVxufTtcbnZhciBudWxsT3B0aW9ucyA9IHtcbiAgbnVsbFN0cjogJ251bGwnXG59O1xudmFyIHN0ck9wdGlvbnMgPSB7XG4gIGRlZmF1bHRUeXBlOiBUeXBlLlBMQUlOLFxuICBkb3VibGVRdW90ZWQ6IHtcbiAgICBqc29uRW5jb2Rpbmc6IGZhbHNlLFxuICAgIG1pbk11bHRpTGluZUxlbmd0aDogNDBcbiAgfSxcbiAgZm9sZDoge1xuICAgIGxpbmVXaWR0aDogODAsXG4gICAgbWluQ29udGVudFdpZHRoOiAyMFxuICB9XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlU2NhbGFyKHN0ciwgdGFncywgc2NhbGFyRmFsbGJhY2spIHtcbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRhZ3MpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwJHZhbHVlID0gX3N0ZXAudmFsdWUsXG4gICAgICAgICAgZm9ybWF0ID0gX3N0ZXAkdmFsdWUuZm9ybWF0LFxuICAgICAgICAgIHRlc3QgPSBfc3RlcCR2YWx1ZS50ZXN0LFxuICAgICAgICAgIHJlc29sdmUgPSBfc3RlcCR2YWx1ZS5yZXNvbHZlO1xuXG4gICAgICBpZiAodGVzdCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2godGVzdCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdmFyIHJlcyA9IHJlc29sdmUuYXBwbHkobnVsbCwgbWF0Y2gpO1xuICAgICAgICAgIGlmICghKHJlcyBpbnN0YW5jZW9mIFNjYWxhcikpIHJlcyA9IG5ldyBTY2FsYXIocmVzKTtcbiAgICAgICAgICBpZiAoZm9ybWF0KSByZXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvci5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yLmYoKTtcbiAgfVxuXG4gIGlmIChzY2FsYXJGYWxsYmFjaykgc3RyID0gc2NhbGFyRmFsbGJhY2soc3RyKTtcbiAgcmV0dXJuIG5ldyBTY2FsYXIoc3RyKTtcbn1cblxudmFyIEZPTERfRkxPVyA9ICdmbG93JztcbnZhciBGT0xEX0JMT0NLID0gJ2Jsb2NrJztcbnZhciBGT0xEX1FVT1RFRCA9ICdxdW90ZWQnOyAvLyBwcmVzdW1lcyBpKzEgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZVxuLy8gcmV0dXJucyBpbmRleCBvZiBsYXN0IG5ld2xpbmUgaW4gbW9yZS1pbmRlbnRlZCBibG9ja1xuXG52YXIgY29uc3VtZU1vcmVJbmRlbnRlZExpbmVzID0gZnVuY3Rpb24gY29uc3VtZU1vcmVJbmRlbnRlZExpbmVzKHRleHQsIGkpIHtcbiAgdmFyIGNoID0gdGV4dFtpICsgMV07XG5cbiAgd2hpbGUgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgZG8ge1xuICAgICAgY2ggPSB0ZXh0W2kgKz0gMV07XG4gICAgfSB3aGlsZSAoY2ggJiYgY2ggIT09ICdcXG4nKTtcblxuICAgIGNoID0gdGV4dFtpICsgMV07XG4gIH1cblxuICByZXR1cm4gaTtcbn07XG4vKipcbiAqIFRyaWVzIHRvIGtlZXAgaW5wdXQgYXQgdXAgdG8gYGxpbmVXaWR0aGAgY2hhcmFjdGVycywgc3BsaXR0aW5nIG9ubHkgb24gc3BhY2VzXG4gKiBub3QgZm9sbG93ZWQgYnkgbmV3bGluZXMgb3Igc3BhY2VzIHVubGVzcyBgbW9kZWAgaXMgYCdxdW90ZWQnYC4gTGluZXMgYXJlXG4gKiB0ZXJtaW5hdGVkIHdpdGggYFxcbmAgYW5kIHN0YXJ0ZWQgd2l0aCBgaW5kZW50YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudFxuICogQHBhcmFtIHtzdHJpbmd9IFttb2RlPSdmbG93J10gYCdibG9jaydgIHByZXZlbnRzIG1vcmUtaW5kZW50ZWQgbGluZXNcbiAqICAgZnJvbSBiZWluZyBmb2xkZWQ7IGAncXVvdGVkJ2AgYWxsb3dzIGZvciBgXFxgIGVzY2FwZXMsIGluY2x1ZGluZyBlc2NhcGVkXG4gKiAgIG5ld2xpbmVzXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmluZGVudEF0U3RhcnRdIEFjY291bnRzIGZvciBsZWFkaW5nIGNvbnRlbnRzIG9uXG4gKiAgIHRoZSBmaXJzdCBsaW5lLCBkZWZhdWx0aW5nIHRvIGBpbmRlbnQubGVuZ3RoYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxpbmVXaWR0aD04MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5Db250ZW50V2lkdGg9MjBdIEFsbG93IGhpZ2hseSBpbmRlbnRlZCBsaW5lcyB0b1xuICogICBzdHJldGNoIHRoZSBsaW5lIHdpZHRoXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvcHRpb25zLm9uRm9sZCBDYWxsZWQgb25jZSBpZiB0aGUgdGV4dCBpcyBmb2xkZWRcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wdGlvbnMub25Gb2xkIENhbGxlZCBvbmNlIGlmIGFueSBsaW5lIG9mIHRleHQgZXhjZWVkc1xuICogICBsaW5lV2lkdGggY2hhcmFjdGVyc1xuICovXG5cblxuZnVuY3Rpb24gZm9sZEZsb3dMaW5lcyh0ZXh0LCBpbmRlbnQsIG1vZGUsIF9yZWYpIHtcbiAgdmFyIGluZGVudEF0U3RhcnQgPSBfcmVmLmluZGVudEF0U3RhcnQsXG4gICAgICBfcmVmJGxpbmVXaWR0aCA9IF9yZWYubGluZVdpZHRoLFxuICAgICAgbGluZVdpZHRoID0gX3JlZiRsaW5lV2lkdGggPT09IHZvaWQgMCA/IDgwIDogX3JlZiRsaW5lV2lkdGgsXG4gICAgICBfcmVmJG1pbkNvbnRlbnRXaWR0aCA9IF9yZWYubWluQ29udGVudFdpZHRoLFxuICAgICAgbWluQ29udGVudFdpZHRoID0gX3JlZiRtaW5Db250ZW50V2lkdGggPT09IHZvaWQgMCA/IDIwIDogX3JlZiRtaW5Db250ZW50V2lkdGgsXG4gICAgICBvbkZvbGQgPSBfcmVmLm9uRm9sZCxcbiAgICAgIG9uT3ZlcmZsb3cgPSBfcmVmLm9uT3ZlcmZsb3c7XG4gIGlmICghbGluZVdpZHRoIHx8IGxpbmVXaWR0aCA8IDApIHJldHVybiB0ZXh0O1xuICB2YXIgZW5kU3RlcCA9IE1hdGgubWF4KDEgKyBtaW5Db250ZW50V2lkdGgsIDEgKyBsaW5lV2lkdGggLSBpbmRlbnQubGVuZ3RoKTtcbiAgaWYgKHRleHQubGVuZ3RoIDw9IGVuZFN0ZXApIHJldHVybiB0ZXh0O1xuICB2YXIgZm9sZHMgPSBbXTtcbiAgdmFyIGVzY2FwZWRGb2xkcyA9IHt9O1xuICB2YXIgZW5kID0gbGluZVdpZHRoIC0gKHR5cGVvZiBpbmRlbnRBdFN0YXJ0ID09PSAnbnVtYmVyJyA/IGluZGVudEF0U3RhcnQgOiBpbmRlbnQubGVuZ3RoKTtcbiAgdmFyIHNwbGl0ID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldiA9IHVuZGVmaW5lZDtcbiAgdmFyIG92ZXJmbG93ID0gZmFsc2U7XG4gIHZhciBpID0gLTE7XG5cbiAgaWYgKG1vZGUgPT09IEZPTERfQkxPQ0spIHtcbiAgICBpID0gY29uc3VtZU1vcmVJbmRlbnRlZExpbmVzKHRleHQsIGkpO1xuICAgIGlmIChpICE9PSAtMSkgZW5kID0gaSArIGVuZFN0ZXA7XG4gIH1cblxuICBmb3IgKHZhciBjaDsgY2ggPSB0ZXh0W2kgKz0gMV07KSB7XG4gICAgaWYgKG1vZGUgPT09IEZPTERfUVVPVEVEICYmIGNoID09PSAnXFxcXCcpIHtcbiAgICAgIHN3aXRjaCAodGV4dFtpICsgMV0pIHtcbiAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgaSArPSAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgIGkgKz0gNTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICBpICs9IDk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpICs9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgaWYgKG1vZGUgPT09IEZPTERfQkxPQ0spIGkgPSBjb25zdW1lTW9yZUluZGVudGVkTGluZXModGV4dCwgaSk7XG4gICAgICBlbmQgPSBpICsgZW5kU3RlcDtcbiAgICAgIHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2ggPT09ICcgJyAmJiBwcmV2ICYmIHByZXYgIT09ICcgJyAmJiBwcmV2ICE9PSAnXFxuJyAmJiBwcmV2ICE9PSAnXFx0Jykge1xuICAgICAgICAvLyBzcGFjZSBzdXJyb3VuZGVkIGJ5IG5vbi1zcGFjZSBjYW4gYmUgcmVwbGFjZWQgd2l0aCBuZXdsaW5lICsgaW5kZW50XG4gICAgICAgIHZhciBuZXh0ID0gdGV4dFtpICsgMV07XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09ICcgJyAmJiBuZXh0ICE9PSAnXFxuJyAmJiBuZXh0ICE9PSAnXFx0Jykgc3BsaXQgPSBpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA+PSBlbmQpIHtcbiAgICAgICAgaWYgKHNwbGl0KSB7XG4gICAgICAgICAgZm9sZHMucHVzaChzcGxpdCk7XG4gICAgICAgICAgZW5kID0gc3BsaXQgKyBlbmRTdGVwO1xuICAgICAgICAgIHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IEZPTERfUVVPVEVEKSB7XG4gICAgICAgICAgLy8gd2hpdGUtc3BhY2UgY29sbGVjdGVkIGF0IGVuZCBtYXkgc3RyZXRjaCBwYXN0IGxpbmVXaWR0aFxuICAgICAgICAgIHdoaWxlIChwcmV2ID09PSAnICcgfHwgcHJldiA9PT0gJ1xcdCcpIHtcbiAgICAgICAgICAgIHByZXYgPSBjaDtcbiAgICAgICAgICAgIGNoID0gdGV4dFtpICs9IDFdO1xuICAgICAgICAgICAgb3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gaSAtIDIgYWNjb3VudHMgZm9yIG5vdC1kcm9wcGVkIGxhc3QgY2hhciArIG5ld2xpbmUtZXNjYXBpbmcgXFxcblxuXG4gICAgICAgICAgZm9sZHMucHVzaChpIC0gMik7XG4gICAgICAgICAgZXNjYXBlZEZvbGRzW2kgLSAyXSA9IHRydWU7XG4gICAgICAgICAgZW5kID0gaSAtIDIgKyBlbmRTdGVwO1xuICAgICAgICAgIHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByZXYgPSBjaDtcbiAgfVxuXG4gIGlmIChvdmVyZmxvdyAmJiBvbk92ZXJmbG93KSBvbk92ZXJmbG93KCk7XG4gIGlmIChmb2xkcy5sZW5ndGggPT09IDApIHJldHVybiB0ZXh0O1xuICBpZiAob25Gb2xkKSBvbkZvbGQoKTtcbiAgdmFyIHJlcyA9IHRleHQuc2xpY2UoMCwgZm9sZHNbMF0pO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBmb2xkcy5sZW5ndGg7ICsrX2kpIHtcbiAgICB2YXIgZm9sZCA9IGZvbGRzW19pXTtcblxuICAgIHZhciBfZW5kID0gZm9sZHNbX2kgKyAxXSB8fCB0ZXh0Lmxlbmd0aDtcblxuICAgIGlmIChtb2RlID09PSBGT0xEX1FVT1RFRCAmJiBlc2NhcGVkRm9sZHNbZm9sZF0pIHJlcyArPSBcIlwiLmNvbmNhdCh0ZXh0W2ZvbGRdLCBcIlxcXFxcIik7XG4gICAgcmVzICs9IFwiXFxuXCIuY29uY2F0KGluZGVudCkuY29uY2F0KHRleHQuc2xpY2UoZm9sZCArIDEsIF9lbmQpKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbnZhciBnZXRGb2xkT3B0aW9ucyA9IGZ1bmN0aW9uIGdldEZvbGRPcHRpb25zKF9yZWYpIHtcbiAgdmFyIGluZGVudEF0U3RhcnQgPSBfcmVmLmluZGVudEF0U3RhcnQ7XG4gIHJldHVybiBpbmRlbnRBdFN0YXJ0ID8gT2JqZWN0LmFzc2lnbih7XG4gICAgaW5kZW50QXRTdGFydDogaW5kZW50QXRTdGFydFxuICB9LCBzdHJPcHRpb25zLmZvbGQpIDogc3RyT3B0aW9ucy5mb2xkO1xufTsgLy8gQWxzbyBjaGVja3MgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggJSwgYXMgcGFyc2luZyB0aGUgb3V0cHV0IGFzIFlBTUwgMS4xIHdpbGxcbi8vIHByZXN1bWUgdGhhdCdzIHN0YXJ0aW5nIGEgbmV3IGRvY3VtZW50LlxuXG5cbnZhciBjb250YWluc0RvY3VtZW50TWFya2VyID0gZnVuY3Rpb24gY29udGFpbnNEb2N1bWVudE1hcmtlcihzdHIpIHtcbiAgcmV0dXJuIC9eKCV8LS0tfFxcLlxcLlxcLikvbS50ZXN0KHN0cik7XG59O1xuXG5mdW5jdGlvbiBsaW5lTGVuZ3RoT3ZlckxpbWl0KHN0ciwgbGltaXQpIHtcbiAgdmFyIHN0ckxlbiA9IHN0ci5sZW5ndGg7XG4gIGlmIChzdHJMZW4gPD0gbGltaXQpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMCwgc3RhcnQgPSAwOyBpIDwgc3RyTGVuOyArK2kpIHtcbiAgICBpZiAoc3RyW2ldID09PSAnXFxuJykge1xuICAgICAgaWYgKGkgLSBzdGFydCA+IGxpbWl0KSByZXR1cm4gdHJ1ZTtcbiAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICBpZiAoc3RyTGVuIC0gc3RhcnQgPD0gbGltaXQpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZG91YmxlUXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpIHtcbiAgdmFyIGltcGxpY2l0S2V5ID0gY3R4LmltcGxpY2l0S2V5O1xuICB2YXIgX3N0ck9wdGlvbnMkZG91YmxlUXVvID0gc3RyT3B0aW9ucy5kb3VibGVRdW90ZWQsXG4gICAgICBqc29uRW5jb2RpbmcgPSBfc3RyT3B0aW9ucyRkb3VibGVRdW8uanNvbkVuY29kaW5nLFxuICAgICAgbWluTXVsdGlMaW5lTGVuZ3RoID0gX3N0ck9wdGlvbnMkZG91YmxlUXVvLm1pbk11bHRpTGluZUxlbmd0aDtcbiAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIGlmIChqc29uRW5jb2RpbmcpIHJldHVybiBqc29uO1xuICB2YXIgaW5kZW50ID0gY3R4LmluZGVudCB8fCAoY29udGFpbnNEb2N1bWVudE1hcmtlcih2YWx1ZSkgPyAnICAnIDogJycpO1xuICB2YXIgc3RyID0gJyc7XG4gIHZhciBzdGFydCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGNoID0ganNvbltpXTsgY2g7IGNoID0ganNvblsrK2ldKSB7XG4gICAgaWYgKGNoID09PSAnICcgJiYganNvbltpICsgMV0gPT09ICdcXFxcJyAmJiBqc29uW2kgKyAyXSA9PT0gJ24nKSB7XG4gICAgICAvLyBzcGFjZSBiZWZvcmUgbmV3bGluZSBuZWVkcyB0byBiZSBlc2NhcGVkIHRvIG5vdCBiZSBmb2xkZWRcbiAgICAgIHN0ciArPSBqc29uLnNsaWNlKHN0YXJ0LCBpKSArICdcXFxcICc7XG4gICAgICBpICs9IDE7XG4gICAgICBzdGFydCA9IGk7XG4gICAgICBjaCA9ICdcXFxcJztcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdcXFxcJykgc3dpdGNoIChqc29uW2kgKyAxXSkge1xuICAgICAgY2FzZSAndSc6XG4gICAgICAgIHtcbiAgICAgICAgICBzdHIgKz0ganNvbi5zbGljZShzdGFydCwgaSk7XG4gICAgICAgICAgdmFyIGNvZGUgPSBqc29uLnN1YnN0cihpICsgMiwgNCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJzAwMDAnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFwwJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzAwMDcnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxhJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzAwMGInOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFx2JztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzAwMWInOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxlJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzAwODUnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxOJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzAwYTAnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxfJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzIwMjgnOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxMJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJzIwMjknOlxuICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxQJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cigwLCAyKSA9PT0gJzAwJykgc3RyICs9ICdcXFxceCcgKyBjb2RlLnN1YnN0cigyKTtlbHNlIHN0ciArPSBqc29uLnN1YnN0cihpLCA2KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpICs9IDU7XG4gICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbic6XG4gICAgICAgIGlmIChpbXBsaWNpdEtleSB8fCBqc29uW2kgKyAyXSA9PT0gJ1wiJyB8fCBqc29uLmxlbmd0aCA8IG1pbk11bHRpTGluZUxlbmd0aCkge1xuICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBmb2xkaW5nIHdpbGwgZWF0IGZpcnN0IG5ld2xpbmVcbiAgICAgICAgICBzdHIgKz0ganNvbi5zbGljZShzdGFydCwgaSkgKyAnXFxuXFxuJztcblxuICAgICAgICAgIHdoaWxlIChqc29uW2kgKyAyXSA9PT0gJ1xcXFwnICYmIGpzb25baSArIDNdID09PSAnbicgJiYganNvbltpICsgNF0gIT09ICdcIicpIHtcbiAgICAgICAgICAgIHN0ciArPSAnXFxuJztcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gaW5kZW50OyAvLyBzcGFjZSBhZnRlciBuZXdsaW5lIG5lZWRzIHRvIGJlIGVzY2FwZWQgdG8gbm90IGJlIGZvbGRlZFxuXG4gICAgICAgICAgaWYgKGpzb25baSArIDJdID09PSAnICcpIHN0ciArPSAnXFxcXCc7XG4gICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaSArPSAxO1xuICAgIH1cbiAgfVxuXG4gIHN0ciA9IHN0YXJ0ID8gc3RyICsganNvbi5zbGljZShzdGFydCkgOiBqc29uO1xuICByZXR1cm4gaW1wbGljaXRLZXkgPyBzdHIgOiBmb2xkRmxvd0xpbmVzKHN0ciwgaW5kZW50LCBGT0xEX1FVT1RFRCwgZ2V0Rm9sZE9wdGlvbnMoY3R4KSk7XG59XG5cbmZ1bmN0aW9uIHNpbmdsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KSB7XG4gIGlmIChjdHguaW1wbGljaXRLZXkpIHtcbiAgICBpZiAoL1xcbi8udGVzdCh2YWx1ZSkpIHJldHVybiBkb3VibGVRdW90ZWRTdHJpbmcodmFsdWUsIGN0eCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gc2luZ2xlIHF1b3RlZCBzdHJpbmcgY2FuJ3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJvdW5kIG5ld2xpbmVcbiAgICBpZiAoL1sgXFx0XVxcbnxcXG5bIFxcdF0vLnRlc3QodmFsdWUpKSByZXR1cm4gZG91YmxlUXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpO1xuICB9XG5cbiAgdmFyIGluZGVudCA9IGN0eC5pbmRlbnQgfHwgKGNvbnRhaW5zRG9jdW1lbnRNYXJrZXIodmFsdWUpID8gJyAgJyA6ICcnKTtcbiAgdmFyIHJlcyA9IFwiJ1wiICsgdmFsdWUucmVwbGFjZSgvJy9nLCBcIicnXCIpLnJlcGxhY2UoL1xcbisvZywgXCIkJlxcblwiLmNvbmNhdChpbmRlbnQpKSArIFwiJ1wiO1xuICByZXR1cm4gY3R4LmltcGxpY2l0S2V5ID8gcmVzIDogZm9sZEZsb3dMaW5lcyhyZXMsIGluZGVudCwgRk9MRF9GTE9XLCBnZXRGb2xkT3B0aW9ucyhjdHgpKTtcbn1cblxuZnVuY3Rpb24gYmxvY2tTdHJpbmcoX3JlZjIsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICB2YXIgY29tbWVudCA9IF9yZWYyLmNvbW1lbnQsXG4gICAgICB0eXBlID0gX3JlZjIudHlwZSxcbiAgICAgIHZhbHVlID0gX3JlZjIudmFsdWU7XG5cbiAgLy8gMS4gQmxvY2sgY2FuJ3QgZW5kIGluIHdoaXRlc3BhY2UgdW5sZXNzIHRoZSBsYXN0IGxpbmUgaXMgbm9uLWVtcHR5LlxuICAvLyAyLiBTdHJpbmdzIGNvbnNpc3Rpbmcgb2Ygb25seSB3aGl0ZXNwYWNlIGFyZSBiZXN0IHJlbmRlcmVkIGV4cGxpY2l0bHkuXG4gIGlmICgvXFxuW1xcdCBdKyQvLnRlc3QodmFsdWUpIHx8IC9eXFxzKiQvLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgfVxuXG4gIHZhciBpbmRlbnQgPSBjdHguaW5kZW50IHx8IChjdHguZm9yY2VCbG9ja0luZGVudCB8fCBjb250YWluc0RvY3VtZW50TWFya2VyKHZhbHVlKSA/ICcgICcgOiAnJyk7XG4gIHZhciBpbmRlbnRTaXplID0gaW5kZW50ID8gJzInIDogJzEnOyAvLyByb290IGlzIGF0IC0xXG5cbiAgdmFyIGxpdGVyYWwgPSB0eXBlID09PSBUeXBlLkJMT0NLX0ZPTERFRCA/IGZhbHNlIDogdHlwZSA9PT0gVHlwZS5CTE9DS19MSVRFUkFMID8gdHJ1ZSA6ICFsaW5lTGVuZ3RoT3ZlckxpbWl0KHZhbHVlLCBzdHJPcHRpb25zLmZvbGQubGluZVdpZHRoIC0gaW5kZW50Lmxlbmd0aCk7XG4gIHZhciBoZWFkZXIgPSBsaXRlcmFsID8gJ3wnIDogJz4nO1xuICBpZiAoIXZhbHVlKSByZXR1cm4gaGVhZGVyICsgJ1xcbic7XG4gIHZhciB3c1N0YXJ0ID0gJyc7XG4gIHZhciB3c0VuZCA9ICcnO1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tcXG5cXHQgXSokLywgZnVuY3Rpb24gKHdzKSB7XG4gICAgdmFyIG4gPSB3cy5pbmRleE9mKCdcXG4nKTtcblxuICAgIGlmIChuID09PSAtMSkge1xuICAgICAgaGVhZGVyICs9ICctJzsgLy8gc3RyaXBcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB3cyB8fCBuICE9PSB3cy5sZW5ndGggLSAxKSB7XG4gICAgICBoZWFkZXIgKz0gJysnOyAvLyBrZWVwXG5cbiAgICAgIGlmIChvbkNob21wS2VlcCkgb25DaG9tcEtlZXAoKTtcbiAgICB9XG5cbiAgICB3c0VuZCA9IHdzLnJlcGxhY2UoL1xcbiQvLCAnJyk7XG4gICAgcmV0dXJuICcnO1xuICB9KS5yZXBsYWNlKC9eW1xcbiBdKi8sIGZ1bmN0aW9uICh3cykge1xuICAgIGlmICh3cy5pbmRleE9mKCcgJykgIT09IC0xKSBoZWFkZXIgKz0gaW5kZW50U2l6ZTtcbiAgICB2YXIgbSA9IHdzLm1hdGNoKC8gKyQvKTtcblxuICAgIGlmIChtKSB7XG4gICAgICB3c1N0YXJ0ID0gd3Muc2xpY2UoMCwgLW1bMF0ubGVuZ3RoKTtcbiAgICAgIHJldHVybiBtWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB3c1N0YXJ0ID0gd3M7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9KTtcbiAgaWYgKHdzRW5kKSB3c0VuZCA9IHdzRW5kLnJlcGxhY2UoL1xcbisoPyFcXG58JCkvZywgXCIkJlwiLmNvbmNhdChpbmRlbnQpKTtcbiAgaWYgKHdzU3RhcnQpIHdzU3RhcnQgPSB3c1N0YXJ0LnJlcGxhY2UoL1xcbisvZywgXCIkJlwiLmNvbmNhdChpbmRlbnQpKTtcblxuICBpZiAoY29tbWVudCkge1xuICAgIGhlYWRlciArPSAnICMnICsgY29tbWVudC5yZXBsYWNlKC8gP1tcXHJcXG5dKy9nLCAnICcpO1xuICAgIGlmIChvbkNvbW1lbnQpIG9uQ29tbWVudCgpO1xuICB9XG5cbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCIuY29uY2F0KGhlYWRlcikuY29uY2F0KGluZGVudFNpemUsIFwiXFxuXCIpLmNvbmNhdChpbmRlbnQpLmNvbmNhdCh3c0VuZCk7XG5cbiAgaWYgKGxpdGVyYWwpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgXCIkJlwiLmNvbmNhdChpbmRlbnQpKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoaGVhZGVyLCBcIlxcblwiKS5jb25jYXQoaW5kZW50KS5jb25jYXQod3NTdGFydCkuY29uY2F0KHZhbHVlKS5jb25jYXQod3NFbmQpO1xuICB9XG5cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXG4rL2csICdcXG4kJicpLnJlcGxhY2UoLyg/Ol58XFxuKShbXFx0IF0uKikoPzooW1xcblxcdCBdKilcXG4oPyFbXFxuXFx0IF0pKT8vZywgJyQxJDInKSAvLyBtb3JlLWluZGVudGVkIGxpbmVzIGFyZW4ndCBmb2xkZWRcbiAgLy8gICAgICAgICBeIGluZC5saW5lICBeIGVtcHR5ICAgICBeIGNhcHR1cmUgbmV4dCBlbXB0eSBsaW5lcyBvbmx5IGF0IGVuZCBvZiBpbmRlbnRcbiAgLnJlcGxhY2UoL1xcbisvZywgXCIkJlwiLmNvbmNhdChpbmRlbnQpKTtcbiAgdmFyIGJvZHkgPSBmb2xkRmxvd0xpbmVzKFwiXCIuY29uY2F0KHdzU3RhcnQpLmNvbmNhdCh2YWx1ZSkuY29uY2F0KHdzRW5kKSwgaW5kZW50LCBGT0xEX0JMT0NLLCBzdHJPcHRpb25zLmZvbGQpO1xuICByZXR1cm4gXCJcIi5jb25jYXQoaGVhZGVyLCBcIlxcblwiKS5jb25jYXQoaW5kZW50KS5jb25jYXQoYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBsYWluU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICB2YXIgY29tbWVudCA9IGl0ZW0uY29tbWVudCxcbiAgICAgIHR5cGUgPSBpdGVtLnR5cGUsXG4gICAgICB2YWx1ZSA9IGl0ZW0udmFsdWU7XG4gIHZhciBhY3R1YWxTdHJpbmcgPSBjdHguYWN0dWFsU3RyaW5nLFxuICAgICAgaW1wbGljaXRLZXkgPSBjdHguaW1wbGljaXRLZXksXG4gICAgICBpbmRlbnQgPSBjdHguaW5kZW50LFxuICAgICAgaW5GbG93ID0gY3R4LmluRmxvdztcblxuICBpZiAoaW1wbGljaXRLZXkgJiYgL1tcXG5bXFxde30sXS8udGVzdCh2YWx1ZSkgfHwgaW5GbG93ICYmIC9bW1xcXXt9LF0vLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgfVxuXG4gIGlmICghdmFsdWUgfHwgL15bXFxuXFx0ICxbXFxde30jJiohfD4nXCIlQGBdfF5bPy1dJHxeWz8tXVsgXFx0XXxbXFxuOl1bIFxcdF18WyBcXHRdXFxufFtcXG5cXHQgXSN8W1xcblxcdCA6XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgLy8gbm90IGFsbG93ZWQ6XG4gICAgLy8gLSBlbXB0eSBzdHJpbmcsICctJyBvciAnPydcbiAgICAvLyAtIHN0YXJ0IHdpdGggYW4gaW5kaWNhdG9yIGNoYXJhY3RlciAoZXhjZXB0IFs/Oi1dKSBvciAvWz8tXSAvXG4gICAgLy8gLSAnXFxuICcsICc6ICcgb3IgJyBcXG4nIGFueXdoZXJlXG4gICAgLy8gLSAnIycgbm90IHByZWNlZGVkIGJ5IGEgbm9uLXNwYWNlIGNoYXJcbiAgICAvLyAtIGVuZCB3aXRoICcgJyBvciAnOidcbiAgICByZXR1cm4gaW1wbGljaXRLZXkgfHwgaW5GbG93IHx8IHZhbHVlLmluZGV4T2YoJ1xcbicpID09PSAtMSA/IHZhbHVlLmluZGV4T2YoJ1wiJykgIT09IC0xICYmIHZhbHVlLmluZGV4T2YoXCInXCIpID09PSAtMSA/IHNpbmdsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KSA6IGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KSA6IGJsb2NrU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gIH1cblxuICBpZiAoIWltcGxpY2l0S2V5ICYmICFpbkZsb3cgJiYgdHlwZSAhPT0gVHlwZS5QTEFJTiAmJiB2YWx1ZS5pbmRleE9mKCdcXG4nKSAhPT0gLTEpIHtcbiAgICAvLyBXaGVyZSBhbGxvd2VkICYgdHlwZSBub3Qgc2V0IGV4cGxpY2l0bHksIHByZWZlciBibG9jayBzdHlsZSBmb3IgbXVsdGlsaW5lIHN0cmluZ3NcbiAgICByZXR1cm4gYmxvY2tTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgfVxuXG4gIGlmIChpbmRlbnQgPT09ICcnICYmIGNvbnRhaW5zRG9jdW1lbnRNYXJrZXIodmFsdWUpKSB7XG4gICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSB0cnVlO1xuICAgIHJldHVybiBibG9ja1N0cmluZyhpdGVtLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICB9XG5cbiAgdmFyIHN0ciA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgXCIkJlxcblwiLmNvbmNhdChpbmRlbnQpKTsgLy8gVmVyaWZ5IHRoYXQgb3V0cHV0IHdpbGwgYmUgcGFyc2VkIGFzIGEgc3RyaW5nLCBhcyBlLmcuIHBsYWluIG51bWJlcnMgYW5kXG4gIC8vIGJvb2xlYW5zIGdldCBwYXJzZWQgd2l0aCB0aG9zZSB0eXBlcyBpbiB2MS4yIChlLmcuICc0MicsICd0cnVlJyAmICcwLjllLTMnKSxcbiAgLy8gYW5kIG90aGVycyBpbiB2MS4xLlxuXG4gIGlmIChhY3R1YWxTdHJpbmcpIHtcbiAgICB2YXIgdGFncyA9IGN0eC5kb2Muc2NoZW1hLnRhZ3M7XG4gICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVNjYWxhcihzdHIsIHRhZ3MsIHRhZ3Muc2NhbGFyRmFsbGJhY2spLnZhbHVlO1xuICAgIGlmICh0eXBlb2YgcmVzb2x2ZWQgIT09ICdzdHJpbmcnKSByZXR1cm4gZG91YmxlUXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpO1xuICB9XG5cbiAgdmFyIGJvZHkgPSBpbXBsaWNpdEtleSA/IHN0ciA6IGZvbGRGbG93TGluZXMoc3RyLCBpbmRlbnQsIEZPTERfRkxPVywgZ2V0Rm9sZE9wdGlvbnMoY3R4KSk7XG5cbiAgaWYgKGNvbW1lbnQgJiYgIWluRmxvdyAmJiAoYm9keS5pbmRleE9mKCdcXG4nKSAhPT0gLTEgfHwgY29tbWVudC5pbmRleE9mKCdcXG4nKSAhPT0gLTEpKSB7XG4gICAgaWYgKG9uQ29tbWVudCkgb25Db21tZW50KCk7XG4gICAgcmV0dXJuIGFkZENvbW1lbnRCZWZvcmUoYm9keSwgaW5kZW50LCBjb21tZW50KTtcbiAgfVxuXG4gIHJldHVybiBib2R5O1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gIHZhciBkZWZhdWx0VHlwZSA9IHN0ck9wdGlvbnMuZGVmYXVsdFR5cGU7XG4gIHZhciBpbXBsaWNpdEtleSA9IGN0eC5pbXBsaWNpdEtleSxcbiAgICAgIGluRmxvdyA9IGN0eC5pbkZsb3c7XG4gIHZhciBfaXRlbSA9IGl0ZW0sXG4gICAgICB0eXBlID0gX2l0ZW0udHlwZSxcbiAgICAgIHZhbHVlID0gX2l0ZW0udmFsdWU7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0sIHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9zdHJpbmdpZnkgPSBmdW5jdGlvbiBfc3RyaW5naWZ5KF90eXBlKSB7XG4gICAgc3dpdGNoIChfdHlwZSkge1xuICAgICAgY2FzZSBUeXBlLkJMT0NLX0ZPTERFRDpcbiAgICAgIGNhc2UgVHlwZS5CTE9DS19MSVRFUkFMOlxuICAgICAgICByZXR1cm4gYmxvY2tTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcblxuICAgICAgY2FzZSBUeXBlLlFVT1RFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuIGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcblxuICAgICAgY2FzZSBUeXBlLlFVT1RFX1NJTkdMRTpcbiAgICAgICAgcmV0dXJuIHNpbmdsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcblxuICAgICAgY2FzZSBUeXBlLlBMQUlOOlxuICAgICAgICByZXR1cm4gcGxhaW5TdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGlmICh0eXBlICE9PSBUeXBlLlFVT1RFX0RPVUJMRSAmJiAvW1xceDAwLVxceDA4XFx4MGItXFx4MWZcXHg3Zi1cXHg5Zl0vLnRlc3QodmFsdWUpKSB7XG4gICAgLy8gZm9yY2UgZG91YmxlIHF1b3RlcyBvbiBjb250cm9sIGNoYXJhY3RlcnNcbiAgICB0eXBlID0gVHlwZS5RVU9URV9ET1VCTEU7XG4gIH0gZWxzZSBpZiAoKGltcGxpY2l0S2V5IHx8IGluRmxvdykgJiYgKHR5cGUgPT09IFR5cGUuQkxPQ0tfRk9MREVEIHx8IHR5cGUgPT09IFR5cGUuQkxPQ0tfTElURVJBTCkpIHtcbiAgICAvLyBzaG91bGQgbm90IGhhcHBlbjsgYmxvY2tzIGFyZSBub3QgdmFsaWQgaW5zaWRlIGZsb3cgY29udGFpbmVyc1xuICAgIHR5cGUgPSBUeXBlLlFVT1RFX0RPVUJMRTtcbiAgfVxuXG4gIHZhciByZXMgPSBfc3RyaW5naWZ5KHR5cGUpO1xuXG4gIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICByZXMgPSBfc3RyaW5naWZ5KGRlZmF1bHRUeXBlKTtcbiAgICBpZiAocmVzID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBkZWZhdWx0IHN0cmluZyB0eXBlIFwiLmNvbmNhdChkZWZhdWx0VHlwZSkpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5TnVtYmVyKF9yZWYpIHtcbiAgdmFyIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBfcmVmLm1pbkZyYWN0aW9uRGlnaXRzLFxuICAgICAgdGFnID0gX3JlZi50YWcsXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHJldHVybiBpc05hTih2YWx1ZSkgPyAnLm5hbicgOiB2YWx1ZSA8IDAgPyAnLS5pbmYnIDogJy5pbmYnO1xuICB2YXIgbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICBpZiAoIWZvcm1hdCAmJiBtaW5GcmFjdGlvbkRpZ2l0cyAmJiAoIXRhZyB8fCB0YWcgPT09ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcpICYmIC9eXFxkLy50ZXN0KG4pKSB7XG4gICAgdmFyIGkgPSBuLmluZGV4T2YoJy4nKTtcblxuICAgIGlmIChpIDwgMCkge1xuICAgICAgaSA9IG4ubGVuZ3RoO1xuICAgICAgbiArPSAnLic7XG4gICAgfVxuXG4gICAgdmFyIGQgPSBtaW5GcmFjdGlvbkRpZ2l0cyAtIChuLmxlbmd0aCAtIGkgLSAxKTtcblxuICAgIHdoaWxlIChkLS0gPiAwKSB7XG4gICAgICBuICs9ICcwJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gY2hlY2tGbG93Q29sbGVjdGlvbkVuZChlcnJvcnMsIGNzdCkge1xuICB2YXIgY2hhciwgbmFtZTtcblxuICBzd2l0Y2ggKGNzdC50eXBlKSB7XG4gICAgY2FzZSBUeXBlLkZMT1dfTUFQOlxuICAgICAgY2hhciA9ICd9JztcbiAgICAgIG5hbWUgPSAnZmxvdyBtYXAnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFR5cGUuRkxPV19TRVE6XG4gICAgICBjaGFyID0gJ10nO1xuICAgICAgbmFtZSA9ICdmbG93IHNlcXVlbmNlJztcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihjc3QsICdOb3QgYSBmbG93IGNvbGxlY3Rpb24hPycpKTtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBsYXN0SXRlbTtcblxuICBmb3IgKHZhciBpID0gY3N0Lml0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgdmFyIGl0ZW0gPSBjc3QuaXRlbXNbaV07XG5cbiAgICBpZiAoIWl0ZW0gfHwgaXRlbS50eXBlICE9PSBUeXBlLkNPTU1FTlQpIHtcbiAgICAgIGxhc3RJdGVtID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0SXRlbSAmJiBsYXN0SXRlbS5jaGFyICE9PSBjaGFyKSB7XG4gICAgdmFyIG1zZyA9IFwiRXhwZWN0ZWQgXCIuY29uY2F0KG5hbWUsIFwiIHRvIGVuZCB3aXRoIFwiKS5jb25jYXQoY2hhcik7XG4gICAgdmFyIGVycjtcblxuICAgIGlmICh0eXBlb2YgbGFzdEl0ZW0ub2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyID0gbmV3IFlBTUxTZW1hbnRpY0Vycm9yKGNzdCwgbXNnKTtcbiAgICAgIGVyci5vZmZzZXQgPSBsYXN0SXRlbS5vZmZzZXQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnIgPSBuZXcgWUFNTFNlbWFudGljRXJyb3IobGFzdEl0ZW0sIG1zZyk7XG4gICAgICBpZiAobGFzdEl0ZW0ucmFuZ2UgJiYgbGFzdEl0ZW0ucmFuZ2UuZW5kKSBlcnIub2Zmc2V0ID0gbGFzdEl0ZW0ucmFuZ2UuZW5kIC0gbGFzdEl0ZW0ucmFuZ2Uuc3RhcnQ7XG4gICAgfVxuXG4gICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tGbG93Q29tbWVudFNwYWNlKGVycm9ycywgY29tbWVudCkge1xuICB2YXIgcHJldiA9IGNvbW1lbnQuY29udGV4dC5zcmNbY29tbWVudC5yYW5nZS5zdGFydCAtIDFdO1xuXG4gIGlmIChwcmV2ICE9PSAnXFxuJyAmJiBwcmV2ICE9PSAnXFx0JyAmJiBwcmV2ICE9PSAnICcpIHtcbiAgICB2YXIgbXNnID0gJ0NvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMnO1xuICAgIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihjb21tZW50LCBtc2cpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TG9uZ0tleUVycm9yKHNvdXJjZSwga2V5KSB7XG4gIHZhciBzayA9IFN0cmluZyhrZXkpO1xuICB2YXIgayA9IHNrLnN1YnN0cigwLCA4KSArICcuLi4nICsgc2suc3Vic3RyKC04KTtcbiAgcmV0dXJuIG5ldyBZQU1MU2VtYW50aWNFcnJvcihzb3VyY2UsIFwiVGhlIFxcXCJcIi5jb25jYXQoaywgXCJcXFwiIGtleSBpcyB0b28gbG9uZ1wiKSk7XG59XG5mdW5jdGlvbiByZXNvbHZlQ29tbWVudHMoY29sbGVjdGlvbiwgY29tbWVudHMpIHtcbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGNvbW1lbnRzKSxcbiAgICAgIF9zdGVwO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgIHZhciBfc3RlcCR2YWx1ZSA9IF9zdGVwLnZhbHVlLFxuICAgICAgICAgIGFmdGVyS2V5ID0gX3N0ZXAkdmFsdWUuYWZ0ZXJLZXksXG4gICAgICAgICAgYmVmb3JlID0gX3N0ZXAkdmFsdWUuYmVmb3JlLFxuICAgICAgICAgIGNvbW1lbnQgPSBfc3RlcCR2YWx1ZS5jb21tZW50O1xuICAgICAgdmFyIGl0ZW0gPSBjb2xsZWN0aW9uLml0ZW1zW2JlZm9yZV07XG5cbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBpZiAoY29tbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGNvbGxlY3Rpb24uY29tbWVudCkgY29sbGVjdGlvbi5jb21tZW50ICs9ICdcXG4nICsgY29tbWVudDtlbHNlIGNvbGxlY3Rpb24uY29tbWVudCA9IGNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhZnRlcktleSAmJiBpdGVtLnZhbHVlKSBpdGVtID0gaXRlbS52YWx1ZTtcblxuICAgICAgICBpZiAoY29tbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGFmdGVyS2V5IHx8ICFpdGVtLmNvbW1lbnRCZWZvcmUpIGl0ZW0uc3BhY2VCZWZvcmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpdGVtLmNvbW1lbnRCZWZvcmUpIGl0ZW0uY29tbWVudEJlZm9yZSArPSAnXFxuJyArIGNvbW1lbnQ7ZWxzZSBpdGVtLmNvbW1lbnRCZWZvcmUgPSBjb21tZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cbn1cblxuLy8gb24gZXJyb3IsIHdpbGwgcmV0dXJuIHsgc3RyOiBzdHJpbmcsIGVycm9yczogRXJyb3JbXSB9XG5mdW5jdGlvbiByZXNvbHZlU3RyaW5nKGRvYywgbm9kZSkge1xuICB2YXIgcmVzID0gbm9kZS5zdHJWYWx1ZTtcbiAgaWYgKCFyZXMpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSByZXR1cm4gcmVzO1xuICByZXMuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaWYgKCFlcnJvci5zb3VyY2UpIGVycm9yLnNvdXJjZSA9IG5vZGU7XG4gICAgZG9jLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgfSk7XG4gIHJldHVybiByZXMuc3RyO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVGFnSGFuZGxlKGRvYywgbm9kZSkge1xuICB2YXIgX25vZGUkdGFnID0gbm9kZS50YWcsXG4gICAgICBoYW5kbGUgPSBfbm9kZSR0YWcuaGFuZGxlLFxuICAgICAgc3VmZml4ID0gX25vZGUkdGFnLnN1ZmZpeDtcbiAgdmFyIHByZWZpeCA9IGRvYy50YWdQcmVmaXhlcy5maW5kKGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHAuaGFuZGxlID09PSBoYW5kbGU7XG4gIH0pO1xuXG4gIGlmICghcHJlZml4KSB7XG4gICAgdmFyIGR0cCA9IGRvYy5nZXREZWZhdWx0cygpLnRhZ1ByZWZpeGVzO1xuICAgIGlmIChkdHApIHByZWZpeCA9IGR0cC5maW5kKGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gcC5oYW5kbGUgPT09IGhhbmRsZTtcbiAgICB9KTtcbiAgICBpZiAoIXByZWZpeCkgdGhyb3cgbmV3IFlBTUxTZW1hbnRpY0Vycm9yKG5vZGUsIFwiVGhlIFwiLmNvbmNhdChoYW5kbGUsIFwiIHRhZyBoYW5kbGUgaXMgbm9uLWRlZmF1bHQgYW5kIHdhcyBub3QgZGVjbGFyZWQuXCIpKTtcbiAgfVxuXG4gIGlmICghc3VmZml4KSB0aHJvdyBuZXcgWUFNTFNlbWFudGljRXJyb3Iobm9kZSwgXCJUaGUgXCIuY29uY2F0KGhhbmRsZSwgXCIgdGFnIGhhcyBubyBzdWZmaXguXCIpKTtcblxuICBpZiAoaGFuZGxlID09PSAnIScgJiYgKGRvYy52ZXJzaW9uIHx8IGRvYy5vcHRpb25zLnZlcnNpb24pID09PSAnMS4wJykge1xuICAgIGlmIChzdWZmaXhbMF0gPT09ICdeJykge1xuICAgICAgZG9jLndhcm5pbmdzLnB1c2gobmV3IFlBTUxXYXJuaW5nKG5vZGUsICdZQU1MIDEuMCBeIHRhZyBleHBhbnNpb24gaXMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgIHJldHVybiBzdWZmaXg7XG4gICAgfVxuXG4gICAgaWYgKC9bOi9dLy50ZXN0KHN1ZmZpeCkpIHtcbiAgICAgIC8vIHdvcmQvZm9vIC0+IHRhZzp3b3JkLnlhbWwub3JnLDIwMDI6Zm9vXG4gICAgICB2YXIgdm9jYWIgPSBzdWZmaXgubWF0Y2goL14oW2EtejAtOS1dKylcXC8oLiopL2kpO1xuICAgICAgcmV0dXJuIHZvY2FiID8gXCJ0YWc6XCIuY29uY2F0KHZvY2FiWzFdLCBcIi55YW1sLm9yZywyMDAyOlwiKS5jb25jYXQodm9jYWJbMl0pIDogXCJ0YWc6XCIuY29uY2F0KHN1ZmZpeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWZpeC5wcmVmaXggKyBkZWNvZGVVUklDb21wb25lbnQoc3VmZml4KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRhZ05hbWUoZG9jLCBub2RlKSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZyxcbiAgICAgIHR5cGUgPSBub2RlLnR5cGU7XG4gIHZhciBub25TcGVjaWZpYyA9IGZhbHNlO1xuXG4gIGlmICh0YWcpIHtcbiAgICB2YXIgaGFuZGxlID0gdGFnLmhhbmRsZSxcbiAgICAgICAgc3VmZml4ID0gdGFnLnN1ZmZpeCxcbiAgICAgICAgdmVyYmF0aW0gPSB0YWcudmVyYmF0aW07XG5cbiAgICBpZiAodmVyYmF0aW0pIHtcbiAgICAgIGlmICh2ZXJiYXRpbSAhPT0gJyEnICYmIHZlcmJhdGltICE9PSAnISEnKSByZXR1cm4gdmVyYmF0aW07XG4gICAgICB2YXIgbXNnID0gXCJWZXJiYXRpbSB0YWdzIGFyZW4ndCByZXNvbHZlZCwgc28gXCIuY29uY2F0KHZlcmJhdGltLCBcIiBpcyBpbnZhbGlkLlwiKTtcbiAgICAgIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3Iobm9kZSwgbXNnKSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGUgPT09ICchJyAmJiAhc3VmZml4KSB7XG4gICAgICBub25TcGVjaWZpYyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVGFnSGFuZGxlKGRvYywgbm9kZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBkb2MuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVHlwZS5CTE9DS19GT0xERUQ6XG4gICAgY2FzZSBUeXBlLkJMT0NLX0xJVEVSQUw6XG4gICAgY2FzZSBUeXBlLlFVT1RFX0RPVUJMRTpcbiAgICBjYXNlIFR5cGUuUVVPVEVfU0lOR0xFOlxuICAgICAgcmV0dXJuIGRlZmF1bHRUYWdzLlNUUjtcblxuICAgIGNhc2UgVHlwZS5GTE9XX01BUDpcbiAgICBjYXNlIFR5cGUuTUFQOlxuICAgICAgcmV0dXJuIGRlZmF1bHRUYWdzLk1BUDtcblxuICAgIGNhc2UgVHlwZS5GTE9XX1NFUTpcbiAgICBjYXNlIFR5cGUuU0VROlxuICAgICAgcmV0dXJuIGRlZmF1bHRUYWdzLlNFUTtcblxuICAgIGNhc2UgVHlwZS5QTEFJTjpcbiAgICAgIHJldHVybiBub25TcGVjaWZpYyA/IGRlZmF1bHRUYWdzLlNUUiA6IG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUJ5VGFnTmFtZShkb2MsIG5vZGUsIHRhZ05hbWUpIHtcbiAgdmFyIHRhZ3MgPSBkb2Muc2NoZW1hLnRhZ3M7XG4gIHZhciBtYXRjaFdpdGhUZXN0ID0gW107XG5cbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRhZ3MpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgdmFyIHRhZyA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICBpZiAodGFnLnRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICBpZiAodGFnLnRlc3QpIG1hdGNoV2l0aFRlc3QucHVzaCh0YWcpO2Vsc2Uge1xuICAgICAgICAgIHZhciByZXMgPSB0YWcucmVzb2x2ZShkb2MsIG5vZGUpO1xuICAgICAgICAgIHJldHVybiByZXMgaW5zdGFuY2VvZiBDb2xsZWN0aW9uID8gcmVzIDogbmV3IFNjYWxhcihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICB2YXIgc3RyID0gcmVzb2x2ZVN0cmluZyhkb2MsIG5vZGUpO1xuICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgbWF0Y2hXaXRoVGVzdC5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZVNjYWxhcihzdHIsIG1hdGNoV2l0aFRlc3QsIHRhZ3Muc2NhbGFyRmFsbGJhY2spO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tUYWdOYW1lKF9yZWYpIHtcbiAgdmFyIHR5cGUgPSBfcmVmLnR5cGU7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBUeXBlLkZMT1dfTUFQOlxuICAgIGNhc2UgVHlwZS5NQVA6XG4gICAgICByZXR1cm4gZGVmYXVsdFRhZ3MuTUFQO1xuXG4gICAgY2FzZSBUeXBlLkZMT1dfU0VROlxuICAgIGNhc2UgVHlwZS5TRVE6XG4gICAgICByZXR1cm4gZGVmYXVsdFRhZ3MuU0VRO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0VGFncy5TVFI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRhZyhkb2MsIG5vZGUsIHRhZ05hbWUpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcmVzID0gcmVzb2x2ZUJ5VGFnTmFtZShkb2MsIG5vZGUsIHRhZ05hbWUpO1xuXG4gICAgaWYgKHJlcykge1xuICAgICAgaWYgKHRhZ05hbWUgJiYgbm9kZS50YWcpIHJlcy50YWcgPSB0YWdOYW1lO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFlcnJvci5zb3VyY2UpIGVycm9yLnNvdXJjZSA9IG5vZGU7XG4gICAgZG9jLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmFyIGZhbGxiYWNrID0gZ2V0RmFsbGJhY2tUYWdOYW1lKG5vZGUpO1xuICAgIGlmICghZmFsbGJhY2spIHRocm93IG5ldyBFcnJvcihcIlRoZSB0YWcgXCIuY29uY2F0KHRhZ05hbWUsIFwiIGlzIHVuYXZhaWxhYmxlXCIpKTtcbiAgICB2YXIgbXNnID0gXCJUaGUgdGFnIFwiLmNvbmNhdCh0YWdOYW1lLCBcIiBpcyB1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIFwiKS5jb25jYXQoZmFsbGJhY2spO1xuICAgIGRvYy53YXJuaW5ncy5wdXNoKG5ldyBZQU1MV2FybmluZyhub2RlLCBtc2cpKTtcblxuICAgIHZhciBfcmVzID0gcmVzb2x2ZUJ5VGFnTmFtZShkb2MsIG5vZGUsIGZhbGxiYWNrKTtcblxuICAgIF9yZXMudGFnID0gdGFnTmFtZTtcbiAgICByZXR1cm4gX3JlcztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB2YXIgcmVmRXJyb3IgPSBuZXcgWUFNTFJlZmVyZW5jZUVycm9yKG5vZGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgIHJlZkVycm9yLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgZG9jLmVycm9ycy5wdXNoKHJlZkVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG52YXIgaXNDb2xsZWN0aW9uSXRlbSA9IGZ1bmN0aW9uIGlzQ29sbGVjdGlvbkl0ZW0obm9kZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcbiAgdmFyIHR5cGUgPSBub2RlLnR5cGU7XG4gIHJldHVybiB0eXBlID09PSBUeXBlLk1BUF9LRVkgfHwgdHlwZSA9PT0gVHlwZS5NQVBfVkFMVUUgfHwgdHlwZSA9PT0gVHlwZS5TRVFfSVRFTTtcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVOb2RlUHJvcHMoZXJyb3JzLCBub2RlKSB7XG4gIHZhciBjb21tZW50cyA9IHtcbiAgICBiZWZvcmU6IFtdLFxuICAgIGFmdGVyOiBbXVxuICB9O1xuICB2YXIgaGFzQW5jaG9yID0gZmFsc2U7XG4gIHZhciBoYXNUYWcgPSBmYWxzZTtcbiAgdmFyIHByb3BzID0gaXNDb2xsZWN0aW9uSXRlbShub2RlLmNvbnRleHQucGFyZW50KSA/IG5vZGUuY29udGV4dC5wYXJlbnQucHJvcHMuY29uY2F0KG5vZGUucHJvcHMpIDogbm9kZS5wcm9wcztcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocHJvcHMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwJHZhbHVlID0gX3N0ZXAudmFsdWUsXG4gICAgICAgICAgc3RhcnQgPSBfc3RlcCR2YWx1ZS5zdGFydCxcbiAgICAgICAgICBlbmQgPSBfc3RlcCR2YWx1ZS5lbmQ7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5jb250ZXh0LnNyY1tzdGFydF0pIHtcbiAgICAgICAgY2FzZSBDaGFyLkNPTU1FTlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFub2RlLmNvbW1lbnRIYXNSZXF1aXJlZFdoaXRlc3BhY2Uoc3RhcnQpKSB7XG4gICAgICAgICAgICAgIHZhciBtc2cgPSAnQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVycyc7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihub2RlLCBtc2cpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGhlYWRlciA9IG5vZGUuaGVhZGVyLFxuICAgICAgICAgICAgICAgIHZhbHVlUmFuZ2UgPSBub2RlLnZhbHVlUmFuZ2U7XG4gICAgICAgICAgICB2YXIgY2MgPSB2YWx1ZVJhbmdlICYmIChzdGFydCA+IHZhbHVlUmFuZ2Uuc3RhcnQgfHwgaGVhZGVyICYmIHN0YXJ0ID4gaGVhZGVyLnN0YXJ0KSA/IGNvbW1lbnRzLmFmdGVyIDogY29tbWVudHMuYmVmb3JlO1xuICAgICAgICAgICAgY2MucHVzaChub2RlLmNvbnRleHQuc3JjLnNsaWNlKHN0YXJ0ICsgMSwgZW5kKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8vIEFjdHVhbCBhbmNob3IgJiB0YWcgcmVzb2x1dGlvbiBpcyBoYW5kbGVkIGJ5IHNjaGVtYSwgaGVyZSB3ZSBqdXN0IGNvbXBsYWluXG5cbiAgICAgICAgY2FzZSBDaGFyLkFOQ0hPUjpcbiAgICAgICAgICBpZiAoaGFzQW5jaG9yKSB7XG4gICAgICAgICAgICB2YXIgX21zZyA9ICdBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgYW5jaG9yJztcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihub2RlLCBfbXNnKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFzQW5jaG9yID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENoYXIuVEFHOlxuICAgICAgICAgIGlmIChoYXNUYWcpIHtcbiAgICAgICAgICAgIHZhciBfbXNnMiA9ICdBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgdGFnJztcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihub2RlLCBfbXNnMikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhc1RhZyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbW1lbnRzOiBjb21tZW50cyxcbiAgICBoYXNBbmNob3I6IGhhc0FuY2hvcixcbiAgICBoYXNUYWc6IGhhc1RhZ1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTm9kZVZhbHVlKGRvYywgbm9kZSkge1xuICB2YXIgYW5jaG9ycyA9IGRvYy5hbmNob3JzLFxuICAgICAgZXJyb3JzID0gZG9jLmVycm9ycyxcbiAgICAgIHNjaGVtYSA9IGRvYy5zY2hlbWE7XG5cbiAgaWYgKG5vZGUudHlwZSA9PT0gVHlwZS5BTElBUykge1xuICAgIHZhciBuYW1lID0gbm9kZS5yYXdWYWx1ZTtcbiAgICB2YXIgc3JjID0gYW5jaG9ycy5nZXROb2RlKG5hbWUpO1xuXG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHZhciBtc2cgPSBcIkFsaWFzZWQgYW5jaG9yIG5vdCBmb3VuZDogXCIuY29uY2F0KG5hbWUpO1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFlBTUxSZWZlcmVuY2VFcnJvcihub2RlLCBtc2cpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gTGF6eSByZXNvbHV0aW9uIGZvciBjaXJjdWxhciByZWZlcmVuY2VzXG5cblxuICAgIHZhciByZXMgPSBuZXcgQWxpYXMoc3JjKTtcblxuICAgIGFuY2hvcnMuX2NzdEFsaWFzZXMucHVzaChyZXMpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHZhciB0YWdOYW1lID0gcmVzb2x2ZVRhZ05hbWUoZG9jLCBub2RlKTtcbiAgaWYgKHRhZ05hbWUpIHJldHVybiByZXNvbHZlVGFnKGRvYywgbm9kZSwgdGFnTmFtZSk7XG5cbiAgaWYgKG5vZGUudHlwZSAhPT0gVHlwZS5QTEFJTikge1xuICAgIHZhciBfbXNnMyA9IFwiRmFpbGVkIHRvIHJlc29sdmUgXCIuY29uY2F0KG5vZGUudHlwZSwgXCIgbm9kZSBoZXJlXCIpO1xuXG4gICAgZXJyb3JzLnB1c2gobmV3IFlBTUxTeW50YXhFcnJvcihub2RlLCBfbXNnMykpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgc3RyID0gcmVzb2x2ZVN0cmluZyhkb2MsIG5vZGUpO1xuICAgIHJldHVybiByZXNvbHZlU2NhbGFyKHN0ciwgc2NoZW1hLnRhZ3MsIHNjaGVtYS50YWdzLnNjYWxhckZhbGxiYWNrKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWVycm9yLnNvdXJjZSkgZXJyb3Iuc291cmNlID0gbm9kZTtcbiAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gLy8gc2V0cyBub2RlLnJlc29sdmVkIG9uIHN1Y2Nlc3NcblxuXG5mdW5jdGlvbiByZXNvbHZlTm9kZShkb2MsIG5vZGUpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgaWYgKG5vZGUuZXJyb3IpIGRvYy5lcnJvcnMucHVzaChub2RlLmVycm9yKTtcblxuICB2YXIgX3Jlc29sdmVOb2RlUHJvcHMgPSByZXNvbHZlTm9kZVByb3BzKGRvYy5lcnJvcnMsIG5vZGUpLFxuICAgICAgY29tbWVudHMgPSBfcmVzb2x2ZU5vZGVQcm9wcy5jb21tZW50cyxcbiAgICAgIGhhc0FuY2hvciA9IF9yZXNvbHZlTm9kZVByb3BzLmhhc0FuY2hvcixcbiAgICAgIGhhc1RhZyA9IF9yZXNvbHZlTm9kZVByb3BzLmhhc1RhZztcblxuICBpZiAoaGFzQW5jaG9yKSB7XG4gICAgdmFyIGFuY2hvcnMgPSBkb2MuYW5jaG9ycztcbiAgICB2YXIgbmFtZSA9IG5vZGUuYW5jaG9yO1xuICAgIHZhciBwcmV2ID0gYW5jaG9ycy5nZXROb2RlKG5hbWUpOyAvLyBBdCB0aGlzIHBvaW50LCBhbGlhc2VzIGZvciBhbnkgcHJlY2VkaW5nIG5vZGUgd2l0aCB0aGUgc2FtZSBhbmNob3JcbiAgICAvLyBuYW1lIGhhdmUgYWxyZWFkeSBiZWVuIHJlc29sdmVkLCBzbyBpdCBtYXkgc2FmZWx5IGJlIHJlbmFtZWQuXG5cbiAgICBpZiAocHJldikgYW5jaG9ycy5tYXBbYW5jaG9ycy5uZXdOYW1lKG5hbWUpXSA9IHByZXY7IC8vIER1cmluZyBwYXJzaW5nLCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBDU1Qgbm9kZSBpbiBhbmNob3JzLm1hcCBhc1xuICAgIC8vIGFuY2hvcnMgbmVlZCB0byBiZSBhdmFpbGFibGUgZHVyaW5nIHJlc29sdXRpb24gdG8gYWxsb3cgZm9yXG4gICAgLy8gY2lyY3VsYXIgcmVmZXJlbmNlcy5cblxuICAgIGFuY2hvcnMubWFwW25hbWVdID0gbm9kZTtcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT09IFR5cGUuQUxJQVMgJiYgKGhhc0FuY2hvciB8fCBoYXNUYWcpKSB7XG4gICAgdmFyIG1zZyA9ICdBbiBhbGlhcyBub2RlIG11c3Qgbm90IHNwZWNpZnkgYW55IHByb3BlcnRpZXMnO1xuICAgIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3Iobm9kZSwgbXNnKSk7XG4gIH1cblxuICB2YXIgcmVzID0gcmVzb2x2ZU5vZGVWYWx1ZShkb2MsIG5vZGUpO1xuXG4gIGlmIChyZXMpIHtcbiAgICByZXMucmFuZ2UgPSBbbm9kZS5yYW5nZS5zdGFydCwgbm9kZS5yYW5nZS5lbmRdO1xuICAgIGlmIChkb2Mub3B0aW9ucy5rZWVwQ3N0Tm9kZXMpIHJlcy5jc3ROb2RlID0gbm9kZTtcbiAgICBpZiAoZG9jLm9wdGlvbnMua2VlcE5vZGVUeXBlcykgcmVzLnR5cGUgPSBub2RlLnR5cGU7XG4gICAgdmFyIGNiID0gY29tbWVudHMuYmVmb3JlLmpvaW4oJ1xcbicpO1xuXG4gICAgaWYgKGNiKSB7XG4gICAgICByZXMuY29tbWVudEJlZm9yZSA9IHJlcy5jb21tZW50QmVmb3JlID8gXCJcIi5jb25jYXQocmVzLmNvbW1lbnRCZWZvcmUsIFwiXFxuXCIpLmNvbmNhdChjYikgOiBjYjtcbiAgICB9XG5cbiAgICB2YXIgY2EgPSBjb21tZW50cy5hZnRlci5qb2luKCdcXG4nKTtcbiAgICBpZiAoY2EpIHJlcy5jb21tZW50ID0gcmVzLmNvbW1lbnQgPyBcIlwiLmNvbmNhdChyZXMuY29tbWVudCwgXCJcXG5cIikuY29uY2F0KGNhKSA6IGNhO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUucmVzb2x2ZWQgPSByZXM7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNYXAoZG9jLCBjc3QpIHtcbiAgaWYgKGNzdC50eXBlICE9PSBUeXBlLk1BUCAmJiBjc3QudHlwZSAhPT0gVHlwZS5GTE9XX01BUCkge1xuICAgIHZhciBtc2cgPSBcIkEgXCIuY29uY2F0KGNzdC50eXBlLCBcIiBub2RlIGNhbm5vdCBiZSByZXNvbHZlZCBhcyBhIG1hcHBpbmdcIik7XG4gICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU3ludGF4RXJyb3IoY3N0LCBtc2cpKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBfcmVmID0gY3N0LnR5cGUgPT09IFR5cGUuRkxPV19NQVAgPyByZXNvbHZlRmxvd01hcEl0ZW1zKGRvYywgY3N0KSA6IHJlc29sdmVCbG9ja01hcEl0ZW1zKGRvYywgY3N0KSxcbiAgICAgIGNvbW1lbnRzID0gX3JlZi5jb21tZW50cyxcbiAgICAgIGl0ZW1zID0gX3JlZi5pdGVtcztcblxuICB2YXIgbWFwID0gbmV3IFlBTUxNYXAoKTtcbiAgbWFwLml0ZW1zID0gaXRlbXM7XG4gIHJlc29sdmVDb21tZW50cyhtYXAsIGNvbW1lbnRzKTtcbiAgdmFyIGhhc0NvbGxlY3Rpb25LZXkgPSBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGlLZXkgPSBpdGVtc1tpXS5rZXk7XG4gICAgaWYgKGlLZXkgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSBoYXNDb2xsZWN0aW9uS2V5ID0gdHJ1ZTtcblxuICAgIGlmIChkb2Muc2NoZW1hLm1lcmdlICYmIGlLZXkgJiYgaUtleS52YWx1ZSA9PT0gTUVSR0VfS0VZKSB7XG4gICAgICBpdGVtc1tpXSA9IG5ldyBNZXJnZShpdGVtc1tpXSk7XG4gICAgICB2YXIgc291cmNlcyA9IGl0ZW1zW2ldLnZhbHVlLml0ZW1zO1xuICAgICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICAgIHNvdXJjZXMuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEFsaWFzKSB7XG4gICAgICAgICAgLy8gRHVyaW5nIHBhcnNpbmcsIGFsaWFzIHNvdXJjZXMgYXJlIENTVCBub2RlczsgdG8gYWNjb3VudCBmb3JcbiAgICAgICAgICAvLyBjaXJjdWxhciByZWZlcmVuY2VzIHRoZWlyIHJlc29sdmVkIHZhbHVlcyBjYW4ndCBiZSB1c2VkIGhlcmUuXG4gICAgICAgICAgdmFyIHR5cGUgPSBub2RlLnNvdXJjZS50eXBlO1xuICAgICAgICAgIGlmICh0eXBlID09PSBUeXBlLk1BUCB8fCB0eXBlID09PSBUeXBlLkZMT1dfTUFQKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIGVycm9yID0gJ01lcmdlIG5vZGVzIGFsaWFzZXMgY2FuIG9ubHkgcG9pbnQgdG8gbWFwcyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3IgPSAnTWVyZ2Ugbm9kZXMgY2FuIG9ubHkgaGF2ZSBBbGlhcyBub2RlcyBhcyB2YWx1ZXMnO1xuICAgICAgfSk7XG4gICAgICBpZiAoZXJyb3IpIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3IoY3N0LCBlcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgaktleSA9IGl0ZW1zW2pdLmtleTtcblxuICAgICAgICBpZiAoaUtleSA9PT0gaktleSB8fCBpS2V5ICYmIGpLZXkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlLZXksICd2YWx1ZScpICYmIGlLZXkudmFsdWUgPT09IGpLZXkudmFsdWUpIHtcbiAgICAgICAgICB2YXIgX21zZyA9IFwiTWFwIGtleXMgbXVzdCBiZSB1bmlxdWU7IFxcXCJcIi5jb25jYXQoaUtleSwgXCJcXFwiIGlzIHJlcGVhdGVkXCIpO1xuXG4gICAgICAgICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihjc3QsIF9tc2cpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChoYXNDb2xsZWN0aW9uS2V5ICYmICFkb2Mub3B0aW9ucy5tYXBBc01hcCkge1xuICAgIHZhciB3YXJuID0gJ0tleXMgd2l0aCBjb2xsZWN0aW9uIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkIGFzIFlBTUwgZHVlIHRvIEpTIE9iamVjdCByZXN0cmljdGlvbnMuIFVzZSBtYXBBc01hcDogdHJ1ZSB0byBhdm9pZCB0aGlzLic7XG4gICAgZG9jLndhcm5pbmdzLnB1c2gobmV3IFlBTUxXYXJuaW5nKGNzdCwgd2FybikpO1xuICB9XG5cbiAgY3N0LnJlc29sdmVkID0gbWFwO1xuICByZXR1cm4gbWFwO1xufVxuXG52YXIgdmFsdWVIYXNQYWlyQ29tbWVudCA9IGZ1bmN0aW9uIHZhbHVlSGFzUGFpckNvbW1lbnQoX3JlZjIpIHtcbiAgdmFyIF9yZWYyJGNvbnRleHQgPSBfcmVmMi5jb250ZXh0LFxuICAgICAgbGluZVN0YXJ0ID0gX3JlZjIkY29udGV4dC5saW5lU3RhcnQsXG4gICAgICBub2RlID0gX3JlZjIkY29udGV4dC5ub2RlLFxuICAgICAgc3JjID0gX3JlZjIkY29udGV4dC5zcmMsXG4gICAgICBwcm9wcyA9IF9yZWYyLnByb3BzO1xuICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzdGFydCA9IHByb3BzWzBdLnN0YXJ0O1xuICBpZiAobm9kZSAmJiBzdGFydCA+IG5vZGUudmFsdWVSYW5nZS5zdGFydCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3JjW3N0YXJ0XSAhPT0gQ2hhci5DT01NRU5UKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGxpbmVTdGFydDsgaSA8IHN0YXJ0OyArK2kpIHtcbiAgICBpZiAoc3JjW2ldID09PSAnXFxuJykgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlUGFpckNvbW1lbnQoaXRlbSwgcGFpcikge1xuICBpZiAoIXZhbHVlSGFzUGFpckNvbW1lbnQoaXRlbSkpIHJldHVybjtcbiAgdmFyIGNvbW1lbnQgPSBpdGVtLmdldFByb3BWYWx1ZSgwLCBDaGFyLkNPTU1FTlQsIHRydWUpO1xuICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgdmFyIGNiID0gcGFpci52YWx1ZS5jb21tZW50QmVmb3JlO1xuXG4gIGlmIChjYiAmJiBjYi5zdGFydHNXaXRoKGNvbW1lbnQpKSB7XG4gICAgcGFpci52YWx1ZS5jb21tZW50QmVmb3JlID0gY2Iuc3Vic3RyKGNvbW1lbnQubGVuZ3RoICsgMSk7XG4gICAgZm91bmQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBjYyA9IHBhaXIudmFsdWUuY29tbWVudDtcblxuICAgIGlmICghaXRlbS5ub2RlICYmIGNjICYmIGNjLnN0YXJ0c1dpdGgoY29tbWVudCkpIHtcbiAgICAgIHBhaXIudmFsdWUuY29tbWVudCA9IGNjLnN1YnN0cihjb21tZW50Lmxlbmd0aCArIDEpO1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZCkgcGFpci5jb21tZW50ID0gY29tbWVudDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrTWFwSXRlbXMoZG9jLCBjc3QpIHtcbiAgdmFyIGNvbW1lbnRzID0gW107XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIga2V5ID0gdW5kZWZpbmVkO1xuICB2YXIga2V5U3RhcnQgPSBudWxsO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY3N0Lml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGl0ZW0gPSBjc3QuaXRlbXNbaV07XG5cbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSBUeXBlLkJMQU5LX0xJTkU6XG4gICAgICAgIGNvbW1lbnRzLnB1c2goe1xuICAgICAgICAgIGFmdGVyS2V5OiAhIWtleSxcbiAgICAgICAgICBiZWZvcmU6IGl0ZW1zLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVHlwZS5DT01NRU5UOlxuICAgICAgICBjb21tZW50cy5wdXNoKHtcbiAgICAgICAgICBhZnRlcktleTogISFrZXksXG4gICAgICAgICAgYmVmb3JlOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgY29tbWVudDogaXRlbS5jb21tZW50XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUeXBlLk1BUF9LRVk6XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgaXRlbXMucHVzaChuZXcgUGFpcihrZXkpKTtcbiAgICAgICAgaWYgKGl0ZW0uZXJyb3IpIGRvYy5lcnJvcnMucHVzaChpdGVtLmVycm9yKTtcbiAgICAgICAga2V5ID0gcmVzb2x2ZU5vZGUoZG9jLCBpdGVtLm5vZGUpO1xuICAgICAgICBrZXlTdGFydCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFR5cGUuTUFQX1ZBTFVFOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBudWxsO1xuICAgICAgICAgIGlmIChpdGVtLmVycm9yKSBkb2MuZXJyb3JzLnB1c2goaXRlbS5lcnJvcik7XG5cbiAgICAgICAgICBpZiAoIWl0ZW0uY29udGV4dC5hdExpbmVTdGFydCAmJiBpdGVtLm5vZGUgJiYgaXRlbS5ub2RlLnR5cGUgPT09IFR5cGUuTUFQICYmICFpdGVtLm5vZGUuY29udGV4dC5hdExpbmVTdGFydCkge1xuICAgICAgICAgICAgdmFyIG1zZyA9ICdOZXN0ZWQgbWFwcGluZ3MgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBhY3QgbWFwcGluZ3MnO1xuICAgICAgICAgICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihpdGVtLm5vZGUsIG1zZykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB2YWx1ZU5vZGUgPSBpdGVtLm5vZGU7XG5cbiAgICAgICAgICBpZiAoIXZhbHVlTm9kZSAmJiBpdGVtLnByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIENvbW1lbnRzIG9uIGFuIGVtcHR5IG1hcHBpbmcgdmFsdWUgbmVlZCB0byBiZSBwcmVzZXJ2ZWQsIHNvIHdlXG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNvbnN0cnVjdCBhIG1pbmltYWwgZW1wdHkgbm9kZSBoZXJlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZVxuICAgICAgICAgICAgLy8gbWlzc2luZyBgaXRlbS5ub2RlYC4gLS0gZWVtZWxpL3lhbWwjMTlcbiAgICAgICAgICAgIHZhbHVlTm9kZSA9IG5ldyBQbGFpblZhbHVlKFR5cGUuUExBSU4sIFtdKTtcbiAgICAgICAgICAgIHZhbHVlTm9kZS5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICBwYXJlbnQ6IGl0ZW0sXG4gICAgICAgICAgICAgIHNyYzogaXRlbS5jb250ZXh0LnNyY1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBwb3MgPSBpdGVtLnJhbmdlLnN0YXJ0ICsgMTtcbiAgICAgICAgICAgIHZhbHVlTm9kZS5yYW5nZSA9IHtcbiAgICAgICAgICAgICAgc3RhcnQ6IHBvcyxcbiAgICAgICAgICAgICAgZW5kOiBwb3NcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YWx1ZU5vZGUudmFsdWVSYW5nZSA9IHtcbiAgICAgICAgICAgICAgc3RhcnQ6IHBvcyxcbiAgICAgICAgICAgICAgZW5kOiBwb3NcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5yYW5nZS5vcmlnU3RhcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnUG9zID0gaXRlbS5yYW5nZS5vcmlnU3RhcnQgKyAxO1xuICAgICAgICAgICAgICB2YWx1ZU5vZGUucmFuZ2Uub3JpZ1N0YXJ0ID0gdmFsdWVOb2RlLnJhbmdlLm9yaWdFbmQgPSBvcmlnUG9zO1xuICAgICAgICAgICAgICB2YWx1ZU5vZGUudmFsdWVSYW5nZS5vcmlnU3RhcnQgPSB2YWx1ZU5vZGUudmFsdWVSYW5nZS5vcmlnRW5kID0gb3JpZ1BvcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGFpciA9IG5ldyBQYWlyKGtleSwgcmVzb2x2ZU5vZGUoZG9jLCB2YWx1ZU5vZGUpKTtcbiAgICAgICAgICByZXNvbHZlUGFpckNvbW1lbnQoaXRlbSwgcGFpcik7XG4gICAgICAgICAgaXRlbXMucHVzaChwYWlyKTtcblxuICAgICAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleVN0YXJ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmFuZ2Uuc3RhcnQgPiBrZXlTdGFydCArIDEwMjQpIGRvYy5lcnJvcnMucHVzaChnZXRMb25nS2V5RXJyb3IoY3N0LCBrZXkpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAga2V5U3RhcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIGl0ZW1zLnB1c2gobmV3IFBhaXIoa2V5KSk7XG4gICAgICAgIGtleSA9IHJlc29sdmVOb2RlKGRvYywgaXRlbSk7XG4gICAgICAgIGtleVN0YXJ0ID0gaXRlbS5yYW5nZS5zdGFydDtcbiAgICAgICAgaWYgKGl0ZW0uZXJyb3IpIGRvYy5lcnJvcnMucHVzaChpdGVtLmVycm9yKTtcblxuICAgICAgICBuZXh0OiBmb3IgKHZhciBqID0gaSArIDE7OyArK2opIHtcbiAgICAgICAgICB2YXIgbmV4dEl0ZW0gPSBjc3QuaXRlbXNbal07XG5cbiAgICAgICAgICBzd2l0Y2ggKG5leHRJdGVtICYmIG5leHRJdGVtLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHlwZS5CTEFOS19MSU5FOlxuICAgICAgICAgICAgY2FzZSBUeXBlLkNPTU1FTlQ6XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG5leHQ7XG5cbiAgICAgICAgICAgIGNhc2UgVHlwZS5NQVBfVkFMVUU6XG4gICAgICAgICAgICAgIGJyZWFrIG5leHQ7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX21zZzIgPSAnSW1wbGljaXQgbWFwIGtleXMgbmVlZCB0byBiZSBmb2xsb3dlZCBieSBtYXAgdmFsdWVzJztcbiAgICAgICAgICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxTZW1hbnRpY0Vycm9yKGl0ZW0sIF9tc2cyKSk7XG4gICAgICAgICAgICAgICAgYnJlYWsgbmV4dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnZhbHVlUmFuZ2VDb250YWluc05ld2xpbmUpIHtcbiAgICAgICAgICB2YXIgX21zZzMgPSAnSW1wbGljaXQgbWFwIGtleXMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lJztcbiAgICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxTZW1hbnRpY0Vycm9yKGl0ZW0sIF9tc2czKSk7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgaXRlbXMucHVzaChuZXcgUGFpcihrZXkpKTtcbiAgcmV0dXJuIHtcbiAgICBjb21tZW50czogY29tbWVudHMsXG4gICAgaXRlbXM6IGl0ZW1zXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGbG93TWFwSXRlbXMoZG9jLCBjc3QpIHtcbiAgdmFyIGNvbW1lbnRzID0gW107XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIga2V5ID0gdW5kZWZpbmVkO1xuICB2YXIgZXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgdmFyIG5leHQgPSAneyc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjc3QuaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgaXRlbSA9IGNzdC5pdGVtc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaXRlbS5jaGFyID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIGNoYXIgPSBpdGVtLmNoYXIsXG4gICAgICAgICAgb2Zmc2V0ID0gaXRlbS5vZmZzZXQ7XG5cbiAgICAgIGlmIChjaGFyID09PSAnPycgJiYga2V5ID09PSB1bmRlZmluZWQgJiYgIWV4cGxpY2l0S2V5KSB7XG4gICAgICAgIGV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgbmV4dCA9ICc6JztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSAnOicpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBudWxsO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSAnOicpIHtcbiAgICAgICAgICBuZXh0ID0gJywnO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgJiYgY2hhciAhPT0gJywnKSBrZXkgPSBudWxsO1xuICAgICAgICAgIGV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKG5ldyBQYWlyKGtleSkpO1xuICAgICAgICAgIGtleSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChjaGFyID09PSAnLCcpIHtcbiAgICAgICAgICAgIG5leHQgPSAnOic7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgICBpZiAoaSA9PT0gY3N0Lml0ZW1zLmxlbmd0aCAtIDEpIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBuZXh0KSB7XG4gICAgICAgIG5leHQgPSAnOic7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbXNnID0gXCJGbG93IG1hcCBjb250YWlucyBhbiB1bmV4cGVjdGVkIFwiLmNvbmNhdChjaGFyKTtcbiAgICAgIHZhciBlcnIgPSBuZXcgWUFNTFN5bnRheEVycm9yKGNzdCwgbXNnKTtcbiAgICAgIGVyci5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICBkb2MuZXJyb3JzLnB1c2goZXJyKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gVHlwZS5CTEFOS19MSU5FKSB7XG4gICAgICBjb21tZW50cy5wdXNoKHtcbiAgICAgICAgYWZ0ZXJLZXk6ICEha2V5LFxuICAgICAgICBiZWZvcmU6IGl0ZW1zLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFR5cGUuQ09NTUVOVCkge1xuICAgICAgY2hlY2tGbG93Q29tbWVudFNwYWNlKGRvYy5lcnJvcnMsIGl0ZW0pO1xuICAgICAgY29tbWVudHMucHVzaCh7XG4gICAgICAgIGFmdGVyS2V5OiAhIWtleSxcbiAgICAgICAgYmVmb3JlOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgIGNvbW1lbnQ6IGl0ZW0uY29tbWVudFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5leHQgPT09ICcsJykgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihpdGVtLCAnU2VwYXJhdG9yICwgbWlzc2luZyBpbiBmbG93IG1hcCcpKTtcbiAgICAgIGtleSA9IHJlc29sdmVOb2RlKGRvYywgaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXh0ICE9PSAnLCcpIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3IoaXRlbSwgJ0luZGljYXRvciA6IG1pc3NpbmcgaW4gZmxvdyBtYXAgZW50cnknKSk7XG4gICAgICBpdGVtcy5wdXNoKG5ldyBQYWlyKGtleSwgcmVzb2x2ZU5vZGUoZG9jLCBpdGVtKSkpO1xuICAgICAga2V5ID0gdW5kZWZpbmVkO1xuICAgICAgZXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGVja0Zsb3dDb2xsZWN0aW9uRW5kKGRvYy5lcnJvcnMsIGNzdCk7XG4gIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgaXRlbXMucHVzaChuZXcgUGFpcihrZXkpKTtcbiAgcmV0dXJuIHtcbiAgICBjb21tZW50czogY29tbWVudHMsXG4gICAgaXRlbXM6IGl0ZW1zXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVTZXEoZG9jLCBjc3QpIHtcbiAgaWYgKGNzdC50eXBlICE9PSBUeXBlLlNFUSAmJiBjc3QudHlwZSAhPT0gVHlwZS5GTE9XX1NFUSkge1xuICAgIHZhciBtc2cgPSBcIkEgXCIuY29uY2F0KGNzdC50eXBlLCBcIiBub2RlIGNhbm5vdCBiZSByZXNvbHZlZCBhcyBhIHNlcXVlbmNlXCIpO1xuICAgIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFN5bnRheEVycm9yKGNzdCwgbXNnKSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgX3JlZiA9IGNzdC50eXBlID09PSBUeXBlLkZMT1dfU0VRID8gcmVzb2x2ZUZsb3dTZXFJdGVtcyhkb2MsIGNzdCkgOiByZXNvbHZlQmxvY2tTZXFJdGVtcyhkb2MsIGNzdCksXG4gICAgICBjb21tZW50cyA9IF9yZWYuY29tbWVudHMsXG4gICAgICBpdGVtcyA9IF9yZWYuaXRlbXM7XG5cbiAgdmFyIHNlcSA9IG5ldyBZQU1MU2VxKCk7XG4gIHNlcS5pdGVtcyA9IGl0ZW1zO1xuICByZXNvbHZlQ29tbWVudHMoc2VxLCBjb21tZW50cyk7XG5cbiAgaWYgKCFkb2Mub3B0aW9ucy5tYXBBc01hcCAmJiBpdGVtcy5zb21lKGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdCBpbnN0YW5jZW9mIFBhaXIgJiYgaXQua2V5IGluc3RhbmNlb2YgQ29sbGVjdGlvbjtcbiAgfSkpIHtcbiAgICB2YXIgd2FybiA9ICdLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBhcyBZQU1MIGR1ZSB0byBKUyBPYmplY3QgcmVzdHJpY3Rpb25zLiBVc2UgbWFwQXNNYXA6IHRydWUgdG8gYXZvaWQgdGhpcy4nO1xuICAgIGRvYy53YXJuaW5ncy5wdXNoKG5ldyBZQU1MV2FybmluZyhjc3QsIHdhcm4pKTtcbiAgfVxuXG4gIGNzdC5yZXNvbHZlZCA9IHNlcTtcbiAgcmV0dXJuIHNlcTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrU2VxSXRlbXMoZG9jLCBjc3QpIHtcbiAgdmFyIGNvbW1lbnRzID0gW107XG4gIHZhciBpdGVtcyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY3N0Lml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGl0ZW0gPSBjc3QuaXRlbXNbaV07XG5cbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSBUeXBlLkJMQU5LX0xJTkU6XG4gICAgICAgIGNvbW1lbnRzLnB1c2goe1xuICAgICAgICAgIGJlZm9yZTogaXRlbXMubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUeXBlLkNPTU1FTlQ6XG4gICAgICAgIGNvbW1lbnRzLnB1c2goe1xuICAgICAgICAgIGNvbW1lbnQ6IGl0ZW0uY29tbWVudCxcbiAgICAgICAgICBiZWZvcmU6IGl0ZW1zLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVHlwZS5TRVFfSVRFTTpcbiAgICAgICAgaWYgKGl0ZW0uZXJyb3IpIGRvYy5lcnJvcnMucHVzaChpdGVtLmVycm9yKTtcbiAgICAgICAgaXRlbXMucHVzaChyZXNvbHZlTm9kZShkb2MsIGl0ZW0ubm9kZSkpO1xuXG4gICAgICAgIGlmIChpdGVtLmhhc1Byb3BzKSB7XG4gICAgICAgICAgdmFyIG1zZyA9ICdTZXF1ZW5jZSBpdGVtcyBjYW5ub3QgaGF2ZSB0YWdzIG9yIGFuY2hvcnMgYmVmb3JlIHRoZSAtIGluZGljYXRvcic7XG4gICAgICAgICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihpdGVtLCBtc2cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoaXRlbS5lcnJvcikgZG9jLmVycm9ycy5wdXNoKGl0ZW0uZXJyb3IpO1xuICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxTeW50YXhFcnJvcihpdGVtLCBcIlVuZXhwZWN0ZWQgXCIuY29uY2F0KGl0ZW0udHlwZSwgXCIgbm9kZSBpbiBzZXF1ZW5jZVwiKSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tbWVudHM6IGNvbW1lbnRzLFxuICAgIGl0ZW1zOiBpdGVtc1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmxvd1NlcUl0ZW1zKGRvYywgY3N0KSB7XG4gIHZhciBjb21tZW50cyA9IFtdO1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gIHZhciBrZXkgPSB1bmRlZmluZWQ7XG4gIHZhciBrZXlTdGFydCA9IG51bGw7XG4gIHZhciBuZXh0ID0gJ1snO1xuICB2YXIgcHJldkl0ZW0gPSBudWxsO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY3N0Lml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGl0ZW0gPSBjc3QuaXRlbXNbaV07XG5cbiAgICBpZiAodHlwZW9mIGl0ZW0uY2hhciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBjaGFyID0gaXRlbS5jaGFyLFxuICAgICAgICAgIG9mZnNldCA9IGl0ZW0ub2Zmc2V0O1xuXG4gICAgICBpZiAoY2hhciAhPT0gJzonICYmIChleHBsaWNpdEtleSB8fCBrZXkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgaWYgKGV4cGxpY2l0S2V5ICYmIGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBuZXh0ID8gaXRlbXMucG9wKCkgOiBudWxsO1xuICAgICAgICBpdGVtcy5wdXNoKG5ldyBQYWlyKGtleSkpO1xuICAgICAgICBleHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIGtleVN0YXJ0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09IG5leHQpIHtcbiAgICAgICAgbmV4dCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCFuZXh0ICYmIGNoYXIgPT09ICc/Jykge1xuICAgICAgICBleHBsaWNpdEtleSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG5leHQgIT09ICdbJyAmJiBjaGFyID09PSAnOicgJiYga2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5leHQgPT09ICcsJykge1xuICAgICAgICAgIGtleSA9IGl0ZW1zLnBvcCgpO1xuXG4gICAgICAgICAgaWYgKGtleSBpbnN0YW5jZW9mIFBhaXIpIHtcbiAgICAgICAgICAgIHZhciBtc2cgPSAnQ2hhaW5pbmcgZmxvdyBzZXF1ZW5jZSBwYWlycyBpcyBpbnZhbGlkJztcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgWUFNTFNlbWFudGljRXJyb3IoY3N0LCBtc2cpO1xuICAgICAgICAgICAgZXJyLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgIGRvYy5lcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZXhwbGljaXRLZXkgJiYgdHlwZW9mIGtleVN0YXJ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFyIGtleUVuZCA9IGl0ZW0ucmFuZ2UgPyBpdGVtLnJhbmdlLnN0YXJ0IDogaXRlbS5vZmZzZXQ7XG4gICAgICAgICAgICBpZiAoa2V5RW5kID4ga2V5U3RhcnQgKyAxMDI0KSBkb2MuZXJyb3JzLnB1c2goZ2V0TG9uZ0tleUVycm9yKGNzdCwga2V5KSk7XG4gICAgICAgICAgICB2YXIgc3JjID0gcHJldkl0ZW0uY29udGV4dC5zcmM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pID0ga2V5U3RhcnQ7IF9pIDwga2V5RW5kOyArK19pKSB7XG4gICAgICAgICAgICAgIGlmIChzcmNbX2ldID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgIHZhciBfbXNnID0gJ0ltcGxpY2l0IGtleXMgb2YgZmxvdyBzZXF1ZW5jZSBwYWlycyBuZWVkIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmUnO1xuICAgICAgICAgICAgICAgIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFNlbWFudGljRXJyb3IocHJldkl0ZW0sIF9tc2cpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5U3RhcnQgPSBudWxsO1xuICAgICAgICBleHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBuZXh0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gJ1snIHx8IGNoYXIgIT09ICddJyB8fCBpIDwgY3N0Lml0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdmFyIF9tc2cyID0gXCJGbG93IHNlcXVlbmNlIGNvbnRhaW5zIGFuIHVuZXhwZWN0ZWQgXCIuY29uY2F0KGNoYXIpO1xuXG4gICAgICAgIHZhciBfZXJyID0gbmV3IFlBTUxTeW50YXhFcnJvcihjc3QsIF9tc2cyKTtcblxuICAgICAgICBfZXJyLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgZG9jLmVycm9ycy5wdXNoKF9lcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBUeXBlLkJMQU5LX0xJTkUpIHtcbiAgICAgIGNvbW1lbnRzLnB1c2goe1xuICAgICAgICBiZWZvcmU6IGl0ZW1zLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFR5cGUuQ09NTUVOVCkge1xuICAgICAgY2hlY2tGbG93Q29tbWVudFNwYWNlKGRvYy5lcnJvcnMsIGl0ZW0pO1xuICAgICAgY29tbWVudHMucHVzaCh7XG4gICAgICAgIGNvbW1lbnQ6IGl0ZW0uY29tbWVudCxcbiAgICAgICAgYmVmb3JlOiBpdGVtcy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICB2YXIgX21zZzMgPSBcIkV4cGVjdGVkIGEgXCIuY29uY2F0KG5leHQsIFwiIGluIGZsb3cgc2VxdWVuY2VcIik7XG5cbiAgICAgICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU2VtYW50aWNFcnJvcihpdGVtLCBfbXNnMykpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSByZXNvbHZlTm9kZShkb2MsIGl0ZW0pO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIHByZXZJdGVtID0gaXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zLnB1c2gobmV3IFBhaXIoa2V5LCB2YWx1ZSkpO1xuICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGtleVN0YXJ0ID0gaXRlbS5yYW5nZS5zdGFydDtcbiAgICAgIG5leHQgPSAnLCc7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGbG93Q29sbGVjdGlvbkVuZChkb2MuZXJyb3JzLCBjc3QpO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIGl0ZW1zLnB1c2gobmV3IFBhaXIoa2V5KSk7XG4gIHJldHVybiB7XG4gICAgY29tbWVudHM6IGNvbW1lbnRzLFxuICAgIGl0ZW1zOiBpdGVtc1xuICB9O1xufVxuXG5leHBvcnQgeyBBbGlhcyBhcyBBLCBDb2xsZWN0aW9uIGFzIEMsIE1lcmdlIGFzIE0sIE5vZGUgYXMgTiwgUGFpciBhcyBQLCBTY2FsYXIgYXMgUywgWUFNTFNlcSBhcyBZLCBib29sT3B0aW9ucyBhcyBhLCBiaW5hcnlPcHRpb25zIGFzIGIsIHN0cmluZ2lmeVN0cmluZyBhcyBjLCBZQU1MTWFwIGFzIGQsIGlzRW1wdHlQYXRoIGFzIGUsIGFkZENvbW1lbnQgYXMgZiwgcmVzb2x2ZU1hcCBhcyBnLCByZXNvbHZlU2VxIGFzIGgsIGludE9wdGlvbnMgYXMgaSwgcmVzb2x2ZVN0cmluZyBhcyBqLCBzdHJpbmdpZnlOdW1iZXIgYXMgaywgZmluZFBhaXIgYXMgbCwgbnVsbE9wdGlvbnMgYXMgbiwgcmVzb2x2ZU5vZGUgYXMgciwgc3RyT3B0aW9ucyBhcyBzLCB0b0pTT04gYXMgdCB9O1xuIiwiaW1wb3J0IHsgbyBhcyBZQU1MUmVmZXJlbmNlRXJyb3IsIFQgYXMgVHlwZSwgZyBhcyBZQU1MU2VtYW50aWNFcnJvciwgXyBhcyBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciwgZSBhcyBfZGVmaW5lUHJvcGVydHksIGogYXMgX2luaGVyaXRzLCBrIGFzIF9jcmVhdGVTdXBlciwgYyBhcyBfY2xhc3NDYWxsQ2hlY2ssIHAgYXMgX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgYiBhcyBfY3JlYXRlQ2xhc3MsIGEgYXMgX3R5cGVvZiwgbCBhcyBfZ2V0LCBtIGFzIF9nZXRQcm90b3R5cGVPZiB9IGZyb20gJy4vUGxhaW5WYWx1ZS1mZjUxNDdjNi5qcyc7XG5pbXBvcnQgeyBqIGFzIHJlc29sdmVTdHJpbmcsIGIgYXMgYmluYXJ5T3B0aW9ucywgYyBhcyBzdHJpbmdpZnlTdHJpbmcsIGggYXMgcmVzb2x2ZVNlcSwgUCBhcyBQYWlyLCBkIGFzIFlBTUxNYXAsIFkgYXMgWUFNTFNlcSwgdCBhcyB0b0pTT04sIFMgYXMgU2NhbGFyLCBsIGFzIGZpbmRQYWlyLCBnIGFzIHJlc29sdmVNYXAsIGsgYXMgc3RyaW5naWZ5TnVtYmVyIH0gZnJvbSAnLi9yZXNvbHZlU2VxLTA0ODI1ZjMwLmpzJztcblxuLyogZ2xvYmFsIGF0b2IsIGJ0b2EsIEJ1ZmZlciAqL1xudmFyIGJpbmFyeSA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheTtcbiAgfSxcbiAgLy8gQnVmZmVyIGluaGVyaXRzIGZyb20gVWludDhBcnJheVxuICBkZWZhdWx0OiBmYWxzZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JyxcblxuICAvKipcbiAgICogUmV0dXJucyBhIEJ1ZmZlciBpbiBub2RlIGFuZCBhbiBVaW50OEFycmF5IGluIGJyb3dzZXJzXG4gICAqXG4gICAqIFRvIHVzZSB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBhcyBhbiBpbWFnZSwgeW91J2xsIHdhbnQgdG8gZG8gc29tZXRoaW5nIGxpa2U6XG4gICAqXG4gICAqICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KVxuICAgKiAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwaG90bycpLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICovXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoZG9jLCBub2RlKSB7XG4gICAgdmFyIHNyYyA9IHJlc29sdmVTdHJpbmcoZG9jLCBub2RlKTtcblxuICAgIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLCAnYmFzZTY0Jyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXRvYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gT24gSUUgMTEsIGF0b2IoKSBjYW4ndCBoYW5kbGUgbmV3bGluZXNcbiAgICAgIHZhciBzdHIgPSBhdG9iKHNyYy5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnJykpO1xuICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICBidWZmZXJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1zZyA9ICdUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBhdG9iIGlzIHJlcXVpcmVkJztcbiAgICAgIGRvYy5lcnJvcnMucHVzaChuZXcgWUFNTFJlZmVyZW5jZUVycm9yKG5vZGUsIG1zZykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuICBvcHRpb25zOiBiaW5hcnlPcHRpb25zLFxuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShfcmVmLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApIHtcbiAgICB2YXIgY29tbWVudCA9IF9yZWYuY29tbWVudCxcbiAgICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlO1xuICAgIHZhciBzcmM7XG5cbiAgICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3JjID0gdmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIgPyB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykgOiBCdWZmZXIuZnJvbSh2YWx1ZS5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgcyA9ICcnO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZVtpXSk7XG4gICAgICB9XG5cbiAgICAgIHNyYyA9IGJ0b2Eocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdyaXRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYnRvYSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdHlwZSkgdHlwZSA9IGJpbmFyeU9wdGlvbnMuZGVmYXVsdFR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gVHlwZS5RVU9URV9ET1VCTEUpIHtcbiAgICAgIHZhbHVlID0gc3JjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbGluZVdpZHRoID0gYmluYXJ5T3B0aW9ucy5saW5lV2lkdGg7XG4gICAgICB2YXIgbiA9IE1hdGguY2VpbChzcmMubGVuZ3RoIC8gbGluZVdpZHRoKTtcbiAgICAgIHZhciBsaW5lcyA9IG5ldyBBcnJheShuKTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwLCBvID0gMDsgX2kgPCBuOyArK19pLCBvICs9IGxpbmVXaWR0aCkge1xuICAgICAgICBsaW5lc1tfaV0gPSBzcmMuc3Vic3RyKG8sIGxpbmVXaWR0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gbGluZXMuam9pbih0eXBlID09PSBUeXBlLkJMT0NLX0xJVEVSQUwgPyAnXFxuJyA6ICcgJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVN0cmluZyh7XG4gICAgICBjb21tZW50OiBjb21tZW50LFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBhcnNlUGFpcnMoZG9jLCBjc3QpIHtcbiAgdmFyIHNlcSA9IHJlc29sdmVTZXEoZG9jLCBjc3QpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VxLml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGl0ZW0gPSBzZXEuaXRlbXNbaV07XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQYWlyKSBjb250aW51ZTtlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgWUFNTE1hcCkge1xuICAgICAgaWYgKGl0ZW0uaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgbXNnID0gJ0VhY2ggcGFpciBtdXN0IGhhdmUgaXRzIG93biBzZXF1ZW5jZSBpbmRpY2F0b3InO1xuICAgICAgICB0aHJvdyBuZXcgWUFNTFNlbWFudGljRXJyb3IoY3N0LCBtc2cpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFpciA9IGl0ZW0uaXRlbXNbMF0gfHwgbmV3IFBhaXIoKTtcbiAgICAgIGlmIChpdGVtLmNvbW1lbnRCZWZvcmUpIHBhaXIuY29tbWVudEJlZm9yZSA9IHBhaXIuY29tbWVudEJlZm9yZSA/IFwiXCIuY29uY2F0KGl0ZW0uY29tbWVudEJlZm9yZSwgXCJcXG5cIikuY29uY2F0KHBhaXIuY29tbWVudEJlZm9yZSkgOiBpdGVtLmNvbW1lbnRCZWZvcmU7XG4gICAgICBpZiAoaXRlbS5jb21tZW50KSBwYWlyLmNvbW1lbnQgPSBwYWlyLmNvbW1lbnQgPyBcIlwiLmNvbmNhdChpdGVtLmNvbW1lbnQsIFwiXFxuXCIpLmNvbmNhdChwYWlyLmNvbW1lbnQpIDogaXRlbS5jb21tZW50O1xuICAgICAgaXRlbSA9IHBhaXI7XG4gICAgfVxuICAgIHNlcS5pdGVtc1tpXSA9IGl0ZW0gaW5zdGFuY2VvZiBQYWlyID8gaXRlbSA6IG5ldyBQYWlyKGl0ZW0pO1xuICB9XG5cbiAgcmV0dXJuIHNlcTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhaXJzKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICB2YXIgcGFpcnMgPSBuZXcgWUFNTFNlcShzY2hlbWEpO1xuICBwYWlycy50YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnO1xuXG4gIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihpdGVyYWJsZSksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgaXQgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHZhciBrZXkgPSB2b2lkIDAsXG4gICAgICAgICAgdmFsdWUgPSB2b2lkIDA7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0KSkge1xuICAgICAgICBpZiAoaXQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAga2V5ID0gaXRbMF07XG4gICAgICAgICAgdmFsdWUgPSBpdFsxXTtcbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBba2V5LCB2YWx1ZV0gdHVwbGU6IFwiLmNvbmNhdChpdCkpO1xuICAgICAgfSBlbHNlIGlmIChpdCAmJiBpdCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGl0KTtcblxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgIHZhbHVlID0gaXRba2V5XTtcbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCB7IGtleTogdmFsdWUgfSB0dXBsZTogXCIuY29uY2F0KGl0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXkgPSBpdDtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhaXIgPSBzY2hlbWEuY3JlYXRlUGFpcihrZXksIHZhbHVlLCBjdHgpO1xuICAgICAgcGFpcnMuaXRlbXMucHVzaChwYWlyKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvci5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yLmYoKTtcbiAgfVxuXG4gIHJldHVybiBwYWlycztcbn1cbnZhciBwYWlycyA9IHtcbiAgZGVmYXVsdDogZmFsc2UsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJyxcbiAgcmVzb2x2ZTogcGFyc2VQYWlycyxcbiAgY3JlYXRlTm9kZTogY3JlYXRlUGFpcnNcbn07XG5cbnZhciBZQU1MT01hcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1lBTUxTZXEpIHtcbiAgX2luaGVyaXRzKFlBTUxPTWFwLCBfWUFNTFNlcSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihZQU1MT01hcCk7XG5cbiAgZnVuY3Rpb24gWUFNTE9NYXAoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFlBTUxPTWFwKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkXCIsIFlBTUxNYXAucHJvdG90eXBlLmFkZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVsZXRlXCIsIFlBTUxNYXAucHJvdG90eXBlLmRlbGV0ZS5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0XCIsIFlBTUxNYXAucHJvdG90eXBlLmdldC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzXCIsIFlBTUxNYXAucHJvdG90eXBlLmhhcy5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0XCIsIFlBTUxNYXAucHJvdG90eXBlLnNldC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7XG5cbiAgICBfdGhpcy50YWcgPSBZQU1MT01hcC50YWc7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFlBTUxPTWFwLCBbe1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OJDEoXywgY3R4KSB7XG4gICAgICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgaWYgKGN0eCAmJiBjdHgub25DcmVhdGUpIGN0eC5vbkNyZWF0ZShtYXApO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5pdGVtcyksXG4gICAgICAgICAgX3N0ZXA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICB2YXIga2V5ID0gdm9pZCAwLFxuICAgICAgICAgICAgICB2YWx1ZSA9IHZvaWQgMDtcblxuICAgICAgICAgIGlmIChwYWlyIGluc3RhbmNlb2YgUGFpcikge1xuICAgICAgICAgICAga2V5ID0gdG9KU09OKHBhaXIua2V5LCAnJywgY3R4KTtcbiAgICAgICAgICAgIHZhbHVlID0gdG9KU09OKHBhaXIudmFsdWUsIGtleSwgY3R4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gdG9KU09OKHBhaXIsICcnLCBjdHgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXAuaGFzKGtleSkpIHRocm93IG5ldyBFcnJvcignT3JkZXJlZCBtYXBzIG11c3Qgbm90IGluY2x1ZGUgZHVwbGljYXRlIGtleXMnKTtcbiAgICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFlBTUxPTWFwO1xufShZQU1MU2VxKTtcblxuX2RlZmluZVByb3BlcnR5KFlBTUxPTWFwLCBcInRhZ1wiLCAndGFnOnlhbWwub3JnLDIwMDI6b21hcCcpO1xuXG5mdW5jdGlvbiBwYXJzZU9NYXAoZG9jLCBjc3QpIHtcbiAgdmFyIHBhaXJzID0gcGFyc2VQYWlycyhkb2MsIGNzdCk7XG4gIHZhciBzZWVuS2V5cyA9IFtdO1xuXG4gIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocGFpcnMuaXRlbXMpLFxuICAgICAgX3N0ZXAyO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaXRlcmF0b3IyLnMoKTsgIShfc3RlcDIgPSBfaXRlcmF0b3IyLm4oKSkuZG9uZTspIHtcbiAgICAgIHZhciBrZXkgPSBfc3RlcDIudmFsdWUua2V5O1xuXG4gICAgICBpZiAoa2V5IGluc3RhbmNlb2YgU2NhbGFyKSB7XG4gICAgICAgIGlmIChzZWVuS2V5cy5pbmNsdWRlcyhrZXkudmFsdWUpKSB7XG4gICAgICAgICAgdmFyIG1zZyA9ICdPcmRlcmVkIG1hcHMgbXVzdCBub3QgaW5jbHVkZSBkdXBsaWNhdGUga2V5cyc7XG4gICAgICAgICAgdGhyb3cgbmV3IFlBTUxTZW1hbnRpY0Vycm9yKGNzdCwgbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuS2V5cy5wdXNoKGtleS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvcjIuZigpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFlBTUxPTWFwKCksIHBhaXJzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT01hcChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpIHtcbiAgdmFyIHBhaXJzID0gY3JlYXRlUGFpcnMoc2NoZW1hLCBpdGVyYWJsZSwgY3R4KTtcbiAgdmFyIG9tYXAgPSBuZXcgWUFNTE9NYXAoKTtcbiAgb21hcC5pdGVtcyA9IHBhaXJzLml0ZW1zO1xuICByZXR1cm4gb21hcDtcbn1cblxudmFyIG9tYXAgPSB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE1hcDtcbiAgfSxcbiAgbm9kZUNsYXNzOiBZQU1MT01hcCxcbiAgZGVmYXVsdDogZmFsc2UsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm9tYXAnLFxuICByZXNvbHZlOiBwYXJzZU9NYXAsXG4gIGNyZWF0ZU5vZGU6IGNyZWF0ZU9NYXBcbn07XG5cbnZhciBZQU1MU2V0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWUFNTE1hcCkge1xuICBfaW5oZXJpdHMoWUFNTFNldCwgX1lBTUxNYXApO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoWUFNTFNldCk7XG5cbiAgZnVuY3Rpb24gWUFNTFNldCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgWUFNTFNldCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLnRhZyA9IFlBTUxTZXQudGFnO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhZQU1MU2V0LCBbe1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKGtleSkge1xuICAgICAgdmFyIHBhaXIgPSBrZXkgaW5zdGFuY2VvZiBQYWlyID8ga2V5IDogbmV3IFBhaXIoa2V5KTtcbiAgICAgIHZhciBwcmV2ID0gZmluZFBhaXIodGhpcy5pdGVtcywgcGFpci5rZXkpO1xuICAgICAgaWYgKCFwcmV2KSB0aGlzLml0ZW1zLnB1c2gocGFpcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5LCBrZWVwUGFpcikge1xuICAgICAgdmFyIHBhaXIgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgcmV0dXJuICFrZWVwUGFpciAmJiBwYWlyIGluc3RhbmNlb2YgUGFpciA/IHBhaXIua2V5IGluc3RhbmNlb2YgU2NhbGFyID8gcGFpci5rZXkudmFsdWUgOiBwYWlyLmtleSA6IHBhaXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBib29sZWFuIHZhbHVlIGZvciBzZXQoa2V5LCB2YWx1ZSkgaW4gYSBZQU1MIHNldCwgbm90IFwiLmNvbmNhdChfdHlwZW9mKHZhbHVlKSkpO1xuICAgICAgdmFyIHByZXYgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuXG4gICAgICBpZiAocHJldiAmJiAhdmFsdWUpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKHByZXYpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByZXYgJiYgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKG5ldyBQYWlyKGtleSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKF8sIGN0eCkge1xuICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFlBTUxTZXQucHJvdG90eXBlKSwgXCJ0b0pTT05cIiwgdGhpcykuY2FsbCh0aGlzLCBfLCBjdHgsIFNldCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgaWYgKCFjdHgpIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcbiAgICAgIGlmICh0aGlzLmhhc0FsbE51bGxWYWx1ZXMoKSkgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFlBTUxTZXQucHJvdG90eXBlKSwgXCJ0b1N0cmluZ1wiLCB0aGlzKS5jYWxsKHRoaXMsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1NldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzJyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFlBTUxTZXQ7XG59KFlBTUxNYXApO1xuXG5fZGVmaW5lUHJvcGVydHkoWUFNTFNldCwgXCJ0YWdcIiwgJ3RhZzp5YW1sLm9yZywyMDAyOnNldCcpO1xuXG5mdW5jdGlvbiBwYXJzZVNldChkb2MsIGNzdCkge1xuICB2YXIgbWFwID0gcmVzb2x2ZU1hcChkb2MsIGNzdCk7XG4gIGlmICghbWFwLmhhc0FsbE51bGxWYWx1ZXMoKSkgdGhyb3cgbmV3IFlBTUxTZW1hbnRpY0Vycm9yKGNzdCwgJ1NldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzJyk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBZQU1MU2V0KCksIG1hcCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNldChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpIHtcbiAgdmFyIHNldCA9IG5ldyBZQU1MU2V0KCk7XG5cbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGl0ZXJhYmxlKSxcbiAgICAgIF9zdGVwO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9zdGVwLnZhbHVlO1xuICAgICAgc2V0Lml0ZW1zLnB1c2goc2NoZW1hLmNyZWF0ZVBhaXIodmFsdWUsIG51bGwsIGN0eCkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIHNldDtcbn1cblxudmFyIHNldCA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0O1xuICB9LFxuICBub2RlQ2xhc3M6IFlBTUxTZXQsXG4gIGRlZmF1bHQ6IGZhbHNlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzZXQnLFxuICByZXNvbHZlOiBwYXJzZVNldCxcbiAgY3JlYXRlTm9kZTogY3JlYXRlU2V0XG59O1xuXG52YXIgcGFyc2VTZXhhZ2VzaW1hbCA9IGZ1bmN0aW9uIHBhcnNlU2V4YWdlc2ltYWwoc2lnbiwgcGFydHMpIHtcbiAgdmFyIG4gPSBwYXJ0cy5zcGxpdCgnOicpLnJlZHVjZShmdW5jdGlvbiAobiwgcCkge1xuICAgIHJldHVybiBuICogNjAgKyBOdW1iZXIocCk7XG4gIH0sIDApO1xuICByZXR1cm4gc2lnbiA9PT0gJy0nID8gLW4gOiBuO1xufTsgLy8gaGhoaDptbTpzcy5zc3NcblxuXG52YXIgc3RyaW5naWZ5U2V4YWdlc2ltYWwgPSBmdW5jdGlvbiBzdHJpbmdpZnlTZXhhZ2VzaW1hbChfcmVmKSB7XG4gIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIHN0cmluZ2lmeU51bWJlcih2YWx1ZSk7XG4gIHZhciBzaWduID0gJyc7XG5cbiAgaWYgKHZhbHVlIDwgMCkge1xuICAgIHNpZ24gPSAnLSc7XG4gICAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG4gIH1cblxuICB2YXIgcGFydHMgPSBbdmFsdWUgJSA2MF07IC8vIHNlY29uZHMsIGluY2x1ZGluZyBtc1xuXG4gIGlmICh2YWx1ZSA8IDYwKSB7XG4gICAgcGFydHMudW5zaGlmdCgwKTsgLy8gYXQgbGVhc3Qgb25lIDogaXMgcmVxdWlyZWRcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IE1hdGgucm91bmQoKHZhbHVlIC0gcGFydHNbMF0pIC8gNjApO1xuICAgIHBhcnRzLnVuc2hpZnQodmFsdWUgJSA2MCk7IC8vIG1pbnV0ZXNcblxuICAgIGlmICh2YWx1ZSA+PSA2MCkge1xuICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKCh2YWx1ZSAtIHBhcnRzWzBdKSAvIDYwKTtcbiAgICAgIHBhcnRzLnVuc2hpZnQodmFsdWUpOyAvLyBob3Vyc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaWduICsgcGFydHMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIFN0cmluZyhuKSA6IFN0cmluZyhuKTtcbiAgfSkuam9pbignOicpLnJlcGxhY2UoLzAwMDAwMFxcZCokLywgJycpIC8vICUgNjAgbWF5IGludHJvZHVjZSBlcnJvclxuICA7XG59O1xuXG52YXIgaW50VGltZSA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gIGZvcm1hdDogJ1RJTUUnLFxuICB0ZXN0OiAvXihbLStdPykoWzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKSspJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBzaWduLCBwYXJ0cykge1xuICAgIHJldHVybiBwYXJzZVNleGFnZXNpbWFsKHNpZ24sIHBhcnRzLnJlcGxhY2UoL18vZywgJycpKTtcbiAgfSxcbiAgc3RyaW5naWZ5OiBzdHJpbmdpZnlTZXhhZ2VzaW1hbFxufTtcbnZhciBmbG9hdFRpbWUgPSB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gIGZvcm1hdDogJ1RJTUUnLFxuICB0ZXN0OiAvXihbLStdPykoWzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0ciwgc2lnbiwgcGFydHMpIHtcbiAgICByZXR1cm4gcGFyc2VTZXhhZ2VzaW1hbChzaWduLCBwYXJ0cy5yZXBsYWNlKC9fL2csICcnKSk7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5U2V4YWdlc2ltYWxcbn07XG52YXIgdGltZXN0YW1wID0ge1xuICBpZGVudGlmeTogZnVuY3Rpb24gaWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnLFxuICAvLyBJZiB0aGUgdGltZSB6b25lIGlzIG9taXR0ZWQsIHRoZSB0aW1lc3RhbXAgaXMgYXNzdW1lZCB0byBiZSBzcGVjaWZpZWQgaW4gVVRDLiBUaGUgdGltZSBwYXJ0XG4gIC8vIG1heSBiZSBvbWl0dGVkIGFsdG9nZXRoZXIsIHJlc3VsdGluZyBpbiBhIGRhdGUgZm9ybWF0LiBJbiBzdWNoIGEgY2FzZSwgdGhlIHRpbWUgcGFydCBpc1xuICAvLyBhc3N1bWVkIHRvIGJlIDAwOjAwOjAwWiAoc3RhcnQgb2YgZGF5LCBVVEMpLlxuICB0ZXN0OiBSZWdFeHAoJ14oPzonICsgJyhbMC05XXs0fSktKFswLTldezEsMn0pLShbMC05XXsxLDJ9KScgKyAvLyBZWVlZLU1tLURkXG4gICcoPzooPzp0fFR8WyBcXFxcdF0rKScgKyAvLyB0IHwgVCB8IHdoaXRlc3BhY2VcbiAgJyhbMC05XXsxLDJ9KTooWzAtOV17MSwyfSk6KFswLTldezEsMn0oXFxcXC5bMC05XSspPyknICsgLy8gSGg6TW06U3MoLnNzKT9cbiAgJyg/OlsgXFxcXHRdKihafFstK11bMDEyXT9bMC05XSg/OjpbMC05XXsyfSk/KSk/JyArIC8vIFogfCArNSB8IC0wMzozMFxuICAnKT8nICsgJykkJyksXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWMsIHR6KSB7XG4gICAgaWYgKG1pbGxpc2VjKSBtaWxsaXNlYyA9IChtaWxsaXNlYyArICcwMCcpLnN1YnN0cigxLCAzKTtcbiAgICB2YXIgZGF0ZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoIC0gMSwgZGF5LCBob3VyIHx8IDAsIG1pbnV0ZSB8fCAwLCBzZWNvbmQgfHwgMCwgbWlsbGlzZWMgfHwgMCk7XG5cbiAgICBpZiAodHogJiYgdHogIT09ICdaJykge1xuICAgICAgdmFyIGQgPSBwYXJzZVNleGFnZXNpbWFsKHR6WzBdLCB0ei5zbGljZSgxKSk7XG4gICAgICBpZiAoTWF0aC5hYnMoZCkgPCAzMCkgZCAqPSA2MDtcbiAgICAgIGRhdGUgLT0gNjAwMDAgKiBkO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcbiAgfSxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoX3JlZjIpIHtcbiAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC8oKFQwMDowMCk/OjAwKT9cXC4wMDBaJC8sICcnKTtcbiAgfVxufTtcblxuLyogZ2xvYmFsIGNvbnNvbGUsIHByb2Nlc3MsIFlBTUxfU0lMRU5DRV9ERVBSRUNBVElPTl9XQVJOSU5HUywgWUFNTF9TSUxFTkNFX1dBUk5JTkdTICovXG5mdW5jdGlvbiBzaG91bGRXYXJuKGRlcHJlY2F0aW9uKSB7XG4gIHZhciBlbnYgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYgfHwge307XG5cbiAgaWYgKGRlcHJlY2F0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBZQU1MX1NJTEVOQ0VfREVQUkVDQVRJT05fV0FSTklOR1MgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gIVlBTUxfU0lMRU5DRV9ERVBSRUNBVElPTl9XQVJOSU5HUztcbiAgICByZXR1cm4gIWVudi5ZQU1MX1NJTEVOQ0VfREVQUkVDQVRJT05fV0FSTklOR1M7XG4gIH1cblxuICBpZiAodHlwZW9mIFlBTUxfU0lMRU5DRV9XQVJOSU5HUyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiAhWUFNTF9TSUxFTkNFX1dBUk5JTkdTO1xuICByZXR1cm4gIWVudi5ZQU1MX1NJTEVOQ0VfV0FSTklOR1M7XG59XG5cbmZ1bmN0aW9uIHdhcm4od2FybmluZywgdHlwZSkge1xuICBpZiAoc2hvdWxkV2FybihmYWxzZSkpIHtcbiAgICB2YXIgZW1pdCA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVtaXRXYXJuaW5nOyAvLyBUaGlzIHdpbGwgdGhyb3cgaW4gSmVzdCBpZiBgd2FybmluZ2AgaXMgYW4gRXJyb3IgaW5zdGFuY2UgZHVlIHRvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2plc3QvaXNzdWVzLzI1NDlcblxuICAgIGlmIChlbWl0KSBlbWl0KHdhcm5pbmcsIHR5cGUpO2Vsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2Fybih0eXBlID8gXCJcIi5jb25jYXQodHlwZSwgXCI6IFwiKS5jb25jYXQod2FybmluZykgOiB3YXJuaW5nKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5GaWxlRGVwcmVjYXRpb24oZmlsZW5hbWUpIHtcbiAgaWYgKHNob3VsZFdhcm4odHJ1ZSkpIHtcbiAgICB2YXIgcGF0aCA9IGZpbGVuYW1lLnJlcGxhY2UoLy4qeWFtbFsvXFxcXF0vaSwgJycpLnJlcGxhY2UoL1xcLmpzJC8sICcnKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgd2FybihcIlRoZSBlbmRwb2ludCAneWFtbC9cIi5jb25jYXQocGF0aCwgXCInIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiKSwgJ0RlcHJlY2F0aW9uV2FybmluZycpO1xuICB9XG59XG52YXIgd2FybmVkID0ge307XG5mdW5jdGlvbiB3YXJuT3B0aW9uRGVwcmVjYXRpb24obmFtZSwgYWx0ZXJuYXRpdmUpIHtcbiAgaWYgKCF3YXJuZWRbbmFtZV0gJiYgc2hvdWxkV2Fybih0cnVlKSkge1xuICAgIHdhcm5lZFtuYW1lXSA9IHRydWU7XG4gICAgdmFyIG1zZyA9IFwiVGhlIG9wdGlvbiAnXCIuY29uY2F0KG5hbWUsIFwiJyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZVwiKTtcbiAgICBtc2cgKz0gYWx0ZXJuYXRpdmUgPyBcIiwgdXNlICdcIi5jb25jYXQoYWx0ZXJuYXRpdmUsIFwiJyBpbnN0ZWFkLlwiKSA6ICcuJztcbiAgICB3YXJuKG1zZywgJ0RlcHJlY2F0aW9uV2FybmluZycpO1xuICB9XG59XG5cbmV4cG9ydCB7IHdhcm5PcHRpb25EZXByZWNhdGlvbiBhcyBhLCBiaW5hcnkgYXMgYiwgd2FybkZpbGVEZXByZWNhdGlvbiBhcyBjLCBmbG9hdFRpbWUgYXMgZiwgaW50VGltZSBhcyBpLCBvbWFwIGFzIG8sIHBhaXJzIGFzIHAsIHNldCBhcyBzLCB0aW1lc3RhbXAgYXMgdCwgd2FybiBhcyB3IH07XG4iLCJpbXBvcnQgeyBfIGFzIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyLCBoIGFzIF9zbGljZWRUb0FycmF5LCBhIGFzIF90eXBlb2YsIGIgYXMgX2NyZWF0ZUNsYXNzLCBlIGFzIF9kZWZpbmVQcm9wZXJ0eSwgYyBhcyBfY2xhc3NDYWxsQ2hlY2ssIGQgYXMgZGVmYXVsdFRhZ1ByZWZpeCwgbiBhcyBkZWZhdWx0VGFncyB9IGZyb20gJy4vUGxhaW5WYWx1ZS1mZjUxNDdjNi5qcyc7XG5pbXBvcnQgeyBkIGFzIFlBTUxNYXAsIGcgYXMgcmVzb2x2ZU1hcCwgWSBhcyBZQU1MU2VxLCBoIGFzIHJlc29sdmVTZXEsIGogYXMgcmVzb2x2ZVN0cmluZywgYyBhcyBzdHJpbmdpZnlTdHJpbmcsIHMgYXMgc3RyT3B0aW9ucywgUyBhcyBTY2FsYXIsIG4gYXMgbnVsbE9wdGlvbnMsIGEgYXMgYm9vbE9wdGlvbnMsIGkgYXMgaW50T3B0aW9ucywgayBhcyBzdHJpbmdpZnlOdW1iZXIsIE4gYXMgTm9kZSwgQSBhcyBBbGlhcywgUCBhcyBQYWlyIH0gZnJvbSAnLi9yZXNvbHZlU2VxLTA0ODI1ZjMwLmpzJztcbmltcG9ydCB7IGIgYXMgYmluYXJ5LCBvIGFzIG9tYXAsIHAgYXMgcGFpcnMsIHMgYXMgc2V0LCBpIGFzIGludFRpbWUsIGYgYXMgZmxvYXRUaW1lLCB0IGFzIHRpbWVzdGFtcCwgYSBhcyB3YXJuT3B0aW9uRGVwcmVjYXRpb24gfSBmcm9tICcuL3dhcm5pbmdzLTBlNGI3MGQzLmpzJztcblxuZnVuY3Rpb24gY3JlYXRlTWFwKHNjaGVtYSwgb2JqLCBjdHgpIHtcbiAgdmFyIG1hcCA9IG5ldyBZQU1MTWFwKHNjaGVtYSk7XG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hcCkge1xuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvYmopLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICB2YXIgX3N0ZXAkdmFsdWUgPSBfc2xpY2VkVG9BcnJheShfc3RlcC52YWx1ZSwgMiksXG4gICAgICAgICAgICBrZXkgPSBfc3RlcCR2YWx1ZVswXSxcbiAgICAgICAgICAgIHZhbHVlID0gX3N0ZXAkdmFsdWVbMV07XG5cbiAgICAgICAgbWFwLml0ZW1zLnB1c2goc2NoZW1hLmNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgY3R4KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfaXRlcmF0b3IuZigpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvYmogJiYgX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIF9pID0gMCwgX09iamVjdCRrZXlzID0gT2JqZWN0LmtleXMob2JqKTsgX2kgPCBfT2JqZWN0JGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2tleSA9IF9PYmplY3Qka2V5c1tfaV07XG4gICAgICBtYXAuaXRlbXMucHVzaChzY2hlbWEuY3JlYXRlUGFpcihfa2V5LCBvYmpbX2tleV0sIGN0eCkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLnNvcnRNYXBFbnRyaWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWFwLml0ZW1zLnNvcnQoc2NoZW1hLnNvcnRNYXBFbnRyaWVzKTtcbiAgfVxuXG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBtYXAgPSB7XG4gIGNyZWF0ZU5vZGU6IGNyZWF0ZU1hcCxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgbm9kZUNsYXNzOiBZQU1MTWFwLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLFxuICByZXNvbHZlOiByZXNvbHZlTWFwXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTZXEoc2NoZW1hLCBvYmosIGN0eCkge1xuICB2YXIgc2VxID0gbmV3IFlBTUxTZXEoc2NoZW1hKTtcblxuICBpZiAob2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG9iaiksXG4gICAgICAgIF9zdGVwO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBpdCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgdiA9IHNjaGVtYS5jcmVhdGVOb2RlKGl0LCBjdHgud3JhcFNjYWxhcnMsIG51bGwsIGN0eCk7XG4gICAgICAgIHNlcS5pdGVtcy5wdXNoKHYpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VxO1xufVxuXG52YXIgc2VxID0ge1xuICBjcmVhdGVOb2RlOiBjcmVhdGVTZXEsXG4gIGRlZmF1bHQ6IHRydWUsXG4gIG5vZGVDbGFzczogWUFNTFNlcSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6c2VxJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVNlcVxufTtcblxudmFyIHN0cmluZyA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicsXG4gIHJlc29sdmU6IHJlc29sdmVTdHJpbmcsXG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgYWN0dWFsU3RyaW5nOiB0cnVlXG4gICAgfSwgY3R4KTtcbiAgICByZXR1cm4gc3RyaW5naWZ5U3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gIH0sXG4gIG9wdGlvbnM6IHN0ck9wdGlvbnNcbn07XG5cbnZhciBmYWlsc2FmZSA9IFttYXAsIHNlcSwgc3RyaW5nXTtcblxuLyogZ2xvYmFsIEJpZ0ludCAqL1xuXG52YXIgaW50SWRlbnRpZnkgPSBmdW5jdGlvbiBpbnRJZGVudGlmeSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn07XG5cbnZhciBpbnRSZXNvbHZlID0gZnVuY3Rpb24gaW50UmVzb2x2ZShzcmMsIHBhcnQsIHJhZGl4KSB7XG4gIHJldHVybiBpbnRPcHRpb25zLmFzQmlnSW50ID8gQmlnSW50KHNyYykgOiBwYXJzZUludChwYXJ0LCByYWRpeCk7XG59O1xuXG5mdW5jdGlvbiBpbnRTdHJpbmdpZnkobm9kZSwgcmFkaXgsIHByZWZpeCkge1xuICB2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuICBpZiAoaW50SWRlbnRpZnkodmFsdWUpICYmIHZhbHVlID49IDApIHJldHVybiBwcmVmaXggKyB2YWx1ZS50b1N0cmluZyhyYWRpeCk7XG4gIHJldHVybiBzdHJpbmdpZnlOdW1iZXIobm9kZSk7XG59XG5cbnZhciBudWxsT2JqID0ge1xuICBpZGVudGlmeTogZnVuY3Rpb24gaWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbiAgfSxcbiAgY3JlYXRlTm9kZTogZnVuY3Rpb24gY3JlYXRlTm9kZShzY2hlbWEsIHZhbHVlLCBjdHgpIHtcbiAgICByZXR1cm4gY3R4LndyYXBTY2FsYXJzID8gbmV3IFNjYWxhcihudWxsKSA6IG51bGw7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLFxuICB0ZXN0OiAvXig/On58W05uXXVsbHxOVUxMKT8kLyxcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgb3B0aW9uczogbnVsbE9wdGlvbnMsXG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KCkge1xuICAgIHJldHVybiBudWxsT3B0aW9ucy5udWxsU3RyO1xuICB9XG59O1xudmFyIGJvb2xPYmogPSB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgfSxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gIHRlc3Q6IC9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0cikge1xuICAgIHJldHVybiBzdHJbMF0gPT09ICd0JyB8fCBzdHJbMF0gPT09ICdUJztcbiAgfSxcbiAgb3B0aW9uczogYm9vbE9wdGlvbnMsXG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KF9yZWYpIHtcbiAgICB2YXIgdmFsdWUgPSBfcmVmLnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSA/IGJvb2xPcHRpb25zLnRydWVTdHIgOiBib29sT3B0aW9ucy5mYWxzZVN0cjtcbiAgfVxufTtcbnZhciBvY3RPYmogPSB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiBpbnRJZGVudGlmeSh2YWx1ZSkgJiYgdmFsdWUgPj0gMDtcbiAgfSxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgZm9ybWF0OiAnT0NUJyxcbiAgdGVzdDogL14wbyhbMC03XSspJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBvY3QpIHtcbiAgICByZXR1cm4gaW50UmVzb2x2ZShzdHIsIG9jdCwgOCk7XG4gIH0sXG4gIG9wdGlvbnM6IGludE9wdGlvbnMsXG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUpIHtcbiAgICByZXR1cm4gaW50U3RyaW5naWZ5KG5vZGUsIDgsICcwbycpO1xuICB9XG59O1xudmFyIGludE9iaiA9IHtcbiAgaWRlbnRpZnk6IGludElkZW50aWZ5LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICB0ZXN0OiAvXlstK10/WzAtOV0rJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyKSB7XG4gICAgcmV0dXJuIGludFJlc29sdmUoc3RyLCBzdHIsIDEwKTtcbiAgfSxcbiAgb3B0aW9uczogaW50T3B0aW9ucyxcbiAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG52YXIgaGV4T2JqID0ge1xuICBpZGVudGlmeTogZnVuY3Rpb24gaWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gaW50SWRlbnRpZnkodmFsdWUpICYmIHZhbHVlID49IDA7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gIGZvcm1hdDogJ0hFWCcsXG4gIHRlc3Q6IC9eMHgoWzAtOWEtZkEtRl0rKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0ciwgaGV4KSB7XG4gICAgcmV0dXJuIGludFJlc29sdmUoc3RyLCBoZXgsIDE2KTtcbiAgfSxcbiAgb3B0aW9uczogaW50T3B0aW9ucyxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSkge1xuICAgIHJldHVybiBpbnRTdHJpbmdpZnkobm9kZSwgMTYsICcweCcpO1xuICB9XG59O1xudmFyIG5hbk9iaiA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgdGVzdDogL14oPzpbLStdP1xcLmluZnwoXFwubmFuKSkkL2ksXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBuYW4pIHtcbiAgICByZXR1cm4gbmFuID8gTmFOIDogc3RyWzBdID09PSAnLScgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59O1xudmFyIGV4cE9iaiA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgZm9ybWF0OiAnRVhQJyxcbiAgdGVzdDogL15bLStdPyg/OlxcLlswLTldK3xbMC05XSsoPzpcXC5bMC05XSopPylbZUVdWy0rXT9bMC05XSskLyxcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZShzdHIpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICB9LFxuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShfcmVmMikge1xuICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpLnRvRXhwb25lbnRpYWwoKTtcbiAgfVxufTtcbnZhciBmbG9hdE9iaiA9IHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgdGVzdDogL15bLStdPyg/OlxcLihbMC05XSspfFswLTldK1xcLihbMC05XSopKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0ciwgZnJhYzEsIGZyYWMyKSB7XG4gICAgdmFyIGZyYWMgPSBmcmFjMSB8fCBmcmFjMjtcbiAgICB2YXIgbm9kZSA9IG5ldyBTY2FsYXIocGFyc2VGbG9hdChzdHIpKTtcbiAgICBpZiAoZnJhYyAmJiBmcmFjW2ZyYWMubGVuZ3RoIC0gMV0gPT09ICcwJykgbm9kZS5taW5GcmFjdGlvbkRpZ2l0cyA9IGZyYWMubGVuZ3RoO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuICBzdHJpbmdpZnk6IHN0cmluZ2lmeU51bWJlclxufTtcbnZhciBjb3JlID0gZmFpbHNhZmUuY29uY2F0KFtudWxsT2JqLCBib29sT2JqLCBvY3RPYmosIGludE9iaiwgaGV4T2JqLCBuYW5PYmosIGV4cE9iaiwgZmxvYXRPYmpdKTtcblxuLyogZ2xvYmFsIEJpZ0ludCAqL1xuXG52YXIgaW50SWRlbnRpZnkkMSA9IGZ1bmN0aW9uIGludElkZW50aWZ5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8IE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xufTtcblxudmFyIHN0cmluZ2lmeUpTT04gPSBmdW5jdGlvbiBzdHJpbmdpZnlKU09OKF9yZWYpIHtcbiAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07XG5cbnZhciBqc29uID0gW21hcCwgc2VxLCB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLFxuICByZXNvbHZlOiByZXNvbHZlU3RyaW5nLFxuICBzdHJpbmdpZnk6IHN0cmluZ2lmeUpTT05cbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGw7XG4gIH0sXG4gIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uIGNyZWF0ZU5vZGUoc2NoZW1hLCB2YWx1ZSwgY3R4KSB7XG4gICAgcmV0dXJuIGN0eC53cmFwU2NhbGFycyA/IG5ldyBTY2FsYXIobnVsbCkgOiBudWxsO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJyxcbiAgdGVzdDogL15udWxsJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxufSwge1xuICBpZGVudGlmeTogZnVuY3Rpb24gaWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLFxuICB0ZXN0OiAvXnRydWV8ZmFsc2UkLyxcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyID09PSAndHJ1ZSc7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxufSwge1xuICBpZGVudGlmeTogaW50SWRlbnRpZnkkMSxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgdGVzdDogL14tPyg/OjB8WzEtOV1bMC05XSopJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyKSB7XG4gICAgcmV0dXJuIGludE9wdGlvbnMuYXNCaWdJbnQgPyBCaWdJbnQoc3RyKSA6IHBhcnNlSW50KHN0ciwgMTApO1xuICB9LFxuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShfcmVmMikge1xuICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuICAgIHJldHVybiBpbnRJZGVudGlmeSQxKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgdGVzdDogL14tPyg/OjB8WzEtOV1bMC05XSopKD86XFwuWzAtOV0qKT8oPzpbZUVdWy0rXT9bMC05XSspPyQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0cikge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cik7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxufV07XG5cbmpzb24uc2NhbGFyRmFsbGJhY2sgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVucmVzb2x2ZWQgcGxhaW4gc2NhbGFyIFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShzdHIpKSk7XG59O1xuXG4vKiBnbG9iYWwgQmlnSW50ICovXG5cbnZhciBib29sU3RyaW5naWZ5ID0gZnVuY3Rpb24gYm9vbFN0cmluZ2lmeShfcmVmKSB7XG4gIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gIHJldHVybiB2YWx1ZSA/IGJvb2xPcHRpb25zLnRydWVTdHIgOiBib29sT3B0aW9ucy5mYWxzZVN0cjtcbn07XG5cbnZhciBpbnRJZGVudGlmeSQyID0gZnVuY3Rpb24gaW50SWRlbnRpZnkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHwgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59O1xuXG5mdW5jdGlvbiBpbnRSZXNvbHZlJDEoc2lnbiwgc3JjLCByYWRpeCkge1xuICB2YXIgc3RyID0gc3JjLnJlcGxhY2UoL18vZywgJycpO1xuXG4gIGlmIChpbnRPcHRpb25zLmFzQmlnSW50KSB7XG4gICAgc3dpdGNoIChyYWRpeCkge1xuICAgICAgY2FzZSAyOlxuICAgICAgICBzdHIgPSBcIjBiXCIuY29uY2F0KHN0cik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDg6XG4gICAgICAgIHN0ciA9IFwiMG9cIi5jb25jYXQoc3RyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTY6XG4gICAgICAgIHN0ciA9IFwiMHhcIi5jb25jYXQoc3RyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIF9uID0gQmlnSW50KHN0cik7XG5cbiAgICByZXR1cm4gc2lnbiA9PT0gJy0nID8gQmlnSW50KC0xKSAqIF9uIDogX247XG4gIH1cblxuICB2YXIgbiA9IHBhcnNlSW50KHN0ciwgcmFkaXgpO1xuICByZXR1cm4gc2lnbiA9PT0gJy0nID8gLTEgKiBuIDogbjtcbn1cblxuZnVuY3Rpb24gaW50U3RyaW5naWZ5JDEobm9kZSwgcmFkaXgsIHByZWZpeCkge1xuICB2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXG4gIGlmIChpbnRJZGVudGlmeSQyKHZhbHVlKSkge1xuICAgIHZhciBzdHIgPSB2YWx1ZS50b1N0cmluZyhyYWRpeCk7XG4gICAgcmV0dXJuIHZhbHVlIDwgMCA/ICctJyArIHByZWZpeCArIHN0ci5zdWJzdHIoMSkgOiBwcmVmaXggKyBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5naWZ5TnVtYmVyKG5vZGUpO1xufVxuXG52YXIgeWFtbDExID0gZmFpbHNhZmUuY29uY2F0KFt7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsO1xuICB9LFxuICBjcmVhdGVOb2RlOiBmdW5jdGlvbiBjcmVhdGVOb2RlKHNjaGVtYSwgdmFsdWUsIGN0eCkge1xuICAgIHJldHVybiBjdHgud3JhcFNjYWxhcnMgPyBuZXcgU2NhbGFyKG51bGwpIDogbnVsbDtcbiAgfSxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcsXG4gIHRlc3Q6IC9eKD86fnxbTm5ddWxsfE5VTEwpPyQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9LFxuICBvcHRpb25zOiBudWxsT3B0aW9ucyxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoKSB7XG4gICAgcmV0dXJuIG51bGxPcHRpb25zLm51bGxTdHI7XG4gIH1cbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpib29sJyxcbiAgdGVzdDogL14oPzpZfHl8W1l5XWVzfFlFU3xbVHRdcnVlfFRSVUV8W09vXW58T04pJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG9wdGlvbnM6IGJvb2xPcHRpb25zLFxuICBzdHJpbmdpZnk6IGJvb2xTdHJpbmdpZnlcbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpib29sJyxcbiAgdGVzdDogL14oPzpOfG58W05uXW98Tk98W0ZmXWFsc2V8RkFMU0V8W09vXWZmfE9GRikkL2ksXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBvcHRpb25zOiBib29sT3B0aW9ucyxcbiAgc3RyaW5naWZ5OiBib29sU3RyaW5naWZ5XG59LCB7XG4gIGlkZW50aWZ5OiBpbnRJZGVudGlmeSQyLFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICBmb3JtYXQ6ICdCSU4nLFxuICB0ZXN0OiAvXihbLStdPykwYihbMC0xX10rKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0ciwgc2lnbiwgYmluKSB7XG4gICAgcmV0dXJuIGludFJlc29sdmUkMShzaWduLCBiaW4sIDIpO1xuICB9LFxuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShub2RlKSB7XG4gICAgcmV0dXJuIGludFN0cmluZ2lmeSQxKG5vZGUsIDIsICcwYicpO1xuICB9XG59LCB7XG4gIGlkZW50aWZ5OiBpbnRJZGVudGlmeSQyLFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICBmb3JtYXQ6ICdPQ1QnLFxuICB0ZXN0OiAvXihbLStdPykwKFswLTdfXSspJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBzaWduLCBvY3QpIHtcbiAgICByZXR1cm4gaW50UmVzb2x2ZSQxKHNpZ24sIG9jdCwgOCk7XG4gIH0sXG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUpIHtcbiAgICByZXR1cm4gaW50U3RyaW5naWZ5JDEobm9kZSwgOCwgJzAnKTtcbiAgfVxufSwge1xuICBpZGVudGlmeTogaW50SWRlbnRpZnkkMixcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgdGVzdDogL14oWy0rXT8pKFswLTldWzAtOV9dKikkLyxcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZShzdHIsIHNpZ24sIGFicykge1xuICAgIHJldHVybiBpbnRSZXNvbHZlJDEoc2lnbiwgYWJzLCAxMCk7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59LCB7XG4gIGlkZW50aWZ5OiBpbnRJZGVudGlmeSQyLFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICBmb3JtYXQ6ICdIRVgnLFxuICB0ZXN0OiAvXihbLStdPykweChbMC05YS1mQS1GX10rKSQvLFxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHN0ciwgc2lnbiwgaGV4KSB7XG4gICAgcmV0dXJuIGludFJlc29sdmUkMShzaWduLCBoZXgsIDE2KTtcbiAgfSxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSkge1xuICAgIHJldHVybiBpbnRTdHJpbmdpZnkkMShub2RlLCAxNiwgJzB4Jyk7XG4gIH1cbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgdGVzdDogL14oPzpbLStdP1xcLmluZnwoXFwubmFuKSkkL2ksXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBuYW4pIHtcbiAgICByZXR1cm4gbmFuID8gTmFOIDogc3RyWzBdID09PSAnLScgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59LCB7XG4gIGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICB9LFxuICBkZWZhdWx0OiB0cnVlLFxuICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gIGZvcm1hdDogJ0VYUCcsXG4gIHRlc3Q6IC9eWy0rXT8oWzAtOV1bMC05X10qKT8oXFwuWzAtOV9dKik/W2VFXVstK10/WzAtOV0rJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyLnJlcGxhY2UoL18vZywgJycpKTtcbiAgfSxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoX3JlZjIpIHtcbiAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKS50b0V4cG9uZW50aWFsKCk7XG4gIH1cbn0sIHtcbiAgaWRlbnRpZnk6IGZ1bmN0aW9uIGlkZW50aWZ5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH0sXG4gIGRlZmF1bHQ6IHRydWUsXG4gIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgdGVzdDogL15bLStdPyg/OlswLTldWzAtOV9dKik/XFwuKFswLTlfXSopJC8sXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoc3RyLCBmcmFjKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgU2NhbGFyKHBhcnNlRmxvYXQoc3RyLnJlcGxhY2UoL18vZywgJycpKSk7XG5cbiAgICBpZiAoZnJhYykge1xuICAgICAgdmFyIGYgPSBmcmFjLnJlcGxhY2UoL18vZywgJycpO1xuICAgICAgaWYgKGZbZi5sZW5ndGggLSAxXSA9PT0gJzAnKSBub2RlLm1pbkZyYWN0aW9uRGlnaXRzID0gZi5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH0sXG4gIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59XSwgYmluYXJ5LCBvbWFwLCBwYWlycywgc2V0LCBpbnRUaW1lLCBmbG9hdFRpbWUsIHRpbWVzdGFtcCk7XG5cbnZhciBzY2hlbWFzID0ge1xuICBjb3JlOiBjb3JlLFxuICBmYWlsc2FmZTogZmFpbHNhZmUsXG4gIGpzb246IGpzb24sXG4gIHlhbWwxMTogeWFtbDExXG59O1xudmFyIHRhZ3MgPSB7XG4gIGJpbmFyeTogYmluYXJ5LFxuICBib29sOiBib29sT2JqLFxuICBmbG9hdDogZmxvYXRPYmosXG4gIGZsb2F0RXhwOiBleHBPYmosXG4gIGZsb2F0TmFOOiBuYW5PYmosXG4gIGZsb2F0VGltZTogZmxvYXRUaW1lLFxuICBpbnQ6IGludE9iaixcbiAgaW50SGV4OiBoZXhPYmosXG4gIGludE9jdDogb2N0T2JqLFxuICBpbnRUaW1lOiBpbnRUaW1lLFxuICBtYXA6IG1hcCxcbiAgbnVsbDogbnVsbE9iaixcbiAgb21hcDogb21hcCxcbiAgcGFpcnM6IHBhaXJzLFxuICBzZXE6IHNlcSxcbiAgc2V0OiBzZXQsXG4gIHRpbWVzdGFtcDogdGltZXN0YW1wXG59O1xuXG5mdW5jdGlvbiBmaW5kVGFnT2JqZWN0KHZhbHVlLCB0YWdOYW1lLCB0YWdzKSB7XG4gIGlmICh0YWdOYW1lKSB7XG4gICAgdmFyIG1hdGNoID0gdGFncy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnRhZyA9PT0gdGFnTmFtZTtcbiAgICB9KTtcbiAgICB2YXIgdGFnT2JqID0gbWF0Y2guZmluZChmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuICF0LmZvcm1hdDtcbiAgICB9KSB8fCBtYXRjaFswXTtcbiAgICBpZiAoIXRhZ09iaikgdGhyb3cgbmV3IEVycm9yKFwiVGFnIFwiLmNvbmNhdCh0YWdOYW1lLCBcIiBub3QgZm91bmRcIikpO1xuICAgIHJldHVybiB0YWdPYmo7XG4gIH0gLy8gVE9ETzogZGVwcmVjYXRlL3JlbW92ZSBjbGFzcyBjaGVja1xuXG5cbiAgcmV0dXJuIHRhZ3MuZmluZChmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiAodC5pZGVudGlmeSAmJiB0LmlkZW50aWZ5KHZhbHVlKSB8fCB0LmNsYXNzICYmIHZhbHVlIGluc3RhbmNlb2YgdC5jbGFzcykgJiYgIXQuZm9ybWF0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTm9kZSh2YWx1ZSwgdGFnTmFtZSwgY3R4KSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5vZGUpIHJldHVybiB2YWx1ZTtcbiAgdmFyIGRlZmF1bHRQcmVmaXggPSBjdHguZGVmYXVsdFByZWZpeCxcbiAgICAgIG9uVGFnT2JqID0gY3R4Lm9uVGFnT2JqLFxuICAgICAgcHJldk9iamVjdHMgPSBjdHgucHJldk9iamVjdHMsXG4gICAgICBzY2hlbWEgPSBjdHguc2NoZW1hLFxuICAgICAgd3JhcFNjYWxhcnMgPSBjdHgud3JhcFNjYWxhcnM7XG4gIGlmICh0YWdOYW1lICYmIHRhZ05hbWUuc3RhcnRzV2l0aCgnISEnKSkgdGFnTmFtZSA9IGRlZmF1bHRQcmVmaXggKyB0YWdOYW1lLnNsaWNlKDIpO1xuICB2YXIgdGFnT2JqID0gZmluZFRhZ09iamVjdCh2YWx1ZSwgdGFnTmFtZSwgc2NoZW1hLnRhZ3MpO1xuXG4gIGlmICghdGFnT2JqKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHZhbHVlID0gdmFsdWUudG9KU09OKCk7XG4gICAgaWYgKF90eXBlb2YodmFsdWUpICE9PSAnb2JqZWN0JykgcmV0dXJuIHdyYXBTY2FsYXJzID8gbmV3IFNjYWxhcih2YWx1ZSkgOiB2YWx1ZTtcbiAgICB0YWdPYmogPSB2YWx1ZSBpbnN0YW5jZW9mIE1hcCA/IG1hcCA6IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0gPyBzZXEgOiBtYXA7XG4gIH1cblxuICBpZiAob25UYWdPYmopIHtcbiAgICBvblRhZ09iaih0YWdPYmopO1xuICAgIGRlbGV0ZSBjdHgub25UYWdPYmo7XG4gIH0gLy8gRGV0ZWN0IGR1cGxpY2F0ZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIG9iamVjdCAmIHVzZSBBbGlhcyBub2RlcyBmb3IgYWxsXG4gIC8vIGFmdGVyIGZpcnN0LiBUaGUgYG9iamAgd3JhcHBlciBhbGxvd3MgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgdG8gcmVzb2x2ZS5cblxuXG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHByZXZPYmplY3RzKSB7XG4gICAgdmFyIHByZXYgPSBwcmV2T2JqZWN0cy5nZXQodmFsdWUpO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIHZhciBhbGlhcyA9IG5ldyBBbGlhcyhwcmV2KTsgLy8gbGVhdmVzIHNvdXJjZSBkaXJ0eTsgbXVzdCBiZSBjbGVhbmVkIGJ5IGNhbGxlclxuXG4gICAgICBjdHguYWxpYXNOb2Rlcy5wdXNoKGFsaWFzKTsgLy8gZGVmaW5lZCBhbG9uZyB3aXRoIHByZXZPYmplY3RzXG5cbiAgICAgIHJldHVybiBhbGlhcztcbiAgICB9XG5cbiAgICBvYmoudmFsdWUgPSB2YWx1ZTtcbiAgICBwcmV2T2JqZWN0cy5zZXQodmFsdWUsIG9iaik7XG4gIH1cblxuICBvYmoubm9kZSA9IHRhZ09iai5jcmVhdGVOb2RlID8gdGFnT2JqLmNyZWF0ZU5vZGUoY3R4LnNjaGVtYSwgdmFsdWUsIGN0eCkgOiB3cmFwU2NhbGFycyA/IG5ldyBTY2FsYXIodmFsdWUpIDogdmFsdWU7XG4gIGlmICh0YWdOYW1lICYmIG9iai5ub2RlIGluc3RhbmNlb2YgTm9kZSkgb2JqLm5vZGUudGFnID0gdGFnTmFtZTtcbiAgcmV0dXJuIG9iai5ub2RlO1xufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFUYWdzKHNjaGVtYXMsIGtub3duVGFncywgY3VzdG9tVGFncywgc2NoZW1hSWQpIHtcbiAgdmFyIHRhZ3MgPSBzY2hlbWFzW3NjaGVtYUlkLnJlcGxhY2UoL1xcVy9nLCAnJyldOyAvLyAneWFtbC0xLjEnIC0+ICd5YW1sMTEnXG5cbiAgaWYgKCF0YWdzKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWFzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSk7XG4gICAgfSkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHNjaGVtYSBcXFwiXCIuY29uY2F0KHNjaGVtYUlkLCBcIlxcXCI7IHVzZSBvbmUgb2YgXCIpLmNvbmNhdChrZXlzKSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21UYWdzKSkge1xuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjdXN0b21UYWdzKSxcbiAgICAgICAgX3N0ZXA7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIHRhZyA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB0YWdzID0gdGFncy5jb25jYXQodGFnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBjdXN0b21UYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGFncyA9IGN1c3RvbVRhZ3ModGFncy5zbGljZSgpKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBfdGFnID0gdGFnc1tpXTtcblxuICAgIGlmICh0eXBlb2YgX3RhZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciB0YWdPYmogPSBrbm93blRhZ3NbX3RhZ107XG5cbiAgICAgIGlmICghdGFnT2JqKSB7XG4gICAgICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzKGtub3duVGFncykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KTtcbiAgICAgICAgfSkuam9pbignLCAnKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGN1c3RvbSB0YWcgXFxcIlwiLmNvbmNhdChfdGFnLCBcIlxcXCI7IHVzZSBvbmUgb2YgXCIpLmNvbmNhdChfa2V5cykpO1xuICAgICAgfVxuXG4gICAgICB0YWdzW2ldID0gdGFnT2JqO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YWdzO1xufVxuXG52YXIgc29ydE1hcEVudHJpZXNCeUtleSA9IGZ1bmN0aW9uIHNvcnRNYXBFbnRyaWVzQnlLZXkoYSwgYikge1xuICByZXR1cm4gYS5rZXkgPCBiLmtleSA/IC0xIDogYS5rZXkgPiBiLmtleSA/IDEgOiAwO1xufTtcblxudmFyIFNjaGVtYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFRPRE86IHJlbW92ZSBpbiB2MlxuICAvLyBUT0RPOiByZW1vdmUgaW4gdjJcbiAgZnVuY3Rpb24gU2NoZW1hKF9yZWYpIHtcbiAgICB2YXIgY3VzdG9tVGFncyA9IF9yZWYuY3VzdG9tVGFncyxcbiAgICAgICAgbWVyZ2UgPSBfcmVmLm1lcmdlLFxuICAgICAgICBzY2hlbWEgPSBfcmVmLnNjaGVtYSxcbiAgICAgICAgc29ydE1hcEVudHJpZXMgPSBfcmVmLnNvcnRNYXBFbnRyaWVzLFxuICAgICAgICBkZXByZWNhdGVkQ3VzdG9tVGFncyA9IF9yZWYudGFncztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTY2hlbWEpO1xuXG4gICAgdGhpcy5tZXJnZSA9ICEhbWVyZ2U7XG4gICAgdGhpcy5uYW1lID0gc2NoZW1hO1xuICAgIHRoaXMuc29ydE1hcEVudHJpZXMgPSBzb3J0TWFwRW50cmllcyA9PT0gdHJ1ZSA/IHNvcnRNYXBFbnRyaWVzQnlLZXkgOiBzb3J0TWFwRW50cmllcyB8fCBudWxsO1xuICAgIGlmICghY3VzdG9tVGFncyAmJiBkZXByZWNhdGVkQ3VzdG9tVGFncykgd2Fybk9wdGlvbkRlcHJlY2F0aW9uKCd0YWdzJywgJ2N1c3RvbVRhZ3MnKTtcbiAgICB0aGlzLnRhZ3MgPSBnZXRTY2hlbWFUYWdzKHNjaGVtYXMsIHRhZ3MsIGN1c3RvbVRhZ3MgfHwgZGVwcmVjYXRlZEN1c3RvbVRhZ3MsIHNjaGVtYSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2NoZW1hLCBbe1xuICAgIGtleTogXCJjcmVhdGVOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZU5vZGUkMSh2YWx1ZSwgd3JhcFNjYWxhcnMsIHRhZ05hbWUsIGN0eCkge1xuICAgICAgdmFyIGJhc2VDdHggPSB7XG4gICAgICAgIGRlZmF1bHRQcmVmaXg6IFNjaGVtYS5kZWZhdWx0UHJlZml4LFxuICAgICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICAgIHdyYXBTY2FsYXJzOiB3cmFwU2NhbGFyc1xuICAgICAgfTtcbiAgICAgIHZhciBjcmVhdGVDdHggPSBjdHggPyBPYmplY3QuYXNzaWduKGN0eCwgYmFzZUN0eCkgOiBiYXNlQ3R4O1xuICAgICAgcmV0dXJuIGNyZWF0ZU5vZGUodmFsdWUsIHRhZ05hbWUsIGNyZWF0ZUN0eCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVBhaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlUGFpcihrZXksIHZhbHVlLCBjdHgpIHtcbiAgICAgIGlmICghY3R4KSBjdHggPSB7XG4gICAgICAgIHdyYXBTY2FsYXJzOiB0cnVlXG4gICAgICB9O1xuICAgICAgdmFyIGsgPSB0aGlzLmNyZWF0ZU5vZGUoa2V5LCBjdHgud3JhcFNjYWxhcnMsIG51bGwsIGN0eCk7XG4gICAgICB2YXIgdiA9IHRoaXMuY3JlYXRlTm9kZSh2YWx1ZSwgY3R4LndyYXBTY2FsYXJzLCBudWxsLCBjdHgpO1xuICAgICAgcmV0dXJuIG5ldyBQYWlyKGssIHYpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTY2hlbWE7XG59KCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTY2hlbWEsIFwiZGVmYXVsdFByZWZpeFwiLCBkZWZhdWx0VGFnUHJlZml4KTtcblxuX2RlZmluZVByb3BlcnR5KFNjaGVtYSwgXCJkZWZhdWx0VGFnc1wiLCBkZWZhdWx0VGFncyk7XG5cbmV4cG9ydCB7IFNjaGVtYSBhcyBTIH07XG4iLCJpbXBvcnQgeyBkIGFzIGRlZmF1bHRUYWdQcmVmaXgsIF8gYXMgX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIsIGEgYXMgX3R5cGVvZiwgYiBhcyBfY3JlYXRlQ2xhc3MsIGMgYXMgX2NsYXNzQ2FsbENoZWNrLCBlIGFzIF9kZWZpbmVQcm9wZXJ0eSwgWSBhcyBZQU1MU3ludGF4RXJyb3IsIFQgYXMgVHlwZSwgZiBhcyBZQU1MV2FybmluZywgZyBhcyBZQU1MU2VtYW50aWNFcnJvciwgaCBhcyBfc2xpY2VkVG9BcnJheSwgaSBhcyBZQU1MRXJyb3IsIGogYXMgX2luaGVyaXRzLCBrIGFzIF9jcmVhdGVTdXBlciB9IGZyb20gJy4vUGxhaW5WYWx1ZS1mZjUxNDdjNi5qcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZSQxIH0gZnJvbSAnLi9wYXJzZS1jc3QuanMnO1xuaW1wb3J0IHsgYiBhcyBiaW5hcnlPcHRpb25zLCBhIGFzIGJvb2xPcHRpb25zLCBpIGFzIGludE9wdGlvbnMsIG4gYXMgbnVsbE9wdGlvbnMsIHMgYXMgc3RyT3B0aW9ucywgTiBhcyBOb2RlLCBQIGFzIFBhaXIsIFMgYXMgU2NhbGFyLCBjIGFzIHN0cmluZ2lmeVN0cmluZywgQSBhcyBBbGlhcywgWSBhcyBZQU1MU2VxLCBkIGFzIFlBTUxNYXAsIE0gYXMgTWVyZ2UsIEMgYXMgQ29sbGVjdGlvbiwgciBhcyByZXNvbHZlTm9kZSwgZSBhcyBpc0VtcHR5UGF0aCwgdCBhcyB0b0pTT04sIGYgYXMgYWRkQ29tbWVudCB9IGZyb20gJy4vcmVzb2x2ZVNlcS0wNDgyNWYzMC5qcyc7XG5pbXBvcnQgeyBTIGFzIFNjaGVtYSB9IGZyb20gJy4vU2NoZW1hLTJiZjJjNzRlLmpzJztcbmltcG9ydCB7IHcgYXMgd2FybiB9IGZyb20gJy4vd2FybmluZ3MtMGU0YjcwZDMuanMnO1xuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFuY2hvclByZWZpeDogJ2EnLFxuICBjdXN0b21UYWdzOiBudWxsLFxuICBpbmRlbnQ6IDIsXG4gIGluZGVudFNlcTogdHJ1ZSxcbiAga2VlcENzdE5vZGVzOiBmYWxzZSxcbiAga2VlcE5vZGVUeXBlczogdHJ1ZSxcbiAga2VlcEJsb2JzSW5KU09OOiB0cnVlLFxuICBtYXBBc01hcDogZmFsc2UsXG4gIG1heEFsaWFzQ291bnQ6IDEwMCxcbiAgcHJldHR5RXJyb3JzOiBmYWxzZSxcbiAgLy8gVE9ETyBTZXQgdHJ1ZSBpbiB2MlxuICBzaW1wbGVLZXlzOiBmYWxzZSxcbiAgdmVyc2lvbjogJzEuMidcbn07XG52YXIgc2NhbGFyT3B0aW9ucyA9IHtcbiAgZ2V0IGJpbmFyeSgpIHtcbiAgICByZXR1cm4gYmluYXJ5T3B0aW9ucztcbiAgfSxcblxuICBzZXQgYmluYXJ5KG9wdCkge1xuICAgIE9iamVjdC5hc3NpZ24oYmluYXJ5T3B0aW9ucywgb3B0KTtcbiAgfSxcblxuICBnZXQgYm9vbCgpIHtcbiAgICByZXR1cm4gYm9vbE9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0IGJvb2wob3B0KSB7XG4gICAgT2JqZWN0LmFzc2lnbihib29sT3B0aW9ucywgb3B0KTtcbiAgfSxcblxuICBnZXQgaW50KCkge1xuICAgIHJldHVybiBpbnRPcHRpb25zO1xuICB9LFxuXG4gIHNldCBpbnQob3B0KSB7XG4gICAgT2JqZWN0LmFzc2lnbihpbnRPcHRpb25zLCBvcHQpO1xuICB9LFxuXG4gIGdldCBudWxsKCkge1xuICAgIHJldHVybiBudWxsT3B0aW9ucztcbiAgfSxcblxuICBzZXQgbnVsbChvcHQpIHtcbiAgICBPYmplY3QuYXNzaWduKG51bGxPcHRpb25zLCBvcHQpO1xuICB9LFxuXG4gIGdldCBzdHIoKSB7XG4gICAgcmV0dXJuIHN0ck9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0IHN0cihvcHQpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0ck9wdGlvbnMsIG9wdCk7XG4gIH1cblxufTtcbnZhciBkb2N1bWVudE9wdGlvbnMgPSB7XG4gICcxLjAnOiB7XG4gICAgc2NoZW1hOiAneWFtbC0xLjEnLFxuICAgIG1lcmdlOiB0cnVlLFxuICAgIHRhZ1ByZWZpeGVzOiBbe1xuICAgICAgaGFuZGxlOiAnIScsXG4gICAgICBwcmVmaXg6IGRlZmF1bHRUYWdQcmVmaXhcbiAgICB9LCB7XG4gICAgICBoYW5kbGU6ICchIScsXG4gICAgICBwcmVmaXg6ICd0YWc6cHJpdmF0ZS55YW1sLm9yZywyMDAyOidcbiAgICB9XVxuICB9LFxuICAnMS4xJzoge1xuICAgIHNjaGVtYTogJ3lhbWwtMS4xJyxcbiAgICBtZXJnZTogdHJ1ZSxcbiAgICB0YWdQcmVmaXhlczogW3tcbiAgICAgIGhhbmRsZTogJyEnLFxuICAgICAgcHJlZml4OiAnISdcbiAgICB9LCB7XG4gICAgICBoYW5kbGU6ICchIScsXG4gICAgICBwcmVmaXg6IGRlZmF1bHRUYWdQcmVmaXhcbiAgICB9XVxuICB9LFxuICAnMS4yJzoge1xuICAgIHNjaGVtYTogJ2NvcmUnLFxuICAgIG1lcmdlOiBmYWxzZSxcbiAgICB0YWdQcmVmaXhlczogW3tcbiAgICAgIGhhbmRsZTogJyEnLFxuICAgICAgcHJlZml4OiAnISdcbiAgICB9LCB7XG4gICAgICBoYW5kbGU6ICchIScsXG4gICAgICBwcmVmaXg6IGRlZmF1bHRUYWdQcmVmaXhcbiAgICB9XVxuICB9XG59O1xuXG5mdW5jdGlvbiBzdHJpbmdpZnlUYWcoZG9jLCB0YWcpIHtcbiAgaWYgKChkb2MudmVyc2lvbiB8fCBkb2Mub3B0aW9ucy52ZXJzaW9uKSA9PT0gJzEuMCcpIHtcbiAgICB2YXIgcHJpdiA9IHRhZy5tYXRjaCgvXnRhZzpwcml2YXRlXFwueWFtbFxcLm9yZywyMDAyOihbXjovXSspJC8pO1xuICAgIGlmIChwcml2KSByZXR1cm4gJyEnICsgcHJpdlsxXTtcbiAgICB2YXIgdm9jYWIgPSB0YWcubWF0Y2goL150YWc6KFthLXpBLVowLTktXSspXFwueWFtbFxcLm9yZywyMDAyOiguKikvKTtcbiAgICByZXR1cm4gdm9jYWIgPyBcIiFcIi5jb25jYXQodm9jYWJbMV0sIFwiL1wiKS5jb25jYXQodm9jYWJbMl0pIDogXCIhXCIuY29uY2F0KHRhZy5yZXBsYWNlKC9edGFnOi8sICcnKSk7XG4gIH1cblxuICB2YXIgcCA9IGRvYy50YWdQcmVmaXhlcy5maW5kKGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHRhZy5pbmRleE9mKHAucHJlZml4KSA9PT0gMDtcbiAgfSk7XG5cbiAgaWYgKCFwKSB7XG4gICAgdmFyIGR0cCA9IGRvYy5nZXREZWZhdWx0cygpLnRhZ1ByZWZpeGVzO1xuICAgIHAgPSBkdHAgJiYgZHRwLmZpbmQoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiB0YWcuaW5kZXhPZihwLnByZWZpeCkgPT09IDA7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIXApIHJldHVybiB0YWdbMF0gPT09ICchJyA/IHRhZyA6IFwiITxcIi5jb25jYXQodGFnLCBcIj5cIik7XG4gIHZhciBzdWZmaXggPSB0YWcuc3Vic3RyKHAucHJlZml4Lmxlbmd0aCkucmVwbGFjZSgvWyEsW1xcXXt9XS9nLCBmdW5jdGlvbiAoY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJyEnOiAnJTIxJyxcbiAgICAgICcsJzogJyUyQycsXG4gICAgICAnWyc6ICclNUInLFxuICAgICAgJ10nOiAnJTVEJyxcbiAgICAgICd7JzogJyU3QicsXG4gICAgICAnfSc6ICclN0QnXG4gICAgfVtjaF07XG4gIH0pO1xuICByZXR1cm4gcC5oYW5kbGUgKyBzdWZmaXg7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ09iamVjdCh0YWdzLCBpdGVtKSB7XG4gIGlmIChpdGVtIGluc3RhbmNlb2YgQWxpYXMpIHJldHVybiBBbGlhcztcblxuICBpZiAoaXRlbS50YWcpIHtcbiAgICB2YXIgbWF0Y2ggPSB0YWdzLmZpbHRlcihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQudGFnID09PSBpdGVtLnRhZztcbiAgICB9KTtcbiAgICBpZiAobWF0Y2gubGVuZ3RoID4gMCkgcmV0dXJuIG1hdGNoLmZpbmQoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmZvcm1hdCA9PT0gaXRlbS5mb3JtYXQ7XG4gICAgfSkgfHwgbWF0Y2hbMF07XG4gIH1cblxuICB2YXIgdGFnT2JqLCBvYmo7XG5cbiAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTY2FsYXIpIHtcbiAgICBvYmogPSBpdGVtLnZhbHVlOyAvLyBUT0RPOiBkZXByZWNhdGUvcmVtb3ZlIGNsYXNzIGNoZWNrXG5cbiAgICB2YXIgX21hdGNoID0gdGFncy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmlkZW50aWZ5ICYmIHQuaWRlbnRpZnkob2JqKSB8fCB0LmNsYXNzICYmIG9iaiBpbnN0YW5jZW9mIHQuY2xhc3M7XG4gICAgfSk7XG5cbiAgICB0YWdPYmogPSBfbWF0Y2guZmluZChmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZm9ybWF0ID09PSBpdGVtLmZvcm1hdDtcbiAgICB9KSB8fCBfbWF0Y2guZmluZChmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuICF0LmZvcm1hdDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmogPSBpdGVtO1xuICAgIHRhZ09iaiA9IHRhZ3MuZmluZChmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQubm9kZUNsYXNzICYmIG9iaiBpbnN0YW5jZW9mIHQubm9kZUNsYXNzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCF0YWdPYmopIHtcbiAgICB2YXIgbmFtZSA9IG9iaiAmJiBvYmouY29uc3RydWN0b3IgPyBvYmouY29uc3RydWN0b3IubmFtZSA6IF90eXBlb2Yob2JqKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWcgbm90IHJlc29sdmVkIGZvciBcIi5jb25jYXQobmFtZSwgXCIgdmFsdWVcIikpO1xuICB9XG5cbiAgcmV0dXJuIHRhZ09iajtcbn0gLy8gbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB2YWx1ZSBzdHJpbmdpZmllciB0byBhbGxvdyBmb3IgY2lyY3VsYXIgYW5jaG9yIHJlZnNcblxuXG5mdW5jdGlvbiBzdHJpbmdpZnlQcm9wcyhub2RlLCB0YWdPYmosIF9yZWYpIHtcbiAgdmFyIGFuY2hvcnMgPSBfcmVmLmFuY2hvcnMsXG4gICAgICBkb2MgPSBfcmVmLmRvYztcbiAgdmFyIHByb3BzID0gW107XG4gIHZhciBhbmNob3IgPSBkb2MuYW5jaG9ycy5nZXROYW1lKG5vZGUpO1xuXG4gIGlmIChhbmNob3IpIHtcbiAgICBhbmNob3JzW2FuY2hvcl0gPSBub2RlO1xuICAgIHByb3BzLnB1c2goXCImXCIuY29uY2F0KGFuY2hvcikpO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnKSB7XG4gICAgcHJvcHMucHVzaChzdHJpbmdpZnlUYWcoZG9jLCBub2RlLnRhZykpO1xuICB9IGVsc2UgaWYgKCF0YWdPYmouZGVmYXVsdCkge1xuICAgIHByb3BzLnB1c2goc3RyaW5naWZ5VGFnKGRvYywgdGFnT2JqLnRhZykpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BzLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICB2YXIgX2N0eCRkb2MgPSBjdHguZG9jLFxuICAgICAgYW5jaG9ycyA9IF9jdHgkZG9jLmFuY2hvcnMsXG4gICAgICBzY2hlbWEgPSBfY3R4JGRvYy5zY2hlbWE7XG4gIHZhciB0YWdPYmo7XG5cbiAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIE5vZGUpKSB7XG4gICAgdmFyIGNyZWF0ZUN0eCA9IHtcbiAgICAgIGFsaWFzTm9kZXM6IFtdLFxuICAgICAgb25UYWdPYmo6IGZ1bmN0aW9uIG9uVGFnT2JqKG8pIHtcbiAgICAgICAgcmV0dXJuIHRhZ09iaiA9IG87XG4gICAgICB9LFxuICAgICAgcHJldk9iamVjdHM6IG5ldyBNYXAoKVxuICAgIH07XG4gICAgaXRlbSA9IHNjaGVtYS5jcmVhdGVOb2RlKGl0ZW0sIHRydWUsIG51bGwsIGNyZWF0ZUN0eCk7XG5cbiAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoY3JlYXRlQ3R4LmFsaWFzTm9kZXMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICB2YXIgYWxpYXMgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgYWxpYXMuc291cmNlID0gYWxpYXMuc291cmNlLm5vZGU7XG4gICAgICAgIHZhciBuYW1lID0gYW5jaG9ycy5nZXROYW1lKGFsaWFzLnNvdXJjZSk7XG5cbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgbmFtZSA9IGFuY2hvcnMubmV3TmFtZSgpO1xuICAgICAgICAgIGFuY2hvcnMubWFwW25hbWVdID0gYWxpYXMuc291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfaXRlcmF0b3IuZigpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpdGVtIGluc3RhbmNlb2YgUGFpcikgcmV0dXJuIGl0ZW0udG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgaWYgKCF0YWdPYmopIHRhZ09iaiA9IGdldFRhZ09iamVjdChzY2hlbWEudGFncywgaXRlbSk7XG4gIHZhciBwcm9wcyA9IHN0cmluZ2lmeVByb3BzKGl0ZW0sIHRhZ09iaiwgY3R4KTtcbiAgaWYgKHByb3BzLmxlbmd0aCA+IDApIGN0eC5pbmRlbnRBdFN0YXJ0ID0gKGN0eC5pbmRlbnRBdFN0YXJ0IHx8IDApICsgcHJvcHMubGVuZ3RoICsgMTtcbiAgdmFyIHN0ciA9IHR5cGVvZiB0YWdPYmouc3RyaW5naWZ5ID09PSAnZnVuY3Rpb24nID8gdGFnT2JqLnN0cmluZ2lmeShpdGVtLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApIDogaXRlbSBpbnN0YW5jZW9mIFNjYWxhciA/IHN0cmluZ2lmeVN0cmluZyhpdGVtLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApIDogaXRlbS50b1N0cmluZyhjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICBpZiAoIXByb3BzKSByZXR1cm4gc3RyO1xuICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIFNjYWxhciB8fCBzdHJbMF0gPT09ICd7JyB8fCBzdHJbMF0gPT09ICdbJyA/IFwiXCIuY29uY2F0KHByb3BzLCBcIiBcIikuY29uY2F0KHN0cikgOiBcIlwiLmNvbmNhdChwcm9wcywgXCJcXG5cIikuY29uY2F0KGN0eC5pbmRlbnQpLmNvbmNhdChzdHIpO1xufVxuXG52YXIgQW5jaG9ycyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIF9jcmVhdGVDbGFzcyhBbmNob3JzLCBudWxsLCBbe1xuICAgIGtleTogXCJ2YWxpZEFuY2hvck5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRBbmNob3JOb2RlKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgU2NhbGFyIHx8IG5vZGUgaW5zdGFuY2VvZiBZQU1MU2VxIHx8IG5vZGUgaW5zdGFuY2VvZiBZQU1MTWFwO1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIEFuY2hvcnMocHJlZml4KSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFuY2hvcnMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWFwXCIsIHt9KTtcblxuICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEFuY2hvcnMsIFt7XG4gICAga2V5OiBcImNyZWF0ZUFsaWFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUFsaWFzKG5vZGUsIG5hbWUpIHtcbiAgICAgIHRoaXMuc2V0QW5jaG9yKG5vZGUsIG5hbWUpO1xuICAgICAgcmV0dXJuIG5ldyBBbGlhcyhub2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlTWVyZ2VQYWlyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlUGFpcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBtZXJnZSA9IG5ldyBNZXJnZSgpO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc291cmNlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgc291cmNlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgbWVyZ2UudmFsdWUuaXRlbXMgPSBzb3VyY2VzLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyBpbnN0YW5jZW9mIEFsaWFzKSB7XG4gICAgICAgICAgaWYgKHMuc291cmNlIGluc3RhbmNlb2YgWUFNTE1hcCkgcmV0dXJuIHM7XG4gICAgICAgIH0gZWxzZSBpZiAocyBpbnN0YW5jZW9mIFlBTUxNYXApIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuY3JlYXRlQWxpYXMocyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lcmdlIHNvdXJjZXMgbXVzdCBiZSBNYXAgbm9kZXMgb3IgdGhlaXIgQWxpYXNlcycpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWVyZ2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE5hbWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TmFtZShub2RlKSB7XG4gICAgICB2YXIgbWFwID0gdGhpcy5tYXA7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5maW5kKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBtYXBbYV0gPT09IG5vZGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TmFtZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TmFtZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE5vZGUobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFwW25hbWVdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJuZXdOYW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5ld05hbWUocHJlZml4KSB7XG4gICAgICBpZiAoIXByZWZpeCkgcHJlZml4ID0gdGhpcy5wcmVmaXg7XG4gICAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLm1hcCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyB0cnVlOyArK2kpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChpKTtcbiAgICAgICAgaWYgKCFuYW1lcy5pbmNsdWRlcyhuYW1lKSkgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgfSAvLyBEdXJpbmcgcGFyc2luZywgbWFwICYgYWxpYXNlcyBjb250YWluIENTVCBub2Rlc1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVzb2x2ZU5vZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmVOb2RlcygpIHtcbiAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCxcbiAgICAgICAgICBfY3N0QWxpYXNlcyA9IHRoaXMuX2NzdEFsaWFzZXM7XG4gICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgbWFwW2FdID0gbWFwW2FdLnJlc29sdmVkO1xuICAgICAgfSk7XG5cbiAgICAgIF9jc3RBbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgYS5zb3VyY2UgPSBhLnNvdXJjZS5yZXNvbHZlZDtcbiAgICAgIH0pO1xuXG4gICAgICBkZWxldGUgdGhpcy5fY3N0QWxpYXNlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0QW5jaG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEFuY2hvcihub2RlLCBuYW1lKSB7XG4gICAgICBpZiAobm9kZSAhPSBudWxsICYmICFBbmNob3JzLnZhbGlkQW5jaG9yTm9kZShub2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuY2hvcnMgbWF5IG9ubHkgYmUgc2V0IGZvciBTY2FsYXIsIFNlcSBhbmQgTWFwIG5vZGVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lICYmIC9bXFx4MDAtXFx4MTlcXHMsW1xcXXt9XS8udGVzdChuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuY2hvciBuYW1lcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFyYWN0ZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXAgPSB0aGlzLm1hcDtcbiAgICAgIHZhciBwcmV2ID0gbm9kZSAmJiBPYmplY3Qua2V5cyhtYXApLmZpbmQoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIG1hcFthXSA9PT0gbm9kZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJldikge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2ICE9PSBuYW1lKSB7XG4gICAgICAgICAgZGVsZXRlIG1hcFtwcmV2XTtcbiAgICAgICAgICBtYXBbbmFtZV0gPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICAgIG5hbWUgPSB0aGlzLm5ld05hbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcFtuYW1lXSA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBbmNob3JzO1xufSgpO1xuXG52YXIgdmlzaXQgPSBmdW5jdGlvbiB2aXNpdChub2RlLCB0YWdzKSB7XG4gIGlmIChub2RlICYmIF90eXBlb2Yobm9kZSkgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSB7XG4gICAgICBpZiAodGFnKSB0YWdzW3RhZ10gPSB0cnVlO1xuICAgICAgbm9kZS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiB2aXNpdChuLCB0YWdzKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFBhaXIpIHtcbiAgICAgIHZpc2l0KG5vZGUua2V5LCB0YWdzKTtcbiAgICAgIHZpc2l0KG5vZGUudmFsdWUsIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNjYWxhcikge1xuICAgICAgaWYgKHRhZykgdGFnc1t0YWddID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFncztcbn07XG5cbnZhciBsaXN0VGFnTmFtZXMgPSBmdW5jdGlvbiBsaXN0VGFnTmFtZXMobm9kZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXModmlzaXQobm9kZSwge30pKTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlQ29udGVudHMoZG9jLCBjb250ZW50cykge1xuICB2YXIgY29tbWVudHMgPSB7XG4gICAgYmVmb3JlOiBbXSxcbiAgICBhZnRlcjogW11cbiAgfTtcbiAgdmFyIGJvZHkgPSB1bmRlZmluZWQ7XG4gIHZhciBzcGFjZUJlZm9yZSA9IGZhbHNlO1xuXG4gIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjb250ZW50cyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgbm9kZSA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICBpZiAobm9kZS52YWx1ZVJhbmdlKSB7XG4gICAgICAgIGlmIChib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbXNnID0gJ0RvY3VtZW50IGNvbnRhaW5zIHRyYWlsaW5nIGNvbnRlbnQgbm90IHNlcGFyYXRlZCBieSBhIC4uLiBvciAtLS0gbGluZSc7XG4gICAgICAgICAgZG9jLmVycm9ycy5wdXNoKG5ldyBZQU1MU3ludGF4RXJyb3Iobm9kZSwgbXNnKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gcmVzb2x2ZU5vZGUoZG9jLCBub2RlKTtcblxuICAgICAgICBpZiAoc3BhY2VCZWZvcmUpIHtcbiAgICAgICAgICByZXMuc3BhY2VCZWZvcmUgPSB0cnVlO1xuICAgICAgICAgIHNwYWNlQmVmb3JlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gcmVzO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmNvbW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGNjID0gYm9keSA9PT0gdW5kZWZpbmVkID8gY29tbWVudHMuYmVmb3JlIDogY29tbWVudHMuYWZ0ZXI7XG4gICAgICAgIGNjLnB1c2gobm9kZS5jb21tZW50KTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBUeXBlLkJMQU5LX0xJTkUpIHtcbiAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChib2R5ID09PSB1bmRlZmluZWQgJiYgY29tbWVudHMuYmVmb3JlLmxlbmd0aCA+IDAgJiYgIWRvYy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgICAgLy8gc3BhY2Utc2VwYXJhdGVkIGNvbW1lbnRzIGF0IHN0YXJ0IGFyZSBwYXJzZWQgYXMgZG9jdW1lbnQgY29tbWVudHNcbiAgICAgICAgICBkb2MuY29tbWVudEJlZm9yZSA9IGNvbW1lbnRzLmJlZm9yZS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBjb21tZW50cy5iZWZvcmUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgZG9jLmNvbnRlbnRzID0gYm9keSB8fCBudWxsO1xuXG4gIGlmICghYm9keSkge1xuICAgIGRvYy5jb21tZW50ID0gY29tbWVudHMuYmVmb3JlLmNvbmNhdChjb21tZW50cy5hZnRlcikuam9pbignXFxuJykgfHwgbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2IgPSBjb21tZW50cy5iZWZvcmUuam9pbignXFxuJyk7XG5cbiAgICBpZiAoY2IpIHtcbiAgICAgIHZhciBjYk5vZGUgPSBib2R5IGluc3RhbmNlb2YgQ29sbGVjdGlvbiAmJiBib2R5Lml0ZW1zWzBdID8gYm9keS5pdGVtc1swXSA6IGJvZHk7XG4gICAgICBjYk5vZGUuY29tbWVudEJlZm9yZSA9IGNiTm9kZS5jb21tZW50QmVmb3JlID8gXCJcIi5jb25jYXQoY2IsIFwiXFxuXCIpLmNvbmNhdChjYk5vZGUuY29tbWVudEJlZm9yZSkgOiBjYjtcbiAgICB9XG5cbiAgICBkb2MuY29tbWVudCA9IGNvbW1lbnRzLmFmdGVyLmpvaW4oJ1xcbicpIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRhZ0RpcmVjdGl2ZShfcmVmLCBkaXJlY3RpdmUpIHtcbiAgdmFyIHRhZ1ByZWZpeGVzID0gX3JlZi50YWdQcmVmaXhlcztcblxuICB2YXIgX2RpcmVjdGl2ZSRwYXJhbWV0ZXJzID0gX3NsaWNlZFRvQXJyYXkoZGlyZWN0aXZlLnBhcmFtZXRlcnMsIDIpLFxuICAgICAgaGFuZGxlID0gX2RpcmVjdGl2ZSRwYXJhbWV0ZXJzWzBdLFxuICAgICAgcHJlZml4ID0gX2RpcmVjdGl2ZSRwYXJhbWV0ZXJzWzFdO1xuXG4gIGlmICghaGFuZGxlIHx8ICFwcmVmaXgpIHtcbiAgICB2YXIgbXNnID0gJ0luc3VmZmljaWVudCBwYXJhbWV0ZXJzIGdpdmVuIGZvciAlVEFHIGRpcmVjdGl2ZSc7XG4gICAgdGhyb3cgbmV3IFlBTUxTZW1hbnRpY0Vycm9yKGRpcmVjdGl2ZSwgbXNnKTtcbiAgfVxuXG4gIGlmICh0YWdQcmVmaXhlcy5zb21lKGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHAuaGFuZGxlID09PSBoYW5kbGU7XG4gIH0pKSB7XG4gICAgdmFyIF9tc2cgPSAnVGhlICVUQUcgZGlyZWN0aXZlIG11c3Qgb25seSBiZSBnaXZlbiBhdCBtb3N0IG9uY2UgcGVyIGhhbmRsZSBpbiB0aGUgc2FtZSBkb2N1bWVudC4nO1xuICAgIHRocm93IG5ldyBZQU1MU2VtYW50aWNFcnJvcihkaXJlY3RpdmUsIF9tc2cpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYW5kbGU6IGhhbmRsZSxcbiAgICBwcmVmaXg6IHByZWZpeFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbERpcmVjdGl2ZShkb2MsIGRpcmVjdGl2ZSkge1xuICB2YXIgX2RpcmVjdGl2ZSRwYXJhbWV0ZXJzMiA9IF9zbGljZWRUb0FycmF5KGRpcmVjdGl2ZS5wYXJhbWV0ZXJzLCAxKSxcbiAgICAgIHZlcnNpb24gPSBfZGlyZWN0aXZlJHBhcmFtZXRlcnMyWzBdO1xuXG4gIGlmIChkaXJlY3RpdmUubmFtZSA9PT0gJ1lBTUw6MS4wJykgdmVyc2lvbiA9ICcxLjAnO1xuXG4gIGlmICghdmVyc2lvbikge1xuICAgIHZhciBtc2cgPSAnSW5zdWZmaWNpZW50IHBhcmFtZXRlcnMgZ2l2ZW4gZm9yICVZQU1MIGRpcmVjdGl2ZSc7XG4gICAgdGhyb3cgbmV3IFlBTUxTZW1hbnRpY0Vycm9yKGRpcmVjdGl2ZSwgbXNnKTtcbiAgfVxuXG4gIGlmICghZG9jdW1lbnRPcHRpb25zW3ZlcnNpb25dKSB7XG4gICAgdmFyIHYwID0gZG9jLnZlcnNpb24gfHwgZG9jLm9wdGlvbnMudmVyc2lvbjtcblxuICAgIHZhciBfbXNnMiA9IFwiRG9jdW1lbnQgd2lsbCBiZSBwYXJzZWQgYXMgWUFNTCBcIi5jb25jYXQodjAsIFwiIHJhdGhlciB0aGFuIFlBTUwgXCIpLmNvbmNhdCh2ZXJzaW9uKTtcblxuICAgIGRvYy53YXJuaW5ncy5wdXNoKG5ldyBZQU1MV2FybmluZyhkaXJlY3RpdmUsIF9tc2cyKSk7XG4gIH1cblxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuZnVuY3Rpb24gcGFyc2VEaXJlY3RpdmVzKGRvYywgZGlyZWN0aXZlcywgcHJldkRvYykge1xuICB2YXIgZGlyZWN0aXZlQ29tbWVudHMgPSBbXTtcbiAgdmFyIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZGlyZWN0aXZlcyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgZGlyZWN0aXZlID0gX3N0ZXAudmFsdWU7XG4gICAgICB2YXIgY29tbWVudCA9IGRpcmVjdGl2ZS5jb21tZW50LFxuICAgICAgICAgIG5hbWUgPSBkaXJlY3RpdmUubmFtZTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ1RBRyc6XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYy50YWdQcmVmaXhlcy5wdXNoKHJlc29sdmVUYWdEaXJlY3RpdmUoZG9jLCBkaXJlY3RpdmUpKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZG9jLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdZQU1MJzpcbiAgICAgICAgY2FzZSAnWUFNTDoxLjAnOlxuICAgICAgICAgIGlmIChkb2MudmVyc2lvbikge1xuICAgICAgICAgICAgdmFyIG1zZyA9ICdUaGUgJVlBTUwgZGlyZWN0aXZlIG11c3Qgb25seSBiZSBnaXZlbiBhdCBtb3N0IG9uY2UgcGVyIGRvY3VtZW50Lic7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxTZW1hbnRpY0Vycm9yKGRpcmVjdGl2ZSwgbXNnKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYy52ZXJzaW9uID0gcmVzb2x2ZVlhbWxEaXJlY3RpdmUoZG9jLCBkaXJlY3RpdmUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBfbXNnMyA9IFwiWUFNTCBvbmx5IHN1cHBvcnRzICVUQUcgYW5kICVZQU1MIGRpcmVjdGl2ZXMsIGFuZCBub3QgJVwiLmNvbmNhdChuYW1lKTtcblxuICAgICAgICAgICAgZG9jLndhcm5pbmdzLnB1c2gobmV3IFlBTUxXYXJuaW5nKGRpcmVjdGl2ZSwgX21zZzMpKTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1lbnQpIGRpcmVjdGl2ZUNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICBpZiAocHJldkRvYyAmJiAhaGFzRGlyZWN0aXZlcyAmJiAnMS4xJyA9PT0gKGRvYy52ZXJzaW9uIHx8IHByZXZEb2MudmVyc2lvbiB8fCBkb2Mub3B0aW9ucy52ZXJzaW9uKSkge1xuICAgIHZhciBjb3B5VGFnUHJlZml4ID0gZnVuY3Rpb24gY29weVRhZ1ByZWZpeChfcmVmMikge1xuICAgICAgdmFyIGhhbmRsZSA9IF9yZWYyLmhhbmRsZSxcbiAgICAgICAgICBwcmVmaXggPSBfcmVmMi5wcmVmaXg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYW5kbGU6IGhhbmRsZSxcbiAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGRvYy50YWdQcmVmaXhlcyA9IHByZXZEb2MudGFnUHJlZml4ZXMubWFwKGNvcHlUYWdQcmVmaXgpO1xuICAgIGRvYy52ZXJzaW9uID0gcHJldkRvYy52ZXJzaW9uO1xuICB9XG5cbiAgZG9jLmNvbW1lbnRCZWZvcmUgPSBkaXJlY3RpdmVDb21tZW50cy5qb2luKCdcXG4nKSB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRDb2xsZWN0aW9uKGNvbnRlbnRzKSB7XG4gIGlmIChjb250ZW50cyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHJldHVybiB0cnVlO1xuICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgWUFNTCBjb2xsZWN0aW9uIGFzIGRvY3VtZW50IGNvbnRlbnRzJyk7XG59XG5cbnZhciBEb2N1bWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERvY3VtZW50KG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRG9jdW1lbnQpO1xuXG4gICAgdGhpcy5hbmNob3JzID0gbmV3IEFuY2hvcnMob3B0aW9ucy5hbmNob3JQcmVmaXgpO1xuICAgIHRoaXMuY29tbWVudEJlZm9yZSA9IG51bGw7XG4gICAgdGhpcy5jb21tZW50ID0gbnVsbDtcbiAgICB0aGlzLmNvbnRlbnRzID0gbnVsbDtcbiAgICB0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnNjaGVtYSA9IG51bGw7XG4gICAgdGhpcy50YWdQcmVmaXhlcyA9IFtdO1xuICAgIHRoaXMudmVyc2lvbiA9IG51bGw7XG4gICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERvY3VtZW50LCBbe1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpO1xuICAgICAgcmV0dXJuIHRoaXMuY29udGVudHMuYWRkKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkSW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSW4ocGF0aCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydENvbGxlY3Rpb24odGhpcy5jb250ZW50cyk7XG4gICAgICB0aGlzLmNvbnRlbnRzLmFkZEluKHBhdGgsIHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpO1xuICAgICAgcmV0dXJuIHRoaXMuY29udGVudHMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZUluXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUluKHBhdGgpIHtcbiAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50cyA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udGVudHMgPSBudWxsO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRzLmRlbGV0ZUluKHBhdGgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXREZWZhdWx0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0cygpIHtcbiAgICAgIHJldHVybiBEb2N1bWVudC5kZWZhdWx0c1t0aGlzLnZlcnNpb25dIHx8IERvY3VtZW50LmRlZmF1bHRzW3RoaXMub3B0aW9ucy52ZXJzaW9uXSB8fCB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRzIGluc3RhbmNlb2YgQ29sbGVjdGlvbiA/IHRoaXMuY29udGVudHMuZ2V0KGtleSwga2VlcFNjYWxhcikgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluKHBhdGgsIGtlZXBTY2FsYXIpIHtcbiAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSkgcmV0dXJuICFrZWVwU2NhbGFyICYmIHRoaXMuY29udGVudHMgaW5zdGFuY2VvZiBTY2FsYXIgPyB0aGlzLmNvbnRlbnRzLnZhbHVlIDogdGhpcy5jb250ZW50cztcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRzIGluc3RhbmNlb2YgQ29sbGVjdGlvbiA/IHRoaXMuY29udGVudHMuZ2V0SW4ocGF0aCwga2VlcFNjYWxhcikgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZW50cyBpbnN0YW5jZW9mIENvbGxlY3Rpb24gPyB0aGlzLmNvbnRlbnRzLmhhcyhrZXkpIDogZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0luXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0luKHBhdGgpIHtcbiAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSkgcmV0dXJuIHRoaXMuY29udGVudHMgIT09IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRzIGluc3RhbmNlb2YgQ29sbGVjdGlvbiA/IHRoaXMuY29udGVudHMuaGFzSW4ocGF0aCkgOiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpO1xuICAgICAgdGhpcy5jb250ZW50cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldEluXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEluKHBhdGgsIHZhbHVlKSB7XG4gICAgICBpZiAoaXNFbXB0eVBhdGgocGF0aCkpIHRoaXMuY29udGVudHMgPSB2YWx1ZTtlbHNlIHtcbiAgICAgICAgYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKTtcbiAgICAgICAgdGhpcy5jb250ZW50cy5zZXRJbihwYXRoLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNjaGVtYVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTY2hlbWEoaWQsIGN1c3RvbVRhZ3MpIHtcbiAgICAgIGlmICghaWQgJiYgIWN1c3RvbVRhZ3MgJiYgdGhpcy5zY2hlbWEpIHJldHVybjtcbiAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdudW1iZXInKSBpZCA9IGlkLnRvRml4ZWQoMSk7XG5cbiAgICAgIGlmIChpZCA9PT0gJzEuMCcgfHwgaWQgPT09ICcxLjEnIHx8IGlkID09PSAnMS4yJykge1xuICAgICAgICBpZiAodGhpcy52ZXJzaW9uKSB0aGlzLnZlcnNpb24gPSBpZDtlbHNlIHRoaXMub3B0aW9ucy52ZXJzaW9uID0gaWQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuc2NoZW1hO1xuICAgICAgfSBlbHNlIGlmIChpZCAmJiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zY2hlbWEgPSBpZDtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VzdG9tVGFncykpIHRoaXMub3B0aW9ucy5jdXN0b21UYWdzID0gY3VzdG9tVGFncztcbiAgICAgIHZhciBvcHQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldERlZmF1bHRzKCksIHRoaXMub3B0aW9ucyk7XG4gICAgICB0aGlzLnNjaGVtYSA9IG5ldyBTY2hlbWEob3B0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZSwgcHJldkRvYykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwQ3N0Tm9kZXMpIHRoaXMuY3N0Tm9kZSA9IG5vZGU7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBOb2RlVHlwZXMpIHRoaXMudHlwZSA9ICdET0NVTUVOVCc7XG4gICAgICB2YXIgX25vZGUkZGlyZWN0aXZlcyA9IG5vZGUuZGlyZWN0aXZlcyxcbiAgICAgICAgICBkaXJlY3RpdmVzID0gX25vZGUkZGlyZWN0aXZlcyA9PT0gdm9pZCAwID8gW10gOiBfbm9kZSRkaXJlY3RpdmVzLFxuICAgICAgICAgIF9ub2RlJGNvbnRlbnRzID0gbm9kZS5jb250ZW50cyxcbiAgICAgICAgICBjb250ZW50cyA9IF9ub2RlJGNvbnRlbnRzID09PSB2b2lkIDAgPyBbXSA6IF9ub2RlJGNvbnRlbnRzLFxuICAgICAgICAgIGRpcmVjdGl2ZXNFbmRNYXJrZXIgPSBub2RlLmRpcmVjdGl2ZXNFbmRNYXJrZXIsXG4gICAgICAgICAgZXJyb3IgPSBub2RlLmVycm9yLFxuICAgICAgICAgIHZhbHVlUmFuZ2UgPSBub2RlLnZhbHVlUmFuZ2U7XG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnNvdXJjZSkgZXJyb3Iuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlRGlyZWN0aXZlcyh0aGlzLCBkaXJlY3RpdmVzLCBwcmV2RG9jKTtcbiAgICAgIGlmIChkaXJlY3RpdmVzRW5kTWFya2VyKSB0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yYW5nZSA9IHZhbHVlUmFuZ2UgPyBbdmFsdWVSYW5nZS5zdGFydCwgdmFsdWVSYW5nZS5lbmRdIDogbnVsbDtcbiAgICAgIHRoaXMuc2V0U2NoZW1hKCk7XG4gICAgICB0aGlzLmFuY2hvcnMuX2NzdEFsaWFzZXMgPSBbXTtcbiAgICAgIHBhcnNlQ29udGVudHModGhpcywgY29udGVudHMpO1xuICAgICAgdGhpcy5hbmNob3JzLnJlc29sdmVOb2RlcygpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnByZXR0eUVycm9ycykge1xuICAgICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5lcnJvcnMpLFxuICAgICAgICAgICAgX3N0ZXA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIF9lcnJvciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgaWYgKF9lcnJvciBpbnN0YW5jZW9mIFlBTUxFcnJvcikgX2Vycm9yLm1ha2VQcmV0dHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy53YXJuaW5ncyksXG4gICAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIHdhcm4gPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgICBpZiAod2FybiBpbnN0YW5jZW9mIFlBTUxFcnJvcikgd2Fybi5tYWtlUHJldHR5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdE5vbkRlZmF1bHRUYWdzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3ROb25EZWZhdWx0VGFncygpIHtcbiAgICAgIHJldHVybiBsaXN0VGFnTmFtZXModGhpcy5jb250ZW50cykuZmlsdGVyKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0LmluZGV4T2YoU2NoZW1hLmRlZmF1bHRQcmVmaXgpICE9PSAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFRhZ1ByZWZpeFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRUYWdQcmVmaXgoaGFuZGxlLCBwcmVmaXgpIHtcbiAgICAgIGlmIChoYW5kbGVbMF0gIT09ICchJyB8fCBoYW5kbGVbaGFuZGxlLmxlbmd0aCAtIDFdICE9PSAnIScpIHRocm93IG5ldyBFcnJvcignSGFuZGxlIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoICEnKTtcblxuICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICB2YXIgcHJldiA9IHRoaXMudGFnUHJlZml4ZXMuZmluZChmdW5jdGlvbiAocCkge1xuICAgICAgICAgIHJldHVybiBwLmhhbmRsZSA9PT0gaGFuZGxlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZXYpIHByZXYucHJlZml4ID0gcHJlZml4O2Vsc2UgdGhpcy50YWdQcmVmaXhlcy5wdXNoKHtcbiAgICAgICAgICBoYW5kbGU6IGhhbmRsZSxcbiAgICAgICAgICBwcmVmaXg6IHByZWZpeFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFnUHJlZml4ZXMgPSB0aGlzLnRhZ1ByZWZpeGVzLmZpbHRlcihmdW5jdGlvbiAocCkge1xuICAgICAgICAgIHJldHVybiBwLmhhbmRsZSAhPT0gaGFuZGxlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTiQxKGFyZywgb25BbmNob3IpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGtlZXBCbG9ic0luSlNPTiA9IF90aGlzJG9wdGlvbnMua2VlcEJsb2JzSW5KU09OLFxuICAgICAgICAgIG1hcEFzTWFwID0gX3RoaXMkb3B0aW9ucy5tYXBBc01hcCxcbiAgICAgICAgICBtYXhBbGlhc0NvdW50ID0gX3RoaXMkb3B0aW9ucy5tYXhBbGlhc0NvdW50O1xuICAgICAgdmFyIGtlZXAgPSBrZWVwQmxvYnNJbkpTT04gJiYgKHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnIHx8ICEodGhpcy5jb250ZW50cyBpbnN0YW5jZW9mIFNjYWxhcikpO1xuICAgICAgdmFyIGN0eCA9IHtcbiAgICAgICAgZG9jOiB0aGlzLFxuICAgICAgICBpbmRlbnRTdGVwOiAnICAnLFxuICAgICAgICBrZWVwOiBrZWVwLFxuICAgICAgICBtYXBBc01hcDoga2VlcCAmJiAhIW1hcEFzTWFwLFxuICAgICAgICBtYXhBbGlhc0NvdW50OiBtYXhBbGlhc0NvdW50LFxuICAgICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSAvLyBSZXF1aXJpbmcgZGlyZWN0bHkgaW4gUGFpciB3b3VsZCBjcmVhdGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG5cbiAgICAgIH07XG4gICAgICB2YXIgYW5jaG9yTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmFuY2hvcnMubWFwKTtcbiAgICAgIGlmIChhbmNob3JOYW1lcy5sZW5ndGggPiAwKSBjdHguYW5jaG9ycyA9IG5ldyBNYXAoYW5jaG9yTmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBbX3RoaXMuYW5jaG9ycy5tYXBbbmFtZV0sIHtcbiAgICAgICAgICBhbGlhczogW10sXG4gICAgICAgICAgYWxpYXNDb3VudDogMCxcbiAgICAgICAgICBjb3VudDogMVxuICAgICAgICB9XTtcbiAgICAgIH0pKTtcblxuICAgICAgdmFyIHJlcyA9IHRvSlNPTih0aGlzLmNvbnRlbnRzLCBhcmcsIGN0eCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygb25BbmNob3IgPT09ICdmdW5jdGlvbicgJiYgY3R4LmFuY2hvcnMpIHtcbiAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjdHguYW5jaG9ycy52YWx1ZXMoKSksXG4gICAgICAgICAgICBfc3RlcDM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIF9zdGVwMyR2YWx1ZSA9IF9zdGVwMy52YWx1ZSxcbiAgICAgICAgICAgICAgICBjb3VudCA9IF9zdGVwMyR2YWx1ZS5jb3VudCxcbiAgICAgICAgICAgICAgICBfcmVzID0gX3N0ZXAzJHZhbHVlLnJlcztcbiAgICAgICAgICAgIG9uQW5jaG9yKF9yZXMsIGNvdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvcjMuZigpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcignRG9jdW1lbnQgd2l0aCBlcnJvcnMgY2Fubm90IGJlIHN0cmluZ2lmaWVkJyk7XG4gICAgICB2YXIgaW5kZW50U2l6ZSA9IHRoaXMub3B0aW9ucy5pbmRlbnQ7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRlbnRTaXplKSB8fCBpbmRlbnRTaXplIDw9IDApIHtcbiAgICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShpbmRlbnRTaXplKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXFxcImluZGVudFxcXCIgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBub3QgXCIuY29uY2F0KHMpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTY2hlbWEoKTtcbiAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgdmFyIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgICB2YXIgdmQgPSAnJVlBTUwgMS4yJztcblxuICAgICAgICBpZiAodGhpcy5zY2hlbWEubmFtZSA9PT0gJ3lhbWwtMS4xJykge1xuICAgICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICcxLjAnKSB2ZCA9ICclWUFNTDoxLjAnO2Vsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzEuMScpIHZkID0gJyVZQU1MIDEuMSc7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lcy5wdXNoKHZkKTtcbiAgICAgICAgaGFzRGlyZWN0aXZlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdOYW1lcyA9IHRoaXMubGlzdE5vbkRlZmF1bHRUYWdzKCk7XG4gICAgICB0aGlzLnRhZ1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGhhbmRsZSA9IF9yZWYuaGFuZGxlLFxuICAgICAgICAgICAgcHJlZml4ID0gX3JlZi5wcmVmaXg7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVzLnNvbWUoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gdC5pbmRleE9mKHByZWZpeCkgPT09IDA7XG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgbGluZXMucHVzaChcIiVUQUcgXCIuY29uY2F0KGhhbmRsZSwgXCIgXCIpLmNvbmNhdChwcmVmaXgpKTtcbiAgICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoaGFzRGlyZWN0aXZlcyB8fCB0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIpIGxpbmVzLnB1c2goJy0tLScpO1xuXG4gICAgICBpZiAodGhpcy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgIGlmIChoYXNEaXJlY3RpdmVzIHx8ICF0aGlzLmRpcmVjdGl2ZXNFbmRNYXJrZXIpIGxpbmVzLnVuc2hpZnQoJycpO1xuICAgICAgICBsaW5lcy51bnNoaWZ0KHRoaXMuY29tbWVudEJlZm9yZS5yZXBsYWNlKC9eL2dtLCAnIycpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN0eCA9IHtcbiAgICAgICAgYW5jaG9yczoge30sXG4gICAgICAgIGRvYzogdGhpcyxcbiAgICAgICAgaW5kZW50OiAnJyxcbiAgICAgICAgaW5kZW50U3RlcDogJyAnLnJlcGVhdChpbmRlbnRTaXplKSxcbiAgICAgICAgc3RyaW5naWZ5OiBzdHJpbmdpZnkgLy8gUmVxdWlyaW5nIGRpcmVjdGx5IGluIG5vZGVzIHdvdWxkIGNyZWF0ZSBjaXJjdWxhciBkZXBlbmRlbmNpZXNcblxuICAgICAgfTtcbiAgICAgIHZhciBjaG9tcEtlZXAgPSBmYWxzZTtcbiAgICAgIHZhciBjb250ZW50Q29tbWVudCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRlbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRzIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzLnNwYWNlQmVmb3JlICYmIChoYXNEaXJlY3RpdmVzIHx8IHRoaXMuZGlyZWN0aXZlc0VuZE1hcmtlcikpIGxpbmVzLnB1c2goJycpO1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzLmNvbW1lbnRCZWZvcmUpIGxpbmVzLnB1c2godGhpcy5jb250ZW50cy5jb21tZW50QmVmb3JlLnJlcGxhY2UoL14vZ20sICcjJykpOyAvLyB0b3AtbGV2ZWwgYmxvY2sgc2NhbGFycyBuZWVkIHRvIGJlIGluZGVudGVkIGlmIGZvbGxvd2VkIGJ5IGEgY29tbWVudFxuXG4gICAgICAgICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSAhIXRoaXMuY29tbWVudDtcbiAgICAgICAgICBjb250ZW50Q29tbWVudCA9IHRoaXMuY29udGVudHMuY29tbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvbkNob21wS2VlcCA9IGNvbnRlbnRDb21tZW50ID8gbnVsbCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY2hvbXBLZWVwID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGJvZHkgPSBzdHJpbmdpZnkodGhpcy5jb250ZW50cywgY3R4LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnRDb21tZW50ID0gbnVsbDtcbiAgICAgICAgfSwgb25DaG9tcEtlZXApO1xuICAgICAgICBsaW5lcy5wdXNoKGFkZENvbW1lbnQoYm9keSwgJycsIGNvbnRlbnRDb21tZW50KSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW5lcy5wdXNoKHN0cmluZ2lmeSh0aGlzLmNvbnRlbnRzLCBjdHgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tbWVudCkge1xuICAgICAgICBpZiAoKCFjaG9tcEtlZXAgfHwgY29udGVudENvbW1lbnQpICYmIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdICE9PSAnJykgbGluZXMucHVzaCgnJyk7XG4gICAgICAgIGxpbmVzLnB1c2godGhpcy5jb21tZW50LnJlcGxhY2UoL14vZ20sICcjJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykgKyAnXFxuJztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRG9jdW1lbnQ7XG59KCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShEb2N1bWVudCwgXCJkZWZhdWx0c1wiLCBkb2N1bWVudE9wdGlvbnMpO1xuXG5mdW5jdGlvbiBjcmVhdGVOb2RlKHZhbHVlKSB7XG4gIHZhciB3cmFwU2NhbGFycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHRhZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmICh0YWcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygd3JhcFNjYWxhcnMgPT09ICdzdHJpbmcnKSB7XG4gICAgdGFnID0gd3JhcFNjYWxhcnM7XG4gICAgd3JhcFNjYWxhcnMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBEb2N1bWVudC5kZWZhdWx0c1tkZWZhdWx0T3B0aW9ucy52ZXJzaW9uXSwgZGVmYXVsdE9wdGlvbnMpO1xuICB2YXIgc2NoZW1hID0gbmV3IFNjaGVtYShvcHRpb25zKTtcbiAgcmV0dXJuIHNjaGVtYS5jcmVhdGVOb2RlKHZhbHVlLCB3cmFwU2NhbGFycywgdGFnKTtcbn1cblxudmFyIERvY3VtZW50JDEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9ZQU1MRG9jdW1lbnQpIHtcbiAgX2luaGVyaXRzKERvY3VtZW50LCBfWUFNTERvY3VtZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKERvY3VtZW50KTtcblxuICBmdW5jdGlvbiBEb2N1bWVudChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERvY3VtZW50KTtcblxuICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucykpO1xuICB9XG5cbiAgcmV0dXJuIERvY3VtZW50O1xufShEb2N1bWVudCk7XG5cbmZ1bmN0aW9uIHBhcnNlQWxsRG9jdW1lbnRzKHNyYywgb3B0aW9ucykge1xuICB2YXIgc3RyZWFtID0gW107XG4gIHZhciBwcmV2O1xuXG4gIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihwYXJzZSQxKHNyYykpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgdmFyIGNzdERvYyA9IF9zdGVwLnZhbHVlO1xuICAgICAgdmFyIGRvYyA9IG5ldyBEb2N1bWVudCQxKG9wdGlvbnMpO1xuICAgICAgZG9jLnBhcnNlKGNzdERvYywgcHJldik7XG4gICAgICBzdHJlYW0ucHVzaChkb2MpO1xuICAgICAgcHJldiA9IGRvYztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvci5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yLmYoKTtcbiAgfVxuXG4gIHJldHVybiBzdHJlYW07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRG9jdW1lbnQoc3JjLCBvcHRpb25zKSB7XG4gIHZhciBjc3QgPSBwYXJzZSQxKHNyYyk7XG4gIHZhciBkb2MgPSBuZXcgRG9jdW1lbnQkMShvcHRpb25zKS5wYXJzZShjc3RbMF0pO1xuXG4gIGlmIChjc3QubGVuZ3RoID4gMSkge1xuICAgIHZhciBlcnJNc2cgPSAnU291cmNlIGNvbnRhaW5zIG11bHRpcGxlIGRvY3VtZW50czsgcGxlYXNlIHVzZSBZQU1MLnBhcnNlQWxsRG9jdW1lbnRzKCknO1xuICAgIGRvYy5lcnJvcnMudW5zaGlmdChuZXcgWUFNTFNlbWFudGljRXJyb3IoY3N0WzFdLCBlcnJNc2cpKTtcbiAgfVxuXG4gIHJldHVybiBkb2M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHNyYywgb3B0aW9ucykge1xuICB2YXIgZG9jID0gcGFyc2VEb2N1bWVudChzcmMsIG9wdGlvbnMpO1xuICBkb2Mud2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAod2FybmluZykge1xuICAgIHJldHVybiB3YXJuKHdhcm5pbmcpO1xuICB9KTtcbiAgaWYgKGRvYy5lcnJvcnMubGVuZ3RoID4gMCkgdGhyb3cgZG9jLmVycm9yc1swXTtcbiAgcmV0dXJuIGRvYy50b0pTT04oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5JDEodmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIGRvYyA9IG5ldyBEb2N1bWVudCQxKG9wdGlvbnMpO1xuICBkb2MuY29udGVudHMgPSB2YWx1ZTtcbiAgcmV0dXJuIFN0cmluZyhkb2MpO1xufVxuXG52YXIgWUFNTCA9IHtcbiAgY3JlYXRlTm9kZTogY3JlYXRlTm9kZSxcbiAgZGVmYXVsdE9wdGlvbnM6IGRlZmF1bHRPcHRpb25zLFxuICBEb2N1bWVudDogRG9jdW1lbnQkMSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwYXJzZUFsbERvY3VtZW50czogcGFyc2VBbGxEb2N1bWVudHMsXG4gIHBhcnNlQ1NUOiBwYXJzZSQxLFxuICBwYXJzZURvY3VtZW50OiBwYXJzZURvY3VtZW50LFxuICBzY2FsYXJPcHRpb25zOiBzY2FsYXJPcHRpb25zLFxuICBzdHJpbmdpZnk6IHN0cmluZ2lmeSQxXG59O1xuXG5leHBvcnQgeyBZQU1MIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdCcpLllBTUxcbiIsIlxuaW1wb3J0IHsgQXBwLCBNYXJrZG93blZpZXcsIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHR9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRm9sZGVyQnJpZWYgfSBmcm9tICcuL2ZvbGRlci1icmllZic7XG5pbXBvcnQgeyBGb2xkZXJOb3RlIH0gZnJvbSAnLi9mb2xkZXItbm90ZSc7XG5pbXBvcnQgeyBDYXJkQmxvY2sgfSBmcm9tICcuL2NhcmQtaXRlbSc7XG5pbXBvcnQgKiBhcyBZYW1sIGZyb20gJ3lhbWwnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNjYXJkcyBwcm9jZXNzb3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY2xhc3MgY2NhcmRQcm9jZXNzb3Ige1xuICAgIGFwcDogQXBwO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHApIHtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgfVxuICAgIFxuICAgIGFzeW5jIHJ1bihzb3VyY2U6IHN0cmluZywgZWw6IEhUTUxFbGVtZW50LCBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIGZvbGRlck5vdGU6IEZvbGRlck5vdGUpIHtcbiAgICAgICAgLy8gQ2hhbmdlIGNhcmRzIGNvZGUgdG8gaHRtbCBlbGVtZW50XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB5YW1sID0gWWFtbC5wYXJzZShzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKCF5YW1sKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIHNldCBkZWZhdWx0XG4gICAgICAgICAgICBpZiAoeWFtbC50eXBlID09PSB1bmRlZmluZWQpIHlhbWwudHlwZSA9ICdzdGF0aWMnO1xuICAgICAgICAgICAgaWYgKHlhbWwuc3R5bGUgPT09IHVuZGVmaW5lZCkgeWFtbC5zdHlsZSA9ICdjYXJkJztcblxuICAgICAgICAgICAgLy8gZm9yIGRpZmZlcmVudCB0eXBlc1xuICAgICAgICAgICAgaWYgKHlhbWwudHlwZSA9PSAnc3RhdGljJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY0VsID0gYXdhaXQgdGhpcy5kb2NFbGVtU3RhdGljKHlhbWwpO1xuICAgICAgICAgICAgICAgIGlmIChkb2NFbCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChkb2NFbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoeWFtbC50eXBlID09ICdmb2xkZXJfYnJpZWZfbGl2ZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2NFbCA9IGF3YWl0IHRoaXMuZG9jRWxlbUZvbGRlckJyaWVmTGl2ZSh5YW1sLCBmb2xkZXJOb3RlKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9jRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZG9jRWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb2RlIEJsb2NrOiBjY2FyZCcsIGVycm9yKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3RhdGljXG4gICAgYXN5bmMgZG9jRWxlbVN0YXRpYyh5YW1sOiBhbnkpIHtcbiAgICAgICAgaWYgKHlhbWwuaXRlbXMgJiYgKHlhbWwuaXRlbXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgICAgIGxldCBjYXJkQmxvY2sgPSBuZXcgQ2FyZEJsb2NrKCk7XG4gICAgICAgICAgICBjYXJkQmxvY2suZnJvbVlhbWxDYXJkcyh5YW1sKTtcbiAgICAgICAgICAgIGNvbnN0IGNhcmRzRWxlbSA9IGNhcmRCbG9jay5nZXREb2NFbGVtZW50KHRoaXMuYXBwKTtcbiAgICAgICAgICAgIHJldHVybiBjYXJkc0VsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gZm9sZGVyX2JyaWVmX2xpdmVcbiAgICBhc3luYyBkb2NFbGVtRm9sZGVyQnJpZWZMaXZlKHlhbWw6IGFueSwgZm9sZGVyTm90ZTogRm9sZGVyTm90ZSkge1xuICAgICAgICB2YXIgZm9sZGVyUGF0aCA9ICcnO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcbiAgICAgICAgdmFyIG5vdGVQYXRoID0gYWN0aXZlRmlsZS5wYXRoO1xuICAgICAgICBpZiAoeWFtbC5mb2xkZXIpIHtcbiAgICAgICAgICAgIGxldCBmb2xkZXJFeGlzdCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHlhbWwuZm9sZGVyKTtcbiAgICAgICAgICAgIGlmIChmb2xkZXJFeGlzdCkgZm9sZGVyUGF0aCA9IHlhbWwuZm9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9sZGVyUGF0aCA9IGF3YWl0IGZvbGRlck5vdGUuZ2V0Tm90ZUZvbGRlckJyaWVmUGF0aChub3RlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChmb2xkZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9sZGVyQnJpZWYgPSBuZXcgRm9sZGVyQnJpZWYodGhpcy5hcHApO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZWYgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGlmICh5YW1sLmJyaWVmTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGRlckJyaWVmLmJyaWVmTWF4ID0geWFtbC5icmllZk1heDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHlhbWwubm90ZU9ubHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGRlckJyaWVmLm5vdGVPbmx5ID0geWFtbC5ub3RlT25seTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjYXJkcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgbGV0IGJyaWVmQ2FyZHMgPSBhd2FpdCBmb2xkZXJCcmllZi5tYWtlQnJpZWZDYXJkcyhmb2xkZXJQYXRoLCBub3RlUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJpZWZDYXJkcy5mcm9tWWFtbE9wdGlvbnMoeWFtbCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgZWxcbiAgICAgICAgICAgICAgICBjb25zdCBjY2FyZEVsZW0gPSBicmllZkNhcmRzLmdldERvY0VsZW1lbnQodGhpcy5hcHApO1xuICAgICAgICAgICAgICAgIHJldHVybiBjY2FyZEVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBBcHAsXG4gICAgUGx1Z2luU2V0dGluZ1RhYixcbiAgICBTZXR0aW5nLFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCBGb2xkZXJOb3RlUGx1Z2luIGZyb20gJy4vbWFpbic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlck5vdGVQbHVnaW5TZXR0aW5ncyB7XG4gICAgZm9sZGVyTm90ZUhpZGU6IGJvb2xlYW47XG4gICAgZm9sZGVyTm90ZVR5cGU6IHN0cmluZztcbiAgICBmb2xkZXJOb3RlTmFtZTogc3RyaW5nO1xuICAgIGZvbGRlck5vdGVLZXk6IHN0cmluZztcbiAgICBmb2xkZXJOb3RlQXV0b1JlbmFtZTogYm9vbGVhbjtcbiAgICBmb2xkZXJEZWxldGUyTm90ZTogYm9vbGVhbjtcbiAgICBmb2xkZXJOb3RlU3RySW5pdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgRk9MREVSX05PVEVfREVGQVVMVF9TRVRUSU5HUzogRm9sZGVyTm90ZVBsdWdpblNldHRpbmdzID0ge1xuICAgIGZvbGRlck5vdGVIaWRlOiB0cnVlLFxuICAgIGZvbGRlck5vdGVUeXBlOiAnaW5zaWRlJyxcbiAgICBmb2xkZXJOb3RlTmFtZTogJ19hYm91dF8nLFxuICAgIGZvbGRlck5vdGVLZXk6ICdjdHJsJyxcbiAgICBmb2xkZXJOb3RlQXV0b1JlbmFtZTogdHJ1ZSxcbiAgICBmb2xkZXJEZWxldGUyTm90ZTogZmFsc2UsXG4gICAgZm9sZGVyTm90ZVN0ckluaXQ6ICcjIHt7Rk9MREVSX05BTUV9fSBPdmVydmlld1xcbiB7e0ZPTERFUl9CUklFRl9MSVZFfX0gXFxuJ1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldHRpbmdzIFRhYlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBGb2xkZXJOb3RlU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIHBsdWdpbjogRm9sZGVyTm90ZVBsdWdpbjtcblxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEZvbGRlck5vdGVQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBsZXQgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblxuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdGb2xkZXIgTm90ZSBQbHVnaW46IFNldHRpbmdzLicgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnTm90ZSBGaWxlIE1ldGhvZCcpXG4gICAgICAgICAgICAuc2V0RGVzYygnU2VsZWN0IHRoZSBtZXRob2QgdG8gcHV0IHlvdXIgZm9sZGVyIG5vdGUgZmlsZS4gKFJlYWQgZG9jIGZvciBtb3JlIGluZm9ybWF0aW9uLiknKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKGRyb3BEb3duID0+XG4gICAgICAgICAgICAgICAgZHJvcERvd25cbiAgICAgICAgICAgICAgICAuYWRkT3B0aW9uKCdpbmRleCcsICdJbmRleCBGaWxlJylcbiAgICAgICAgICAgICAgICAuYWRkT3B0aW9uKCdpbnNpZGUnLCAnRm9sZGVyIE5hbWUgSW5zaWRlJylcbiAgICAgICAgICAgICAgICAuYWRkT3B0aW9uKCdvdXRzaWRlJywgJ0ZvbGRlciBOYW1lIE91dHNpZGUnKVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSB8fCAnaW5zaWRlJylcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgPT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoJ0luZGV4IEZpbGUgTmFtZScpXG4gICAgICAgICAgICAgICAgLnNldERlc2MoJ1NldCB0aGUgaW5kZXggZmlsZSBuYW1lIGZvciBmb2xkZXIgbm90ZS4gKG9ubHkgZm9yIHRoZSBJbmRleCBtZXRob2QpJylcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVOYW1lKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2VjcmV0OiAnICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdJbml0YWwgQ29udGVudCcpXG4gICAgICAgICAgICAuc2V0RGVzYygnU2V0IHRoZSBpbml0YWwgY29udGVudCBmb3IgbmV3IGZvbGRlciBub3RlLiB7e0ZPTERFUl9OQU1FfX0gd2lsbCBiZSByZXBsYWNlZCB3aXRoIGN1cnJlbnQgZm9sZGVyIG5hbWUuJylcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYSh0ZXh0ID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcignQWJvdXQgdGhlIGZvbGRlci4nKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZVN0ckluaXQpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZVN0ckluaXQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdGV4dC5pbnB1dEVsLnJvd3MgPSA4O1xuICAgICAgICAgICAgICAgIHRleHQuaW5wdXRFbC5jb2xzID0gNTA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoJ0tleSBmb3IgTmV3IE5vdGUnKVxuICAgICAgICAgICAgLnNldERlc2MoJ0tleSArIENsaWNrIGEgZm9sZGVyIHRvIGNyZWF0ZSBmb2xkZXIgbm90ZSBmaWxlLiAnKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKGRyb3BEb3duID0+XG4gICAgICAgICAgICAgICAgZHJvcERvd25cbiAgICAgICAgICAgICAgICAuYWRkT3B0aW9uKCdjdHJsJywgJ0N0cmwgKyBDbGljaycpXG4gICAgICAgICAgICAgICAgLmFkZE9wdGlvbignYWx0JywgJ0FsdCArIENsaWNrJylcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZUtleSB8fCAnY3RybCcpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVLZXkgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICBcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnSGlkZSBGb2xkZXIgTm90ZScpXG4gICAgICAgICAgICAuc2V0RGVzYygnSGlkZSB0aGUgZm9sZGVyIG5vdGUgZmlsZSBpbiB0aGUgZmlsZSBleHBsb3JlciBwYW5lbC4nKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVIaWRlKTtcbiAgICAgICAgICAgICAgICB0b2dnbGUub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVIaWRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgIT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoJ0F1dG8gUmVuYW1lJylcbiAgICAgICAgICAgICAgICAuc2V0RGVzYygnVHJ5IHRvIGF1dG9tYXRpY2FsbHkgcmVuYW1lIHRoZSBmb2xkZXIgbm90ZSBpZiBhIGZvbGRlciBuYW1lIGlzIGNoYW5nZWQuIChFeHBlcmltZW50YWwpJylcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVBdXRvUmVuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyTm90ZUF1dG9SZW5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlck5vdGVUeXBlID09ICdvdXRzaWRlJykge1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoJ0RlbGV0ZSBGb2xkZXIgTm90ZScpXG4gICAgICAgICAgICAgICAgLnNldERlc2MoJ1RyeSB0byBkZWxldGUgZm9sZGVyIG5vdGUgd2hlbiBhIGZvbGRlciBpcyBkZWxldGVkLiAoRGFuZ2Vyb3VzKScpXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJEZWxldGUyTm90ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckRlbGV0ZTJOb3RlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIFBsdWdpbixcbiAgICBNYXJrZG93blZpZXdcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgKiBhcyBZYW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgRm9sZGVyQnJpZWYgfSBmcm9tICcuL2ZvbGRlci1icmllZic7XG5pbXBvcnQgeyBGb2xkZXJOb3RlIH0gZnJvbSAnLi9mb2xkZXItbm90ZSc7XG5pbXBvcnQgeyBjY2FyZFByb2Nlc3NvciB9IGZyb20gJy4vY2NhcmQtYmxvY2snO1xuXG5pbXBvcnQgeyBcbiAgICBGb2xkZXJOb3RlUGx1Z2luU2V0dGluZ3MsIFxuICAgIEZPTERFUl9OT1RFX0RFRkFVTFRfU0VUVElOR1MsIFxuICAgIEZvbGRlck5vdGVTZXR0aW5nVGFiIFxufSBmcm9tICcuL3NldHRpbmdzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGb2xkZXJOb3RlUGx1Z2luXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZW51bSBOb3RlRmlsZU1ldGhvZCB7XG4gICAgSW5kZXgsIEluc2lkZSwgT3V0c2lkZSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9sZGVyTm90ZVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG4gICAgc2V0dGluZ3M6IEZvbGRlck5vdGVQbHVnaW5TZXR0aW5ncztcbiAgICBmb2xkZXJOb3RlOiBGb2xkZXJOb3RlO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTG9hZGluZyBGb2xkZXIgTm90ZSBwbHVnaW4uJyk7XG5cbiAgICAgICAgLy8gbG9hZCBzZXR0aW5nc1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgICAgICBcbiAgICAgICAgLy8gZm9yIGNjYXJkIHJlbmRlcmluZ1xuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoJ2NjYXJkJywgYXN5bmMgKHNvdXJjZSwgZWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgLy8gcnVuIHByb2Nlc3NlclxuICAgICAgICAgICAgbGV0IHByb2MgPSBuZXcgY2NhcmRQcm9jZXNzb3IodGhpcy5hcHApO1xuICAgICAgICAgICAgYXdhaXQgcHJvYy5ydW4oc291cmNlLCBlbCwgY3R4LCB0aGlzLmZvbGRlck5vdGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBmb3IgcmVuYW1lIGV2ZW50XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbigncmVuYW1lJywgXG4gICAgICAgICAgICAobmV3UGF0aCwgb2xkUGF0aCkgPT4gdGhpcy5oYW5kbGVGaWxlUmVuYW1lKG5ld1BhdGgsIG9sZFBhdGgpKSk7XG5cbiAgICAgICAgLy8gZm9yIHJlbW92ZSBmb2xkZXJcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCBcbiAgICAgICAgICAgIChmaWxlKSA9PiB0aGlzLmhhbmRsZUZpbGVEZWxldGUoZmlsZSkgKSk7XG5cbiAgICAgICAgLy8gZm9yIHNldHRpbmdzXG4gICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgRm9sZGVyTm90ZVNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcblxuICAgICAgICAvLyBmb3IgZmlsZSBleHBsb3JlciBjbGlja1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRG9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIChldnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGdldCB0aGUgZm9sZGVyIHBhdGhcbiAgICAgICAgICAgIGNvbnN0IGVsZW1UYXJnZXQgPSAoZXZ0LnRhcmdldCBhcyBFbGVtZW50KTtcbiAgICAgICAgICAgIHZhciBmb2xkZXJFbGVtID0gdGhpcy5mb2xkZXJOb3RlLnNldEJ5Rm9sZGVyRWxlbWVudChlbGVtVGFyZ2V0KTtcblxuICAgICAgICAgICAgLy8gb3BlbiB0aGUgaW5mb3Igbm90ZVxuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGVyTm90ZS5mb2xkZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBhbnkga2V5P1xuICAgICAgICAgICAgICAgIHZhciBuZXdLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5mb2xkZXJOb3RlS2V5ID09ICdjdHJsJykge1xuICAgICAgICAgICAgICAgICAgICBuZXdLZXkgPSAoZXZ0LmN0cmxLZXkgfHwgZXZ0Lm1ldGFLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmdzLmZvbGRlck5vdGVLZXkgPT0gJ2FsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3S2V5ID0gZXZ0LmFsdEtleTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBvcGVuIGl0XG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJOb3RlLm9wZW5Gb2xkZXJOb3RlKGZvbGRlckVsZW0sIG5ld0tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ2luc2VydC1mb2xkZXItYnJpZWYnLFxuICAgICAgICAgICAgbmFtZTogJ0luc2VydCBGb2xkZXIgQnJpZWYnLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSB2aWV3LnNvdXJjZU1vZGUuY21FZGl0b3I7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBicmllZlxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyQnJpZWYgPSBuZXcgRm9sZGVyQnJpZWYodGhpcy5hcHApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyUGF0aCA9IGF3YWl0IHRoaXMuZm9sZGVyTm90ZS5nZXROb3RlRm9sZGVyQnJpZWZQYXRoKGFjdGl2ZUZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBicmllZkNhcmRzID0gYXdhaXQgZm9sZGVyQnJpZWYubWFrZUJyaWVmQ2FyZHMoZm9sZGVyUGF0aCwgYWN0aXZlRmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oYnJpZWZDYXJkcy5nZXRZYW1sQ29kZSgpLCBcImVuZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG90a2V5czogW11cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgICAgICAgIGlkOiAnbm90ZS10by1mb2xkZXInLFxuICAgICAgICAgICAgbmFtZTogJ01ha2UgQ3VycmVudCBOb3RlIHRvIEZvbGRlcicsXG4gICAgICAgICAgICBjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgICAgICAgICAgICAgIGlmICh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlck5vdGUuc2V0QnlOb3RlUGF0aChhY3RpdmVGaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZvbGRlck5vdGUubmV3Tm90ZUZvbGRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3RrZXlzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1VubG9hZGluZyBGb2xkZXIgTm90ZSBwbHVnaW4nKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGb2xkZXJOb3RlKCkge1xuICAgICAgICB0aGlzLmZvbGRlck5vdGUgPSBuZXcgRm9sZGVyTm90ZShcbiAgICAgICAgICAgIHRoaXMuYXBwLCBcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUsIFxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5mb2xkZXJOb3RlTmFtZSk7XG4gICAgICAgIHRoaXMuZm9sZGVyTm90ZS5pbml0Q29udGVudCA9IHRoaXMuc2V0dGluZ3MuZm9sZGVyTm90ZVN0ckluaXQ7XG4gICAgICAgIHRoaXMuZm9sZGVyTm90ZS5oaWRlTm90ZUZpbGUgPSB0aGlzLnNldHRpbmdzLmZvbGRlck5vdGVIaWRlO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oRk9MREVSX05PVEVfREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb2xkZXJOb3RlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvbGRlck5vdGUoKTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIG5vdGVmaWxlIG5hbWUgdG8gYmUgdGhlIGZvbGRlciBuYW1lXG4gICAgYXN5bmMgaGFuZGxlRmlsZVJlbmFtZShuZXdQYXRoOiBhbnksIG9sZFBhdGg6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZm9sZGVyTm90ZUF1dG9SZW5hbWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5mb2xkZXJOb3RlLnN5bmNOYW1lKG5ld1BhdGgsIG9sZFBhdGgpO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSBmb2xkZXJcbiAgICBhc3luYyBoYW5kbGVGaWxlRGVsZXRlKHBhdGhUb0RlbDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5mb2xkZXJEZWxldGUyTm90ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZvbGRlck5vdGUuZGVsZXRlRm9sZGVyKHBhdGhUb0RlbC5wYXRoKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiTWFya2Rvd25WaWV3IiwiVEZpbGUiLCJOb2RlIiwiQ29sbGVjdGlvbiIsIkFsaWFzIiwiRG9jdW1lbnQiLCJjcmVhdGVOb2RlIiwiRG9jdW1lbnQkMSIsInBhcnNlJDEiLCJwYXJzZSIsIllhbWwucGFyc2UiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIk5vdGVGaWxlTWV0aG9kIiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pGLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkYsb0JBQW9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQzNDLGFBQWE7QUFDYixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDbEUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pGLEtBQUs7QUFDTDs7QUN0R0E7QUFDQTtBQUNBO0FBRUEsSUFBWSxTQUVYO0FBRkQsV0FBWSxTQUFTO0lBQ2pCLDZDQUFNLENBQUE7SUFBRSx5Q0FBSSxDQUFBO0lBQUUsMkNBQUssQ0FBQTtBQUN2QixDQUFDLEVBRlcsU0FBUyxLQUFULFNBQVMsUUFFcEI7QUFFRDtJQU1JO1FBQ0ksSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ3pCO0lBRUQsMkJBQU8sR0FBUCxVQUFRLElBQWM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7SUFFRCx5QkFBSyxHQUFMO1FBQ0ksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7S0FDbkI7SUFFRCw4QkFBVSxHQUFWO1FBQ0ksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUM1QjtJQUVELGlDQUFhLEdBQWIsVUFBYyxHQUFRO1FBQ2xCLElBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN0QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0I7U0FDSjthQUNJO1lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25DLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDdEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDZCxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFDdkIsbUNBQWlDLElBQUksQ0FBQyxHQUFHLFlBQVMsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztLQUNsQjtJQUVELCtCQUFXLEdBQVg7UUFDSSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNYLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztZQUNqQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUE7Z0JBQ3BCLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLE1BQU0sQ0FBQTthQUNwQjs7WUFFRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDO1lBQ25CLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsT0FBTyxJQUFJLFVBQVEsSUFBSSxDQUFDLEdBQUcsT0FBSSxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQztTQUN0QjtRQUNELE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0lBRUQsaUNBQWEsR0FBYixVQUFjLElBQVM7O1FBRW5CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBRzNCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLElBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFO29CQUNyQixJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvRCxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMxQjthQUNKO1NBQ0o7O1FBR0QsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0tBQ2xDO0lBRUQsbUNBQWUsR0FBZixVQUFnQixJQUFTO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDdkM7S0FDSjtJQUNMLGdCQUFDO0FBQUQsQ0FBQyxJQUFBO0FBRUQ7SUFTSSxrQkFBWSxLQUFhLEVBQUUsS0FBZ0I7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDMUI7SUFFRCw4QkFBVyxHQUFYLFVBQVksSUFBWTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztLQUN4QjtJQUVELCtCQUFZLEdBQVosVUFBYSxPQUFlO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0tBQzVCO0lBRUQsMkJBQVEsR0FBUixVQUFTLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDdEI7SUFFRCwrQkFBWSxHQUFaLFVBQWEsT0FBZTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztLQUM1QjtJQUVELDhCQUFXLEdBQVgsVUFBWSxRQUFnQjtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUM1QjtJQUVELDhCQUFXLEdBQVgsVUFBWSxRQUFnQjtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUM1QjtJQUVELDJCQUFRLEdBQVIsVUFBUyxJQUFTO1FBQ2QsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNyQztpQkFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDbkM7U0FDSjtRQUNELElBQUksT0FBTyxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwRDtJQUVELG1DQUFnQixHQUFoQixVQUFpQixHQUFXO1FBQ3hCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDbkM7SUFFRCw4QkFBVyxHQUFYLFVBQVksTUFBYztRQUN0QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFPLE1BQU0sZ0JBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBRyxDQUFDO1FBQ3BFLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksUUFBTSxNQUFNLGVBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBRyxDQUFDO1FBQzlGLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksUUFBTSxNQUFNLGdCQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQUcsQ0FBQztRQUM3RixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLFFBQU0sTUFBTSxlQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQUcsQ0FBQztRQUM1RixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsT0FBTyxJQUFJLFFBQU0sTUFBTSxnQkFBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFHLENBQUM7U0FDOUU7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxJQUFJLFFBQU0sTUFBTSxlQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQUcsQ0FBQztTQUM1RTthQUNJO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BDLE9BQU8sSUFBSSxRQUFNLE1BQU0sbUJBQWdCLENBQUM7YUFDM0M7aUJBQ0ksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxRQUFNLE1BQU0saUJBQWMsQ0FBQzthQUN6QztpQkFDSTtnQkFDRCxPQUFPLElBQUksUUFBTSxNQUFNLGlCQUFjLENBQUM7YUFDekM7U0FDSjtRQUNELE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFFRCxnQ0FBYSxHQUFiLFVBQWMsR0FBUSxFQUFFLFdBQW1CO1FBQ3ZDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7O1FBRTNDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTs7Z0JBRWhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLHVCQUFxQixJQUFJLENBQUMsU0FBUyxNQUFHLENBQUMsQ0FBQzthQUNuRTtpQkFDSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFOztnQkFFckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsMkJBQXlCLElBQUksQ0FBQyxTQUFTLE9BQUksQ0FBQyxDQUFDO2FBQ3hFO2lCQUFNOztnQkFFSCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztvQkFFeEIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzVELElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDdEMsUUFBUSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3FCQUMzQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDM0IsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsMkJBQXlCLFFBQVEsT0FBSSxDQUFDLENBQUM7YUFDbEU7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3RDO1NBQ0o7YUFDSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztTQUNqQzthQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQy9COztRQUVELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOztRQUV0RSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyQztZQUNELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QixPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO2FBQ0k7WUFDRCxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRSxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDcEM7O1FBRUQsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOztRQUVwQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEM7O1FBRUQsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDTCxlQUFDO0FBQUQsQ0FBQzs7QUNoUkQ7QUFDQTtBQUNBO0FBRUE7SUFNSSxxQkFBWSxHQUFRO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7S0FDekI7O0lBR0sscUNBQWUsR0FBckIsVUFBc0IsSUFBUzs7Ozs7O3dCQUN2QixVQUFVLEdBQUcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDbEQsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7NkJBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFqQix3QkFBaUI7d0JBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFBOzt3QkFBN0QsV0FBVyxHQUFHLFNBQStDO3dCQUNqRSxJQUFJLENBQUMsV0FBVzs0QkFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDOzs7d0JBR2xDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs7OzhCQUlwQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQSxFQUFyQix3QkFBcUI7d0JBQ2YsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDQSxxQkFBWSxDQUFDLENBQUM7NkJBQzlELElBQUksRUFBSix3QkFBSTt3QkFDYSxxQkFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBQTs7d0JBQTVELFVBQVUsR0FBRyxTQUErQzt3QkFDMUQsU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNyRCxzQkFBTyxTQUFTLEVBQUM7NEJBR3pCLHNCQUFPLElBQUksRUFBQzs7OztLQUNmOztJQUdLLG9DQUFjLEdBQXBCLFVBQXFCLFVBQWtCLEVBQUUsY0FBc0I7Ozs7Ozt3QkFFdkQsU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7d0JBR2pCLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUE7O3dCQUF4RCxRQUFRLEdBQUcsU0FBNkM7d0JBQ3RELGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO3dCQUNqQyxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzs2QkFHL0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFkLHdCQUFjO3dCQUNMLENBQUMsR0FBRyxDQUFDOzs7OEJBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUE7d0JBQ2hDLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRXBCLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxFQUFBOzt3QkFBdkUsVUFBVSxHQUFHLFNBQTBEOzZCQUN2RSxDQUFDLFVBQVUsRUFBWCx3QkFBVzt3QkFDTSxxQkFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBQTs7d0JBQWpFLFVBQVUsR0FBRyxTQUFvRDt3QkFDckUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzs7O3dCQU5JLENBQUMsRUFBRSxDQUFBOzs7d0JBWXhDLENBQUMsR0FBRyxDQUFDOzs7OEJBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUE7d0JBQzlCLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzs0QkFBRSx3QkFBUzt3QkFDM0MsSUFBSSxXQUFXLElBQUksY0FBYzs0QkFBRSx3QkFBUzt3QkFDN0IscUJBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUE7O3dCQUEzRCxRQUFRLEdBQUcsU0FBZ0Q7d0JBQy9ELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Ozt3QkFMUSxDQUFDLEVBQUUsQ0FBQTs7OztvQkFTM0Msc0JBQU8sU0FBUyxFQUFDOzs7O0tBQ3BCOztJQUdLLG9DQUFjLEdBQXBCLFVBQXFCLFVBQWtCLEVBQUUsYUFBcUI7Ozs7Ozt3QkFFdEQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQy9DLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUd2QyxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFBOzt3QkFBOUQsV0FBVyxHQUFHLFNBQWdEO3dCQUM5RCxXQUFXLEdBQUcsV0FBVyxDQUFDO3dCQUM5QixXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO3dCQUNwRSxXQUFXLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzt3QkFHOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7d0JBRzlELHNCQUFPLElBQUksRUFBQzs7OztLQUNmOztJQUdLLGtDQUFZLEdBQWxCLFVBQW1CLFVBQWtCLEVBQUUsUUFBZ0I7Ozs7Ozt3QkFFL0MsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ3JDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN2RCxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFHeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzhCQUN0RCxJQUFJLElBQUksSUFBSSxZQUFZQyxjQUFLLENBQUEsRUFBN0Isd0JBQTZCO3dCQUNaLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQTs7d0JBQWxELFVBQVUsR0FBRyxTQUFxQzt3QkFLbEQsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUM1RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3lCQUMvQjt3QkFHRyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDekIsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0NBQ3JDLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0NBQ3hELFlBQVksSUFBSSxLQUFLLENBQUM7NkJBQ3pCOzRCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQ2xDO3dCQUdLLE1BQU0sR0FBSSxJQUFjLENBQUM7d0JBQy9CLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTs0QkFDVCxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQzt5QkFDM0M7NkJBQ0k7NEJBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt5QkFDNUQ7Ozs7b0JBSUwsc0JBQU8sSUFBSSxFQUFDOzs7O0tBQ2Y7SUFFRCxxQ0FBZSxHQUFmLFVBQWdCLFVBQWtCLEVBQUUsVUFBa0I7UUFDbEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDOztRQUVsQixJQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2YsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjthQUNJOztZQUVELElBQUksU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDakQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxLQUFLLElBQUksSUFBSTtnQkFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDOztRQUVELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDMUIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjtnQkFDRCxJQUFJLFlBQVksRUFBRTtvQkFDZCxRQUFRLEdBQUcsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7aUJBQ3hDO2dCQUNELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQTs7YUFFNUM7U0FDSjtRQUNELE9BQU8sUUFBUSxDQUFDO0tBQ25CO0lBRUQscUNBQWUsR0FBZixVQUFnQixVQUFrQjs7UUFFOUIsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDOztRQUdoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRztZQUM3RCxJQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDL0M7U0FDSjtRQUVELE9BQU8sR0FBRyxPQUFPOzs7O2FBSWhCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDOzthQUV2QixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2FBQy9CLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7O2FBRS9CLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUM7O2FBRTFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUM7O2FBRTFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUM7O2FBRTlDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7O2FBRS9CLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUM7O2FBRTFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2FBQ3pCLElBQUksRUFBRSxDQUFBOztRQUdQLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDMUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEM7O1FBR0QsWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7UUFHbkMsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUMxQixJQUFJLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRCxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFO2dCQUMvQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDaEMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3JDLE1BQU07aUJBQ1Q7YUFDSjtZQUNELElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsWUFBWSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkU7U0FDSjs7UUFHRCxPQUFPLFlBQVksQ0FBQztLQUN2QjtJQUNMLGtCQUFDO0FBQUQsQ0FBQzs7QUNsUEQ7QUFDQTtBQUNBO0FBRUEsSUFBSyxjQUVKO0FBRkQsV0FBSyxjQUFjO0lBQ2YscURBQUssQ0FBQTtJQUFFLHVEQUFNLENBQUE7SUFBRSx5REFBTyxDQUFBO0FBQzFCLENBQUMsRUFGSSxjQUFjLEtBQWQsY0FBYyxRQUVsQjtBQUVEO0lBZUksb0JBQVksR0FBUSxFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRWpCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7S0FDakM7O0lBR0QsOEJBQVMsR0FBVCxVQUFVLFNBQWlCLEVBQUUsU0FBaUI7UUFDMUMsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM5QjthQUNJLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7U0FDdkM7YUFDSSxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO1NBQ3hDO0tBQ0o7O0lBR0QsOEJBQVMsR0FBVDtRQUNJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ3RCOztJQUdELG9DQUFlLEdBQWYsVUFBZ0IsSUFBWTtRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTzs7UUFHbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hDOztJQUdELGtDQUFhLEdBQWIsVUFBYyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU87O1FBR3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN0RDs7SUFHRCx1Q0FBa0IsR0FBbEIsVUFBbUIsWUFBcUI7UUFDcEMsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVwQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xELElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQztRQUM5QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUNoRCxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO1lBQ3hDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDNUU7YUFDSSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUM3QyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQzNFLFVBQVUsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDeEQ7O1FBR0QsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakQsSUFBSSxjQUFjLElBQUksVUFBVSxFQUFFO2dCQUM5QixVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzthQUNwRTtTQUNKOztRQUdELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7O1FBR2pDLE9BQU8sVUFBVSxDQUFDO0tBQ3JCOztJQUdELG9DQUFlLEdBQWYsVUFBZ0IsUUFBZ0I7UUFDNUIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsT0FBTyxRQUFRLENBQUM7S0FDbkI7O0lBR0Qsc0NBQWlCLEdBQWpCLFVBQWtCLFVBQWtCO1FBQ2hDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ3JDLFFBQVEsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDdEQ7YUFDSTtZQUNELFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUN0QyxRQUFRLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQ3REO2lCQUNJLElBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFO2dCQUM3QyxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUNqQztTQUNKOztRQUVELE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDbkM7O0lBR0Qsc0NBQWlCLEdBQWpCLFVBQWtCLFFBQWdCO1FBQzlCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRTtZQUNyQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO2FBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDM0MsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUNJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQzVDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRyxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxVQUFVLENBQUM7S0FDckI7O0lBR0sscUNBQWdCLEdBQXRCLFVBQXVCLFFBQWdCOzs7Ozs7d0JBQy9CLElBQUksR0FBRyxLQUFLLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzs0QkFBRSxzQkFBTyxLQUFLLEVBQUM7OEJBRXhDLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQSxFQUFuQyx3QkFBbUM7d0JBQ25DLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQUksSUFBSSxDQUFDLFNBQVMsUUFBSyxDQUFDLENBQUM7Ozs4QkFFN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFBLEVBQXBDLHdCQUFvQzt3QkFDckMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2xELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUMsRUFBRzs0QkFDL0QsSUFBSSxHQUFHLElBQUksQ0FBQzt5QkFDZjs7OzhCQUVJLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQSxFQUFyQyx3QkFBcUM7d0JBQ3RDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFBOzt3QkFBdEQsSUFBSSxHQUFHLFNBQStDLENBQUM7OzRCQUUzRCxzQkFBTyxJQUFJLEVBQUM7Ozs7S0FDZjs7SUFHSyxpQ0FBWSxHQUFsQixVQUFtQixRQUFnQjs7Ozs7O3dCQUMzQixJQUFJLEdBQUcsS0FBSyxDQUFDOzhCQUNiLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQSxFQUFuQyx3QkFBbUM7d0JBQ25DLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQUksSUFBSSxDQUFDLFNBQVMsUUFBSyxDQUFDLENBQUM7Ozs4QkFFN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFBLEVBQXBDLHdCQUFvQzt3QkFDckMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2xELElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFJLFlBQVksU0FBSSxZQUFZLFFBQUssQ0FBQyxDQUFDOzs7OEJBRTFELElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQSxFQUFyQyx3QkFBcUM7d0JBQ3RDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFBOzt3QkFBdEQsSUFBSSxHQUFHLFNBQStDLENBQUM7OzRCQUUzRCxzQkFBTyxJQUFJLEVBQUM7Ozs7S0FDZjs7SUFHSyxtQ0FBYyxHQUFwQixVQUFxQixVQUFtQixFQUFFLFFBQWlCOzs7Ozs0QkFFaEMscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUE7O3dCQUFyRSxnQkFBZ0IsR0FBRyxTQUFrRDs4QkFDckUsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUEsRUFBN0Isd0JBQTZCO3dCQUM3QixxQkFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUE7O3dCQUExQixTQUEwQixDQUFDO3dCQUMzQixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Ozs7d0JBSTVCLElBQUksZ0JBQWdCLEVBQUU7NEJBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7OzRCQUVoQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQy9FOzZCQUNJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFOzRCQUM3QyxVQUFVLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7eUJBQzdDOzs7OztLQUNKOztJQUdLLGtDQUFhLEdBQW5COzs7Ozs0QkFDMEIscUJBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUE7O3dCQUE1RCxlQUFlLEdBQUcsU0FBMEM7d0JBQ2hFLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBQTs7d0JBQWxFLFNBQWtFLENBQUM7Ozs7O0tBQ3RFOztJQUdLLGtDQUFhLEdBQW5COzs7Ozs7OEJBQ1EsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFBLEVBQXJDLHdCQUFxQzt3QkFDbEIscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUE7O3dCQUFuRSxZQUFZLEdBQUcsU0FBb0Q7NkJBQ25FLENBQUMsWUFBWSxFQUFiLHdCQUFhO3dCQUNiLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFBOzt3QkFBbkQsU0FBbUQsQ0FBQzs7Ozs4QkFHbkQsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFBLEVBQXBDLHdCQUFvQzt3QkFDckMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakQscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQTs7d0JBQTlELFlBQVksR0FBRyxTQUErQzs2QkFDOUQsQ0FBQyxZQUFZLEVBQWIsd0JBQWE7d0JBQ2IscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBQTs7d0JBQTlDLFNBQThDLENBQUM7d0JBQzNDLFdBQVcsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUMzRCxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUE7O3dCQUEvRCxTQUErRCxDQUFDO3dCQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7Ozs7O0tBR3JGOztJQUdLLGtDQUFhLEdBQW5CLFVBQW9CLFFBQWdCOzs7Ozs7d0JBRTVCLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUMsT0FBTyxHQUFHLFFBQVE7NkJBQ2pCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUM7NkJBQ3ZDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7NkJBRTdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBcEMsd0JBQW9DO3dCQUNoQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMzQixxQkFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFBOzt3QkFBN0UsVUFBVSxHQUFHLFNBQWdFO3dCQUNqRixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzs7Ozt3QkFHNUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7NEJBQ3JDLGFBQWEsR0FBRyw0Q0FBNEMsQ0FBQzs0QkFDbkUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsYUFBYSxDQUFDLENBQUM7eUJBQ3JFO3dCQUNELHNCQUFPLE9BQU8sRUFBQzs7OztLQUNsQjs7SUFHRCxtQ0FBYyxHQUFkLFVBQWUsVUFBbUI7O1FBRTlCLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxZQUFZLEdBQUcsc0VBQXNFLENBQUM7UUFDMUYsSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxlQUFlLEVBQUU7WUFDakIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFDdEMsWUFBWSxHQUFHLDRDQUE0QyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixVQUFVLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2FBQ3BDLE9BQU8sQ0FBQyxVQUFVLFFBQVE7WUFDdkIsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQzs7WUFFM0QsSUFBSSxXQUFXLEtBQUssYUFBYSxJQUFJLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QyxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkM7aUJBQ0ksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzFDOztTQUVKLENBQ0osQ0FBQztLQUNMOztJQUdLLDJDQUFzQixHQUE1QixVQUE2QixRQUFnQjs7Ozs7O3dCQUNyQyxVQUFVLEdBQUcsRUFBRSxDQUFDO3dCQUNULHFCQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUE7O3dCQUF4QyxJQUFJLEdBQUcsU0FBaUM7d0JBQzVDLElBQUksSUFBSSxFQUFFOzRCQUNOLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ2pEOzZCQUNJOzRCQUNELFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7eUJBQ2pFO3dCQUNELHNCQUFPLFVBQVUsRUFBQzs7OztLQUNyQjs7SUFHSyxpQ0FBWSxHQUFsQixVQUFtQixTQUFjOzs7Ozs7OEJBQ3pCLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUEsRUFBbkUsd0JBQW1FO3dCQUUvRCxVQUFVLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQTs7d0JBQTVELFVBQVUsR0FBRyxTQUErQzs2QkFDNUQsVUFBVSxFQUFWLHdCQUFVO3dCQUNWLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUE7O3dCQUFuRCxTQUFtRCxDQUFDOzs7Ozs7S0FHL0Q7O0lBR0ssNkJBQVEsR0FBZCxVQUFlLE9BQVksRUFBRSxPQUFZOzs7Ozs4QkFDakMsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFBLEVBQXJDLHdCQUFxQzt3QkFDckMscUJBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUE7O3dCQUE1QyxTQUE0QyxDQUFDOzs7OEJBRXhDLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQSxFQUFwQyx3QkFBb0M7d0JBQ3pDLHFCQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFBOzt3QkFBM0MsU0FBMkMsQ0FBQzs7Ozs7O0tBRW5EOztJQUdLLG9DQUFlLEdBQXJCLFVBQXNCLE9BQVksRUFBRSxPQUFZOzs7Ozs7NkJBQ3hDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBeEIsd0JBQXdCO3dCQUtQLHFCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFBOzt3QkFBakUsVUFBVSxHQUFHLFNBQW9EOzZCQUNqRSxVQUFVLEVBQVYsd0JBQVU7d0JBQ04sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDL0MsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7OEJBQ3BELFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBbEMsd0JBQWtDO3dCQUNsQyxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQTs7d0JBQXJFLFNBQXFFLENBQUM7Ozs0QkFNbkUscUJBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBQTs7d0JBQXZDLElBQUksR0FBRyxTQUFnQzs2QkFDdkMsSUFBSSxFQUFKLHdCQUFJO3dCQUdBLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hELGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6RCxxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBQTs7d0JBQWpFLFNBQWlFLENBQUM7Ozs7OztLQUc3RTs7SUFHSyxtQ0FBYyxHQUFwQixVQUFxQixPQUFZLEVBQUUsT0FBWTs7Ozs7Ozs2QkFDdkMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUF4Qix3QkFBd0I7d0JBRXBCLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQy9DLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwRCxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzt3QkFDakQscUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBQTs7d0JBQWhFLFVBQVUsR0FBRyxTQUFtRDt3QkFDcEUsSUFBSSxVQUFVLEVBQUU7NEJBQ1osSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFOztnQ0FFbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0NBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM1Qzt5QkFDSjs7OzhCQUVJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQSxFQUE5Qix3QkFBOEI7d0JBRXhCLHFCQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUE7O3dCQUF2QyxJQUFJLEdBQUcsU0FBZ0M7d0JBQzNDLElBQUksSUFBSSxFQUFFOzRCQUNGLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBRWhELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUMzQixPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUN6RCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNyRCxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQzdDLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoRCxhQUFhLEdBQUcsRUFBRSxDQUFDOzRCQUN2QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNwQixhQUFhLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7NkJBQzVDO2lDQUNJO2dDQUNELGFBQWEsR0FBRyxRQUFRLENBQUM7NkJBQzVCOzs0QkFFRCxJQUFJLGFBQWEsSUFBSSxhQUFhLEVBQUU7Z0NBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dDQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDMUM7eUJBQ0o7Ozs7d0JBR0wsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7NEJBQzdCLFVBQVUsQ0FBQzs7Z0NBRVAsSUFBSSxLQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtvQ0FDM0IsSUFBSSxhQUFhLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDMUMsSUFBSSxhQUFhLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O29DQUcxQyxLQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztvQ0FDNUQsS0FBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7b0NBQ3hCLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7aUNBQ2pDOzZCQUNKLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ1o7Ozs7O0tBQ0o7SUFDTCxpQkFBQztBQUFELENBQUM7O0FDOVpELFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUN0QixFQUFFLHlCQUF5QixDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO0FBQzNFLElBQUksT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQzdCLE1BQU0sT0FBTyxPQUFPLEdBQUcsQ0FBQztBQUN4QixLQUFLLENBQUM7QUFDTixHQUFHLE1BQU07QUFDVCxJQUFJLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDbkksS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFO0FBQ2hELEVBQUUsSUFBSSxFQUFFLFFBQVEsWUFBWSxXQUFXLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUM3RCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzFDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzNELElBQUksVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlELEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRTtBQUM1RCxFQUFFLElBQUksVUFBVSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkUsRUFBRSxJQUFJLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0QsRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUMxQyxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUNsQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNwQyxNQUFNLEtBQUssRUFBRSxLQUFLO0FBQ2xCLE1BQU0sVUFBVSxFQUFFLElBQUk7QUFDdEIsTUFBTSxZQUFZLEVBQUUsSUFBSTtBQUN4QixNQUFNLFFBQVEsRUFBRSxJQUFJO0FBQ3BCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRyxNQUFNO0FBQ1QsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtBQUMvRCxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztBQUM5RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN6RSxJQUFJLFdBQVcsRUFBRTtBQUNqQixNQUFNLEtBQUssRUFBRSxRQUFRO0FBQ3JCLE1BQU0sUUFBUSxFQUFFLElBQUk7QUFDcEIsTUFBTSxZQUFZLEVBQUUsSUFBSTtBQUN4QixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLElBQUksVUFBVSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFO0FBQzVCLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUU7QUFDaEcsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxHQUFHLENBQUM7QUFDSixFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFDRDtBQUNBLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVFLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUNEO0FBQ0EsU0FBUyx5QkFBeUIsR0FBRztBQUNyQyxFQUFFLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUN6RSxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDM0MsRUFBRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUMvQztBQUNBLEVBQUUsSUFBSTtBQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDZCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN6QyxFQUFFLElBQUkseUJBQXlCLEVBQUUsRUFBRTtBQUNuQyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25DLEdBQUcsTUFBTTtBQUNULElBQUksVUFBVSxHQUFHLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzFELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QixNQUFNLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxNQUFNLElBQUksUUFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDdkMsTUFBTSxJQUFJLEtBQUssRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtBQUMvQixFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRDtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLEtBQUssVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0FBQ2pFO0FBQ0EsRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUN0RCxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2xFO0FBQ0EsSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNyQyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztBQUNoRixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RDtBQUNBLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLE9BQU8sR0FBRztBQUN2QixNQUFNLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDdkQsTUFBTSxXQUFXLEVBQUU7QUFDbkIsUUFBUSxLQUFLLEVBQUUsT0FBTztBQUN0QixRQUFRLFVBQVUsRUFBRSxLQUFLO0FBQ3pCLFFBQVEsUUFBUSxFQUFFLElBQUk7QUFDdEIsUUFBUSxZQUFZLEVBQUUsSUFBSTtBQUMxQixPQUFPO0FBQ1AsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sZUFBZSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRTtBQUN0QyxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLElBQUksTUFBTSxJQUFJLGNBQWMsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBQzFGLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDaEQsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLEVBQUU7QUFDeEUsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQy9CLEVBQUUsSUFBSSx5QkFBeUIsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsRUFBRSxPQUFPLFlBQVk7QUFDckIsSUFBSSxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUkseUJBQXlCLEVBQUU7QUFDbkMsTUFBTSxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3hEO0FBQ0EsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlELEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUMxQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQ2xFLElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxNQUFNO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDMUMsRUFBRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ3JELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdkIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDckQsTUFBTSxJQUFJLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDeEIsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDcEIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUNEO0FBQ0EsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNoQyxFQUFFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUM1SCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsRUFBRSxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ2pILENBQUM7QUFDRDtBQUNBLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRTtBQUM5QixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNyQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRTtBQUNoQyxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDdkMsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUNqRixFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQztBQUNyQjtBQUNBLEVBQUUsSUFBSTtBQUNOLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFO0FBQ3hGLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDeEMsS0FBSztBQUNMLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNoQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDZCxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDYixHQUFHLFNBQVM7QUFDWixJQUFJLElBQUk7QUFDUixNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxLQUFLLFNBQVM7QUFDZCxNQUFNLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0EsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQ2hELEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPO0FBQ2pCLEVBQUUsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEVBQUUsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQzlELEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUFJLDBDQUEwQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDeEQ7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEU7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0EsU0FBUyxnQkFBZ0IsR0FBRztBQUM1QixFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsMklBQTJJLENBQUMsQ0FBQztBQUNuSyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLDBCQUEwQixDQUFDLENBQUMsRUFBRTtBQUN2QyxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ25FLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQztBQUM3QjtBQUNBLE1BQU0sT0FBTztBQUNiLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLENBQUMsRUFBRSxZQUFZO0FBQ3ZCLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPO0FBQ3BDLFlBQVksSUFBSSxFQUFFLElBQUk7QUFDdEIsV0FBVyxDQUFDO0FBQ1osVUFBVSxPQUFPO0FBQ2pCLFlBQVksSUFBSSxFQUFFLEtBQUs7QUFDdkIsWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3pCLFdBQVcsQ0FBQztBQUNaLFNBQVM7QUFDVCxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN4QixVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLFNBQVM7QUFDVCxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ1osT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUM7QUFDakssR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUU7QUFDUixNQUFNLGdCQUFnQixHQUFHLElBQUk7QUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSztBQUNwQixNQUFNLEdBQUcsQ0FBQztBQUNWLEVBQUUsT0FBTztBQUNULElBQUksQ0FBQyxFQUFFLFlBQVk7QUFDbkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLENBQUMsRUFBRSxZQUFZO0FBQ25CLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNuQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsS0FBSztBQUNMLElBQUksQ0FBQyxFQUFFLFlBQVk7QUFDbkIsTUFBTSxJQUFJO0FBQ1YsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hFLE9BQU8sU0FBUztBQUNoQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQzlCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsSUFBSSxJQUFJLEdBQUc7QUFDWCxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBQ2IsRUFBRSxPQUFPLEVBQUUsR0FBRztBQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDVixFQUFFLGNBQWMsRUFBRSxHQUFHO0FBQ3JCLEVBQUUsWUFBWSxFQUFFLEdBQUc7QUFDbkIsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxJQUFJLEdBQUc7QUFDWCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsVUFBVSxFQUFFLFlBQVk7QUFDMUIsRUFBRSxZQUFZLEVBQUUsY0FBYztBQUM5QixFQUFFLGFBQWEsRUFBRSxlQUFlO0FBQ2hDLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDcEIsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUN4QixFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLEVBQUUsUUFBUSxFQUFFLFVBQVU7QUFDdEIsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN0QixFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osRUFBRSxPQUFPLEVBQUUsU0FBUztBQUNwQixFQUFFLFNBQVMsRUFBRSxXQUFXO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxZQUFZLEVBQUUsY0FBYztBQUM5QixFQUFFLFlBQVksRUFBRSxjQUFjO0FBQzlCLEVBQUUsR0FBRyxFQUFFLEtBQUs7QUFDWixFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLENBQUMsQ0FBQztBQUNGLElBQUksZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFDNUMsSUFBSSxXQUFXLEdBQUc7QUFDbEIsRUFBRSxHQUFHLEVBQUUsdUJBQXVCO0FBQzlCLEVBQUUsR0FBRyxFQUFFLHVCQUF1QjtBQUM5QixFQUFFLEdBQUcsRUFBRSx1QkFBdUI7QUFDOUIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsRUFBRSxPQUFPLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN4QixJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDekIsRUFBRSxJQUFJLFVBQVUsRUFBRSxHQUFHLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQy9CLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZCxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQzVCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RSxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU87QUFDVCxJQUFJLFVBQVUsRUFBRSxVQUFVO0FBQzFCLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztBQUM1RDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVTtBQUN6QyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQzlEO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM5QyxJQUFJLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLE1BQU0sT0FBTztBQUNiLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDZixRQUFRLEdBQUcsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzNDLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLE9BQU87QUFDakMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDakIsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNaLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUMvQixFQUFFLE9BQU87QUFDVCxJQUFJLElBQUksRUFBRSxJQUFJO0FBQ2QsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMxQyxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDNUIsRUFBRSxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVO0FBQzFDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7QUFDN0I7QUFDQSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDM0UsRUFBRSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3RELElBQUksRUFBRSxHQUFHLENBQUM7QUFDVixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hGLEVBQUUsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUN0QjtBQUNBLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRTtBQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQUU7QUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZGLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ25DLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEI7QUFDQSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ1gsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtBQUNoRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDbkMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xELEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUNEO0FBQ0EsSUFBSSxLQUFLLGdCQUFnQixZQUFZO0FBQ3JDLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM3QixJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQy9CLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzdCLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkIsSUFBSSxHQUFHLEVBQUUsU0FBUztBQUNsQixJQUFJLEtBQUssRUFBRSxTQUFTLE9BQU8sR0FBRztBQUM5QixNQUFNLE9BQU8sT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25GLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxjQUFjO0FBQ3ZCLElBQUksS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7QUFDN0MsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUM1QixVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQzNCLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUU7QUFDNUIsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxnQkFBZ0IsWUFBWTtBQUNwQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxHQUFHLEVBQUUscUJBQXFCO0FBQzlCLElBQUksS0FBSyxFQUFFLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNuRCxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELE1BQU0sT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3pFLEtBQUs7QUFDTDtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLG9CQUFvQjtBQUM3QixJQUFJLEtBQUssRUFBRSxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3pELE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQztBQUM1QixNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzlDO0FBQ0EsTUFBTSxJQUFJLEdBQUcsRUFBRTtBQUNmLFFBQVEsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGNBQWMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNuRixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDbkQsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNqRSxLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsaUJBQWlCO0FBQzFCLElBQUksS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDakQsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLFVBQVUsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkc7QUFDQSxNQUFNLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0MsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoRCxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxhQUFhO0FBQ3RCLElBQUksS0FBSyxFQUFFLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDN0MsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0I7QUFDQSxNQUFNLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN6QixRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFdBQVc7QUFDcEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUMzQyxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjtBQUNBLE1BQU0sT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUNoQyxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGlCQUFpQjtBQUMxQixJQUFJLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ2pELE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN4QyxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGFBQWE7QUFDdEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDckM7QUFDQSxNQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDaEMsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxrQkFBa0I7QUFDM0IsSUFBSSxLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM3RCxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxTQUFTLEdBQUcsTUFBTSxFQUFFO0FBQ3RDLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRCxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxTQUFTO0FBQ2xCLElBQUksS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLE1BQU0sT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0UsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLG9CQUFvQjtBQUM3QixJQUFJLEtBQUssRUFBRSxTQUFTLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUU7QUFDMUUsTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDOUMsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDdEMsTUFBTSxPQUFPLGlCQUFpQixJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsaUJBQWlCO0FBQzFCLElBQUksS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDakQsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBTSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckgsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxhQUFhO0FBQ3RCLElBQUksS0FBSyxFQUFFLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQjtBQUNBLE1BQU0sT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2RCxRQUFRLFFBQVEsRUFBRTtBQUNsQixVQUFVLEtBQUssSUFBSTtBQUNuQixZQUFZLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEIsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQztBQUN6QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssSUFBSTtBQUNuQixZQUFZLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2hELFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0QsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEdBQUc7QUFDbEIsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4QixZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUM1QixNQUFNLElBQUksRUFBRSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNoRCxNQUFNLE9BQU87QUFDYixRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xCLFFBQVEsTUFBTSxFQUFFLE1BQU07QUFDdEIsUUFBUSxLQUFLLEVBQUUsS0FBSztBQUNwQixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUN0QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEM7QUFDQSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUMzQyxNQUFNLEtBQUssRUFBRSxPQUFPLElBQUksSUFBSTtBQUM1QixNQUFNLFFBQVEsRUFBRSxJQUFJO0FBQ3BCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLElBQUksR0FBRyxFQUFFLGNBQWM7QUFDdkIsSUFBSSxLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDcEQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUcsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLDhCQUE4QjtBQUN2QyxJQUFJLEtBQUssRUFBRSxTQUFTLDRCQUE0QixDQUFDLEtBQUssRUFBRTtBQUN4RCxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNqRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDcEMsTUFBTSxPQUFPLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxjQUFjO0FBQ3ZCLElBQUksS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtBQUN4QyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3ZDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEMsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxlQUFlO0FBQ3hCLElBQUksS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7QUFDOUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRSxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtBQUN6QyxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0MsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksS0FBSyxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO0FBQ2hDLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzVCLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEQsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELFFBQVEsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFNBQVM7QUFDbEIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRCxRQUFRLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0QsUUFBUSxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUQsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFlBQVk7QUFDckIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNuQztBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3JFLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3hCLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDbkM7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUNyRSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsdUJBQXVCO0FBQ2hDLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFVBQVU7QUFDbkIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxJQUFJLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvRixNQUFNLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckQsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGdCQUFnQjtBQUN6QixJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUN6RCxNQUFNLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUNuQyxNQUFNLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sT0FBTztBQUNiLFFBQVEsS0FBSyxFQUFFLEtBQUs7QUFDcEIsUUFBUSxHQUFHLEVBQUUsR0FBRztBQUNoQixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6RCxNQUFNLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDNUMsVUFBVSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSztBQUN4QyxVQUFVLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7QUFDckMsTUFBTSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLEtBQUs7QUFDZCxJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRCxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtBQUN6QixVQUFVLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUM5QixZQUFZLE9BQU87QUFDbkIsY0FBYyxRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsYUFBYSxDQUFDO0FBQ2QsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBZSxJQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFdBQVcsR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVELGdCQUFvQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsb0JBQWdCLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQ3hDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGNBQWMsTUFBTSxFQUFFLE1BQU07QUFDNUIsY0FBYyxNQUFNLEVBQUUsTUFBTTtBQUM1QixhQUFhLENBQUM7QUFDZCxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLDJCQUEyQjtBQUNwQyxJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMxRCxNQUFNLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDN0MsVUFBVSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSztBQUN6QyxVQUFVLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7QUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNqQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLElBQUksU0FBUyxnQkFBZ0IsVUFBVSxNQUFNLEVBQUU7QUFDL0MsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkM7QUFDQSxFQUFFLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzVDLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sWUFBWSxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDMUIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQixJQUFJLEdBQUcsRUFBRSxZQUFZO0FBQ3JCLElBQUksS0FBSyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUMvQixNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDaEU7QUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUMzQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQVEsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLEtBQUssRUFBRTtBQUNuQixVQUFVLElBQUksR0FBRyxHQUFHO0FBQ3BCLFlBQVksSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0FBQzVCLFlBQVksR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QixXQUFXLENBQUM7QUFDWixVQUFVLElBQUksQ0FBQyxPQUFPLEdBQUc7QUFDekIsWUFBWSxLQUFLLEVBQUUsS0FBSztBQUN4QixZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3BCLFdBQVcsQ0FBQztBQUNaLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDbEQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsUUFBUSxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztBQUNwRCxZQUFZLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJO0FBQzNDLFlBQVksR0FBRyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztBQUMxQyxRQUFRLElBQUksQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsZUFBZSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLElBQUksa0JBQWtCLGdCQUFnQixVQUFVLFVBQVUsRUFBRTtBQUM1RCxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1QztBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDakQ7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUMvQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUM5QztBQUNBLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNiLElBQUksaUJBQWlCLGdCQUFnQixVQUFVLFdBQVcsRUFBRTtBQUM1RCxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1QztBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDaEQ7QUFDQSxFQUFFLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUM3QztBQUNBLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNiLElBQUksZUFBZSxnQkFBZ0IsVUFBVSxXQUFXLEVBQUU7QUFDMUQsRUFBRSxTQUFTLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDNUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNiLElBQUksV0FBVyxnQkFBZ0IsVUFBVSxXQUFXLEVBQUU7QUFDdEQsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDYjtBQUNBLElBQUksVUFBVSxnQkFBZ0IsVUFBVSxLQUFLLEVBQUU7QUFDL0MsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEM7QUFDQSxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ3hCLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QixJQUFJLEdBQUcsRUFBRSxpQkFBaUI7QUFDMUIsSUFBSSxLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDdEMsVUFBVSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU07QUFDdkMsVUFBVSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU07QUFDdkMsVUFBVSxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMzQjtBQUNBLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hFLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQzVELFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTTtBQUNwRDtBQUNBLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9CLFVBQVUsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN2QixTQUFTLE1BQU07QUFDZixVQUFVLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUQsVUFBVSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzVCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkUsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDckMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLE9BQU87QUFDaEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU07QUFDakMsVUFBVSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUM1QixNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjtBQUNBLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzNDLFFBQVEsTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDekQsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3pELE1BQU0sSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVTtBQUM1QyxVQUFVLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLO0FBQ3hDLFVBQVUsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztBQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLE1BQU0sT0FBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDeEUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7QUFDMUIsVUFBVSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxjQUFjLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJO0FBQzNDLGNBQWMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztBQUNoRDtBQUNBLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQztBQUN0QixVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckIsU0FBUyxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO0FBQ2hEO0FBQ0EsVUFBVSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsVUFBVSxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRixTQUFTLE1BQU07QUFDZixVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxRQUFRLEdBQUc7QUFDakIsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVTtBQUNWLFlBQVksSUFBSSxHQUFHLEdBQUcsK0NBQStDLENBQUM7QUFDdEUsWUFBWSxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxPQUFPO0FBQ25CLGNBQWMsTUFBTSxFQUFFLE1BQU07QUFDNUIsY0FBYyxHQUFHLEVBQUUsR0FBRztBQUN0QixhQUFhLENBQUM7QUFDZCxXQUFXO0FBQ1g7QUFDQSxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQ2pCLFFBQVEsS0FBSyxHQUFHO0FBQ2hCLFVBQVU7QUFDVixZQUFZLElBQUksSUFBSSxHQUFHLG1EQUFtRCxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RjtBQUNBLFlBQVksSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlELFlBQVksT0FBTztBQUNuQixjQUFjLE1BQU0sRUFBRSxPQUFPO0FBQzdCLGNBQWMsR0FBRyxFQUFFLEdBQUc7QUFDdEIsYUFBYSxDQUFDO0FBQ2QsV0FBVztBQUNYO0FBQ0EsUUFBUTtBQUNSLFVBQVUsT0FBTyxHQUFHLENBQUM7QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ1AsSUFBSSxHQUFHLEVBQUUsV0FBVztBQUNwQixJQUFJLEtBQUssRUFBRSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QjtBQUNBLE1BQU0sT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUNoQyxRQUFRLElBQUksTUFBTSxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU07QUFDbEcsUUFBUSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTTtBQUNySCxRQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxNQUFNO0FBQy9ELFFBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDOztBQ3h2Q1AsSUFBSSxTQUFTLGdCQUFnQixVQUFVLEtBQUssRUFBRTtBQUM5QyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUI7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2QztBQUNBLEVBQUUsU0FBUyxTQUFTLEdBQUc7QUFDdkIsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0IsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSx1QkFBdUI7QUFDaEMsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEI7QUFDQTtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLGNBQWMsZ0JBQWdCLFVBQVUsS0FBSyxFQUFFO0FBQ25ELEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQztBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsRUFBRSxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDaEMsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUztBQUN2QyxVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzVCLE1BQU0sSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVc7QUFDM0MsVUFBVSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUN4QyxNQUFNLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsaUVBQWlFLENBQUMsQ0FBQztBQUNuSyxNQUFNLElBQUksTUFBTSxHQUFHLFdBQVcsR0FBRyxLQUFLLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEUsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLGFBQWEsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN4QyxRQUFRLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN4QixVQUFVLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRDtBQUNBLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqRCxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFVBQVUsU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakMsVUFBVSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRDtBQUNBLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVELFlBQVksU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDeEMsWUFBWSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN4QyxjQUFjLEdBQUcsRUFBRSxHQUFHO0FBQ3RCLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNuRyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzlCLFVBQVUsV0FBVyxFQUFFLFdBQVc7QUFDbEMsVUFBVSxZQUFZLEVBQUUsS0FBSztBQUM3QixVQUFVLE1BQU0sRUFBRSxNQUFNO0FBQ3hCLFVBQVUsU0FBUyxFQUFFLFNBQVM7QUFDOUIsVUFBVSxNQUFNLEVBQUUsSUFBSTtBQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkIsT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLFFBQVEsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDL0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDckIsUUFBUSxJQUFJLFNBQVMsRUFBRTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3RFLFVBQVUsSUFBSSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLGFBQWEsRUFBRTtBQUMzQixVQUFVLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUM5RCxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGVBQWU7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRTtBQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0csTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RSxLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixJQUFJLEtBQUssRUFBRSxTQUFTLFFBQVEsR0FBRztBQUMvQixNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztBQUNoQyxVQUFVLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtBQUMxQixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUM1QixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25ILE1BQU0sT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLHVCQUF1QjtBQUNoQyxJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUM1RCxLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUjtBQUNBLElBQUksT0FBTyxnQkFBZ0IsVUFBVSxLQUFLLEVBQUU7QUFDNUMsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckM7QUFDQSxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQ3JCLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLElBQUksR0FBRyxFQUFFLE9BQU87QUFDaEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxTQUFTLHlCQUF5QixDQUFDLElBQUksRUFBRTtBQUN6QyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQjtBQUNBLEVBQUUsT0FBTyxLQUFLLFlBQVksY0FBYyxFQUFFO0FBQzFDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsS0FBSyxZQUFZLFVBQVUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2xELEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDL0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2pDO0FBQ0EsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTztBQUNoQyxVQUFVLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTTtBQUNwQyxVQUFVLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQzNDLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTTtBQUNuRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU07QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztBQUM3QixFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUMsRUFBRSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNsQztBQUNBLEVBQUUsT0FBTyxJQUFJLEVBQUU7QUFDZixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUM5QixJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQzNGLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLE1BQU07QUFDOUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDakMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFDRCxJQUFJLFVBQVUsZ0JBQWdCLFVBQVUsS0FBSyxFQUFFO0FBQy9DLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksR0FBRyxFQUFFLHNCQUFzQjtBQUMvQixJQUFJLEtBQUssRUFBRSxTQUFTLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1QixNQUFNLElBQUksTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDcEQsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNsRCxNQUFNLE9BQU8sVUFBVSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ2pDLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMxRCxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbEU7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFRLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQ25FLFFBQVEsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNoRCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRCxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDNUIsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUztBQUN2QyxVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzVCO0FBQ0E7QUFDQSxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25ELE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUNBO0FBQ0EsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdkUsTUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUM7QUFDeEUsTUFBTSxJQUFJLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUM1QztBQUNBLE1BQU0sT0FBTyxFQUFFLEVBQUU7QUFDakIsUUFBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUMxQyxVQUFVLElBQUksV0FBVyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtBQUN4RSxZQUFZLElBQUksU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDNUMsWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNyQyxjQUFjLEdBQUcsRUFBRSxHQUFHO0FBQ3RCLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QixZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QztBQUNBLFlBQVksSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUN0QyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEIsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFdBQVcsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDakMsWUFBWSxJQUFJLE1BQU0sR0FBRyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDdEcsY0FBYyxPQUFPLE1BQU0sQ0FBQztBQUM1QixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDeEMsWUFBWSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNuQyxjQUFjLE1BQU0sRUFBRSxNQUFNO0FBQzVCLGNBQWMsU0FBUyxFQUFFLFNBQVM7QUFDbEMsY0FBYyxHQUFHLEVBQUUsR0FBRztBQUN0QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QztBQUNBLFlBQVksSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUN0QyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEIsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3pDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUQsWUFBWSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEM7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQ3hELGNBQWMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM3QixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLFVBQVUsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM3QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDakIsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sS0FBSyxXQUFXLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQzFFLFVBQVUsSUFBSSxNQUFNLEdBQUcsU0FBUyxHQUFHLE1BQU0sRUFBRTtBQUMzQyxZQUFZLElBQUksU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ3RELFlBQVksTUFBTTtBQUNsQixXQUFXLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxvREFBb0QsQ0FBQztBQUMzRSxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzlDLFVBQVUsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQzFCLFlBQVksSUFBSSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDdEQsWUFBWSxNQUFNO0FBQ2xCLFdBQVc7QUFDWCxTQUFTLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM5QztBQUNBLFVBQVUsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QztBQUNBLFVBQVUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUMzRSxZQUFZLElBQUksSUFBSSxHQUFHLHNEQUFzRCxDQUFDO0FBQzlFLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzdCLFVBQVUsV0FBVyxFQUFFLFdBQVc7QUFDbEMsVUFBVSxZQUFZLEVBQUUsSUFBSTtBQUM1QixVQUFVLE1BQU0sRUFBRSxNQUFNO0FBQ3hCLFVBQVUsU0FBUyxFQUFFLFNBQVM7QUFDOUIsVUFBVSxNQUFNLEVBQUUsSUFBSTtBQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0QsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLHlCQUF5QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxFQUFFO0FBQ2hCLFVBQVUsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5QixVQUFVLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QjtBQUNBLFVBQVUsT0FBTyxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEQsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDN0IsWUFBWSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQixZQUFZLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDL0IsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxlQUFlO0FBQ3hCLElBQUksS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7QUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFDekMsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksS0FBSyxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO0FBQ2hDLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzVCLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzVCLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEY7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzdDLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDeEMsWUFBWSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVc7QUFDbkQsWUFBWSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztBQUMxQyxRQUFRLElBQUksV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDN0QsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JCLFNBQVM7QUFDVCxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsdUJBQXVCO0FBQ2hDLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLFNBQVMsZ0JBQWdCLFVBQVUsS0FBSyxFQUFFO0FBQzlDLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxTQUFTLFNBQVMsR0FBRztBQUN2QixJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckM7QUFDQSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNCLElBQUksR0FBRyxFQUFFLFdBQVc7QUFDcEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDakMsTUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDekIsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0I7QUFDQSxNQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQzdELFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGlCQUFpQjtBQUMxQixJQUFJLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDM0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNqQyxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjtBQUNBLE1BQU0sT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQzlDLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLElBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDMUMsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM3QixNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFlBQVk7QUFDckIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkQsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLFFBQVEsZ0JBQWdCLFVBQVUsS0FBSyxFQUFFO0FBQzdDLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QjtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLElBQUksR0FBRyxFQUFFLDRCQUE0QjtBQUNyQyxJQUFJLEtBQUssRUFBRSxTQUFTLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDM0QsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFNLE9BQU8sRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEQsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTjtBQUNBLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDdEIsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkO0FBQ0EsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ25DLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUIsSUFBSSxHQUFHLEVBQUUsaUJBQWlCO0FBQzFCLElBQUksS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUMzQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDN0IsTUFBTSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDaEMsTUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDekI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDekUsUUFBUSxNQUFNLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRTtBQUNBLFFBQVEsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzNCLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDN0IsY0FBYyxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQzlDLGNBQWMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDdkMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHO0FBQ3hCLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6QjtBQUNBLGNBQWMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUN2QyxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEQsZUFBZTtBQUNmLGFBQWEsTUFBTTtBQUNuQixjQUFjLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDMUIsY0FBYyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxHQUFHO0FBQ2xCLFlBQVk7QUFDWixjQUFjLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUMsY0FBYyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQyxnQkFBZ0IsR0FBRyxFQUFFLEdBQUc7QUFDeEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsY0FBYyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLGFBQWE7QUFDYixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssR0FBRztBQUNsQixZQUFZO0FBQ1osY0FBYyxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQzlDLGNBQWMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDdkMsZ0JBQWdCLE1BQU0sRUFBRSxJQUFJO0FBQzVCLGdCQUFnQixHQUFHLEVBQUUsR0FBRztBQUN4QixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxjQUFjLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDbkMsY0FBYyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLGFBQWE7QUFDYixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVO0FBQ1YsWUFBWSxJQUFJLGFBQWEsRUFBRTtBQUMvQixjQUFjLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztBQUNoRyxhQUFhLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbkQsY0FBYyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUMsY0FBYyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsUUFBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGFBQWEsRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztBQUMxRixPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDN0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM3QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxlQUFlO0FBQ3hCLElBQUksS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUN6QyxNQUFNLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQ3RDLFVBQVUsU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTO0FBQzdDLFVBQVUsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7QUFDbEMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM3QyxNQUFNLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUN6QyxRQUFRLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDdkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxNQUFNLElBQUksV0FBVyxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUM7QUFDNUMsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3ZFLFFBQVEsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzNCLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDN0IsY0FBYyxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQzlDLGNBQWMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDdkMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHO0FBQ3hCLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6QjtBQUNBLGNBQWMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUN2QyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsZUFBZTtBQUNmLGFBQWEsTUFBTTtBQUNuQixjQUFjLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDMUIsY0FBYyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLGFBQWE7QUFDYjtBQUNBLFlBQVksU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUMvQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssR0FBRztBQUNsQixZQUFZO0FBQ1osY0FBYyxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzFDLGNBQWMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHO0FBQ3hCLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6QixjQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLGNBQWMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNsQyxhQUFhO0FBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWixjQUFjLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELGNBQWMsSUFBSSxPQUFPLEdBQUc7QUFDNUIsZ0JBQWdCLFdBQVcsRUFBRSxXQUFXO0FBQ3hDLGdCQUFnQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLGdCQUFnQixNQUFNLEVBQUUsS0FBSztBQUM3QixnQkFBZ0IsWUFBWSxFQUFFLEtBQUs7QUFDbkMsZ0JBQWdCLFNBQVMsRUFBRSxTQUFTO0FBQ3BDLGdCQUFnQixNQUFNLEVBQUUsSUFBSTtBQUM1QixlQUFlLENBQUM7QUFDaEIsY0FBYyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xELGNBQWMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMzRDtBQUNBLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsY0FBYyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDdEMsY0FBYyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLGNBQWMsSUFBSSxFQUFFLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsY0FBYyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQztBQUNBLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxRQUFRLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3pCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsVUFBVSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbkMsWUFBWSxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsWUFBWSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUNwQyxjQUFjLEdBQUcsRUFBRSxHQUFHO0FBQ3RCLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLFdBQVc7QUFDWDtBQUNBLFVBQVUsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzdCLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGNBQWMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssU0FBUztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZO0FBQ1osY0FBYyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSwyREFBMkQsQ0FBQyxDQUFDO0FBQ2xILFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQixJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzFDLE1BQU0sT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDNUIsTUFBTSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN4RTtBQUNBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxlQUFlO0FBQ3hCLElBQUksS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7QUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFDOUMsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO0FBQzVDLFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0YsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixJQUFJLEtBQUssRUFBRSxTQUFTLFFBQVEsR0FBRztBQUMvQixNQUFNLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQ2xDLFVBQVUsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVO0FBQ3RDLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUN2RixRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQztBQUNwRCxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNSO0FBQ0EsSUFBSSxLQUFLLGdCQUFnQixVQUFVLEtBQUssRUFBRTtBQUMxQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUI7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQztBQUNBLEVBQUUsU0FBUyxLQUFLLEdBQUc7QUFDbkIsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksR0FBRyxFQUFFLE9BQU87QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDMUMsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDNUIsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLEVBQUUsSUFBSSxFQUFFLE1BQU07QUFDZCxFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixDQUFDLENBQUM7QUFDRixJQUFJLFVBQVUsZ0JBQWdCLFVBQVUsS0FBSyxFQUFFO0FBQy9DLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ25DLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzdCLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QixJQUFJLEdBQUcsRUFBRSxrQkFBa0I7QUFDM0IsSUFBSSxLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNqQyxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEI7QUFDQSxNQUFNLE9BQU8sSUFBSSxFQUFFO0FBQ25CLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxRQUFRLEVBQUU7QUFDbEIsVUFBVSxLQUFLLEdBQUc7QUFDbEIsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDeEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEdBQUc7QUFDbEIsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdkMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUNuQixVQUFVLEtBQUssR0FBRyxDQUFDO0FBQ25CLFVBQVUsS0FBSyxHQUFHLENBQUM7QUFDbkIsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUNuQixVQUFVLEtBQUssR0FBRyxDQUFDO0FBQ25CLFVBQVUsS0FBSyxHQUFHLENBQUM7QUFDbkIsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUNuQixVQUFVLEtBQUssR0FBRyxDQUFDO0FBQ25CLFVBQVUsS0FBSyxHQUFHLENBQUM7QUFDbkIsVUFBVSxLQUFLLEdBQUc7QUFDbEIsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3JCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVU7QUFDVixZQUFZLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNsRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELFlBQVksT0FBTyxNQUFNLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsaUJBQWlCO0FBQzFCLElBQUksS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUMzQyxNQUFNLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQ3RDLFVBQVUsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNO0FBQ3ZDLFVBQVUsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7QUFDbEMsTUFBTSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN4QyxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMzQixNQUFNLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hFLFFBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNO0FBQ3hELFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxNQUFNO0FBQ2hDLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxVQUFVLEdBQUcsR0FBRyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDL0I7QUFDQSxVQUFVLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNqQztBQUNBLFlBQVksSUFBSSxVQUFVLEdBQUcsY0FBYyxFQUFFO0FBQzdDLGNBQWMsSUFBSSxHQUFHLEdBQUcsaUdBQWlHLENBQUM7QUFDMUgsY0FBYyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVELGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDMUMsV0FBVyxNQUFNLElBQUksVUFBVSxHQUFHLGNBQWMsRUFBRTtBQUNsRDtBQUNBLFlBQVksY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUN4QyxXQUFXO0FBQ1gsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDekUsVUFBVSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTTtBQUN0QztBQUNBLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0IsWUFBWSxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsZ0NBQWdDLEdBQUcsWUFBWSxDQUFDO0FBQ2xGO0FBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxxREFBcUQsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUY7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9CLFVBQVUsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN2QixTQUFTLE1BQU07QUFDZixVQUFVLE1BQU0sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDeEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLE9BQU87QUFDaEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUM1QixNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsZUFBZTtBQUN4QixJQUFJLEtBQUssRUFBRSxTQUFTLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO0FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RyxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pFLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSx1QkFBdUI7QUFDaEMsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQztBQUMxQyxLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixJQUFJLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6RCxNQUFNLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDNUMsVUFBVSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSztBQUN4QyxVQUFVLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7QUFDckMsTUFBTSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTztBQUN2QyxVQUFVLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTTtBQUN4QyxVQUFVLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzdCLE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLE1BQU0sT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN2RCxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtBQUMxQixVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztBQUNqRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQzNDLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQzFDLFVBQVUsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUNsQyxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxTQUFTLE1BQU07QUFDZixVQUFVLEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDNUIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDekMsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbkQsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkIsTUFBTSxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUNuQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTTtBQUNwQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUMzQixVQUFVLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3RCO0FBQ0EsVUFBVSxJQUFJLE1BQU0sS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFO0FBQzFFLFlBQVksSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzdHLFlBQVksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxZQUFZLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEQsWUFBWSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsV0FBVyxNQUFNO0FBQ2pCLFlBQVksR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUIsWUFBWSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUN2RCxZQUFZLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUNyQyxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksT0FBTyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN0RCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM5RCxLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUjtBQUNBLElBQUksY0FBYyxnQkFBZ0IsVUFBVSxLQUFLLEVBQUU7QUFDbkQsRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUM7QUFDQSxFQUFFLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkO0FBQ0EsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNoQyxJQUFJLEdBQUcsRUFBRSxvQkFBb0I7QUFDN0IsSUFBSSxLQUFLLEVBQUUsU0FBUyxrQkFBa0IsR0FBRztBQUN6QyxNQUFNLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3RHLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLElBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDMUMsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM3QixNQUFNLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZDLFVBQVUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDNUIsTUFBTSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUNqQyxVQUFVLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQixRQUFRLE1BQU0sRUFBRSxLQUFLO0FBQ3JCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxPQUFPLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDbkQsUUFBUSxRQUFRLElBQUk7QUFDcEIsVUFBVSxLQUFLLElBQUk7QUFDbkIsWUFBWTtBQUNaLGNBQWMsU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckMsY0FBYyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRDtBQUNBLGNBQWMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3ZDLGdCQUFnQixJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hELGdCQUFnQixTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUM1QyxrQkFBa0IsR0FBRyxFQUFFLEdBQUc7QUFDMUIsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUIsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsY0FBYyxJQUFJLE1BQU0sSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFO0FBQ2hELGdCQUFnQixJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsZ0JBQWdCLElBQUksTUFBTSxHQUFHLFNBQVMsR0FBRyxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQ2pGLGtCQUFrQixJQUFJLEdBQUcsR0FBRyw2Q0FBNkMsQ0FBQztBQUMxRSxrQkFBa0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRSxpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGFBQWE7QUFDYixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssR0FBRztBQUNsQixZQUFZO0FBQ1osY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUM5QixnQkFBZ0IsSUFBSSxFQUFFLElBQUk7QUFDMUIsZ0JBQWdCLE1BQU0sRUFBRSxNQUFNO0FBQzlCLGVBQWUsQ0FBQyxDQUFDO0FBQ2pCLGNBQWMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUMxQixhQUFhO0FBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEdBQUc7QUFDbEIsWUFBWTtBQUNaLGNBQWMsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxQyxjQUFjLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLGdCQUFnQixHQUFHLEVBQUUsR0FBRztBQUN4QixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxhQUFhO0FBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUNuQixVQUFVLEtBQUssR0FBRztBQUNsQixZQUFZO0FBQ1osY0FBYyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsY0FBYyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHO0FBQ2hGLGNBQWMsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtBQUN6RCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDaEMsa0JBQWtCLElBQUksRUFBRSxJQUFJO0FBQzVCLGtCQUFrQixNQUFNLEVBQUUsTUFBTTtBQUNoQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzVCLGdCQUFnQixNQUFNO0FBQ3RCLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQTtBQUNBLFVBQVU7QUFDVixZQUFZO0FBQ1osY0FBYyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7QUFDbkMsZ0JBQWdCLFdBQVcsRUFBRSxLQUFLO0FBQ2xDLGdCQUFnQixZQUFZLEVBQUUsS0FBSztBQUNuQyxnQkFBZ0IsTUFBTSxFQUFFLElBQUk7QUFDNUIsZ0JBQWdCLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUIsZ0JBQWdCLFNBQVMsRUFBRSxTQUFTO0FBQ3BDLGdCQUFnQixNQUFNLEVBQUUsSUFBSTtBQUM1QixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekI7QUFDQSxjQUFjLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDekI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0QsZ0JBQWdCLE9BQU8sTUFBTSxDQUFDO0FBQzlCLGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsY0FBYyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsTUFBTSxJQUFJLElBQUksRUFBRTtBQUNoQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEIsVUFBVSxNQUFNLEVBQUUsTUFBTTtBQUN4QixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGVBQWU7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRTtBQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0csTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtBQUN6QyxRQUFRLElBQUksSUFBSSxZQUFZLElBQUksRUFBRTtBQUNsQyxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxTQUFTLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxVQUFVLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QjtBQUNBLFVBQVUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QyxVQUFVLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsU0FBUztBQUNULE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixJQUFJLEtBQUssRUFBRSxTQUFTLFFBQVEsR0FBRztBQUMvQixNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztBQUNoQyxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUM1QixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUM1QixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRTtBQUMvQyxRQUFRLE9BQU8sSUFBSSxZQUFZLElBQUksQ0FBQztBQUNwQyxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNoQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFDcEMsUUFBUSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFELFFBQVEsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ2pDLFFBQVEsR0FBRyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDaEc7QUFDQTtBQUNBO0FBQ0EsVUFBVSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVCxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxNQUFNLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNSO0FBQ0EsSUFBSSxXQUFXLGdCQUFnQixVQUFVLEtBQUssRUFBRTtBQUNoRCxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QztBQUNBLEVBQUUsU0FBUyxXQUFXLEdBQUc7QUFDekIsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdCLElBQUksR0FBRyxFQUFFLGVBQWU7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNqQyxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN2QixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RILFFBQVEsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQixJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzVCLE1BQU0sSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekQsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVO0FBQzVDLFVBQVUsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUs7QUFDeEMsVUFBVSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDdEMsVUFBVSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU07QUFDdkMsVUFBVSxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0FBQ2pHO0FBQ0E7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hELFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDekIsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsbUVBQW1FLENBQUMsQ0FBQyxDQUFDO0FBQ2pLO0FBQ0EsVUFBVSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7QUFDbEUsY0FBYyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSTtBQUMzQyxjQUFjLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNO0FBQy9DLGNBQWMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztBQUM5QztBQUNBLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQztBQUN0QixVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckIsVUFBVSxJQUFJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLG1FQUFtRSxDQUFDLENBQUMsQ0FBQztBQUNuSSxTQUFTLE1BQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQjtBQUNBLFVBQVUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQztBQUM1QixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQztBQUM1QixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQztBQUM1QixjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFlBQVksS0FB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LElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUN2RSxJQUFJLE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckcsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDVixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDckMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELEVBQUUsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFD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 diff --git a/.obsidian/plugins/folder-note-plugin/manifest.json b/.obsidian/plugins/folder-note-plugin/manifest.json new file mode 100644 index 0000000..8355496 --- /dev/null +++ b/.obsidian/plugins/folder-note-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "folder-note-plugin", + "name": "Folder Note", + "version": "0.7.3", + "minAppVersion": "0.9.12", + "description": "Click a folder node to show a note describing the folder.", + "author": "xpgo", + "authorUrl": "https://github.com/xpgo/obsidian-folder-note", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/folder-note-plugin/styles.css b/.obsidian/plugins/folder-note-plugin/styles.css new file mode 100644 index 0000000..abe59df --- /dev/null +++ b/.obsidian/plugins/folder-note-plugin/styles.css @@ -0,0 +1,229 @@ +/* hide the folder note file node */ +div.is-folder-note { + display: none; +} + +/* indicate the folder has note */ +div.has-folder-note { + color: var(--text-nav-selected); +} + +/*--------------------------------------------- + Cute card view +-----------------------------------------------*/ + +.cute-card-band { + width: 100%; + max-width: 900px; + margin: 0 auto; + margin-top: 15px; + margin-bottom: 5px; + display: grid; + grid-template-columns: 1fr; + grid-template-rows: auto; + grid-gap: 20px; +} + +@media (min-width: 30em) { + .cute-card-band { + grid-template-columns: 1fr 1fr; + } +} + +@media (min-width: 60em) { + .cute-card-band { + grid-template-columns: repeat(3, 1fr); + } +} + +.cute-card-view { + background: var(--background-accent); + text-decoration: none !important; + color: var(--text-normal); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + display: flex; + flex-direction: column; + min-height: 100%; + position: relative; + top: 0; + transition: all 0.1s ease-in; + border-radius: 10px; +} + +.cute-card-view:hover { + top: -2px; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); +} + +.cute-card-view article { + padding: 15px; + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.cute-card-view h1 { + font-size: 1.2rem; + margin: 0; + color: var(--text-accent); +} + +.cute-card-view a { + text-decoration: none !important; +} + +.cute-card-view p { + flex: 1; + line-height: 1.0; +} + +.cute-card-view span { + font-size: 0.8rem; + font-weight: bold; + color: var(--text-faint); + letter-spacing: 0.05em; +} + +.cute-card-view .thumb { + padding-bottom: 60%; + background-size: cover; + background-position: center center; + border-radius: 10px 10px 0px 0px; +} + +.cute-card-view .thumb-color { + padding-bottom: 10%; + background-size: cover; + background-position: center center; + border-radius: 10px 10px 0px 0px; + text-transform: uppercase; + font-size: 1.2rem; + font-weight: bold; + text-align: center; + color: #FFFFFF; + padding: 10px; +} + +.cute-card-view .thumb-color-folder { + background-color: slateblue; +} + +.cute-card-view .thumb-color-note { + background-color: salmon; +} + + + +/*--------------------------------------------- + strip card view +-----------------------------------------------*/ + +.strip-card-band { + width: 100%; +} + +.strip-card-view { + width: 100%; + max-width: 100%; + margin-top: 1.0rem; + margin-bottom: 1.0rem; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + min-height: 8rem; + -webkit-border-radius: 10px; + border-radius: 10px; + overflow: hidden; + -webkit-transition: all .3s ease; + -o-transition: all .3s ease; + transition: all .3s ease; + -webkit-box-shadow: 0 1px 1px 0 rgba(31, 35, 46, 0.15); + box-shadow: 0 1px 1px 0 rgba(31, 35, 46, 0.15); + /* add by xpgo */ + background: var(--background-accent); + text-decoration: none !important; + color: var(--text-normal); +} + +.strip-card-view:hover { + -webkit-transform: translate(0px, -2px); + -ms-transform: translate(0px, -2px); + transform: translate(0px, -2px); + -webkit-box-shadow: 0 15px 45px -10px rgba(10, 16, 34, 0.2); + box-shadow: 0 15px 45px -10px rgba(10, 16, 34, 0.2); +} + +.strip-card-view .thumb { + width: 20%; + max-width: 100%; + min-height: 9rem; + -webkit-background-size: cover; + background-size: cover; + background-position: 50% 50%; +} + +.strip-card-view .thumb-color { + width: 20%; + max-width: 100%; + min-height: 9rem; + -webkit-background-size: cover; + background-size: cover; + background-position: center center; + /* add by xpgo */ + display: flex; + justify-content: center; + align-items: center; + padding: 10px; + text-transform: uppercase; + font-size: 1.2rem; + font-weight: bold; + text-align: center; + color: #FFFFFF; +} + +.strip-card-view .thumb-color-folder { + background-color: slateblue; +} + +.strip-card-view .thumb-color-note { + background-color: salmon; +} + +.strip-card-view article { + padding: 1rem; + width: 80%; +} + +.strip-card-view h1 { + font-size: 1.5rem; + margin: 0 0 10px; + color: var(--text-accent); +} + +.strip-card-view a { + text-decoration: none !important; +} + +.strip-card-view p { + margin-top: 0; + flex: 1; + line-height: 1.0; +} + +.strip-card-view span { + font-size: 0.8rem; + font-weight: bold; + color: var(--text-faint); + letter-spacing: 0.05em; +} diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json new file mode 100644 index 0000000..cf73714 --- /dev/null +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,58 @@ +{ + "commitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 0, + "autoPushInterval": 0, + "autoPullInterval": 0, + "autoPullOnBoot": false, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "disablePopupsForNoChanges": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": true, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false, + "submoduleRecurseCheckout": false, + "gitDir": "", + "showFileMenu": true, + "authorInHistoryView": "full", + "dateInHistoryView": false, + "lineAuthor": { + "show": false, + "followMovement": "inactive", + "authorDisplay": "initials", + "showCommitHash": false, + "dateTimeFormatOptions": "date", + "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", + "dateTimeTimezone": "viewer-local", + "coloringMaxAge": "1y", + "colorNew": { + "r": 255, + "g": 150, + "b": 150 + }, + "colorOld": { + "r": 120, + "g": 160, + "b": 255 + }, + "textColorCss": "var(--text-muted)", + "ignoreWhitespace": false, + "gutterSpacingFallbackLength": 5, + "lastShownAuthorDisplay": "initials", + "lastShownDateTimeFormatOptions": "date" + }, + "autoCommitMessage": "vault backup: {{date}}" +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-git/main.js b/.obsidian/plugins/obsidian-git/main.js new file mode 100644 index 0000000..d0d2c09 --- /dev/null +++ b/.obsidian/plugins/obsidian-git/main.js @@ -0,0 +1,44901 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source visit the plugins github repository (https://github.com/denolehov/obsidian-git) +*/ + +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, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +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 key2 of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key2) && key2 !== except) + __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || 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, key2, value) => __defNormalProp(obj, typeof key2 !== "symbol" ? key2 + "" : key2, value); + +// node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +var require_base64_js = __commonJS({ + "node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + exports2.byteLength = byteLength; + exports2.toByteArray = toByteArray; + exports2.fromByteArray = fromByteArray; + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; + var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; + } + var i; + var len; + revLookup["-".charCodeAt(0)] = 62; + revLookup["_".charCodeAt(0)] = 63; + function getLens(b64) { + var len2 = b64.length; + if (len2 % 4 > 0) { + throw new Error("Invalid string. Length must be a multiple of 4"); + } + var validLen = b64.indexOf("="); + if (validLen === -1) validLen = len2; + var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; + return [validLen, placeHoldersLen]; + } + function byteLength(b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; + } + function _byteLength(b64, validLen, placeHoldersLen) { + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; + } + function toByteArray(b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); + var curByte = 0; + var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; + var i2; + for (i2 = 0; i2 < len2; i2 += 4) { + tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)]; + arr[curByte++] = tmp >> 16 & 255; + arr[curByte++] = tmp >> 8 & 255; + arr[curByte++] = tmp & 255; + } + if (placeHoldersLen === 2) { + tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4; + arr[curByte++] = tmp & 255; + } + if (placeHoldersLen === 1) { + tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2; + arr[curByte++] = tmp >> 8 & 255; + arr[curByte++] = tmp & 255; + } + return arr; + } + function tripletToBase64(num2) { + return lookup[num2 >> 18 & 63] + lookup[num2 >> 12 & 63] + lookup[num2 >> 6 & 63] + lookup[num2 & 63]; + } + function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + for (var i2 = start; i2 < end; i2 += 3) { + tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255); + output.push(tripletToBase64(tmp)); + } + return output.join(""); + } + function fromByteArray(uint8) { + var tmp; + var len2 = uint8.length; + var extraBytes = len2 % 3; + var parts = []; + var maxChunkLength = 16383; + for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) { + parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength)); + } + if (extraBytes === 1) { + tmp = uint8[len2 - 1]; + parts.push( + lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" + ); + } else if (extraBytes === 2) { + tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; + parts.push( + lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" + ); + } + return parts.join(""); + } + } +}); + +// node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +var require_ieee754 = __commonJS({ + "node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js"(exports2) { + init_polyfill_buffer(); + exports2.read = function(buffer2, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer2[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer2[offset + i], i += d, nBits -= 8) { + } + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer2[offset + i], i += d, nBits -= 8) { + } + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); + }; + exports2.write = function(buffer2, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer2[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) { + } + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer2[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) { + } + buffer2[offset + i - d] |= s * 128; + }; + } +}); + +// node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +var require_buffer = __commonJS({ + "node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var base64 = require_base64_js(); + var ieee754 = require_ieee754(); + var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null; + exports2.Buffer = Buffer2; + exports2.SlowBuffer = SlowBuffer; + exports2.INSPECT_MAX_BYTES = 50; + var K_MAX_LENGTH = 2147483647; + exports2.kMaxLength = K_MAX_LENGTH; + Buffer2.TYPED_ARRAY_SUPPORT = typedArraySupport(); + if (!Buffer2.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") { + console.error( + "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support." + ); + } + function typedArraySupport() { + try { + const arr = new Uint8Array(1); + const proto = { foo: function() { + return 42; + } }; + Object.setPrototypeOf(proto, Uint8Array.prototype); + Object.setPrototypeOf(arr, proto); + return arr.foo() === 42; + } catch (e) { + return false; + } + } + Object.defineProperty(Buffer2.prototype, "parent", { + enumerable: true, + get: function() { + if (!Buffer2.isBuffer(this)) return void 0; + return this.buffer; + } + }); + Object.defineProperty(Buffer2.prototype, "offset", { + enumerable: true, + get: function() { + if (!Buffer2.isBuffer(this)) return void 0; + return this.byteOffset; + } + }); + function createBuffer(length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"'); + } + const buf = new Uint8Array(length); + Object.setPrototypeOf(buf, Buffer2.prototype); + return buf; + } + function Buffer2(arg, encodingOrOffset, length) { + if (typeof arg === "number") { + if (typeof encodingOrOffset === "string") { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ); + } + return allocUnsafe(arg); + } + return from(arg, encodingOrOffset, length); + } + Buffer2.poolSize = 8192; + function from(value, encodingOrOffset, length) { + if (typeof value === "string") { + return fromString2(value, encodingOrOffset); + } + if (ArrayBuffer.isView(value)) { + return fromArrayView(value); + } + if (value == null) { + throw new TypeError( + "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value + ); + } + if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) { + return fromArrayBuffer(value, encodingOrOffset, length); + } + if (typeof SharedArrayBuffer !== "undefined" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length); + } + if (typeof value === "number") { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ); + } + const valueOf = value.valueOf && value.valueOf(); + if (valueOf != null && valueOf !== value) { + return Buffer2.from(valueOf, encodingOrOffset, length); + } + const b = fromObject(value); + if (b) return b; + if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") { + return Buffer2.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length); + } + throw new TypeError( + "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value + ); + } + Buffer2.from = function(value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length); + }; + Object.setPrototypeOf(Buffer2.prototype, Uint8Array.prototype); + Object.setPrototypeOf(Buffer2, Uint8Array); + function assertSize(size) { + if (typeof size !== "number") { + throw new TypeError('"size" argument must be of type number'); + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } + } + function alloc(size, fill, encoding) { + assertSize(size); + if (size <= 0) { + return createBuffer(size); + } + if (fill !== void 0) { + return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); + } + return createBuffer(size); + } + Buffer2.alloc = function(size, fill, encoding) { + return alloc(size, fill, encoding); + }; + function allocUnsafe(size) { + assertSize(size); + return createBuffer(size < 0 ? 0 : checked(size) | 0); + } + Buffer2.allocUnsafe = function(size) { + return allocUnsafe(size); + }; + Buffer2.allocUnsafeSlow = function(size) { + return allocUnsafe(size); + }; + function fromString2(string, encoding) { + if (typeof encoding !== "string" || encoding === "") { + encoding = "utf8"; + } + if (!Buffer2.isEncoding(encoding)) { + throw new TypeError("Unknown encoding: " + encoding); + } + const length = byteLength(string, encoding) | 0; + let buf = createBuffer(length); + const actual = buf.write(string, encoding); + if (actual !== length) { + buf = buf.slice(0, actual); + } + return buf; + } + function fromArrayLike(array) { + const length = array.length < 0 ? 0 : checked(array.length) | 0; + const buf = createBuffer(length); + for (let i = 0; i < length; i += 1) { + buf[i] = array[i] & 255; + } + return buf; + } + function fromArrayView(arrayView) { + if (isInstance(arrayView, Uint8Array)) { + const copy2 = new Uint8Array(arrayView); + return fromArrayBuffer(copy2.buffer, copy2.byteOffset, copy2.byteLength); + } + return fromArrayLike(arrayView); + } + function fromArrayBuffer(array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds'); + } + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds'); + } + let buf; + if (byteOffset === void 0 && length === void 0) { + buf = new Uint8Array(array); + } else if (length === void 0) { + buf = new Uint8Array(array, byteOffset); + } else { + buf = new Uint8Array(array, byteOffset, length); + } + Object.setPrototypeOf(buf, Buffer2.prototype); + return buf; + } + function fromObject(obj) { + if (Buffer2.isBuffer(obj)) { + const len = checked(obj.length) | 0; + const buf = createBuffer(len); + if (buf.length === 0) { + return buf; + } + obj.copy(buf, 0, 0, len); + return buf; + } + if (obj.length !== void 0) { + if (typeof obj.length !== "number" || numberIsNaN(obj.length)) { + return createBuffer(0); + } + return fromArrayLike(obj); + } + if (obj.type === "Buffer" && Array.isArray(obj.data)) { + return fromArrayLike(obj.data); + } + } + function checked(length) { + if (length >= K_MAX_LENGTH) { + throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes"); + } + return length | 0; + } + function SlowBuffer(length) { + if (+length != length) { + length = 0; + } + return Buffer2.alloc(+length); + } + Buffer2.isBuffer = function isBuffer(b) { + return b != null && b._isBuffer === true && b !== Buffer2.prototype; + }; + Buffer2.compare = function compare(a, b) { + if (isInstance(a, Uint8Array)) a = Buffer2.from(a, a.offset, a.byteLength); + if (isInstance(b, Uint8Array)) b = Buffer2.from(b, b.offset, b.byteLength); + if (!Buffer2.isBuffer(a) || !Buffer2.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ); + } + if (a === b) return 0; + let x = a.length; + let y = b.length; + for (let i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; + Buffer2.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case "hex": + case "utf8": + case "utf-8": + case "ascii": + case "latin1": + case "binary": + case "base64": + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return true; + default: + return false; + } + }; + Buffer2.concat = function concat(list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + if (list.length === 0) { + return Buffer2.alloc(0); + } + let i; + if (length === void 0) { + length = 0; + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + const buffer2 = Buffer2.allocUnsafe(length); + let pos = 0; + for (i = 0; i < list.length; ++i) { + let buf = list[i]; + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer2.length) { + if (!Buffer2.isBuffer(buf)) buf = Buffer2.from(buf); + buf.copy(buffer2, pos); + } else { + Uint8Array.prototype.set.call( + buffer2, + buf, + pos + ); + } + } else if (!Buffer2.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } else { + buf.copy(buffer2, pos); + } + pos += buf.length; + } + return buffer2; + }; + function byteLength(string, encoding) { + if (Buffer2.isBuffer(string)) { + return string.length; + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength; + } + if (typeof string !== "string") { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string + ); + } + const len = string.length; + const mustMatch = arguments.length > 2 && arguments[2] === true; + if (!mustMatch && len === 0) return 0; + let loweredCase = false; + for (; ; ) { + switch (encoding) { + case "ascii": + case "latin1": + case "binary": + return len; + case "utf8": + case "utf-8": + return utf8ToBytes(string).length; + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return len * 2; + case "hex": + return len >>> 1; + case "base64": + return base64ToBytes(string).length; + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length; + } + encoding = ("" + encoding).toLowerCase(); + loweredCase = true; + } + } + } + Buffer2.byteLength = byteLength; + function slowToString(encoding, start, end) { + let loweredCase = false; + if (start === void 0 || start < 0) { + start = 0; + } + if (start > this.length) { + return ""; + } + if (end === void 0 || end > this.length) { + end = this.length; + } + if (end <= 0) { + return ""; + } + end >>>= 0; + start >>>= 0; + if (end <= start) { + return ""; + } + if (!encoding) encoding = "utf8"; + while (true) { + switch (encoding) { + case "hex": + return hexSlice(this, start, end); + case "utf8": + case "utf-8": + return utf8Slice(this, start, end); + case "ascii": + return asciiSlice(this, start, end); + case "latin1": + case "binary": + return latin1Slice(this, start, end); + case "base64": + return base64Slice(this, start, end); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return utf16leSlice(this, start, end); + default: + if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); + encoding = (encoding + "").toLowerCase(); + loweredCase = true; + } + } + } + Buffer2.prototype._isBuffer = true; + function swap(b, n, m) { + const i = b[n]; + b[n] = b[m]; + b[m] = i; + } + Buffer2.prototype.swap16 = function swap16() { + const len = this.length; + if (len % 2 !== 0) { + throw new RangeError("Buffer size must be a multiple of 16-bits"); + } + for (let i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + return this; + }; + Buffer2.prototype.swap32 = function swap32() { + const len = this.length; + if (len % 4 !== 0) { + throw new RangeError("Buffer size must be a multiple of 32-bits"); + } + for (let i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + return this; + }; + Buffer2.prototype.swap64 = function swap64() { + const len = this.length; + if (len % 8 !== 0) { + throw new RangeError("Buffer size must be a multiple of 64-bits"); + } + for (let i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + return this; + }; + Buffer2.prototype.toString = function toString() { + const length = this.length; + if (length === 0) return ""; + if (arguments.length === 0) return utf8Slice(this, 0, length); + return slowToString.apply(this, arguments); + }; + Buffer2.prototype.toLocaleString = Buffer2.prototype.toString; + Buffer2.prototype.equals = function equals3(b) { + if (!Buffer2.isBuffer(b)) throw new TypeError("Argument must be a Buffer"); + if (this === b) return true; + return Buffer2.compare(this, b) === 0; + }; + Buffer2.prototype.inspect = function inspect() { + let str = ""; + const max = exports2.INSPECT_MAX_BYTES; + str = this.toString("hex", 0, max).replace(/(.{2})/g, "$1 ").trim(); + if (this.length > max) str += " ... "; + return ""; + }; + if (customInspectSymbol) { + Buffer2.prototype[customInspectSymbol] = Buffer2.prototype.inspect; + } + Buffer2.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer2.from(target, target.offset, target.byteLength); + } + if (!Buffer2.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target + ); + } + if (start === void 0) { + start = 0; + } + if (end === void 0) { + end = target ? target.length : 0; + } + if (thisStart === void 0) { + thisStart = 0; + } + if (thisEnd === void 0) { + thisEnd = this.length; + } + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError("out of range index"); + } + if (thisStart >= thisEnd && start >= end) { + return 0; + } + if (thisStart >= thisEnd) { + return -1; + } + if (start >= end) { + return 1; + } + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + let x = thisEnd - thisStart; + let y = end - start; + const len = Math.min(x, y); + const thisCopy = this.slice(thisStart, thisEnd); + const targetCopy = target.slice(start, end); + for (let i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; + function bidirectionalIndexOf(buffer2, val, byteOffset, encoding, dir) { + if (buffer2.length === 0) return -1; + if (typeof byteOffset === "string") { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 2147483647) { + byteOffset = 2147483647; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; + } + byteOffset = +byteOffset; + if (numberIsNaN(byteOffset)) { + byteOffset = dir ? 0 : buffer2.length - 1; + } + if (byteOffset < 0) byteOffset = buffer2.length + byteOffset; + if (byteOffset >= buffer2.length) { + if (dir) return -1; + else byteOffset = buffer2.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0; + else return -1; + } + if (typeof val === "string") { + val = Buffer2.from(val, encoding); + } + if (Buffer2.isBuffer(val)) { + if (val.length === 0) { + return -1; + } + return arrayIndexOf(buffer2, val, byteOffset, encoding, dir); + } else if (typeof val === "number") { + val = val & 255; + if (typeof Uint8Array.prototype.indexOf === "function") { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer2, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer2, val, byteOffset); + } + } + return arrayIndexOf(buffer2, [val], byteOffset, encoding, dir); + } + throw new TypeError("val must be string, number or Buffer"); + } + function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + let indexSize = 1; + let arrLength = arr.length; + let valLength = val.length; + if (encoding !== void 0) { + encoding = String(encoding).toLowerCase(); + if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") { + if (arr.length < 2 || val.length < 2) { + return -1; + } + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + function read(buf, i2) { + if (indexSize === 1) { + return buf[i2]; + } else { + return buf.readUInt16BE(i2 * indexSize); + } + } + let i; + if (dir) { + let foundIndex = -1; + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + for (i = byteOffset; i >= 0; i--) { + let found = true; + for (let j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + if (found) return i; + } + } + return -1; + } + Buffer2.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; + }; + Buffer2.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true); + }; + Buffer2.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false); + }; + function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0; + const remaining = buf.length - offset; + if (!length) { + length = remaining; + } else { + length = Number(length); + if (length > remaining) { + length = remaining; + } + } + const strLen = string.length; + if (length > strLen / 2) { + length = strLen / 2; + } + let i; + for (i = 0; i < length; ++i) { + const parsed = parseInt(string.substr(i * 2, 2), 16); + if (numberIsNaN(parsed)) return i; + buf[offset + i] = parsed; + } + return i; + } + function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); + } + function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length); + } + function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length); + } + function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); + } + Buffer2.prototype.write = function write(string, offset, length, encoding) { + if (offset === void 0) { + encoding = "utf8"; + length = this.length; + offset = 0; + } else if (length === void 0 && typeof offset === "string") { + encoding = offset; + length = this.length; + offset = 0; + } else if (isFinite(offset)) { + offset = offset >>> 0; + if (isFinite(length)) { + length = length >>> 0; + if (encoding === void 0) encoding = "utf8"; + } else { + encoding = length; + length = void 0; + } + } else { + throw new Error( + "Buffer.write(string, encoding, offset[, length]) is no longer supported" + ); + } + const remaining = this.length - offset; + if (length === void 0 || length > remaining) length = remaining; + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError("Attempt to write outside buffer bounds"); + } + if (!encoding) encoding = "utf8"; + let loweredCase = false; + for (; ; ) { + switch (encoding) { + case "hex": + return hexWrite(this, string, offset, length); + case "utf8": + case "utf-8": + return utf8Write(this, string, offset, length); + case "ascii": + case "latin1": + case "binary": + return asciiWrite(this, string, offset, length); + case "base64": + return base64Write(this, string, offset, length); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return ucs2Write(this, string, offset, length); + default: + if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); + encoding = ("" + encoding).toLowerCase(); + loweredCase = true; + } + } + }; + Buffer2.prototype.toJSON = function toJSON() { + return { + type: "Buffer", + data: Array.prototype.slice.call(this._arr || this, 0) + }; + }; + function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf); + } else { + return base64.fromByteArray(buf.slice(start, end)); + } + } + function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end); + const res = []; + let i = start; + while (i < end) { + const firstByte = buf[i]; + let codePoint = null; + let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1; + if (i + bytesPerSequence <= end) { + let secondByte, thirdByte, fourthByte, tempCodePoint; + switch (bytesPerSequence) { + case 1: + if (firstByte < 128) { + codePoint = firstByte; + } + break; + case 2: + secondByte = buf[i + 1]; + if ((secondByte & 192) === 128) { + tempCodePoint = (firstByte & 31) << 6 | secondByte & 63; + if (tempCodePoint > 127) { + codePoint = tempCodePoint; + } + } + break; + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) { + tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63; + if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) { + codePoint = tempCodePoint; + } + } + break; + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) { + tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63; + if (tempCodePoint > 65535 && tempCodePoint < 1114112) { + codePoint = tempCodePoint; + } + } + } + } + if (codePoint === null) { + codePoint = 65533; + bytesPerSequence = 1; + } else if (codePoint > 65535) { + codePoint -= 65536; + res.push(codePoint >>> 10 & 1023 | 55296); + codePoint = 56320 | codePoint & 1023; + } + res.push(codePoint); + i += bytesPerSequence; + } + return decodeCodePointsArray(res); + } + var MAX_ARGUMENTS_LENGTH = 4096; + function decodeCodePointsArray(codePoints) { + const len = codePoints.length; + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints); + } + let res = ""; + let i = 0; + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ); + } + return res; + } + function asciiSlice(buf, start, end) { + let ret = ""; + end = Math.min(buf.length, end); + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 127); + } + return ret; + } + function latin1Slice(buf, start, end) { + let ret = ""; + end = Math.min(buf.length, end); + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + return ret; + } + function hexSlice(buf, start, end) { + const len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + let out = ""; + for (let i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]]; + } + return out; + } + function utf16leSlice(buf, start, end) { + const bytes = buf.slice(start, end); + let res = ""; + for (let i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + return res; + } + Buffer2.prototype.slice = function slice(start, end) { + const len = this.length; + start = ~~start; + end = end === void 0 ? len : ~~end; + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + if (end < start) end = start; + const newBuf = this.subarray(start, end); + Object.setPrototypeOf(newBuf, Buffer2.prototype); + return newBuf; + }; + function checkOffset(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint"); + if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length"); + } + Buffer2.prototype.readUintLE = Buffer2.prototype.readUIntLE = function readUIntLE(offset, byteLength2, noAssert) { + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) checkOffset(offset, byteLength2, this.length); + let val = this[offset]; + let mul = 1; + let i = 0; + while (++i < byteLength2 && (mul *= 256)) { + val += this[offset + i] * mul; + } + return val; + }; + Buffer2.prototype.readUintBE = Buffer2.prototype.readUIntBE = function readUIntBE(offset, byteLength2, noAssert) { + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) { + checkOffset(offset, byteLength2, this.length); + } + let val = this[offset + --byteLength2]; + let mul = 1; + while (byteLength2 > 0 && (mul *= 256)) { + val += this[offset + --byteLength2] * mul; + } + return val; + }; + Buffer2.prototype.readUint8 = Buffer2.prototype.readUInt8 = function readUInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset]; + }; + Buffer2.prototype.readUint16LE = Buffer2.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; + }; + Buffer2.prototype.readUint16BE = Buffer2.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; + }; + Buffer2.prototype.readUint32LE = Buffer2.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216; + }; + Buffer2.prototype.readUint32BE = Buffer2.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); + }; + Buffer2.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) { + offset = offset >>> 0; + validateNumber(offset, "offset"); + const first2 = this[offset]; + const last2 = this[offset + 7]; + if (first2 === void 0 || last2 === void 0) { + boundsError(offset, this.length - 8); + } + const lo = first2 + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24; + const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last2 * 2 ** 24; + return BigInt(lo) + (BigInt(hi) << BigInt(32)); + }); + Buffer2.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) { + offset = offset >>> 0; + validateNumber(offset, "offset"); + const first2 = this[offset]; + const last2 = this[offset + 7]; + if (first2 === void 0 || last2 === void 0) { + boundsError(offset, this.length - 8); + } + const hi = first2 * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; + const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last2; + return (BigInt(hi) << BigInt(32)) + BigInt(lo); + }); + Buffer2.prototype.readIntLE = function readIntLE(offset, byteLength2, noAssert) { + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) checkOffset(offset, byteLength2, this.length); + let val = this[offset]; + let mul = 1; + let i = 0; + while (++i < byteLength2 && (mul *= 256)) { + val += this[offset + i] * mul; + } + mul *= 128; + if (val >= mul) val -= Math.pow(2, 8 * byteLength2); + return val; + }; + Buffer2.prototype.readIntBE = function readIntBE(offset, byteLength2, noAssert) { + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) checkOffset(offset, byteLength2, this.length); + let i = byteLength2; + let mul = 1; + let val = this[offset + --i]; + while (i > 0 && (mul *= 256)) { + val += this[offset + --i] * mul; + } + mul *= 128; + if (val >= mul) val -= Math.pow(2, 8 * byteLength2); + return val; + }; + Buffer2.prototype.readInt8 = function readInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 128)) return this[offset]; + return (255 - this[offset] + 1) * -1; + }; + Buffer2.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + const val = this[offset] | this[offset + 1] << 8; + return val & 32768 ? val | 4294901760 : val; + }; + Buffer2.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + const val = this[offset + 1] | this[offset] << 8; + return val & 32768 ? val | 4294901760 : val; + }; + Buffer2.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; + }; + Buffer2.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; + }; + Buffer2.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) { + offset = offset >>> 0; + validateNumber(offset, "offset"); + const first2 = this[offset]; + const last2 = this[offset + 7]; + if (first2 === void 0 || last2 === void 0) { + boundsError(offset, this.length - 8); + } + const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last2 << 24); + return (BigInt(val) << BigInt(32)) + BigInt(first2 + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24); + }); + Buffer2.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) { + offset = offset >>> 0; + validateNumber(offset, "offset"); + const first2 = this[offset]; + const last2 = this[offset + 7]; + if (first2 === void 0 || last2 === void 0) { + boundsError(offset, this.length - 8); + } + const val = (first2 << 24) + // Overflow + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; + return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last2); + }); + Buffer2.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, true, 23, 4); + }; + Buffer2.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, false, 23, 4); + }; + Buffer2.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, true, 52, 8); + }; + Buffer2.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, false, 52, 8); + }; + function checkInt(buf, value, offset, ext, max, min) { + if (!Buffer2.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError("Index out of range"); + } + Buffer2.prototype.writeUintLE = Buffer2.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength2, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength2) - 1; + checkInt(this, value, offset, byteLength2, maxBytes, 0); + } + let mul = 1; + let i = 0; + this[offset] = value & 255; + while (++i < byteLength2 && (mul *= 256)) { + this[offset + i] = value / mul & 255; + } + return offset + byteLength2; + }; + Buffer2.prototype.writeUintBE = Buffer2.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength2, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength2 = byteLength2 >>> 0; + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength2) - 1; + checkInt(this, value, offset, byteLength2, maxBytes, 0); + } + let i = byteLength2 - 1; + let mul = 1; + this[offset + i] = value & 255; + while (--i >= 0 && (mul *= 256)) { + this[offset + i] = value / mul & 255; + } + return offset + byteLength2; + }; + Buffer2.prototype.writeUint8 = Buffer2.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 255, 0); + this[offset] = value & 255; + return offset + 1; + }; + Buffer2.prototype.writeUint16LE = Buffer2.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); + this[offset] = value & 255; + this[offset + 1] = value >>> 8; + return offset + 2; + }; + Buffer2.prototype.writeUint16BE = Buffer2.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); + this[offset] = value >>> 8; + this[offset + 1] = value & 255; + return offset + 2; + }; + Buffer2.prototype.writeUint32LE = Buffer2.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 255; + return offset + 4; + }; + Buffer2.prototype.writeUint32BE = Buffer2.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 255; + return offset + 4; + }; + function wrtBigUInt64LE(buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7); + let lo = Number(value & BigInt(4294967295)); + buf[offset++] = lo; + lo = lo >> 8; + buf[offset++] = lo; + lo = lo >> 8; + buf[offset++] = lo; + lo = lo >> 8; + buf[offset++] = lo; + let hi = Number(value >> BigInt(32) & BigInt(4294967295)); + buf[offset++] = hi; + hi = hi >> 8; + buf[offset++] = hi; + hi = hi >> 8; + buf[offset++] = hi; + hi = hi >> 8; + buf[offset++] = hi; + return offset; + } + function wrtBigUInt64BE(buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7); + let lo = Number(value & BigInt(4294967295)); + buf[offset + 7] = lo; + lo = lo >> 8; + buf[offset + 6] = lo; + lo = lo >> 8; + buf[offset + 5] = lo; + lo = lo >> 8; + buf[offset + 4] = lo; + let hi = Number(value >> BigInt(32) & BigInt(4294967295)); + buf[offset + 3] = hi; + hi = hi >> 8; + buf[offset + 2] = hi; + hi = hi >> 8; + buf[offset + 1] = hi; + hi = hi >> 8; + buf[offset] = hi; + return offset + 8; + } + Buffer2.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); + }); + Buffer2.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); + }); + Buffer2.prototype.writeIntLE = function writeIntLE(value, offset, byteLength2, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + const limit = Math.pow(2, 8 * byteLength2 - 1); + checkInt(this, value, offset, byteLength2, limit - 1, -limit); + } + let i = 0; + let mul = 1; + let sub = 0; + this[offset] = value & 255; + while (++i < byteLength2 && (mul *= 256)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 255; + } + return offset + byteLength2; + }; + Buffer2.prototype.writeIntBE = function writeIntBE(value, offset, byteLength2, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + const limit = Math.pow(2, 8 * byteLength2 - 1); + checkInt(this, value, offset, byteLength2, limit - 1, -limit); + } + let i = byteLength2 - 1; + let mul = 1; + let sub = 0; + this[offset + i] = value & 255; + while (--i >= 0 && (mul *= 256)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 255; + } + return offset + byteLength2; + }; + Buffer2.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 127, -128); + if (value < 0) value = 255 + value + 1; + this[offset] = value & 255; + return offset + 1; + }; + Buffer2.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); + this[offset] = value & 255; + this[offset + 1] = value >>> 8; + return offset + 2; + }; + Buffer2.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); + this[offset] = value >>> 8; + this[offset + 1] = value & 255; + return offset + 2; + }; + Buffer2.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); + this[offset] = value & 255; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + return offset + 4; + }; + Buffer2.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); + if (value < 0) value = 4294967295 + value + 1; + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 255; + return offset + 4; + }; + Buffer2.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); + }); + Buffer2.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); + }); + function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError("Index out of range"); + if (offset < 0) throw new RangeError("Index out of range"); + } + function writeFloat(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 34028234663852886e22, -34028234663852886e22); + } + ieee754.write(buf, value, offset, littleEndian, 23, 4); + return offset + 4; + } + Buffer2.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert); + }; + Buffer2.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert); + }; + function writeDouble(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 17976931348623157e292, -17976931348623157e292); + } + ieee754.write(buf, value, offset, littleEndian, 52, 8); + return offset + 8; + } + Buffer2.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert); + }; + Buffer2.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert); + }; + Buffer2.prototype.copy = function copy2(target, targetStart, start, end) { + if (!Buffer2.isBuffer(target)) throw new TypeError("argument should be a Buffer"); + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; + if (targetStart < 0) { + throw new RangeError("targetStart out of bounds"); + } + if (start < 0 || start >= this.length) throw new RangeError("Index out of range"); + if (end < 0) throw new RangeError("sourceEnd out of bounds"); + if (end > this.length) end = this.length; + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + const len = end - start; + if (this === target && typeof Uint8Array.prototype.copyWithin === "function") { + this.copyWithin(targetStart, start, end); + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ); + } + return len; + }; + Buffer2.prototype.fill = function fill(val, start, end, encoding) { + if (typeof val === "string") { + if (typeof start === "string") { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === "string") { + encoding = end; + end = this.length; + } + if (encoding !== void 0 && typeof encoding !== "string") { + throw new TypeError("encoding must be a string"); + } + if (typeof encoding === "string" && !Buffer2.isEncoding(encoding)) { + throw new TypeError("Unknown encoding: " + encoding); + } + if (val.length === 1) { + const code = val.charCodeAt(0); + if (encoding === "utf8" && code < 128 || encoding === "latin1") { + val = code; + } + } + } else if (typeof val === "number") { + val = val & 255; + } else if (typeof val === "boolean") { + val = Number(val); + } + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError("Out of range index"); + } + if (end <= start) { + return this; + } + start = start >>> 0; + end = end === void 0 ? this.length : end >>> 0; + if (!val) val = 0; + let i; + if (typeof val === "number") { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + const bytes = Buffer2.isBuffer(val) ? val : Buffer2.from(val, encoding); + const len = bytes.length; + if (len === 0) { + throw new TypeError('The value "' + val + '" is invalid for argument "value"'); + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + return this; + }; + var errors = {}; + function E(sym, getMessage, Base) { + errors[sym] = class NodeError extends Base { + constructor() { + super(); + Object.defineProperty(this, "message", { + value: getMessage.apply(this, arguments), + writable: true, + configurable: true + }); + this.name = `${this.name} [${sym}]`; + this.stack; + delete this.name; + } + get code() { + return sym; + } + set code(value) { + Object.defineProperty(this, "code", { + configurable: true, + enumerable: true, + value, + writable: true + }); + } + toString() { + return `${this.name} [${sym}]: ${this.message}`; + } + }; + } + E( + "ERR_BUFFER_OUT_OF_BOUNDS", + function(name) { + if (name) { + return `${name} is outside of buffer bounds`; + } + return "Attempt to access memory outside buffer bounds"; + }, + RangeError + ); + E( + "ERR_INVALID_ARG_TYPE", + function(name, actual) { + return `The "${name}" argument must be of type number. Received type ${typeof actual}`; + }, + TypeError + ); + E( + "ERR_OUT_OF_RANGE", + function(str, range, input) { + let msg = `The value of "${str}" is out of range.`; + let received = input; + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)); + } else if (typeof input === "bigint") { + received = String(input); + if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { + received = addNumericalSeparator(received); + } + received += "n"; + } + msg += ` It must be ${range}. Received ${received}`; + return msg; + }, + RangeError + ); + function addNumericalSeparator(val) { + let res = ""; + let i = val.length; + const start = val[0] === "-" ? 1 : 0; + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}`; + } + return `${val.slice(0, i)}${res}`; + } + function checkBounds(buf, offset, byteLength2) { + validateNumber(offset, "offset"); + if (buf[offset] === void 0 || buf[offset + byteLength2] === void 0) { + boundsError(offset, buf.length - (byteLength2 + 1)); + } + } + function checkIntBI(value, min, max, buf, offset, byteLength2) { + if (value > max || value < min) { + const n = typeof min === "bigint" ? "n" : ""; + let range; + if (byteLength2 > 3) { + if (min === 0 || min === BigInt(0)) { + range = `>= 0${n} and < 2${n} ** ${(byteLength2 + 1) * 8}${n}`; + } else { + range = `>= -(2${n} ** ${(byteLength2 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength2 + 1) * 8 - 1}${n}`; + } + } else { + range = `>= ${min}${n} and <= ${max}${n}`; + } + throw new errors.ERR_OUT_OF_RANGE("value", range, value); + } + checkBounds(buf, offset, byteLength2); + } + function validateNumber(value, name) { + if (typeof value !== "number") { + throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value); + } + } + function boundsError(value, length, type) { + if (Math.floor(value) !== value) { + validateNumber(value, type); + throw new errors.ERR_OUT_OF_RANGE(type || "offset", "an integer", value); + } + if (length < 0) { + throw new errors.ERR_BUFFER_OUT_OF_BOUNDS(); + } + throw new errors.ERR_OUT_OF_RANGE( + type || "offset", + `>= ${type ? 1 : 0} and <= ${length}`, + value + ); + } + var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; + function base64clean(str) { + str = str.split("=")[0]; + str = str.trim().replace(INVALID_BASE64_RE, ""); + if (str.length < 2) return ""; + while (str.length % 4 !== 0) { + str = str + "="; + } + return str; + } + function utf8ToBytes(string, units) { + units = units || Infinity; + let codePoint; + const length = string.length; + let leadSurrogate = null; + const bytes = []; + for (let i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); + if (codePoint > 55295 && codePoint < 57344) { + if (!leadSurrogate) { + if (codePoint > 56319) { + if ((units -= 3) > -1) bytes.push(239, 191, 189); + continue; + } else if (i + 1 === length) { + if ((units -= 3) > -1) bytes.push(239, 191, 189); + continue; + } + leadSurrogate = codePoint; + continue; + } + if (codePoint < 56320) { + if ((units -= 3) > -1) bytes.push(239, 191, 189); + leadSurrogate = codePoint; + continue; + } + codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536; + } else if (leadSurrogate) { + if ((units -= 3) > -1) bytes.push(239, 191, 189); + } + leadSurrogate = null; + if (codePoint < 128) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 2048) { + if ((units -= 2) < 0) break; + bytes.push( + codePoint >> 6 | 192, + codePoint & 63 | 128 + ); + } else if (codePoint < 65536) { + if ((units -= 3) < 0) break; + bytes.push( + codePoint >> 12 | 224, + codePoint >> 6 & 63 | 128, + codePoint & 63 | 128 + ); + } else if (codePoint < 1114112) { + if ((units -= 4) < 0) break; + bytes.push( + codePoint >> 18 | 240, + codePoint >> 12 & 63 | 128, + codePoint >> 6 & 63 | 128, + codePoint & 63 | 128 + ); + } else { + throw new Error("Invalid code point"); + } + } + return bytes; + } + function asciiToBytes(str) { + const byteArray = []; + for (let i = 0; i < str.length; ++i) { + byteArray.push(str.charCodeAt(i) & 255); + } + return byteArray; + } + function utf16leToBytes(str, units) { + let c, hi, lo; + const byteArray = []; + for (let i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + return byteArray; + } + function base64ToBytes(str) { + return base64.toByteArray(base64clean(str)); + } + function blitBuffer(src, dst, offset, length) { + let i; + for (i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + return i; + } + function isInstance(obj, type) { + return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name; + } + function numberIsNaN(obj) { + return obj !== obj; + } + var hexSliceLookupTable = function() { + const alphabet = "0123456789abcdef"; + const table = new Array(256); + for (let i = 0; i < 16; ++i) { + const i16 = i * 16; + for (let j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j]; + } + } + return table; + }(); + function defineBigIntMethod(fn) { + return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn; + } + function BufferBigIntNotDefined() { + throw new Error("BigInt not supported"); + } + } +}); + +// polyfill_buffer.js +var import_obsidian, buffer, Buffer; +var init_polyfill_buffer = __esm({ + "polyfill_buffer.js"() { + import_obsidian = require("obsidian"); + if (import_obsidian.Platform.isMobileApp) { + buffer = require_buffer().Buffer; + } else { + buffer = global.Buffer; + } + Buffer = buffer; + } +}); + +// node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/lib/index.js +var require_lib = __commonJS({ + "node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/lib/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var AsyncLock2 = function(opts) { + opts = opts || {}; + this.Promise = opts.Promise || Promise; + this.queues = /* @__PURE__ */ Object.create(null); + this.domainReentrant = opts.domainReentrant || false; + if (this.domainReentrant) { + if (typeof process === "undefined" || typeof process.domain === "undefined") { + throw new Error( + "Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill." + ); + } + this.domains = /* @__PURE__ */ Object.create(null); + } + this.timeout = opts.timeout || AsyncLock2.DEFAULT_TIMEOUT; + this.maxOccupationTime = opts.maxOccupationTime || AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME; + this.maxExecutionTime = opts.maxExecutionTime || AsyncLock2.DEFAULT_MAX_EXECUTION_TIME; + if (opts.maxPending === Infinity || Number.isInteger(opts.maxPending) && opts.maxPending >= 0) { + this.maxPending = opts.maxPending; + } else { + this.maxPending = AsyncLock2.DEFAULT_MAX_PENDING; + } + }; + AsyncLock2.DEFAULT_TIMEOUT = 0; + AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME = 0; + AsyncLock2.DEFAULT_MAX_EXECUTION_TIME = 0; + AsyncLock2.DEFAULT_MAX_PENDING = 1e3; + AsyncLock2.prototype.acquire = function(key2, fn, cb, opts) { + if (Array.isArray(key2)) { + return this._acquireBatch(key2, fn, cb, opts); + } + if (typeof fn !== "function") { + throw new Error("You must pass a function to execute"); + } + var deferredResolve = null; + var deferredReject = null; + var deferred2 = null; + if (typeof cb !== "function") { + opts = cb; + cb = null; + deferred2 = new this.Promise(function(resolve2, reject) { + deferredResolve = resolve2; + deferredReject = reject; + }); + } + opts = opts || {}; + var resolved = false; + var timer = null; + var occupationTimer = null; + var executionTimer = null; + var self2 = this; + var done = function(locked, err, ret) { + if (occupationTimer) { + clearTimeout(occupationTimer); + occupationTimer = null; + } + if (executionTimer) { + clearTimeout(executionTimer); + executionTimer = null; + } + if (locked) { + if (!!self2.queues[key2] && self2.queues[key2].length === 0) { + delete self2.queues[key2]; + } + if (self2.domainReentrant) { + delete self2.domains[key2]; + } + } + if (!resolved) { + if (!deferred2) { + if (typeof cb === "function") { + cb(err, ret); + } + } else { + if (err) { + deferredReject(err); + } else { + deferredResolve(ret); + } + } + resolved = true; + } + if (locked) { + if (!!self2.queues[key2] && self2.queues[key2].length > 0) { + self2.queues[key2].shift()(); + } + } + }; + var exec = function(locked) { + if (resolved) { + return done(locked); + } + if (timer) { + clearTimeout(timer); + timer = null; + } + if (self2.domainReentrant && locked) { + self2.domains[key2] = process.domain; + } + var maxExecutionTime = opts.maxExecutionTime || self2.maxExecutionTime; + if (maxExecutionTime) { + executionTimer = setTimeout(function() { + if (!!self2.queues[key2]) { + done(locked, new Error("Maximum execution time is exceeded " + key2)); + } + }, maxExecutionTime); + } + if (fn.length === 1) { + var called = false; + try { + fn(function(err, ret) { + if (!called) { + called = true; + done(locked, err, ret); + } + }); + } catch (err) { + if (!called) { + called = true; + done(locked, err); + } + } + } else { + self2._promiseTry(function() { + return fn(); + }).then(function(ret) { + done(locked, void 0, ret); + }, function(error) { + done(locked, error); + }); + } + }; + if (self2.domainReentrant && !!process.domain) { + exec = process.domain.bind(exec); + } + var maxPending = opts.maxPending || self2.maxPending; + if (!self2.queues[key2]) { + self2.queues[key2] = []; + exec(true); + } else if (self2.domainReentrant && !!process.domain && process.domain === self2.domains[key2]) { + exec(false); + } else if (self2.queues[key2].length >= maxPending) { + done(false, new Error("Too many pending tasks in queue " + key2)); + } else { + var taskFn = function() { + exec(true); + }; + if (opts.skipQueue) { + self2.queues[key2].unshift(taskFn); + } else { + self2.queues[key2].push(taskFn); + } + var timeout = opts.timeout || self2.timeout; + if (timeout) { + timer = setTimeout(function() { + timer = null; + done(false, new Error("async-lock timed out in queue " + key2)); + }, timeout); + } + } + var maxOccupationTime = opts.maxOccupationTime || self2.maxOccupationTime; + if (maxOccupationTime) { + occupationTimer = setTimeout(function() { + if (!!self2.queues[key2]) { + done(false, new Error("Maximum occupation time is exceeded in queue " + key2)); + } + }, maxOccupationTime); + } + if (deferred2) { + return deferred2; + } + }; + AsyncLock2.prototype._acquireBatch = function(keys, fn, cb, opts) { + if (typeof cb !== "function") { + opts = cb; + cb = null; + } + var self2 = this; + var getFn = function(key2, fn2) { + return function(cb2) { + self2.acquire(key2, fn2, cb2, opts); + }; + }; + var fnx = keys.reduceRight(function(prev, key2) { + return getFn(key2, prev); + }, fn); + if (typeof cb === "function") { + fnx(cb); + } else { + return new this.Promise(function(resolve2, reject) { + if (fnx.length === 1) { + fnx(function(err, ret) { + if (err) { + reject(err); + } else { + resolve2(ret); + } + }); + } else { + resolve2(fnx()); + } + }); + } + }; + AsyncLock2.prototype.isBusy = function(key2) { + if (!key2) { + return Object.keys(this.queues).length > 0; + } else { + return !!this.queues[key2]; + } + }; + AsyncLock2.prototype._promiseTry = function(fn) { + try { + return this.Promise.resolve(fn()); + } catch (e) { + return this.Promise.reject(e); + } + }; + module2.exports = AsyncLock2; + } +}); + +// node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/index.js +var require_async_lock = __commonJS({ + "node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = require_lib(); + } +}); + +// node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js +var require_inherits_browser = __commonJS({ + "node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js"(exports2, module2) { + init_polyfill_buffer(); + if (typeof Object.create === "function") { + module2.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + } + }; + } else { + module2.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function() { + }; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; + } + } +}); + +// node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js +var require_safe_buffer = __commonJS({ + "node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js"(exports2, module2) { + init_polyfill_buffer(); + var buffer2 = require_buffer(); + var Buffer2 = buffer2.Buffer; + function copyProps(src, dst) { + for (var key2 in src) { + dst[key2] = src[key2]; + } + } + if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { + module2.exports = buffer2; + } else { + copyProps(buffer2, exports2); + exports2.Buffer = SafeBuffer; + } + function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer2(arg, encodingOrOffset, length); + } + SafeBuffer.prototype = Object.create(Buffer2.prototype); + copyProps(Buffer2, SafeBuffer); + SafeBuffer.from = function(arg, encodingOrOffset, length) { + if (typeof arg === "number") { + throw new TypeError("Argument must not be a number"); + } + return Buffer2(arg, encodingOrOffset, length); + }; + SafeBuffer.alloc = function(size, fill, encoding) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + var buf = Buffer2(size); + if (fill !== void 0) { + if (typeof encoding === "string") { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; + }; + SafeBuffer.allocUnsafe = function(size) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + return Buffer2(size); + }; + SafeBuffer.allocUnsafeSlow = function(size) { + if (typeof size !== "number") { + throw new TypeError("Argument must be a number"); + } + return buffer2.SlowBuffer(size); + }; + } +}); + +// node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js +var require_hash = __commonJS({ + "node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js"(exports2, module2) { + init_polyfill_buffer(); + var Buffer2 = require_safe_buffer().Buffer; + function Hash2(blockSize, finalSize) { + this._block = Buffer2.alloc(blockSize); + this._finalSize = finalSize; + this._blockSize = blockSize; + this._len = 0; + } + Hash2.prototype.update = function(data, enc) { + if (typeof data === "string") { + enc = enc || "utf8"; + data = Buffer2.from(data, enc); + } + var block = this._block; + var blockSize = this._blockSize; + var length = data.length; + var accum = this._len; + for (var offset = 0; offset < length; ) { + var assigned = accum % blockSize; + var remainder = Math.min(length - offset, blockSize - assigned); + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i]; + } + accum += remainder; + offset += remainder; + if (accum % blockSize === 0) { + this._update(block); + } + } + this._len += length; + return this; + }; + Hash2.prototype.digest = function(enc) { + var rem = this._len % this._blockSize; + this._block[rem] = 128; + this._block.fill(0, rem + 1); + if (rem >= this._finalSize) { + this._update(this._block); + this._block.fill(0); + } + var bits = this._len * 8; + if (bits <= 4294967295) { + this._block.writeUInt32BE(bits, this._blockSize - 4); + } else { + var lowBits = (bits & 4294967295) >>> 0; + var highBits = (bits - lowBits) / 4294967296; + this._block.writeUInt32BE(highBits, this._blockSize - 8); + this._block.writeUInt32BE(lowBits, this._blockSize - 4); + } + this._update(this._block); + var hash2 = this._hash(); + return enc ? hash2.toString(enc) : hash2; + }; + Hash2.prototype._update = function() { + throw new Error("_update must be implemented by subclass"); + }; + module2.exports = Hash2; + } +}); + +// node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js +var require_sha1 = __commonJS({ + "node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js"(exports2, module2) { + init_polyfill_buffer(); + var inherits = require_inherits_browser(); + var Hash2 = require_hash(); + var Buffer2 = require_safe_buffer().Buffer; + var K2 = [ + 1518500249, + 1859775393, + 2400959708 | 0, + 3395469782 | 0 + ]; + var W = new Array(80); + function Sha1() { + this.init(); + this._w = W; + Hash2.call(this, 64, 56); + } + inherits(Sha1, Hash2); + Sha1.prototype.init = function() { + this._a = 1732584193; + this._b = 4023233417; + this._c = 2562383102; + this._d = 271733878; + this._e = 3285377520; + return this; + }; + function rotl1(num2) { + return num2 << 1 | num2 >>> 31; + } + function rotl5(num2) { + return num2 << 5 | num2 >>> 27; + } + function rotl30(num2) { + return num2 << 30 | num2 >>> 2; + } + function ft(s, b, c, d) { + if (s === 0) return b & c | ~b & d; + if (s === 2) return b & c | b & d | c & d; + return b ^ c ^ d; + } + Sha1.prototype._update = function(M) { + var W2 = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + for (var i = 0; i < 16; ++i) W2[i] = M.readInt32BE(i * 4); + for (; i < 80; ++i) W2[i] = rotl1(W2[i - 3] ^ W2[i - 8] ^ W2[i - 14] ^ W2[i - 16]); + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = rotl5(a) + ft(s, b, c, d) + e + W2[j] + K2[s] | 0; + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; + }; + Sha1.prototype._hash = function() { + var H = Buffer2.allocUnsafe(20); + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + return H; + }; + module2.exports = Sha1; + } +}); + +// node_modules/.pnpm/crc-32@1.2.2/node_modules/crc-32/crc32.js +var require_crc32 = __commonJS({ + "node_modules/.pnpm/crc-32@1.2.2/node_modules/crc-32/crc32.js"(exports2) { + init_polyfill_buffer(); + var CRC32; + (function(factory) { + if (typeof DO_NOT_EXPORT_CRC === "undefined") { + if ("object" === typeof exports2) { + factory(exports2); + } else if ("function" === typeof define && define.amd) { + define(function() { + var module3 = {}; + factory(module3); + return module3; + }); + } else { + factory(CRC32 = {}); + } + } else { + factory(CRC32 = {}); + } + })(function(CRC322) { + CRC322.version = "1.2.2"; + function signed_crc_table() { + var c = 0, table = new Array(256); + for (var n = 0; n != 256; ++n) { + c = n; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; + table[n] = c; + } + return typeof Int32Array !== "undefined" ? new Int32Array(table) : table; + } + var T0 = signed_crc_table(); + function slice_by_16_tables(T) { + var c = 0, v = 0, n = 0, table = typeof Int32Array !== "undefined" ? new Int32Array(4096) : new Array(4096); + for (n = 0; n != 256; ++n) table[n] = T[n]; + for (n = 0; n != 256; ++n) { + v = T[n]; + for (c = 256 + n; c < 4096; c += 256) v = table[c] = v >>> 8 ^ T[v & 255]; + } + var out = []; + for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); + return out; + } + var TT = slice_by_16_tables(T0); + var T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4]; + var T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9]; + var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14]; + function crc32_bstr(bstr, seed) { + var C = seed ^ -1; + for (var i = 0, L = bstr.length; i < L; ) C = C >>> 8 ^ T0[(C ^ bstr.charCodeAt(i++)) & 255]; + return ~C; + } + function crc32_buf(B, seed) { + var C = seed ^ -1, L = B.length - 15, i = 0; + for (; i < L; ) C = Tf[B[i++] ^ C & 255] ^ Te[B[i++] ^ C >> 8 & 255] ^ Td[B[i++] ^ C >> 16 & 255] ^ Tc[B[i++] ^ C >>> 24] ^ Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]]; + L += 15; + while (i < L) C = C >>> 8 ^ T0[(C ^ B[i++]) & 255]; + return ~C; + } + function crc32_str(str, seed) { + var C = seed ^ -1; + for (var i = 0, L = str.length, c = 0, d = 0; i < L; ) { + c = str.charCodeAt(i++); + if (c < 128) { + C = C >>> 8 ^ T0[(C ^ c) & 255]; + } else if (c < 2048) { + C = C >>> 8 ^ T0[(C ^ (192 | c >> 6 & 31)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255]; + } else if (c >= 55296 && c < 57344) { + c = (c & 1023) + 64; + d = str.charCodeAt(i++) & 1023; + C = C >>> 8 ^ T0[(C ^ (240 | c >> 8 & 7)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | c >> 2 & 63)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | d & 63)) & 255]; + } else { + C = C >>> 8 ^ T0[(C ^ (224 | c >> 12 & 15)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | c >> 6 & 63)) & 255]; + C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255]; + } + } + return ~C; + } + CRC322.table = T0; + CRC322.bstr = crc32_bstr; + CRC322.buf = crc32_buf; + CRC322.str = crc32_str; + }); + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js +var require_common = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; + function _has(obj, key2) { + return Object.prototype.hasOwnProperty.call(obj, key2); + } + exports2.assign = function(obj) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { + continue; + } + if (typeof source !== "object") { + throw new TypeError(source + "must be non-object"); + } + for (var p in source) { + if (_has(source, p)) { + obj[p] = source[p]; + } + } + } + return obj; + }; + exports2.shrinkBuf = function(buf, size) { + if (buf.length === size) { + return buf; + } + if (buf.subarray) { + return buf.subarray(0, size); + } + buf.length = size; + return buf; + }; + var fnTyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + var i, l, len, pos, chunk, result; + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + return result; + } + }; + var fnUntyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + return [].concat.apply([], chunks); + } + }; + exports2.setTyped = function(on) { + if (on) { + exports2.Buf8 = Uint8Array; + exports2.Buf16 = Uint16Array; + exports2.Buf32 = Int32Array; + exports2.assign(exports2, fnTyped); + } else { + exports2.Buf8 = Array; + exports2.Buf16 = Array; + exports2.Buf32 = Array; + exports2.assign(exports2, fnUntyped); + } + }; + exports2.setTyped(TYPED_OK); + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js +var require_trees = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var utils = require_common(); + var Z_FIXED = 4; + var Z_BINARY = 0; + var Z_TEXT = 1; + var Z_UNKNOWN = 2; + function zero(buf) { + var len = buf.length; + while (--len >= 0) { + buf[len] = 0; + } + } + var STORED_BLOCK = 0; + var STATIC_TREES = 1; + var DYN_TREES = 2; + var MIN_MATCH = 3; + var MAX_MATCH = 258; + var LENGTH_CODES = 29; + var LITERALS = 256; + var L_CODES = LITERALS + 1 + LENGTH_CODES; + var D_CODES = 30; + var BL_CODES = 19; + var HEAP_SIZE = 2 * L_CODES + 1; + var MAX_BITS = 15; + var Buf_size = 16; + var MAX_BL_BITS = 7; + var END_BLOCK = 256; + var REP_3_6 = 16; + var REPZ_3_10 = 17; + var REPZ_11_138 = 18; + var extra_lbits = ( + /* extra bits for each length code */ + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0] + ); + var extra_dbits = ( + /* extra bits for each distance code */ + [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13] + ); + var extra_blbits = ( + /* extra bits for each bit length code */ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7] + ); + var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + var DIST_CODE_LEN = 512; + var static_ltree = new Array((L_CODES + 2) * 2); + zero(static_ltree); + var static_dtree = new Array(D_CODES * 2); + zero(static_dtree); + var _dist_code = new Array(DIST_CODE_LEN); + zero(_dist_code); + var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + zero(_length_code); + var base_length = new Array(LENGTH_CODES); + zero(base_length); + var base_dist = new Array(D_CODES); + zero(base_dist); + function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + this.static_tree = static_tree; + this.extra_bits = extra_bits; + this.extra_base = extra_base; + this.elems = elems; + this.max_length = max_length; + this.has_stree = static_tree && static_tree.length; + } + var static_l_desc; + var static_d_desc; + var static_bl_desc; + function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; + this.max_code = 0; + this.stat_desc = stat_desc; + } + function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; + } + function put_short(s, w) { + s.pending_buf[s.pending++] = w & 255; + s.pending_buf[s.pending++] = w >>> 8 & 255; + } + function send_bits(s, value, length) { + if (s.bi_valid > Buf_size - length) { + s.bi_buf |= value << s.bi_valid & 65535; + put_short(s, s.bi_buf); + s.bi_buf = value >> Buf_size - s.bi_valid; + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= value << s.bi_valid & 65535; + s.bi_valid += length; + } + } + function send_code(s, c, tree) { + send_bits( + s, + tree[c * 2], + tree[c * 2 + 1] + /*.Len*/ + ); + } + function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; + } + function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 255; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } + } + function gen_bitlen(s, desc) { + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; + var n, m; + var bits; + var xbits; + var f; + var overflow = 0; + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + tree[s.heap[s.heap_max] * 2 + 1] = 0; + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1] = bits; + if (n > max_code) { + continue; + } + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1] + xbits); + } + } + if (overflow === 0) { + return; + } + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { + bits--; + } + s.bl_count[bits]--; + s.bl_count[bits + 1] += 2; + s.bl_count[max_length]--; + overflow -= 2; + } while (overflow > 0); + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { + continue; + } + if (tree[m * 2 + 1] !== bits) { + s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2]; + tree[m * 2 + 1] = bits; + } + n--; + } + } + } + function gen_codes(tree, max_code, bl_count) { + var next_code = new Array(MAX_BITS + 1); + var code = 0; + var bits; + var n; + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = code + bl_count[bits - 1] << 1; + } + for (n = 0; n <= max_code; n++) { + var len = tree[n * 2 + 1]; + if (len === 0) { + continue; + } + tree[n * 2] = bi_reverse(next_code[len]++, len); + } + } + function tr_static_init() { + var n; + var bits; + var length; + var code; + var dist; + var bl_count = new Array(MAX_BITS + 1); + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < 1 << extra_lbits[code]; n++) { + _length_code[length++] = code; + } + } + _length_code[length - 1] = code; + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < 1 << extra_dbits[code]; n++) { + _dist_code[dist++] = code; + } + } + dist >>= 7; + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < 1 << extra_dbits[code] - 7; n++) { + _dist_code[256 + dist++] = code; + } + } + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1] = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1] = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1] = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1] = 8; + n++; + bl_count[8]++; + } + gen_codes(static_ltree, L_CODES + 1, bl_count); + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1] = 5; + static_dtree[n * 2] = bi_reverse(n, 5); + } + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + } + function init_block(s) { + var n; + for (n = 0; n < L_CODES; n++) { + s.dyn_ltree[n * 2] = 0; + } + for (n = 0; n < D_CODES; n++) { + s.dyn_dtree[n * 2] = 0; + } + for (n = 0; n < BL_CODES; n++) { + s.bl_tree[n * 2] = 0; + } + s.dyn_ltree[END_BLOCK * 2] = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; + } + function bi_windup(s) { + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; + } + function copy_block(s, buf, len, header) { + bi_windup(s); + if (header) { + put_short(s, len); + put_short(s, ~len); + } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; + } + function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m]; + } + function pqdownheap(s, tree, k) { + var v = s.heap[k]; + var j = k << 1; + while (j <= s.heap_len) { + if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + if (smaller(tree, v, s.heap[j], s.depth)) { + break; + } + s.heap[k] = s.heap[j]; + k = j; + j <<= 1; + } + s.heap[k] = v; + } + function compress_block(s, ltree, dtree) { + var dist; + var lc; + var lx = 0; + var code; + var extra; + if (s.last_lit !== 0) { + do { + dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1]; + lc = s.pending_buf[s.l_buf + lx]; + lx++; + if (dist === 0) { + send_code(s, lc, ltree); + } else { + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); + } + dist--; + code = d_code(dist); + send_code(s, code, dtree); + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); + } + } + } while (lx < s.last_lit); + } + send_code(s, END_BLOCK, ltree); + } + function build_tree(s, desc) { + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; + var max_code = -1; + var node; + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + for (n = 0; n < elems; n++) { + if (tree[n * 2] !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + } else { + tree[n * 2 + 1] = 0; + } + } + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0; + tree[node * 2] = 1; + s.depth[node] = 0; + s.opt_len--; + if (has_stree) { + s.static_len -= stree[node * 2 + 1]; + } + } + desc.max_code = max_code; + for (n = s.heap_len >> 1; n >= 1; n--) { + pqdownheap(s, tree, n); + } + node = elems; + do { + n = s.heap[ + 1 + /*SMALLEST*/ + ]; + s.heap[ + 1 + /*SMALLEST*/ + ] = s.heap[s.heap_len--]; + pqdownheap( + s, + tree, + 1 + /*SMALLEST*/ + ); + m = s.heap[ + 1 + /*SMALLEST*/ + ]; + s.heap[--s.heap_max] = n; + s.heap[--s.heap_max] = m; + tree[node * 2] = tree[n * 2] + tree[m * 2]; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1] = tree[m * 2 + 1] = node; + s.heap[ + 1 + /*SMALLEST*/ + ] = node++; + pqdownheap( + s, + tree, + 1 + /*SMALLEST*/ + ); + } while (s.heap_len >= 2); + s.heap[--s.heap_max] = s.heap[ + 1 + /*SMALLEST*/ + ]; + gen_bitlen(s, desc); + gen_codes(tree, max_code, s.bl_count); + } + function scan_tree(s, tree, max_code) { + var n; + var prevlen = -1; + var curlen; + var nextlen = tree[0 * 2 + 1]; + var count = 0; + var max_count = 7; + var min_count = 4; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1] = 65535; + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + s.bl_tree[curlen * 2] += count; + } else if (curlen !== 0) { + if (curlen !== prevlen) { + s.bl_tree[curlen * 2]++; + } + s.bl_tree[REP_3_6 * 2]++; + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]++; + } else { + s.bl_tree[REPZ_11_138 * 2]++; + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + function send_tree(s, tree, max_code) { + var n; + var prevlen = -1; + var curlen; + var nextlen = tree[0 * 2 + 1]; + var count = 0; + var max_count = 7; + var min_count = 4; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + do { + send_code(s, curlen, s.bl_tree); + } while (--count !== 0); + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + function build_bl_tree(s) { + var max_blindex; + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + build_tree(s, s.bl_desc); + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) { + break; + } + } + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + return max_blindex; + } + function send_all_trees(s, lcodes, dcodes, blcodes) { + var rank; + send_bits(s, lcodes - 257, 5); + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); + for (rank = 0; rank < blcodes; rank++) { + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3); + } + send_tree(s, s.dyn_ltree, lcodes - 1); + send_tree(s, s.dyn_dtree, dcodes - 1); + } + function detect_data_type(s) { + var black_mask = 4093624447; + var n; + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if (black_mask & 1 && s.dyn_ltree[n * 2] !== 0) { + return Z_BINARY; + } + } + if (s.dyn_ltree[9 * 2] !== 0 || s.dyn_ltree[10 * 2] !== 0 || s.dyn_ltree[13 * 2] !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2] !== 0) { + return Z_TEXT; + } + } + return Z_BINARY; + } + var static_init_done = false; + function _tr_init(s) { + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + s.bi_buf = 0; + s.bi_valid = 0; + init_block(s); + } + function _tr_stored_block(s, buf, stored_len, last2) { + send_bits(s, (STORED_BLOCK << 1) + (last2 ? 1 : 0), 3); + copy_block(s, buf, stored_len, true); + } + function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); + } + function _tr_flush_block(s, buf, stored_len, last2) { + var opt_lenb, static_lenb; + var max_blindex = 0; + if (s.level > 0) { + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + build_tree(s, s.l_desc); + build_tree(s, s.d_desc); + max_blindex = build_bl_tree(s); + opt_lenb = s.opt_len + 3 + 7 >>> 3; + static_lenb = s.static_len + 3 + 7 >>> 3; + if (static_lenb <= opt_lenb) { + opt_lenb = static_lenb; + } + } else { + opt_lenb = static_lenb = stored_len + 5; + } + if (stored_len + 4 <= opt_lenb && buf !== -1) { + _tr_stored_block(s, buf, stored_len, last2); + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + send_bits(s, (STATIC_TREES << 1) + (last2 ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + } else { + send_bits(s, (DYN_TREES << 1) + (last2 ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + init_block(s); + if (last2) { + bi_windup(s); + } + } + function _tr_tally(s, dist, lc) { + s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 255; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 255; + s.pending_buf[s.l_buf + s.last_lit] = lc & 255; + s.last_lit++; + if (dist === 0) { + s.dyn_ltree[lc * 2]++; + } else { + s.matches++; + dist--; + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++; + s.dyn_dtree[d_code(dist) * 2]++; + } + return s.last_lit === s.lit_bufsize - 1; + } + exports2._tr_init = _tr_init; + exports2._tr_stored_block = _tr_stored_block; + exports2._tr_flush_block = _tr_flush_block; + exports2._tr_tally = _tr_tally; + exports2._tr_align = _tr_align; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js +var require_adler32 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + function adler32(adler, buf, len, pos) { + var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0; + while (len !== 0) { + n = len > 2e3 ? 2e3 : len; + len -= n; + do { + s1 = s1 + buf[pos++] | 0; + s2 = s2 + s1 | 0; + } while (--n); + s1 %= 65521; + s2 %= 65521; + } + return s1 | s2 << 16 | 0; + } + module2.exports = adler32; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js +var require_crc322 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + function makeTable() { + var c, table = []; + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1; + } + table[n] = c; + } + return table; + } + var crcTable = makeTable(); + function crc322(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + crc ^= -1; + for (var i = pos; i < end; i++) { + crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255]; + } + return crc ^ -1; + } + module2.exports = crc322; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js +var require_messages = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = { + 2: "need dictionary", + /* Z_NEED_DICT 2 */ + 1: "stream end", + /* Z_STREAM_END 1 */ + 0: "", + /* Z_OK 0 */ + "-1": "file error", + /* Z_ERRNO (-1) */ + "-2": "stream error", + /* Z_STREAM_ERROR (-2) */ + "-3": "data error", + /* Z_DATA_ERROR (-3) */ + "-4": "insufficient memory", + /* Z_MEM_ERROR (-4) */ + "-5": "buffer error", + /* Z_BUF_ERROR (-5) */ + "-6": "incompatible version" + /* Z_VERSION_ERROR (-6) */ + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js +var require_deflate = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var utils = require_common(); + var trees = require_trees(); + var adler32 = require_adler32(); + var crc322 = require_crc322(); + var msg = require_messages(); + var Z_NO_FLUSH = 0; + var Z_PARTIAL_FLUSH = 1; + var Z_FULL_FLUSH = 3; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_BUF_ERROR = -5; + var Z_DEFAULT_COMPRESSION = -1; + var Z_FILTERED = 1; + var Z_HUFFMAN_ONLY = 2; + var Z_RLE = 3; + var Z_FIXED = 4; + var Z_DEFAULT_STRATEGY = 0; + var Z_UNKNOWN = 2; + var Z_DEFLATED = 8; + var MAX_MEM_LEVEL = 9; + var MAX_WBITS = 15; + var DEF_MEM_LEVEL = 8; + var LENGTH_CODES = 29; + var LITERALS = 256; + var L_CODES = LITERALS + 1 + LENGTH_CODES; + var D_CODES = 30; + var BL_CODES = 19; + var HEAP_SIZE = 2 * L_CODES + 1; + var MAX_BITS = 15; + var MIN_MATCH = 3; + var MAX_MATCH = 258; + var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; + var PRESET_DICT = 32; + var INIT_STATE = 42; + var EXTRA_STATE = 69; + var NAME_STATE = 73; + var COMMENT_STATE = 91; + var HCRC_STATE = 103; + var BUSY_STATE = 113; + var FINISH_STATE = 666; + var BS_NEED_MORE = 1; + var BS_BLOCK_DONE = 2; + var BS_FINISH_STARTED = 3; + var BS_FINISH_DONE = 4; + var OS_CODE = 3; + function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; + } + function rank(f) { + return (f << 1) - (f > 4 ? 9 : 0); + } + function zero(buf) { + var len = buf.length; + while (--len >= 0) { + buf[len] = 0; + } + } + function flush_pending(strm) { + var s = strm.state; + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { + return; + } + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } + } + function flush_block_only(s, last2) { + trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last2); + s.block_start = s.strstart; + flush_pending(s.strm); + } + function put_byte(s, b) { + s.pending_buf[s.pending++] = b; + } + function putShortMSB(s, b) { + s.pending_buf[s.pending++] = b >>> 8 & 255; + s.pending_buf[s.pending++] = b & 255; + } + function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + if (len > size) { + len = size; + } + if (len === 0) { + return 0; + } + strm.avail_in -= len; + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } else if (strm.state.wrap === 2) { + strm.adler = crc322(strm.adler, buf, len, start); + } + strm.next_in += len; + strm.total_in += len; + return len; + } + function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; + var scan = s.strstart; + var match; + var len; + var best_len = s.prev_length; + var nice_match = s.nice_match; + var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0; + var _win = s.window; + var wmask = s.w_mask; + var prev = s.prev; + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + if (nice_match > s.lookahead) { + nice_match = s.lookahead; + } + do { + match = cur_match; + if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) { + continue; + } + scan += 2; + match++; + do { + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; + } + function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + do { + more = s.window_size - s.lookahead - s.strstart; + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + s.block_start -= _w_size; + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = m >= _w_size ? m - _w_size : 0; + } while (--n); + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = m >= _w_size ? m - _w_size : 0; + } while (--n); + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; + while (s.insert) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + } + function deflate_stored(s, flush2) { + var max_block_size = 65535; + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + for (; ; ) { + if (s.lookahead <= 1) { + fill_window(s); + if (s.lookahead === 0 && flush2 === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + s.strstart += s.lookahead; + s.lookahead = 0; + var max_start = s.block_start + max_block_size; + if (s.strstart === 0 || s.strstart >= max_start) { + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush2 === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.strstart > s.block_start) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_NEED_MORE; + } + function deflate_fast(s, flush2) { + var hash_head; + var bflush; + for (; ; ) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush2 === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + if (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { + s.match_length = longest_match(s, hash_head); + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) { + s.match_length--; + do { + s.strstart++; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } while (--s.match_length !== 0); + s.strstart++; + } else { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; + } + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush2 === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_slow(s, flush2) { + var hash_head; + var bflush; + var max_insert; + for (; ; ) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush2 === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + if (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { + s.match_length = longest_match(s, hash_head); + if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) { + s.match_length = MIN_MATCH - 1; + } + } + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } else if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + if (bflush) { + flush_block_only(s, false); + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush2 === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_rle(s, flush2) { + var bflush; + var prev; + var scan, strend; + var _win = s.window; + for (; ; ) { + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush2 === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush2 === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_huff(s, flush2) { + var bflush; + for (; ; ) { + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush2 === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; + } + } + s.match_length = 0; + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush2 === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; + } + var configuration_table; + configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), + /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), + /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), + /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), + /* 3 */ + new Config(4, 4, 16, 16, deflate_slow), + /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), + /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), + /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), + /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), + /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) + /* 9 max compression */ + ]; + function lm_init(s) { + s.window_size = 2 * s.w_size; + zero(s.head); + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; + } + function DeflateState() { + this.strm = null; + this.status = 0; + this.pending_buf = null; + this.pending_buf_size = 0; + this.pending_out = 0; + this.pending = 0; + this.wrap = 0; + this.gzhead = null; + this.gzindex = 0; + this.method = Z_DEFLATED; + this.last_flush = -1; + this.w_size = 0; + this.w_bits = 0; + this.w_mask = 0; + this.window = null; + this.window_size = 0; + this.prev = null; + this.head = null; + this.ins_h = 0; + this.hash_size = 0; + this.hash_bits = 0; + this.hash_mask = 0; + this.hash_shift = 0; + this.block_start = 0; + this.match_length = 0; + this.prev_match = 0; + this.match_available = 0; + this.strstart = 0; + this.match_start = 0; + this.lookahead = 0; + this.prev_length = 0; + this.max_chain_length = 0; + this.max_lazy_match = 0; + this.level = 0; + this.strategy = 0; + this.good_match = 0; + this.nice_match = 0; + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + this.l_desc = null; + this.d_desc = null; + this.bl_desc = null; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + this.heap = new utils.Buf16(2 * L_CODES + 1); + zero(this.heap); + this.heap_len = 0; + this.heap_max = 0; + this.depth = new utils.Buf16(2 * L_CODES + 1); + zero(this.depth); + this.l_buf = 0; + this.lit_bufsize = 0; + this.last_lit = 0; + this.d_buf = 0; + this.opt_len = 0; + this.static_len = 0; + this.matches = 0; + this.insert = 0; + this.bi_buf = 0; + this.bi_valid = 0; + } + function deflateResetKeep(strm) { + var s; + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + s = strm.state; + s.pending = 0; + s.pending_out = 0; + if (s.wrap < 0) { + s.wrap = -s.wrap; + } + s.status = s.wrap ? INIT_STATE : BUSY_STATE; + strm.adler = s.wrap === 2 ? 0 : 1; + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; + } + function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; + } + function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + if (strm.state.wrap !== 2) { + return Z_STREAM_ERROR; + } + strm.state.gzhead = head; + return Z_OK; + } + function deflateInit2(strm, level, method2, windowBits, memLevel, strategy) { + if (!strm) { + return Z_STREAM_ERROR; + } + var wrap = 1; + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else if (windowBits > 15) { + wrap = 2; + windowBits -= 16; + } + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method2 !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + if (windowBits === 8) { + windowBits = 9; + } + var s = new DeflateState(); + strm.state = s; + s.strm = strm; + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + s.lit_bufsize = 1 << memLevel + 6; + s.pending_buf_size = s.lit_bufsize * 4; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + s.d_buf = 1 * s.lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + s.level = level; + s.strategy = strategy; + s.method = method2; + return deflateReset(strm); + } + function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + } + function deflate2(strm, flush2) { + var old_flush, s; + var beg, val; + if (!strm || !strm.state || flush2 > Z_BLOCK || flush2 < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + s = strm.state; + if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush2 !== Z_FINISH) { + return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + s.strm = strm; + old_flush = s.last_flush; + s.last_flush = flush2; + if (s.status === INIT_STATE) { + if (s.wrap === 2) { + strm.adler = 0; + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } else { + put_byte( + s, + (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 255); + put_byte(s, s.gzhead.time >> 8 & 255); + put_byte(s, s.gzhead.time >> 16 & 255); + put_byte(s, s.gzhead.time >> 24 & 255); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, s.gzhead.os & 255); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 255); + put_byte(s, s.gzhead.extra.length >> 8 & 255); + } + if (s.gzhead.hcrc) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } else { + var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8; + var level_flags = -1; + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= level_flags << 6; + if (s.strstart !== 0) { + header |= PRESET_DICT; + } + header += 31 - header % 31; + s.status = BUSY_STATE; + putShortMSB(s, header); + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 65535); + } + strm.adler = 1; + } + } + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra) { + beg = s.pending; + while (s.gzindex < (s.gzhead.extra.length & 65535)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 255); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name) { + beg = s.pending; + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 255; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment) { + beg = s.pending; + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 255); + put_byte(s, strm.adler >> 8 & 255); + strm.adler = 0; + s.status = BUSY_STATE; + } + } else { + s.status = BUSY_STATE; + } + } + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; + return Z_OK; + } + } else if (strm.avail_in === 0 && rank(flush2) <= rank(old_flush) && flush2 !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + if (strm.avail_in !== 0 || s.lookahead !== 0 || flush2 !== Z_NO_FLUSH && s.status !== FINISH_STATE) { + var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush2) : s.strategy === Z_RLE ? deflate_rle(s, flush2) : configuration_table[s.level].func(s, flush2); + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + } + return Z_OK; + } + if (bstate === BS_BLOCK_DONE) { + if (flush2 === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } else if (flush2 !== Z_BLOCK) { + trees._tr_stored_block(s, 0, 0, false); + if (flush2 === Z_FULL_FLUSH) { + zero(s.head); + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; + return Z_OK; + } + } + } + if (flush2 !== Z_FINISH) { + return Z_OK; + } + if (s.wrap <= 0) { + return Z_STREAM_END; + } + if (s.wrap === 2) { + put_byte(s, strm.adler & 255); + put_byte(s, strm.adler >> 8 & 255); + put_byte(s, strm.adler >> 16 & 255); + put_byte(s, strm.adler >> 24 & 255); + put_byte(s, strm.total_in & 255); + put_byte(s, strm.total_in >> 8 & 255); + put_byte(s, strm.total_in >> 16 & 255); + put_byte(s, strm.total_in >> 24 & 255); + } else { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 65535); + } + flush_pending(strm); + if (s.wrap > 0) { + s.wrap = -s.wrap; + } + return s.pending !== 0 ? Z_OK : Z_STREAM_END; + } + function deflateEnd(strm) { + var status2; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + status2 = strm.state.status; + if (status2 !== INIT_STATE && status2 !== EXTRA_STATE && status2 !== NAME_STATE && status2 !== COMMENT_STATE && status2 !== HCRC_STATE && status2 !== BUSY_STATE && status2 !== FINISH_STATE) { + return err(strm, Z_STREAM_ERROR); + } + strm.state = null; + return status2 === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; + } + function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + s = strm.state; + wrap = s.wrap; + if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) { + return Z_STREAM_ERROR; + } + if (wrap === 1) { + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + s.wrap = 0; + if (dictLength >= s.w_size) { + if (wrap === 0) { + zero(s.head); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; + } + exports2.deflateInit = deflateInit; + exports2.deflateInit2 = deflateInit2; + exports2.deflateReset = deflateReset; + exports2.deflateResetKeep = deflateResetKeep; + exports2.deflateSetHeader = deflateSetHeader; + exports2.deflate = deflate2; + exports2.deflateEnd = deflateEnd; + exports2.deflateSetDictionary = deflateSetDictionary; + exports2.deflateInfo = "pako deflate (from Nodeca project)"; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js +var require_strings = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var utils = require_common(); + var STR_APPLY_OK = true; + var STR_APPLY_UIA_OK = true; + try { + String.fromCharCode.apply(null, [0]); + } catch (__) { + STR_APPLY_OK = false; + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)); + } catch (__) { + STR_APPLY_UIA_OK = false; + } + var _utf8len = new utils.Buf8(256); + for (q = 0; q < 256; q++) { + _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; + } + var q; + _utf8len[254] = _utf8len[254] = 1; + exports2.string2buf = function(str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 64512) === 55296 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 64512) === 56320) { + c = 65536 + (c - 55296 << 10) + (c2 - 56320); + m_pos++; + } + } + buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4; + } + buf = new utils.Buf8(buf_len); + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 64512) === 55296 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 64512) === 56320) { + c = 65536 + (c - 55296 << 10) + (c2 - 56320); + m_pos++; + } + } + if (c < 128) { + buf[i++] = c; + } else if (c < 2048) { + buf[i++] = 192 | c >>> 6; + buf[i++] = 128 | c & 63; + } else if (c < 65536) { + buf[i++] = 224 | c >>> 12; + buf[i++] = 128 | c >>> 6 & 63; + buf[i++] = 128 | c & 63; + } else { + buf[i++] = 240 | c >>> 18; + buf[i++] = 128 | c >>> 12 & 63; + buf[i++] = 128 | c >>> 6 & 63; + buf[i++] = 128 | c & 63; + } + } + return buf; + }; + function buf2binstring(buf, len) { + if (len < 65534) { + if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + var result = ""; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; + } + exports2.buf2binstring = function(buf) { + return buf2binstring(buf, buf.length); + }; + exports2.binstring2buf = function(str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; + }; + exports2.buf2string = function(buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + var utf16buf = new Array(len * 2); + for (out = 0, i = 0; i < len; ) { + c = buf[i++]; + if (c < 128) { + utf16buf[out++] = c; + continue; + } + c_len = _utf8len[c]; + if (c_len > 4) { + utf16buf[out++] = 65533; + i += c_len - 1; + continue; + } + c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; + while (c_len > 1 && i < len) { + c = c << 6 | buf[i++] & 63; + c_len--; + } + if (c_len > 1) { + utf16buf[out++] = 65533; + continue; + } + if (c < 65536) { + utf16buf[out++] = c; + } else { + c -= 65536; + utf16buf[out++] = 55296 | c >> 10 & 1023; + utf16buf[out++] = 56320 | c & 1023; + } + } + return buf2binstring(utf16buf, out); + }; + exports2.utf8border = function(buf, max) { + var pos; + max = max || buf.length; + if (max > buf.length) { + max = buf.length; + } + pos = max - 1; + while (pos >= 0 && (buf[pos] & 192) === 128) { + pos--; + } + if (pos < 0) { + return max; + } + if (pos === 0) { + return max; + } + return pos + _utf8len[buf[pos]] > max ? pos : max; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js +var require_zstream = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + function ZStream() { + this.input = null; + this.next_in = 0; + this.avail_in = 0; + this.total_in = 0; + this.output = null; + this.next_out = 0; + this.avail_out = 0; + this.total_out = 0; + this.msg = ""; + this.state = null; + this.data_type = 2; + this.adler = 0; + } + module2.exports = ZStream; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js +var require_deflate2 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var zlib_deflate = require_deflate(); + var utils = require_common(); + var strings = require_strings(); + var msg = require_messages(); + var ZStream = require_zstream(); + var toString = Object.prototype.toString; + var Z_NO_FLUSH = 0; + var Z_FINISH = 4; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_SYNC_FLUSH = 2; + var Z_DEFAULT_COMPRESSION = -1; + var Z_DEFAULT_STRATEGY = 0; + var Z_DEFLATED = 8; + function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: "" + }, options || {}); + var opt = this.options; + if (opt.raw && opt.windowBits > 0) { + opt.windowBits = -opt.windowBits; + } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) { + opt.windowBits += 16; + } + this.err = 0; + this.msg = ""; + this.ended = false; + this.chunks = []; + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status2 = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + if (status2 !== Z_OK) { + throw new Error(msg[status2]); + } + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + if (opt.dictionary) { + var dict; + if (typeof opt.dictionary === "string") { + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + status2 = zlib_deflate.deflateSetDictionary(this.strm, dict); + if (status2 !== Z_OK) { + throw new Error(msg[status2]); + } + this._dict_set = true; + } + } + Deflate.prototype.push = function(data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status2, _mode; + if (this.ended) { + return false; + } + _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; + if (typeof data === "string") { + strm.input = strings.string2buf(data); + } else if (toString.call(data) === "[object ArrayBuffer]") { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + strm.next_in = 0; + strm.avail_in = strm.input.length; + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status2 = zlib_deflate.deflate(strm, _mode); + if (status2 !== Z_STREAM_END && status2 !== Z_OK) { + this.onEnd(status2); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) { + if (this.options.to === "string") { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status2 !== Z_STREAM_END); + if (_mode === Z_FINISH) { + status2 = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status2); + this.ended = true; + return status2 === Z_OK; + } + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + return true; + }; + Deflate.prototype.onData = function(chunk) { + this.chunks.push(chunk); + }; + Deflate.prototype.onEnd = function(status2) { + if (status2 === Z_OK) { + if (this.options.to === "string") { + this.result = this.chunks.join(""); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status2; + this.msg = this.strm.msg; + }; + function deflate2(input, options) { + var deflator = new Deflate(options); + deflator.push(input, true); + if (deflator.err) { + throw deflator.msg || msg[deflator.err]; + } + return deflator.result; + } + function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate2(input, options); + } + function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate2(input, options); + } + exports2.Deflate = Deflate; + exports2.deflate = deflate2; + exports2.deflateRaw = deflateRaw; + exports2.gzip = gzip; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js +var require_inffast = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var BAD = 30; + var TYPE = 12; + module2.exports = function inflate_fast(strm, start) { + var state; + var _in; + var last2; + var _out; + var beg; + var end; + var dmax; + var wsize; + var whave; + var wnext; + var s_window; + var hold; + var bits; + var lcode; + var dcode; + var lmask; + var dmask; + var here; + var op; + var len; + var dist; + var from; + var from_source; + var input, output; + state = strm.state; + _in = strm.next_in; + input = strm.input; + last2 = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); + dmax = state.dmax; + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: + for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op === 0) { + output[_out++] = here & 65535; + } else if (op & 16) { + len = here & 65535; + op &= 15; + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & (1 << op) - 1; + hold >>>= op; + bits -= op; + } + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: + for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op & 16) { + dist = here & 65535; + op &= 15; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & (1 << op) - 1; + if (dist > dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + hold >>>= op; + bits -= op; + op = _out - beg; + if (dist > op) { + op = dist - op; + if (op > whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + } + from = 0; + from_source = s_window; + if (wnext === 0) { + from += wsize - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } else if (wnext < op) { + from += wsize + wnext - op; + op -= wnext; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + } else { + from += wnext - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } else { + from = _out - dist; + do { + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } else if ((op & 64) === 0) { + here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dodist; + } else { + strm.msg = "invalid distance code"; + state.mode = BAD; + break top; + } + break; + } + } else if ((op & 64) === 0) { + here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dolen; + } else if (op & 32) { + state.mode = TYPE; + break top; + } else { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break top; + } + break; + } + } while (_in < last2 && _out < end); + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = _in < last2 ? 5 + (last2 - _in) : 5 - (_in - last2); + strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); + state.hold = hold; + state.bits = bits; + return; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js +var require_inftrees = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var utils = require_common(); + var MAXBITS = 15; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var lbase = [ + /* Length codes 257..285 base */ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 13, + 15, + 17, + 19, + 23, + 27, + 31, + 35, + 43, + 51, + 59, + 67, + 83, + 99, + 115, + 131, + 163, + 195, + 227, + 258, + 0, + 0 + ]; + var lext = [ + /* Length codes 257..285 extra */ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 20, + 20, + 20, + 20, + 21, + 21, + 21, + 21, + 16, + 72, + 78 + ]; + var dbase = [ + /* Distance codes 0..29 base */ + 1, + 2, + 3, + 4, + 5, + 7, + 9, + 13, + 17, + 25, + 33, + 49, + 65, + 97, + 129, + 193, + 257, + 385, + 513, + 769, + 1025, + 1537, + 2049, + 3073, + 4097, + 6145, + 8193, + 12289, + 16385, + 24577, + 0, + 0 + ]; + var dext = [ + /* Distance codes 0..29 extra */ + 16, + 16, + 16, + 16, + 17, + 17, + 18, + 18, + 19, + 19, + 20, + 20, + 21, + 21, + 22, + 22, + 23, + 23, + 24, + 24, + 25, + 25, + 26, + 26, + 27, + 27, + 28, + 28, + 29, + 29, + 64, + 64 + ]; + module2.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { + var bits = opts.bits; + var len = 0; + var sym = 0; + var min = 0, max = 0; + var root2 = 0; + var curr = 0; + var drop = 0; + var left = 0; + var used = 0; + var huff = 0; + var incr; + var fill; + var low; + var mask; + var next; + var base = null; + var base_index = 0; + var end; + var count = new utils.Buf16(MAXBITS + 1); + var offs = new utils.Buf16(MAXBITS + 1); + var extra = null; + var extra_index = 0; + var here_bits, here_op, here_val; + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + root2 = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { + break; + } + } + if (root2 > max) { + root2 = max; + } + if (max === 0) { + table[table_index++] = 1 << 24 | 64 << 16 | 0; + table[table_index++] = 1 << 24 | 64 << 16 | 0; + opts.bits = 1; + return 0; + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { + break; + } + } + if (root2 < min) { + root2 = min; + } + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; + } + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + if (type === CODES) { + base = extra = work; + end = 19; + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + } else { + base = dbase; + extra = dext; + end = -1; + } + huff = 0; + sym = 0; + len = min; + next = table_index; + curr = root2; + drop = 0; + low = -1; + used = 1 << root2; + mask = used - 1; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + for (; ; ) { + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } else { + here_op = 32 + 64; + here_val = 0; + } + incr = 1 << len - drop; + fill = 1 << curr; + min = fill; + do { + fill -= incr; + table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; + } while (fill !== 0); + incr = 1 << len - 1; + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + sym++; + if (--count[len] === 0) { + if (len === max) { + break; + } + len = lens[lens_index + work[sym]]; + } + if (len > root2 && (huff & mask) !== low) { + if (drop === 0) { + drop = root2; + } + next += min; + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { + break; + } + curr++; + left <<= 1; + } + used += 1 << curr; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + low = huff & mask; + table[low] = root2 << 24 | curr << 16 | next - table_index | 0; + } + } + if (huff !== 0) { + table[next + huff] = len - drop << 24 | 64 << 16 | 0; + } + opts.bits = root2; + return 0; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js +var require_inflate = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var utils = require_common(); + var adler32 = require_adler32(); + var crc322 = require_crc322(); + var inflate_fast = require_inffast(); + var inflate_table = require_inftrees(); + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_TREES = 6; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_MEM_ERROR = -4; + var Z_BUF_ERROR = -5; + var Z_DEFLATED = 8; + var HEAD = 1; + var FLAGS = 2; + var TIME = 3; + var OS = 4; + var EXLEN = 5; + var EXTRA2 = 6; + var NAME = 7; + var COMMENT = 8; + var HCRC = 9; + var DICTID = 10; + var DICT = 11; + var TYPE = 12; + var TYPEDO = 13; + var STORED = 14; + var COPY_ = 15; + var COPY = 16; + var TABLE = 17; + var LENLENS = 18; + var CODELENS = 19; + var LEN_ = 20; + var LEN = 21; + var LENEXT = 22; + var DIST = 23; + var DISTEXT = 24; + var MATCH = 25; + var LIT = 26; + var CHECK = 27; + var LENGTH = 28; + var DONE = 29; + var BAD = 30; + var MEM = 31; + var SYNC = 32; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var MAX_WBITS = 15; + var DEF_WBITS = MAX_WBITS; + function zswap32(q) { + return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); + } + function InflateState() { + this.mode = 0; + this.last = false; + this.wrap = 0; + this.havedict = false; + this.flags = 0; + this.dmax = 0; + this.check = 0; + this.total = 0; + this.head = null; + this.wbits = 0; + this.wsize = 0; + this.whave = 0; + this.wnext = 0; + this.window = null; + this.hold = 0; + this.bits = 0; + this.length = 0; + this.offset = 0; + this.extra = 0; + this.lencode = null; + this.distcode = null; + this.lenbits = 0; + this.distbits = 0; + this.ncode = 0; + this.nlen = 0; + this.ndist = 0; + this.have = 0; + this.next = null; + this.lens = new utils.Buf16(320); + this.work = new utils.Buf16(288); + this.lendyn = null; + this.distdyn = null; + this.sane = 0; + this.back = 0; + this.was = 0; + } + function inflateResetKeep(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ""; + if (state.wrap) { + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null; + state.hold = 0; + state.bits = 0; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + state.sane = 1; + state.back = -1; + return Z_OK; + } + function inflateReset(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + } + function inflateReset2(strm, windowBits) { + var wrap; + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); + } + function inflateInit2(strm, windowBits) { + var ret; + var state; + if (!strm) { + return Z_STREAM_ERROR; + } + state = new InflateState(); + strm.state = state; + state.window = null; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null; + } + return ret; + } + function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); + } + var virgin = true; + var lenfix; + var distfix; + function fixedtables(state) { + if (virgin) { + var sym; + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + sym = 0; + while (sym < 144) { + state.lens[sym++] = 8; + } + while (sym < 256) { + state.lens[sym++] = 9; + } + while (sym < 280) { + state.lens[sym++] = 7; + } + while (sym < 288) { + state.lens[sym++] = 8; + } + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + sym = 0; + while (sym < 32) { + state.lens[sym++] = 5; + } + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + virgin = false; + } + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; + } + function updatewindow(strm, src, end, copy2) { + var dist; + var state = strm.state; + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + state.window = new utils.Buf8(state.wsize); + } + if (copy2 >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } else { + dist = state.wsize - state.wnext; + if (dist > copy2) { + dist = copy2; + } + utils.arraySet(state.window, src, end - copy2, dist, state.wnext); + copy2 -= dist; + if (copy2) { + utils.arraySet(state.window, src, end - copy2, copy2, 0); + state.wnext = copy2; + state.whave = state.wsize; + } else { + state.wnext += dist; + if (state.wnext === state.wsize) { + state.wnext = 0; + } + if (state.whave < state.wsize) { + state.whave += dist; + } + } + } + return 0; + } + function inflate2(strm, flush2) { + var state; + var input, output; + var next; + var put; + var have, left; + var hold; + var bits; + var _in, _out; + var copy2; + var from; + var from_source; + var here = 0; + var here_bits, here_op, here_val; + var last_bits, last_op, last_val; + var len; + var ret; + var hbuf = new utils.Buf8(4); + var opts; + var n; + var order = ( + /* permutation of code lengths */ + [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15] + ); + if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.mode === TYPE) { + state.mode = TYPEDO; + } + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + _in = have; + _out = left; + ret = Z_OK; + inf_leave: + for (; ; ) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.wrap & 2 && hold === 35615) { + state.check = 0; + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc322(state.check, hbuf, 2, 0); + hold = 0; + bits = 0; + state.mode = FLAGS; + break; + } + state.flags = 0; + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 255) << 8) + (hold >> 8)) % 31) { + strm.msg = "incorrect header check"; + state.mode = BAD; + break; + } + if ((hold & 15) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + hold >>>= 4; + bits -= 4; + len = (hold & 15) + 8; + if (state.wbits === 0) { + state.wbits = len; + } else if (len > state.wbits) { + strm.msg = "invalid window size"; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + strm.adler = state.check = 1; + state.mode = hold & 512 ? DICTID : TYPE; + hold = 0; + bits = 0; + break; + case FLAGS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.flags = hold; + if ((state.flags & 255) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + if (state.flags & 57344) { + strm.msg = "unknown header flags set"; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = hold >> 8 & 1; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc322(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + state.mode = TIME; + case TIME: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.time = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + hbuf[2] = hold >>> 16 & 255; + hbuf[3] = hold >>> 24 & 255; + state.check = crc322(state.check, hbuf, 4, 0); + } + hold = 0; + bits = 0; + state.mode = OS; + case OS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.xflags = hold & 255; + state.head.os = hold >> 8; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc322(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + state.mode = EXLEN; + case EXLEN: + if (state.flags & 1024) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc322(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + } else if (state.head) { + state.head.extra = null; + } + state.mode = EXTRA2; + case EXTRA2: + if (state.flags & 1024) { + copy2 = state.length; + if (copy2 > have) { + copy2 = have; + } + if (copy2) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy2, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + } + if (state.flags & 512) { + state.check = crc322(state.check, input, copy2, next); + } + have -= copy2; + next += copy2; + state.length -= copy2; + } + if (state.length) { + break inf_leave; + } + } + state.length = 0; + state.mode = NAME; + case NAME: + if (state.flags & 2048) { + if (have === 0) { + break inf_leave; + } + copy2 = 0; + do { + len = input[next + copy2++]; + if (state.head && len && state.length < 65536) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy2 < have); + if (state.flags & 512) { + state.check = crc322(state.check, input, copy2, next); + } + have -= copy2; + next += copy2; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + case COMMENT: + if (state.flags & 4096) { + if (have === 0) { + break inf_leave; + } + copy2 = 0; + do { + len = input[next + copy2++]; + if (state.head && len && state.length < 65536) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy2 < have); + if (state.flags & 512) { + state.check = crc322(state.check, input, copy2, next); + } + have -= copy2; + next += copy2; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + case HCRC: + if (state.flags & 512) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.check & 65535)) { + strm.msg = "header crc mismatch"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + if (state.head) { + state.head.hcrc = state.flags >> 9 & 1; + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + strm.adler = state.check = zswap32(hold); + hold = 0; + bits = 0; + state.mode = DICT; + case DICT: + if (state.havedict === 0) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + return Z_NEED_DICT; + } + strm.adler = state.check = 1; + state.mode = TYPE; + case TYPE: + if (flush2 === Z_BLOCK || flush2 === Z_TREES) { + break inf_leave; + } + case TYPEDO: + if (state.last) { + hold >>>= bits & 7; + bits -= bits & 7; + state.mode = CHECK; + break; + } + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.last = hold & 1; + hold >>>= 1; + bits -= 1; + switch (hold & 3) { + case 0: + state.mode = STORED; + break; + case 1: + fixedtables(state); + state.mode = LEN_; + if (flush2 === Z_TREES) { + hold >>>= 2; + bits -= 2; + break inf_leave; + } + break; + case 2: + state.mode = TABLE; + break; + case 3: + strm.msg = "invalid block type"; + state.mode = BAD; + } + hold >>>= 2; + bits -= 2; + break; + case STORED: + hold >>>= bits & 7; + bits -= bits & 7; + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { + strm.msg = "invalid stored block lengths"; + state.mode = BAD; + break; + } + state.length = hold & 65535; + hold = 0; + bits = 0; + state.mode = COPY_; + if (flush2 === Z_TREES) { + break inf_leave; + } + case COPY_: + state.mode = COPY; + case COPY: + copy2 = state.length; + if (copy2) { + if (copy2 > have) { + copy2 = have; + } + if (copy2 > left) { + copy2 = left; + } + if (copy2 === 0) { + break inf_leave; + } + utils.arraySet(output, input, next, copy2, put); + have -= copy2; + next += copy2; + left -= copy2; + put += copy2; + state.length -= copy2; + break; + } + state.mode = TYPE; + break; + case TABLE: + while (bits < 14) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.nlen = (hold & 31) + 257; + hold >>>= 5; + bits -= 5; + state.ndist = (hold & 31) + 1; + hold >>>= 5; + bits -= 5; + state.ncode = (hold & 15) + 4; + hold >>>= 4; + bits -= 4; + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = "too many length or distance symbols"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = LENLENS; + case LENLENS: + while (state.have < state.ncode) { + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.lens[order[state.have++]] = hold & 7; + hold >>>= 3; + bits -= 3; + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + state.lencode = state.lendyn; + state.lenbits = 7; + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid code lengths set"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = CODELENS; + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_val < 16) { + hold >>>= here_bits; + bits -= here_bits; + state.lens[state.have++] = here_val; + } else { + if (here_val === 16) { + n = here_bits + 2; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + if (state.have === 0) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy2 = 3 + (hold & 3); + hold >>>= 2; + bits -= 2; + } else if (here_val === 17) { + n = here_bits + 3; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy2 = 3 + (hold & 7); + hold >>>= 3; + bits -= 3; + } else { + n = here_bits + 7; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy2 = 11 + (hold & 127); + hold >>>= 7; + bits -= 7; + } + if (state.have + copy2 > state.nlen + state.ndist) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + while (copy2--) { + state.lens[state.have++] = len; + } + } + } + if (state.mode === BAD) { + break; + } + if (state.lens[256] === 0) { + strm.msg = "invalid code -- missing end-of-block"; + state.mode = BAD; + break; + } + state.lenbits = 9; + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid literal/lengths set"; + state.mode = BAD; + break; + } + state.distbits = 6; + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + state.distbits = opts.bits; + if (ret) { + strm.msg = "invalid distances set"; + state.mode = BAD; + break; + } + state.mode = LEN_; + if (flush2 === Z_TREES) { + break inf_leave; + } + case LEN_: + state.mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + inflate_fast(strm, _out); + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_op && (here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + state.mode = LIT; + break; + } + if (here_op & 32) { + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + case LENEXT: + if (state.extra) { + n = state.extra; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + state.was = state.length; + state.mode = DIST; + case DIST: + for (; ; ) { + here = state.distcode[hold & (1 << state.distbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + if (here_op & 64) { + strm.msg = "invalid distance code"; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = here_op & 15; + state.mode = DISTEXT; + case DISTEXT: + if (state.extra) { + n = state.extra; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.offset += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + if (state.offset > state.dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + state.mode = MATCH; + case MATCH: + if (left === 0) { + break inf_leave; + } + copy2 = _out - left; + if (state.offset > copy2) { + copy2 = state.offset - copy2; + if (copy2 > state.whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + } + if (copy2 > state.wnext) { + copy2 -= state.wnext; + from = state.wsize - copy2; + } else { + from = state.wnext - copy2; + } + if (copy2 > state.length) { + copy2 = state.length; + } + from_source = state.window; + } else { + from_source = output; + from = put - state.offset; + copy2 = state.length; + } + if (copy2 > left) { + copy2 = left; + } + left -= copy2; + state.length -= copy2; + do { + output[put++] = from_source[from++]; + } while (--copy2); + if (state.length === 0) { + state.mode = LEN; + } + break; + case LIT: + if (left === 0) { + break inf_leave; + } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold |= input[next++] << bits; + bits += 8; + } + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ + state.flags ? crc322(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out); + } + _out = left; + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = "incorrect data check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = LENGTH; + case LENGTH: + if (state.wrap && state.flags) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.total & 4294967295)) { + strm.msg = "incorrect length check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = DONE; + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + } + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush2 !== Z_FINISH)) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + state.flags ? crc322(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if ((_in === 0 && _out === 0 || flush2 === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; + } + function inflateEnd(strm) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; + } + function inflateGetHeader(strm, head) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if ((state.wrap & 2) === 0) { + return Z_STREAM_ERROR; + } + state.head = head; + head.done = false; + return Z_OK; + } + function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var state; + var dictid; + var ret; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + if (state.mode === DICT) { + dictid = 1; + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + return Z_OK; + } + exports2.inflateReset = inflateReset; + exports2.inflateReset2 = inflateReset2; + exports2.inflateResetKeep = inflateResetKeep; + exports2.inflateInit = inflateInit; + exports2.inflateInit2 = inflateInit2; + exports2.inflate = inflate2; + exports2.inflateEnd = inflateEnd; + exports2.inflateGetHeader = inflateGetHeader; + exports2.inflateSetDictionary = inflateSetDictionary; + exports2.inflateInfo = "pako inflate (from Nodeca project)"; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js +var require_constants = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = { + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js +var require_gzheader = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + function GZheader() { + this.text = 0; + this.time = 0; + this.xflags = 0; + this.os = 0; + this.extra = null; + this.extra_len = 0; + this.name = ""; + this.comment = ""; + this.hcrc = 0; + this.done = false; + } + module2.exports = GZheader; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js +var require_inflate2 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var zlib_inflate = require_inflate(); + var utils = require_common(); + var strings = require_strings(); + var c = require_constants(); + var msg = require_messages(); + var ZStream = require_zstream(); + var GZheader = require_gzheader(); + var toString = Object.prototype.toString; + function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, options || {}); + var opt = this.options; + if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { + opt.windowBits = -15; + } + } + if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { + opt.windowBits += 32; + } + if (opt.windowBits > 15 && opt.windowBits < 48) { + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + this.err = 0; + this.msg = ""; + this.ended = false; + this.chunks = []; + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status2 = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + if (status2 !== c.Z_OK) { + throw new Error(msg[status2]); + } + this.header = new GZheader(); + zlib_inflate.inflateGetHeader(this.strm, this.header); + if (opt.dictionary) { + if (typeof opt.dictionary === "string") { + opt.dictionary = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { + opt.dictionary = new Uint8Array(opt.dictionary); + } + if (opt.raw) { + status2 = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); + if (status2 !== c.Z_OK) { + throw new Error(msg[status2]); + } + } + } + } + Inflate.prototype.push = function(data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status2, _mode; + var next_out_utf8, tail, utf8str; + var allowBufError = false; + if (this.ended) { + return false; + } + _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; + if (typeof data === "string") { + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === "[object ArrayBuffer]") { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + strm.next_in = 0; + strm.avail_in = strm.input.length; + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status2 = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); + if (status2 === c.Z_NEED_DICT && dictionary) { + status2 = zlib_inflate.inflateSetDictionary(this.strm, dictionary); + } + if (status2 === c.Z_BUF_ERROR && allowBufError === true) { + status2 = c.Z_OK; + allowBufError = false; + } + if (status2 !== c.Z_STREAM_END && status2 !== c.Z_OK) { + this.onEnd(status2); + this.ended = true; + return false; + } + if (strm.next_out) { + if (strm.avail_out === 0 || status2 === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) { + if (this.options.to === "string") { + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { + utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); + } + this.onData(utf8str); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status2 !== c.Z_STREAM_END); + if (status2 === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + if (_mode === c.Z_FINISH) { + status2 = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status2); + this.ended = true; + return status2 === c.Z_OK; + } + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + return true; + }; + Inflate.prototype.onData = function(chunk) { + this.chunks.push(chunk); + }; + Inflate.prototype.onEnd = function(status2) { + if (status2 === c.Z_OK) { + if (this.options.to === "string") { + this.result = this.chunks.join(""); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status2; + this.msg = this.strm.msg; + }; + function inflate2(input, options) { + var inflator = new Inflate(options); + inflator.push(input, true); + if (inflator.err) { + throw inflator.msg || msg[inflator.err]; + } + return inflator.result; + } + function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate2(input, options); + } + exports2.Inflate = Inflate; + exports2.inflate = inflate2; + exports2.inflateRaw = inflateRaw; + exports2.ungzip = inflate2; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js +var require_pako = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var assign2 = require_common().assign; + var deflate2 = require_deflate2(); + var inflate2 = require_inflate2(); + var constants = require_constants(); + var pako2 = {}; + assign2(pako2, deflate2, inflate2, constants); + module2.exports = pako2; + } +}); + +// node_modules/.pnpm/pify@4.0.1/node_modules/pify/index.js +var require_pify = __commonJS({ + "node_modules/.pnpm/pify@4.0.1/node_modules/pify/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var processFn = (fn, options) => function(...args) { + const P = options.promiseModule; + return new P((resolve2, reject) => { + if (options.multiArgs) { + args.push((...result) => { + if (options.errorFirst) { + if (result[0]) { + reject(result); + } else { + result.shift(); + resolve2(result); + } + } else { + resolve2(result); + } + }); + } else if (options.errorFirst) { + args.push((error, result) => { + if (error) { + reject(error); + } else { + resolve2(result); + } + }); + } else { + args.push(resolve2); + } + fn.apply(this, args); + }); + }; + module2.exports = (input, options) => { + options = Object.assign({ + exclude: [/.+(Sync|Stream)$/], + errorFirst: true, + promiseModule: Promise + }, options); + const objType = typeof input; + if (!(input !== null && (objType === "object" || objType === "function"))) { + throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${input === null ? "null" : objType}\``); + } + const filter = (key2) => { + const match = (pattern) => typeof pattern === "string" ? key2 === pattern : pattern.test(key2); + return options.include ? options.include.some(match) : !options.exclude.some(match); + }; + let ret; + if (objType === "function") { + ret = function(...args) { + return options.excludeMain ? input(...args) : processFn(input, options).apply(this, args); + }; + } else { + ret = Object.create(Object.getPrototypeOf(input)); + } + for (const key2 in input) { + const property = input[key2]; + ret[key2] = typeof property === "function" && filter(key2) ? processFn(property, options) : property; + } + return ret; + }; + } +}); + +// node_modules/.pnpm/ignore@5.3.1/node_modules/ignore/index.js +var require_ignore = __commonJS({ + "node_modules/.pnpm/ignore@5.3.1/node_modules/ignore/index.js"(exports2, module2) { + init_polyfill_buffer(); + function makeArray(subject) { + return Array.isArray(subject) ? subject : [subject]; + } + var EMPTY = ""; + var SPACE = " "; + var ESCAPE = "\\"; + var REGEX_TEST_BLANK_LINE = /^\s+$/; + var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; + var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; + var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; + var REGEX_SPLITALL_CRLF = /\r?\n/g; + var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; + var SLASH = "/"; + var TMP_KEY_IGNORE = "node-ignore"; + if (typeof Symbol !== "undefined") { + TMP_KEY_IGNORE = Symbol.for("node-ignore"); + } + var KEY_IGNORE = TMP_KEY_IGNORE; + var define2 = (object, key2, value) => Object.defineProperty(object, key2, { value }); + var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; + var RETURN_FALSE = () => false; + var sanitizeRange = (range) => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) ? match : EMPTY + ); + var cleanRangeBackSlash = (slashes) => { + const { length } = slashes; + return slashes.slice(0, length - length % 2); + }; + var REPLACERS = [ + [ + // remove BOM + // TODO: + // Other similar zero-width characters? + /^\uFEFF/, + () => EMPTY + ], + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a \ ) -> (a ) + /\\?\s+$/, + (match) => match.indexOf("\\") === 0 ? SPACE : EMPTY + ], + // replace (\ ) with ' ' + [ + /\\\s/g, + () => SPACE + ], + // Escape metacharacters + // which is written down by users but means special for regular expressions. + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + (match) => `\\${match}` + ], + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => "[^/]" + ], + // leading slash + [ + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => "^" + ], + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => "\\/" + ], + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, + // '**/foo' <-> 'foo' + () => "^(?:.*\\/)?" + ], + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + function startingReplacer() { + return !/\/(?!$)/.test(this) ? "(?:^|\\/)" : "^"; + } + ], + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer + // Check if it is not the last `'/**'` + (_, index2, str) => index2 + 6 < str.length ? "(?:\\/[^\\/]+)*" : "\\/.+" + ], + // normal intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' + // 'abc.*/' -> go + // 'abc.*' -> skip this rule, + // coz trailing single wildcard will be handed by [trailing wildcard] + /(^|[^\\]+)(\\\*)+(?=.+)/g, + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1, p2) => { + const unescaped = p2.replace(/\\\*/g, "[^\\/]*"); + return p1 + unescaped; + } + ], + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` : close === "]" ? endEscape.length % 2 === 0 ? `[${sanitizeRange(range)}${endEscape}]` : "[]" : "[]" + ], + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + (match) => /\/$/.test(match) ? `${match}$` : `${match}(?=$|\\/$)` + ], + // trailing wildcard + [ + /(\^|\\\/)?\\\*$/, + (_, p1) => { + const prefix = p1 ? `${p1}[^/]+` : "[^/]*"; + return `${prefix}(?=$|\\/$)`; + } + ] + ]; + var regexCache = /* @__PURE__ */ Object.create(null); + var makeRegex = (pattern, ignoreCase) => { + let source = regexCache[pattern]; + if (!source) { + source = REPLACERS.reduce( + (prev, current) => prev.replace(current[0], current[1].bind(pattern)), + pattern + ); + regexCache[pattern] = source; + } + return ignoreCase ? new RegExp(source, "i") : new RegExp(source); + }; + var isString = (subject) => typeof subject === "string"; + var checkPattern = (pattern) => pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) && pattern.indexOf("#") !== 0; + var splitPattern = (pattern) => pattern.split(REGEX_SPLITALL_CRLF); + var IgnoreRule = class { + constructor(origin, pattern, negative, regex2) { + this.origin = origin; + this.pattern = pattern; + this.negative = negative; + this.regex = regex2; + } + }; + var createRule = (pattern, ignoreCase) => { + const origin = pattern; + let negative = false; + if (pattern.indexOf("!") === 0) { + negative = true; + pattern = pattern.substr(1); + } + pattern = pattern.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, "!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, "#"); + const regex2 = makeRegex(pattern, ignoreCase); + return new IgnoreRule( + origin, + pattern, + negative, + regex2 + ); + }; + var throwError = (message, Ctor) => { + throw new Ctor(message); + }; + var checkPath = (path2, originalPath, doThrow) => { + if (!isString(path2)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ); + } + if (!path2) { + return doThrow(`path must not be empty`, TypeError); + } + if (checkPath.isNotRelative(path2)) { + const r = "`path.relative()`d"; + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ); + } + return true; + }; + var isNotRelative = (path2) => REGEX_TEST_INVALID_PATH.test(path2); + checkPath.isNotRelative = isNotRelative; + checkPath.convert = (p) => p; + var Ignore = class { + constructor({ + ignorecase = true, + ignoreCase = ignorecase, + allowRelativePaths = false + } = {}) { + define2(this, KEY_IGNORE, true); + this._rules = []; + this._ignoreCase = ignoreCase; + this._allowRelativePaths = allowRelativePaths; + this._initCache(); + } + _initCache() { + this._ignoreCache = /* @__PURE__ */ Object.create(null); + this._testCache = /* @__PURE__ */ Object.create(null); + } + _addPattern(pattern) { + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules); + this._added = true; + return; + } + if (checkPattern(pattern)) { + const rule = createRule(pattern, this._ignoreCase); + this._added = true; + this._rules.push(rule); + } + } + // @param {Array | string | Ignore} pattern + add(pattern) { + this._added = false; + makeArray( + isString(pattern) ? splitPattern(pattern) : pattern + ).forEach(this._addPattern, this); + if (this._added) { + this._initCache(); + } + return this; + } + // legacy + addPattern(pattern) { + return this.add(pattern); + } + // | ignored : unignored + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen + // @param {boolean} whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // @returns {TestResult} true if a file is ignored + _testOne(path2, checkUnignored) { + let ignored = false; + let unignored = false; + this._rules.forEach((rule) => { + const { negative } = rule; + if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { + return; + } + const matched = rule.regex.test(path2); + if (matched) { + ignored = !negative; + unignored = negative; + } + }); + return { + ignored, + unignored + }; + } + // @returns {TestResult} + _test(originalPath, cache, checkUnignored, slices) { + const path2 = originalPath && checkPath.convert(originalPath); + checkPath( + path2, + originalPath, + this._allowRelativePaths ? RETURN_FALSE : throwError + ); + return this._t(path2, cache, checkUnignored, slices); + } + _t(path2, cache, checkUnignored, slices) { + if (path2 in cache) { + return cache[path2]; + } + if (!slices) { + slices = path2.split(SLASH); + } + slices.pop(); + if (!slices.length) { + return cache[path2] = this._testOne(path2, checkUnignored); + } + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ); + return cache[path2] = parent.ignored ? parent : this._testOne(path2, checkUnignored); + } + ignores(path2) { + return this._test(path2, this._ignoreCache, false).ignored; + } + createFilter() { + return (path2) => !this.ignores(path2); + } + filter(paths) { + return makeArray(paths).filter(this.createFilter()); + } + // @returns {TestResult} + test(path2) { + return this._test(path2, this._testCache, true); + } + }; + var factory = (options) => new Ignore(options); + var isPathValid = (path2) => checkPath(path2 && checkPath.convert(path2), path2, RETURN_FALSE); + factory.isPathValid = isPathValid; + factory.default = factory; + module2.exports = factory; + if ( + // Detect `process` so that it can run in browsers. + typeof process !== "undefined" && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === "win32") + ) { + const makePosix = (str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/"); + checkPath.convert = makePosix; + const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; + checkPath.isNotRelative = (path2) => REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path2) || isNotRelative(path2); + } + } +}); + +// node_modules/.pnpm/clean-git-ref@2.0.1/node_modules/clean-git-ref/lib/index.js +var require_lib2 = __commonJS({ + "node_modules/.pnpm/clean-git-ref@2.0.1/node_modules/clean-git-ref/lib/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + } + function replaceAll(str, search, replacement) { + search = search instanceof RegExp ? search : new RegExp(escapeRegExp(search), "g"); + return str.replace(search, replacement); + } + var CleanGitRef = { + clean: function clean(value) { + if (typeof value !== "string") { + throw new Error("Expected a string, received: " + value); + } + value = replaceAll(value, "./", "/"); + value = replaceAll(value, "..", "."); + value = replaceAll(value, " ", "-"); + value = replaceAll(value, /^[~^:?*\\\-]/g, ""); + value = replaceAll(value, /[~^:?*\\]/g, "-"); + value = replaceAll(value, /[~^:?*\\\-]$/g, ""); + value = replaceAll(value, "@{", "-"); + value = replaceAll(value, /\.$/g, ""); + value = replaceAll(value, /\/$/g, ""); + value = replaceAll(value, /\.lock$/g, ""); + return value; + } + }; + module2.exports = CleanGitRef; + } +}); + +// node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/onp.js +var require_onp = __commonJS({ + "node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/onp.js"(exports2, module2) { + init_polyfill_buffer(); + module2.exports = function(a_, b_) { + var a = a_, b = b_, m = a.length, n = b.length, reverse = false, ed = null, offset = m + 1, path2 = [], pathposi = [], ses = [], lcs = "", SES_DELETE = -1, SES_COMMON = 0, SES_ADD = 1; + var tmp1, tmp2; + var init3 = function() { + if (m >= n) { + tmp1 = a; + tmp2 = m; + a = b; + b = tmp1; + m = n; + n = tmp2; + reverse = true; + offset = m + 1; + } + }; + var P = function(x, y, k) { + return { + "x": x, + "y": y, + "k": k + }; + }; + var seselem = function(elem, t) { + return { + "elem": elem, + "t": t + }; + }; + var snake = function(k, p, pp) { + var r, x, y; + if (p > pp) { + r = path2[k - 1 + offset]; + } else { + r = path2[k + 1 + offset]; + } + y = Math.max(p, pp); + x = y - k; + while (x < m && y < n && a[x] === b[y]) { + ++x; + ++y; + } + path2[k + offset] = pathposi.length; + pathposi[pathposi.length] = new P(x, y, r); + return y; + }; + var recordseq = function(epc) { + var x_idx, y_idx, px_idx, py_idx, i; + x_idx = y_idx = 1; + px_idx = py_idx = 0; + for (i = epc.length - 1; i >= 0; --i) { + while (px_idx < epc[i].x || py_idx < epc[i].y) { + if (epc[i].y - epc[i].x > py_idx - px_idx) { + if (reverse) { + ses[ses.length] = new seselem(b[py_idx], SES_DELETE); + } else { + ses[ses.length] = new seselem(b[py_idx], SES_ADD); + } + ++y_idx; + ++py_idx; + } else if (epc[i].y - epc[i].x < py_idx - px_idx) { + if (reverse) { + ses[ses.length] = new seselem(a[px_idx], SES_ADD); + } else { + ses[ses.length] = new seselem(a[px_idx], SES_DELETE); + } + ++x_idx; + ++px_idx; + } else { + ses[ses.length] = new seselem(a[px_idx], SES_COMMON); + lcs += a[px_idx]; + ++x_idx; + ++y_idx; + ++px_idx; + ++py_idx; + } + } + } + }; + init3(); + return { + SES_DELETE: -1, + SES_COMMON: 0, + SES_ADD: 1, + editdistance: function() { + return ed; + }, + getlcs: function() { + return lcs; + }, + getses: function() { + return ses; + }, + compose: function() { + var delta, size, fp, p, r, epc, i, k; + delta = n - m; + size = m + n + 3; + fp = {}; + for (i = 0; i < size; ++i) { + fp[i] = -1; + path2[i] = -1; + } + p = -1; + do { + ++p; + for (k = -p; k <= delta - 1; ++k) { + fp[k + offset] = snake(k, fp[k - 1 + offset] + 1, fp[k + 1 + offset]); + } + for (k = delta + p; k >= delta + 1; --k) { + fp[k + offset] = snake(k, fp[k - 1 + offset] + 1, fp[k + 1 + offset]); + } + fp[delta + offset] = snake(delta, fp[delta - 1 + offset] + 1, fp[delta + 1 + offset]); + } while (fp[delta + offset] !== n); + ed = delta + 2 * p; + r = path2[delta + offset]; + epc = []; + while (r !== -1) { + epc[epc.length] = new P(pathposi[r].x, pathposi[r].y, null); + r = pathposi[r].k; + } + recordseq(epc); + } + }; + }; + } +}); + +// node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/diff3.js +var require_diff3 = __commonJS({ + "node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/diff3.js"(exports2, module2) { + init_polyfill_buffer(); + var onp = require_onp(); + function longestCommonSubsequence(file1, file2) { + var diff3 = new onp(file1, file2); + diff3.compose(); + var ses = diff3.getses(); + var root2; + var prev; + var file1RevIdx = file1.length - 1, file2RevIdx = file2.length - 1; + for (var i = ses.length - 1; i >= 0; --i) { + if (ses[i].t === diff3.SES_COMMON) { + if (prev) { + prev.chain = { + file1index: file1RevIdx, + file2index: file2RevIdx, + chain: null + }; + prev = prev.chain; + } else { + root2 = { + file1index: file1RevIdx, + file2index: file2RevIdx, + chain: null + }; + prev = root2; + } + file1RevIdx--; + file2RevIdx--; + } else if (ses[i].t === diff3.SES_DELETE) { + file1RevIdx--; + } else if (ses[i].t === diff3.SES_ADD) { + file2RevIdx--; + } + } + var tail = { + file1index: -1, + file2index: -1, + chain: null + }; + if (!prev) { + return tail; + } + prev.chain = tail; + return root2; + } + function diffIndices(file1, file2) { + var result = []; + var tail1 = file1.length; + var tail2 = file2.length; + for (var candidate = longestCommonSubsequence(file1, file2); candidate !== null; candidate = candidate.chain) { + var mismatchLength1 = tail1 - candidate.file1index - 1; + var mismatchLength2 = tail2 - candidate.file2index - 1; + tail1 = candidate.file1index; + tail2 = candidate.file2index; + if (mismatchLength1 || mismatchLength2) { + result.push({ + file1: [tail1 + 1, mismatchLength1], + file2: [tail2 + 1, mismatchLength2] + }); + } + } + result.reverse(); + return result; + } + function diff3MergeIndices(a, o, b) { + var i; + var m1 = diffIndices(o, a); + var m2 = diffIndices(o, b); + var hunks = []; + function addHunk(h, side2) { + hunks.push([h.file1[0], side2, h.file1[1], h.file2[0], h.file2[1]]); + } + for (i = 0; i < m1.length; i++) { + addHunk(m1[i], 0); + } + for (i = 0; i < m2.length; i++) { + addHunk(m2[i], 2); + } + hunks.sort(function(x, y) { + return x[0] - y[0]; + }); + var result = []; + var commonOffset = 0; + function copyCommon(targetOffset) { + if (targetOffset > commonOffset) { + result.push([1, commonOffset, targetOffset - commonOffset]); + commonOffset = targetOffset; + } + } + for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { + var firstHunkIndex = hunkIndex; + var hunk = hunks[hunkIndex]; + var regionLhs = hunk[0]; + var regionRhs = regionLhs + hunk[2]; + while (hunkIndex < hunks.length - 1) { + var maybeOverlapping = hunks[hunkIndex + 1]; + var maybeLhs = maybeOverlapping[0]; + if (maybeLhs > regionRhs) break; + regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]); + hunkIndex++; + } + copyCommon(regionLhs); + if (firstHunkIndex == hunkIndex) { + if (hunk[4] > 0) { + result.push([hunk[1], hunk[3], hunk[4]]); + } + } else { + var regions = { + 0: [a.length, -1, o.length, -1], + 2: [b.length, -1, o.length, -1] + }; + for (i = firstHunkIndex; i <= hunkIndex; i++) { + hunk = hunks[i]; + var side = hunk[1]; + var r = regions[side]; + var oLhs = hunk[0]; + var oRhs = oLhs + hunk[2]; + var abLhs = hunk[3]; + var abRhs = abLhs + hunk[4]; + r[0] = Math.min(abLhs, r[0]); + r[1] = Math.max(abRhs, r[1]); + r[2] = Math.min(oLhs, r[2]); + r[3] = Math.max(oRhs, r[3]); + } + var aLhs = regions[0][0] + (regionLhs - regions[0][2]); + var aRhs = regions[0][1] + (regionRhs - regions[0][3]); + var bLhs = regions[2][0] + (regionLhs - regions[2][2]); + var bRhs = regions[2][1] + (regionRhs - regions[2][3]); + result.push([ + -1, + aLhs, + aRhs - aLhs, + regionLhs, + regionRhs - regionLhs, + bLhs, + bRhs - bLhs + ]); + } + commonOffset = regionRhs; + } + copyCommon(o.length); + return result; + } + function diff3Merge2(a, o, b) { + var result = []; + var files = [a, o, b]; + var indices = diff3MergeIndices(a, o, b); + var okLines = []; + function flushOk() { + if (okLines.length) { + result.push({ + ok: okLines + }); + } + okLines = []; + } + function pushOk(xs) { + for (var j = 0; j < xs.length; j++) { + okLines.push(xs[j]); + } + } + function isTrueConflict(rec) { + if (rec[2] != rec[6]) return true; + var aoff = rec[1]; + var boff = rec[5]; + for (var j = 0; j < rec[2]; j++) { + if (a[j + aoff] != b[j + boff]) return true; + } + return false; + } + for (var i = 0; i < indices.length; i++) { + var x = indices[i]; + var side = x[0]; + if (side == -1) { + if (!isTrueConflict(x)) { + pushOk(files[0].slice(x[1], x[1] + x[2])); + } else { + flushOk(); + result.push({ + conflict: { + a: a.slice(x[1], x[1] + x[2]), + aIndex: x[1], + o: o.slice(x[3], x[3] + x[4]), + oIndex: x[3], + b: b.slice(x[5], x[5] + x[6]), + bIndex: x[5] + } + }); + } + } else { + pushOk(files[side].slice(x[1], x[1] + x[2])); + } + } + flushOk(); + return result; + } + module2.exports = diff3Merge2; + } +}); + +// node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js +var require_ms = __commonJS({ + "node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js"(exports2, module2) { + init_polyfill_buffer(); + var s = 1e3; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + module2.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse2(val); + } else if (type === "number" && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + "val is not a non-empty string or a valid number. val=" + JSON.stringify(val) + ); + }; + function parse2(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || "ms").toLowerCase(); + switch (type) { + case "years": + case "year": + case "yrs": + case "yr": + case "y": + return n * y; + case "weeks": + case "week": + case "w": + return n * w; + case "days": + case "day": + case "d": + return n * d; + case "hours": + case "hour": + case "hrs": + case "hr": + case "h": + return n * h; + case "minutes": + case "minute": + case "mins": + case "min": + case "m": + return n * m; + case "seconds": + case "second": + case "secs": + case "sec": + case "s": + return n * s; + case "milliseconds": + case "millisecond": + case "msecs": + case "msec": + case "ms": + return n; + default: + return void 0; + } + } + function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + "d"; + } + if (msAbs >= h) { + return Math.round(ms / h) + "h"; + } + if (msAbs >= m) { + return Math.round(ms / m) + "m"; + } + if (msAbs >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; + } + function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, "day"); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, "hour"); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, "minute"); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, "second"); + } + return ms + " ms"; + } + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); + } + } +}); + +// node_modules/.pnpm/debug@4.3.5_supports-color@9.4.0/node_modules/debug/src/common.js +var require_common2 = __commonJS({ + "node_modules/.pnpm/debug@4.3.5_supports-color@9.4.0/node_modules/debug/src/common.js"(exports2, module2) { + init_polyfill_buffer(); + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require_ms(); + createDebug.destroy = destroy; + Object.keys(env).forEach((key2) => { + createDebug[key2] = env[key2]; + }); + createDebug.names = []; + createDebug.skips = []; + createDebug.formatters = {}; + function selectColor(namespace) { + let hash2 = 0; + for (let i = 0; i < namespace.length; i++) { + hash2 = (hash2 << 5) - hash2 + namespace.charCodeAt(i); + hash2 |= 0; + } + return createDebug.colors[Math.abs(hash2) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + function debug3(...args) { + if (!debug3.enabled) { + return; + } + const self2 = debug3; + const curr = Number(/* @__PURE__ */ new Date()); + const ms = curr - (prevTime || curr); + self2.diff = ms; + self2.prev = prevTime; + self2.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + if (typeof args[0] !== "string") { + args.unshift("%O"); + } + let index2 = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + if (match === "%%") { + return "%"; + } + index2++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === "function") { + const val = args[index2]; + match = formatter.call(self2, val); + args.splice(index2, 1); + index2--; + } + return match; + }); + createDebug.formatArgs.call(self2, args); + const logFn = self2.log || createDebug.log; + logFn.apply(self2, args); + } + debug3.namespace = namespace; + debug3.useColors = createDebug.useColors(); + debug3.color = createDebug.selectColor(namespace); + debug3.extend = extend; + debug3.destroy = createDebug.destroy; + Object.defineProperty(debug3, "enabled", { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + return enabledCache; + }, + set: (v) => { + enableOverride = v; + } + }); + if (typeof createDebug.init === "function") { + createDebug.init(debug3); + } + return debug3; + } + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + createDebug.names = []; + createDebug.skips = []; + let i; + const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); + const len = split.length; + for (i = 0; i < len; i++) { + if (!split[i]) { + continue; + } + namespaces = split[i].replace(/\*/g, ".*?"); + if (namespaces[0] === "-") { + createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); + } else { + createDebug.names.push(new RegExp("^" + namespaces + "$")); + } + } + } + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) + ].join(","); + createDebug.enable(""); + return namespaces; + } + function enabled(name) { + if (name[name.length - 1] === "*") { + return true; + } + let i; + let len; + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + return false; + } + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); + } + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + function destroy() { + console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); + } + createDebug.enable(createDebug.load()); + return createDebug; + } + module2.exports = setup; + } +}); + +// node_modules/.pnpm/debug@4.3.5_supports-color@9.4.0/node_modules/debug/src/browser.js +var require_browser = __commonJS({ + "node_modules/.pnpm/debug@4.3.5_supports-color@9.4.0/node_modules/debug/src/browser.js"(exports2, module2) { + init_polyfill_buffer(); + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.storage = localstorage(); + exports2.destroy = /* @__PURE__ */ (() => { + let warned = false; + return () => { + if (!warned) { + warned = true; + console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); + } + }; + })(); + exports2.colors = [ + "#0000CC", + "#0000FF", + "#0033CC", + "#0033FF", + "#0066CC", + "#0066FF", + "#0099CC", + "#0099FF", + "#00CC00", + "#00CC33", + "#00CC66", + "#00CC99", + "#00CCCC", + "#00CCFF", + "#3300CC", + "#3300FF", + "#3333CC", + "#3333FF", + "#3366CC", + "#3366FF", + "#3399CC", + "#3399FF", + "#33CC00", + "#33CC33", + "#33CC66", + "#33CC99", + "#33CCCC", + "#33CCFF", + "#6600CC", + "#6600FF", + "#6633CC", + "#6633FF", + "#66CC00", + "#66CC33", + "#9900CC", + "#9900FF", + "#9933CC", + "#9933FF", + "#99CC00", + "#99CC33", + "#CC0000", + "#CC0033", + "#CC0066", + "#CC0099", + "#CC00CC", + "#CC00FF", + "#CC3300", + "#CC3333", + "#CC3366", + "#CC3399", + "#CC33CC", + "#CC33FF", + "#CC6600", + "#CC6633", + "#CC9900", + "#CC9933", + "#CCCC00", + "#CCCC33", + "#FF0000", + "#FF0033", + "#FF0066", + "#FF0099", + "#FF00CC", + "#FF00FF", + "#FF3300", + "#FF3333", + "#FF3366", + "#FF3399", + "#FF33CC", + "#FF33FF", + "#FF6600", + "#FF6633", + "#FF9900", + "#FF9933", + "#FFCC00", + "#FFCC33" + ]; + function useColors() { + if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { + return true; + } + if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + function formatArgs(args) { + args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); + if (!this.useColors) { + return; + } + const c = "color: " + this.color; + args.splice(1, 0, c, "color: inherit"); + let index2 = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, (match) => { + if (match === "%%") { + return; + } + index2++; + if (match === "%c") { + lastC = index2; + } + }); + args.splice(lastC, 0, c); + } + exports2.log = console.debug || console.log || (() => { + }); + function save(namespaces) { + try { + if (namespaces) { + exports2.storage.setItem("debug", namespaces); + } else { + exports2.storage.removeItem("debug"); + } + } catch (error) { + } + } + function load() { + let r; + try { + r = exports2.storage.getItem("debug"); + } catch (error) { + } + if (!r && typeof process !== "undefined" && "env" in process) { + r = process.env.DEBUG; + } + return r; + } + function localstorage() { + try { + return localStorage; + } catch (error) { + } + } + module2.exports = require_common2()(exports2); + var { formatters } = module2.exports; + formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (error) { + return "[UnexpectedJSONParseError]: " + error.message; + } + }; + } +}); + +// node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/src/index.js +var require_src = __commonJS({ + "node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/src/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + var __importDefault = exports2 && exports2.__importDefault || function(mod) { + return mod && mod.__esModule ? mod : { "default": mod }; + }; + Object.defineProperty(exports2, "__esModule", { value: true }); + var fs_1 = require("fs"); + var debug_1 = __importDefault(require_browser()); + var log2 = debug_1.default("@kwsites/file-exists"); + function check(path2, isFile, isDirectory) { + log2(`checking %s`, path2); + try { + const stat = fs_1.statSync(path2); + if (stat.isFile() && isFile) { + log2(`[OK] path represents a file`); + return true; + } + if (stat.isDirectory() && isDirectory) { + log2(`[OK] path represents a directory`); + return true; + } + log2(`[FAIL] path represents something other than a file or directory`); + return false; + } catch (e) { + if (e.code === "ENOENT") { + log2(`[FAIL] path is not accessible: %o`, e); + return false; + } + log2(`[FATAL] %o`, e); + throw e; + } + } + function exists2(path2, type = exports2.READABLE) { + return check(path2, (type & exports2.FILE) > 0, (type & exports2.FOLDER) > 0); + } + exports2.exists = exists2; + exports2.FILE = 1; + exports2.FOLDER = 2; + exports2.READABLE = exports2.FILE + exports2.FOLDER; + } +}); + +// node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/index.js +var require_dist = __commonJS({ + "node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + function __export3(m) { + for (var p in m) if (!exports2.hasOwnProperty(p)) exports2[p] = m[p]; + } + Object.defineProperty(exports2, "__esModule", { value: true }); + __export3(require_src()); + } +}); + +// node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js +var require_dist2 = __commonJS({ + "node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.createDeferred = exports2.deferred = void 0; + function deferred2() { + let done; + let fail; + let status2 = "pending"; + const promise2 = new Promise((_done, _fail) => { + done = _done; + fail = _fail; + }); + return { + promise: promise2, + done(result) { + if (status2 === "pending") { + status2 = "resolved"; + done(result); + } + }, + fail(error) { + if (status2 === "pending") { + status2 = "rejected"; + fail(error); + } + }, + get fulfilled() { + return status2 !== "pending"; + }, + get status() { + return status2; + } + }; + } + exports2.deferred = deferred2; + exports2.createDeferred = deferred2; + exports2.default = deferred2; + } +}); + +// node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js +var require_color_name = __commonJS({ + "node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + } +}); + +// node_modules/.pnpm/css-unit-converter@1.1.2/node_modules/css-unit-converter/index.js +var require_css_unit_converter = __commonJS({ + "node_modules/.pnpm/css-unit-converter@1.1.2/node_modules/css-unit-converter/index.js"(exports2, module2) { + init_polyfill_buffer(); + var conversions = { + // length + "px": { + "px": 1, + "cm": 96 / 2.54, + "mm": 96 / 25.4, + "in": 96, + "pt": 96 / 72, + "pc": 16 + }, + "cm": { + "px": 2.54 / 96, + "cm": 1, + "mm": 0.1, + "in": 2.54, + "pt": 2.54 / 72, + "pc": 2.54 / 6 + }, + "mm": { + "px": 25.4 / 96, + "cm": 10, + "mm": 1, + "in": 25.4, + "pt": 25.4 / 72, + "pc": 25.4 / 6 + }, + "in": { + "px": 1 / 96, + "cm": 1 / 2.54, + "mm": 1 / 25.4, + "in": 1, + "pt": 1 / 72, + "pc": 1 / 6 + }, + "pt": { + "px": 0.75, + "cm": 72 / 2.54, + "mm": 72 / 25.4, + "in": 72, + "pt": 1, + "pc": 12 + }, + "pc": { + "px": 6 / 96, + "cm": 6 / 2.54, + "mm": 6 / 25.4, + "in": 6, + "pt": 6 / 72, + "pc": 1 + }, + // angle + "deg": { + "deg": 1, + "grad": 0.9, + "rad": 180 / Math.PI, + "turn": 360 + }, + "grad": { + "deg": 400 / 360, + "grad": 1, + "rad": 200 / Math.PI, + "turn": 400 + }, + "rad": { + "deg": Math.PI / 180, + "grad": Math.PI / 200, + "rad": 1, + "turn": Math.PI * 2 + }, + "turn": { + "deg": 1 / 360, + "grad": 1 / 400, + "rad": 0.5 / Math.PI, + "turn": 1 + }, + // time + "s": { + "s": 1, + "ms": 1 / 1e3 + }, + "ms": { + "s": 1e3, + "ms": 1 + }, + // frequency + "Hz": { + "Hz": 1, + "kHz": 1e3 + }, + "kHz": { + "Hz": 1 / 1e3, + "kHz": 1 + }, + // resolution + "dpi": { + "dpi": 1, + "dpcm": 1 / 2.54, + "dppx": 1 / 96 + }, + "dpcm": { + "dpi": 2.54, + "dpcm": 1, + "dppx": 2.54 / 96 + }, + "dppx": { + "dpi": 96, + "dpcm": 96 / 2.54, + "dppx": 1 + } + }; + module2.exports = function(value, sourceUnit, targetUnit, precision) { + if (!conversions.hasOwnProperty(targetUnit)) + throw new Error("Cannot convert to " + targetUnit); + if (!conversions[targetUnit].hasOwnProperty(sourceUnit)) + throw new Error("Cannot convert from " + sourceUnit + " to " + targetUnit); + var converted = conversions[targetUnit][sourceUnit] * value; + if (precision !== false) { + precision = Math.pow(10, parseInt(precision) || 5); + return Math.round(converted * precision) / precision; + } + return converted; + }; + } +}); + +// node_modules/.pnpm/css-color-converter@2.0.0/node_modules/css-color-converter/lib/index.js +var require_lib3 = __commonJS({ + "node_modules/.pnpm/css-color-converter@2.0.0/node_modules/css-color-converter/lib/index.js"(exports2) { + "use strict"; + init_polyfill_buffer(); + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.fromRgba = fromRgba; + exports2.fromRgb = fromRgb; + exports2.fromHsla = fromHsla; + exports2.fromHsl = fromHsl; + exports2.fromString = fromString2; + exports2["default"] = void 0; + var _colorName = _interopRequireDefault(require_color_name()); + var _cssUnitConverter = _interopRequireDefault(require_css_unit_converter()); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { "default": obj }; + } + function _classCallCheck(instance10, Constructor) { + if (!(instance10 instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray2(arr, i) || _nonIterableRest(); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray2(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray2(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray2(o, minLen); + } + function _arrayLikeToArray2(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; + } + function _iterableToArrayLimit(arr, i) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = void 0; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + return _arr; + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + var hex = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/; + var shortHex = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?$/; + var rgb = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; + var rgbfn = /^rgba?\(\s*(\d+)\s+(\d+)\s+(\d+)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; + var rgbperc = /^rgba?\(\s*(\d+%)\s*,\s*(\d+%)\s*,\s*(\d+%)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; + var rgbpercfn = /^rgba?\(\s*(\d+%)\s+(\d+%)\s+(\d+%)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; + var hsl = /^hsla?\(\s*(\d+)(deg|rad|grad|turn)?\s*,\s*(\d+)%\s*,\s*(\d+)%(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; + function contains2(haystack, needle) { + return haystack.indexOf(needle) > -1; + } + function rgbToHsl(r, g, b) { + var rprim = r / 255; + var gprim = g / 255; + var bprim = b / 255; + var cmax = Math.max(rprim, gprim, bprim); + var cmin = Math.min(rprim, gprim, bprim); + var delta = cmax - cmin; + var l = (cmax + cmin) / 2; + if (delta === 0) { + return [0, 0, l * 100]; + } + var s = delta / (1 - Math.abs(2 * l - 1)); + var h = function() { + switch (cmax) { + case rprim: { + return (gprim - bprim) / delta % 6; + } + case gprim: { + return (bprim - rprim) / delta + 2; + } + default: { + return (rprim - gprim) / delta + 4; + } + } + }(); + return [h * 60, s * 100, l * 100]; + } + function hslToRgb(h, s, l) { + var hprim = h / 60; + var sprim = s / 100; + var lprim = l / 100; + var c = (1 - Math.abs(2 * lprim - 1)) * sprim; + var x = c * (1 - Math.abs(hprim % 2 - 1)); + var m = lprim - c / 2; + var _ref = function() { + if (hprim < 1) return [c, x, 0]; + if (hprim < 2) return [x, c, 0]; + if (hprim < 3) return [0, c, x]; + if (hprim < 4) return [0, x, c]; + if (hprim < 5) return [x, 0, c]; + return [c, 0, x]; + }(), _ref2 = _slicedToArray(_ref, 3), rprim = _ref2[0], gprim = _ref2[1], bprim = _ref2[2]; + return [(rprim + m) * 255, (gprim + m) * 255, (bprim + m) * 255]; + } + var Color = /* @__PURE__ */ function() { + function Color2(_ref3) { + var _ref4 = _slicedToArray(_ref3, 4), r = _ref4[0], g = _ref4[1], b = _ref4[2], a = _ref4[3]; + _classCallCheck(this, Color2); + this.values = [Math.max(Math.min(parseInt(r, 10), 255), 0), Math.max(Math.min(parseInt(g, 10), 255), 0), Math.max(Math.min(parseInt(b, 10), 255), 0), a == null ? 1 : Math.max(Math.min(parseFloat(a), 255), 0)]; + } + _createClass(Color2, [{ + key: "toRgbString", + value: function toRgbString() { + var _this$values = _slicedToArray(this.values, 4), r = _this$values[0], g = _this$values[1], b = _this$values[2], a = _this$values[3]; + if (a === 1) { + return "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")"); + } + return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(a, ")"); + } + }, { + key: "toHslString", + value: function toHslString() { + var _this$toHslaArray = this.toHslaArray(), _this$toHslaArray2 = _slicedToArray(_this$toHslaArray, 4), h = _this$toHslaArray2[0], s = _this$toHslaArray2[1], l = _this$toHslaArray2[2], a = _this$toHslaArray2[3]; + if (a === 1) { + return "hsl(".concat(h, ", ").concat(s, "%, ").concat(l, "%)"); + } + return "hsla(".concat(h, ", ").concat(s, "%, ").concat(l, "%, ").concat(a, ")"); + } + }, { + key: "toHexString", + value: function toHexString() { + var _this$values2 = _slicedToArray(this.values, 4), r = _this$values2[0], g = _this$values2[1], b = _this$values2[2], a = _this$values2[3]; + r = Number(r).toString(16).padStart(2, "0"); + g = Number(g).toString(16).padStart(2, "0"); + b = Number(b).toString(16).padStart(2, "0"); + a = a < 1 ? parseInt(a * 255, 10).toString(16).padStart(2, "0") : ""; + return "#".concat(r).concat(g).concat(b).concat(a); + } + }, { + key: "toRgbaArray", + value: function toRgbaArray() { + return this.values; + } + }, { + key: "toHslaArray", + value: function toHslaArray() { + var _this$values3 = _slicedToArray(this.values, 4), r = _this$values3[0], g = _this$values3[1], b = _this$values3[2], a = _this$values3[3]; + var _rgbToHsl = rgbToHsl(r, g, b), _rgbToHsl2 = _slicedToArray(_rgbToHsl, 3), h = _rgbToHsl2[0], s = _rgbToHsl2[1], l = _rgbToHsl2[2]; + return [h, s, l, a]; + } + }]); + return Color2; + }(); + function fromRgba(_ref5) { + var _ref6 = _slicedToArray(_ref5, 4), r = _ref6[0], g = _ref6[1], b = _ref6[2], a = _ref6[3]; + return new Color([r, g, b, a]); + } + function fromRgb(_ref7) { + var _ref8 = _slicedToArray(_ref7, 3), r = _ref8[0], g = _ref8[1], b = _ref8[2]; + return fromRgba([r, g, b, 1]); + } + function fromHsla(_ref9) { + var _ref10 = _slicedToArray(_ref9, 4), h = _ref10[0], s = _ref10[1], l = _ref10[2], a = _ref10[3]; + var _hslToRgb = hslToRgb(h, s, l), _hslToRgb2 = _slicedToArray(_hslToRgb, 3), r = _hslToRgb2[0], g = _hslToRgb2[1], b = _hslToRgb2[2]; + return fromRgba([r, g, b, a]); + } + function fromHsl(_ref11) { + var _ref12 = _slicedToArray(_ref11, 3), h = _ref12[0], s = _ref12[1], l = _ref12[2]; + return fromHsla([h, s, l, 1]); + } + function fromHexString(str) { + var _ref13 = hex.exec(str) || shortHex.exec(str), _ref14 = _slicedToArray(_ref13, 5), r = _ref14[1], g = _ref14[2], b = _ref14[3], a = _ref14[4]; + r = parseInt(r.length < 2 ? r.repeat(2) : r, 16); + g = parseInt(g.length < 2 ? g.repeat(2) : g, 16); + b = parseInt(b.length < 2 ? b.repeat(2) : b, 16); + a = a && (parseInt(a.length < 2 ? a.repeat(2) : a, 16) / 255).toPrecision(1) || 1; + return fromRgba([r, g, b, a]); + } + function fromRgbString(str) { + var _ref15 = rgb.exec(str) || rgbperc.exec(str) || rgbfn.exec(str) || rgbpercfn.exec(str), _ref16 = _slicedToArray(_ref15, 5), r = _ref16[1], g = _ref16[2], b = _ref16[3], a = _ref16[4]; + r = contains2(r, "%") ? parseInt(r, 10) * 255 / 100 : parseInt(r, 10); + g = contains2(g, "%") ? parseInt(g, 10) * 255 / 100 : parseInt(g, 10); + b = contains2(b, "%") > 0 ? parseInt(b, 10) * 255 / 100 : parseInt(b, 10); + a = a === void 0 ? 1 : parseFloat(a) / (contains2(a, "%") ? 100 : 1); + return fromRgba([r, g, b, a]); + } + function fromHslString(str) { + var _hsl$exec = hsl.exec(str), _hsl$exec2 = _slicedToArray(_hsl$exec, 6), h = _hsl$exec2[1], unit = _hsl$exec2[2], s = _hsl$exec2[3], l = _hsl$exec2[4], a = _hsl$exec2[5]; + unit = unit || "deg"; + h = (0, _cssUnitConverter["default"])(parseFloat(h), unit, "deg"); + s = parseFloat(s); + l = parseFloat(l); + a = a === void 0 ? 1 : parseFloat(a) / (contains2(a, "%") ? 100 : 1); + return fromHsla([h, s, l, a]); + } + function fromString2(str) { + if (_colorName["default"][str]) { + return fromRgb(_colorName["default"][str]); + } + if (hex.test(str) || shortHex.test(str)) { + return fromHexString(str); + } + if (rgb.test(str) || rgbperc.test(str) || rgbfn.test(str) || rgbpercfn.test(str)) { + return fromRgbString(str); + } + if (hsl.test(str)) { + return fromHslString(str); + } + return null; + } + var _default = { + fromString: fromString2, + fromRgb, + fromRgba, + fromHsl, + fromHsla + }; + exports2["default"] = _default; + } +}); + +// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js +var require_isArguments = __commonJS({ + "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var toStr = Object.prototype.toString; + module2.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === "[object Arguments]"; + if (!isArgs) { + isArgs = str !== "[object Array]" && value !== null && typeof value === "object" && typeof value.length === "number" && value.length >= 0 && toStr.call(value.callee) === "[object Function]"; + } + return isArgs; + }; + } +}); + +// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js +var require_implementation = __commonJS({ + "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var keysShim; + if (!Object.keys) { + has = Object.prototype.hasOwnProperty; + toStr = Object.prototype.toString; + isArgs = require_isArguments(); + isEnumerable = Object.prototype.propertyIsEnumerable; + hasDontEnumBug = !isEnumerable.call({ toString: null }, "toString"); + hasProtoEnumBug = isEnumerable.call(function() { + }, "prototype"); + dontEnums = [ + "toString", + "toLocaleString", + "valueOf", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "constructor" + ]; + equalsConstructorPrototype = function(o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; + }; + excludedKeys = { + $applicationCache: true, + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $onmozfullscreenchange: true, + $onmozfullscreenerror: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true + }; + hasAutomationEqualityBug = function() { + if (typeof window === "undefined") { + return false; + } + for (var k in window) { + try { + if (!excludedKeys["$" + k] && has.call(window, k) && window[k] !== null && typeof window[k] === "object") { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; + }(); + equalsConstructorPrototypeIfNotBuggy = function(o) { + if (typeof window === "undefined" || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } + }; + keysShim = function keys(object) { + var isObject2 = object !== null && typeof object === "object"; + var isFunction2 = toStr.call(object) === "[object Function]"; + var isArguments = isArgs(object); + var isString = isObject2 && toStr.call(object) === "[object String]"; + var theKeys = []; + if (!isObject2 && !isFunction2 && !isArguments) { + throw new TypeError("Object.keys called on a non-object"); + } + var skipProto = hasProtoEnumBug && isFunction2; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === "prototype") && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === "constructor") && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; + }; + } + var has; + var toStr; + var isArgs; + var isEnumerable; + var hasDontEnumBug; + var hasProtoEnumBug; + var dontEnums; + var equalsConstructorPrototype; + var excludedKeys; + var hasAutomationEqualityBug; + var equalsConstructorPrototypeIfNotBuggy; + module2.exports = keysShim; + } +}); + +// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var slice = Array.prototype.slice; + var isArgs = require_isArguments(); + var origKeys = Object.keys; + var keysShim = origKeys ? function keys(o) { + return origKeys(o); + } : require_implementation(); + var originalKeys = Object.keys; + keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = function() { + var args = Object.keys(arguments); + return args && args.length === arguments.length; + }(1, 2); + if (!keysWorksWithArguments) { + Object.keys = function keys(object) { + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } + return originalKeys(object); + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; + }; + module2.exports = keysShim; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js +var require_es_errors = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = Error; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js +var require_eval = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = EvalError; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js +var require_range = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = RangeError; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js +var require_ref = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = ReferenceError; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js +var require_syntax = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = SyntaxError; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js +var require_type = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = TypeError; + } +}); + +// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js +var require_uri = __commonJS({ + "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = URIError; + } +}); + +// node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js +var require_shams = __commonJS({ + "node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = function hasSymbols() { + if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") { + return false; + } + if (typeof Symbol.iterator === "symbol") { + return true; + } + var obj = {}; + var sym = Symbol("test"); + var symObj = Object(sym); + if (typeof sym === "string") { + return false; + } + if (Object.prototype.toString.call(sym) !== "[object Symbol]") { + return false; + } + if (Object.prototype.toString.call(symObj) !== "[object Symbol]") { + return false; + } + var symVal = 42; + obj[sym] = symVal; + for (sym in obj) { + return false; + } + if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) { + return false; + } + if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) { + return false; + } + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { + return false; + } + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { + return false; + } + if (typeof Object.getOwnPropertyDescriptor === "function") { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { + return false; + } + } + return true; + }; + } +}); + +// node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js +var require_has_symbols = __commonJS({ + "node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var origSymbol = typeof Symbol !== "undefined" && Symbol; + var hasSymbolSham = require_shams(); + module2.exports = function hasNativeSymbols() { + if (typeof origSymbol !== "function") { + return false; + } + if (typeof Symbol !== "function") { + return false; + } + if (typeof origSymbol("foo") !== "symbol") { + return false; + } + if (typeof Symbol("bar") !== "symbol") { + return false; + } + return hasSymbolSham(); + }; + } +}); + +// node_modules/.pnpm/has-proto@1.0.3/node_modules/has-proto/index.js +var require_has_proto = __commonJS({ + "node_modules/.pnpm/has-proto@1.0.3/node_modules/has-proto/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var test = { + __proto__: null, + foo: {} + }; + var $Object = Object; + module2.exports = function hasProto() { + return { __proto__: test }.foo === test.foo && !(test instanceof $Object); + }; + } +}); + +// node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js +var require_implementation2 = __commonJS({ + "node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; + var toStr = Object.prototype.toString; + var max = Math.max; + var funcType = "[object Function]"; + var concatty = function concatty2(a, b) { + var arr = []; + for (var i = 0; i < a.length; i += 1) { + arr[i] = a[i]; + } + for (var j = 0; j < b.length; j += 1) { + arr[j + a.length] = b[j]; + } + return arr; + }; + var slicy = function slicy2(arrLike, offset) { + var arr = []; + for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { + arr[j] = arrLike[i]; + } + return arr; + }; + var joiny = function(arr, joiner) { + var str = ""; + for (var i = 0; i < arr.length; i += 1) { + str += arr[i]; + if (i + 1 < arr.length) { + str += joiner; + } + } + return str; + }; + module2.exports = function bind(that) { + var target = this; + if (typeof target !== "function" || toStr.apply(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slicy(arguments, 1); + var bound; + var binder = function() { + if (this instanceof bound) { + var result = target.apply( + this, + concatty(args, arguments) + ); + if (Object(result) === result) { + return result; + } + return this; + } + return target.apply( + that, + concatty(args, arguments) + ); + }; + var boundLength = max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs[i] = "$" + i; + } + bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); + if (target.prototype) { + var Empty = function Empty2() { + }; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + return bound; + }; + } +}); + +// node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js +var require_function_bind = __commonJS({ + "node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var implementation = require_implementation2(); + module2.exports = Function.prototype.bind || implementation; + } +}); + +// node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/index.js +var require_hasown = __commonJS({ + "node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var call = Function.prototype.call; + var $hasOwn = Object.prototype.hasOwnProperty; + var bind = require_function_bind(); + module2.exports = bind.call(call, $hasOwn); + } +}); + +// node_modules/.pnpm/get-intrinsic@1.2.4/node_modules/get-intrinsic/index.js +var require_get_intrinsic = __commonJS({ + "node_modules/.pnpm/get-intrinsic@1.2.4/node_modules/get-intrinsic/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var undefined2; + var $Error = require_es_errors(); + var $EvalError = require_eval(); + var $RangeError = require_range(); + var $ReferenceError = require_ref(); + var $SyntaxError = require_syntax(); + var $TypeError = require_type(); + var $URIError = require_uri(); + var $Function = Function; + var getEvalledConstructor = function(expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")(); + } catch (e) { + } + }; + var $gOPD = Object.getOwnPropertyDescriptor; + if ($gOPD) { + try { + $gOPD({}, ""); + } catch (e) { + $gOPD = null; + } + } + var throwTypeError = function() { + throw new $TypeError(); + }; + var ThrowTypeError = $gOPD ? function() { + try { + arguments.callee; + return throwTypeError; + } catch (calleeThrows) { + try { + return $gOPD(arguments, "callee").get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }() : throwTypeError; + var hasSymbols = require_has_symbols()(); + var hasProto = require_has_proto()(); + var getProto = Object.getPrototypeOf || (hasProto ? function(x) { + return x.__proto__; + } : null); + var needsEval = {}; + var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array); + var INTRINSICS = { + __proto__: null, + "%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError, + "%Array%": Array, + "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer, + "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2, + "%AsyncFromSyncIteratorPrototype%": undefined2, + "%AsyncFunction%": needsEval, + "%AsyncGenerator%": needsEval, + "%AsyncGeneratorFunction%": needsEval, + "%AsyncIteratorPrototype%": needsEval, + "%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics, + "%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt, + "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array, + "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array, + "%Boolean%": Boolean, + "%DataView%": typeof DataView === "undefined" ? undefined2 : DataView, + "%Date%": Date, + "%decodeURI%": decodeURI, + "%decodeURIComponent%": decodeURIComponent, + "%encodeURI%": encodeURI, + "%encodeURIComponent%": encodeURIComponent, + "%Error%": $Error, + "%eval%": eval, + // eslint-disable-line no-eval + "%EvalError%": $EvalError, + "%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array, + "%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array, + "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry, + "%Function%": $Function, + "%GeneratorFunction%": needsEval, + "%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array, + "%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array, + "%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array, + "%isFinite%": isFinite, + "%isNaN%": isNaN, + "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2, + "%JSON%": typeof JSON === "object" ? JSON : undefined2, + "%Map%": typeof Map === "undefined" ? undefined2 : Map, + "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()), + "%Math%": Math, + "%Number%": Number, + "%Object%": Object, + "%parseFloat%": parseFloat, + "%parseInt%": parseInt, + "%Promise%": typeof Promise === "undefined" ? undefined2 : Promise, + "%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy, + "%RangeError%": $RangeError, + "%ReferenceError%": $ReferenceError, + "%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect, + "%RegExp%": RegExp, + "%Set%": typeof Set === "undefined" ? undefined2 : Set, + "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()), + "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer, + "%String%": String, + "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2, + "%Symbol%": hasSymbols ? Symbol : undefined2, + "%SyntaxError%": $SyntaxError, + "%ThrowTypeError%": ThrowTypeError, + "%TypedArray%": TypedArray, + "%TypeError%": $TypeError, + "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array, + "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray, + "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array, + "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array, + "%URIError%": $URIError, + "%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap, + "%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef, + "%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet + }; + if (getProto) { + try { + null.error; + } catch (e) { + errorProto = getProto(getProto(e)); + INTRINSICS["%Error.prototype%"] = errorProto; + } + } + var errorProto; + var doEval = function doEval2(name) { + var value; + if (name === "%AsyncFunction%") { + value = getEvalledConstructor("async function () {}"); + } else if (name === "%GeneratorFunction%") { + value = getEvalledConstructor("function* () {}"); + } else if (name === "%AsyncGeneratorFunction%") { + value = getEvalledConstructor("async function* () {}"); + } else if (name === "%AsyncGenerator%") { + var fn = doEval2("%AsyncGeneratorFunction%"); + if (fn) { + value = fn.prototype; + } + } else if (name === "%AsyncIteratorPrototype%") { + var gen = doEval2("%AsyncGenerator%"); + if (gen && getProto) { + value = getProto(gen.prototype); + } + } + INTRINSICS[name] = value; + return value; + }; + var LEGACY_ALIASES = { + __proto__: null, + "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], + "%ArrayPrototype%": ["Array", "prototype"], + "%ArrayProto_entries%": ["Array", "prototype", "entries"], + "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], + "%ArrayProto_keys%": ["Array", "prototype", "keys"], + "%ArrayProto_values%": ["Array", "prototype", "values"], + "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], + "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], + "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], + "%BooleanPrototype%": ["Boolean", "prototype"], + "%DataViewPrototype%": ["DataView", "prototype"], + "%DatePrototype%": ["Date", "prototype"], + "%ErrorPrototype%": ["Error", "prototype"], + "%EvalErrorPrototype%": ["EvalError", "prototype"], + "%Float32ArrayPrototype%": ["Float32Array", "prototype"], + "%Float64ArrayPrototype%": ["Float64Array", "prototype"], + "%FunctionPrototype%": ["Function", "prototype"], + "%Generator%": ["GeneratorFunction", "prototype"], + "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], + "%Int8ArrayPrototype%": ["Int8Array", "prototype"], + "%Int16ArrayPrototype%": ["Int16Array", "prototype"], + "%Int32ArrayPrototype%": ["Int32Array", "prototype"], + "%JSONParse%": ["JSON", "parse"], + "%JSONStringify%": ["JSON", "stringify"], + "%MapPrototype%": ["Map", "prototype"], + "%NumberPrototype%": ["Number", "prototype"], + "%ObjectPrototype%": ["Object", "prototype"], + "%ObjProto_toString%": ["Object", "prototype", "toString"], + "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], + "%PromisePrototype%": ["Promise", "prototype"], + "%PromiseProto_then%": ["Promise", "prototype", "then"], + "%Promise_all%": ["Promise", "all"], + "%Promise_reject%": ["Promise", "reject"], + "%Promise_resolve%": ["Promise", "resolve"], + "%RangeErrorPrototype%": ["RangeError", "prototype"], + "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], + "%RegExpPrototype%": ["RegExp", "prototype"], + "%SetPrototype%": ["Set", "prototype"], + "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], + "%StringPrototype%": ["String", "prototype"], + "%SymbolPrototype%": ["Symbol", "prototype"], + "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], + "%TypedArrayPrototype%": ["TypedArray", "prototype"], + "%TypeErrorPrototype%": ["TypeError", "prototype"], + "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], + "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], + "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], + "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], + "%URIErrorPrototype%": ["URIError", "prototype"], + "%WeakMapPrototype%": ["WeakMap", "prototype"], + "%WeakSetPrototype%": ["WeakSet", "prototype"] + }; + var bind = require_function_bind(); + var hasOwn = require_hasown(); + var $concat = bind.call(Function.call, Array.prototype.concat); + var $spliceApply = bind.call(Function.apply, Array.prototype.splice); + var $replace = bind.call(Function.call, String.prototype.replace); + var $strSlice = bind.call(Function.call, String.prototype.slice); + var $exec = bind.call(Function.call, RegExp.prototype.exec); + var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; + var reEscapeChar = /\\(\\)?/g; + var stringToPath = function stringToPath2(string) { + var first2 = $strSlice(string, 0, 1); + var last2 = $strSlice(string, -1); + if (first2 === "%" && last2 !== "%") { + throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`"); + } else if (last2 === "%" && first2 !== "%") { + throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`"); + } + var result = []; + $replace(string, rePropName, function(match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match; + }); + return result; + }; + var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = "%" + alias[0] + "%"; + } + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === "undefined" && !allowMissing) { + throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!"); + } + return { + alias, + name: intrinsicName, + value + }; + } + throw new $SyntaxError("intrinsic " + name + " does not exist!"); + }; + module2.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== "string" || name.length === 0) { + throw new $TypeError("intrinsic name must be a non-empty string"); + } + if (arguments.length > 1 && typeof allowMissing !== "boolean") { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + if ($exec(/^%?[^%]*%?$/, name) === null) { + throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); + } + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ""; + var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first2 = $strSlice(part, 0, 1); + var last2 = $strSlice(part, -1); + if ((first2 === '"' || first2 === "'" || first2 === "`" || (last2 === '"' || last2 === "'" || last2 === "`")) && first2 !== last2) { + throw new $SyntaxError("property names with quotes must have matching quotes"); + } + if (part === "constructor" || !isOwn) { + skipFurtherCaching = true; + } + intrinsicBaseName += "." + part; + intrinsicRealName = "%" + intrinsicBaseName + "%"; + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available."); + } + return void 0; + } + if ($gOPD && i + 1 >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + if (isOwn && "get" in desc && !("originalValue" in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; + }; + } +}); + +// node_modules/.pnpm/es-define-property@1.0.0/node_modules/es-define-property/index.js +var require_es_define_property = __commonJS({ + "node_modules/.pnpm/es-define-property@1.0.0/node_modules/es-define-property/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var $defineProperty = GetIntrinsic("%Object.defineProperty%", true) || false; + if ($defineProperty) { + try { + $defineProperty({}, "a", { value: 1 }); + } catch (e) { + $defineProperty = false; + } + } + module2.exports = $defineProperty; + } +}); + +// node_modules/.pnpm/gopd@1.0.1/node_modules/gopd/index.js +var require_gopd = __commonJS({ + "node_modules/.pnpm/gopd@1.0.1/node_modules/gopd/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var $gOPD = GetIntrinsic("%Object.getOwnPropertyDescriptor%", true); + if ($gOPD) { + try { + $gOPD([], "length"); + } catch (e) { + $gOPD = null; + } + } + module2.exports = $gOPD; + } +}); + +// node_modules/.pnpm/define-data-property@1.1.4/node_modules/define-data-property/index.js +var require_define_data_property = __commonJS({ + "node_modules/.pnpm/define-data-property@1.1.4/node_modules/define-data-property/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $defineProperty = require_es_define_property(); + var $SyntaxError = require_syntax(); + var $TypeError = require_type(); + var gopd = require_gopd(); + module2.exports = function defineDataProperty(obj, property, value) { + if (!obj || typeof obj !== "object" && typeof obj !== "function") { + throw new $TypeError("`obj` must be an object or a function`"); + } + if (typeof property !== "string" && typeof property !== "symbol") { + throw new $TypeError("`property` must be a string or a symbol`"); + } + if (arguments.length > 3 && typeof arguments[3] !== "boolean" && arguments[3] !== null) { + throw new $TypeError("`nonEnumerable`, if provided, must be a boolean or null"); + } + if (arguments.length > 4 && typeof arguments[4] !== "boolean" && arguments[4] !== null) { + throw new $TypeError("`nonWritable`, if provided, must be a boolean or null"); + } + if (arguments.length > 5 && typeof arguments[5] !== "boolean" && arguments[5] !== null) { + throw new $TypeError("`nonConfigurable`, if provided, must be a boolean or null"); + } + if (arguments.length > 6 && typeof arguments[6] !== "boolean") { + throw new $TypeError("`loose`, if provided, must be a boolean"); + } + var nonEnumerable = arguments.length > 3 ? arguments[3] : null; + var nonWritable = arguments.length > 4 ? arguments[4] : null; + var nonConfigurable = arguments.length > 5 ? arguments[5] : null; + var loose = arguments.length > 6 ? arguments[6] : false; + var desc = !!gopd && gopd(obj, property); + if ($defineProperty) { + $defineProperty(obj, property, { + configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, + enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, + value, + writable: nonWritable === null && desc ? desc.writable : !nonWritable + }); + } else if (loose || !nonEnumerable && !nonWritable && !nonConfigurable) { + obj[property] = value; + } else { + throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable."); + } + }; + } +}); + +// node_modules/.pnpm/has-property-descriptors@1.0.2/node_modules/has-property-descriptors/index.js +var require_has_property_descriptors = __commonJS({ + "node_modules/.pnpm/has-property-descriptors@1.0.2/node_modules/has-property-descriptors/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $defineProperty = require_es_define_property(); + var hasPropertyDescriptors = function hasPropertyDescriptors2() { + return !!$defineProperty; + }; + hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { + if (!$defineProperty) { + return null; + } + try { + return $defineProperty([], "length", { value: 1 }).length !== 1; + } catch (e) { + return true; + } + }; + module2.exports = hasPropertyDescriptors; + } +}); + +// node_modules/.pnpm/define-properties@1.2.1/node_modules/define-properties/index.js +var require_define_properties = __commonJS({ + "node_modules/.pnpm/define-properties@1.2.1/node_modules/define-properties/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var keys = require_object_keys(); + var hasSymbols = typeof Symbol === "function" && typeof Symbol("foo") === "symbol"; + var toStr = Object.prototype.toString; + var concat = Array.prototype.concat; + var defineDataProperty = require_define_data_property(); + var isFunction2 = function(fn) { + return typeof fn === "function" && toStr.call(fn) === "[object Function]"; + }; + var supportsDescriptors = require_has_property_descriptors()(); + var defineProperty = function(object, name, value, predicate) { + if (name in object) { + if (predicate === true) { + if (object[name] === value) { + return; + } + } else if (!isFunction2(predicate) || !predicate()) { + return; + } + } + if (supportsDescriptors) { + defineDataProperty(object, name, value, true); + } else { + defineDataProperty(object, name, value); + } + }; + var defineProperties = function(object, map) { + var predicates = arguments.length > 2 ? arguments[2] : {}; + var props = keys(map); + if (hasSymbols) { + props = concat.call(props, Object.getOwnPropertySymbols(map)); + } + for (var i = 0; i < props.length; i += 1) { + defineProperty(object, props[i], map[props[i]], predicates[props[i]]); + } + }; + defineProperties.supportsDescriptors = !!supportsDescriptors; + module2.exports = defineProperties; + } +}); + +// node_modules/.pnpm/set-function-length@1.2.2/node_modules/set-function-length/index.js +var require_set_function_length = __commonJS({ + "node_modules/.pnpm/set-function-length@1.2.2/node_modules/set-function-length/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var define2 = require_define_data_property(); + var hasDescriptors = require_has_property_descriptors()(); + var gOPD = require_gopd(); + var $TypeError = require_type(); + var $floor = GetIntrinsic("%Math.floor%"); + module2.exports = function setFunctionLength(fn, length) { + if (typeof fn !== "function") { + throw new $TypeError("`fn` is not a function"); + } + if (typeof length !== "number" || length < 0 || length > 4294967295 || $floor(length) !== length) { + throw new $TypeError("`length` must be a positive 32-bit integer"); + } + var loose = arguments.length > 2 && !!arguments[2]; + var functionLengthIsConfigurable = true; + var functionLengthIsWritable = true; + if ("length" in fn && gOPD) { + var desc = gOPD(fn, "length"); + if (desc && !desc.configurable) { + functionLengthIsConfigurable = false; + } + if (desc && !desc.writable) { + functionLengthIsWritable = false; + } + } + if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { + if (hasDescriptors) { + define2( + /** @type {Parameters[0]} */ + fn, + "length", + length, + true, + true + ); + } else { + define2( + /** @type {Parameters[0]} */ + fn, + "length", + length + ); + } + } + return fn; + }; + } +}); + +// node_modules/.pnpm/call-bind@1.0.7/node_modules/call-bind/index.js +var require_call_bind = __commonJS({ + "node_modules/.pnpm/call-bind@1.0.7/node_modules/call-bind/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var bind = require_function_bind(); + var GetIntrinsic = require_get_intrinsic(); + var setFunctionLength = require_set_function_length(); + var $TypeError = require_type(); + var $apply = GetIntrinsic("%Function.prototype.apply%"); + var $call = GetIntrinsic("%Function.prototype.call%"); + var $reflectApply = GetIntrinsic("%Reflect.apply%", true) || bind.call($call, $apply); + var $defineProperty = require_es_define_property(); + var $max = GetIntrinsic("%Math.max%"); + module2.exports = function callBind(originalFunction) { + if (typeof originalFunction !== "function") { + throw new $TypeError("a function is required"); + } + var func = $reflectApply(bind, $call, arguments); + return setFunctionLength( + func, + 1 + $max(0, originalFunction.length - (arguments.length - 1)), + true + ); + }; + var applyBind = function applyBind2() { + return $reflectApply(bind, $apply, arguments); + }; + if ($defineProperty) { + $defineProperty(module2.exports, "apply", { value: applyBind }); + } else { + module2.exports.apply = applyBind; + } + } +}); + +// node_modules/.pnpm/call-bind@1.0.7/node_modules/call-bind/callBound.js +var require_callBound = __commonJS({ + "node_modules/.pnpm/call-bind@1.0.7/node_modules/call-bind/callBound.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var callBind = require_call_bind(); + var $indexOf = callBind(GetIntrinsic("String.prototype.indexOf")); + module2.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) { + return callBind(intrinsic); + } + return intrinsic; + }; + } +}); + +// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/implementation.js +var require_implementation3 = __commonJS({ + "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/implementation.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var objectKeys = require_object_keys(); + var hasSymbols = require_shams()(); + var callBound = require_callBound(); + var toObject = Object; + var $push = callBound("Array.prototype.push"); + var $propIsEnumerable = callBound("Object.prototype.propertyIsEnumerable"); + var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; + module2.exports = function assign2(target, source1) { + if (target == null) { + throw new TypeError("target must be an object"); + } + var to = toObject(target); + if (arguments.length === 1) { + return to; + } + for (var s = 1; s < arguments.length; ++s) { + var from = toObject(arguments[s]); + var keys = objectKeys(from); + var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols); + if (getSymbols) { + var syms = getSymbols(from); + for (var j = 0; j < syms.length; ++j) { + var key2 = syms[j]; + if ($propIsEnumerable(from, key2)) { + $push(keys, key2); + } + } + } + for (var i = 0; i < keys.length; ++i) { + var nextKey = keys[i]; + if ($propIsEnumerable(from, nextKey)) { + var propValue = from[nextKey]; + to[nextKey] = propValue; + } + } + } + return to; + }; + } +}); + +// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/polyfill.js +var require_polyfill = __commonJS({ + "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/polyfill.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var implementation = require_implementation3(); + var lacksProperEnumerationOrder = function() { + if (!Object.assign) { + return false; + } + var str = "abcdefghijklmnopqrst"; + var letters = str.split(""); + var map = {}; + for (var i = 0; i < letters.length; ++i) { + map[letters[i]] = letters[i]; + } + var obj = Object.assign({}, map); + var actual = ""; + for (var k in obj) { + actual += k; + } + return str !== actual; + }; + var assignHasPendingExceptions = function() { + if (!Object.assign || !Object.preventExtensions) { + return false; + } + var thrower = Object.preventExtensions({ 1: 2 }); + try { + Object.assign(thrower, "xy"); + } catch (e) { + return thrower[1] === "y"; + } + return false; + }; + module2.exports = function getPolyfill() { + if (!Object.assign) { + return implementation; + } + if (lacksProperEnumerationOrder()) { + return implementation; + } + if (assignHasPendingExceptions()) { + return implementation; + } + return Object.assign; + }; + } +}); + +// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/shim.js +var require_shim = __commonJS({ + "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/shim.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var define2 = require_define_properties(); + var getPolyfill = require_polyfill(); + module2.exports = function shimAssign() { + var polyfill = getPolyfill(); + define2( + Object, + { assign: polyfill }, + { assign: function() { + return Object.assign !== polyfill; + } } + ); + return polyfill; + }; + } +}); + +// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/index.js +var require_object = __commonJS({ + "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var defineProperties = require_define_properties(); + var callBind = require_call_bind(); + var implementation = require_implementation3(); + var getPolyfill = require_polyfill(); + var shim = require_shim(); + var polyfill = callBind.apply(getPolyfill()); + var bound = function assign2(target, source1) { + return polyfill(Object, arguments); + }; + defineProperties(bound, { + getPolyfill, + implementation, + shim + }); + module2.exports = bound; + } +}); + +// node_modules/.pnpm/functions-have-names@1.2.3/node_modules/functions-have-names/index.js +var require_functions_have_names = __commonJS({ + "node_modules/.pnpm/functions-have-names@1.2.3/node_modules/functions-have-names/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var functionsHaveNames = function functionsHaveNames2() { + return typeof function f() { + }.name === "string"; + }; + var gOPD = Object.getOwnPropertyDescriptor; + if (gOPD) { + try { + gOPD([], "length"); + } catch (e) { + gOPD = null; + } + } + functionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() { + if (!functionsHaveNames() || !gOPD) { + return false; + } + var desc = gOPD(function() { + }, "name"); + return !!desc && !!desc.configurable; + }; + var $bind = Function.prototype.bind; + functionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() { + return functionsHaveNames() && typeof $bind === "function" && function f() { + }.bind().name !== ""; + }; + module2.exports = functionsHaveNames; + } +}); + +// node_modules/.pnpm/set-function-name@2.0.2/node_modules/set-function-name/index.js +var require_set_function_name = __commonJS({ + "node_modules/.pnpm/set-function-name@2.0.2/node_modules/set-function-name/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var define2 = require_define_data_property(); + var hasDescriptors = require_has_property_descriptors()(); + var functionsHaveConfigurableNames = require_functions_have_names().functionsHaveConfigurableNames(); + var $TypeError = require_type(); + module2.exports = function setFunctionName(fn, name) { + if (typeof fn !== "function") { + throw new $TypeError("`fn` is not a function"); + } + var loose = arguments.length > 2 && !!arguments[2]; + if (!loose || functionsHaveConfigurableNames) { + if (hasDescriptors) { + define2( + /** @type {Parameters[0]} */ + fn, + "name", + name, + true, + true + ); + } else { + define2( + /** @type {Parameters[0]} */ + fn, + "name", + name + ); + } + } + return fn; + }; + } +}); + +// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/implementation.js +var require_implementation4 = __commonJS({ + "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/implementation.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var setFunctionName = require_set_function_name(); + var $TypeError = require_type(); + var $Object = Object; + module2.exports = setFunctionName(function flags() { + if (this == null || this !== $Object(this)) { + throw new $TypeError("RegExp.prototype.flags getter called on non-object"); + } + var result = ""; + if (this.hasIndices) { + result += "d"; + } + if (this.global) { + result += "g"; + } + if (this.ignoreCase) { + result += "i"; + } + if (this.multiline) { + result += "m"; + } + if (this.dotAll) { + result += "s"; + } + if (this.unicode) { + result += "u"; + } + if (this.unicodeSets) { + result += "v"; + } + if (this.sticky) { + result += "y"; + } + return result; + }, "get flags", true); + } +}); + +// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/polyfill.js +var require_polyfill2 = __commonJS({ + "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/polyfill.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var implementation = require_implementation4(); + var supportsDescriptors = require_define_properties().supportsDescriptors; + var $gOPD = Object.getOwnPropertyDescriptor; + module2.exports = function getPolyfill() { + if (supportsDescriptors && /a/mig.flags === "gim") { + var descriptor = $gOPD(RegExp.prototype, "flags"); + if (descriptor && typeof descriptor.get === "function" && typeof RegExp.prototype.dotAll === "boolean" && typeof RegExp.prototype.hasIndices === "boolean") { + var calls = ""; + var o = {}; + Object.defineProperty(o, "hasIndices", { + get: function() { + calls += "d"; + } + }); + Object.defineProperty(o, "sticky", { + get: function() { + calls += "y"; + } + }); + if (calls === "dy") { + return descriptor.get; + } + } + } + return implementation; + }; + } +}); + +// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/shim.js +var require_shim2 = __commonJS({ + "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/shim.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var supportsDescriptors = require_define_properties().supportsDescriptors; + var getPolyfill = require_polyfill2(); + var gOPD = Object.getOwnPropertyDescriptor; + var defineProperty = Object.defineProperty; + var TypeErr = TypeError; + var getProto = Object.getPrototypeOf; + var regex2 = /a/; + module2.exports = function shimFlags() { + if (!supportsDescriptors || !getProto) { + throw new TypeErr("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors"); + } + var polyfill = getPolyfill(); + var proto = getProto(regex2); + var descriptor = gOPD(proto, "flags"); + if (!descriptor || descriptor.get !== polyfill) { + defineProperty(proto, "flags", { + configurable: true, + enumerable: false, + get: polyfill + }); + } + return polyfill; + }; + } +}); + +// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/index.js +var require_regexp_prototype = __commonJS({ + "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var define2 = require_define_properties(); + var callBind = require_call_bind(); + var implementation = require_implementation4(); + var getPolyfill = require_polyfill2(); + var shim = require_shim2(); + var flagsBound = callBind(getPolyfill()); + define2(flagsBound, { + getPolyfill, + implementation, + shim + }); + module2.exports = flagsBound; + } +}); + +// node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js +var require_shams2 = __commonJS({ + "node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var hasSymbols = require_shams(); + module2.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; + }; + } +}); + +// node_modules/.pnpm/is-arguments@1.1.1/node_modules/is-arguments/index.js +var require_is_arguments = __commonJS({ + "node_modules/.pnpm/is-arguments@1.1.1/node_modules/is-arguments/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var hasToStringTag = require_shams2()(); + var callBound = require_callBound(); + var $toString = callBound("Object.prototype.toString"); + var isStandardArguments = function isArguments(value) { + if (hasToStringTag && value && typeof value === "object" && Symbol.toStringTag in value) { + return false; + } + return $toString(value) === "[object Arguments]"; + }; + var isLegacyArguments = function isArguments(value) { + if (isStandardArguments(value)) { + return true; + } + return value !== null && typeof value === "object" && typeof value.length === "number" && value.length >= 0 && $toString(value) !== "[object Array]" && $toString(value.callee) === "[object Function]"; + }; + var supportsStandardArguments = function() { + return isStandardArguments(arguments); + }(); + isStandardArguments.isLegacyArguments = isLegacyArguments; + module2.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; + } +}); + +// (disabled):node_modules/.pnpm/object-inspect@1.13.2/node_modules/object-inspect/util.inspect +var require_util = __commonJS({ + "(disabled):node_modules/.pnpm/object-inspect@1.13.2/node_modules/object-inspect/util.inspect"() { + init_polyfill_buffer(); + } +}); + +// node_modules/.pnpm/object-inspect@1.13.2/node_modules/object-inspect/index.js +var require_object_inspect = __commonJS({ + "node_modules/.pnpm/object-inspect@1.13.2/node_modules/object-inspect/index.js"(exports2, module2) { + init_polyfill_buffer(); + var hasMap = typeof Map === "function" && Map.prototype; + var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, "size") : null; + var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === "function" ? mapSizeDescriptor.get : null; + var mapForEach = hasMap && Map.prototype.forEach; + var hasSet = typeof Set === "function" && Set.prototype; + var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, "size") : null; + var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === "function" ? setSizeDescriptor.get : null; + var setForEach = hasSet && Set.prototype.forEach; + var hasWeakMap = typeof WeakMap === "function" && WeakMap.prototype; + var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; + var hasWeakSet = typeof WeakSet === "function" && WeakSet.prototype; + var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; + var hasWeakRef = typeof WeakRef === "function" && WeakRef.prototype; + var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; + var booleanValueOf = Boolean.prototype.valueOf; + var objectToString2 = Object.prototype.toString; + var functionToString = Function.prototype.toString; + var $match = String.prototype.match; + var $slice = String.prototype.slice; + var $replace = String.prototype.replace; + var $toUpperCase = String.prototype.toUpperCase; + var $toLowerCase = String.prototype.toLowerCase; + var $test = RegExp.prototype.test; + var $concat = Array.prototype.concat; + var $join = Array.prototype.join; + var $arrSlice = Array.prototype.slice; + var $floor = Math.floor; + var bigIntValueOf = typeof BigInt === "function" ? BigInt.prototype.valueOf : null; + var gOPS = Object.getOwnPropertySymbols; + var symToString = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? Symbol.prototype.toString : null; + var hasShammedSymbols = typeof Symbol === "function" && typeof Symbol.iterator === "object"; + var toStringTag = typeof Symbol === "function" && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? "object" : "symbol") ? Symbol.toStringTag : null; + var isEnumerable = Object.prototype.propertyIsEnumerable; + var gPO = (typeof Reflect === "function" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(O) { + return O.__proto__; + } : null); + function addNumericSeparator(num2, str) { + if (num2 === Infinity || num2 === -Infinity || num2 !== num2 || num2 && num2 > -1e3 && num2 < 1e3 || $test.call(/e/, str)) { + return str; + } + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + if (typeof num2 === "number") { + var int = num2 < 0 ? -$floor(-num2) : $floor(num2); + if (int !== num2) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, "$&_") + "." + $replace.call($replace.call(dec, /([0-9]{3})/g, "$&_"), /_$/, ""); + } + } + return $replace.call(str, sepRegex, "$&_"); + } + var utilInspect = require_util(); + var inspectCustom = utilInspect.custom; + var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; + module2.exports = function inspect_(obj, options, depth, seen) { + var opts = options || {}; + if (has(opts, "quoteStyle") && (opts.quoteStyle !== "single" && opts.quoteStyle !== "double")) { + throw new TypeError('option "quoteStyle" must be "single" or "double"'); + } + if (has(opts, "maxStringLength") && (typeof opts.maxStringLength === "number" ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) { + throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); + } + var customInspect = has(opts, "customInspect") ? opts.customInspect : true; + if (typeof customInspect !== "boolean" && customInspect !== "symbol") { + throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`"); + } + if (has(opts, "indent") && opts.indent !== null && opts.indent !== " " && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) { + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); + } + if (has(opts, "numericSeparator") && typeof opts.numericSeparator !== "boolean") { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + var numericSeparator = opts.numericSeparator; + if (typeof obj === "undefined") { + return "undefined"; + } + if (obj === null) { + return "null"; + } + if (typeof obj === "boolean") { + return obj ? "true" : "false"; + } + if (typeof obj === "string") { + return inspectString(obj, opts); + } + if (typeof obj === "number") { + if (obj === 0) { + return Infinity / obj > 0 ? "0" : "-0"; + } + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; + } + if (typeof obj === "bigint") { + var bigIntStr = String(obj) + "n"; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; + } + var maxDepth = typeof opts.depth === "undefined" ? 5 : opts.depth; + if (typeof depth === "undefined") { + depth = 0; + } + if (depth >= maxDepth && maxDepth > 0 && typeof obj === "object") { + return isArray(obj) ? "[Array]" : "[Object]"; + } + var indent2 = getIndent(opts, depth); + if (typeof seen === "undefined") { + seen = []; + } else if (indexOf(seen, obj) >= 0) { + return "[Circular]"; + } + function inspect(value, from, noIndent) { + if (from) { + seen = $arrSlice.call(seen); + seen.push(from); + } + if (noIndent) { + var newOpts = { + depth: opts.depth + }; + if (has(opts, "quoteStyle")) { + newOpts.quoteStyle = opts.quoteStyle; + } + return inspect_(value, newOpts, depth + 1, seen); + } + return inspect_(value, opts, depth + 1, seen); + } + if (typeof obj === "function" && !isRegExp(obj)) { + var name = nameOf(obj); + var keys = arrObjKeys(obj, inspect); + return "[Function" + (name ? ": " + name : " (anonymous)") + "]" + (keys.length > 0 ? " { " + $join.call(keys, ", ") + " }" : ""); + } + if (isSymbol(obj)) { + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, "$1") : symToString.call(obj); + return typeof obj === "object" && !hasShammedSymbols ? markBoxed(symString) : symString; + } + if (isElement(obj)) { + var s = "<" + $toLowerCase.call(String(obj.nodeName)); + var attrs = obj.attributes || []; + for (var i = 0; i < attrs.length; i++) { + s += " " + attrs[i].name + "=" + wrapQuotes(quote(attrs[i].value), "double", opts); + } + s += ">"; + if (obj.childNodes && obj.childNodes.length) { + s += "..."; + } + s += ""; + return s; + } + if (isArray(obj)) { + if (obj.length === 0) { + return "[]"; + } + var xs = arrObjKeys(obj, inspect); + if (indent2 && !singleLineValues(xs)) { + return "[" + indentedJoin(xs, indent2) + "]"; + } + return "[ " + $join.call(xs, ", ") + " ]"; + } + if (isError(obj)) { + var parts = arrObjKeys(obj, inspect); + if (!("cause" in Error.prototype) && "cause" in obj && !isEnumerable.call(obj, "cause")) { + return "{ [" + String(obj) + "] " + $join.call($concat.call("[cause]: " + inspect(obj.cause), parts), ", ") + " }"; + } + if (parts.length === 0) { + return "[" + String(obj) + "]"; + } + return "{ [" + String(obj) + "] " + $join.call(parts, ", ") + " }"; + } + if (typeof obj === "object" && customInspect) { + if (inspectSymbol && typeof obj[inspectSymbol] === "function" && utilInspect) { + return utilInspect(obj, { depth: maxDepth - depth }); + } else if (customInspect !== "symbol" && typeof obj.inspect === "function") { + return obj.inspect(); + } + } + if (isMap(obj)) { + var mapParts = []; + if (mapForEach) { + mapForEach.call(obj, function(value, key2) { + mapParts.push(inspect(key2, obj, true) + " => " + inspect(value, obj)); + }); + } + return collectionOf("Map", mapSize.call(obj), mapParts, indent2); + } + if (isSet(obj)) { + var setParts = []; + if (setForEach) { + setForEach.call(obj, function(value) { + setParts.push(inspect(value, obj)); + }); + } + return collectionOf("Set", setSize.call(obj), setParts, indent2); + } + if (isWeakMap(obj)) { + return weakCollectionOf("WeakMap"); + } + if (isWeakSet(obj)) { + return weakCollectionOf("WeakSet"); + } + if (isWeakRef(obj)) { + return weakCollectionOf("WeakRef"); + } + if (isNumber(obj)) { + return markBoxed(inspect(Number(obj))); + } + if (isBigInt(obj)) { + return markBoxed(inspect(bigIntValueOf.call(obj))); + } + if (isBoolean(obj)) { + return markBoxed(booleanValueOf.call(obj)); + } + if (isString(obj)) { + return markBoxed(inspect(String(obj))); + } + if (typeof window !== "undefined" && obj === window) { + return "{ [object Window] }"; + } + if (typeof globalThis !== "undefined" && obj === globalThis || typeof global !== "undefined" && obj === global) { + return "{ [object globalThis] }"; + } + if (!isDate(obj) && !isRegExp(obj)) { + var ys = arrObjKeys(obj, inspect); + var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; + var protoTag = obj instanceof Object ? "" : "null prototype"; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? "Object" : ""; + var constructorTag = isPlainObject || typeof obj.constructor !== "function" ? "" : obj.constructor.name ? obj.constructor.name + " " : ""; + var tag2 = constructorTag + (stringTag || protoTag ? "[" + $join.call($concat.call([], stringTag || [], protoTag || []), ": ") + "] " : ""); + if (ys.length === 0) { + return tag2 + "{}"; + } + if (indent2) { + return tag2 + "{" + indentedJoin(ys, indent2) + "}"; + } + return tag2 + "{ " + $join.call(ys, ", ") + " }"; + } + return String(obj); + }; + function wrapQuotes(s, defaultStyle, opts) { + var quoteChar = (opts.quoteStyle || defaultStyle) === "double" ? '"' : "'"; + return quoteChar + s + quoteChar; + } + function quote(s) { + return $replace.call(String(s), /"/g, """); + } + function isArray(obj) { + return toStr(obj) === "[object Array]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isDate(obj) { + return toStr(obj) === "[object Date]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isRegExp(obj) { + return toStr(obj) === "[object RegExp]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isError(obj) { + return toStr(obj) === "[object Error]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isString(obj) { + return toStr(obj) === "[object String]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isNumber(obj) { + return toStr(obj) === "[object Number]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isBoolean(obj) { + return toStr(obj) === "[object Boolean]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); + } + function isSymbol(obj) { + if (hasShammedSymbols) { + return obj && typeof obj === "object" && obj instanceof Symbol; + } + if (typeof obj === "symbol") { + return true; + } + if (!obj || typeof obj !== "object" || !symToString) { + return false; + } + try { + symToString.call(obj); + return true; + } catch (e) { + } + return false; + } + function isBigInt(obj) { + if (!obj || typeof obj !== "object" || !bigIntValueOf) { + return false; + } + try { + bigIntValueOf.call(obj); + return true; + } catch (e) { + } + return false; + } + var hasOwn = Object.prototype.hasOwnProperty || function(key2) { + return key2 in this; + }; + function has(obj, key2) { + return hasOwn.call(obj, key2); + } + function toStr(obj) { + return objectToString2.call(obj); + } + function nameOf(f) { + if (f.name) { + return f.name; + } + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); + if (m) { + return m[1]; + } + return null; + } + function indexOf(xs, x) { + if (xs.indexOf) { + return xs.indexOf(x); + } + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) { + return i; + } + } + return -1; + } + function isMap(x) { + if (!mapSize || !x || typeof x !== "object") { + return false; + } + try { + mapSize.call(x); + try { + setSize.call(x); + } catch (s) { + return true; + } + return x instanceof Map; + } catch (e) { + } + return false; + } + function isWeakMap(x) { + if (!weakMapHas || !x || typeof x !== "object") { + return false; + } + try { + weakMapHas.call(x, weakMapHas); + try { + weakSetHas.call(x, weakSetHas); + } catch (s) { + return true; + } + return x instanceof WeakMap; + } catch (e) { + } + return false; + } + function isWeakRef(x) { + if (!weakRefDeref || !x || typeof x !== "object") { + return false; + } + try { + weakRefDeref.call(x); + return true; + } catch (e) { + } + return false; + } + function isSet(x) { + if (!setSize || !x || typeof x !== "object") { + return false; + } + try { + setSize.call(x); + try { + mapSize.call(x); + } catch (m) { + return true; + } + return x instanceof Set; + } catch (e) { + } + return false; + } + function isWeakSet(x) { + if (!weakSetHas || !x || typeof x !== "object") { + return false; + } + try { + weakSetHas.call(x, weakSetHas); + try { + weakMapHas.call(x, weakMapHas); + } catch (s) { + return true; + } + return x instanceof WeakSet; + } catch (e) { + } + return false; + } + function isElement(x) { + if (!x || typeof x !== "object") { + return false; + } + if (typeof HTMLElement !== "undefined" && x instanceof HTMLElement) { + return true; + } + return typeof x.nodeName === "string" && typeof x.getAttribute === "function"; + } + function inspectString(str, opts) { + if (str.length > opts.maxStringLength) { + var remaining = str.length - opts.maxStringLength; + var trailer = "... " + remaining + " more character" + (remaining > 1 ? "s" : ""); + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; + } + var s = $replace.call($replace.call(str, /(['\\])/g, "\\$1"), /[\x00-\x1f]/g, lowbyte); + return wrapQuotes(s, "single", opts); + } + function lowbyte(c) { + var n = c.charCodeAt(0); + var x = { + 8: "b", + 9: "t", + 10: "n", + 12: "f", + 13: "r" + }[n]; + if (x) { + return "\\" + x; + } + return "\\x" + (n < 16 ? "0" : "") + $toUpperCase.call(n.toString(16)); + } + function markBoxed(str) { + return "Object(" + str + ")"; + } + function weakCollectionOf(type) { + return type + " { ? }"; + } + function collectionOf(type, size, entries, indent2) { + var joinedEntries = indent2 ? indentedJoin(entries, indent2) : $join.call(entries, ", "); + return type + " (" + size + ") {" + joinedEntries + "}"; + } + function singleLineValues(xs) { + for (var i = 0; i < xs.length; i++) { + if (indexOf(xs[i], "\n") >= 0) { + return false; + } + } + return true; + } + function getIndent(opts, depth) { + var baseIndent; + if (opts.indent === " ") { + baseIndent = " "; + } else if (typeof opts.indent === "number" && opts.indent > 0) { + baseIndent = $join.call(Array(opts.indent + 1), " "); + } else { + return null; + } + return { + base: baseIndent, + prev: $join.call(Array(depth + 1), baseIndent) + }; + } + function indentedJoin(xs, indent2) { + if (xs.length === 0) { + return ""; + } + var lineJoiner = "\n" + indent2.prev + indent2.base; + return lineJoiner + $join.call(xs, "," + lineJoiner) + "\n" + indent2.prev; + } + function arrObjKeys(obj, inspect) { + var isArr = isArray(obj); + var xs = []; + if (isArr) { + xs.length = obj.length; + for (var i = 0; i < obj.length; i++) { + xs[i] = has(obj, i) ? inspect(obj[i], obj) : ""; + } + } + var syms = typeof gOPS === "function" ? gOPS(obj) : []; + var symMap; + if (hasShammedSymbols) { + symMap = {}; + for (var k = 0; k < syms.length; k++) { + symMap["$" + syms[k]] = syms[k]; + } + } + for (var key2 in obj) { + if (!has(obj, key2)) { + continue; + } + if (isArr && String(Number(key2)) === key2 && key2 < obj.length) { + continue; + } + if (hasShammedSymbols && symMap["$" + key2] instanceof Symbol) { + continue; + } else if ($test.call(/[^\w$]/, key2)) { + xs.push(inspect(key2, obj) + ": " + inspect(obj[key2], obj)); + } else { + xs.push(key2 + ": " + inspect(obj[key2], obj)); + } + } + if (typeof gOPS === "function") { + for (var j = 0; j < syms.length; j++) { + if (isEnumerable.call(obj, syms[j])) { + xs.push("[" + inspect(syms[j]) + "]: " + inspect(obj[syms[j]], obj)); + } + } + } + return xs; + } + } +}); + +// node_modules/.pnpm/side-channel@1.0.6/node_modules/side-channel/index.js +var require_side_channel = __commonJS({ + "node_modules/.pnpm/side-channel@1.0.6/node_modules/side-channel/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var callBound = require_callBound(); + var inspect = require_object_inspect(); + var $TypeError = require_type(); + var $WeakMap = GetIntrinsic("%WeakMap%", true); + var $Map = GetIntrinsic("%Map%", true); + var $weakMapGet = callBound("WeakMap.prototype.get", true); + var $weakMapSet = callBound("WeakMap.prototype.set", true); + var $weakMapHas = callBound("WeakMap.prototype.has", true); + var $mapGet = callBound("Map.prototype.get", true); + var $mapSet = callBound("Map.prototype.set", true); + var $mapHas = callBound("Map.prototype.has", true); + var listGetNode = function(list, key2) { + var prev = list; + var curr; + for (; (curr = prev.next) !== null; prev = curr) { + if (curr.key === key2) { + prev.next = curr.next; + curr.next = /** @type {NonNullable} */ + list.next; + list.next = curr; + return curr; + } + } + }; + var listGet = function(objects, key2) { + var node = listGetNode(objects, key2); + return node && node.value; + }; + var listSet = function(objects, key2, value) { + var node = listGetNode(objects, key2); + if (node) { + node.value = value; + } else { + objects.next = /** @type {import('.').ListNode} */ + { + // eslint-disable-line no-param-reassign, no-extra-parens + key: key2, + next: objects.next, + value + }; + } + }; + var listHas = function(objects, key2) { + return !!listGetNode(objects, key2); + }; + module2.exports = function getSideChannel() { + var $wm; + var $m; + var $o; + var channel = { + assert: function(key2) { + if (!channel.has(key2)) { + throw new $TypeError("Side channel does not contain " + inspect(key2)); + } + }, + get: function(key2) { + if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { + if ($wm) { + return $weakMapGet($wm, key2); + } + } else if ($Map) { + if ($m) { + return $mapGet($m, key2); + } + } else { + if ($o) { + return listGet($o, key2); + } + } + }, + has: function(key2) { + if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { + if ($wm) { + return $weakMapHas($wm, key2); + } + } else if ($Map) { + if ($m) { + return $mapHas($m, key2); + } + } else { + if ($o) { + return listHas($o, key2); + } + } + return false; + }, + set: function(key2, value) { + if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { + if (!$wm) { + $wm = new $WeakMap(); + } + $weakMapSet($wm, key2, value); + } else if ($Map) { + if (!$m) { + $m = new $Map(); + } + $mapSet($m, key2, value); + } else { + if (!$o) { + $o = { key: {}, next: null }; + } + listSet($o, key2, value); + } + } + }; + return channel; + }; + } +}); + +// node_modules/.pnpm/internal-slot@1.0.7/node_modules/internal-slot/index.js +var require_internal_slot = __commonJS({ + "node_modules/.pnpm/internal-slot@1.0.7/node_modules/internal-slot/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var hasOwn = require_hasown(); + var channel = require_side_channel()(); + var $TypeError = require_type(); + var SLOT = { + assert: function(O, slot) { + if (!O || typeof O !== "object" && typeof O !== "function") { + throw new $TypeError("`O` is not an object"); + } + if (typeof slot !== "string") { + throw new $TypeError("`slot` must be a string"); + } + channel.assert(O); + if (!SLOT.has(O, slot)) { + throw new $TypeError("`" + slot + "` is not present on `O`"); + } + }, + get: function(O, slot) { + if (!O || typeof O !== "object" && typeof O !== "function") { + throw new $TypeError("`O` is not an object"); + } + if (typeof slot !== "string") { + throw new $TypeError("`slot` must be a string"); + } + var slots = channel.get(O); + return slots && slots["$" + slot]; + }, + has: function(O, slot) { + if (!O || typeof O !== "object" && typeof O !== "function") { + throw new $TypeError("`O` is not an object"); + } + if (typeof slot !== "string") { + throw new $TypeError("`slot` must be a string"); + } + var slots = channel.get(O); + return !!slots && hasOwn(slots, "$" + slot); + }, + set: function(O, slot, V) { + if (!O || typeof O !== "object" && typeof O !== "function") { + throw new $TypeError("`O` is not an object"); + } + if (typeof slot !== "string") { + throw new $TypeError("`slot` must be a string"); + } + var slots = channel.get(O); + if (!slots) { + slots = {}; + channel.set(O, slots); + } + slots["$" + slot] = V; + } + }; + if (Object.freeze) { + Object.freeze(SLOT); + } + module2.exports = SLOT; + } +}); + +// node_modules/.pnpm/stop-iteration-iterator@1.0.0/node_modules/stop-iteration-iterator/index.js +var require_stop_iteration_iterator = __commonJS({ + "node_modules/.pnpm/stop-iteration-iterator@1.0.0/node_modules/stop-iteration-iterator/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var SLOT = require_internal_slot(); + var $SyntaxError = SyntaxError; + var $StopIteration = typeof StopIteration === "object" ? StopIteration : null; + module2.exports = function getStopIterationIterator(origIterator) { + if (!$StopIteration) { + throw new $SyntaxError("this environment lacks StopIteration"); + } + SLOT.set(origIterator, "[[Done]]", false); + var siIterator = { + next: function next() { + var iterator = SLOT.get(this, "[[Iterator]]"); + var done = SLOT.get(iterator, "[[Done]]"); + try { + return { + done, + value: done ? void 0 : iterator.next() + }; + } catch (e) { + SLOT.set(iterator, "[[Done]]", true); + if (e !== $StopIteration) { + throw e; + } + return { + done: true, + value: void 0 + }; + } + } + }; + SLOT.set(siIterator, "[[Iterator]]", origIterator); + return siIterator; + }; + } +}); + +// node_modules/.pnpm/isarray@2.0.5/node_modules/isarray/index.js +var require_isarray = __commonJS({ + "node_modules/.pnpm/isarray@2.0.5/node_modules/isarray/index.js"(exports2, module2) { + init_polyfill_buffer(); + var toString = {}.toString; + module2.exports = Array.isArray || function(arr) { + return toString.call(arr) == "[object Array]"; + }; + } +}); + +// node_modules/.pnpm/is-string@1.0.7/node_modules/is-string/index.js +var require_is_string = __commonJS({ + "node_modules/.pnpm/is-string@1.0.7/node_modules/is-string/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var strValue = String.prototype.valueOf; + var tryStringObject = function tryStringObject2(value) { + try { + strValue.call(value); + return true; + } catch (e) { + return false; + } + }; + var toStr = Object.prototype.toString; + var strClass = "[object String]"; + var hasToStringTag = require_shams2()(); + module2.exports = function isString(value) { + if (typeof value === "string") { + return true; + } + if (typeof value !== "object") { + return false; + } + return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass; + }; + } +}); + +// node_modules/.pnpm/is-map@2.0.3/node_modules/is-map/index.js +var require_is_map = __commonJS({ + "node_modules/.pnpm/is-map@2.0.3/node_modules/is-map/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $Map = typeof Map === "function" && Map.prototype ? Map : null; + var $Set = typeof Set === "function" && Set.prototype ? Set : null; + var exported; + if (!$Map) { + exported = function isMap(x) { + return false; + }; + } + var $mapHas = $Map ? Map.prototype.has : null; + var $setHas = $Set ? Set.prototype.has : null; + if (!exported && !$mapHas) { + exported = function isMap(x) { + return false; + }; + } + module2.exports = exported || function isMap(x) { + if (!x || typeof x !== "object") { + return false; + } + try { + $mapHas.call(x); + if ($setHas) { + try { + $setHas.call(x); + } catch (e) { + return true; + } + } + return x instanceof $Map; + } catch (e) { + } + return false; + }; + } +}); + +// node_modules/.pnpm/is-set@2.0.3/node_modules/is-set/index.js +var require_is_set = __commonJS({ + "node_modules/.pnpm/is-set@2.0.3/node_modules/is-set/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $Map = typeof Map === "function" && Map.prototype ? Map : null; + var $Set = typeof Set === "function" && Set.prototype ? Set : null; + var exported; + if (!$Set) { + exported = function isSet(x) { + return false; + }; + } + var $mapHas = $Map ? Map.prototype.has : null; + var $setHas = $Set ? Set.prototype.has : null; + if (!exported && !$setHas) { + exported = function isSet(x) { + return false; + }; + } + module2.exports = exported || function isSet(x) { + if (!x || typeof x !== "object") { + return false; + } + try { + $setHas.call(x); + if ($mapHas) { + try { + $mapHas.call(x); + } catch (e) { + return true; + } + } + return x instanceof $Set; + } catch (e) { + } + return false; + }; + } +}); + +// node_modules/.pnpm/es-get-iterator@1.1.3/node_modules/es-get-iterator/index.js +var require_es_get_iterator = __commonJS({ + "node_modules/.pnpm/es-get-iterator@1.1.3/node_modules/es-get-iterator/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var isArguments = require_is_arguments(); + var getStopIterationIterator = require_stop_iteration_iterator(); + if (require_has_symbols()() || require_shams()()) { + $iterator = Symbol.iterator; + module2.exports = function getIterator3(iterable) { + if (iterable != null && typeof iterable[$iterator] !== "undefined") { + return iterable[$iterator](); + } + if (isArguments(iterable)) { + return Array.prototype[$iterator].call(iterable); + } + }; + } else { + isArray = require_isarray(); + isString = require_is_string(); + GetIntrinsic = require_get_intrinsic(); + $Map = GetIntrinsic("%Map%", true); + $Set = GetIntrinsic("%Set%", true); + callBound = require_callBound(); + $arrayPush = callBound("Array.prototype.push"); + $charCodeAt = callBound("String.prototype.charCodeAt"); + $stringSlice = callBound("String.prototype.slice"); + advanceStringIndex = function advanceStringIndex2(S, index2) { + var length = S.length; + if (index2 + 1 >= length) { + return index2 + 1; + } + var first2 = $charCodeAt(S, index2); + if (first2 < 55296 || first2 > 56319) { + return index2 + 1; + } + var second = $charCodeAt(S, index2 + 1); + if (second < 56320 || second > 57343) { + return index2 + 1; + } + return index2 + 2; + }; + getArrayIterator = function getArrayIterator2(arraylike) { + var i = 0; + return { + next: function next() { + var done = i >= arraylike.length; + var value; + if (!done) { + value = arraylike[i]; + i += 1; + } + return { + done, + value + }; + } + }; + }; + getNonCollectionIterator = function getNonCollectionIterator2(iterable, noPrimordialCollections) { + if (isArray(iterable) || isArguments(iterable)) { + return getArrayIterator(iterable); + } + if (isString(iterable)) { + var i = 0; + return { + next: function next() { + var nextIndex = advanceStringIndex(iterable, i); + var value = $stringSlice(iterable, i, nextIndex); + i = nextIndex; + return { + done: nextIndex > iterable.length, + value + }; + } + }; + } + if (noPrimordialCollections && typeof iterable["_es6-shim iterator_"] !== "undefined") { + return iterable["_es6-shim iterator_"](); + } + }; + if (!$Map && !$Set) { + module2.exports = function getIterator3(iterable) { + if (iterable != null) { + return getNonCollectionIterator(iterable, true); + } + }; + } else { + isMap = require_is_map(); + isSet = require_is_set(); + $mapForEach = callBound("Map.prototype.forEach", true); + $setForEach = callBound("Set.prototype.forEach", true); + if (typeof process === "undefined" || !process.versions || !process.versions.node) { + $mapIterator = callBound("Map.prototype.iterator", true); + $setIterator = callBound("Set.prototype.iterator", true); + } + $mapAtAtIterator = callBound("Map.prototype.@@iterator", true) || callBound("Map.prototype._es6-shim iterator_", true); + $setAtAtIterator = callBound("Set.prototype.@@iterator", true) || callBound("Set.prototype._es6-shim iterator_", true); + getCollectionIterator = function getCollectionIterator2(iterable) { + if (isMap(iterable)) { + if ($mapIterator) { + return getStopIterationIterator($mapIterator(iterable)); + } + if ($mapAtAtIterator) { + return $mapAtAtIterator(iterable); + } + if ($mapForEach) { + var entries = []; + $mapForEach(iterable, function(v, k) { + $arrayPush(entries, [k, v]); + }); + return getArrayIterator(entries); + } + } + if (isSet(iterable)) { + if ($setIterator) { + return getStopIterationIterator($setIterator(iterable)); + } + if ($setAtAtIterator) { + return $setAtAtIterator(iterable); + } + if ($setForEach) { + var values = []; + $setForEach(iterable, function(v) { + $arrayPush(values, v); + }); + return getArrayIterator(values); + } + } + }; + module2.exports = function getIterator3(iterable) { + return getCollectionIterator(iterable) || getNonCollectionIterator(iterable); + }; + } + } + var $iterator; + var isArray; + var isString; + var GetIntrinsic; + var $Map; + var $Set; + var callBound; + var $arrayPush; + var $charCodeAt; + var $stringSlice; + var advanceStringIndex; + var getArrayIterator; + var getNonCollectionIterator; + var isMap; + var isSet; + var $mapForEach; + var $setForEach; + var $mapIterator; + var $setIterator; + var $mapAtAtIterator; + var $setAtAtIterator; + var getCollectionIterator; + } +}); + +// node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/implementation.js +var require_implementation5 = __commonJS({ + "node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/implementation.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var numberIsNaN = function(value) { + return value !== value; + }; + module2.exports = function is(a, b) { + if (a === 0 && b === 0) { + return 1 / a === 1 / b; + } + if (a === b) { + return true; + } + if (numberIsNaN(a) && numberIsNaN(b)) { + return true; + } + return false; + }; + } +}); + +// node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/polyfill.js +var require_polyfill3 = __commonJS({ + "node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/polyfill.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var implementation = require_implementation5(); + module2.exports = function getPolyfill() { + return typeof Object.is === "function" ? Object.is : implementation; + }; + } +}); + +// node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/shim.js +var require_shim3 = __commonJS({ + "node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/shim.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var getPolyfill = require_polyfill3(); + var define2 = require_define_properties(); + module2.exports = function shimObjectIs() { + var polyfill = getPolyfill(); + define2(Object, { is: polyfill }, { + is: function testObjectIs() { + return Object.is !== polyfill; + } + }); + return polyfill; + }; + } +}); + +// node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/index.js +var require_object_is = __commonJS({ + "node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var define2 = require_define_properties(); + var callBind = require_call_bind(); + var implementation = require_implementation5(); + var getPolyfill = require_polyfill3(); + var shim = require_shim3(); + var polyfill = callBind(getPolyfill(), Object); + define2(polyfill, { + getPolyfill, + implementation, + shim + }); + module2.exports = polyfill; + } +}); + +// node_modules/.pnpm/is-array-buffer@3.0.4/node_modules/is-array-buffer/index.js +var require_is_array_buffer = __commonJS({ + "node_modules/.pnpm/is-array-buffer@3.0.4/node_modules/is-array-buffer/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var callBind = require_call_bind(); + var callBound = require_callBound(); + var GetIntrinsic = require_get_intrinsic(); + var $ArrayBuffer = GetIntrinsic("%ArrayBuffer%", true); + var $byteLength = callBound("ArrayBuffer.prototype.byteLength", true); + var $toString = callBound("Object.prototype.toString"); + var abSlice = !!$ArrayBuffer && !$byteLength && new $ArrayBuffer(0).slice; + var $abSlice = !!abSlice && callBind(abSlice); + module2.exports = $byteLength || $abSlice ? function isArrayBuffer(obj) { + if (!obj || typeof obj !== "object") { + return false; + } + try { + if ($byteLength) { + $byteLength(obj); + } else { + $abSlice(obj, 0); + } + return true; + } catch (e) { + return false; + } + } : $ArrayBuffer ? function isArrayBuffer(obj) { + return $toString(obj) === "[object ArrayBuffer]"; + } : function isArrayBuffer(obj) { + return false; + }; + } +}); + +// node_modules/.pnpm/is-date-object@1.0.5/node_modules/is-date-object/index.js +var require_is_date_object = __commonJS({ + "node_modules/.pnpm/is-date-object@1.0.5/node_modules/is-date-object/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var getDay = Date.prototype.getDay; + var tryDateObject = function tryDateGetDayCall(value) { + try { + getDay.call(value); + return true; + } catch (e) { + return false; + } + }; + var toStr = Object.prototype.toString; + var dateClass = "[object Date]"; + var hasToStringTag = require_shams2()(); + module2.exports = function isDateObject(value) { + if (typeof value !== "object" || value === null) { + return false; + } + return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass; + }; + } +}); + +// node_modules/.pnpm/is-regex@1.1.4/node_modules/is-regex/index.js +var require_is_regex = __commonJS({ + "node_modules/.pnpm/is-regex@1.1.4/node_modules/is-regex/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var callBound = require_callBound(); + var hasToStringTag = require_shams2()(); + var has; + var $exec; + var isRegexMarker; + var badStringifier; + if (hasToStringTag) { + has = callBound("Object.prototype.hasOwnProperty"); + $exec = callBound("RegExp.prototype.exec"); + isRegexMarker = {}; + throwRegexMarker = function() { + throw isRegexMarker; + }; + badStringifier = { + toString: throwRegexMarker, + valueOf: throwRegexMarker + }; + if (typeof Symbol.toPrimitive === "symbol") { + badStringifier[Symbol.toPrimitive] = throwRegexMarker; + } + } + var throwRegexMarker; + var $toString = callBound("Object.prototype.toString"); + var gOPD = Object.getOwnPropertyDescriptor; + var regexClass = "[object RegExp]"; + module2.exports = hasToStringTag ? function isRegex(value) { + if (!value || typeof value !== "object") { + return false; + } + var descriptor = gOPD(value, "lastIndex"); + var hasLastIndexDataProperty = descriptor && has(descriptor, "value"); + if (!hasLastIndexDataProperty) { + return false; + } + try { + $exec(value, badStringifier); + } catch (e) { + return e === isRegexMarker; + } + } : function isRegex(value) { + if (!value || typeof value !== "object" && typeof value !== "function") { + return false; + } + return $toString(value) === regexClass; + }; + } +}); + +// node_modules/.pnpm/is-shared-array-buffer@1.0.3/node_modules/is-shared-array-buffer/index.js +var require_is_shared_array_buffer = __commonJS({ + "node_modules/.pnpm/is-shared-array-buffer@1.0.3/node_modules/is-shared-array-buffer/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var callBound = require_callBound(); + var $byteLength = callBound("SharedArrayBuffer.prototype.byteLength", true); + module2.exports = $byteLength ? function isSharedArrayBuffer(obj) { + if (!obj || typeof obj !== "object") { + return false; + } + try { + $byteLength(obj); + return true; + } catch (e) { + return false; + } + } : function isSharedArrayBuffer(obj) { + return false; + }; + } +}); + +// node_modules/.pnpm/is-number-object@1.0.7/node_modules/is-number-object/index.js +var require_is_number_object = __commonJS({ + "node_modules/.pnpm/is-number-object@1.0.7/node_modules/is-number-object/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var numToStr = Number.prototype.toString; + var tryNumberObject = function tryNumberObject2(value) { + try { + numToStr.call(value); + return true; + } catch (e) { + return false; + } + }; + var toStr = Object.prototype.toString; + var numClass = "[object Number]"; + var hasToStringTag = require_shams2()(); + module2.exports = function isNumberObject(value) { + if (typeof value === "number") { + return true; + } + if (typeof value !== "object") { + return false; + } + return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass; + }; + } +}); + +// node_modules/.pnpm/is-boolean-object@1.1.2/node_modules/is-boolean-object/index.js +var require_is_boolean_object = __commonJS({ + "node_modules/.pnpm/is-boolean-object@1.1.2/node_modules/is-boolean-object/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var callBound = require_callBound(); + var $boolToStr = callBound("Boolean.prototype.toString"); + var $toString = callBound("Object.prototype.toString"); + var tryBooleanObject = function booleanBrandCheck(value) { + try { + $boolToStr(value); + return true; + } catch (e) { + return false; + } + }; + var boolClass = "[object Boolean]"; + var hasToStringTag = require_shams2()(); + module2.exports = function isBoolean(value) { + if (typeof value === "boolean") { + return true; + } + if (value === null || typeof value !== "object") { + return false; + } + return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass; + }; + } +}); + +// node_modules/.pnpm/is-symbol@1.0.4/node_modules/is-symbol/index.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/is-symbol@1.0.4/node_modules/is-symbol/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var toStr = Object.prototype.toString; + var hasSymbols = require_has_symbols()(); + if (hasSymbols) { + symToStr = Symbol.prototype.toString; + symStringRegex = /^Symbol\(.*\)$/; + isSymbolObject = function isRealSymbolObject(value) { + if (typeof value.valueOf() !== "symbol") { + return false; + } + return symStringRegex.test(symToStr.call(value)); + }; + module2.exports = function isSymbol(value) { + if (typeof value === "symbol") { + return true; + } + if (toStr.call(value) !== "[object Symbol]") { + return false; + } + try { + return isSymbolObject(value); + } catch (e) { + return false; + } + }; + } else { + module2.exports = function isSymbol(value) { + return false; + }; + } + var symToStr; + var symStringRegex; + var isSymbolObject; + } +}); + +// node_modules/.pnpm/has-bigints@1.0.2/node_modules/has-bigints/index.js +var require_has_bigints = __commonJS({ + "node_modules/.pnpm/has-bigints@1.0.2/node_modules/has-bigints/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $BigInt = typeof BigInt !== "undefined" && BigInt; + module2.exports = function hasNativeBigInts() { + return typeof $BigInt === "function" && typeof BigInt === "function" && typeof $BigInt(42) === "bigint" && typeof BigInt(42) === "bigint"; + }; + } +}); + +// node_modules/.pnpm/is-bigint@1.0.4/node_modules/is-bigint/index.js +var require_is_bigint = __commonJS({ + "node_modules/.pnpm/is-bigint@1.0.4/node_modules/is-bigint/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var hasBigInts = require_has_bigints()(); + if (hasBigInts) { + bigIntValueOf = BigInt.prototype.valueOf; + tryBigInt = function tryBigIntObject(value) { + try { + bigIntValueOf.call(value); + return true; + } catch (e) { + } + return false; + }; + module2.exports = function isBigInt(value) { + if (value === null || typeof value === "undefined" || typeof value === "boolean" || typeof value === "string" || typeof value === "number" || typeof value === "symbol" || typeof value === "function") { + return false; + } + if (typeof value === "bigint") { + return true; + } + return tryBigInt(value); + }; + } else { + module2.exports = function isBigInt(value) { + return false; + }; + } + var bigIntValueOf; + var tryBigInt; + } +}); + +// node_modules/.pnpm/which-boxed-primitive@1.0.2/node_modules/which-boxed-primitive/index.js +var require_which_boxed_primitive = __commonJS({ + "node_modules/.pnpm/which-boxed-primitive@1.0.2/node_modules/which-boxed-primitive/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var isString = require_is_string(); + var isNumber = require_is_number_object(); + var isBoolean = require_is_boolean_object(); + var isSymbol = require_is_symbol(); + var isBigInt = require_is_bigint(); + module2.exports = function whichBoxedPrimitive(value) { + if (value == null || typeof value !== "object" && typeof value !== "function") { + return null; + } + if (isString(value)) { + return "String"; + } + if (isNumber(value)) { + return "Number"; + } + if (isBoolean(value)) { + return "Boolean"; + } + if (isSymbol(value)) { + return "Symbol"; + } + if (isBigInt(value)) { + return "BigInt"; + } + }; + } +}); + +// node_modules/.pnpm/is-weakmap@2.0.2/node_modules/is-weakmap/index.js +var require_is_weakmap = __commonJS({ + "node_modules/.pnpm/is-weakmap@2.0.2/node_modules/is-weakmap/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var $WeakMap = typeof WeakMap === "function" && WeakMap.prototype ? WeakMap : null; + var $WeakSet = typeof WeakSet === "function" && WeakSet.prototype ? WeakSet : null; + var exported; + if (!$WeakMap) { + exported = function isWeakMap(x) { + return false; + }; + } + var $mapHas = $WeakMap ? $WeakMap.prototype.has : null; + var $setHas = $WeakSet ? $WeakSet.prototype.has : null; + if (!exported && !$mapHas) { + exported = function isWeakMap(x) { + return false; + }; + } + module2.exports = exported || function isWeakMap(x) { + if (!x || typeof x !== "object") { + return false; + } + try { + $mapHas.call(x, $mapHas); + if ($setHas) { + try { + $setHas.call(x, $setHas); + } catch (e) { + return true; + } + } + return x instanceof $WeakMap; + } catch (e) { + } + return false; + }; + } +}); + +// node_modules/.pnpm/is-weakset@2.0.3/node_modules/is-weakset/index.js +var require_is_weakset = __commonJS({ + "node_modules/.pnpm/is-weakset@2.0.3/node_modules/is-weakset/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var GetIntrinsic = require_get_intrinsic(); + var callBound = require_callBound(); + var $WeakSet = GetIntrinsic("%WeakSet%", true); + var $setHas = callBound("WeakSet.prototype.has", true); + if ($setHas) { + $mapHas = callBound("WeakMap.prototype.has", true); + module2.exports = function isWeakSet(x) { + if (!x || typeof x !== "object") { + return false; + } + try { + $setHas(x, $setHas); + if ($mapHas) { + try { + $mapHas(x, $mapHas); + } catch (e) { + return true; + } + } + return x instanceof $WeakSet; + } catch (e) { + } + return false; + }; + } else { + module2.exports = function isWeakSet(x) { + return false; + }; + } + var $mapHas; + } +}); + +// node_modules/.pnpm/which-collection@1.0.2/node_modules/which-collection/index.js +var require_which_collection = __commonJS({ + "node_modules/.pnpm/which-collection@1.0.2/node_modules/which-collection/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var isMap = require_is_map(); + var isSet = require_is_set(); + var isWeakMap = require_is_weakmap(); + var isWeakSet = require_is_weakset(); + module2.exports = function whichCollection(value) { + if (value && typeof value === "object") { + if (isMap(value)) { + return "Map"; + } + if (isSet(value)) { + return "Set"; + } + if (isWeakMap(value)) { + return "WeakMap"; + } + if (isWeakSet(value)) { + return "WeakSet"; + } + } + return false; + }; + } +}); + +// node_modules/.pnpm/is-callable@1.2.7/node_modules/is-callable/index.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/is-callable@1.2.7/node_modules/is-callable/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var fnToStr = Function.prototype.toString; + var reflectApply = typeof Reflect === "object" && Reflect !== null && Reflect.apply; + var badArrayLike; + var isCallableMarker; + if (typeof reflectApply === "function" && typeof Object.defineProperty === "function") { + try { + badArrayLike = Object.defineProperty({}, "length", { + get: function() { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + reflectApply(function() { + throw 42; + }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } + } else { + reflectApply = null; + } + var constructorRegex = /^\s*class\b/; + var isES6ClassFn = function isES6ClassFunction(value) { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; + } + }; + var tryFunctionObject = function tryFunctionToStr(value) { + try { + if (isES6ClassFn(value)) { + return false; + } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } + }; + var toStr = Object.prototype.toString; + var objectClass = "[object Object]"; + var fnClass = "[object Function]"; + var genClass = "[object GeneratorFunction]"; + var ddaClass = "[object HTMLAllCollection]"; + var ddaClass2 = "[object HTML document.all class]"; + var ddaClass3 = "[object HTMLCollection]"; + var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag; + var isIE68 = !(0 in [,]); + var isDDA = function isDocumentDotAll() { + return false; + }; + if (typeof document === "object") { + all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll(value) { + if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) { + try { + var str = toStr.call(value); + return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null; + } catch (e) { + } + } + return false; + }; + } + } + var all; + module2.exports = reflectApply ? function isCallable(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + try { + reflectApply(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { + return false; + } + } + return !isES6ClassFn(value) && tryFunctionObject(value); + } : function isCallable(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + if (hasToStringTag) { + return tryFunctionObject(value); + } + if (isES6ClassFn(value)) { + return false; + } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) { + return false; + } + return tryFunctionObject(value); + }; + } +}); + +// node_modules/.pnpm/for-each@0.3.3/node_modules/for-each/index.js +var require_for_each = __commonJS({ + "node_modules/.pnpm/for-each@0.3.3/node_modules/for-each/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var isCallable = require_is_callable(); + var toStr = Object.prototype.toString; + var hasOwnProperty = Object.prototype.hasOwnProperty; + var forEachArray = function forEachArray2(array, iterator, receiver) { + for (var i = 0, len = array.length; i < len; i++) { + if (hasOwnProperty.call(array, i)) { + if (receiver == null) { + iterator(array[i], i, array); + } else { + iterator.call(receiver, array[i], i, array); + } + } + } + }; + var forEachString = function forEachString2(string, iterator, receiver) { + for (var i = 0, len = string.length; i < len; i++) { + if (receiver == null) { + iterator(string.charAt(i), i, string); + } else { + iterator.call(receiver, string.charAt(i), i, string); + } + } + }; + var forEachObject = function forEachObject2(object, iterator, receiver) { + for (var k in object) { + if (hasOwnProperty.call(object, k)) { + if (receiver == null) { + iterator(object[k], k, object); + } else { + iterator.call(receiver, object[k], k, object); + } + } + } + }; + var forEach2 = function forEach3(list, iterator, thisArg) { + if (!isCallable(iterator)) { + throw new TypeError("iterator must be a function"); + } + var receiver; + if (arguments.length >= 3) { + receiver = thisArg; + } + if (toStr.call(list) === "[object Array]") { + forEachArray(list, iterator, receiver); + } else if (typeof list === "string") { + forEachString(list, iterator, receiver); + } else { + forEachObject(list, iterator, receiver); + } + }; + module2.exports = forEach2; + } +}); + +// node_modules/.pnpm/possible-typed-array-names@1.0.0/node_modules/possible-typed-array-names/index.js +var require_possible_typed_array_names = __commonJS({ + "node_modules/.pnpm/possible-typed-array-names@1.0.0/node_modules/possible-typed-array-names/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + module2.exports = [ + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "BigInt64Array", + "BigUint64Array" + ]; + } +}); + +// node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js +var require_available_typed_arrays = __commonJS({ + "node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var possibleNames = require_possible_typed_array_names(); + var g = typeof globalThis === "undefined" ? global : globalThis; + module2.exports = function availableTypedArrays() { + var out = []; + for (var i = 0; i < possibleNames.length; i++) { + if (typeof g[possibleNames[i]] === "function") { + out[out.length] = possibleNames[i]; + } + } + return out; + }; + } +}); + +// node_modules/.pnpm/which-typed-array@1.1.15/node_modules/which-typed-array/index.js +var require_which_typed_array = __commonJS({ + "node_modules/.pnpm/which-typed-array@1.1.15/node_modules/which-typed-array/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var forEach2 = require_for_each(); + var availableTypedArrays = require_available_typed_arrays(); + var callBind = require_call_bind(); + var callBound = require_callBound(); + var gOPD = require_gopd(); + var $toString = callBound("Object.prototype.toString"); + var hasToStringTag = require_shams2()(); + var g = typeof globalThis === "undefined" ? global : globalThis; + var typedArrays = availableTypedArrays(); + var $slice = callBound("String.prototype.slice"); + var getPrototypeOf = Object.getPrototypeOf; + var $indexOf = callBound("Array.prototype.indexOf", true) || function indexOf(array, value) { + for (var i = 0; i < array.length; i += 1) { + if (array[i] === value) { + return i; + } + } + return -1; + }; + var cache = { __proto__: null }; + if (hasToStringTag && gOPD && getPrototypeOf) { + forEach2(typedArrays, function(typedArray) { + var arr = new g[typedArray](); + if (Symbol.toStringTag in arr) { + var proto = getPrototypeOf(arr); + var descriptor = gOPD(proto, Symbol.toStringTag); + if (!descriptor) { + var superProto = getPrototypeOf(proto); + descriptor = gOPD(superProto, Symbol.toStringTag); + } + cache["$" + typedArray] = callBind(descriptor.get); + } + }); + } else { + forEach2(typedArrays, function(typedArray) { + var arr = new g[typedArray](); + var fn = arr.slice || arr.set; + if (fn) { + cache["$" + typedArray] = callBind(fn); + } + }); + } + var tryTypedArrays = function tryAllTypedArrays(value) { + var found = false; + forEach2( + // eslint-disable-next-line no-extra-parens + /** @type {Record<`\$${TypedArrayName}`, Getter>} */ + /** @type {any} */ + cache, + /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ + function(getter, typedArray) { + if (!found) { + try { + if ("$" + getter(value) === typedArray) { + found = $slice(typedArray, 1); + } + } catch (e) { + } + } + } + ); + return found; + }; + var trySlices = function tryAllSlices(value) { + var found = false; + forEach2( + // eslint-disable-next-line no-extra-parens + /** @type {Record<`\$${TypedArrayName}`, Getter>} */ + /** @type {any} */ + cache, + /** @type {(getter: typeof cache, name: `\$${import('.').TypedArrayName}`) => void} */ + function(getter, name) { + if (!found) { + try { + getter(value); + found = $slice(name, 1); + } catch (e) { + } + } + } + ); + return found; + }; + module2.exports = function whichTypedArray(value) { + if (!value || typeof value !== "object") { + return false; + } + if (!hasToStringTag) { + var tag2 = $slice($toString(value), 8, -1); + if ($indexOf(typedArrays, tag2) > -1) { + return tag2; + } + if (tag2 !== "Object") { + return false; + } + return trySlices(value); + } + if (!gOPD) { + return null; + } + return tryTypedArrays(value); + }; + } +}); + +// node_modules/.pnpm/array-buffer-byte-length@1.0.1/node_modules/array-buffer-byte-length/index.js +var require_array_buffer_byte_length = __commonJS({ + "node_modules/.pnpm/array-buffer-byte-length@1.0.1/node_modules/array-buffer-byte-length/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var callBound = require_callBound(); + var $byteLength = callBound("ArrayBuffer.prototype.byteLength", true); + var isArrayBuffer = require_is_array_buffer(); + module2.exports = function byteLength(ab) { + if (!isArrayBuffer(ab)) { + return NaN; + } + return $byteLength ? $byteLength(ab) : ab.byteLength; + }; + } +}); + +// node_modules/.pnpm/deep-equal@2.2.3/node_modules/deep-equal/index.js +var require_deep_equal = __commonJS({ + "node_modules/.pnpm/deep-equal@2.2.3/node_modules/deep-equal/index.js"(exports2, module2) { + "use strict"; + init_polyfill_buffer(); + var assign2 = require_object(); + var callBound = require_callBound(); + var flags = require_regexp_prototype(); + var GetIntrinsic = require_get_intrinsic(); + var getIterator3 = require_es_get_iterator(); + var getSideChannel = require_side_channel(); + var is = require_object_is(); + var isArguments = require_is_arguments(); + var isArray = require_isarray(); + var isArrayBuffer = require_is_array_buffer(); + var isDate = require_is_date_object(); + var isRegex = require_is_regex(); + var isSharedArrayBuffer = require_is_shared_array_buffer(); + var objectKeys = require_object_keys(); + var whichBoxedPrimitive = require_which_boxed_primitive(); + var whichCollection = require_which_collection(); + var whichTypedArray = require_which_typed_array(); + var byteLength = require_array_buffer_byte_length(); + var sabByteLength = callBound("SharedArrayBuffer.prototype.byteLength", true); + var $getTime = callBound("Date.prototype.getTime"); + var gPO = Object.getPrototypeOf; + var $objToString = callBound("Object.prototype.toString"); + var $Set = GetIntrinsic("%Set%", true); + var $mapHas = callBound("Map.prototype.has", true); + var $mapGet = callBound("Map.prototype.get", true); + var $mapSize = callBound("Map.prototype.size", true); + var $setAdd = callBound("Set.prototype.add", true); + var $setDelete = callBound("Set.prototype.delete", true); + var $setHas = callBound("Set.prototype.has", true); + var $setSize = callBound("Set.prototype.size", true); + function setHasEqualElement(set, val1, opts, channel) { + var i = getIterator3(set); + var result; + while ((result = i.next()) && !result.done) { + if (internalDeepEqual(val1, result.value, opts, channel)) { + $setDelete(set, result.value); + return true; + } + } + return false; + } + function findLooseMatchingPrimitives(prim) { + if (typeof prim === "undefined") { + return null; + } + if (typeof prim === "object") { + return void 0; + } + if (typeof prim === "symbol") { + return false; + } + if (typeof prim === "string" || typeof prim === "number") { + return +prim === +prim; + } + return true; + } + function mapMightHaveLoosePrim(a, b, prim, item, opts, channel) { + var altValue = findLooseMatchingPrimitives(prim); + if (altValue != null) { + return altValue; + } + var curB = $mapGet(b, altValue); + var looseOpts = assign2({}, opts, { strict: false }); + if (typeof curB === "undefined" && !$mapHas(b, altValue) || !internalDeepEqual(item, curB, looseOpts, channel)) { + return false; + } + return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel); + } + function setMightHaveLoosePrim(a, b, prim) { + var altValue = findLooseMatchingPrimitives(prim); + if (altValue != null) { + return altValue; + } + return $setHas(b, altValue) && !$setHas(a, altValue); + } + function mapHasEqualEntry(set, map, key1, item1, opts, channel) { + var i = getIterator3(set); + var result; + var key2; + while ((result = i.next()) && !result.done) { + key2 = result.value; + if ( + // eslint-disable-next-line no-use-before-define + internalDeepEqual(key1, key2, opts, channel) && internalDeepEqual(item1, $mapGet(map, key2), opts, channel) + ) { + $setDelete(set, key2); + return true; + } + } + return false; + } + function internalDeepEqual(actual, expected, options, channel) { + var opts = options || {}; + if (opts.strict ? is(actual, expected) : actual === expected) { + return true; + } + var actualBoxed = whichBoxedPrimitive(actual); + var expectedBoxed = whichBoxedPrimitive(expected); + if (actualBoxed !== expectedBoxed) { + return false; + } + if (!actual || !expected || typeof actual !== "object" && typeof expected !== "object") { + return opts.strict ? is(actual, expected) : actual == expected; + } + var hasActual = channel.has(actual); + var hasExpected = channel.has(expected); + var sentinel; + if (hasActual && hasExpected) { + if (channel.get(actual) === channel.get(expected)) { + return true; + } + } else { + sentinel = {}; + } + if (!hasActual) { + channel.set(actual, sentinel); + } + if (!hasExpected) { + channel.set(expected, sentinel); + } + return objEquiv(actual, expected, opts, channel); + } + function isBuffer(x) { + if (!x || typeof x !== "object" || typeof x.length !== "number") { + return false; + } + if (typeof x.copy !== "function" || typeof x.slice !== "function") { + return false; + } + if (x.length > 0 && typeof x[0] !== "number") { + return false; + } + return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x)); + } + function setEquiv(a, b, opts, channel) { + if ($setSize(a) !== $setSize(b)) { + return false; + } + var iA = getIterator3(a); + var iB = getIterator3(b); + var resultA; + var resultB; + var set; + while ((resultA = iA.next()) && !resultA.done) { + if (resultA.value && typeof resultA.value === "object") { + if (!set) { + set = new $Set(); + } + $setAdd(set, resultA.value); + } else if (!$setHas(b, resultA.value)) { + if (opts.strict) { + return false; + } + if (!setMightHaveLoosePrim(a, b, resultA.value)) { + return false; + } + if (!set) { + set = new $Set(); + } + $setAdd(set, resultA.value); + } + } + if (set) { + while ((resultB = iB.next()) && !resultB.done) { + if (resultB.value && typeof resultB.value === "object") { + if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) { + return false; + } + } else if (!opts.strict && !$setHas(a, resultB.value) && !setHasEqualElement(set, resultB.value, opts.strict, channel)) { + return false; + } + } + return $setSize(set) === 0; + } + return true; + } + function mapEquiv(a, b, opts, channel) { + if ($mapSize(a) !== $mapSize(b)) { + return false; + } + var iA = getIterator3(a); + var iB = getIterator3(b); + var resultA; + var resultB; + var set; + var key2; + var item1; + var item2; + while ((resultA = iA.next()) && !resultA.done) { + key2 = resultA.value[0]; + item1 = resultA.value[1]; + if (key2 && typeof key2 === "object") { + if (!set) { + set = new $Set(); + } + $setAdd(set, key2); + } else { + item2 = $mapGet(b, key2); + if (typeof item2 === "undefined" && !$mapHas(b, key2) || !internalDeepEqual(item1, item2, opts, channel)) { + if (opts.strict) { + return false; + } + if (!mapMightHaveLoosePrim(a, b, key2, item1, opts, channel)) { + return false; + } + if (!set) { + set = new $Set(); + } + $setAdd(set, key2); + } + } + } + if (set) { + while ((resultB = iB.next()) && !resultB.done) { + key2 = resultB.value[0]; + item2 = resultB.value[1]; + if (key2 && typeof key2 === "object") { + if (!mapHasEqualEntry(set, a, key2, item2, opts, channel)) { + return false; + } + } else if (!opts.strict && (!a.has(key2) || !internalDeepEqual($mapGet(a, key2), item2, opts, channel)) && !mapHasEqualEntry(set, a, key2, item2, assign2({}, opts, { strict: false }), channel)) { + return false; + } + } + return $setSize(set) === 0; + } + return true; + } + function objEquiv(a, b, opts, channel) { + var i, key2; + if (typeof a !== typeof b) { + return false; + } + if (a == null || b == null) { + return false; + } + if ($objToString(a) !== $objToString(b)) { + return false; + } + if (isArguments(a) !== isArguments(b)) { + return false; + } + var aIsArray = isArray(a); + var bIsArray = isArray(b); + if (aIsArray !== bIsArray) { + return false; + } + var aIsError = a instanceof Error; + var bIsError = b instanceof Error; + if (aIsError !== bIsError) { + return false; + } + if (aIsError || bIsError) { + if (a.name !== b.name || a.message !== b.message) { + return false; + } + } + var aIsRegex = isRegex(a); + var bIsRegex = isRegex(b); + if (aIsRegex !== bIsRegex) { + return false; + } + if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) { + return false; + } + var aIsDate = isDate(a); + var bIsDate = isDate(b); + if (aIsDate !== bIsDate) { + return false; + } + if (aIsDate || bIsDate) { + if ($getTime(a) !== $getTime(b)) { + return false; + } + } + if (opts.strict && gPO && gPO(a) !== gPO(b)) { + return false; + } + var aWhich = whichTypedArray(a); + var bWhich = whichTypedArray(b); + if (aWhich !== bWhich) { + return false; + } + if (aWhich || bWhich) { + if (a.length !== b.length) { + return false; + } + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + } + var aIsBuffer = isBuffer(a); + var bIsBuffer = isBuffer(b); + if (aIsBuffer !== bIsBuffer) { + return false; + } + if (aIsBuffer || bIsBuffer) { + if (a.length !== b.length) { + return false; + } + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + } + var aIsArrayBuffer = isArrayBuffer(a); + var bIsArrayBuffer = isArrayBuffer(b); + if (aIsArrayBuffer !== bIsArrayBuffer) { + return false; + } + if (aIsArrayBuffer || bIsArrayBuffer) { + if (byteLength(a) !== byteLength(b)) { + return false; + } + return typeof Uint8Array === "function" && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); + } + var aIsSAB = isSharedArrayBuffer(a); + var bIsSAB = isSharedArrayBuffer(b); + if (aIsSAB !== bIsSAB) { + return false; + } + if (aIsSAB || bIsSAB) { + if (sabByteLength(a) !== sabByteLength(b)) { + return false; + } + return typeof Uint8Array === "function" && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); + } + if (typeof a !== typeof b) { + return false; + } + var ka = objectKeys(a); + var kb = objectKeys(b); + if (ka.length !== kb.length) { + return false; + } + ka.sort(); + kb.sort(); + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) { + return false; + } + } + for (i = ka.length - 1; i >= 0; i--) { + key2 = ka[i]; + if (!internalDeepEqual(a[key2], b[key2], opts, channel)) { + return false; + } + } + var aCollection = whichCollection(a); + var bCollection = whichCollection(b); + if (aCollection !== bCollection) { + return false; + } + if (aCollection === "Set" || bCollection === "Set") { + return setEquiv(a, b, opts, channel); + } + if (aCollection === "Map") { + return mapEquiv(a, b, opts, channel); + } + return true; + } + module2.exports = function deepEqual2(a, b, opts) { + return internalDeepEqual(a, b, opts, getSideChannel()); + }; + } +}); + +// node_modules/.pnpm/js-sha256@0.9.0/node_modules/js-sha256/src/sha256.js +var require_sha256 = __commonJS({ + "node_modules/.pnpm/js-sha256@0.9.0/node_modules/js-sha256/src/sha256.js"(exports, module) { + init_polyfill_buffer(); + (function() { + "use strict"; + var ERROR = "input is invalid type"; + var WINDOW = typeof window === "object"; + var root = WINDOW ? window : {}; + if (root.JS_SHA256_NO_WINDOW) { + WINDOW = false; + } + var WEB_WORKER = !WINDOW && typeof self === "object"; + var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node; + if (NODE_JS) { + root = global; + } else if (WEB_WORKER) { + root = self; + } + var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === "object" && module.exports; + var AMD = typeof define === "function" && define.amd; + var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined"; + var HEX_CHARS = "0123456789abcdef".split(""); + var EXTRA = [-2147483648, 8388608, 32768, 128]; + var SHIFT = [24, 16, 8, 0]; + var K = [ + 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 + ]; + var OUTPUT_TYPES = ["hex", "array", "digest", "arrayBuffer"]; + var blocks = []; + if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) { + Array.isArray = function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + } + if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { + ArrayBuffer.isView = function(obj) { + return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer; + }; + } + var createOutputMethod = function(outputType, is2242) { + return function(message) { + return new Sha256(is2242, true).update(message)[outputType](); + }; + }; + var createMethod = function(is2242) { + var method2 = createOutputMethod("hex", is2242); + if (NODE_JS) { + method2 = nodeWrap(method2, is2242); + } + method2.create = function() { + return new Sha256(is2242); + }; + method2.update = function(message) { + return method2.create().update(message); + }; + for (var i = 0; i < OUTPUT_TYPES.length; ++i) { + var type = OUTPUT_TYPES[i]; + method2[type] = createOutputMethod(type, is2242); + } + return method2; + }; + var nodeWrap = function(method, is224) { + var crypto = eval("require('crypto')"); + var Buffer = eval("require('buffer').Buffer"); + var algorithm = is224 ? "sha224" : "sha256"; + var nodeMethod = function(message) { + if (typeof message === "string") { + return crypto.createHash(algorithm).update(message, "utf8").digest("hex"); + } else { + if (message === null || message === void 0) { + throw new Error(ERROR); + } else if (message.constructor === ArrayBuffer) { + message = new Uint8Array(message); + } + } + if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) { + return crypto.createHash(algorithm).update(new Buffer(message)).digest("hex"); + } else { + return method(message); + } + }; + return nodeMethod; + }; + var createHmacOutputMethod = function(outputType, is2242) { + return function(key2, message) { + return new HmacSha256(key2, is2242, true).update(message)[outputType](); + }; + }; + var createHmacMethod = function(is2242) { + var method2 = createHmacOutputMethod("hex", is2242); + method2.create = function(key2) { + return new HmacSha256(key2, is2242); + }; + method2.update = function(key2, message) { + return method2.create(key2).update(message); + }; + for (var i = 0; i < OUTPUT_TYPES.length; ++i) { + var type = OUTPUT_TYPES[i]; + method2[type] = createHmacOutputMethod(type, is2242); + } + return method2; + }; + function Sha256(is2242, sharedMemory) { + if (sharedMemory) { + blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; + this.blocks = blocks; + } else { + this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + } + if (is2242) { + this.h0 = 3238371032; + this.h1 = 914150663; + this.h2 = 812702999; + this.h3 = 4144912697; + this.h4 = 4290775857; + this.h5 = 1750603025; + this.h6 = 1694076839; + this.h7 = 3204075428; + } else { + this.h0 = 1779033703; + this.h1 = 3144134277; + this.h2 = 1013904242; + this.h3 = 2773480762; + this.h4 = 1359893119; + this.h5 = 2600822924; + this.h6 = 528734635; + this.h7 = 1541459225; + } + this.block = this.start = this.bytes = this.hBytes = 0; + this.finalized = this.hashed = false; + this.first = true; + this.is224 = is2242; + } + Sha256.prototype.update = function(message) { + if (this.finalized) { + return; + } + var notString, type = typeof message; + if (type !== "string") { + if (type === "object") { + if (message === null) { + throw new Error(ERROR); + } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { + message = new Uint8Array(message); + } else if (!Array.isArray(message)) { + if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) { + throw new Error(ERROR); + } + } + } else { + throw new Error(ERROR); + } + notString = true; + } + var code, index2 = 0, i, length = message.length, blocks2 = this.blocks; + while (index2 < length) { + if (this.hashed) { + this.hashed = false; + blocks2[0] = this.block; + blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; + } + if (notString) { + for (i = this.start; index2 < length && i < 64; ++index2) { + blocks2[i >> 2] |= message[index2] << SHIFT[i++ & 3]; + } + } else { + for (i = this.start; index2 < length && i < 64; ++index2) { + code = message.charCodeAt(index2); + if (code < 128) { + blocks2[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 2048) { + blocks2[i >> 2] |= (192 | code >> 6) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; + } else if (code < 55296 || code >= 57344) { + blocks2[i >> 2] |= (224 | code >> 12) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code >> 6 & 63) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; + } else { + code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index2) & 1023); + blocks2[i >> 2] |= (240 | code >> 18) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code >> 12 & 63) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code >> 6 & 63) << SHIFT[i++ & 3]; + blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; + } + } + } + this.lastByteIndex = i; + this.bytes += i - this.start; + if (i >= 64) { + this.block = blocks2[16]; + this.start = i - 64; + this.hash(); + this.hashed = true; + } else { + this.start = i; + } + } + if (this.bytes > 4294967295) { + this.hBytes += this.bytes / 4294967296 << 0; + this.bytes = this.bytes % 4294967296; + } + return this; + }; + Sha256.prototype.finalize = function() { + if (this.finalized) { + return; + } + this.finalized = true; + var blocks2 = this.blocks, i = this.lastByteIndex; + blocks2[16] = this.block; + blocks2[i >> 2] |= EXTRA[i & 3]; + this.block = blocks2[16]; + if (i >= 56) { + if (!this.hashed) { + this.hash(); + } + blocks2[0] = this.block; + blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; + } + blocks2[14] = this.hBytes << 3 | this.bytes >>> 29; + blocks2[15] = this.bytes << 3; + this.hash(); + }; + Sha256.prototype.hash = function() { + var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, h = this.h7, blocks2 = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc; + for (j = 16; j < 64; ++j) { + t1 = blocks2[j - 15]; + s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3; + t1 = blocks2[j - 2]; + s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10; + blocks2[j] = blocks2[j - 16] + s0 + blocks2[j - 7] + s1 << 0; + } + bc = b & c; + for (j = 0; j < 64; j += 4) { + if (this.first) { + if (this.is224) { + ab = 300032; + t1 = blocks2[0] - 1413257819; + h = t1 - 150054599 << 0; + d = t1 + 24177077 << 0; + } else { + ab = 704751109; + t1 = blocks2[0] - 210244248; + h = t1 - 1521486534 << 0; + d = t1 + 143694565 << 0; + } + this.first = false; + } else { + s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10); + s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7); + ab = a & b; + maj = ab ^ a & c ^ bc; + ch = e & f ^ ~e & g; + t1 = h + s1 + ch + K[j] + blocks2[j]; + t2 = s0 + maj; + h = d + t1 << 0; + d = t1 + t2 << 0; + } + s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10); + s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7); + da = d & a; + maj = da ^ d & b ^ ab; + ch = h & e ^ ~h & f; + t1 = g + s1 + ch + K[j + 1] + blocks2[j + 1]; + t2 = s0 + maj; + g = c + t1 << 0; + c = t1 + t2 << 0; + s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10); + s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7); + cd = c & d; + maj = cd ^ c & a ^ da; + ch = g & h ^ ~g & e; + t1 = f + s1 + ch + K[j + 2] + blocks2[j + 2]; + t2 = s0 + maj; + f = b + t1 << 0; + b = t1 + t2 << 0; + s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10); + s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7); + bc = b & c; + maj = bc ^ b & d ^ cd; + ch = f & g ^ ~f & h; + t1 = e + s1 + ch + K[j + 3] + blocks2[j + 3]; + t2 = s0 + maj; + e = a + t1 << 0; + a = t1 + t2 << 0; + } + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + this.h4 = this.h4 + e << 0; + this.h5 = this.h5 + f << 0; + this.h6 = this.h6 + g << 0; + this.h7 = this.h7 + h << 0; + }; + Sha256.prototype.hex = function() { + this.finalize(); + var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; + var hex = HEX_CHARS[h0 >> 28 & 15] + HEX_CHARS[h0 >> 24 & 15] + HEX_CHARS[h0 >> 20 & 15] + HEX_CHARS[h0 >> 16 & 15] + HEX_CHARS[h0 >> 12 & 15] + HEX_CHARS[h0 >> 8 & 15] + HEX_CHARS[h0 >> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h1 >> 28 & 15] + HEX_CHARS[h1 >> 24 & 15] + HEX_CHARS[h1 >> 20 & 15] + HEX_CHARS[h1 >> 16 & 15] + HEX_CHARS[h1 >> 12 & 15] + HEX_CHARS[h1 >> 8 & 15] + HEX_CHARS[h1 >> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h2 >> 28 & 15] + HEX_CHARS[h2 >> 24 & 15] + HEX_CHARS[h2 >> 20 & 15] + HEX_CHARS[h2 >> 16 & 15] + HEX_CHARS[h2 >> 12 & 15] + HEX_CHARS[h2 >> 8 & 15] + HEX_CHARS[h2 >> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h3 >> 28 & 15] + HEX_CHARS[h3 >> 24 & 15] + HEX_CHARS[h3 >> 20 & 15] + HEX_CHARS[h3 >> 16 & 15] + HEX_CHARS[h3 >> 12 & 15] + HEX_CHARS[h3 >> 8 & 15] + HEX_CHARS[h3 >> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h4 >> 28 & 15] + HEX_CHARS[h4 >> 24 & 15] + HEX_CHARS[h4 >> 20 & 15] + HEX_CHARS[h4 >> 16 & 15] + HEX_CHARS[h4 >> 12 & 15] + HEX_CHARS[h4 >> 8 & 15] + HEX_CHARS[h4 >> 4 & 15] + HEX_CHARS[h4 & 15] + HEX_CHARS[h5 >> 28 & 15] + HEX_CHARS[h5 >> 24 & 15] + HEX_CHARS[h5 >> 20 & 15] + HEX_CHARS[h5 >> 16 & 15] + HEX_CHARS[h5 >> 12 & 15] + HEX_CHARS[h5 >> 8 & 15] + HEX_CHARS[h5 >> 4 & 15] + HEX_CHARS[h5 & 15] + HEX_CHARS[h6 >> 28 & 15] + HEX_CHARS[h6 >> 24 & 15] + HEX_CHARS[h6 >> 20 & 15] + HEX_CHARS[h6 >> 16 & 15] + HEX_CHARS[h6 >> 12 & 15] + HEX_CHARS[h6 >> 8 & 15] + HEX_CHARS[h6 >> 4 & 15] + HEX_CHARS[h6 & 15]; + if (!this.is224) { + hex += HEX_CHARS[h7 >> 28 & 15] + HEX_CHARS[h7 >> 24 & 15] + HEX_CHARS[h7 >> 20 & 15] + HEX_CHARS[h7 >> 16 & 15] + HEX_CHARS[h7 >> 12 & 15] + HEX_CHARS[h7 >> 8 & 15] + HEX_CHARS[h7 >> 4 & 15] + HEX_CHARS[h7 & 15]; + } + return hex; + }; + Sha256.prototype.toString = Sha256.prototype.hex; + Sha256.prototype.digest = function() { + this.finalize(); + var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; + var arr = [ + h0 >> 24 & 255, + h0 >> 16 & 255, + h0 >> 8 & 255, + h0 & 255, + h1 >> 24 & 255, + h1 >> 16 & 255, + h1 >> 8 & 255, + h1 & 255, + h2 >> 24 & 255, + h2 >> 16 & 255, + h2 >> 8 & 255, + h2 & 255, + h3 >> 24 & 255, + h3 >> 16 & 255, + h3 >> 8 & 255, + h3 & 255, + h4 >> 24 & 255, + h4 >> 16 & 255, + h4 >> 8 & 255, + h4 & 255, + h5 >> 24 & 255, + h5 >> 16 & 255, + h5 >> 8 & 255, + h5 & 255, + h6 >> 24 & 255, + h6 >> 16 & 255, + h6 >> 8 & 255, + h6 & 255 + ]; + if (!this.is224) { + arr.push(h7 >> 24 & 255, h7 >> 16 & 255, h7 >> 8 & 255, h7 & 255); + } + return arr; + }; + Sha256.prototype.array = Sha256.prototype.digest; + Sha256.prototype.arrayBuffer = function() { + this.finalize(); + var buffer2 = new ArrayBuffer(this.is224 ? 28 : 32); + var dataView = new DataView(buffer2); + dataView.setUint32(0, this.h0); + dataView.setUint32(4, this.h1); + dataView.setUint32(8, this.h2); + dataView.setUint32(12, this.h3); + dataView.setUint32(16, this.h4); + dataView.setUint32(20, this.h5); + dataView.setUint32(24, this.h6); + if (!this.is224) { + dataView.setUint32(28, this.h7); + } + return buffer2; + }; + function HmacSha256(key2, is2242, sharedMemory) { + var i, type = typeof key2; + if (type === "string") { + var bytes = [], length = key2.length, index2 = 0, code; + for (i = 0; i < length; ++i) { + code = key2.charCodeAt(i); + if (code < 128) { + bytes[index2++] = code; + } else if (code < 2048) { + bytes[index2++] = 192 | code >> 6; + bytes[index2++] = 128 | code & 63; + } else if (code < 55296 || code >= 57344) { + bytes[index2++] = 224 | code >> 12; + bytes[index2++] = 128 | code >> 6 & 63; + bytes[index2++] = 128 | code & 63; + } else { + code = 65536 + ((code & 1023) << 10 | key2.charCodeAt(++i) & 1023); + bytes[index2++] = 240 | code >> 18; + bytes[index2++] = 128 | code >> 12 & 63; + bytes[index2++] = 128 | code >> 6 & 63; + bytes[index2++] = 128 | code & 63; + } + } + key2 = bytes; + } else { + if (type === "object") { + if (key2 === null) { + throw new Error(ERROR); + } else if (ARRAY_BUFFER && key2.constructor === ArrayBuffer) { + key2 = new Uint8Array(key2); + } else if (!Array.isArray(key2)) { + if (!ARRAY_BUFFER || !ArrayBuffer.isView(key2)) { + throw new Error(ERROR); + } + } + } else { + throw new Error(ERROR); + } + } + if (key2.length > 64) { + key2 = new Sha256(is2242, true).update(key2).array(); + } + var oKeyPad = [], iKeyPad = []; + for (i = 0; i < 64; ++i) { + var b = key2[i] || 0; + oKeyPad[i] = 92 ^ b; + iKeyPad[i] = 54 ^ b; + } + Sha256.call(this, is2242, sharedMemory); + this.update(iKeyPad); + this.oKeyPad = oKeyPad; + this.inner = true; + this.sharedMemory = sharedMemory; + } + HmacSha256.prototype = new Sha256(); + HmacSha256.prototype.finalize = function() { + Sha256.prototype.finalize.call(this); + if (this.inner) { + this.inner = false; + var innerHash = this.array(); + Sha256.call(this, this.is224, this.sharedMemory); + this.update(this.oKeyPad); + this.update(innerHash); + Sha256.prototype.finalize.call(this); + } + }; + var exports = createMethod(); + exports.sha256 = exports; + exports.sha224 = createMethod(true); + exports.sha256.hmac = createHmacMethod(); + exports.sha224.hmac = createHmacMethod(true); + if (COMMON_JS) { + module.exports = exports; + } else { + root.sha256 = exports.sha256; + root.sha224 = exports.sha224; + if (AMD) { + define(function() { + return exports; + }); + } + } + })(); + } +}); + +// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js +var require_compiler = __commonJS({ + "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js"(exports2) { + init_polyfill_buffer(); + (function(Hogan4) { + var rIsWhitespace = /\S/, rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g, rLineSep = /\u2028/, rParagraphSep = /\u2029/; + Hogan4.tags = { + "#": 1, + "^": 2, + "<": 3, + "$": 4, + "/": 5, + "!": 6, + ">": 7, + "=": 8, + "_v": 9, + "{": 10, + "&": 11, + "_t": 12 + }; + Hogan4.scan = function scan(text2, delimiters) { + var len = text2.length, IN_TEXT = 0, IN_TAG_TYPE = 1, IN_TAG = 2, state = IN_TEXT, tagType = null, tag2 = null, buf = "", tokens = [], seenTag = false, i = 0, lineStart = 0, otag = "{{", ctag = "}}"; + function addBuf() { + if (buf.length > 0) { + tokens.push({ tag: "_t", text: new String(buf) }); + buf = ""; + } + } + function lineIsWhitespace() { + var isAllWhitespace = true; + for (var j = lineStart; j < tokens.length; j++) { + isAllWhitespace = Hogan4.tags[tokens[j].tag] < Hogan4.tags["_v"] || tokens[j].tag == "_t" && tokens[j].text.match(rIsWhitespace) === null; + if (!isAllWhitespace) { + return false; + } + } + return isAllWhitespace; + } + function filterLine(haveSeenTag, noNewLine) { + addBuf(); + if (haveSeenTag && lineIsWhitespace()) { + for (var j = lineStart, next; j < tokens.length; j++) { + if (tokens[j].text) { + if ((next = tokens[j + 1]) && next.tag == ">") { + next.indent = tokens[j].text.toString(); + } + tokens.splice(j, 1); + } + } + } else if (!noNewLine) { + tokens.push({ tag: "\n" }); + } + seenTag = false; + lineStart = tokens.length; + } + function changeDelimiters(text3, index2) { + var close = "=" + ctag, closeIndex = text3.indexOf(close, index2), delimiters2 = trim( + text3.substring(text3.indexOf("=", index2) + 1, closeIndex) + ).split(" "); + otag = delimiters2[0]; + ctag = delimiters2[delimiters2.length - 1]; + return closeIndex + close.length - 1; + } + if (delimiters) { + delimiters = delimiters.split(" "); + otag = delimiters[0]; + ctag = delimiters[1]; + } + for (i = 0; i < len; i++) { + if (state == IN_TEXT) { + if (tagChange(otag, text2, i)) { + --i; + addBuf(); + state = IN_TAG_TYPE; + } else { + if (text2.charAt(i) == "\n") { + filterLine(seenTag); + } else { + buf += text2.charAt(i); + } + } + } else if (state == IN_TAG_TYPE) { + i += otag.length - 1; + tag2 = Hogan4.tags[text2.charAt(i + 1)]; + tagType = tag2 ? text2.charAt(i + 1) : "_v"; + if (tagType == "=") { + i = changeDelimiters(text2, i); + state = IN_TEXT; + } else { + if (tag2) { + i++; + } + state = IN_TAG; + } + seenTag = i; + } else { + if (tagChange(ctag, text2, i)) { + tokens.push({ + tag: tagType, + n: trim(buf), + otag, + ctag, + i: tagType == "/" ? seenTag - otag.length : i + ctag.length + }); + buf = ""; + i += ctag.length - 1; + state = IN_TEXT; + if (tagType == "{") { + if (ctag == "}}") { + i++; + } else { + cleanTripleStache(tokens[tokens.length - 1]); + } + } + } else { + buf += text2.charAt(i); + } + } + } + filterLine(seenTag, true); + return tokens; + }; + function cleanTripleStache(token) { + if (token.n.substr(token.n.length - 1) === "}") { + token.n = token.n.substring(0, token.n.length - 1); + } + } + function trim(s) { + if (s.trim) { + return s.trim(); + } + return s.replace(/^\s*|\s*$/g, ""); + } + function tagChange(tag2, text2, index2) { + if (text2.charAt(index2) != tag2.charAt(0)) { + return false; + } + for (var i = 1, l = tag2.length; i < l; i++) { + if (text2.charAt(index2 + i) != tag2.charAt(i)) { + return false; + } + } + return true; + } + var allowedInSuper = { "_t": true, "\n": true, "$": true, "/": true }; + function buildTree(tokens, kind, stack, customTags) { + var instructions = [], opener = null, tail = null, token = null; + tail = stack[stack.length - 1]; + while (tokens.length > 0) { + token = tokens.shift(); + if (tail && tail.tag == "<" && !(token.tag in allowedInSuper)) { + throw new Error("Illegal content in < super tag."); + } + if (Hogan4.tags[token.tag] <= Hogan4.tags["$"] || isOpener(token, customTags)) { + stack.push(token); + token.nodes = buildTree(tokens, token.tag, stack, customTags); + } else if (token.tag == "/") { + if (stack.length === 0) { + throw new Error("Closing tag without opener: /" + token.n); + } + opener = stack.pop(); + if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { + throw new Error("Nesting error: " + opener.n + " vs. " + token.n); + } + opener.end = token.i; + return instructions; + } else if (token.tag == "\n") { + token.last = tokens.length == 0 || tokens[0].tag == "\n"; + } + instructions.push(token); + } + if (stack.length > 0) { + throw new Error("missing closing tag: " + stack.pop().n); + } + return instructions; + } + function isOpener(token, tags) { + for (var i = 0, l = tags.length; i < l; i++) { + if (tags[i].o == token.n) { + token.tag = "#"; + return true; + } + } + } + function isCloser(close, open, tags) { + for (var i = 0, l = tags.length; i < l; i++) { + if (tags[i].c == close && tags[i].o == open) { + return true; + } + } + } + function stringifySubstitutions(obj) { + var items = []; + for (var key2 in obj) { + items.push('"' + esc(key2) + '": function(c,p,t,i) {' + obj[key2] + "}"); + } + return "{ " + items.join(",") + " }"; + } + function stringifyPartials(codeObj) { + var partials = []; + for (var key2 in codeObj.partials) { + partials.push('"' + esc(key2) + '":{name:"' + esc(codeObj.partials[key2].name) + '", ' + stringifyPartials(codeObj.partials[key2]) + "}"); + } + return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs); + } + Hogan4.stringify = function(codeObj, text2, options) { + return "{code: function (c,p,i) { " + Hogan4.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) + "}"; + }; + var serialNo = 0; + Hogan4.generate = function(tree, text2, options) { + serialNo = 0; + var context = { code: "", subs: {}, partials: {} }; + Hogan4.walk(tree, context); + if (options.asString) { + return this.stringify(context, text2, options); + } + return this.makeTemplate(context, text2, options); + }; + Hogan4.wrapMain = function(code) { + return 'var t=this;t.b(i=i||"");' + code + "return t.fl();"; + }; + Hogan4.template = Hogan4.Template; + Hogan4.makeTemplate = function(codeObj, text2, options) { + var template = this.makePartials(codeObj); + template.code = new Function("c", "p", "i", this.wrapMain(codeObj.code)); + return new this.template(template, text2, this, options); + }; + Hogan4.makePartials = function(codeObj) { + var key2, template = { subs: {}, partials: codeObj.partials, name: codeObj.name }; + for (key2 in template.partials) { + template.partials[key2] = this.makePartials(template.partials[key2]); + } + for (key2 in codeObj.subs) { + template.subs[key2] = new Function("c", "p", "t", "i", codeObj.subs[key2]); + } + return template; + }; + function esc(s) { + return s.replace(rSlash, "\\\\").replace(rQuot, '\\"').replace(rNewline, "\\n").replace(rCr, "\\r").replace(rLineSep, "\\u2028").replace(rParagraphSep, "\\u2029"); + } + function chooseMethod(s) { + return ~s.indexOf(".") ? "d" : "f"; + } + function createPartial(node, context) { + var prefix = "<" + (context.prefix || ""); + var sym = prefix + node.n + serialNo++; + context.partials[sym] = { name: node.n, partials: {} }; + context.code += 't.b(t.rp("' + esc(sym) + '",c,p,"' + (node.indent || "") + '"));'; + return sym; + } + Hogan4.codegen = { + "#": function(node, context) { + context.code += "if(t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,0,' + node.i + "," + node.end + ',"' + node.otag + " " + node.ctag + '")){t.rs(c,p,function(c,p,t){'; + Hogan4.walk(node.nodes, context); + context.code += "});c.pop();}"; + }, + "^": function(node, context) { + context.code += "if(!t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){'; + Hogan4.walk(node.nodes, context); + context.code += "};"; + }, + ">": createPartial, + "<": function(node, context) { + var ctx = { partials: {}, code: "", subs: {}, inPartial: true }; + Hogan4.walk(node.nodes, ctx); + var template = context.partials[createPartial(node, context)]; + template.subs = ctx.subs; + template.partials = ctx.partials; + }, + "$": function(node, context) { + var ctx = { subs: {}, code: "", partials: context.partials, prefix: node.n }; + Hogan4.walk(node.nodes, ctx); + context.subs[node.n] = ctx.code; + if (!context.inPartial) { + context.code += 't.sub("' + esc(node.n) + '",c,p,i);'; + } + }, + "\n": function(node, context) { + context.code += write('"\\n"' + (node.last ? "" : " + i")); + }, + "_v": function(node, context) { + context.code += "t.b(t.v(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; + }, + "_t": function(node, context) { + context.code += write('"' + esc(node.text) + '"'); + }, + "{": tripleStache, + "&": tripleStache + }; + function tripleStache(node, context) { + context.code += "t.b(t.t(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; + } + function write(s) { + return "t.b(" + s + ");"; + } + Hogan4.walk = function(nodelist, context) { + var func; + for (var i = 0, l = nodelist.length; i < l; i++) { + func = Hogan4.codegen[nodelist[i].tag]; + func && func(nodelist[i], context); + } + return context; + }; + Hogan4.parse = function(tokens, text2, options) { + options = options || {}; + return buildTree(tokens, "", [], options.sectionTags || []); + }; + Hogan4.cache = {}; + Hogan4.cacheKey = function(text2, options) { + return [text2, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join("||"); + }; + Hogan4.compile = function(text2, options) { + options = options || {}; + var key2 = Hogan4.cacheKey(text2, options); + var template = this.cache[key2]; + if (template) { + var partials = template.partials; + for (var name in partials) { + delete partials[name].instance; + } + return template; + } + template = this.generate(this.parse(this.scan(text2, options.delimiters), text2, options), text2, options); + return this.cache[key2] = template; + }; + })(typeof exports2 !== "undefined" ? exports2 : Hogan); + } +}); + +// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js +var require_template = __commonJS({ + "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js"(exports2) { + init_polyfill_buffer(); + var Hogan4 = {}; + (function(Hogan5) { + Hogan5.Template = function(codeObj, text2, compiler, options) { + codeObj = codeObj || {}; + this.r = codeObj.code || this.r; + this.c = compiler; + this.options = options || {}; + this.text = text2 || ""; + this.partials = codeObj.partials || {}; + this.subs = codeObj.subs || {}; + this.buf = ""; + }; + Hogan5.Template.prototype = { + // render: replaced by generated code. + r: function(context, partials, indent2) { + return ""; + }, + // variable escaping + v: hoganEscape, + // triple stache + t: coerceToString, + render: function render(context, partials, indent2) { + return this.ri([context], partials || {}, indent2); + }, + // render internal -- a hook for overrides that catches partials too + ri: function(context, partials, indent2) { + return this.r(context, partials, indent2); + }, + // ensurePartial + ep: function(symbol, partials) { + var partial = this.partials[symbol]; + var template = partials[partial.name]; + if (partial.instance && partial.base == template) { + return partial.instance; + } + if (typeof template == "string") { + if (!this.c) { + throw new Error("No compiler available."); + } + template = this.c.compile(template, this.options); + } + if (!template) { + return null; + } + this.partials[symbol].base = template; + if (partial.subs) { + if (!partials.stackText) partials.stackText = {}; + for (key in partial.subs) { + if (!partials.stackText[key]) { + partials.stackText[key] = this.activeSub !== void 0 && partials.stackText[this.activeSub] ? partials.stackText[this.activeSub] : this.text; + } + } + template = createSpecializedPartial( + template, + partial.subs, + partial.partials, + this.stackSubs, + this.stackPartials, + partials.stackText + ); + } + this.partials[symbol].instance = template; + return template; + }, + // tries to find a partial in the current scope and render it + rp: function(symbol, context, partials, indent2) { + var partial = this.ep(symbol, partials); + if (!partial) { + return ""; + } + return partial.ri(context, partials, indent2); + }, + // render a section + rs: function(context, partials, section) { + var tail = context[context.length - 1]; + if (!isArray(tail)) { + section(context, partials, this); + return; + } + for (var i = 0; i < tail.length; i++) { + context.push(tail[i]); + section(context, partials, this); + context.pop(); + } + }, + // maybe start a section + s: function(val, ctx, partials, inverted, start, end, tags) { + var pass; + if (isArray(val) && val.length === 0) { + return false; + } + if (typeof val == "function") { + val = this.ms(val, ctx, partials, inverted, start, end, tags); + } + pass = !!val; + if (!inverted && pass && ctx) { + ctx.push(typeof val == "object" ? val : ctx[ctx.length - 1]); + } + return pass; + }, + // find values with dotted names + d: function(key2, ctx, partials, returnFound) { + var found, names = key2.split("."), val = this.f(names[0], ctx, partials, returnFound), doModelGet = this.options.modelGet, cx = null; + if (key2 === "." && isArray(ctx[ctx.length - 2])) { + val = ctx[ctx.length - 1]; + } else { + for (var i = 1; i < names.length; i++) { + found = findInScope(names[i], val, doModelGet); + if (found !== void 0) { + cx = val; + val = found; + } else { + val = ""; + } + } + } + if (returnFound && !val) { + return false; + } + if (!returnFound && typeof val == "function") { + ctx.push(cx); + val = this.mv(val, ctx, partials); + ctx.pop(); + } + return val; + }, + // find values with normal names + f: function(key2, ctx, partials, returnFound) { + var val = false, v = null, found = false, doModelGet = this.options.modelGet; + for (var i = ctx.length - 1; i >= 0; i--) { + v = ctx[i]; + val = findInScope(key2, v, doModelGet); + if (val !== void 0) { + found = true; + break; + } + } + if (!found) { + return returnFound ? false : ""; + } + if (!returnFound && typeof val == "function") { + val = this.mv(val, ctx, partials); + } + return val; + }, + // higher order templates + ls: function(func, cx, partials, text2, tags) { + var oldTags = this.options.delimiters; + this.options.delimiters = tags; + this.b(this.ct(coerceToString(func.call(cx, text2)), cx, partials)); + this.options.delimiters = oldTags; + return false; + }, + // compile text + ct: function(text2, cx, partials) { + if (this.options.disableLambda) { + throw new Error("Lambda features disabled."); + } + return this.c.compile(text2, this.options).render(cx, partials); + }, + // template result buffering + b: function(s) { + this.buf += s; + }, + fl: function() { + var r = this.buf; + this.buf = ""; + return r; + }, + // method replace section + ms: function(func, ctx, partials, inverted, start, end, tags) { + var textSource, cx = ctx[ctx.length - 1], result = func.call(cx); + if (typeof result == "function") { + if (inverted) { + return true; + } else { + textSource = this.activeSub && this.subsText && this.subsText[this.activeSub] ? this.subsText[this.activeSub] : this.text; + return this.ls(result, cx, partials, textSource.substring(start, end), tags); + } + } + return result; + }, + // method replace variable + mv: function(func, ctx, partials) { + var cx = ctx[ctx.length - 1]; + var result = func.call(cx); + if (typeof result == "function") { + return this.ct(coerceToString(result.call(cx)), cx, partials); + } + return result; + }, + sub: function(name, context, partials, indent2) { + var f = this.subs[name]; + if (f) { + this.activeSub = name; + f(context, partials, this, indent2); + this.activeSub = false; + } + } + }; + function findInScope(key2, scope, doModelGet) { + var val; + if (scope && typeof scope == "object") { + if (scope[key2] !== void 0) { + val = scope[key2]; + } else if (doModelGet && scope.get && typeof scope.get == "function") { + val = scope.get(key2); + } + } + return val; + } + function createSpecializedPartial(instance10, subs, partials, stackSubs, stackPartials, stackText) { + function PartialTemplate() { + } + ; + PartialTemplate.prototype = instance10; + function Substitutions() { + } + ; + Substitutions.prototype = instance10.subs; + var key2; + var partial = new PartialTemplate(); + partial.subs = new Substitutions(); + partial.subsText = {}; + partial.buf = ""; + stackSubs = stackSubs || {}; + partial.stackSubs = stackSubs; + partial.subsText = stackText; + for (key2 in subs) { + if (!stackSubs[key2]) stackSubs[key2] = subs[key2]; + } + for (key2 in stackSubs) { + partial.subs[key2] = stackSubs[key2]; + } + stackPartials = stackPartials || {}; + partial.stackPartials = stackPartials; + for (key2 in partials) { + if (!stackPartials[key2]) stackPartials[key2] = partials[key2]; + } + for (key2 in stackPartials) { + partial.partials[key2] = stackPartials[key2]; + } + return partial; + } + var rAmp = /&/g, rLt = //g, rApos = /\'/g, rQuot = /\"/g, hChars = /[&<>\"\']/; + function coerceToString(val) { + return String(val === null || val === void 0 ? "" : val); + } + function hoganEscape(str) { + str = coerceToString(str); + return hChars.test(str) ? str.replace(rAmp, "&").replace(rLt, "<").replace(rGt, ">").replace(rApos, "'").replace(rQuot, """) : str; + } + var isArray = Array.isArray || function(a) { + return Object.prototype.toString.call(a) === "[object Array]"; + }; + })(typeof exports2 !== "undefined" ? exports2 : Hogan4); + } +}); + +// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js +var require_hogan = __commonJS({ + "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js"(exports2, module2) { + init_polyfill_buffer(); + var Hogan4 = require_compiler(); + Hogan4.Template = require_template().Template; + Hogan4.template = Hogan4.Template; + module2.exports = Hogan4; + } +}); + +// node_modules/.pnpm/feather-icons@4.29.2/node_modules/feather-icons/dist/feather.js +var require_feather = __commonJS({ + "node_modules/.pnpm/feather-icons@4.29.2/node_modules/feather-icons/dist/feather.js"(exports2, module2) { + init_polyfill_buffer(); + (function webpackUniversalModuleDefinition(root2, factory) { + if (typeof exports2 === "object" && typeof module2 === "object") + module2.exports = factory(); + else if (typeof define === "function" && define.amd) + define([], factory); + else if (typeof exports2 === "object") + exports2["feather"] = factory(); + else + root2["feather"] = factory(); + })(typeof self !== "undefined" ? self : exports2, function() { + return ( + /******/ + function(modules) { + var installedModules = {}; + function __webpack_require__(moduleId) { + if (installedModules[moduleId]) { + return installedModules[moduleId].exports; + } + var module3 = installedModules[moduleId] = { + /******/ + i: moduleId, + /******/ + l: false, + /******/ + exports: {} + /******/ + }; + modules[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); + module3.l = true; + return module3.exports; + } + __webpack_require__.m = modules; + __webpack_require__.c = installedModules; + __webpack_require__.d = function(exports3, name, getter) { + if (!__webpack_require__.o(exports3, name)) { + Object.defineProperty(exports3, name, { + /******/ + configurable: false, + /******/ + enumerable: true, + /******/ + get: getter + /******/ + }); + } + }; + __webpack_require__.r = function(exports3) { + Object.defineProperty(exports3, "__esModule", { value: true }); + }; + __webpack_require__.n = function(module3) { + var getter = module3 && module3.__esModule ? ( + /******/ + function getDefault() { + return module3["default"]; + } + ) : ( + /******/ + function getModuleExports() { + return module3; + } + ); + __webpack_require__.d(getter, "a", getter); + return getter; + }; + __webpack_require__.o = function(object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; + __webpack_require__.p = ""; + return __webpack_require__(__webpack_require__.s = 0); + }({ + /***/ + "./dist/icons.json": ( + /*!*************************!*\ + !*** ./dist/icons.json ***! + \*************************/ + /*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, aperture, archive, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, award, bar-chart-2, bar-chart, battery-charging, battery, bell-off, bell, bluetooth, bold, book-open, book, bookmark, box, briefcase, calendar, camera-off, camera, cast, check-circle, check-square, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, chrome, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-off, cloud-rain, cloud-snow, cloud, code, codepen, codesandbox, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, divide-circle, divide-square, divide, dollar-sign, download-cloud, download, dribbble, droplet, edit-2, edit-3, edit, external-link, eye-off, eye, facebook, fast-forward, feather, figma, file-minus, file-plus, file-text, file, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, grid, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, info, instagram, italic, key, layers, layout, life-buoy, link-2, link, linkedin, list, loader, lock, log-in, log-out, mail, map-pin, map, maximize-2, maximize, meh, menu, message-circle, message-square, mic-off, mic, minimize-2, minimize, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation-2, navigation, octagon, package, paperclip, pause-circle, pause, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, pie-chart, play-circle, play, plus-circle, plus-square, plus, pocket, power, printer, radio, refresh-ccw, refresh-cw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, server, settings, share-2, share, shield-off, shield, shopping-bag, shopping-cart, shuffle, sidebar, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, square, star, stop-circle, sun, sunrise, sunset, table, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash-2, trash, trello, trending-down, trending-up, triangle, truck, tv, twitch, twitter, type, umbrella, underline, unlock, upload-cloud, upload, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume-1, volume-2, volume-x, volume, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */ + /***/ + function(module3) { + module3.exports = { "activity": '', "airplay": '', "alert-circle": '', "alert-octagon": '', "alert-triangle": '', "align-center": '', "align-justify": '', "align-left": '', "align-right": '', "anchor": '', "aperture": '', "archive": '', "arrow-down-circle": '', "arrow-down-left": '', "arrow-down-right": '', "arrow-down": '', "arrow-left-circle": '', "arrow-left": '', "arrow-right-circle": '', "arrow-right": '', "arrow-up-circle": '', "arrow-up-left": '', "arrow-up-right": '', "arrow-up": '', "at-sign": '', "award": '', "bar-chart-2": '', "bar-chart": '', "battery-charging": '', "battery": '', "bell-off": '', "bell": '', "bluetooth": '', "bold": '', "book-open": '', "book": '', "bookmark": '', "box": '', "briefcase": '', "calendar": '', "camera-off": '', "camera": '', "cast": '', "check-circle": '', "check-square": '', "check": '', "chevron-down": '', "chevron-left": '', "chevron-right": '', "chevron-up": '', "chevrons-down": '', "chevrons-left": '', "chevrons-right": '', "chevrons-up": '', "chrome": '', "circle": '', "clipboard": '', "clock": '', "cloud-drizzle": '', "cloud-lightning": '', "cloud-off": '', "cloud-rain": '', "cloud-snow": '', "cloud": '', "code": '', "codepen": '', "codesandbox": '', "coffee": '', "columns": '', "command": '', "compass": '', "copy": '', "corner-down-left": '', "corner-down-right": '', "corner-left-down": '', "corner-left-up": '', "corner-right-down": '', "corner-right-up": '', "corner-up-left": '', "corner-up-right": '', "cpu": '', "credit-card": '', "crop": '', "crosshair": '', "database": '', "delete": '', "disc": '', "divide-circle": '', "divide-square": '', "divide": '', "dollar-sign": '', "download-cloud": '', "download": '', "dribbble": '', "droplet": '', "edit-2": '', "edit-3": '', "edit": '', "external-link": '', "eye-off": '', "eye": '', "facebook": '', "fast-forward": '', "feather": '', "figma": '', "file-minus": '', "file-plus": '', "file-text": '', "file": '', "film": '', "filter": '', "flag": '', "folder-minus": '', "folder-plus": '', "folder": '', "framer": '', "frown": '', "gift": '', "git-branch": '', "git-commit": '', "git-merge": '', "git-pull-request": '', "github": '', "gitlab": '', "globe": '', "grid": '', "hard-drive": '', "hash": '', "headphones": '', "heart": '', "help-circle": '', "hexagon": '', "home": '', "image": '', "inbox": '', "info": '', "instagram": '', "italic": '', "key": '', "layers": '', "layout": '', "life-buoy": '', "link-2": '', "link": '', "linkedin": '', "list": '', "loader": '', "lock": '', "log-in": '', "log-out": '', "mail": '', "map-pin": '', "map": '', "maximize-2": '', "maximize": '', "meh": '', "menu": '', "message-circle": '', "message-square": '', "mic-off": '', "mic": '', "minimize-2": '', "minimize": '', "minus-circle": '', "minus-square": '', "minus": '', "monitor": '', "moon": '', "more-horizontal": '', "more-vertical": '', "mouse-pointer": '', "move": '', "music": '', "navigation-2": '', "navigation": '', "octagon": '', "package": '', "paperclip": '', "pause-circle": '', "pause": '', "pen-tool": '', "percent": '', "phone-call": '', "phone-forwarded": '', "phone-incoming": '', "phone-missed": '', "phone-off": '', "phone-outgoing": '', "phone": '', "pie-chart": '', "play-circle": '', "play": '', "plus-circle": '', "plus-square": '', "plus": '', "pocket": '', "power": '', "printer": '', "radio": '', "refresh-ccw": '', "refresh-cw": '', "repeat": '', "rewind": '', "rotate-ccw": '', "rotate-cw": '', "rss": '', "save": '', "scissors": '', "search": '', "send": '', "server": '', "settings": '', "share-2": '', "share": '', "shield-off": '', "shield": '', "shopping-bag": '', "shopping-cart": '', "shuffle": '', "sidebar": '', "skip-back": '', "skip-forward": '', "slack": '', "slash": '', "sliders": '', "smartphone": '', "smile": '', "speaker": '', "square": '', "star": '', "stop-circle": '', "sun": '', "sunrise": '', "sunset": '', "table": '', "tablet": '', "tag": '', "target": '', "terminal": '', "thermometer": '', "thumbs-down": '', "thumbs-up": '', "toggle-left": '', "toggle-right": '', "tool": '', "trash-2": '', "trash": '', "trello": '', "trending-down": '', "trending-up": '', "triangle": '', "truck": '', "tv": '', "twitch": '', "twitter": '', "type": '', "umbrella": '', "underline": '', "unlock": '', "upload-cloud": '', "upload": '', "user-check": '', "user-minus": '', "user-plus": '', "user-x": '', "user": '', "users": '', "video-off": '', "video": '', "voicemail": '', "volume-1": '', "volume-2": '', "volume-x": '', "volume": '', "watch": '', "wifi-off": '', "wifi": '', "wind": '', "x-circle": '', "x-octagon": '', "x-square": '', "x": '', "youtube": '', "zap-off": '', "zap": '', "zoom-in": '', "zoom-out": '' }; + } + ), + /***/ + "./node_modules/classnames/dedupe.js": ( + /*!*******************************************!*\ + !*** ./node_modules/classnames/dedupe.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; + (function() { + "use strict"; + var classNames = function() { + function StorageObject() { + } + StorageObject.prototype = /* @__PURE__ */ Object.create(null); + function _parseArray(resultSet, array) { + var length = array.length; + for (var i = 0; i < length; ++i) { + _parse(resultSet, array[i]); + } + } + var hasOwn = {}.hasOwnProperty; + function _parseNumber(resultSet, num2) { + resultSet[num2] = true; + } + function _parseObject(resultSet, object) { + for (var k in object) { + if (hasOwn.call(object, k)) { + resultSet[k] = !!object[k]; + } + } + } + var SPACE = /\s+/; + function _parseString(resultSet, str) { + var array = str.split(SPACE); + var length = array.length; + for (var i = 0; i < length; ++i) { + resultSet[array[i]] = true; + } + } + function _parse(resultSet, arg) { + if (!arg) return; + var argType = typeof arg; + if (argType === "string") { + _parseString(resultSet, arg); + } else if (Array.isArray(arg)) { + _parseArray(resultSet, arg); + } else if (argType === "object") { + _parseObject(resultSet, arg); + } else if (argType === "number") { + _parseNumber(resultSet, arg); + } + } + function _classNames() { + var len = arguments.length; + var args = Array(len); + for (var i = 0; i < len; i++) { + args[i] = arguments[i]; + } + var classSet = new StorageObject(); + _parseArray(classSet, args); + var list = []; + for (var k in classSet) { + if (classSet[k]) { + list.push(k); + } + } + return list.join(" "); + } + return _classNames; + }(); + if (typeof module3 !== "undefined" && module3.exports) { + module3.exports = classNames; + } else if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return classNames; + }.apply(exports3, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module3.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else { + } + })(); + } + ), + /***/ + "./node_modules/core-js/es/array/from.js": ( + /*!***********************************************!*\ + !*** ./node_modules/core-js/es/array/from.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + __webpack_require__( + /*! ../../modules/es.string.iterator */ + "./node_modules/core-js/modules/es.string.iterator.js" + ); + __webpack_require__( + /*! ../../modules/es.array.from */ + "./node_modules/core-js/modules/es.array.from.js" + ); + var path2 = __webpack_require__( + /*! ../../internals/path */ + "./node_modules/core-js/internals/path.js" + ); + module3.exports = path2.Array.from; + } + ), + /***/ + "./node_modules/core-js/internals/a-function.js": ( + /*!******************************************************!*\ + !*** ./node_modules/core-js/internals/a-function.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = function(it) { + if (typeof it != "function") { + throw TypeError(String(it) + " is not a function"); + } + return it; + }; + } + ), + /***/ + "./node_modules/core-js/internals/an-object.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/an-object.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var isObject2 = __webpack_require__( + /*! ../internals/is-object */ + "./node_modules/core-js/internals/is-object.js" + ); + module3.exports = function(it) { + if (!isObject2(it)) { + throw TypeError(String(it) + " is not an object"); + } + return it; + }; + } + ), + /***/ + "./node_modules/core-js/internals/array-from.js": ( + /*!******************************************************!*\ + !*** ./node_modules/core-js/internals/array-from.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var bind = __webpack_require__( + /*! ../internals/bind-context */ + "./node_modules/core-js/internals/bind-context.js" + ); + var toObject = __webpack_require__( + /*! ../internals/to-object */ + "./node_modules/core-js/internals/to-object.js" + ); + var callWithSafeIterationClosing = __webpack_require__( + /*! ../internals/call-with-safe-iteration-closing */ + "./node_modules/core-js/internals/call-with-safe-iteration-closing.js" + ); + var isArrayIteratorMethod = __webpack_require__( + /*! ../internals/is-array-iterator-method */ + "./node_modules/core-js/internals/is-array-iterator-method.js" + ); + var toLength = __webpack_require__( + /*! ../internals/to-length */ + "./node_modules/core-js/internals/to-length.js" + ); + var createProperty = __webpack_require__( + /*! ../internals/create-property */ + "./node_modules/core-js/internals/create-property.js" + ); + var getIteratorMethod = __webpack_require__( + /*! ../internals/get-iterator-method */ + "./node_modules/core-js/internals/get-iterator-method.js" + ); + module3.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var C = typeof this == "function" ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + var index2 = 0; + var iteratorMethod = getIteratorMethod(O); + var length, result, step, iterator; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0, 2); + if (iteratorMethod != void 0 && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + result = new C(); + for (; !(step = iterator.next()).done; index2++) { + createProperty( + result, + index2, + mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index2], true) : step.value + ); + } + } else { + length = toLength(O.length); + result = new C(length); + for (; length > index2; index2++) { + createProperty(result, index2, mapping ? mapfn(O[index2], index2) : O[index2]); + } + } + result.length = index2; + return result; + }; + } + ), + /***/ + "./node_modules/core-js/internals/array-includes.js": ( + /*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/array-includes.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var toIndexedObject = __webpack_require__( + /*! ../internals/to-indexed-object */ + "./node_modules/core-js/internals/to-indexed-object.js" + ); + var toLength = __webpack_require__( + /*! ../internals/to-length */ + "./node_modules/core-js/internals/to-length.js" + ); + var toAbsoluteIndex = __webpack_require__( + /*! ../internals/to-absolute-index */ + "./node_modules/core-js/internals/to-absolute-index.js" + ); + module3.exports = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index2 = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el != el) while (length > index2) { + value = O[index2++]; + if (value != value) return true; + } + else for (; length > index2; index2++) if (IS_INCLUDES || index2 in O) { + if (O[index2] === el) return IS_INCLUDES || index2 || 0; + } + return !IS_INCLUDES && -1; + }; + }; + } + ), + /***/ + "./node_modules/core-js/internals/bind-context.js": ( + /*!********************************************************!*\ + !*** ./node_modules/core-js/internals/bind-context.js ***! + \********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var aFunction = __webpack_require__( + /*! ../internals/a-function */ + "./node_modules/core-js/internals/a-function.js" + ); + module3.exports = function(fn, that, length) { + aFunction(fn); + if (that === void 0) return fn; + switch (length) { + case 0: + return function() { + return fn.call(that); + }; + case 1: + return function(a) { + return fn.call(that, a); + }; + case 2: + return function(a, b) { + return fn.call(that, a, b); + }; + case 3: + return function(a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function() { + return fn.apply(that, arguments); + }; + }; + } + ), + /***/ + "./node_modules/core-js/internals/call-with-safe-iteration-closing.js": ( + /*!****************************************************************************!*\ + !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! + \****************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + module3.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + var returnMethod = iterator["return"]; + if (returnMethod !== void 0) anObject(returnMethod.call(iterator)); + throw error; + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/check-correctness-of-iteration.js": ( + /*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! + \**************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + var called = 0; + var iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + module3.exports = function(exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } + ), + /***/ + "./node_modules/core-js/internals/classof-raw.js": ( + /*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/classof-raw.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + var toString = {}.toString; + module3.exports = function(it) { + return toString.call(it).slice(8, -1); + }; + } + ), + /***/ + "./node_modules/core-js/internals/classof.js": ( + /*!***************************************************!*\ + !*** ./node_modules/core-js/internals/classof.js ***! + \***************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var classofRaw = __webpack_require__( + /*! ../internals/classof-raw */ + "./node_modules/core-js/internals/classof-raw.js" + ); + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) == "Arguments"; + var tryGet = function(it, key2) { + try { + return it[key2]; + } catch (error) { + } + }; + module3.exports = function(it) { + var O, tag2, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag2 = tryGet(O = Object(it), TO_STRING_TAG)) == "string" ? tag2 : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == "Object" && typeof O.callee == "function" ? "Arguments" : result; + }; + } + ), + /***/ + "./node_modules/core-js/internals/copy-constructor-properties.js": ( + /*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! + \***********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var ownKeys = __webpack_require__( + /*! ../internals/own-keys */ + "./node_modules/core-js/internals/own-keys.js" + ); + var getOwnPropertyDescriptorModule = __webpack_require__( + /*! ../internals/object-get-own-property-descriptor */ + "./node_modules/core-js/internals/object-get-own-property-descriptor.js" + ); + var definePropertyModule = __webpack_require__( + /*! ../internals/object-define-property */ + "./node_modules/core-js/internals/object-define-property.js" + ); + module3.exports = function(target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key2 = keys[i]; + if (!has(target, key2)) defineProperty(target, key2, getOwnPropertyDescriptor(source, key2)); + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/correct-prototype-getter.js": ( + /*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! + \********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + module3.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } + ), + /***/ + "./node_modules/core-js/internals/create-iterator-constructor.js": ( + /*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! + \***********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var IteratorPrototype = __webpack_require__( + /*! ../internals/iterators-core */ + "./node_modules/core-js/internals/iterators-core.js" + ).IteratorPrototype; + var create = __webpack_require__( + /*! ../internals/object-create */ + "./node_modules/core-js/internals/object-create.js" + ); + var createPropertyDescriptor = __webpack_require__( + /*! ../internals/create-property-descriptor */ + "./node_modules/core-js/internals/create-property-descriptor.js" + ); + var setToStringTag = __webpack_require__( + /*! ../internals/set-to-string-tag */ + "./node_modules/core-js/internals/set-to-string-tag.js" + ); + var Iterators = __webpack_require__( + /*! ../internals/iterators */ + "./node_modules/core-js/internals/iterators.js" + ); + var returnThis = function() { + return this; + }; + module3.exports = function(IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } + ), + /***/ + "./node_modules/core-js/internals/create-property-descriptor.js": ( + /*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! + \**********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value + }; + }; + } + ), + /***/ + "./node_modules/core-js/internals/create-property.js": ( + /*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/create-property.js ***! + \***********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var toPrimitive = __webpack_require__( + /*! ../internals/to-primitive */ + "./node_modules/core-js/internals/to-primitive.js" + ); + var definePropertyModule = __webpack_require__( + /*! ../internals/object-define-property */ + "./node_modules/core-js/internals/object-define-property.js" + ); + var createPropertyDescriptor = __webpack_require__( + /*! ../internals/create-property-descriptor */ + "./node_modules/core-js/internals/create-property-descriptor.js" + ); + module3.exports = function(object, key2, value) { + var propertyKey = toPrimitive(key2); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; + }; + } + ), + /***/ + "./node_modules/core-js/internals/define-iterator.js": ( + /*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/define-iterator.js ***! + \***********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var $ = __webpack_require__( + /*! ../internals/export */ + "./node_modules/core-js/internals/export.js" + ); + var createIteratorConstructor = __webpack_require__( + /*! ../internals/create-iterator-constructor */ + "./node_modules/core-js/internals/create-iterator-constructor.js" + ); + var getPrototypeOf = __webpack_require__( + /*! ../internals/object-get-prototype-of */ + "./node_modules/core-js/internals/object-get-prototype-of.js" + ); + var setPrototypeOf = __webpack_require__( + /*! ../internals/object-set-prototype-of */ + "./node_modules/core-js/internals/object-set-prototype-of.js" + ); + var setToStringTag = __webpack_require__( + /*! ../internals/set-to-string-tag */ + "./node_modules/core-js/internals/set-to-string-tag.js" + ); + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + var redefine = __webpack_require__( + /*! ../internals/redefine */ + "./node_modules/core-js/internals/redefine.js" + ); + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var IS_PURE = __webpack_require__( + /*! ../internals/is-pure */ + "./node_modules/core-js/internals/is-pure.js" + ); + var Iterators = __webpack_require__( + /*! ../internals/iterators */ + "./node_modules/core-js/internals/iterators.js" + ); + var IteratorsCore = __webpack_require__( + /*! ../internals/iterators-core */ + "./node_modules/core-js/internals/iterators-core.js" + ); + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module3.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != "function") { + hide(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + hide(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } + else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + return methods; + }; + } + ), + /***/ + "./node_modules/core-js/internals/descriptors.js": ( + /*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/descriptors.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + module3.exports = !fails(function() { + return Object.defineProperty({}, "a", { get: function() { + return 7; + } }).a != 7; + }); + } + ), + /***/ + "./node_modules/core-js/internals/document-create-element.js": ( + /*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/document-create-element.js ***! + \*******************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var isObject2 = __webpack_require__( + /*! ../internals/is-object */ + "./node_modules/core-js/internals/is-object.js" + ); + var document2 = global2.document; + var exist = isObject2(document2) && isObject2(document2.createElement); + module3.exports = function(it) { + return exist ? document2.createElement(it) : {}; + }; + } + ), + /***/ + "./node_modules/core-js/internals/enum-bug-keys.js": ( + /*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! + \*********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } + ), + /***/ + "./node_modules/core-js/internals/export.js": ( + /*!**************************************************!*\ + !*** ./node_modules/core-js/internals/export.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var getOwnPropertyDescriptor = __webpack_require__( + /*! ../internals/object-get-own-property-descriptor */ + "./node_modules/core-js/internals/object-get-own-property-descriptor.js" + ).f; + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + var redefine = __webpack_require__( + /*! ../internals/redefine */ + "./node_modules/core-js/internals/redefine.js" + ); + var setGlobal = __webpack_require__( + /*! ../internals/set-global */ + "./node_modules/core-js/internals/set-global.js" + ); + var copyConstructorProperties = __webpack_require__( + /*! ../internals/copy-constructor-properties */ + "./node_modules/core-js/internals/copy-constructor-properties.js" + ); + var isForced = __webpack_require__( + /*! ../internals/is-forced */ + "./node_modules/core-js/internals/is-forced.js" + ); + module3.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key2, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global2[TARGET] || {}).prototype; + } + if (target) for (key2 in source) { + sourceProperty = source[key2]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key2); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key2]; + FORCED = isForced(GLOBAL ? key2 : TARGET + (STATIC ? "." : "#") + key2, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + hide(sourceProperty, "sham", true); + } + redefine(target, key2, sourceProperty, options); + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/fails.js": ( + /*!*************************************************!*\ + !*** ./node_modules/core-js/internals/fails.js ***! + \*************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/function-to-string.js": ( + /*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/function-to-string.js ***! + \**************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var shared = __webpack_require__( + /*! ../internals/shared */ + "./node_modules/core-js/internals/shared.js" + ); + module3.exports = shared("native-function-to-string", Function.toString); + } + ), + /***/ + "./node_modules/core-js/internals/get-iterator-method.js": ( + /*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/get-iterator-method.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var classof = __webpack_require__( + /*! ../internals/classof */ + "./node_modules/core-js/internals/classof.js" + ); + var Iterators = __webpack_require__( + /*! ../internals/iterators */ + "./node_modules/core-js/internals/iterators.js" + ); + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var ITERATOR = wellKnownSymbol("iterator"); + module3.exports = function(it) { + if (it != void 0) return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)]; + }; + } + ), + /***/ + "./node_modules/core-js/internals/global.js": ( + /*!**************************************************!*\ + !*** ./node_modules/core-js/internals/global.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + (function(global2) { + var O = "object"; + var check = function(it) { + return it && it.Math == Math && it; + }; + module3.exports = // eslint-disable-next-line no-undef + check(typeof globalThis == O && globalThis) || check(typeof window == O && window) || check(typeof self == O && self) || check(typeof global2 == O && global2) || // eslint-disable-next-line no-new-func + Function("return this")(); + }).call(this, __webpack_require__( + /*! ./../../webpack/buildin/global.js */ + "./node_modules/webpack/buildin/global.js" + )); + } + ), + /***/ + "./node_modules/core-js/internals/has.js": ( + /*!***********************************************!*\ + !*** ./node_modules/core-js/internals/has.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + var hasOwnProperty = {}.hasOwnProperty; + module3.exports = function(it, key2) { + return hasOwnProperty.call(it, key2); + }; + } + ), + /***/ + "./node_modules/core-js/internals/hidden-keys.js": ( + /*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/hidden-keys.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = {}; + } + ), + /***/ + "./node_modules/core-js/internals/hide.js": ( + /*!************************************************!*\ + !*** ./node_modules/core-js/internals/hide.js ***! + \************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var DESCRIPTORS = __webpack_require__( + /*! ../internals/descriptors */ + "./node_modules/core-js/internals/descriptors.js" + ); + var definePropertyModule = __webpack_require__( + /*! ../internals/object-define-property */ + "./node_modules/core-js/internals/object-define-property.js" + ); + var createPropertyDescriptor = __webpack_require__( + /*! ../internals/create-property-descriptor */ + "./node_modules/core-js/internals/create-property-descriptor.js" + ); + module3.exports = DESCRIPTORS ? function(object, key2, value) { + return definePropertyModule.f(object, key2, createPropertyDescriptor(1, value)); + } : function(object, key2, value) { + object[key2] = value; + return object; + }; + } + ), + /***/ + "./node_modules/core-js/internals/html.js": ( + /*!************************************************!*\ + !*** ./node_modules/core-js/internals/html.js ***! + \************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var document2 = global2.document; + module3.exports = document2 && document2.documentElement; + } + ), + /***/ + "./node_modules/core-js/internals/ie8-dom-define.js": ( + /*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var DESCRIPTORS = __webpack_require__( + /*! ../internals/descriptors */ + "./node_modules/core-js/internals/descriptors.js" + ); + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + var createElement = __webpack_require__( + /*! ../internals/document-create-element */ + "./node_modules/core-js/internals/document-create-element.js" + ); + module3.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a != 7; + }); + } + ), + /***/ + "./node_modules/core-js/internals/indexed-object.js": ( + /*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/indexed-object.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + var classof = __webpack_require__( + /*! ../internals/classof-raw */ + "./node_modules/core-js/internals/classof-raw.js" + ); + var split = "".split; + module3.exports = fails(function() { + return !Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) == "String" ? split.call(it, "") : Object(it); + } : Object; + } + ), + /***/ + "./node_modules/core-js/internals/internal-state.js": ( + /*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/internal-state.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var NATIVE_WEAK_MAP = __webpack_require__( + /*! ../internals/native-weak-map */ + "./node_modules/core-js/internals/native-weak-map.js" + ); + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var isObject2 = __webpack_require__( + /*! ../internals/is-object */ + "./node_modules/core-js/internals/is-object.js" + ); + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + var objectHas = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var sharedKey = __webpack_require__( + /*! ../internals/shared-key */ + "./node_modules/core-js/internals/shared-key.js" + ); + var hiddenKeys = __webpack_require__( + /*! ../internals/hidden-keys */ + "./node_modules/core-js/internals/hidden-keys.js" + ); + var WeakMap2 = global2.WeakMap; + var set, get, has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject2(it) || (state = get(it)).type !== TYPE) { + throw TypeError("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP) { + var store = new WeakMap2(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function(it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function(it) { + return wmget.call(store, it) || {}; + }; + has = function(it) { + return wmhas.call(store, it); + }; + } else { + var STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + hide(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return objectHas(it, STATE); + }; + } + module3.exports = { + set, + get, + has, + enforce, + getterFor + }; + } + ), + /***/ + "./node_modules/core-js/internals/is-array-iterator-method.js": ( + /*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! + \********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var Iterators = __webpack_require__( + /*! ../internals/iterators */ + "./node_modules/core-js/internals/iterators.js" + ); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module3.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } + ), + /***/ + "./node_modules/core-js/internals/is-forced.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-forced.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize2(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == "function" ? fails(detection) : !!detection; + }; + var normalize2 = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module3.exports = isForced; + } + ), + /***/ + "./node_modules/core-js/internals/is-object.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-object.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = function(it) { + return typeof it === "object" ? it !== null : typeof it === "function"; + }; + } + ), + /***/ + "./node_modules/core-js/internals/is-pure.js": ( + /*!***************************************************!*\ + !*** ./node_modules/core-js/internals/is-pure.js ***! + \***************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = false; + } + ), + /***/ + "./node_modules/core-js/internals/iterators-core.js": ( + /*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/iterators-core.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var getPrototypeOf = __webpack_require__( + /*! ../internals/object-get-prototype-of */ + "./node_modules/core-js/internals/object-get-prototype-of.js" + ); + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var IS_PURE = __webpack_require__( + /*! ../internals/is-pure */ + "./node_modules/core-js/internals/is-pure.js" + ); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var returnThis = function() { + return this; + }; + var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + if (IteratorPrototype == void 0) IteratorPrototype = {}; + if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); + module3.exports = { + IteratorPrototype, + BUGGY_SAFARI_ITERATORS + }; + } + ), + /***/ + "./node_modules/core-js/internals/iterators.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/iterators.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = {}; + } + ), + /***/ + "./node_modules/core-js/internals/native-symbol.js": ( + /*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/native-symbol.js ***! + \*********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var fails = __webpack_require__( + /*! ../internals/fails */ + "./node_modules/core-js/internals/fails.js" + ); + module3.exports = !!Object.getOwnPropertySymbols && !fails(function() { + return !String(Symbol()); + }); + } + ), + /***/ + "./node_modules/core-js/internals/native-weak-map.js": ( + /*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/native-weak-map.js ***! + \***********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var nativeFunctionToString = __webpack_require__( + /*! ../internals/function-to-string */ + "./node_modules/core-js/internals/function-to-string.js" + ); + var WeakMap2 = global2.WeakMap; + module3.exports = typeof WeakMap2 === "function" && /native code/.test(nativeFunctionToString.call(WeakMap2)); + } + ), + /***/ + "./node_modules/core-js/internals/object-create.js": ( + /*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/object-create.js ***! + \*********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + var defineProperties = __webpack_require__( + /*! ../internals/object-define-properties */ + "./node_modules/core-js/internals/object-define-properties.js" + ); + var enumBugKeys = __webpack_require__( + /*! ../internals/enum-bug-keys */ + "./node_modules/core-js/internals/enum-bug-keys.js" + ); + var hiddenKeys = __webpack_require__( + /*! ../internals/hidden-keys */ + "./node_modules/core-js/internals/hidden-keys.js" + ); + var html2 = __webpack_require__( + /*! ../internals/html */ + "./node_modules/core-js/internals/html.js" + ); + var documentCreateElement = __webpack_require__( + /*! ../internals/document-create-element */ + "./node_modules/core-js/internals/document-create-element.js" + ); + var sharedKey = __webpack_require__( + /*! ../internals/shared-key */ + "./node_modules/core-js/internals/shared-key.js" + ); + var IE_PROTO = sharedKey("IE_PROTO"); + var PROTOTYPE = "prototype"; + var Empty = function() { + }; + var createDict = function() { + var iframe = documentCreateElement("iframe"); + var length = enumBugKeys.length; + var lt = "<"; + var script = "script"; + var gt = ">"; + var js = "java" + script + ":"; + var iframeDocument; + iframe.style.display = "none"; + html2.appendChild(iframe); + iframe.src = String(js); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + script + gt + "document.F=Object" + lt + "/" + script + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]]; + return createDict(); + }; + module3.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === void 0 ? result : defineProperties(result, Properties); + }; + hiddenKeys[IE_PROTO] = true; + } + ), + /***/ + "./node_modules/core-js/internals/object-define-properties.js": ( + /*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-properties.js ***! + \********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var DESCRIPTORS = __webpack_require__( + /*! ../internals/descriptors */ + "./node_modules/core-js/internals/descriptors.js" + ); + var definePropertyModule = __webpack_require__( + /*! ../internals/object-define-property */ + "./node_modules/core-js/internals/object-define-property.js" + ); + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + var objectKeys = __webpack_require__( + /*! ../internals/object-keys */ + "./node_modules/core-js/internals/object-keys.js" + ); + module3.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var i = 0; + var key2; + while (length > i) definePropertyModule.f(O, key2 = keys[i++], Properties[key2]); + return O; + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-define-property.js": ( + /*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-property.js ***! + \******************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var DESCRIPTORS = __webpack_require__( + /*! ../internals/descriptors */ + "./node_modules/core-js/internals/descriptors.js" + ); + var IE8_DOM_DEFINE = __webpack_require__( + /*! ../internals/ie8-dom-define */ + "./node_modules/core-js/internals/ie8-dom-define.js" + ); + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + var toPrimitive = __webpack_require__( + /*! ../internals/to-primitive */ + "./node_modules/core-js/internals/to-primitive.js" + ); + var nativeDefineProperty = Object.defineProperty; + exports3.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported"); + if ("value" in Attributes) O[P] = Attributes.value; + return O; + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-get-own-property-descriptor.js": ( + /*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \******************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var DESCRIPTORS = __webpack_require__( + /*! ../internals/descriptors */ + "./node_modules/core-js/internals/descriptors.js" + ); + var propertyIsEnumerableModule = __webpack_require__( + /*! ../internals/object-property-is-enumerable */ + "./node_modules/core-js/internals/object-property-is-enumerable.js" + ); + var createPropertyDescriptor = __webpack_require__( + /*! ../internals/create-property-descriptor */ + "./node_modules/core-js/internals/create-property-descriptor.js" + ); + var toIndexedObject = __webpack_require__( + /*! ../internals/to-indexed-object */ + "./node_modules/core-js/internals/to-indexed-object.js" + ); + var toPrimitive = __webpack_require__( + /*! ../internals/to-primitive */ + "./node_modules/core-js/internals/to-primitive.js" + ); + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var IE8_DOM_DEFINE = __webpack_require__( + /*! ../internals/ie8-dom-define */ + "./node_modules/core-js/internals/ie8-dom-define.js" + ); + var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports3.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-get-own-property-names.js": ( + /*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! + \*************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var internalObjectKeys = __webpack_require__( + /*! ../internals/object-keys-internal */ + "./node_modules/core-js/internals/object-keys-internal.js" + ); + var enumBugKeys = __webpack_require__( + /*! ../internals/enum-bug-keys */ + "./node_modules/core-js/internals/enum-bug-keys.js" + ); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports3.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-get-own-property-symbols.js": ( + /*!***************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! + \***************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + exports3.f = Object.getOwnPropertySymbols; + } + ), + /***/ + "./node_modules/core-js/internals/object-get-prototype-of.js": ( + /*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! + \*******************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var toObject = __webpack_require__( + /*! ../internals/to-object */ + "./node_modules/core-js/internals/to-object.js" + ); + var sharedKey = __webpack_require__( + /*! ../internals/shared-key */ + "./node_modules/core-js/internals/shared-key.js" + ); + var CORRECT_PROTOTYPE_GETTER = __webpack_require__( + /*! ../internals/correct-prototype-getter */ + "./node_modules/core-js/internals/correct-prototype-getter.js" + ); + var IE_PROTO = sharedKey("IE_PROTO"); + var ObjectPrototype = Object.prototype; + module3.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function(O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == "function" && O instanceof O.constructor) { + return O.constructor.prototype; + } + return O instanceof Object ? ObjectPrototype : null; + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-keys-internal.js": ( + /*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/object-keys-internal.js ***! + \****************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var toIndexedObject = __webpack_require__( + /*! ../internals/to-indexed-object */ + "./node_modules/core-js/internals/to-indexed-object.js" + ); + var arrayIncludes = __webpack_require__( + /*! ../internals/array-includes */ + "./node_modules/core-js/internals/array-includes.js" + ); + var hiddenKeys = __webpack_require__( + /*! ../internals/hidden-keys */ + "./node_modules/core-js/internals/hidden-keys.js" + ); + var arrayIndexOf = arrayIncludes(false); + module3.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key2; + for (key2 in O) !has(hiddenKeys, key2) && has(O, key2) && result.push(key2); + while (names.length > i) if (has(O, key2 = names[i++])) { + ~arrayIndexOf(result, key2) || result.push(key2); + } + return result; + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-keys.js": ( + /*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/object-keys.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var internalObjectKeys = __webpack_require__( + /*! ../internals/object-keys-internal */ + "./node_modules/core-js/internals/object-keys-internal.js" + ); + var enumBugKeys = __webpack_require__( + /*! ../internals/enum-bug-keys */ + "./node_modules/core-js/internals/enum-bug-keys.js" + ); + module3.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } + ), + /***/ + "./node_modules/core-js/internals/object-property-is-enumerable.js": ( + /*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! + \*************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var nativePropertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + exports3.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : nativePropertyIsEnumerable; + } + ), + /***/ + "./node_modules/core-js/internals/object-set-prototype-of.js": ( + /*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! + \*******************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var validateSetPrototypeOfArguments = __webpack_require__( + /*! ../internals/validate-set-prototype-of-arguments */ + "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js" + ); + module3.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var correctSetter = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; + setter.call(test, []); + correctSetter = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + validateSetPrototypeOfArguments(O, proto); + if (correctSetter) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : void 0); + } + ), + /***/ + "./node_modules/core-js/internals/own-keys.js": ( + /*!****************************************************!*\ + !*** ./node_modules/core-js/internals/own-keys.js ***! + \****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var getOwnPropertyNamesModule = __webpack_require__( + /*! ../internals/object-get-own-property-names */ + "./node_modules/core-js/internals/object-get-own-property-names.js" + ); + var getOwnPropertySymbolsModule = __webpack_require__( + /*! ../internals/object-get-own-property-symbols */ + "./node_modules/core-js/internals/object-get-own-property-symbols.js" + ); + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + var Reflect2 = global2.Reflect; + module3.exports = Reflect2 && Reflect2.ownKeys || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; + }; + } + ), + /***/ + "./node_modules/core-js/internals/path.js": ( + /*!************************************************!*\ + !*** ./node_modules/core-js/internals/path.js ***! + \************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + module3.exports = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + } + ), + /***/ + "./node_modules/core-js/internals/redefine.js": ( + /*!****************************************************!*\ + !*** ./node_modules/core-js/internals/redefine.js ***! + \****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var shared = __webpack_require__( + /*! ../internals/shared */ + "./node_modules/core-js/internals/shared.js" + ); + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var setGlobal = __webpack_require__( + /*! ../internals/set-global */ + "./node_modules/core-js/internals/set-global.js" + ); + var nativeFunctionToString = __webpack_require__( + /*! ../internals/function-to-string */ + "./node_modules/core-js/internals/function-to-string.js" + ); + var InternalStateModule = __webpack_require__( + /*! ../internals/internal-state */ + "./node_modules/core-js/internals/internal-state.js" + ); + var getInternalState = InternalStateModule.get; + var enforceInternalState = InternalStateModule.enforce; + var TEMPLATE = String(nativeFunctionToString).split("toString"); + shared("inspectSource", function(it) { + return nativeFunctionToString.call(it); + }); + (module3.exports = function(O, key2, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == "function") { + if (typeof key2 == "string" && !has(value, "name")) hide(value, "name", key2); + enforceInternalState(value).source = TEMPLATE.join(typeof key2 == "string" ? key2 : ""); + } + if (O === global2) { + if (simple) O[key2] = value; + else setGlobal(key2, value); + return; + } else if (!unsafe) { + delete O[key2]; + } else if (!noTargetGet && O[key2]) { + simple = true; + } + if (simple) O[key2] = value; + else hide(O, key2, value); + })(Function.prototype, "toString", function toString() { + return typeof this == "function" && getInternalState(this).source || nativeFunctionToString.call(this); + }); + } + ), + /***/ + "./node_modules/core-js/internals/require-object-coercible.js": ( + /*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/require-object-coercible.js ***! + \********************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + module3.exports = function(it) { + if (it == void 0) throw TypeError("Can't call method on " + it); + return it; + }; + } + ), + /***/ + "./node_modules/core-js/internals/set-global.js": ( + /*!******************************************************!*\ + !*** ./node_modules/core-js/internals/set-global.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var hide = __webpack_require__( + /*! ../internals/hide */ + "./node_modules/core-js/internals/hide.js" + ); + module3.exports = function(key2, value) { + try { + hide(global2, key2, value); + } catch (error) { + global2[key2] = value; + } + return value; + }; + } + ), + /***/ + "./node_modules/core-js/internals/set-to-string-tag.js": ( + /*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! + \*************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var defineProperty = __webpack_require__( + /*! ../internals/object-define-property */ + "./node_modules/core-js/internals/object-define-property.js" + ).f; + var has = __webpack_require__( + /*! ../internals/has */ + "./node_modules/core-js/internals/has.js" + ); + var wellKnownSymbol = __webpack_require__( + /*! ../internals/well-known-symbol */ + "./node_modules/core-js/internals/well-known-symbol.js" + ); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module3.exports = function(it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/shared-key.js": ( + /*!******************************************************!*\ + !*** ./node_modules/core-js/internals/shared-key.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var shared = __webpack_require__( + /*! ../internals/shared */ + "./node_modules/core-js/internals/shared.js" + ); + var uid = __webpack_require__( + /*! ../internals/uid */ + "./node_modules/core-js/internals/uid.js" + ); + var keys = shared("keys"); + module3.exports = function(key2) { + return keys[key2] || (keys[key2] = uid(key2)); + }; + } + ), + /***/ + "./node_modules/core-js/internals/shared.js": ( + /*!**************************************************!*\ + !*** ./node_modules/core-js/internals/shared.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var setGlobal = __webpack_require__( + /*! ../internals/set-global */ + "./node_modules/core-js/internals/set-global.js" + ); + var IS_PURE = __webpack_require__( + /*! ../internals/is-pure */ + "./node_modules/core-js/internals/is-pure.js" + ); + var SHARED = "__core-js_shared__"; + var store = global2[SHARED] || setGlobal(SHARED, {}); + (module3.exports = function(key2, value) { + return store[key2] || (store[key2] = value !== void 0 ? value : {}); + })("versions", []).push({ + version: "3.1.3", + mode: IS_PURE ? "pure" : "global", + copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)" + }); + } + ), + /***/ + "./node_modules/core-js/internals/string-at.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/string-at.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var toInteger = __webpack_require__( + /*! ../internals/to-integer */ + "./node_modules/core-js/internals/to-integer.js" + ); + var requireObjectCoercible = __webpack_require__( + /*! ../internals/require-object-coercible */ + "./node_modules/core-js/internals/require-object-coercible.js" + ); + module3.exports = function(that, pos, CONVERT_TO_STRING) { + var S = String(requireObjectCoercible(that)); + var position = toInteger(pos); + var size = S.length; + var first2, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? "" : void 0; + first2 = S.charCodeAt(position); + return first2 < 55296 || first2 > 56319 || position + 1 === size || (second = S.charCodeAt(position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? S.charAt(position) : first2 : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first2 - 55296 << 10) + (second - 56320) + 65536; + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-absolute-index.js": ( + /*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-absolute-index.js ***! + \*************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var toInteger = __webpack_require__( + /*! ../internals/to-integer */ + "./node_modules/core-js/internals/to-integer.js" + ); + var max = Math.max; + var min = Math.min; + module3.exports = function(index2, length) { + var integer = toInteger(index2); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-indexed-object.js": ( + /*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-indexed-object.js ***! + \*************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var IndexedObject = __webpack_require__( + /*! ../internals/indexed-object */ + "./node_modules/core-js/internals/indexed-object.js" + ); + var requireObjectCoercible = __webpack_require__( + /*! ../internals/require-object-coercible */ + "./node_modules/core-js/internals/require-object-coercible.js" + ); + module3.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-integer.js": ( + /*!******************************************************!*\ + !*** ./node_modules/core-js/internals/to-integer.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + var ceil = Math.ceil; + var floor = Math.floor; + module3.exports = function(argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-length.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-length.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var toInteger = __webpack_require__( + /*! ../internals/to-integer */ + "./node_modules/core-js/internals/to-integer.js" + ); + var min = Math.min; + module3.exports = function(argument) { + return argument > 0 ? min(toInteger(argument), 9007199254740991) : 0; + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-object.js": ( + /*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-object.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var requireObjectCoercible = __webpack_require__( + /*! ../internals/require-object-coercible */ + "./node_modules/core-js/internals/require-object-coercible.js" + ); + module3.exports = function(argument) { + return Object(requireObjectCoercible(argument)); + }; + } + ), + /***/ + "./node_modules/core-js/internals/to-primitive.js": ( + /*!********************************************************!*\ + !*** ./node_modules/core-js/internals/to-primitive.js ***! + \********************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var isObject2 = __webpack_require__( + /*! ../internals/is-object */ + "./node_modules/core-js/internals/is-object.js" + ); + module3.exports = function(it, S) { + if (!isObject2(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == "function" && !isObject2(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == "function" && !isObject2(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == "function" && !isObject2(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); + }; + } + ), + /***/ + "./node_modules/core-js/internals/uid.js": ( + /*!***********************************************!*\ + !*** ./node_modules/core-js/internals/uid.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + var id = 0; + var postfix = Math.random(); + module3.exports = function(key2) { + return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id + postfix).toString(36)); + }; + } + ), + /***/ + "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js": ( + /*!*******************************************************************************!*\ + !*** ./node_modules/core-js/internals/validate-set-prototype-of-arguments.js ***! + \*******************************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var isObject2 = __webpack_require__( + /*! ../internals/is-object */ + "./node_modules/core-js/internals/is-object.js" + ); + var anObject = __webpack_require__( + /*! ../internals/an-object */ + "./node_modules/core-js/internals/an-object.js" + ); + module3.exports = function(O, proto) { + anObject(O); + if (!isObject2(proto) && proto !== null) { + throw TypeError("Can't set " + String(proto) + " as a prototype"); + } + }; + } + ), + /***/ + "./node_modules/core-js/internals/well-known-symbol.js": ( + /*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/well-known-symbol.js ***! + \*************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var global2 = __webpack_require__( + /*! ../internals/global */ + "./node_modules/core-js/internals/global.js" + ); + var shared = __webpack_require__( + /*! ../internals/shared */ + "./node_modules/core-js/internals/shared.js" + ); + var uid = __webpack_require__( + /*! ../internals/uid */ + "./node_modules/core-js/internals/uid.js" + ); + var NATIVE_SYMBOL = __webpack_require__( + /*! ../internals/native-symbol */ + "./node_modules/core-js/internals/native-symbol.js" + ); + var Symbol2 = global2.Symbol; + var store = shared("wks"); + module3.exports = function(name) { + return store[name] || (store[name] = NATIVE_SYMBOL && Symbol2[name] || (NATIVE_SYMBOL ? Symbol2 : uid)("Symbol." + name)); + }; + } + ), + /***/ + "./node_modules/core-js/modules/es.array.from.js": ( + /*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.from.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + var $ = __webpack_require__( + /*! ../internals/export */ + "./node_modules/core-js/internals/export.js" + ); + var from = __webpack_require__( + /*! ../internals/array-from */ + "./node_modules/core-js/internals/array-from.js" + ); + var checkCorrectnessOfIteration = __webpack_require__( + /*! ../internals/check-correctness-of-iteration */ + "./node_modules/core-js/internals/check-correctness-of-iteration.js" + ); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from + }); + } + ), + /***/ + "./node_modules/core-js/modules/es.string.iterator.js": ( + /*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.iterator.js ***! + \************************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var codePointAt = __webpack_require__( + /*! ../internals/string-at */ + "./node_modules/core-js/internals/string-at.js" + ); + var InternalStateModule = __webpack_require__( + /*! ../internals/internal-state */ + "./node_modules/core-js/internals/internal-state.js" + ); + var defineIterator = __webpack_require__( + /*! ../internals/define-iterator */ + "./node_modules/core-js/internals/define-iterator.js" + ); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index2 = state.index; + var point; + if (index2 >= string.length) return { value: void 0, done: true }; + point = codePointAt(string, index2, true); + state.index += point.length; + return { value: point, done: false }; + }); + } + ), + /***/ + "./node_modules/webpack/buildin/global.js": ( + /*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ + /*! no static exports found */ + /***/ + function(module3, exports3) { + var g; + g = /* @__PURE__ */ function() { + return this; + }(); + try { + g = g || Function("return this")() || (1, eval)("this"); + } catch (e) { + if (typeof window === "object") g = window; + } + module3.exports = g; + } + ), + /***/ + "./src/default-attrs.json": ( + /*!********************************!*\ + !*** ./src/default-attrs.json ***! + \********************************/ + /*! exports provided: xmlns, width, height, viewBox, fill, stroke, stroke-width, stroke-linecap, stroke-linejoin, default */ + /***/ + function(module3) { + module3.exports = { "xmlns": "http://www.w3.org/2000/svg", "width": 24, "height": 24, "viewBox": "0 0 24 24", "fill": "none", "stroke": "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }; + } + ), + /***/ + "./src/icon.js": ( + /*!*********************!*\ + !*** ./src/icon.js ***! + \*********************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + Object.defineProperty(exports3, "__esModule", { + value: true + }); + var _extends = Object.assign || function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key2 in source) { + if (Object.prototype.hasOwnProperty.call(source, key2)) { + target[key2] = source[key2]; + } + } + } + return target; + }; + var _createClass = /* @__PURE__ */ function() { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + return function(Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + var _dedupe = __webpack_require__( + /*! classnames/dedupe */ + "./node_modules/classnames/dedupe.js" + ); + var _dedupe2 = _interopRequireDefault(_dedupe); + var _defaultAttrs = __webpack_require__( + /*! ./default-attrs.json */ + "./src/default-attrs.json" + ); + var _defaultAttrs2 = _interopRequireDefault(_defaultAttrs); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function _classCallCheck(instance10, Constructor) { + if (!(instance10 instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + var Icon = function() { + function Icon2(name, contents) { + var tags = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; + _classCallCheck(this, Icon2); + this.name = name; + this.contents = contents; + this.tags = tags; + this.attrs = _extends({}, _defaultAttrs2.default, { class: "feather feather-" + name }); + } + _createClass(Icon2, [{ + key: "toSvg", + value: function toSvg() { + var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + var combinedAttrs = _extends({}, this.attrs, attrs, { class: (0, _dedupe2.default)(this.attrs.class, attrs.class) }); + return "" + this.contents + ""; + } + /** + * Return string representation of an `Icon`. + * + * Added for backward compatibility. If old code expects `feather.icons.` + * to be a string, `toString()` will get implicitly called. + * + * @returns {string} + */ + }, { + key: "toString", + value: function toString() { + return this.contents; + } + }]); + return Icon2; + }(); + function attrsToString(attrs) { + return Object.keys(attrs).map(function(key2) { + return key2 + '="' + attrs[key2] + '"'; + }).join(" "); + } + exports3.default = Icon; + } + ), + /***/ + "./src/icons.js": ( + /*!**********************!*\ + !*** ./src/icons.js ***! + \**********************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + Object.defineProperty(exports3, "__esModule", { + value: true + }); + var _icon = __webpack_require__( + /*! ./icon */ + "./src/icon.js" + ); + var _icon2 = _interopRequireDefault(_icon); + var _icons = __webpack_require__( + /*! ../dist/icons.json */ + "./dist/icons.json" + ); + var _icons2 = _interopRequireDefault(_icons); + var _tags = __webpack_require__( + /*! ./tags.json */ + "./src/tags.json" + ); + var _tags2 = _interopRequireDefault(_tags); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + exports3.default = Object.keys(_icons2.default).map(function(key2) { + return new _icon2.default(key2, _icons2.default[key2], _tags2.default[key2]); + }).reduce(function(object, icon) { + object[icon.name] = icon; + return object; + }, {}); + } + ), + /***/ + "./src/index.js": ( + /*!**********************!*\ + !*** ./src/index.js ***! + \**********************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + var _icons = __webpack_require__( + /*! ./icons */ + "./src/icons.js" + ); + var _icons2 = _interopRequireDefault(_icons); + var _toSvg = __webpack_require__( + /*! ./to-svg */ + "./src/to-svg.js" + ); + var _toSvg2 = _interopRequireDefault(_toSvg); + var _replace = __webpack_require__( + /*! ./replace */ + "./src/replace.js" + ); + var _replace2 = _interopRequireDefault(_replace); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + module3.exports = { icons: _icons2.default, toSvg: _toSvg2.default, replace: _replace2.default }; + } + ), + /***/ + "./src/replace.js": ( + /*!************************!*\ + !*** ./src/replace.js ***! + \************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + Object.defineProperty(exports3, "__esModule", { + value: true + }); + var _extends = Object.assign || function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key2 in source) { + if (Object.prototype.hasOwnProperty.call(source, key2)) { + target[key2] = source[key2]; + } + } + } + return target; + }; + var _dedupe = __webpack_require__( + /*! classnames/dedupe */ + "./node_modules/classnames/dedupe.js" + ); + var _dedupe2 = _interopRequireDefault(_dedupe); + var _icons = __webpack_require__( + /*! ./icons */ + "./src/icons.js" + ); + var _icons2 = _interopRequireDefault(_icons); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function replace() { + var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + if (typeof document === "undefined") { + throw new Error("`feather.replace()` only works in a browser environment."); + } + var elementsToReplace = document.querySelectorAll("[data-feather]"); + Array.from(elementsToReplace).forEach(function(element2) { + return replaceElement(element2, attrs); + }); + } + function replaceElement(element2) { + var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + var elementAttrs = getAttrs(element2); + var name = elementAttrs["data-feather"]; + delete elementAttrs["data-feather"]; + if (_icons2.default[name] === void 0) { + console.warn("feather: '" + name + "' is not a valid icon"); + return; + } + var svgString = _icons2.default[name].toSvg(_extends({}, attrs, elementAttrs, { class: (0, _dedupe2.default)(attrs.class, elementAttrs.class) })); + var svgDocument = new DOMParser().parseFromString(svgString, "image/svg+xml"); + var svgElement = svgDocument.querySelector("svg"); + element2.parentNode.replaceChild(svgElement, element2); + } + function getAttrs(element2) { + return Array.from(element2.attributes).reduce(function(attrs, attr2) { + attrs[attr2.name] = attr2.value; + return attrs; + }, {}); + } + exports3.default = replace; + } + ), + /***/ + "./src/tags.json": ( + /*!***********************!*\ + !*** ./src/tags.json ***! + \***********************/ + /*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, archive, at-sign, award, aperture, bar-chart, bar-chart-2, battery, battery-charging, bell, bell-off, bluetooth, book-open, book, bookmark, box, briefcase, calendar, camera, cast, chevron-down, chevron-up, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-rain, cloud-snow, cloud, codepen, codesandbox, code, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, dollar-sign, droplet, edit, edit-2, edit-3, eye, eye-off, external-link, facebook, fast-forward, figma, file-minus, file-plus, file-text, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, instagram, key, layers, layout, life-buoy, link, link-2, linkedin, list, lock, log-in, log-out, mail, map-pin, map, maximize, maximize-2, meh, menu, message-circle, message-square, mic-off, mic, minimize, minimize-2, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation, navigation-2, octagon, package, paperclip, pause, pause-circle, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, play, pie-chart, play-circle, plus, plus-circle, plus-square, pocket, power, printer, radio, refresh-cw, refresh-ccw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, settings, share-2, shield, shield-off, shopping-bag, shopping-cart, shuffle, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash, trash-2, triangle, truck, tv, twitch, twitter, type, umbrella, unlock, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume, volume-1, volume-2, volume-x, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */ + /***/ + function(module3) { + module3.exports = { "activity": ["pulse", "health", "action", "motion"], "airplay": ["stream", "cast", "mirroring"], "alert-circle": ["warning", "alert", "danger"], "alert-octagon": ["warning", "alert", "danger"], "alert-triangle": ["warning", "alert", "danger"], "align-center": ["text alignment", "center"], "align-justify": ["text alignment", "justified"], "align-left": ["text alignment", "left"], "align-right": ["text alignment", "right"], "anchor": [], "archive": ["index", "box"], "at-sign": ["mention", "at", "email", "message"], "award": ["achievement", "badge"], "aperture": ["camera", "photo"], "bar-chart": ["statistics", "diagram", "graph"], "bar-chart-2": ["statistics", "diagram", "graph"], "battery": ["power", "electricity"], "battery-charging": ["power", "electricity"], "bell": ["alarm", "notification", "sound"], "bell-off": ["alarm", "notification", "silent"], "bluetooth": ["wireless"], "book-open": ["read", "library"], "book": ["read", "dictionary", "booklet", "magazine", "library"], "bookmark": ["read", "clip", "marker", "tag"], "box": ["cube"], "briefcase": ["work", "bag", "baggage", "folder"], "calendar": ["date"], "camera": ["photo"], "cast": ["chromecast", "airplay"], "chevron-down": ["expand"], "chevron-up": ["collapse"], "circle": ["off", "zero", "record"], "clipboard": ["copy"], "clock": ["time", "watch", "alarm"], "cloud-drizzle": ["weather", "shower"], "cloud-lightning": ["weather", "bolt"], "cloud-rain": ["weather"], "cloud-snow": ["weather", "blizzard"], "cloud": ["weather"], "codepen": ["logo"], "codesandbox": ["logo"], "code": ["source", "programming"], "coffee": ["drink", "cup", "mug", "tea", "cafe", "hot", "beverage"], "columns": ["layout"], "command": ["keyboard", "cmd", "terminal", "prompt"], "compass": ["navigation", "safari", "travel", "direction"], "copy": ["clone", "duplicate"], "corner-down-left": ["arrow", "return"], "corner-down-right": ["arrow"], "corner-left-down": ["arrow"], "corner-left-up": ["arrow"], "corner-right-down": ["arrow"], "corner-right-up": ["arrow"], "corner-up-left": ["arrow"], "corner-up-right": ["arrow"], "cpu": ["processor", "technology"], "credit-card": ["purchase", "payment", "cc"], "crop": ["photo", "image"], "crosshair": ["aim", "target"], "database": ["storage", "memory"], "delete": ["remove"], "disc": ["album", "cd", "dvd", "music"], "dollar-sign": ["currency", "money", "payment"], "droplet": ["water"], "edit": ["pencil", "change"], "edit-2": ["pencil", "change"], "edit-3": ["pencil", "change"], "eye": ["view", "watch"], "eye-off": ["view", "watch", "hide", "hidden"], "external-link": ["outbound"], "facebook": ["logo", "social"], "fast-forward": ["music"], "figma": ["logo", "design", "tool"], "file-minus": ["delete", "remove", "erase"], "file-plus": ["add", "create", "new"], "file-text": ["data", "txt", "pdf"], "film": ["movie", "video"], "filter": ["funnel", "hopper"], "flag": ["report"], "folder-minus": ["directory"], "folder-plus": ["directory"], "folder": ["directory"], "framer": ["logo", "design", "tool"], "frown": ["emoji", "face", "bad", "sad", "emotion"], "gift": ["present", "box", "birthday", "party"], "git-branch": ["code", "version control"], "git-commit": ["code", "version control"], "git-merge": ["code", "version control"], "git-pull-request": ["code", "version control"], "github": ["logo", "version control"], "gitlab": ["logo", "version control"], "globe": ["world", "browser", "language", "translate"], "hard-drive": ["computer", "server", "memory", "data"], "hash": ["hashtag", "number", "pound"], "headphones": ["music", "audio", "sound"], "heart": ["like", "love", "emotion"], "help-circle": ["question mark"], "hexagon": ["shape", "node.js", "logo"], "home": ["house", "living"], "image": ["picture"], "inbox": ["email"], "instagram": ["logo", "camera"], "key": ["password", "login", "authentication", "secure"], "layers": ["stack"], "layout": ["window", "webpage"], "life-buoy": ["help", "life ring", "support"], "link": ["chain", "url"], "link-2": ["chain", "url"], "linkedin": ["logo", "social media"], "list": ["options"], "lock": ["security", "password", "secure"], "log-in": ["sign in", "arrow", "enter"], "log-out": ["sign out", "arrow", "exit"], "mail": ["email", "message"], "map-pin": ["location", "navigation", "travel", "marker"], "map": ["location", "navigation", "travel"], "maximize": ["fullscreen"], "maximize-2": ["fullscreen", "arrows", "expand"], "meh": ["emoji", "face", "neutral", "emotion"], "menu": ["bars", "navigation", "hamburger"], "message-circle": ["comment", "chat"], "message-square": ["comment", "chat"], "mic-off": ["record", "sound", "mute"], "mic": ["record", "sound", "listen"], "minimize": ["exit fullscreen", "close"], "minimize-2": ["exit fullscreen", "arrows", "close"], "minus": ["subtract"], "monitor": ["tv", "screen", "display"], "moon": ["dark", "night"], "more-horizontal": ["ellipsis"], "more-vertical": ["ellipsis"], "mouse-pointer": ["arrow", "cursor"], "move": ["arrows"], "music": ["note"], "navigation": ["location", "travel"], "navigation-2": ["location", "travel"], "octagon": ["stop"], "package": ["box", "container"], "paperclip": ["attachment"], "pause": ["music", "stop"], "pause-circle": ["music", "audio", "stop"], "pen-tool": ["vector", "drawing"], "percent": ["discount"], "phone-call": ["ring"], "phone-forwarded": ["call"], "phone-incoming": ["call"], "phone-missed": ["call"], "phone-off": ["call", "mute"], "phone-outgoing": ["call"], "phone": ["call"], "play": ["music", "start"], "pie-chart": ["statistics", "diagram"], "play-circle": ["music", "start"], "plus": ["add", "new"], "plus-circle": ["add", "new"], "plus-square": ["add", "new"], "pocket": ["logo", "save"], "power": ["on", "off"], "printer": ["fax", "office", "device"], "radio": ["signal"], "refresh-cw": ["synchronise", "arrows"], "refresh-ccw": ["arrows"], "repeat": ["loop", "arrows"], "rewind": ["music"], "rotate-ccw": ["arrow"], "rotate-cw": ["arrow"], "rss": ["feed", "subscribe"], "save": ["floppy disk"], "scissors": ["cut"], "search": ["find", "magnifier", "magnifying glass"], "send": ["message", "mail", "email", "paper airplane", "paper aeroplane"], "settings": ["cog", "edit", "gear", "preferences"], "share-2": ["network", "connections"], "shield": ["security", "secure"], "shield-off": ["security", "insecure"], "shopping-bag": ["ecommerce", "cart", "purchase", "store"], "shopping-cart": ["ecommerce", "cart", "purchase", "store"], "shuffle": ["music"], "skip-back": ["music"], "skip-forward": ["music"], "slack": ["logo"], "slash": ["ban", "no"], "sliders": ["settings", "controls"], "smartphone": ["cellphone", "device"], "smile": ["emoji", "face", "happy", "good", "emotion"], "speaker": ["audio", "music"], "star": ["bookmark", "favorite", "like"], "stop-circle": ["media", "music"], "sun": ["brightness", "weather", "light"], "sunrise": ["weather", "time", "morning", "day"], "sunset": ["weather", "time", "evening", "night"], "tablet": ["device"], "tag": ["label"], "target": ["logo", "bullseye"], "terminal": ["code", "command line", "prompt"], "thermometer": ["temperature", "celsius", "fahrenheit", "weather"], "thumbs-down": ["dislike", "bad", "emotion"], "thumbs-up": ["like", "good", "emotion"], "toggle-left": ["on", "off", "switch"], "toggle-right": ["on", "off", "switch"], "tool": ["settings", "spanner"], "trash": ["garbage", "delete", "remove", "bin"], "trash-2": ["garbage", "delete", "remove", "bin"], "triangle": ["delta"], "truck": ["delivery", "van", "shipping", "transport", "lorry"], "tv": ["television", "stream"], "twitch": ["logo"], "twitter": ["logo", "social"], "type": ["text"], "umbrella": ["rain", "weather"], "unlock": ["security"], "user-check": ["followed", "subscribed"], "user-minus": ["delete", "remove", "unfollow", "unsubscribe"], "user-plus": ["new", "add", "create", "follow", "subscribe"], "user-x": ["delete", "remove", "unfollow", "unsubscribe", "unavailable"], "user": ["person", "account"], "users": ["group"], "video-off": ["camera", "movie", "film"], "video": ["camera", "movie", "film"], "voicemail": ["phone"], "volume": ["music", "sound", "mute"], "volume-1": ["music", "sound"], "volume-2": ["music", "sound"], "volume-x": ["music", "sound", "mute"], "watch": ["clock", "time"], "wifi-off": ["disabled"], "wifi": ["connection", "signal", "wireless"], "wind": ["weather", "air"], "x-circle": ["cancel", "close", "delete", "remove", "times", "clear"], "x-octagon": ["delete", "stop", "alert", "warning", "times", "clear"], "x-square": ["cancel", "close", "delete", "remove", "times", "clear"], "x": ["cancel", "close", "delete", "remove", "times", "clear"], "youtube": ["logo", "video", "play"], "zap-off": ["flash", "camera", "lightning"], "zap": ["flash", "camera", "lightning"], "zoom-in": ["magnifying glass"], "zoom-out": ["magnifying glass"] }; + } + ), + /***/ + "./src/to-svg.js": ( + /*!***********************!*\ + !*** ./src/to-svg.js ***! + \***********************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + "use strict"; + Object.defineProperty(exports3, "__esModule", { + value: true + }); + var _icons = __webpack_require__( + /*! ./icons */ + "./src/icons.js" + ); + var _icons2 = _interopRequireDefault(_icons); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function toSvg(name) { + var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."); + if (!name) { + throw new Error("The required `key` (icon name) parameter is missing."); + } + if (!_icons2.default[name]) { + throw new Error("No icon matching '" + name + "'. See the complete list of icons at https://feathericons.com"); + } + return _icons2.default[name].toSvg(attrs); + } + exports3.default = toSvg; + } + ), + /***/ + 0: ( + /*!**************************************************!*\ + !*** multi core-js/es/array/from ./src/index.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ + function(module3, exports3, __webpack_require__) { + __webpack_require__( + /*! core-js/es/array/from */ + "./node_modules/core-js/es/array/from.js" + ); + module3.exports = __webpack_require__( + /*! /home/runner/work/feather/feather/src/index.js */ + "./src/index.js" + ); + } + ) + /******/ + }) + ); + }); + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => ObsidianGit +}); +module.exports = __toCommonJS(main_exports); +init_polyfill_buffer(); + +// node_modules/.pnpm/isomorphic-git@1.27.1/node_modules/isomorphic-git/index.js +init_polyfill_buffer(); +var import_async_lock = __toESM(require_async_lock(), 1); +var import_sha1 = __toESM(require_sha1(), 1); +var import_crc_32 = __toESM(require_crc32(), 1); +var import_pako = __toESM(require_pako(), 1); +var import_pify = __toESM(require_pify(), 1); +var import_ignore = __toESM(require_ignore(), 1); +var import_clean_git_ref = __toESM(require_lib2(), 1); +var import_diff3 = __toESM(require_diff3(), 1); +var BaseError = class _BaseError extends Error { + constructor(message) { + super(message); + this.caller = ""; + } + toJSON() { + return { + code: this.code, + data: this.data, + caller: this.caller, + message: this.message, + stack: this.stack + }; + } + fromJSON(json) { + const e = new _BaseError(json.message); + e.code = json.code; + e.data = json.data; + e.caller = json.caller; + e.stack = json.stack; + return e; + } + get isIsomorphicGitError() { + return true; + } +}; +var UnmergedPathsError = class _UnmergedPathsError extends BaseError { + /** + * @param {Array} filepaths + */ + constructor(filepaths) { + super( + `Modifying the index is not possible because you have unmerged files: ${filepaths.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.` + ); + this.code = this.name = _UnmergedPathsError.code; + this.data = { filepaths }; + } +}; +UnmergedPathsError.code = "UnmergedPathsError"; +var InternalError = class _InternalError extends BaseError { + /** + * @param {string} message + */ + constructor(message) { + super( + `An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${message}` + ); + this.code = this.name = _InternalError.code; + this.data = { message }; + } +}; +InternalError.code = "InternalError"; +var UnsafeFilepathError = class _UnsafeFilepathError extends BaseError { + /** + * @param {string} filepath + */ + constructor(filepath) { + super(`The filepath "${filepath}" contains unsafe character sequences`); + this.code = this.name = _UnsafeFilepathError.code; + this.data = { filepath }; + } +}; +UnsafeFilepathError.code = "UnsafeFilepathError"; +var BufferCursor = class { + constructor(buffer2) { + this.buffer = buffer2; + this._start = 0; + } + eof() { + return this._start >= this.buffer.length; + } + tell() { + return this._start; + } + seek(n) { + this._start = n; + } + slice(n) { + const r = this.buffer.slice(this._start, this._start + n); + this._start += n; + return r; + } + toString(enc, length) { + const r = this.buffer.toString(enc, this._start, this._start + length); + this._start += length; + return r; + } + write(value, length, enc) { + const r = this.buffer.write(value, this._start, length, enc); + this._start += length; + return r; + } + copy(source, start, end) { + const r = source.copy(this.buffer, this._start, start, end); + this._start += r; + return r; + } + readUInt8() { + const r = this.buffer.readUInt8(this._start); + this._start += 1; + return r; + } + writeUInt8(value) { + const r = this.buffer.writeUInt8(value, this._start); + this._start += 1; + return r; + } + readUInt16BE() { + const r = this.buffer.readUInt16BE(this._start); + this._start += 2; + return r; + } + writeUInt16BE(value) { + const r = this.buffer.writeUInt16BE(value, this._start); + this._start += 2; + return r; + } + readUInt32BE() { + const r = this.buffer.readUInt32BE(this._start); + this._start += 4; + return r; + } + writeUInt32BE(value) { + const r = this.buffer.writeUInt32BE(value, this._start); + this._start += 4; + return r; + } +}; +function compareStrings(a, b) { + return -(a < b) || +(a > b); +} +function comparePath(a, b) { + return compareStrings(a.path, b.path); +} +function normalizeMode(mode) { + let type = mode > 0 ? mode >> 12 : 0; + if (type !== 4 && type !== 8 && type !== 10 && type !== 14) { + type = 8; + } + let permissions = mode & 511; + if (permissions & 73) { + permissions = 493; + } else { + permissions = 420; + } + if (type !== 8) permissions = 0; + return (type << 12) + permissions; +} +var MAX_UINT32 = 2 ** 32; +function SecondsNanoseconds(givenSeconds, givenNanoseconds, milliseconds, date) { + if (givenSeconds !== void 0 && givenNanoseconds !== void 0) { + return [givenSeconds, givenNanoseconds]; + } + if (milliseconds === void 0) { + milliseconds = date.valueOf(); + } + const seconds = Math.floor(milliseconds / 1e3); + const nanoseconds = (milliseconds - seconds * 1e3) * 1e6; + return [seconds, nanoseconds]; +} +function normalizeStats(e) { + const [ctimeSeconds, ctimeNanoseconds] = SecondsNanoseconds( + e.ctimeSeconds, + e.ctimeNanoseconds, + e.ctimeMs, + e.ctime + ); + const [mtimeSeconds, mtimeNanoseconds] = SecondsNanoseconds( + e.mtimeSeconds, + e.mtimeNanoseconds, + e.mtimeMs, + e.mtime + ); + return { + ctimeSeconds: ctimeSeconds % MAX_UINT32, + ctimeNanoseconds: ctimeNanoseconds % MAX_UINT32, + mtimeSeconds: mtimeSeconds % MAX_UINT32, + mtimeNanoseconds: mtimeNanoseconds % MAX_UINT32, + dev: e.dev % MAX_UINT32, + ino: e.ino % MAX_UINT32, + mode: normalizeMode(e.mode % MAX_UINT32), + uid: e.uid % MAX_UINT32, + gid: e.gid % MAX_UINT32, + // size of -1 happens over a BrowserFS HTTP Backend that doesn't serve Content-Length headers + // (like the Karma webserver) because BrowserFS HTTP Backend uses HTTP HEAD requests to do fs.stat + size: e.size > -1 ? e.size % MAX_UINT32 : 0 + }; +} +function toHex(buffer2) { + let hex = ""; + for (const byte of new Uint8Array(buffer2)) { + if (byte < 16) hex += "0"; + hex += byte.toString(16); + } + return hex; +} +var supportsSubtleSHA1 = null; +async function shasum(buffer2) { + if (supportsSubtleSHA1 === null) { + supportsSubtleSHA1 = await testSubtleSHA1(); + } + return supportsSubtleSHA1 ? subtleSHA1(buffer2) : shasumSync(buffer2); +} +function shasumSync(buffer2) { + return new import_sha1.default().update(buffer2).digest("hex"); +} +async function subtleSHA1(buffer2) { + const hash2 = await crypto.subtle.digest("SHA-1", buffer2); + return toHex(hash2); +} +async function testSubtleSHA1() { + try { + const hash2 = await subtleSHA1(new Uint8Array([])); + if (hash2 === "da39a3ee5e6b4b0d3255bfef95601890afd80709") return true; + } catch (_) { + } + return false; +} +function parseCacheEntryFlags(bits) { + return { + assumeValid: Boolean(bits & 32768), + extended: Boolean(bits & 16384), + stage: (bits & 12288) >> 12, + nameLength: bits & 4095 + }; +} +function renderCacheEntryFlags(entry) { + const flags = entry.flags; + flags.extended = false; + flags.nameLength = Math.min(Buffer.from(entry.path).length, 4095); + return (flags.assumeValid ? 32768 : 0) + (flags.extended ? 16384 : 0) + ((flags.stage & 3) << 12) + (flags.nameLength & 4095); +} +var GitIndex = class _GitIndex { + /*:: + _entries: Map + _dirty: boolean // Used to determine if index needs to be saved to filesystem + */ + constructor(entries, unmergedPaths) { + this._dirty = false; + this._unmergedPaths = unmergedPaths || /* @__PURE__ */ new Set(); + this._entries = entries || /* @__PURE__ */ new Map(); + } + _addEntry(entry) { + if (entry.flags.stage === 0) { + entry.stages = [entry]; + this._entries.set(entry.path, entry); + this._unmergedPaths.delete(entry.path); + } else { + let existingEntry = this._entries.get(entry.path); + if (!existingEntry) { + this._entries.set(entry.path, entry); + existingEntry = entry; + } + existingEntry.stages[entry.flags.stage] = entry; + this._unmergedPaths.add(entry.path); + } + } + static async from(buffer2) { + if (Buffer.isBuffer(buffer2)) { + return _GitIndex.fromBuffer(buffer2); + } else if (buffer2 === null) { + return new _GitIndex(null); + } else { + throw new InternalError("invalid type passed to GitIndex.from"); + } + } + static async fromBuffer(buffer2) { + if (buffer2.length === 0) { + throw new InternalError("Index file is empty (.git/index)"); + } + const index2 = new _GitIndex(); + const reader = new BufferCursor(buffer2); + const magic = reader.toString("utf8", 4); + if (magic !== "DIRC") { + throw new InternalError(`Invalid dircache magic file number: ${magic}`); + } + const shaComputed = await shasum(buffer2.slice(0, -20)); + const shaClaimed = buffer2.slice(-20).toString("hex"); + if (shaClaimed !== shaComputed) { + throw new InternalError( + `Invalid checksum in GitIndex buffer: expected ${shaClaimed} but saw ${shaComputed}` + ); + } + const version2 = reader.readUInt32BE(); + if (version2 !== 2) { + throw new InternalError(`Unsupported dircache version: ${version2}`); + } + const numEntries = reader.readUInt32BE(); + let i = 0; + while (!reader.eof() && i < numEntries) { + const entry = {}; + entry.ctimeSeconds = reader.readUInt32BE(); + entry.ctimeNanoseconds = reader.readUInt32BE(); + entry.mtimeSeconds = reader.readUInt32BE(); + entry.mtimeNanoseconds = reader.readUInt32BE(); + entry.dev = reader.readUInt32BE(); + entry.ino = reader.readUInt32BE(); + entry.mode = reader.readUInt32BE(); + entry.uid = reader.readUInt32BE(); + entry.gid = reader.readUInt32BE(); + entry.size = reader.readUInt32BE(); + entry.oid = reader.slice(20).toString("hex"); + const flags = reader.readUInt16BE(); + entry.flags = parseCacheEntryFlags(flags); + const pathlength = buffer2.indexOf(0, reader.tell() + 1) - reader.tell(); + if (pathlength < 1) { + throw new InternalError(`Got a path length of: ${pathlength}`); + } + entry.path = reader.toString("utf8", pathlength); + if (entry.path.includes("..\\") || entry.path.includes("../")) { + throw new UnsafeFilepathError(entry.path); + } + let padding = 8 - (reader.tell() - 12) % 8; + if (padding === 0) padding = 8; + while (padding--) { + const tmp = reader.readUInt8(); + if (tmp !== 0) { + throw new InternalError( + `Expected 1-8 null characters but got '${tmp}' after ${entry.path}` + ); + } else if (reader.eof()) { + throw new InternalError("Unexpected end of file"); + } + } + entry.stages = []; + index2._addEntry(entry); + i++; + } + return index2; + } + get unmergedPaths() { + return [...this._unmergedPaths]; + } + get entries() { + return [...this._entries.values()].sort(comparePath); + } + get entriesMap() { + return this._entries; + } + get entriesFlat() { + return [...this.entries].flatMap((entry) => { + return entry.stages.length > 1 ? entry.stages.filter((x) => x) : entry; + }); + } + *[Symbol.iterator]() { + for (const entry of this.entries) { + yield entry; + } + } + insert({ filepath, stats, oid, stage = 0 }) { + if (!stats) { + stats = { + ctimeSeconds: 0, + ctimeNanoseconds: 0, + mtimeSeconds: 0, + mtimeNanoseconds: 0, + dev: 0, + ino: 0, + mode: 0, + uid: 0, + gid: 0, + size: 0 + }; + } + stats = normalizeStats(stats); + const bfilepath = Buffer.from(filepath); + const entry = { + ctimeSeconds: stats.ctimeSeconds, + ctimeNanoseconds: stats.ctimeNanoseconds, + mtimeSeconds: stats.mtimeSeconds, + mtimeNanoseconds: stats.mtimeNanoseconds, + dev: stats.dev, + ino: stats.ino, + // We provide a fallback value for `mode` here because not all fs + // implementations assign it, but we use it in GitTree. + // '100644' is for a "regular non-executable file" + mode: stats.mode || 33188, + uid: stats.uid, + gid: stats.gid, + size: stats.size, + path: filepath, + oid, + flags: { + assumeValid: false, + extended: false, + stage, + nameLength: bfilepath.length < 4095 ? bfilepath.length : 4095 + }, + stages: [] + }; + this._addEntry(entry); + this._dirty = true; + } + delete({ filepath }) { + if (this._entries.has(filepath)) { + this._entries.delete(filepath); + } else { + for (const key2 of this._entries.keys()) { + if (key2.startsWith(filepath + "/")) { + this._entries.delete(key2); + } + } + } + if (this._unmergedPaths.has(filepath)) { + this._unmergedPaths.delete(filepath); + } + this._dirty = true; + } + clear() { + this._entries.clear(); + this._dirty = true; + } + has({ filepath }) { + return this._entries.has(filepath); + } + render() { + return this.entries.map((entry) => `${entry.mode.toString(8)} ${entry.oid} ${entry.path}`).join("\n"); + } + static async _entryToBuffer(entry) { + const bpath = Buffer.from(entry.path); + const length = Math.ceil((62 + bpath.length + 1) / 8) * 8; + const written = Buffer.alloc(length); + const writer = new BufferCursor(written); + const stat = normalizeStats(entry); + writer.writeUInt32BE(stat.ctimeSeconds); + writer.writeUInt32BE(stat.ctimeNanoseconds); + writer.writeUInt32BE(stat.mtimeSeconds); + writer.writeUInt32BE(stat.mtimeNanoseconds); + writer.writeUInt32BE(stat.dev); + writer.writeUInt32BE(stat.ino); + writer.writeUInt32BE(stat.mode); + writer.writeUInt32BE(stat.uid); + writer.writeUInt32BE(stat.gid); + writer.writeUInt32BE(stat.size); + writer.write(entry.oid, 20, "hex"); + writer.writeUInt16BE(renderCacheEntryFlags(entry)); + writer.write(entry.path, bpath.length, "utf8"); + return written; + } + async toObject() { + const header = Buffer.alloc(12); + const writer = new BufferCursor(header); + writer.write("DIRC", 4, "utf8"); + writer.writeUInt32BE(2); + writer.writeUInt32BE(this.entriesFlat.length); + let entryBuffers = []; + for (const entry of this.entries) { + entryBuffers.push(_GitIndex._entryToBuffer(entry)); + if (entry.stages.length > 1) { + for (const stage of entry.stages) { + if (stage && stage !== entry) { + entryBuffers.push(_GitIndex._entryToBuffer(stage)); + } + } + } + } + entryBuffers = await Promise.all(entryBuffers); + const body = Buffer.concat(entryBuffers); + const main = Buffer.concat([header, body]); + const sum = await shasum(main); + return Buffer.concat([main, Buffer.from(sum, "hex")]); + } +}; +function compareStats(entry, stats, filemode = true, trustino = true) { + const e = normalizeStats(entry); + const s = normalizeStats(stats); + const staleness = filemode && e.mode !== s.mode || e.mtimeSeconds !== s.mtimeSeconds || e.ctimeSeconds !== s.ctimeSeconds || e.uid !== s.uid || e.gid !== s.gid || trustino && e.ino !== s.ino || e.size !== s.size; + return staleness; +} +var lock = null; +var IndexCache = Symbol("IndexCache"); +function createCache() { + return { + map: /* @__PURE__ */ new Map(), + stats: /* @__PURE__ */ new Map() + }; +} +async function updateCachedIndexFile(fs, filepath, cache) { + const stat = await fs.lstat(filepath); + const rawIndexFile = await fs.read(filepath); + const index2 = await GitIndex.from(rawIndexFile); + cache.map.set(filepath, index2); + cache.stats.set(filepath, stat); +} +async function isIndexStale(fs, filepath, cache) { + const savedStats = cache.stats.get(filepath); + if (savedStats === void 0) return true; + const currStats = await fs.lstat(filepath); + if (savedStats === null) return false; + if (currStats === null) return false; + return compareStats(savedStats, currStats); +} +var GitIndexManager = class { + /** + * + * @param {object} opts + * @param {import('../models/FileSystem.js').FileSystem} opts.fs + * @param {string} opts.gitdir + * @param {object} opts.cache + * @param {bool} opts.allowUnmerged + * @param {function(GitIndex): any} closure + */ + static async acquire({ fs, gitdir, cache, allowUnmerged = true }, closure) { + if (!cache[IndexCache]) cache[IndexCache] = createCache(); + const filepath = `${gitdir}/index`; + if (lock === null) lock = new import_async_lock.default({ maxPending: Infinity }); + let result; + let unmergedPaths = []; + await lock.acquire(filepath, async () => { + if (await isIndexStale(fs, filepath, cache[IndexCache])) { + await updateCachedIndexFile(fs, filepath, cache[IndexCache]); + } + const index2 = cache[IndexCache].map.get(filepath); + unmergedPaths = index2.unmergedPaths; + if (unmergedPaths.length && !allowUnmerged) + throw new UnmergedPathsError(unmergedPaths); + result = await closure(index2); + if (index2._dirty) { + const buffer2 = await index2.toObject(); + await fs.write(filepath, buffer2); + cache[IndexCache].stats.set(filepath, await fs.lstat(filepath)); + index2._dirty = false; + } + }); + return result; + } +}; +function basename(path2) { + const last2 = Math.max(path2.lastIndexOf("/"), path2.lastIndexOf("\\")); + if (last2 > -1) { + path2 = path2.slice(last2 + 1); + } + return path2; +} +function dirname(path2) { + const last2 = Math.max(path2.lastIndexOf("/"), path2.lastIndexOf("\\")); + if (last2 === -1) return "."; + if (last2 === 0) return "/"; + return path2.slice(0, last2); +} +function flatFileListToDirectoryStructure(files) { + const inodes = /* @__PURE__ */ new Map(); + const mkdir = function(name) { + if (!inodes.has(name)) { + const dir = { + type: "tree", + fullpath: name, + basename: basename(name), + metadata: {}, + children: [] + }; + inodes.set(name, dir); + dir.parent = mkdir(dirname(name)); + if (dir.parent && dir.parent !== dir) dir.parent.children.push(dir); + } + return inodes.get(name); + }; + const mkfile = function(name, metadata) { + if (!inodes.has(name)) { + const file = { + type: "blob", + fullpath: name, + basename: basename(name), + metadata, + // This recursively generates any missing parent folders. + parent: mkdir(dirname(name)), + children: [] + }; + if (file.parent) file.parent.children.push(file); + inodes.set(name, file); + } + return inodes.get(name); + }; + mkdir("."); + for (const file of files) { + mkfile(file.path, file); + } + return inodes; +} +function mode2type(mode) { + switch (mode) { + case 16384: + return "tree"; + case 33188: + return "blob"; + case 33261: + return "blob"; + case 40960: + return "blob"; + case 57344: + return "commit"; + } + throw new InternalError(`Unexpected GitTree entry mode: ${mode.toString(8)}`); +} +var GitWalkerIndex = class { + constructor({ fs, gitdir, cache }) { + this.treePromise = GitIndexManager.acquire( + { fs, gitdir, cache }, + async function(index2) { + return flatFileListToDirectoryStructure(index2.entries); + } + ); + const walker = this; + this.ConstructEntry = class StageEntry { + constructor(fullpath) { + this._fullpath = fullpath; + this._type = false; + this._mode = false; + this._stat = false; + this._oid = false; + } + async type() { + return walker.type(this); + } + async mode() { + return walker.mode(this); + } + async stat() { + return walker.stat(this); + } + async content() { + return walker.content(this); + } + async oid() { + return walker.oid(this); + } + }; + } + async readdir(entry) { + const filepath = entry._fullpath; + const tree = await this.treePromise; + const inode = tree.get(filepath); + if (!inode) return null; + if (inode.type === "blob") return null; + if (inode.type !== "tree") { + throw new Error(`ENOTDIR: not a directory, scandir '${filepath}'`); + } + const names = inode.children.map((inode2) => inode2.fullpath); + names.sort(compareStrings); + return names; + } + async type(entry) { + if (entry._type === false) { + await entry.stat(); + } + return entry._type; + } + async mode(entry) { + if (entry._mode === false) { + await entry.stat(); + } + return entry._mode; + } + async stat(entry) { + if (entry._stat === false) { + const tree = await this.treePromise; + const inode = tree.get(entry._fullpath); + if (!inode) { + throw new Error( + `ENOENT: no such file or directory, lstat '${entry._fullpath}'` + ); + } + const stats = inode.type === "tree" ? {} : normalizeStats(inode.metadata); + entry._type = inode.type === "tree" ? "tree" : mode2type(stats.mode); + entry._mode = stats.mode; + if (inode.type === "tree") { + entry._stat = void 0; + } else { + entry._stat = stats; + } + } + return entry._stat; + } + async content(_entry) { + } + async oid(entry) { + if (entry._oid === false) { + const tree = await this.treePromise; + const inode = tree.get(entry._fullpath); + entry._oid = inode.metadata.oid; + } + return entry._oid; + } +}; +var GitWalkSymbol = Symbol("GitWalkSymbol"); +function STAGE() { + const o = /* @__PURE__ */ Object.create(null); + Object.defineProperty(o, GitWalkSymbol, { + value: function({ fs, gitdir, cache }) { + return new GitWalkerIndex({ fs, gitdir, cache }); + } + }); + Object.freeze(o); + return o; +} +var NotFoundError = class _NotFoundError extends BaseError { + /** + * @param {string} what + */ + constructor(what) { + super(`Could not find ${what}.`); + this.code = this.name = _NotFoundError.code; + this.data = { what }; + } +}; +NotFoundError.code = "NotFoundError"; +var ObjectTypeError = class _ObjectTypeError extends BaseError { + /** + * @param {string} oid + * @param {'blob'|'commit'|'tag'|'tree'} actual + * @param {'blob'|'commit'|'tag'|'tree'} expected + * @param {string} [filepath] + */ + constructor(oid, actual, expected, filepath) { + super( + `Object ${oid} ${filepath ? `at ${filepath}` : ""}was anticipated to be a ${expected} but it is a ${actual}.` + ); + this.code = this.name = _ObjectTypeError.code; + this.data = { oid, actual, expected, filepath }; + } +}; +ObjectTypeError.code = "ObjectTypeError"; +var InvalidOidError = class _InvalidOidError extends BaseError { + /** + * @param {string} value + */ + constructor(value) { + super(`Expected a 40-char hex object id but saw "${value}".`); + this.code = this.name = _InvalidOidError.code; + this.data = { value }; + } +}; +InvalidOidError.code = "InvalidOidError"; +var NoRefspecError = class _NoRefspecError extends BaseError { + /** + * @param {string} remote + */ + constructor(remote) { + super(`Could not find a fetch refspec for remote "${remote}". Make sure the config file has an entry like the following: +[remote "${remote}"] + fetch = +refs/heads/*:refs/remotes/origin/* +`); + this.code = this.name = _NoRefspecError.code; + this.data = { remote }; + } +}; +NoRefspecError.code = "NoRefspecError"; +var GitPackedRefs = class _GitPackedRefs { + constructor(text2) { + this.refs = /* @__PURE__ */ new Map(); + this.parsedConfig = []; + if (text2) { + let key2 = null; + this.parsedConfig = text2.trim().split("\n").map((line) => { + if (/^\s*#/.test(line)) { + return { line, comment: true }; + } + const i = line.indexOf(" "); + if (line.startsWith("^")) { + const value = line.slice(1); + this.refs.set(key2 + "^{}", value); + return { line, ref: key2, peeled: value }; + } else { + const value = line.slice(0, i); + key2 = line.slice(i + 1); + this.refs.set(key2, value); + return { line, ref: key2, oid: value }; + } + }); + } + return this; + } + static from(text2) { + return new _GitPackedRefs(text2); + } + delete(ref) { + this.parsedConfig = this.parsedConfig.filter((entry) => entry.ref !== ref); + this.refs.delete(ref); + } + toString() { + return this.parsedConfig.map(({ line }) => line).join("\n") + "\n"; + } +}; +var GitRefSpec = class _GitRefSpec { + constructor({ remotePath, localPath, force, matchPrefix }) { + Object.assign(this, { + remotePath, + localPath, + force, + matchPrefix + }); + } + static from(refspec) { + const [ + forceMatch, + remotePath, + remoteGlobMatch, + localPath, + localGlobMatch + ] = refspec.match(/^(\+?)(.*?)(\*?):(.*?)(\*?)$/).slice(1); + const force = forceMatch === "+"; + const remoteIsGlob = remoteGlobMatch === "*"; + const localIsGlob = localGlobMatch === "*"; + if (remoteIsGlob !== localIsGlob) { + throw new InternalError("Invalid refspec"); + } + return new _GitRefSpec({ + remotePath, + localPath, + force, + matchPrefix: remoteIsGlob + }); + } + translate(remoteBranch) { + if (this.matchPrefix) { + if (remoteBranch.startsWith(this.remotePath)) { + return this.localPath + remoteBranch.replace(this.remotePath, ""); + } + } else { + if (remoteBranch === this.remotePath) return this.localPath; + } + return null; + } + reverseTranslate(localBranch) { + if (this.matchPrefix) { + if (localBranch.startsWith(this.localPath)) { + return this.remotePath + localBranch.replace(this.localPath, ""); + } + } else { + if (localBranch === this.localPath) return this.remotePath; + } + return null; + } +}; +var GitRefSpecSet = class _GitRefSpecSet { + constructor(rules = []) { + this.rules = rules; + } + static from(refspecs) { + const rules = []; + for (const refspec of refspecs) { + rules.push(GitRefSpec.from(refspec)); + } + return new _GitRefSpecSet(rules); + } + add(refspec) { + const rule = GitRefSpec.from(refspec); + this.rules.push(rule); + } + translate(remoteRefs) { + const result = []; + for (const rule of this.rules) { + for (const remoteRef of remoteRefs) { + const localRef = rule.translate(remoteRef); + if (localRef) { + result.push([remoteRef, localRef]); + } + } + } + return result; + } + translateOne(remoteRef) { + let result = null; + for (const rule of this.rules) { + const localRef = rule.translate(remoteRef); + if (localRef) { + result = localRef; + } + } + return result; + } + localNamespaces() { + return this.rules.filter((rule) => rule.matchPrefix).map((rule) => rule.localPath.replace(/\/$/, "")); + } +}; +function compareRefNames(a, b) { + const _a2 = a.replace(/\^\{\}$/, ""); + const _b = b.replace(/\^\{\}$/, ""); + const tmp = -(_a2 < _b) || +(_a2 > _b); + if (tmp === 0) { + return a.endsWith("^{}") ? 1 : -1; + } + return tmp; +} +var memo = /* @__PURE__ */ new Map(); +function normalizePath(path2) { + let normalizedPath = memo.get(path2); + if (!normalizedPath) { + normalizedPath = normalizePathInternal(path2); + memo.set(path2, normalizedPath); + } + return normalizedPath; +} +function normalizePathInternal(path2) { + path2 = path2.split("/./").join("/").replace(/\/{2,}/g, "/"); + if (path2 === "/.") return "/"; + if (path2 === "./") return "."; + if (path2.startsWith("./")) path2 = path2.slice(2); + if (path2.endsWith("/.")) path2 = path2.slice(0, -2); + if (path2.length > 1 && path2.endsWith("/")) path2 = path2.slice(0, -1); + if (path2 === "") return "."; + return path2; +} +function join(...parts) { + return normalizePath(parts.map(normalizePath).join("/")); +} +var num = (val) => { + val = val.toLowerCase(); + let n = parseInt(val); + if (val.endsWith("k")) n *= 1024; + if (val.endsWith("m")) n *= 1024 * 1024; + if (val.endsWith("g")) n *= 1024 * 1024 * 1024; + return n; +}; +var bool = (val) => { + val = val.trim().toLowerCase(); + if (val === "true" || val === "yes" || val === "on") return true; + if (val === "false" || val === "no" || val === "off") return false; + throw Error( + `Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${val}` + ); +}; +var schema = { + core: { + filemode: bool, + bare: bool, + logallrefupdates: bool, + symlinks: bool, + ignorecase: bool, + bigFileThreshold: num + } +}; +var SECTION_LINE_REGEX = /^\[([A-Za-z0-9-.]+)(?: "(.*)")?\]$/; +var SECTION_REGEX = /^[A-Za-z0-9-.]+$/; +var VARIABLE_LINE_REGEX = /^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/; +var VARIABLE_NAME_REGEX = /^[A-Za-z][A-Za-z-]*$/; +var VARIABLE_VALUE_COMMENT_REGEX = /^(.*?)( *[#;].*)$/; +var extractSectionLine = (line) => { + const matches = SECTION_LINE_REGEX.exec(line); + if (matches != null) { + const [section, subsection] = matches.slice(1); + return [section, subsection]; + } + return null; +}; +var extractVariableLine = (line) => { + const matches = VARIABLE_LINE_REGEX.exec(line); + if (matches != null) { + const [name, rawValue = "true"] = matches.slice(1); + const valueWithoutComments = removeComments(rawValue); + const valueWithoutQuotes = removeQuotes(valueWithoutComments); + return [name, valueWithoutQuotes]; + } + return null; +}; +var removeComments = (rawValue) => { + const commentMatches = VARIABLE_VALUE_COMMENT_REGEX.exec(rawValue); + if (commentMatches == null) { + return rawValue; + } + const [valueWithoutComment, comment] = commentMatches.slice(1); + if (hasOddNumberOfQuotes(valueWithoutComment) && hasOddNumberOfQuotes(comment)) { + return `${valueWithoutComment}${comment}`; + } + return valueWithoutComment; +}; +var hasOddNumberOfQuotes = (text2) => { + const numberOfQuotes = (text2.match(/(?:^|[^\\])"/g) || []).length; + return numberOfQuotes % 2 !== 0; +}; +var removeQuotes = (text2) => { + return text2.split("").reduce((newText, c, idx, text3) => { + const isQuote = c === '"' && text3[idx - 1] !== "\\"; + const isEscapeForQuote = c === "\\" && text3[idx + 1] === '"'; + if (isQuote || isEscapeForQuote) { + return newText; + } + return newText + c; + }, ""); +}; +var lower = (text2) => { + return text2 != null ? text2.toLowerCase() : null; +}; +var getPath = (section, subsection, name) => { + return [lower(section), subsection, lower(name)].filter((a) => a != null).join("."); +}; +var normalizePath$1 = (path2) => { + const pathSegments = path2.split("."); + const section = pathSegments.shift(); + const name = pathSegments.pop(); + const subsection = pathSegments.length ? pathSegments.join(".") : void 0; + return { + section, + subsection, + name, + path: getPath(section, subsection, name), + sectionPath: getPath(section, subsection, null) + }; +}; +var findLastIndex = (array, callback) => { + return array.reduce((lastIndex, item, index2) => { + return callback(item) ? index2 : lastIndex; + }, -1); +}; +var GitConfig = class _GitConfig { + constructor(text2) { + let section = null; + let subsection = null; + this.parsedConfig = text2 ? text2.split("\n").map((line) => { + let name = null; + let value = null; + const trimmedLine = line.trim(); + const extractedSection = extractSectionLine(trimmedLine); + const isSection = extractedSection != null; + if (isSection) { + ; + [section, subsection] = extractedSection; + } else { + const extractedVariable = extractVariableLine(trimmedLine); + const isVariable = extractedVariable != null; + if (isVariable) { + ; + [name, value] = extractedVariable; + } + } + const path2 = getPath(section, subsection, name); + return { line, isSection, section, subsection, name, value, path: path2 }; + }) : []; + } + static from(text2) { + return new _GitConfig(text2); + } + async get(path2, getall = false) { + const normalizedPath = normalizePath$1(path2).path; + const allValues = this.parsedConfig.filter((config) => config.path === normalizedPath).map(({ section, name, value }) => { + const fn = schema[section] && schema[section][name]; + return fn ? fn(value) : value; + }); + return getall ? allValues : allValues.pop(); + } + async getall(path2) { + return this.get(path2, true); + } + async getSubsections(section) { + return this.parsedConfig.filter((config) => config.section === section && config.isSection).map((config) => config.subsection); + } + async deleteSection(section, subsection) { + this.parsedConfig = this.parsedConfig.filter( + (config) => !(config.section === section && config.subsection === subsection) + ); + } + async append(path2, value) { + return this.set(path2, value, true); + } + async set(path2, value, append3 = false) { + const { + section, + subsection, + name, + path: normalizedPath, + sectionPath + } = normalizePath$1(path2); + const configIndex = findLastIndex( + this.parsedConfig, + (config) => config.path === normalizedPath + ); + if (value == null) { + if (configIndex !== -1) { + this.parsedConfig.splice(configIndex, 1); + } + } else { + if (configIndex !== -1) { + const config = this.parsedConfig[configIndex]; + const modifiedConfig = Object.assign({}, config, { + name, + value, + modified: true + }); + if (append3) { + this.parsedConfig.splice(configIndex + 1, 0, modifiedConfig); + } else { + this.parsedConfig[configIndex] = modifiedConfig; + } + } else { + const sectionIndex = this.parsedConfig.findIndex( + (config) => config.path === sectionPath + ); + const newConfig = { + section, + subsection, + name, + value, + modified: true, + path: normalizedPath + }; + if (SECTION_REGEX.test(section) && VARIABLE_NAME_REGEX.test(name)) { + if (sectionIndex >= 0) { + this.parsedConfig.splice(sectionIndex + 1, 0, newConfig); + } else { + const newSection = { + section, + subsection, + modified: true, + path: sectionPath + }; + this.parsedConfig.push(newSection, newConfig); + } + } + } + } + } + toString() { + return this.parsedConfig.map(({ line, section, subsection, name, value, modified: modified2 = false }) => { + if (!modified2) { + return line; + } + if (name != null && value != null) { + if (typeof value === "string" && /[#;]/.test(value)) { + return ` ${name} = "${value}"`; + } + return ` ${name} = ${value}`; + } + if (subsection != null) { + return `[${section} "${subsection}"]`; + } + return `[${section}]`; + }).join("\n"); + } +}; +var GitConfigManager = class { + static async get({ fs, gitdir }) { + const text2 = await fs.read(`${gitdir}/config`, { encoding: "utf8" }); + return GitConfig.from(text2); + } + static async save({ fs, gitdir, config }) { + await fs.write(`${gitdir}/config`, config.toString(), { + encoding: "utf8" + }); + } +}; +var refpaths = (ref) => [ + `${ref}`, + `refs/${ref}`, + `refs/tags/${ref}`, + `refs/heads/${ref}`, + `refs/remotes/${ref}`, + `refs/remotes/${ref}/HEAD` +]; +var GIT_FILES = ["config", "description", "index", "shallow", "commondir"]; +var lock$1; +async function acquireLock(ref, callback) { + if (lock$1 === void 0) lock$1 = new import_async_lock.default(); + return lock$1.acquire(ref, callback); +} +var GitRefManager = class _GitRefManager { + static async updateRemoteRefs({ + fs, + gitdir, + remote, + refs, + symrefs, + tags, + refspecs = void 0, + prune = false, + pruneTags = false + }) { + for (const value of refs.values()) { + if (!value.match(/[0-9a-f]{40}/)) { + throw new InvalidOidError(value); + } + } + const config = await GitConfigManager.get({ fs, gitdir }); + if (!refspecs) { + refspecs = await config.getall(`remote.${remote}.fetch`); + if (refspecs.length === 0) { + throw new NoRefspecError(remote); + } + refspecs.unshift(`+HEAD:refs/remotes/${remote}/HEAD`); + } + const refspec = GitRefSpecSet.from(refspecs); + const actualRefsToWrite = /* @__PURE__ */ new Map(); + if (pruneTags) { + const tags2 = await _GitRefManager.listRefs({ + fs, + gitdir, + filepath: "refs/tags" + }); + await _GitRefManager.deleteRefs({ + fs, + gitdir, + refs: tags2.map((tag2) => `refs/tags/${tag2}`) + }); + } + if (tags) { + for (const serverRef of refs.keys()) { + if (serverRef.startsWith("refs/tags") && !serverRef.endsWith("^{}")) { + if (!await _GitRefManager.exists({ fs, gitdir, ref: serverRef })) { + const oid = refs.get(serverRef); + actualRefsToWrite.set(serverRef, oid); + } + } + } + } + const refTranslations = refspec.translate([...refs.keys()]); + for (const [serverRef, translatedRef] of refTranslations) { + const value = refs.get(serverRef); + actualRefsToWrite.set(translatedRef, value); + } + const symrefTranslations = refspec.translate([...symrefs.keys()]); + for (const [serverRef, translatedRef] of symrefTranslations) { + const value = symrefs.get(serverRef); + const symtarget = refspec.translateOne(value); + if (symtarget) { + actualRefsToWrite.set(translatedRef, `ref: ${symtarget}`); + } + } + const pruned = []; + if (prune) { + for (const filepath of refspec.localNamespaces()) { + const refs2 = (await _GitRefManager.listRefs({ + fs, + gitdir, + filepath + })).map((file) => `${filepath}/${file}`); + for (const ref of refs2) { + if (!actualRefsToWrite.has(ref)) { + pruned.push(ref); + } + } + } + if (pruned.length > 0) { + await _GitRefManager.deleteRefs({ fs, gitdir, refs: pruned }); + } + } + for (const [key2, value] of actualRefsToWrite) { + await acquireLock( + key2, + async () => fs.write(join(gitdir, key2), `${value.trim()} +`, "utf8") + ); + } + return { pruned }; + } + // TODO: make this less crude? + static async writeRef({ fs, gitdir, ref, value }) { + if (!value.match(/[0-9a-f]{40}/)) { + throw new InvalidOidError(value); + } + await acquireLock( + ref, + async () => fs.write(join(gitdir, ref), `${value.trim()} +`, "utf8") + ); + } + static async writeSymbolicRef({ fs, gitdir, ref, value }) { + await acquireLock( + ref, + async () => fs.write(join(gitdir, ref), `ref: ${value.trim()} +`, "utf8") + ); + } + static async deleteRef({ fs, gitdir, ref }) { + return _GitRefManager.deleteRefs({ fs, gitdir, refs: [ref] }); + } + static async deleteRefs({ fs, gitdir, refs }) { + await Promise.all(refs.map((ref) => fs.rm(join(gitdir, ref)))); + let text2 = await acquireLock( + "packed-refs", + async () => fs.read(`${gitdir}/packed-refs`, { encoding: "utf8" }) + ); + const packed = GitPackedRefs.from(text2); + const beforeSize = packed.refs.size; + for (const ref of refs) { + if (packed.refs.has(ref)) { + packed.delete(ref); + } + } + if (packed.refs.size < beforeSize) { + text2 = packed.toString(); + await acquireLock( + "packed-refs", + async () => fs.write(`${gitdir}/packed-refs`, text2, { encoding: "utf8" }) + ); + } + } + /** + * @param {object} args + * @param {import('../models/FileSystem.js').FileSystem} args.fs + * @param {string} args.gitdir + * @param {string} args.ref + * @param {number} [args.depth] + * @returns {Promise} + */ + static async resolve({ fs, gitdir, ref, depth = void 0 }) { + if (depth !== void 0) { + depth--; + if (depth === -1) { + return ref; + } + } + if (ref.startsWith("ref: ")) { + ref = ref.slice("ref: ".length); + return _GitRefManager.resolve({ fs, gitdir, ref, depth }); + } + if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { + return ref; + } + const packedMap = await _GitRefManager.packedRefs({ fs, gitdir }); + const allpaths = refpaths(ref).filter((p) => !GIT_FILES.includes(p)); + for (const ref2 of allpaths) { + const sha = await acquireLock( + ref2, + async () => await fs.read(`${gitdir}/${ref2}`, { encoding: "utf8" }) || packedMap.get(ref2) + ); + if (sha) { + return _GitRefManager.resolve({ fs, gitdir, ref: sha.trim(), depth }); + } + } + throw new NotFoundError(ref); + } + static async exists({ fs, gitdir, ref }) { + try { + await _GitRefManager.expand({ fs, gitdir, ref }); + return true; + } catch (err) { + return false; + } + } + static async expand({ fs, gitdir, ref }) { + if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { + return ref; + } + const packedMap = await _GitRefManager.packedRefs({ fs, gitdir }); + const allpaths = refpaths(ref); + for (const ref2 of allpaths) { + const refExists = await acquireLock( + ref2, + async () => fs.exists(`${gitdir}/${ref2}`) + ); + if (refExists) return ref2; + if (packedMap.has(ref2)) return ref2; + } + throw new NotFoundError(ref); + } + static async expandAgainstMap({ ref, map }) { + const allpaths = refpaths(ref); + for (const ref2 of allpaths) { + if (await map.has(ref2)) return ref2; + } + throw new NotFoundError(ref); + } + static resolveAgainstMap({ ref, fullref = ref, depth = void 0, map }) { + if (depth !== void 0) { + depth--; + if (depth === -1) { + return { fullref, oid: ref }; + } + } + if (ref.startsWith("ref: ")) { + ref = ref.slice("ref: ".length); + return _GitRefManager.resolveAgainstMap({ ref, fullref, depth, map }); + } + if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { + return { fullref, oid: ref }; + } + const allpaths = refpaths(ref); + for (const ref2 of allpaths) { + const sha = map.get(ref2); + if (sha) { + return _GitRefManager.resolveAgainstMap({ + ref: sha.trim(), + fullref: ref2, + depth, + map + }); + } + } + throw new NotFoundError(ref); + } + static async packedRefs({ fs, gitdir }) { + const text2 = await acquireLock( + "packed-refs", + async () => fs.read(`${gitdir}/packed-refs`, { encoding: "utf8" }) + ); + const packed = GitPackedRefs.from(text2); + return packed.refs; + } + // List all the refs that match the `filepath` prefix + static async listRefs({ fs, gitdir, filepath }) { + const packedMap = _GitRefManager.packedRefs({ fs, gitdir }); + let files = null; + try { + files = await fs.readdirDeep(`${gitdir}/${filepath}`); + files = files.map((x) => x.replace(`${gitdir}/${filepath}/`, "")); + } catch (err) { + files = []; + } + for (let key2 of (await packedMap).keys()) { + if (key2.startsWith(filepath)) { + key2 = key2.replace(filepath + "/", ""); + if (!files.includes(key2)) { + files.push(key2); + } + } + } + files.sort(compareRefNames); + return files; + } + static async listBranches({ fs, gitdir, remote }) { + if (remote) { + return _GitRefManager.listRefs({ + fs, + gitdir, + filepath: `refs/remotes/${remote}` + }); + } else { + return _GitRefManager.listRefs({ fs, gitdir, filepath: `refs/heads` }); + } + } + static async listTags({ fs, gitdir }) { + const tags = await _GitRefManager.listRefs({ + fs, + gitdir, + filepath: `refs/tags` + }); + return tags.filter((x) => !x.endsWith("^{}")); + } +}; +function compareTreeEntryPath(a, b) { + return compareStrings(appendSlashIfDir(a), appendSlashIfDir(b)); +} +function appendSlashIfDir(entry) { + return entry.mode === "040000" ? entry.path + "/" : entry.path; +} +function mode2type$1(mode) { + switch (mode) { + case "040000": + return "tree"; + case "100644": + return "blob"; + case "100755": + return "blob"; + case "120000": + return "blob"; + case "160000": + return "commit"; + } + throw new InternalError(`Unexpected GitTree entry mode: ${mode}`); +} +function parseBuffer(buffer2) { + const _entries = []; + let cursor = 0; + while (cursor < buffer2.length) { + const space2 = buffer2.indexOf(32, cursor); + if (space2 === -1) { + throw new InternalError( + `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next space character.` + ); + } + const nullchar = buffer2.indexOf(0, cursor); + if (nullchar === -1) { + throw new InternalError( + `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next null character.` + ); + } + let mode = buffer2.slice(cursor, space2).toString("utf8"); + if (mode === "40000") mode = "040000"; + const type = mode2type$1(mode); + const path2 = buffer2.slice(space2 + 1, nullchar).toString("utf8"); + if (path2.includes("\\") || path2.includes("/")) { + throw new UnsafeFilepathError(path2); + } + const oid = buffer2.slice(nullchar + 1, nullchar + 21).toString("hex"); + cursor = nullchar + 21; + _entries.push({ mode, path: path2, oid, type }); + } + return _entries; +} +function limitModeToAllowed(mode) { + if (typeof mode === "number") { + mode = mode.toString(8); + } + if (mode.match(/^0?4.*/)) return "040000"; + if (mode.match(/^1006.*/)) return "100644"; + if (mode.match(/^1007.*/)) return "100755"; + if (mode.match(/^120.*/)) return "120000"; + if (mode.match(/^160.*/)) return "160000"; + throw new InternalError(`Could not understand file mode: ${mode}`); +} +function nudgeIntoShape(entry) { + if (!entry.oid && entry.sha) { + entry.oid = entry.sha; + } + entry.mode = limitModeToAllowed(entry.mode); + if (!entry.type) { + entry.type = mode2type$1(entry.mode); + } + return entry; +} +var GitTree = class _GitTree { + constructor(entries) { + if (Buffer.isBuffer(entries)) { + this._entries = parseBuffer(entries); + } else if (Array.isArray(entries)) { + this._entries = entries.map(nudgeIntoShape); + } else { + throw new InternalError("invalid type passed to GitTree constructor"); + } + this._entries.sort(comparePath); + } + static from(tree) { + return new _GitTree(tree); + } + render() { + return this._entries.map((entry) => `${entry.mode} ${entry.type} ${entry.oid} ${entry.path}`).join("\n"); + } + toObject() { + const entries = [...this._entries]; + entries.sort(compareTreeEntryPath); + return Buffer.concat( + entries.map((entry) => { + const mode = Buffer.from(entry.mode.replace(/^0/, "")); + const space2 = Buffer.from(" "); + const path2 = Buffer.from(entry.path, "utf8"); + const nullchar = Buffer.from([0]); + const oid = Buffer.from(entry.oid, "hex"); + return Buffer.concat([mode, space2, path2, nullchar, oid]); + }) + ); + } + /** + * @returns {TreeEntry[]} + */ + entries() { + return this._entries; + } + *[Symbol.iterator]() { + for (const entry of this._entries) { + yield entry; + } + } +}; +var GitObject = class { + static wrap({ type, object }) { + return Buffer.concat([ + Buffer.from(`${type} ${object.byteLength.toString()}\0`), + Buffer.from(object) + ]); + } + static unwrap(buffer2) { + const s = buffer2.indexOf(32); + const i = buffer2.indexOf(0); + const type = buffer2.slice(0, s).toString("utf8"); + const length = buffer2.slice(s + 1, i).toString("utf8"); + const actualLength = buffer2.length - (i + 1); + if (parseInt(length) !== actualLength) { + throw new InternalError( + `Length mismatch: expected ${length} bytes but got ${actualLength} instead.` + ); + } + return { + type, + object: Buffer.from(buffer2.slice(i + 1)) + }; + } +}; +async function readObjectLoose({ fs, gitdir, oid }) { + const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; + const file = await fs.read(`${gitdir}/${source}`); + if (!file) { + return null; + } + return { object: file, format: "deflated", source }; +} +function applyDelta(delta, source) { + const reader = new BufferCursor(delta); + const sourceSize = readVarIntLE(reader); + if (sourceSize !== source.byteLength) { + throw new InternalError( + `applyDelta expected source buffer to be ${sourceSize} bytes but the provided buffer was ${source.length} bytes` + ); + } + const targetSize = readVarIntLE(reader); + let target; + const firstOp = readOp(reader, source); + if (firstOp.byteLength === targetSize) { + target = firstOp; + } else { + target = Buffer.alloc(targetSize); + const writer = new BufferCursor(target); + writer.copy(firstOp); + while (!reader.eof()) { + writer.copy(readOp(reader, source)); + } + const tell = writer.tell(); + if (targetSize !== tell) { + throw new InternalError( + `applyDelta expected target buffer to be ${targetSize} bytes but the resulting buffer was ${tell} bytes` + ); + } + } + return target; +} +function readVarIntLE(reader) { + let result = 0; + let shift = 0; + let byte = null; + do { + byte = reader.readUInt8(); + result |= (byte & 127) << shift; + shift += 7; + } while (byte & 128); + return result; +} +function readCompactLE(reader, flags, size) { + let result = 0; + let shift = 0; + while (size--) { + if (flags & 1) { + result |= reader.readUInt8() << shift; + } + flags >>= 1; + shift += 8; + } + return result; +} +function readOp(reader, source) { + const byte = reader.readUInt8(); + const COPY = 128; + const OFFS = 15; + const SIZE = 112; + if (byte & COPY) { + const offset = readCompactLE(reader, byte & OFFS, 4); + let size = readCompactLE(reader, (byte & SIZE) >> 4, 3); + if (size === 0) size = 65536; + return source.slice(offset, offset + size); + } else { + return reader.slice(byte); + } +} +function fromValue(value) { + let queue = [value]; + return { + next() { + return Promise.resolve({ done: queue.length === 0, value: queue.pop() }); + }, + return() { + queue = []; + return {}; + }, + [Symbol.asyncIterator]() { + return this; + } + }; +} +function getIterator(iterable) { + if (iterable[Symbol.asyncIterator]) { + return iterable[Symbol.asyncIterator](); + } + if (iterable[Symbol.iterator]) { + return iterable[Symbol.iterator](); + } + if (iterable.next) { + return iterable; + } + return fromValue(iterable); +} +var StreamReader = class { + constructor(stream) { + if (typeof Buffer === "undefined") { + throw new Error("Missing Buffer dependency"); + } + this.stream = getIterator(stream); + this.buffer = null; + this.cursor = 0; + this.undoCursor = 0; + this.started = false; + this._ended = false; + this._discardedBytes = 0; + } + eof() { + return this._ended && this.cursor === this.buffer.length; + } + tell() { + return this._discardedBytes + this.cursor; + } + async byte() { + if (this.eof()) return; + if (!this.started) await this._init(); + if (this.cursor === this.buffer.length) { + await this._loadnext(); + if (this._ended) return; + } + this._moveCursor(1); + return this.buffer[this.undoCursor]; + } + async chunk() { + if (this.eof()) return; + if (!this.started) await this._init(); + if (this.cursor === this.buffer.length) { + await this._loadnext(); + if (this._ended) return; + } + this._moveCursor(this.buffer.length); + return this.buffer.slice(this.undoCursor, this.cursor); + } + async read(n) { + if (this.eof()) return; + if (!this.started) await this._init(); + if (this.cursor + n > this.buffer.length) { + this._trim(); + await this._accumulate(n); + } + this._moveCursor(n); + return this.buffer.slice(this.undoCursor, this.cursor); + } + async skip(n) { + if (this.eof()) return; + if (!this.started) await this._init(); + if (this.cursor + n > this.buffer.length) { + this._trim(); + await this._accumulate(n); + } + this._moveCursor(n); + } + async undo() { + this.cursor = this.undoCursor; + } + async _next() { + this.started = true; + let { done, value } = await this.stream.next(); + if (done) { + this._ended = true; + if (!value) return Buffer.alloc(0); + } + if (value) { + value = Buffer.from(value); + } + return value; + } + _trim() { + this.buffer = this.buffer.slice(this.undoCursor); + this.cursor -= this.undoCursor; + this._discardedBytes += this.undoCursor; + this.undoCursor = 0; + } + _moveCursor(n) { + this.undoCursor = this.cursor; + this.cursor += n; + if (this.cursor > this.buffer.length) { + this.cursor = this.buffer.length; + } + } + async _accumulate(n) { + if (this._ended) return; + const buffers = [this.buffer]; + while (this.cursor + n > lengthBuffers(buffers)) { + const nextbuffer = await this._next(); + if (this._ended) break; + buffers.push(nextbuffer); + } + this.buffer = Buffer.concat(buffers); + } + async _loadnext() { + this._discardedBytes += this.buffer.length; + this.undoCursor = 0; + this.cursor = 0; + this.buffer = await this._next(); + } + async _init() { + this.buffer = await this._next(); + } +}; +function lengthBuffers(buffers) { + return buffers.reduce((acc, buffer2) => acc + buffer2.length, 0); +} +async function listpack(stream, onData) { + const reader = new StreamReader(stream); + let PACK = await reader.read(4); + PACK = PACK.toString("utf8"); + if (PACK !== "PACK") { + throw new InternalError(`Invalid PACK header '${PACK}'`); + } + let version2 = await reader.read(4); + version2 = version2.readUInt32BE(0); + if (version2 !== 2) { + throw new InternalError(`Invalid packfile version: ${version2}`); + } + let numObjects = await reader.read(4); + numObjects = numObjects.readUInt32BE(0); + if (numObjects < 1) return; + while (!reader.eof() && numObjects--) { + const offset = reader.tell(); + const { type, length, ofs, reference } = await parseHeader(reader); + const inflator = new import_pako.default.Inflate(); + while (!inflator.result) { + const chunk = await reader.chunk(); + if (!chunk) break; + inflator.push(chunk, false); + if (inflator.err) { + throw new InternalError(`Pako error: ${inflator.msg}`); + } + if (inflator.result) { + if (inflator.result.length !== length) { + throw new InternalError( + `Inflated object size is different from that stated in packfile.` + ); + } + await reader.undo(); + await reader.read(chunk.length - inflator.strm.avail_in); + const end = reader.tell(); + await onData({ + data: inflator.result, + type, + num: numObjects, + offset, + end, + reference, + ofs + }); + } + } + } +} +async function parseHeader(reader) { + let byte = await reader.byte(); + const type = byte >> 4 & 7; + let length = byte & 15; + if (byte & 128) { + let shift = 4; + do { + byte = await reader.byte(); + length |= (byte & 127) << shift; + shift += 7; + } while (byte & 128); + } + let ofs; + let reference; + if (type === 6) { + let shift = 0; + ofs = 0; + const bytes = []; + do { + byte = await reader.byte(); + ofs |= (byte & 127) << shift; + shift += 7; + bytes.push(byte); + } while (byte & 128); + reference = Buffer.from(bytes); + } + if (type === 7) { + const buf = await reader.read(20); + reference = buf; + } + return { type, length, ofs, reference }; +} +var supportsDecompressionStream = false; +async function inflate(buffer2) { + if (supportsDecompressionStream === null) { + supportsDecompressionStream = testDecompressionStream(); + } + return supportsDecompressionStream ? browserInflate(buffer2) : import_pako.default.inflate(buffer2); +} +async function browserInflate(buffer2) { + const ds = new DecompressionStream("deflate"); + const d = new Blob([buffer2]).stream().pipeThrough(ds); + return new Uint8Array(await new Response(d).arrayBuffer()); +} +function testDecompressionStream() { + try { + const ds = new DecompressionStream("deflate"); + if (ds) return true; + } catch (_) { + } + return false; +} +function decodeVarInt(reader) { + const bytes = []; + let byte = 0; + let multibyte = 0; + do { + byte = reader.readUInt8(); + const lastSeven = byte & 127; + bytes.push(lastSeven); + multibyte = byte & 128; + } while (multibyte); + return bytes.reduce((a, b) => a + 1 << 7 | b, -1); +} +function otherVarIntDecode(reader, startWith) { + let result = startWith; + let shift = 4; + let byte = null; + do { + byte = reader.readUInt8(); + result |= (byte & 127) << shift; + shift += 7; + } while (byte & 128); + return result; +} +var GitPackIndex = class _GitPackIndex { + constructor(stuff) { + Object.assign(this, stuff); + this.offsetCache = {}; + } + static async fromIdx({ idx, getExternalRefDelta }) { + const reader = new BufferCursor(idx); + const magic = reader.slice(4).toString("hex"); + if (magic !== "ff744f63") { + return; + } + const version2 = reader.readUInt32BE(); + if (version2 !== 2) { + throw new InternalError( + `Unable to read version ${version2} packfile IDX. (Only version 2 supported)` + ); + } + if (idx.byteLength > 2048 * 1024 * 1024) { + throw new InternalError( + `To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.` + ); + } + reader.seek(reader.tell() + 4 * 255); + const size = reader.readUInt32BE(); + const hashes = []; + for (let i = 0; i < size; i++) { + const hash2 = reader.slice(20).toString("hex"); + hashes[i] = hash2; + } + reader.seek(reader.tell() + 4 * size); + const offsets = /* @__PURE__ */ new Map(); + for (let i = 0; i < size; i++) { + offsets.set(hashes[i], reader.readUInt32BE()); + } + const packfileSha = reader.slice(20).toString("hex"); + return new _GitPackIndex({ + hashes, + crcs: {}, + offsets, + packfileSha, + getExternalRefDelta + }); + } + static async fromPack({ pack, getExternalRefDelta, onProgress }) { + const listpackTypes = { + 1: "commit", + 2: "tree", + 3: "blob", + 4: "tag", + 6: "ofs-delta", + 7: "ref-delta" + }; + const offsetToObject = {}; + const packfileSha = pack.slice(-20).toString("hex"); + const hashes = []; + const crcs = {}; + const offsets = /* @__PURE__ */ new Map(); + let totalObjectCount = null; + let lastPercent = null; + await listpack([pack], async ({ data, type, reference, offset, num: num2 }) => { + if (totalObjectCount === null) totalObjectCount = num2; + const percent = Math.floor( + (totalObjectCount - num2) * 100 / totalObjectCount + ); + if (percent !== lastPercent) { + if (onProgress) { + await onProgress({ + phase: "Receiving objects", + loaded: totalObjectCount - num2, + total: totalObjectCount + }); + } + } + lastPercent = percent; + type = listpackTypes[type]; + if (["commit", "tree", "blob", "tag"].includes(type)) { + offsetToObject[offset] = { + type, + offset + }; + } else if (type === "ofs-delta") { + offsetToObject[offset] = { + type, + offset + }; + } else if (type === "ref-delta") { + offsetToObject[offset] = { + type, + offset + }; + } + }); + const offsetArray = Object.keys(offsetToObject).map(Number); + for (const [i, start] of offsetArray.entries()) { + const end = i + 1 === offsetArray.length ? pack.byteLength - 20 : offsetArray[i + 1]; + const o = offsetToObject[start]; + const crc = import_crc_32.default.buf(pack.slice(start, end)) >>> 0; + o.end = end; + o.crc = crc; + } + const p = new _GitPackIndex({ + pack: Promise.resolve(pack), + packfileSha, + crcs, + hashes, + offsets, + getExternalRefDelta + }); + lastPercent = null; + let count = 0; + const objectsByDepth = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (let offset in offsetToObject) { + offset = Number(offset); + const percent = Math.floor(count * 100 / totalObjectCount); + if (percent !== lastPercent) { + if (onProgress) { + await onProgress({ + phase: "Resolving deltas", + loaded: count, + total: totalObjectCount + }); + } + } + count++; + lastPercent = percent; + const o = offsetToObject[offset]; + if (o.oid) continue; + try { + p.readDepth = 0; + p.externalReadDepth = 0; + const { type, object } = await p.readSlice({ start: offset }); + objectsByDepth[p.readDepth] += 1; + const oid = await shasum(GitObject.wrap({ type, object })); + o.oid = oid; + hashes.push(oid); + offsets.set(oid, offset); + crcs[oid] = o.crc; + } catch (err) { + continue; + } + } + hashes.sort(); + return p; + } + async toBuffer() { + const buffers = []; + const write = (str, encoding) => { + buffers.push(Buffer.from(str, encoding)); + }; + write("ff744f63", "hex"); + write("00000002", "hex"); + const fanoutBuffer = new BufferCursor(Buffer.alloc(256 * 4)); + for (let i = 0; i < 256; i++) { + let count = 0; + for (const hash2 of this.hashes) { + if (parseInt(hash2.slice(0, 2), 16) <= i) count++; + } + fanoutBuffer.writeUInt32BE(count); + } + buffers.push(fanoutBuffer.buffer); + for (const hash2 of this.hashes) { + write(hash2, "hex"); + } + const crcsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4)); + for (const hash2 of this.hashes) { + crcsBuffer.writeUInt32BE(this.crcs[hash2]); + } + buffers.push(crcsBuffer.buffer); + const offsetsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4)); + for (const hash2 of this.hashes) { + offsetsBuffer.writeUInt32BE(this.offsets.get(hash2)); + } + buffers.push(offsetsBuffer.buffer); + write(this.packfileSha, "hex"); + const totalBuffer = Buffer.concat(buffers); + const sha = await shasum(totalBuffer); + const shaBuffer = Buffer.alloc(20); + shaBuffer.write(sha, "hex"); + return Buffer.concat([totalBuffer, shaBuffer]); + } + async load({ pack }) { + this.pack = pack; + } + async unload() { + this.pack = null; + } + async read({ oid }) { + if (!this.offsets.get(oid)) { + if (this.getExternalRefDelta) { + this.externalReadDepth++; + return this.getExternalRefDelta(oid); + } else { + throw new InternalError(`Could not read object ${oid} from packfile`); + } + } + const start = this.offsets.get(oid); + return this.readSlice({ start }); + } + async readSlice({ start }) { + if (this.offsetCache[start]) { + return Object.assign({}, this.offsetCache[start]); + } + this.readDepth++; + const types2 = { + 16: "commit", + 32: "tree", + 48: "blob", + 64: "tag", + 96: "ofs_delta", + 112: "ref_delta" + }; + if (!this.pack) { + throw new InternalError( + "Tried to read from a GitPackIndex with no packfile loaded into memory" + ); + } + const raw = (await this.pack).slice(start); + const reader = new BufferCursor(raw); + const byte = reader.readUInt8(); + const btype = byte & 112; + let type = types2[btype]; + if (type === void 0) { + throw new InternalError("Unrecognized type: 0b" + btype.toString(2)); + } + const lastFour = byte & 15; + let length = lastFour; + const multibyte = byte & 128; + if (multibyte) { + length = otherVarIntDecode(reader, lastFour); + } + let base = null; + let object = null; + if (type === "ofs_delta") { + const offset = decodeVarInt(reader); + const baseOffset = start - offset; + ({ object: base, type } = await this.readSlice({ start: baseOffset })); + } + if (type === "ref_delta") { + const oid = reader.slice(20).toString("hex"); + ({ object: base, type } = await this.read({ oid })); + } + const buffer2 = raw.slice(reader.tell()); + object = Buffer.from(await inflate(buffer2)); + if (object.byteLength !== length) { + throw new InternalError( + `Packfile told us object would have length ${length} but it had length ${object.byteLength}` + ); + } + if (base) { + object = Buffer.from(applyDelta(object, base)); + } + if (this.readDepth > 3) { + this.offsetCache[start] = { type, object }; + } + return { type, format: "content", object }; + } +}; +var PackfileCache = Symbol("PackfileCache"); +async function loadPackIndex({ + fs, + filename, + getExternalRefDelta, + emitter, + emitterPrefix +}) { + const idx = await fs.read(filename); + return GitPackIndex.fromIdx({ idx, getExternalRefDelta }); +} +function readPackIndex({ + fs, + cache, + filename, + getExternalRefDelta, + emitter, + emitterPrefix +}) { + if (!cache[PackfileCache]) cache[PackfileCache] = /* @__PURE__ */ new Map(); + let p = cache[PackfileCache].get(filename); + if (!p) { + p = loadPackIndex({ + fs, + filename, + getExternalRefDelta, + emitter, + emitterPrefix + }); + cache[PackfileCache].set(filename, p); + } + return p; +} +async function readObjectPacked({ + fs, + cache, + gitdir, + oid, + format = "content", + getExternalRefDelta +}) { + let list = await fs.readdir(join(gitdir, "objects/pack")); + list = list.filter((x) => x.endsWith(".idx")); + for (const filename of list) { + const indexFile = `${gitdir}/objects/pack/${filename}`; + const p = await readPackIndex({ + fs, + cache, + filename: indexFile, + getExternalRefDelta + }); + if (p.error) throw new InternalError(p.error); + if (p.offsets.has(oid)) { + if (!p.pack) { + const packFile = indexFile.replace(/idx$/, "pack"); + p.pack = fs.read(packFile); + } + const result = await p.read({ oid, getExternalRefDelta }); + result.format = "content"; + result.source = `objects/pack/${filename.replace(/idx$/, "pack")}`; + return result; + } + } + return null; +} +async function _readObject({ + fs, + cache, + gitdir, + oid, + format = "content" +}) { + const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); + let result; + if (oid === "4b825dc642cb6eb9a060e54bf8d69288fbee4904") { + result = { format: "wrapped", object: Buffer.from(`tree 0\0`) }; + } + if (!result) { + result = await readObjectLoose({ fs, gitdir, oid }); + } + if (!result) { + result = await readObjectPacked({ + fs, + cache, + gitdir, + oid, + getExternalRefDelta + }); + if (!result) { + throw new NotFoundError(oid); + } + return result; + } + if (format === "deflated") { + return result; + } + if (result.format === "deflated") { + result.object = Buffer.from(await inflate(result.object)); + result.format = "wrapped"; + } + if (format === "wrapped") { + return result; + } + const sha = await shasum(result.object); + if (sha !== oid) { + throw new InternalError( + `SHA check failed! Expected ${oid}, computed ${sha}` + ); + } + const { object, type } = GitObject.unwrap(result.object); + result.type = type; + result.object = object; + result.format = "content"; + if (format === "content") { + return result; + } + throw new InternalError(`invalid requested format "${format}"`); +} +var AlreadyExistsError = class _AlreadyExistsError extends BaseError { + /** + * @param {'note'|'remote'|'tag'|'branch'} noun + * @param {string} where + * @param {boolean} canForce + */ + constructor(noun, where, canForce = true) { + super( + `Failed to create ${noun} at ${where} because it already exists.${canForce ? ` (Hint: use 'force: true' parameter to overwrite existing ${noun}.)` : ""}` + ); + this.code = this.name = _AlreadyExistsError.code; + this.data = { noun, where, canForce }; + } +}; +AlreadyExistsError.code = "AlreadyExistsError"; +var AmbiguousError = class _AmbiguousError extends BaseError { + /** + * @param {'oids'|'refs'} nouns + * @param {string} short + * @param {string[]} matches + */ + constructor(nouns, short, matches) { + super( + `Found multiple ${nouns} matching "${short}" (${matches.join( + ", " + )}). Use a longer abbreviation length to disambiguate them.` + ); + this.code = this.name = _AmbiguousError.code; + this.data = { nouns, short, matches }; + } +}; +AmbiguousError.code = "AmbiguousError"; +var CheckoutConflictError = class _CheckoutConflictError extends BaseError { + /** + * @param {string[]} filepaths + */ + constructor(filepaths) { + super( + `Your local changes to the following files would be overwritten by checkout: ${filepaths.join( + ", " + )}` + ); + this.code = this.name = _CheckoutConflictError.code; + this.data = { filepaths }; + } +}; +CheckoutConflictError.code = "CheckoutConflictError"; +var CommitNotFetchedError = class _CommitNotFetchedError extends BaseError { + /** + * @param {string} ref + * @param {string} oid + */ + constructor(ref, oid) { + super( + `Failed to checkout "${ref}" because commit ${oid} is not available locally. Do a git fetch to make the branch available locally.` + ); + this.code = this.name = _CommitNotFetchedError.code; + this.data = { ref, oid }; + } +}; +CommitNotFetchedError.code = "CommitNotFetchedError"; +var EmptyServerResponseError = class _EmptyServerResponseError extends BaseError { + constructor() { + super(`Empty response from git server.`); + this.code = this.name = _EmptyServerResponseError.code; + this.data = {}; + } +}; +EmptyServerResponseError.code = "EmptyServerResponseError"; +var FastForwardError = class _FastForwardError extends BaseError { + constructor() { + super(`A simple fast-forward merge was not possible.`); + this.code = this.name = _FastForwardError.code; + this.data = {}; + } +}; +FastForwardError.code = "FastForwardError"; +var GitPushError = class _GitPushError extends BaseError { + /** + * @param {string} prettyDetails + * @param {PushResult} result + */ + constructor(prettyDetails, result) { + super(`One or more branches were not updated: ${prettyDetails}`); + this.code = this.name = _GitPushError.code; + this.data = { prettyDetails, result }; + } +}; +GitPushError.code = "GitPushError"; +var HttpError = class _HttpError extends BaseError { + /** + * @param {number} statusCode + * @param {string} statusMessage + * @param {string} response + */ + constructor(statusCode, statusMessage, response) { + super(`HTTP Error: ${statusCode} ${statusMessage}`); + this.code = this.name = _HttpError.code; + this.data = { statusCode, statusMessage, response }; + } +}; +HttpError.code = "HttpError"; +var InvalidFilepathError = class _InvalidFilepathError extends BaseError { + /** + * @param {'leading-slash'|'trailing-slash'|'directory'} [reason] + */ + constructor(reason) { + let message = "invalid filepath"; + if (reason === "leading-slash" || reason === "trailing-slash") { + message = `"filepath" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.`; + } else if (reason === "directory") { + message = `"filepath" should not be a directory.`; + } + super(message); + this.code = this.name = _InvalidFilepathError.code; + this.data = { reason }; + } +}; +InvalidFilepathError.code = "InvalidFilepathError"; +var InvalidRefNameError = class _InvalidRefNameError extends BaseError { + /** + * @param {string} ref + * @param {string} suggestion + * @param {boolean} canForce + */ + constructor(ref, suggestion) { + super( + `"${ref}" would be an invalid git reference. (Hint: a valid alternative would be "${suggestion}".)` + ); + this.code = this.name = _InvalidRefNameError.code; + this.data = { ref, suggestion }; + } +}; +InvalidRefNameError.code = "InvalidRefNameError"; +var MaxDepthError = class _MaxDepthError extends BaseError { + /** + * @param {number} depth + */ + constructor(depth) { + super(`Maximum search depth of ${depth} exceeded.`); + this.code = this.name = _MaxDepthError.code; + this.data = { depth }; + } +}; +MaxDepthError.code = "MaxDepthError"; +var MergeNotSupportedError = class _MergeNotSupportedError extends BaseError { + constructor() { + super(`Merges with conflicts are not supported yet.`); + this.code = this.name = _MergeNotSupportedError.code; + this.data = {}; + } +}; +MergeNotSupportedError.code = "MergeNotSupportedError"; +var MergeConflictError = class _MergeConflictError extends BaseError { + /** + * @param {Array} filepaths + * @param {Array} bothModified + * @param {Array} deleteByUs + * @param {Array} deleteByTheirs + */ + constructor(filepaths, bothModified, deleteByUs, deleteByTheirs) { + super( + `Automatic merge failed with one or more merge conflicts in the following files: ${filepaths.toString()}. Fix conflicts then commit the result.` + ); + this.code = this.name = _MergeConflictError.code; + this.data = { filepaths, bothModified, deleteByUs, deleteByTheirs }; + } +}; +MergeConflictError.code = "MergeConflictError"; +var MissingNameError = class _MissingNameError extends BaseError { + /** + * @param {'author'|'committer'|'tagger'} role + */ + constructor(role) { + super( + `No name was provided for ${role} in the argument or in the .git/config file.` + ); + this.code = this.name = _MissingNameError.code; + this.data = { role }; + } +}; +MissingNameError.code = "MissingNameError"; +var MissingParameterError = class _MissingParameterError extends BaseError { + /** + * @param {string} parameter + */ + constructor(parameter) { + super( + `The function requires a "${parameter}" parameter but none was provided.` + ); + this.code = this.name = _MissingParameterError.code; + this.data = { parameter }; + } +}; +MissingParameterError.code = "MissingParameterError"; +var MultipleGitError = class _MultipleGitError extends BaseError { + /** + * @param {Error[]} errors + * @param {string} message + */ + constructor(errors) { + super( + `There are multiple errors that were thrown by the method. Please refer to the "errors" property to see more` + ); + this.code = this.name = _MultipleGitError.code; + this.data = { errors }; + this.errors = errors; + } +}; +MultipleGitError.code = "MultipleGitError"; +var ParseError = class _ParseError extends BaseError { + /** + * @param {string} expected + * @param {string} actual + */ + constructor(expected, actual) { + super(`Expected "${expected}" but received "${actual}".`); + this.code = this.name = _ParseError.code; + this.data = { expected, actual }; + } +}; +ParseError.code = "ParseError"; +var PushRejectedError = class _PushRejectedError extends BaseError { + /** + * @param {'not-fast-forward'|'tag-exists'} reason + */ + constructor(reason) { + let message = ""; + if (reason === "not-fast-forward") { + message = " because it was not a simple fast-forward"; + } else if (reason === "tag-exists") { + message = " because tag already exists"; + } + super(`Push rejected${message}. Use "force: true" to override.`); + this.code = this.name = _PushRejectedError.code; + this.data = { reason }; + } +}; +PushRejectedError.code = "PushRejectedError"; +var RemoteCapabilityError = class _RemoteCapabilityError extends BaseError { + /** + * @param {'shallow'|'deepen-since'|'deepen-not'|'deepen-relative'} capability + * @param {'depth'|'since'|'exclude'|'relative'} parameter + */ + constructor(capability, parameter) { + super( + `Remote does not support the "${capability}" so the "${parameter}" parameter cannot be used.` + ); + this.code = this.name = _RemoteCapabilityError.code; + this.data = { capability, parameter }; + } +}; +RemoteCapabilityError.code = "RemoteCapabilityError"; +var SmartHttpError = class _SmartHttpError extends BaseError { + /** + * @param {string} preview + * @param {string} response + */ + constructor(preview, response) { + super( + `Remote did not reply using the "smart" HTTP protocol. Expected "001e# service=git-upload-pack" but received: ${preview}` + ); + this.code = this.name = _SmartHttpError.code; + this.data = { preview, response }; + } +}; +SmartHttpError.code = "SmartHttpError"; +var UnknownTransportError = class _UnknownTransportError extends BaseError { + /** + * @param {string} url + * @param {string} transport + * @param {string} [suggestion] + */ + constructor(url, transport, suggestion) { + super( + `Git remote "${url}" uses an unrecognized transport protocol: "${transport}"` + ); + this.code = this.name = _UnknownTransportError.code; + this.data = { url, transport, suggestion }; + } +}; +UnknownTransportError.code = "UnknownTransportError"; +var UrlParseError = class _UrlParseError extends BaseError { + /** + * @param {string} url + */ + constructor(url) { + super(`Cannot parse remote URL: "${url}"`); + this.code = this.name = _UrlParseError.code; + this.data = { url }; + } +}; +UrlParseError.code = "UrlParseError"; +var UserCanceledError = class _UserCanceledError extends BaseError { + constructor() { + super(`The operation was canceled.`); + this.code = this.name = _UserCanceledError.code; + this.data = {}; + } +}; +UserCanceledError.code = "UserCanceledError"; +var IndexResetError = class _IndexResetError extends BaseError { + /** + * @param {Array} filepaths + */ + constructor(filepath) { + super( + `Could not merge index: Entry for '${filepath}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.` + ); + this.code = this.name = _IndexResetError.code; + this.data = { filepath }; + } +}; +IndexResetError.code = "IndexResetError"; +var NoCommitError = class _NoCommitError extends BaseError { + /** + * @param {string} ref + */ + constructor(ref) { + super( + `"${ref}" does not point to any commit. You're maybe working on a repository with no commits yet. ` + ); + this.code = this.name = _NoCommitError.code; + this.data = { ref }; + } +}; +NoCommitError.code = "NoCommitError"; +var Errors = /* @__PURE__ */ Object.freeze({ + __proto__: null, + AlreadyExistsError, + AmbiguousError, + CheckoutConflictError, + CommitNotFetchedError, + EmptyServerResponseError, + FastForwardError, + GitPushError, + HttpError, + InternalError, + InvalidFilepathError, + InvalidOidError, + InvalidRefNameError, + MaxDepthError, + MergeNotSupportedError, + MergeConflictError, + MissingNameError, + MissingParameterError, + MultipleGitError, + NoRefspecError, + NotFoundError, + ObjectTypeError, + ParseError, + PushRejectedError, + RemoteCapabilityError, + SmartHttpError, + UnknownTransportError, + UnsafeFilepathError, + UrlParseError, + UserCanceledError, + UnmergedPathsError, + IndexResetError, + NoCommitError +}); +function formatAuthor({ name, email, timestamp, timezoneOffset }) { + timezoneOffset = formatTimezoneOffset(timezoneOffset); + return `${name} <${email}> ${timestamp} ${timezoneOffset}`; +} +function formatTimezoneOffset(minutes) { + const sign = simpleSign(negateExceptForZero(minutes)); + minutes = Math.abs(minutes); + const hours = Math.floor(minutes / 60); + minutes -= hours * 60; + let strHours = String(hours); + let strMinutes = String(minutes); + if (strHours.length < 2) strHours = "0" + strHours; + if (strMinutes.length < 2) strMinutes = "0" + strMinutes; + return (sign === -1 ? "-" : "+") + strHours + strMinutes; +} +function simpleSign(n) { + return Math.sign(n) || (Object.is(n, -0) ? -1 : 1); +} +function negateExceptForZero(n) { + return n === 0 ? n : -n; +} +function normalizeNewlines(str) { + str = str.replace(/\r/g, ""); + str = str.replace(/^\n+/, ""); + str = str.replace(/\n+$/, "") + "\n"; + return str; +} +function parseAuthor(author) { + const [, name, email, timestamp, offset] = author.match( + /^(.*) <(.*)> (.*) (.*)$/ + ); + return { + name, + email, + timestamp: Number(timestamp), + timezoneOffset: parseTimezoneOffset(offset) + }; +} +function parseTimezoneOffset(offset) { + let [, sign, hours, minutes] = offset.match(/(\+|-)(\d\d)(\d\d)/); + minutes = (sign === "+" ? 1 : -1) * (Number(hours) * 60 + Number(minutes)); + return negateExceptForZero$1(minutes); +} +function negateExceptForZero$1(n) { + return n === 0 ? n : -n; +} +var GitAnnotatedTag = class _GitAnnotatedTag { + constructor(tag2) { + if (typeof tag2 === "string") { + this._tag = tag2; + } else if (Buffer.isBuffer(tag2)) { + this._tag = tag2.toString("utf8"); + } else if (typeof tag2 === "object") { + this._tag = _GitAnnotatedTag.render(tag2); + } else { + throw new InternalError( + "invalid type passed to GitAnnotatedTag constructor" + ); + } + } + static from(tag2) { + return new _GitAnnotatedTag(tag2); + } + static render(obj) { + return `object ${obj.object} +type ${obj.type} +tag ${obj.tag} +tagger ${formatAuthor(obj.tagger)} + +${obj.message} +${obj.gpgsig ? obj.gpgsig : ""}`; + } + justHeaders() { + return this._tag.slice(0, this._tag.indexOf("\n\n")); + } + message() { + const tag2 = this.withoutSignature(); + return tag2.slice(tag2.indexOf("\n\n") + 2); + } + parse() { + return Object.assign(this.headers(), { + message: this.message(), + gpgsig: this.gpgsig() + }); + } + render() { + return this._tag; + } + headers() { + const headers = this.justHeaders().split("\n"); + const hs = []; + for (const h of headers) { + if (h[0] === " ") { + hs[hs.length - 1] += "\n" + h.slice(1); + } else { + hs.push(h); + } + } + const obj = {}; + for (const h of hs) { + const key2 = h.slice(0, h.indexOf(" ")); + const value = h.slice(h.indexOf(" ") + 1); + if (Array.isArray(obj[key2])) { + obj[key2].push(value); + } else { + obj[key2] = value; + } + } + if (obj.tagger) { + obj.tagger = parseAuthor(obj.tagger); + } + if (obj.committer) { + obj.committer = parseAuthor(obj.committer); + } + return obj; + } + withoutSignature() { + const tag2 = normalizeNewlines(this._tag); + if (tag2.indexOf("\n-----BEGIN PGP SIGNATURE-----") === -1) return tag2; + return tag2.slice(0, tag2.lastIndexOf("\n-----BEGIN PGP SIGNATURE-----")); + } + gpgsig() { + if (this._tag.indexOf("\n-----BEGIN PGP SIGNATURE-----") === -1) return; + const signature = this._tag.slice( + this._tag.indexOf("-----BEGIN PGP SIGNATURE-----"), + this._tag.indexOf("-----END PGP SIGNATURE-----") + "-----END PGP SIGNATURE-----".length + ); + return normalizeNewlines(signature); + } + payload() { + return this.withoutSignature() + "\n"; + } + toObject() { + return Buffer.from(this._tag, "utf8"); + } + static async sign(tag2, sign, secretKey) { + const payload = tag2.payload(); + let { signature } = await sign({ payload, secretKey }); + signature = normalizeNewlines(signature); + const signedTag = payload + signature; + return _GitAnnotatedTag.from(signedTag); + } +}; +function indent(str) { + return str.trim().split("\n").map((x) => " " + x).join("\n") + "\n"; +} +function outdent(str) { + return str.split("\n").map((x) => x.replace(/^ /, "")).join("\n"); +} +var GitCommit = class _GitCommit { + constructor(commit2) { + if (typeof commit2 === "string") { + this._commit = commit2; + } else if (Buffer.isBuffer(commit2)) { + this._commit = commit2.toString("utf8"); + } else if (typeof commit2 === "object") { + this._commit = _GitCommit.render(commit2); + } else { + throw new InternalError("invalid type passed to GitCommit constructor"); + } + } + static fromPayloadSignature({ payload, signature }) { + const headers = _GitCommit.justHeaders(payload); + const message = _GitCommit.justMessage(payload); + const commit2 = normalizeNewlines( + headers + "\ngpgsig" + indent(signature) + "\n" + message + ); + return new _GitCommit(commit2); + } + static from(commit2) { + return new _GitCommit(commit2); + } + toObject() { + return Buffer.from(this._commit, "utf8"); + } + // Todo: allow setting the headers and message + headers() { + return this.parseHeaders(); + } + // Todo: allow setting the headers and message + message() { + return _GitCommit.justMessage(this._commit); + } + parse() { + return Object.assign({ message: this.message() }, this.headers()); + } + static justMessage(commit2) { + return normalizeNewlines(commit2.slice(commit2.indexOf("\n\n") + 2)); + } + static justHeaders(commit2) { + return commit2.slice(0, commit2.indexOf("\n\n")); + } + parseHeaders() { + const headers = _GitCommit.justHeaders(this._commit).split("\n"); + const hs = []; + for (const h of headers) { + if (h[0] === " ") { + hs[hs.length - 1] += "\n" + h.slice(1); + } else { + hs.push(h); + } + } + const obj = { + parent: [] + }; + for (const h of hs) { + const key2 = h.slice(0, h.indexOf(" ")); + const value = h.slice(h.indexOf(" ") + 1); + if (Array.isArray(obj[key2])) { + obj[key2].push(value); + } else { + obj[key2] = value; + } + } + if (obj.author) { + obj.author = parseAuthor(obj.author); + } + if (obj.committer) { + obj.committer = parseAuthor(obj.committer); + } + return obj; + } + static renderHeaders(obj) { + let headers = ""; + if (obj.tree) { + headers += `tree ${obj.tree} +`; + } else { + headers += `tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 +`; + } + if (obj.parent) { + if (obj.parent.length === void 0) { + throw new InternalError(`commit 'parent' property should be an array`); + } + for (const p of obj.parent) { + headers += `parent ${p} +`; + } + } + const author = obj.author; + headers += `author ${formatAuthor(author)} +`; + const committer = obj.committer || obj.author; + headers += `committer ${formatAuthor(committer)} +`; + if (obj.gpgsig) { + headers += "gpgsig" + indent(obj.gpgsig); + } + return headers; + } + static render(obj) { + return _GitCommit.renderHeaders(obj) + "\n" + normalizeNewlines(obj.message); + } + render() { + return this._commit; + } + withoutSignature() { + const commit2 = normalizeNewlines(this._commit); + if (commit2.indexOf("\ngpgsig") === -1) return commit2; + const headers = commit2.slice(0, commit2.indexOf("\ngpgsig")); + const message = commit2.slice( + commit2.indexOf("-----END PGP SIGNATURE-----\n") + "-----END PGP SIGNATURE-----\n".length + ); + return normalizeNewlines(headers + "\n" + message); + } + isolateSignature() { + const signature = this._commit.slice( + this._commit.indexOf("-----BEGIN PGP SIGNATURE-----"), + this._commit.indexOf("-----END PGP SIGNATURE-----") + "-----END PGP SIGNATURE-----".length + ); + return outdent(signature); + } + static async sign(commit2, sign, secretKey) { + const payload = commit2.withoutSignature(); + const message = _GitCommit.justMessage(commit2._commit); + let { signature } = await sign({ payload, secretKey }); + signature = normalizeNewlines(signature); + const headers = _GitCommit.justHeaders(commit2._commit); + const signedCommit = headers + "\ngpgsig" + indent(signature) + "\n" + message; + return _GitCommit.from(signedCommit); + } +}; +async function resolveTree({ fs, cache, gitdir, oid }) { + if (oid === "4b825dc642cb6eb9a060e54bf8d69288fbee4904") { + return { tree: GitTree.from([]), oid }; + } + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type === "tag") { + oid = GitAnnotatedTag.from(object).parse().object; + return resolveTree({ fs, cache, gitdir, oid }); + } + if (type === "commit") { + oid = GitCommit.from(object).parse().tree; + return resolveTree({ fs, cache, gitdir, oid }); + } + if (type !== "tree") { + throw new ObjectTypeError(oid, type, "tree"); + } + return { tree: GitTree.from(object), oid }; +} +var GitWalkerRepo = class { + constructor({ fs, gitdir, ref, cache }) { + this.fs = fs; + this.cache = cache; + this.gitdir = gitdir; + this.mapPromise = (async () => { + const map = /* @__PURE__ */ new Map(); + let oid; + try { + oid = await GitRefManager.resolve({ fs, gitdir, ref }); + } catch (e) { + if (e instanceof NotFoundError) { + oid = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"; + } + } + const tree = await resolveTree({ fs, cache: this.cache, gitdir, oid }); + tree.type = "tree"; + tree.mode = "40000"; + map.set(".", tree); + return map; + })(); + const walker = this; + this.ConstructEntry = class TreeEntry { + constructor(fullpath) { + this._fullpath = fullpath; + this._type = false; + this._mode = false; + this._stat = false; + this._content = false; + this._oid = false; + } + async type() { + return walker.type(this); + } + async mode() { + return walker.mode(this); + } + async stat() { + return walker.stat(this); + } + async content() { + return walker.content(this); + } + async oid() { + return walker.oid(this); + } + }; + } + async readdir(entry) { + const filepath = entry._fullpath; + const { fs, cache, gitdir } = this; + const map = await this.mapPromise; + const obj = map.get(filepath); + if (!obj) throw new Error(`No obj for ${filepath}`); + const oid = obj.oid; + if (!oid) throw new Error(`No oid for obj ${JSON.stringify(obj)}`); + if (obj.type !== "tree") { + return null; + } + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type !== obj.type) { + throw new ObjectTypeError(oid, type, obj.type); + } + const tree = GitTree.from(object); + for (const entry2 of tree) { + map.set(join(filepath, entry2.path), entry2); + } + return tree.entries().map((entry2) => join(filepath, entry2.path)); + } + async type(entry) { + if (entry._type === false) { + const map = await this.mapPromise; + const { type } = map.get(entry._fullpath); + entry._type = type; + } + return entry._type; + } + async mode(entry) { + if (entry._mode === false) { + const map = await this.mapPromise; + const { mode } = map.get(entry._fullpath); + entry._mode = normalizeMode(parseInt(mode, 8)); + } + return entry._mode; + } + async stat(_entry) { + } + async content(entry) { + if (entry._content === false) { + const map = await this.mapPromise; + const { fs, cache, gitdir } = this; + const obj = map.get(entry._fullpath); + const oid = obj.oid; + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type !== "blob") { + entry._content = void 0; + } else { + entry._content = new Uint8Array(object); + } + } + return entry._content; + } + async oid(entry) { + if (entry._oid === false) { + const map = await this.mapPromise; + const obj = map.get(entry._fullpath); + entry._oid = obj.oid; + } + return entry._oid; + } +}; +function TREE({ ref = "HEAD" } = {}) { + const o = /* @__PURE__ */ Object.create(null); + Object.defineProperty(o, GitWalkSymbol, { + value: function({ fs, gitdir, cache }) { + return new GitWalkerRepo({ fs, gitdir, ref, cache }); + } + }); + Object.freeze(o); + return o; +} +var GitWalkerFs = class { + constructor({ fs, dir, gitdir, cache }) { + this.fs = fs; + this.cache = cache; + this.dir = dir; + this.gitdir = gitdir; + const walker = this; + this.ConstructEntry = class WorkdirEntry { + constructor(fullpath) { + this._fullpath = fullpath; + this._type = false; + this._mode = false; + this._stat = false; + this._content = false; + this._oid = false; + } + async type() { + return walker.type(this); + } + async mode() { + return walker.mode(this); + } + async stat() { + return walker.stat(this); + } + async content() { + return walker.content(this); + } + async oid() { + return walker.oid(this); + } + }; + } + async readdir(entry) { + const filepath = entry._fullpath; + const { fs, dir } = this; + const names = await fs.readdir(join(dir, filepath)); + if (names === null) return null; + return names.map((name) => join(filepath, name)); + } + async type(entry) { + if (entry._type === false) { + await entry.stat(); + } + return entry._type; + } + async mode(entry) { + if (entry._mode === false) { + await entry.stat(); + } + return entry._mode; + } + async stat(entry) { + if (entry._stat === false) { + const { fs, dir } = this; + let stat = await fs.lstat(`${dir}/${entry._fullpath}`); + if (!stat) { + throw new Error( + `ENOENT: no such file or directory, lstat '${entry._fullpath}'` + ); + } + let type = stat.isDirectory() ? "tree" : "blob"; + if (type === "blob" && !stat.isFile() && !stat.isSymbolicLink()) { + type = "special"; + } + entry._type = type; + stat = normalizeStats(stat); + entry._mode = stat.mode; + if (stat.size === -1 && entry._actualSize) { + stat.size = entry._actualSize; + } + entry._stat = stat; + } + return entry._stat; + } + async content(entry) { + if (entry._content === false) { + const { fs, dir, gitdir } = this; + if (await entry.type() === "tree") { + entry._content = void 0; + } else { + const config = await GitConfigManager.get({ fs, gitdir }); + const autocrlf = await config.get("core.autocrlf"); + const content = await fs.read(`${dir}/${entry._fullpath}`, { autocrlf }); + entry._actualSize = content.length; + if (entry._stat && entry._stat.size === -1) { + entry._stat.size = entry._actualSize; + } + entry._content = new Uint8Array(content); + } + } + return entry._content; + } + async oid(entry) { + if (entry._oid === false) { + const { fs, gitdir, cache } = this; + let oid; + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + const stage = index2.entriesMap.get(entry._fullpath); + const stats = await entry.stat(); + const config = await GitConfigManager.get({ fs, gitdir }); + const filemode = await config.get("core.filemode"); + const trustino = typeof process !== "undefined" ? !(process.platform === "win32") : true; + if (!stage || compareStats(stats, stage, filemode, trustino)) { + const content = await entry.content(); + if (content === void 0) { + oid = void 0; + } else { + oid = await shasum( + GitObject.wrap({ type: "blob", object: await entry.content() }) + ); + if (stage && oid === stage.oid && (!filemode || stats.mode === stage.mode) && compareStats(stats, stage, filemode, trustino)) { + index2.insert({ + filepath: entry._fullpath, + stats, + oid + }); + } + } + } else { + oid = stage.oid; + } + }); + entry._oid = oid; + } + return entry._oid; + } +}; +function WORKDIR() { + const o = /* @__PURE__ */ Object.create(null); + Object.defineProperty(o, GitWalkSymbol, { + value: function({ fs, dir, gitdir, cache }) { + return new GitWalkerFs({ fs, dir, gitdir, cache }); + } + }); + Object.freeze(o); + return o; +} +function arrayRange(start, end) { + const length = end - start; + return Array.from({ length }, (_, i) => start + i); +} +var flat = typeof Array.prototype.flat === "undefined" ? (entries) => entries.reduce((acc, x) => acc.concat(x), []) : (entries) => entries.flat(); +var RunningMinimum = class { + constructor() { + this.value = null; + } + consider(value) { + if (value === null || value === void 0) return; + if (this.value === null) { + this.value = value; + } else if (value < this.value) { + this.value = value; + } + } + reset() { + this.value = null; + } +}; +function* unionOfIterators(sets) { + const min = new RunningMinimum(); + let minimum; + const heads = []; + const numsets = sets.length; + for (let i = 0; i < numsets; i++) { + heads[i] = sets[i].next().value; + if (heads[i] !== void 0) { + min.consider(heads[i]); + } + } + if (min.value === null) return; + while (true) { + const result = []; + minimum = min.value; + min.reset(); + for (let i = 0; i < numsets; i++) { + if (heads[i] !== void 0 && heads[i] === minimum) { + result[i] = heads[i]; + heads[i] = sets[i].next().value; + } else { + result[i] = null; + } + if (heads[i] !== void 0) { + min.consider(heads[i]); + } + } + yield result; + if (min.value === null) return; + } +} +async function _walk({ + fs, + cache, + dir, + gitdir, + trees, + // @ts-ignore + map = async (_, entry) => entry, + // The default reducer is a flatmap that filters out undefineds. + reduce = async (parent, children2) => { + const flatten = flat(children2); + if (parent !== void 0) flatten.unshift(parent); + return flatten; + }, + // The default iterate function walks all children concurrently + iterate = (walk2, children2) => Promise.all([...children2].map(walk2)) +}) { + const walkers = trees.map( + (proxy) => proxy[GitWalkSymbol]({ fs, dir, gitdir, cache }) + ); + const root2 = new Array(walkers.length).fill("."); + const range = arrayRange(0, walkers.length); + const unionWalkerFromReaddir = async (entries) => { + range.map((i) => { + entries[i] = entries[i] && new walkers[i].ConstructEntry(entries[i]); + }); + const subdirs = await Promise.all( + range.map((i) => entries[i] ? walkers[i].readdir(entries[i]) : []) + ); + const iterators = subdirs.map((array) => array === null ? [] : array).map((array) => array[Symbol.iterator]()); + return { + entries, + children: unionOfIterators(iterators) + }; + }; + const walk2 = async (root3) => { + const { entries, children: children2 } = await unionWalkerFromReaddir(root3); + const fullpath = entries.find((entry) => entry && entry._fullpath)._fullpath; + const parent = await map(fullpath, entries); + if (parent !== null) { + let walkedChildren = await iterate(walk2, children2); + walkedChildren = walkedChildren.filter((x) => x !== void 0); + return reduce(parent, walkedChildren); + } + }; + return walk2(root2); +} +async function rmRecursive(fs, filepath) { + const entries = await fs.readdir(filepath); + if (entries == null) { + await fs.rm(filepath); + } else if (entries.length) { + await Promise.all( + entries.map((entry) => { + const subpath = join(filepath, entry); + return fs.lstat(subpath).then((stat) => { + if (!stat) return; + return stat.isDirectory() ? rmRecursive(fs, subpath) : fs.rm(subpath); + }); + }) + ).then(() => fs.rmdir(filepath)); + } else { + await fs.rmdir(filepath); + } +} +function isPromiseLike(obj) { + return isObject(obj) && isFunction(obj.then) && isFunction(obj.catch); +} +function isObject(obj) { + return obj && typeof obj === "object"; +} +function isFunction(obj) { + return typeof obj === "function"; +} +function isPromiseFs(fs) { + const test = (targetFs) => { + try { + return targetFs.readFile().catch((e) => e); + } catch (e) { + return e; + } + }; + return isPromiseLike(test(fs)); +} +var commands = [ + "readFile", + "writeFile", + "mkdir", + "rmdir", + "unlink", + "stat", + "lstat", + "readdir", + "readlink", + "symlink" +]; +function bindFs(target, fs) { + if (isPromiseFs(fs)) { + for (const command of commands) { + target[`_${command}`] = fs[command].bind(fs); + } + } else { + for (const command of commands) { + target[`_${command}`] = (0, import_pify.default)(fs[command].bind(fs)); + } + } + if (isPromiseFs(fs)) { + if (fs.rm) target._rm = fs.rm.bind(fs); + else if (fs.rmdir.length > 1) target._rm = fs.rmdir.bind(fs); + else target._rm = rmRecursive.bind(null, target); + } else { + if (fs.rm) target._rm = (0, import_pify.default)(fs.rm.bind(fs)); + else if (fs.rmdir.length > 2) target._rm = (0, import_pify.default)(fs.rmdir.bind(fs)); + else target._rm = rmRecursive.bind(null, target); + } +} +var FileSystem = class { + constructor(fs) { + if (typeof fs._original_unwrapped_fs !== "undefined") return fs; + const promises = Object.getOwnPropertyDescriptor(fs, "promises"); + if (promises && promises.enumerable) { + bindFs(this, fs.promises); + } else { + bindFs(this, fs); + } + this._original_unwrapped_fs = fs; + } + /** + * Return true if a file exists, false if it doesn't exist. + * Rethrows errors that aren't related to file existence. + */ + async exists(filepath, options = {}) { + try { + await this._stat(filepath); + return true; + } catch (err) { + if (err.code === "ENOENT" || err.code === "ENOTDIR") { + return false; + } else { + console.log('Unhandled error in "FileSystem.exists()" function', err); + throw err; + } + } + } + /** + * Return the contents of a file if it exists, otherwise returns null. + * + * @param {string} filepath + * @param {object} [options] + * + * @returns {Promise} + */ + async read(filepath, options = {}) { + try { + let buffer2 = await this._readFile(filepath, options); + if (options.autocrlf === "true") { + try { + buffer2 = new TextDecoder("utf8", { fatal: true }).decode(buffer2); + buffer2 = buffer2.replace(/\r\n/g, "\n"); + buffer2 = new TextEncoder().encode(buffer2); + } catch (error) { + } + } + if (typeof buffer2 !== "string") { + buffer2 = Buffer.from(buffer2); + } + return buffer2; + } catch (err) { + return null; + } + } + /** + * Write a file (creating missing directories if need be) without throwing errors. + * + * @param {string} filepath + * @param {Buffer|Uint8Array|string} contents + * @param {object|string} [options] + */ + async write(filepath, contents, options = {}) { + try { + await this._writeFile(filepath, contents, options); + return; + } catch (err) { + await this.mkdir(dirname(filepath)); + await this._writeFile(filepath, contents, options); + } + } + /** + * Make a directory (or series of nested directories) without throwing an error if it already exists. + */ + async mkdir(filepath, _selfCall = false) { + try { + await this._mkdir(filepath); + return; + } catch (err) { + if (err === null) return; + if (err.code === "EEXIST") return; + if (_selfCall) throw err; + if (err.code === "ENOENT") { + const parent = dirname(filepath); + if (parent === "." || parent === "/" || parent === filepath) throw err; + await this.mkdir(parent); + await this.mkdir(filepath, true); + } + } + } + /** + * Delete a file without throwing an error if it is already deleted. + */ + async rm(filepath) { + try { + await this._unlink(filepath); + } catch (err) { + if (err.code !== "ENOENT") throw err; + } + } + /** + * Delete a directory without throwing an error if it is already deleted. + */ + async rmdir(filepath, opts) { + try { + if (opts && opts.recursive) { + await this._rm(filepath, opts); + } else { + await this._rmdir(filepath); + } + } catch (err) { + if (err.code !== "ENOENT") throw err; + } + } + /** + * Read a directory without throwing an error is the directory doesn't exist + */ + async readdir(filepath) { + try { + const names = await this._readdir(filepath); + names.sort(compareStrings); + return names; + } catch (err) { + if (err.code === "ENOTDIR") return null; + return []; + } + } + /** + * Return a flast list of all the files nested inside a directory + * + * Based on an elegant concurrent recursive solution from SO + * https://stackoverflow.com/a/45130990/2168416 + */ + async readdirDeep(dir) { + const subdirs = await this._readdir(dir); + const files = await Promise.all( + subdirs.map(async (subdir) => { + const res = dir + "/" + subdir; + return (await this._stat(res)).isDirectory() ? this.readdirDeep(res) : res; + }) + ); + return files.reduce((a, f) => a.concat(f), []); + } + /** + * Return the Stats of a file/symlink if it exists, otherwise returns null. + * Rethrows errors that aren't related to file existence. + */ + async lstat(filename) { + try { + const stats = await this._lstat(filename); + return stats; + } catch (err) { + if (err.code === "ENOENT") { + return null; + } + throw err; + } + } + /** + * Reads the contents of a symlink if it exists, otherwise returns null. + * Rethrows errors that aren't related to file existence. + */ + async readlink(filename, opts = { encoding: "buffer" }) { + try { + const link = await this._readlink(filename, opts); + return Buffer.isBuffer(link) ? link : Buffer.from(link); + } catch (err) { + if (err.code === "ENOENT") { + return null; + } + throw err; + } + } + /** + * Write the contents of buffer to a symlink. + */ + async writelink(filename, buffer2) { + return this._symlink(buffer2.toString("utf8"), filename); + } +}; +function assertParameter(name, value) { + if (value === void 0) { + throw new MissingParameterError(name); + } +} +async function modified(entry, base) { + if (!entry && !base) return false; + if (entry && !base) return true; + if (!entry && base) return true; + if (await entry.type() === "tree" && await base.type() === "tree") { + return false; + } + if (await entry.type() === await base.type() && await entry.mode() === await base.mode() && await entry.oid() === await base.oid()) { + return false; + } + return true; +} +async function abortMerge({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + commit: commit2 = "HEAD", + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("dir", dir); + assertParameter("gitdir", gitdir); + const fs = new FileSystem(_fs); + const trees = [TREE({ ref: commit2 }), WORKDIR(), STAGE()]; + let unmergedPaths = []; + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + unmergedPaths = index2.unmergedPaths; + }); + const results = await _walk({ + fs, + cache, + dir, + gitdir, + trees, + map: async function(path2, [head, workdir, index2]) { + const staged = !await modified(workdir, index2); + const unmerged = unmergedPaths.includes(path2); + const unmodified = !await modified(index2, head); + if (staged || unmerged) { + return head ? { + path: path2, + mode: await head.mode(), + oid: await head.oid(), + type: await head.type(), + content: await head.content() + } : void 0; + } + if (unmodified) return false; + else throw new IndexResetError(path2); + } + }); + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + for (const entry of results) { + if (entry === false) continue; + if (!entry) { + await fs.rmdir(`${dir}/${entry.path}`, { recursive: true }); + index2.delete({ filepath: entry.path }); + continue; + } + if (entry.type === "blob") { + const content = new TextDecoder().decode(entry.content); + await fs.write(`${dir}/${entry.path}`, content, { mode: entry.mode }); + index2.insert({ + filepath: entry.path, + oid: entry.oid, + stage: 0 + }); + } + } + }); + } catch (err) { + err.caller = "git.abortMerge"; + throw err; + } +} +var GitIgnoreManager = class { + static async isIgnored({ fs, dir, gitdir = join(dir, ".git"), filepath }) { + if (basename(filepath) === ".git") return true; + if (filepath === ".") return false; + let excludes = ""; + const excludesFile = join(gitdir, "info", "exclude"); + if (await fs.exists(excludesFile)) { + excludes = await fs.read(excludesFile, "utf8"); + } + const pairs = [ + { + gitignore: join(dir, ".gitignore"), + filepath + } + ]; + const pieces = filepath.split("/").filter(Boolean); + for (let i = 1; i < pieces.length; i++) { + const folder = pieces.slice(0, i).join("/"); + const file = pieces.slice(i).join("/"); + pairs.push({ + gitignore: join(dir, folder, ".gitignore"), + filepath: file + }); + } + let ignoredStatus = false; + for (const p of pairs) { + let file; + try { + file = await fs.read(p.gitignore, "utf8"); + } catch (err) { + if (err.code === "NOENT") continue; + } + const ign = (0, import_ignore.default)().add(excludes); + ign.add(file); + const parentdir = dirname(p.filepath); + if (parentdir !== "." && ign.ignores(parentdir)) return true; + if (ignoredStatus) { + ignoredStatus = !ign.test(p.filepath).unignored; + } else { + ignoredStatus = ign.test(p.filepath).ignored; + } + } + return ignoredStatus; + } +}; +async function writeObjectLoose({ fs, gitdir, object, format, oid }) { + if (format !== "deflated") { + throw new InternalError( + "GitObjectStoreLoose expects objects to write to be in deflated format" + ); + } + const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; + const filepath = `${gitdir}/${source}`; + if (!await fs.exists(filepath)) await fs.write(filepath, object); +} +var supportsCompressionStream = null; +async function deflate(buffer2) { + if (supportsCompressionStream === null) { + supportsCompressionStream = testCompressionStream(); + } + return supportsCompressionStream ? browserDeflate(buffer2) : import_pako.default.deflate(buffer2); +} +async function browserDeflate(buffer2) { + const cs = new CompressionStream("deflate"); + const c = new Blob([buffer2]).stream().pipeThrough(cs); + return new Uint8Array(await new Response(c).arrayBuffer()); +} +function testCompressionStream() { + try { + const cs = new CompressionStream("deflate"); + cs.writable.close(); + const stream = new Blob([]).stream(); + stream.cancel(); + return true; + } catch (_) { + return false; + } +} +async function _writeObject({ + fs, + gitdir, + type, + object, + format = "content", + oid = void 0, + dryRun = false +}) { + if (format !== "deflated") { + if (format !== "wrapped") { + object = GitObject.wrap({ type, object }); + } + oid = await shasum(object); + object = Buffer.from(await deflate(object)); + } + if (!dryRun) { + await writeObjectLoose({ fs, gitdir, object, format: "deflated", oid }); + } + return oid; +} +function posixifyPathBuffer(buffer2) { + let idx; + while (~(idx = buffer2.indexOf(92))) buffer2[idx] = 47; + return buffer2; +} +async function add({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + filepath, + cache = {}, + force = false, + parallel = true +}) { + try { + assertParameter("fs", _fs); + assertParameter("dir", dir); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + const fs = new FileSystem(_fs); + await GitIndexManager.acquire({ fs, gitdir, cache }, async (index2) => { + return addToIndex({ + dir, + gitdir, + fs, + filepath, + index: index2, + force, + parallel + }); + }); + } catch (err) { + err.caller = "git.add"; + throw err; + } +} +async function addToIndex({ + dir, + gitdir, + fs, + filepath, + index: index2, + force, + parallel +}) { + filepath = Array.isArray(filepath) ? filepath : [filepath]; + const promises = filepath.map(async (currentFilepath) => { + if (!force) { + const ignored = await GitIgnoreManager.isIgnored({ + fs, + dir, + gitdir, + filepath: currentFilepath + }); + if (ignored) return; + } + const stats = await fs.lstat(join(dir, currentFilepath)); + if (!stats) throw new NotFoundError(currentFilepath); + if (stats.isDirectory()) { + const children2 = await fs.readdir(join(dir, currentFilepath)); + if (parallel) { + const promises2 = children2.map( + (child) => addToIndex({ + dir, + gitdir, + fs, + filepath: [join(currentFilepath, child)], + index: index2, + force, + parallel + }) + ); + await Promise.all(promises2); + } else { + for (const child of children2) { + await addToIndex({ + dir, + gitdir, + fs, + filepath: [join(currentFilepath, child)], + index: index2, + force, + parallel + }); + } + } + } else { + const config = await GitConfigManager.get({ fs, gitdir }); + const autocrlf = await config.get("core.autocrlf"); + const object = stats.isSymbolicLink() ? await fs.readlink(join(dir, currentFilepath)).then(posixifyPathBuffer) : await fs.read(join(dir, currentFilepath), { autocrlf }); + if (object === null) throw new NotFoundError(currentFilepath); + const oid = await _writeObject({ fs, gitdir, type: "blob", object }); + index2.insert({ filepath: currentFilepath, stats, oid }); + } + }); + const settledPromises = await Promise.allSettled(promises); + const rejectedPromises = settledPromises.filter((settle) => settle.status === "rejected").map((settle) => settle.reason); + if (rejectedPromises.length > 1) { + throw new MultipleGitError(rejectedPromises); + } + if (rejectedPromises.length === 1) { + throw rejectedPromises[0]; + } + const fulfilledPromises = settledPromises.filter((settle) => settle.status === "fulfilled" && settle.value).map((settle) => settle.value); + return fulfilledPromises; +} +async function _getConfig({ fs, gitdir, path: path2 }) { + const config = await GitConfigManager.get({ fs, gitdir }); + return config.get(path2); +} +function assignDefined(target, ...sources) { + for (const source of sources) { + if (source) { + for (const key2 of Object.keys(source)) { + const val = source[key2]; + if (val !== void 0) { + target[key2] = val; + } + } + } + } + return target; +} +async function normalizeAuthorObject({ fs, gitdir, author, commit: commit2 }) { + const timestamp = Math.floor(Date.now() / 1e3); + const defaultAuthor = { + name: await _getConfig({ fs, gitdir, path: "user.name" }), + email: await _getConfig({ fs, gitdir, path: "user.email" }) || "", + // author.email is allowed to be empty string + timestamp, + timezoneOffset: new Date(timestamp * 1e3).getTimezoneOffset() + }; + const normalizedAuthor = assignDefined( + {}, + defaultAuthor, + commit2 ? commit2.author : void 0, + author + ); + if (normalizedAuthor.name === void 0) { + return void 0; + } + return normalizedAuthor; +} +async function normalizeCommitterObject({ + fs, + gitdir, + author, + committer, + commit: commit2 +}) { + const timestamp = Math.floor(Date.now() / 1e3); + const defaultCommitter = { + name: await _getConfig({ fs, gitdir, path: "user.name" }), + email: await _getConfig({ fs, gitdir, path: "user.email" }) || "", + // committer.email is allowed to be empty string + timestamp, + timezoneOffset: new Date(timestamp * 1e3).getTimezoneOffset() + }; + const normalizedCommitter = assignDefined( + {}, + defaultCommitter, + commit2 ? commit2.committer : void 0, + author, + committer + ); + if (normalizedCommitter.name === void 0) { + return void 0; + } + return normalizedCommitter; +} +async function resolveCommit({ fs, cache, gitdir, oid }) { + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type === "tag") { + oid = GitAnnotatedTag.from(object).parse().object; + return resolveCommit({ fs, cache, gitdir, oid }); + } + if (type !== "commit") { + throw new ObjectTypeError(oid, type, "commit"); + } + return { commit: GitCommit.from(object), oid }; +} +async function _readCommit({ fs, cache, gitdir, oid }) { + const { commit: commit2, oid: commitOid } = await resolveCommit({ + fs, + cache, + gitdir, + oid + }); + const result = { + oid: commitOid, + commit: commit2.parse(), + payload: commit2.withoutSignature() + }; + return result; +} +async function _commit({ + fs, + cache, + onSign, + gitdir, + message, + author: _author, + committer: _committer, + signingKey, + amend = false, + dryRun = false, + noUpdateBranch = false, + ref, + parent, + tree +}) { + let initialCommit = false; + if (!ref) { + ref = await GitRefManager.resolve({ + fs, + gitdir, + ref: "HEAD", + depth: 2 + }); + } + let refOid, refCommit; + try { + refOid = await GitRefManager.resolve({ + fs, + gitdir, + ref + }); + refCommit = await _readCommit({ fs, gitdir, oid: refOid, cache: {} }); + } catch (e) { + initialCommit = true; + } + if (amend && initialCommit) { + throw new NoCommitError(ref); + } + const author = !amend ? await normalizeAuthorObject({ fs, gitdir, author: _author }) : await normalizeAuthorObject({ + fs, + gitdir, + author: _author, + commit: refCommit.commit + }); + if (!author) throw new MissingNameError("author"); + const committer = !amend ? await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer + }) : await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer, + commit: refCommit.commit + }); + if (!committer) throw new MissingNameError("committer"); + return GitIndexManager.acquire( + { fs, gitdir, cache, allowUnmerged: false }, + async function(index2) { + const inodes = flatFileListToDirectoryStructure(index2.entries); + const inode = inodes.get("."); + if (!tree) { + tree = await constructTree({ fs, gitdir, inode, dryRun }); + } + if (!parent) { + if (!amend) { + parent = refOid ? [refOid] : []; + } else { + parent = refCommit.commit.parent; + } + } else { + parent = await Promise.all( + parent.map((p) => { + return GitRefManager.resolve({ fs, gitdir, ref: p }); + }) + ); + } + if (!message) { + if (!amend) { + throw new MissingParameterError("message"); + } else { + message = refCommit.commit.message; + } + } + let comm = GitCommit.from({ + tree, + parent, + author, + committer, + message + }); + if (signingKey) { + comm = await GitCommit.sign(comm, onSign, signingKey); + } + const oid = await _writeObject({ + fs, + gitdir, + type: "commit", + object: comm.toObject(), + dryRun + }); + if (!noUpdateBranch && !dryRun) { + await GitRefManager.writeRef({ + fs, + gitdir, + ref, + value: oid + }); + } + return oid; + } + ); +} +async function constructTree({ fs, gitdir, inode, dryRun }) { + const children2 = inode.children; + for (const inode2 of children2) { + if (inode2.type === "tree") { + inode2.metadata.mode = "040000"; + inode2.metadata.oid = await constructTree({ fs, gitdir, inode: inode2, dryRun }); + } + } + const entries = children2.map((inode2) => ({ + mode: inode2.metadata.mode, + path: inode2.basename, + oid: inode2.metadata.oid, + type: inode2.type + })); + const tree = GitTree.from(entries); + const oid = await _writeObject({ + fs, + gitdir, + type: "tree", + object: tree.toObject(), + dryRun + }); + return oid; +} +async function resolveFilepath({ fs, cache, gitdir, oid, filepath }) { + if (filepath.startsWith("/")) { + throw new InvalidFilepathError("leading-slash"); + } else if (filepath.endsWith("/")) { + throw new InvalidFilepathError("trailing-slash"); + } + const _oid = oid; + const result = await resolveTree({ fs, cache, gitdir, oid }); + const tree = result.tree; + if (filepath === "") { + oid = result.oid; + } else { + const pathArray = filepath.split("/"); + oid = await _resolveFilepath({ + fs, + cache, + gitdir, + tree, + pathArray, + oid: _oid, + filepath + }); + } + return oid; +} +async function _resolveFilepath({ + fs, + cache, + gitdir, + tree, + pathArray, + oid, + filepath +}) { + const name = pathArray.shift(); + for (const entry of tree) { + if (entry.path === name) { + if (pathArray.length === 0) { + return entry.oid; + } else { + const { type, object } = await _readObject({ + fs, + cache, + gitdir, + oid: entry.oid + }); + if (type !== "tree") { + throw new ObjectTypeError(oid, type, "tree", filepath); + } + tree = GitTree.from(object); + return _resolveFilepath({ + fs, + cache, + gitdir, + tree, + pathArray, + oid, + filepath + }); + } + } + } + throw new NotFoundError(`file or directory found at "${oid}:${filepath}"`); +} +async function _readTree({ + fs, + cache, + gitdir, + oid, + filepath = void 0 +}) { + if (filepath !== void 0) { + oid = await resolveFilepath({ fs, cache, gitdir, oid, filepath }); + } + const { tree, oid: treeOid } = await resolveTree({ fs, cache, gitdir, oid }); + const result = { + oid: treeOid, + tree: tree.entries() + }; + return result; +} +async function _writeTree({ fs, gitdir, tree }) { + const object = GitTree.from(tree).toObject(); + const oid = await _writeObject({ + fs, + gitdir, + type: "tree", + object, + format: "content" + }); + return oid; +} +async function _addNote({ + fs, + cache, + onSign, + gitdir, + ref, + oid, + note, + force, + author, + committer, + signingKey +}) { + let parent; + try { + parent = await GitRefManager.resolve({ gitdir, fs, ref }); + } catch (err) { + if (!(err instanceof NotFoundError)) { + throw err; + } + } + const result = await _readTree({ + fs, + cache, + gitdir, + oid: parent || "4b825dc642cb6eb9a060e54bf8d69288fbee4904" + }); + let tree = result.tree; + if (force) { + tree = tree.filter((entry) => entry.path !== oid); + } else { + for (const entry of tree) { + if (entry.path === oid) { + throw new AlreadyExistsError("note", oid); + } + } + } + if (typeof note === "string") { + note = Buffer.from(note, "utf8"); + } + const noteOid = await _writeObject({ + fs, + gitdir, + type: "blob", + object: note, + format: "content" + }); + tree.push({ mode: "100644", path: oid, oid: noteOid, type: "blob" }); + const treeOid = await _writeTree({ + fs, + gitdir, + tree + }); + const commitOid = await _commit({ + fs, + cache, + onSign, + gitdir, + ref, + tree: treeOid, + parent: parent && [parent], + message: `Note added by 'isomorphic-git addNote' +`, + author, + committer, + signingKey + }); + return commitOid; +} +async function addNote({ + fs: _fs, + onSign, + dir, + gitdir = join(dir, ".git"), + ref = "refs/notes/commits", + oid, + note, + force, + author: _author, + committer: _committer, + signingKey, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + assertParameter("note", note); + if (signingKey) { + assertParameter("onSign", onSign); + } + const fs = new FileSystem(_fs); + const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); + if (!author) throw new MissingNameError("author"); + const committer = await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer + }); + if (!committer) throw new MissingNameError("committer"); + return await _addNote({ + fs: new FileSystem(fs), + cache, + onSign, + gitdir, + ref, + oid, + note, + force, + author, + committer, + signingKey + }); + } catch (err) { + err.caller = "git.addNote"; + throw err; + } +} +async function _addRemote({ fs, gitdir, remote, url, force }) { + if (remote !== import_clean_git_ref.default.clean(remote)) { + throw new InvalidRefNameError(remote, import_clean_git_ref.default.clean(remote)); + } + const config = await GitConfigManager.get({ fs, gitdir }); + if (!force) { + const remoteNames = await config.getSubsections("remote"); + if (remoteNames.includes(remote)) { + if (url !== await config.get(`remote.${remote}.url`)) { + throw new AlreadyExistsError("remote", remote); + } + } + } + await config.set(`remote.${remote}.url`, url); + await config.set( + `remote.${remote}.fetch`, + `+refs/heads/*:refs/remotes/${remote}/*` + ); + await GitConfigManager.save({ fs, gitdir, config }); +} +async function addRemote({ + fs, + dir, + gitdir = join(dir, ".git"), + remote, + url, + force = false +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("remote", remote); + assertParameter("url", url); + return await _addRemote({ + fs: new FileSystem(fs), + gitdir, + remote, + url, + force + }); + } catch (err) { + err.caller = "git.addRemote"; + throw err; + } +} +async function _annotatedTag({ + fs, + cache, + onSign, + gitdir, + ref, + tagger, + message = ref, + gpgsig, + object, + signingKey, + force = false +}) { + ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; + if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { + throw new AlreadyExistsError("tag", ref); + } + const oid = await GitRefManager.resolve({ + fs, + gitdir, + ref: object || "HEAD" + }); + const { type } = await _readObject({ fs, cache, gitdir, oid }); + let tagObject = GitAnnotatedTag.from({ + object: oid, + type, + tag: ref.replace("refs/tags/", ""), + tagger, + message, + gpgsig + }); + if (signingKey) { + tagObject = await GitAnnotatedTag.sign(tagObject, onSign, signingKey); + } + const value = await _writeObject({ + fs, + gitdir, + type: "tag", + object: tagObject.toObject() + }); + await GitRefManager.writeRef({ fs, gitdir, ref, value }); +} +async function annotatedTag({ + fs: _fs, + onSign, + dir, + gitdir = join(dir, ".git"), + ref, + tagger: _tagger, + message = ref, + gpgsig, + object, + signingKey, + force = false, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + if (signingKey) { + assertParameter("onSign", onSign); + } + const fs = new FileSystem(_fs); + const tagger = await normalizeAuthorObject({ fs, gitdir, author: _tagger }); + if (!tagger) throw new MissingNameError("tagger"); + return await _annotatedTag({ + fs, + cache, + onSign, + gitdir, + ref, + tagger, + message, + gpgsig, + object, + signingKey, + force + }); + } catch (err) { + err.caller = "git.annotatedTag"; + throw err; + } +} +async function _branch({ + fs, + gitdir, + ref, + object, + checkout: checkout2 = false, + force = false +}) { + if (ref !== import_clean_git_ref.default.clean(ref)) { + throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); + } + const fullref = `refs/heads/${ref}`; + if (!force) { + const exist = await GitRefManager.exists({ fs, gitdir, ref: fullref }); + if (exist) { + throw new AlreadyExistsError("branch", ref, false); + } + } + let oid; + try { + oid = await GitRefManager.resolve({ fs, gitdir, ref: object || "HEAD" }); + } catch (e) { + } + if (oid) { + await GitRefManager.writeRef({ fs, gitdir, ref: fullref, value: oid }); + } + if (checkout2) { + await GitRefManager.writeSymbolicRef({ + fs, + gitdir, + ref: "HEAD", + value: fullref + }); + } +} +async function branch({ + fs, + dir, + gitdir = join(dir, ".git"), + ref, + object, + checkout: checkout2 = false, + force = false +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + return await _branch({ + fs: new FileSystem(fs), + gitdir, + ref, + object, + checkout: checkout2, + force + }); + } catch (err) { + err.caller = "git.branch"; + throw err; + } +} +var worthWalking = (filepath, root2) => { + if (filepath === "." || root2 == null || root2.length === 0 || root2 === ".") { + return true; + } + if (root2.length >= filepath.length) { + return root2.startsWith(filepath); + } else { + return filepath.startsWith(root2); + } +}; +async function _checkout({ + fs, + cache, + onProgress, + onPostCheckout, + dir, + gitdir, + remote, + ref, + filepaths, + noCheckout, + noUpdateHead, + dryRun, + force, + track = true +}) { + let oldOid; + if (onPostCheckout) { + try { + oldOid = await GitRefManager.resolve({ fs, gitdir, ref: "HEAD" }); + } catch (err) { + oldOid = "0000000000000000000000000000000000000000"; + } + } + let oid; + try { + oid = await GitRefManager.resolve({ fs, gitdir, ref }); + } catch (err) { + if (ref === "HEAD") throw err; + const remoteRef = `${remote}/${ref}`; + oid = await GitRefManager.resolve({ + fs, + gitdir, + ref: remoteRef + }); + if (track) { + const config = await GitConfigManager.get({ fs, gitdir }); + await config.set(`branch.${ref}.remote`, remote); + await config.set(`branch.${ref}.merge`, `refs/heads/${ref}`); + await GitConfigManager.save({ fs, gitdir, config }); + } + await GitRefManager.writeRef({ + fs, + gitdir, + ref: `refs/heads/${ref}`, + value: oid + }); + } + if (!noCheckout) { + let ops; + try { + ops = await analyze({ + fs, + cache, + onProgress, + dir, + gitdir, + ref, + force, + filepaths + }); + } catch (err) { + if (err instanceof NotFoundError && err.data.what === oid) { + throw new CommitNotFetchedError(ref, oid); + } else { + throw err; + } + } + const conflicts2 = ops.filter(([method2]) => method2 === "conflict").map(([method2, fullpath]) => fullpath); + if (conflicts2.length > 0) { + throw new CheckoutConflictError(conflicts2); + } + const errors = ops.filter(([method2]) => method2 === "error").map(([method2, fullpath]) => fullpath); + if (errors.length > 0) { + throw new InternalError(errors.join(", ")); + } + if (dryRun) { + if (onPostCheckout) { + await onPostCheckout({ + previousHead: oldOid, + newHead: oid, + type: filepaths != null && filepaths.length > 0 ? "file" : "branch" + }); + } + return; + } + let count = 0; + const total = ops.length; + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + await Promise.all( + ops.filter( + ([method2]) => method2 === "delete" || method2 === "delete-index" + ).map(async function([method2, fullpath]) { + const filepath = `${dir}/${fullpath}`; + if (method2 === "delete") { + await fs.rm(filepath); + } + index2.delete({ filepath: fullpath }); + if (onProgress) { + await onProgress({ + phase: "Updating workdir", + loaded: ++count, + total + }); + } + }) + ); + }); + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + for (const [method2, fullpath] of ops) { + if (method2 === "rmdir" || method2 === "rmdir-index") { + const filepath = `${dir}/${fullpath}`; + try { + if (method2 === "rmdir-index") { + index2.delete({ filepath: fullpath }); + } + await fs.rmdir(filepath); + if (onProgress) { + await onProgress({ + phase: "Updating workdir", + loaded: ++count, + total + }); + } + } catch (e) { + if (e.code === "ENOTEMPTY") { + console.log( + `Did not delete ${fullpath} because directory is not empty` + ); + } else { + throw e; + } + } + } + } + }); + await Promise.all( + ops.filter(([method2]) => method2 === "mkdir" || method2 === "mkdir-index").map(async function([_, fullpath]) { + const filepath = `${dir}/${fullpath}`; + await fs.mkdir(filepath); + if (onProgress) { + await onProgress({ + phase: "Updating workdir", + loaded: ++count, + total + }); + } + }) + ); + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + await Promise.all( + ops.filter( + ([method2]) => method2 === "create" || method2 === "create-index" || method2 === "update" || method2 === "mkdir-index" + ).map(async function([method2, fullpath, oid2, mode, chmod]) { + const filepath = `${dir}/${fullpath}`; + try { + if (method2 !== "create-index" && method2 !== "mkdir-index") { + const { object } = await _readObject({ fs, cache, gitdir, oid: oid2 }); + if (chmod) { + await fs.rm(filepath); + } + if (mode === 33188) { + await fs.write(filepath, object); + } else if (mode === 33261) { + await fs.write(filepath, object, { mode: 511 }); + } else if (mode === 40960) { + await fs.writelink(filepath, object); + } else { + throw new InternalError( + `Invalid mode 0o${mode.toString(8)} detected in blob ${oid2}` + ); + } + } + const stats = await fs.lstat(filepath); + if (mode === 33261) { + stats.mode = 493; + } + if (method2 === "mkdir-index") { + stats.mode = 57344; + } + index2.insert({ + filepath: fullpath, + stats, + oid: oid2 + }); + if (onProgress) { + await onProgress({ + phase: "Updating workdir", + loaded: ++count, + total + }); + } + } catch (e) { + console.log(e); + } + }) + ); + }); + if (onPostCheckout) { + await onPostCheckout({ + previousHead: oldOid, + newHead: oid, + type: filepaths != null && filepaths.length > 0 ? "file" : "branch" + }); + } + } + if (!noUpdateHead) { + const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); + if (fullRef.startsWith("refs/heads")) { + await GitRefManager.writeSymbolicRef({ + fs, + gitdir, + ref: "HEAD", + value: fullRef + }); + } else { + await GitRefManager.writeRef({ fs, gitdir, ref: "HEAD", value: oid }); + } + } +} +async function analyze({ + fs, + cache, + onProgress, + dir, + gitdir, + ref, + force, + filepaths +}) { + let count = 0; + return _walk({ + fs, + cache, + dir, + gitdir, + trees: [TREE({ ref }), WORKDIR(), STAGE()], + map: async function(fullpath, [commit2, workdir, stage]) { + if (fullpath === ".") return; + if (filepaths && !filepaths.some((base) => worthWalking(fullpath, base))) { + return null; + } + if (onProgress) { + await onProgress({ phase: "Analyzing workdir", loaded: ++count }); + } + const key2 = [!!stage, !!commit2, !!workdir].map(Number).join(""); + switch (key2) { + case "000": + return; + case "001": + if (force && filepaths && filepaths.includes(fullpath)) { + return ["delete", fullpath]; + } + return; + case "010": { + switch (await commit2.type()) { + case "tree": { + return ["mkdir", fullpath]; + } + case "blob": { + return [ + "create", + fullpath, + await commit2.oid(), + await commit2.mode() + ]; + } + case "commit": { + return [ + "mkdir-index", + fullpath, + await commit2.oid(), + await commit2.mode() + ]; + } + default: { + return [ + "error", + `new entry Unhandled type ${await commit2.type()}` + ]; + } + } + } + case "011": { + switch (`${await commit2.type()}-${await workdir.type()}`) { + case "tree-tree": { + return; + } + case "tree-blob": + case "blob-tree": { + return ["conflict", fullpath]; + } + case "blob-blob": { + if (await commit2.oid() !== await workdir.oid()) { + if (force) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + await commit2.mode() !== await workdir.mode() + ]; + } else { + return ["conflict", fullpath]; + } + } else { + if (await commit2.mode() !== await workdir.mode()) { + if (force) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + true + ]; + } else { + return ["conflict", fullpath]; + } + } else { + return [ + "create-index", + fullpath, + await commit2.oid(), + await commit2.mode() + ]; + } + } + } + case "commit-tree": { + return; + } + case "commit-blob": { + return ["conflict", fullpath]; + } + default: { + return ["error", `new entry Unhandled type ${commit2.type}`]; + } + } + } + case "100": { + return ["delete-index", fullpath]; + } + case "101": { + switch (await stage.type()) { + case "tree": { + return ["rmdir", fullpath]; + } + case "blob": { + if (await stage.oid() !== await workdir.oid()) { + if (force) { + return ["delete", fullpath]; + } else { + return ["conflict", fullpath]; + } + } else { + return ["delete", fullpath]; + } + } + case "commit": { + return ["rmdir-index", fullpath]; + } + default: { + return [ + "error", + `delete entry Unhandled type ${await stage.type()}` + ]; + } + } + } + case "110": + case "111": { + switch (`${await stage.type()}-${await commit2.type()}`) { + case "tree-tree": { + return; + } + case "blob-blob": { + if (await stage.oid() === await commit2.oid() && await stage.mode() === await commit2.mode() && !force) { + return; + } + if (workdir) { + if (await workdir.oid() !== await stage.oid() && await workdir.oid() !== await commit2.oid()) { + if (force) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + await commit2.mode() !== await workdir.mode() + ]; + } else { + return ["conflict", fullpath]; + } + } + } else if (force) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + await commit2.mode() !== await stage.mode() + ]; + } + if (await commit2.mode() !== await stage.mode()) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + true + ]; + } + if (await commit2.oid() !== await stage.oid()) { + return [ + "update", + fullpath, + await commit2.oid(), + await commit2.mode(), + false + ]; + } else { + return; + } + } + case "tree-blob": { + return ["update-dir-to-blob", fullpath, await commit2.oid()]; + } + case "blob-tree": { + return ["update-blob-to-tree", fullpath]; + } + case "commit-commit": { + return [ + "mkdir-index", + fullpath, + await commit2.oid(), + await commit2.mode() + ]; + } + default: { + return [ + "error", + `update entry Unhandled type ${await stage.type()}-${await commit2.type()}` + ]; + } + } + } + } + }, + // Modify the default flat mapping + reduce: async function(parent, children2) { + children2 = flat(children2); + if (!parent) { + return children2; + } else if (parent && parent[0] === "rmdir") { + children2.push(parent); + return children2; + } else { + children2.unshift(parent); + return children2; + } + } + }); +} +async function checkout({ + fs, + onProgress, + onPostCheckout, + dir, + gitdir = join(dir, ".git"), + remote = "origin", + ref: _ref, + filepaths, + noCheckout = false, + noUpdateHead = _ref === void 0, + dryRun = false, + force = false, + track = true, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("dir", dir); + assertParameter("gitdir", gitdir); + const ref = _ref || "HEAD"; + return await _checkout({ + fs: new FileSystem(fs), + cache, + onProgress, + onPostCheckout, + dir, + gitdir, + remote, + ref, + filepaths, + noCheckout, + noUpdateHead, + dryRun, + force, + track + }); + } catch (err) { + err.caller = "git.checkout"; + throw err; + } +} +var abbreviateRx = new RegExp("^refs/(heads/|tags/|remotes/)?(.*)"); +function abbreviateRef(ref) { + const match = abbreviateRx.exec(ref); + if (match) { + if (match[1] === "remotes/" && ref.endsWith("/HEAD")) { + return match[2].slice(0, -5); + } else { + return match[2]; + } + } + return ref; +} +async function _currentBranch({ + fs, + gitdir, + fullname = false, + test = false +}) { + const ref = await GitRefManager.resolve({ + fs, + gitdir, + ref: "HEAD", + depth: 2 + }); + if (test) { + try { + await GitRefManager.resolve({ fs, gitdir, ref }); + } catch (_) { + return; + } + } + if (!ref.startsWith("refs/")) return; + return fullname ? ref : abbreviateRef(ref); +} +function translateSSHtoHTTP(url) { + url = url.replace(/^git@([^:]+):/, "https://$1/"); + url = url.replace(/^ssh:\/\//, "https://"); + return url; +} +function calculateBasicAuthHeader({ username = "", password = "" }) { + return `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`; +} +async function forAwait(iterable, cb) { + const iter = getIterator(iterable); + while (true) { + const { value, done } = await iter.next(); + if (value) await cb(value); + if (done) break; + } + if (iter.return) iter.return(); +} +async function collect(iterable) { + let size = 0; + const buffers = []; + await forAwait(iterable, (value) => { + buffers.push(value); + size += value.byteLength; + }); + const result = new Uint8Array(size); + let nextIndex = 0; + for (const buffer2 of buffers) { + result.set(buffer2, nextIndex); + nextIndex += buffer2.byteLength; + } + return result; +} +function extractAuthFromUrl(url) { + let userpass = url.match(/^https?:\/\/([^/]+)@/); + if (userpass == null) return { url, auth: {} }; + userpass = userpass[1]; + const [username, password] = userpass.split(":"); + url = url.replace(`${userpass}@`, ""); + return { url, auth: { username, password } }; +} +function padHex(b, n) { + const s = n.toString(16); + return "0".repeat(b - s.length) + s; +} +var GitPktLine = class { + static flush() { + return Buffer.from("0000", "utf8"); + } + static delim() { + return Buffer.from("0001", "utf8"); + } + static encode(line) { + if (typeof line === "string") { + line = Buffer.from(line); + } + const length = line.length + 4; + const hexlength = padHex(4, length); + return Buffer.concat([Buffer.from(hexlength, "utf8"), line]); + } + static streamReader(stream) { + const reader = new StreamReader(stream); + return async function read() { + try { + let length = await reader.read(4); + if (length == null) return true; + length = parseInt(length.toString("utf8"), 16); + if (length === 0) return null; + if (length === 1) return null; + const buffer2 = await reader.read(length - 4); + if (buffer2 == null) return true; + return buffer2; + } catch (err) { + stream.error = err; + return true; + } + }; + } +}; +async function parseCapabilitiesV2(read) { + const capabilities2 = {}; + let line; + while (true) { + line = await read(); + if (line === true) break; + if (line === null) continue; + line = line.toString("utf8").replace(/\n$/, ""); + const i = line.indexOf("="); + if (i > -1) { + const key2 = line.slice(0, i); + const value = line.slice(i + 1); + capabilities2[key2] = value; + } else { + capabilities2[line] = true; + } + } + return { protocolVersion: 2, capabilities2 }; +} +async function parseRefsAdResponse(stream, { service }) { + const capabilities = /* @__PURE__ */ new Set(); + const refs = /* @__PURE__ */ new Map(); + const symrefs = /* @__PURE__ */ new Map(); + const read = GitPktLine.streamReader(stream); + let lineOne = await read(); + while (lineOne === null) lineOne = await read(); + if (lineOne === true) throw new EmptyServerResponseError(); + if (lineOne.includes("version 2")) { + return parseCapabilitiesV2(read); + } + if (lineOne.toString("utf8").replace(/\n$/, "") !== `# service=${service}`) { + throw new ParseError(`# service=${service}\\n`, lineOne.toString("utf8")); + } + let lineTwo = await read(); + while (lineTwo === null) lineTwo = await read(); + if (lineTwo === true) return { capabilities, refs, symrefs }; + lineTwo = lineTwo.toString("utf8"); + if (lineTwo.includes("version 2")) { + return parseCapabilitiesV2(read); + } + const [firstRef, capabilitiesLine] = splitAndAssert(lineTwo, "\0", "\\x00"); + capabilitiesLine.split(" ").map((x) => capabilities.add(x)); + if (firstRef !== "0000000000000000000000000000000000000000 capabilities^{}") { + const [ref, name] = splitAndAssert(firstRef, " ", " "); + refs.set(name, ref); + while (true) { + const line = await read(); + if (line === true) break; + if (line !== null) { + const [ref2, name2] = splitAndAssert(line.toString("utf8"), " ", " "); + refs.set(name2, ref2); + } + } + } + for (const cap of capabilities) { + if (cap.startsWith("symref=")) { + const m = cap.match(/symref=([^:]+):(.*)/); + if (m.length === 3) { + symrefs.set(m[1], m[2]); + } + } + } + return { protocolVersion: 1, capabilities, refs, symrefs }; +} +function splitAndAssert(line, sep2, expected) { + const split = line.trim().split(sep2); + if (split.length !== 2) { + throw new ParseError( + `Two strings separated by '${expected}'`, + line.toString("utf8") + ); + } + return split; +} +var corsProxify = (corsProxy, url) => corsProxy.endsWith("?") ? `${corsProxy}${url}` : `${corsProxy}/${url.replace(/^https?:\/\//, "")}`; +var updateHeaders = (headers, auth) => { + if (auth.username || auth.password) { + headers.Authorization = calculateBasicAuthHeader(auth); + } + if (auth.headers) { + Object.assign(headers, auth.headers); + } +}; +var stringifyBody = async (res) => { + try { + const data = Buffer.from(await collect(res.body)); + const response = data.toString("utf8"); + const preview = response.length < 256 ? response : response.slice(0, 256) + "..."; + return { preview, response, data }; + } catch (e) { + return {}; + } +}; +var GitRemoteHTTP = class { + static async capabilities() { + return ["discover", "connect"]; + } + /** + * @param {Object} args + * @param {HttpClient} args.http + * @param {ProgressCallback} [args.onProgress] + * @param {AuthCallback} [args.onAuth] + * @param {AuthFailureCallback} [args.onAuthFailure] + * @param {AuthSuccessCallback} [args.onAuthSuccess] + * @param {string} [args.corsProxy] + * @param {string} args.service + * @param {string} args.url + * @param {Object} args.headers + * @param {1 | 2} args.protocolVersion - Git Protocol Version + */ + static async discover({ + http, + onProgress, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service, + url: _origUrl, + headers, + protocolVersion + }) { + let { url, auth } = extractAuthFromUrl(_origUrl); + const proxifiedURL = corsProxy ? corsProxify(corsProxy, url) : url; + if (auth.username || auth.password) { + headers.Authorization = calculateBasicAuthHeader(auth); + } + if (protocolVersion === 2) { + headers["Git-Protocol"] = "version=2"; + } + let res; + let tryAgain; + let providedAuthBefore = false; + do { + res = await http.request({ + onProgress, + method: "GET", + url: `${proxifiedURL}/info/refs?service=${service}`, + headers + }); + tryAgain = false; + if (res.statusCode === 401 || res.statusCode === 203) { + const getAuth = providedAuthBefore ? onAuthFailure : onAuth; + if (getAuth) { + auth = await getAuth(url, { + ...auth, + headers: { ...headers } + }); + if (auth && auth.cancel) { + throw new UserCanceledError(); + } else if (auth) { + updateHeaders(headers, auth); + providedAuthBefore = true; + tryAgain = true; + } + } + } else if (res.statusCode === 200 && providedAuthBefore && onAuthSuccess) { + await onAuthSuccess(url, auth); + } + } while (tryAgain); + if (res.statusCode !== 200) { + const { response } = await stringifyBody(res); + throw new HttpError(res.statusCode, res.statusMessage, response); + } + if (res.headers["content-type"] === `application/x-${service}-advertisement`) { + const remoteHTTP = await parseRefsAdResponse(res.body, { service }); + remoteHTTP.auth = auth; + return remoteHTTP; + } else { + const { preview, response, data } = await stringifyBody(res); + try { + const remoteHTTP = await parseRefsAdResponse([data], { service }); + remoteHTTP.auth = auth; + return remoteHTTP; + } catch (e) { + throw new SmartHttpError(preview, response); + } + } + } + /** + * @param {Object} args + * @param {HttpClient} args.http + * @param {ProgressCallback} [args.onProgress] + * @param {string} [args.corsProxy] + * @param {string} args.service + * @param {string} args.url + * @param {Object} [args.headers] + * @param {any} args.body + * @param {any} args.auth + */ + static async connect({ + http, + onProgress, + corsProxy, + service, + url, + auth, + body, + headers + }) { + const urlAuth = extractAuthFromUrl(url); + if (urlAuth) url = urlAuth.url; + if (corsProxy) url = corsProxify(corsProxy, url); + headers["content-type"] = `application/x-${service}-request`; + headers.accept = `application/x-${service}-result`; + updateHeaders(headers, auth); + const res = await http.request({ + onProgress, + method: "POST", + url: `${url}/${service}`, + body, + headers + }); + if (res.statusCode !== 200) { + const { response } = stringifyBody(res); + throw new HttpError(res.statusCode, res.statusMessage, response); + } + return res; + } +}; +function parseRemoteUrl({ url }) { + if (url.startsWith("git@")) { + return { + transport: "ssh", + address: url + }; + } + const matches = url.match(/(\w+)(:\/\/|::)(.*)/); + if (matches === null) return; + if (matches[2] === "://") { + return { + transport: matches[1], + address: matches[0] + }; + } + if (matches[2] === "::") { + return { + transport: matches[1], + address: matches[3] + }; + } +} +var GitRemoteManager = class { + static getRemoteHelperFor({ url }) { + const remoteHelpers = /* @__PURE__ */ new Map(); + remoteHelpers.set("http", GitRemoteHTTP); + remoteHelpers.set("https", GitRemoteHTTP); + const parts = parseRemoteUrl({ url }); + if (!parts) { + throw new UrlParseError(url); + } + if (remoteHelpers.has(parts.transport)) { + return remoteHelpers.get(parts.transport); + } + throw new UnknownTransportError( + url, + parts.transport, + parts.transport === "ssh" ? translateSSHtoHTTP(url) : void 0 + ); + } +}; +var lock$2 = null; +var GitShallowManager = class { + static async read({ fs, gitdir }) { + if (lock$2 === null) lock$2 = new import_async_lock.default(); + const filepath = join(gitdir, "shallow"); + const oids = /* @__PURE__ */ new Set(); + await lock$2.acquire(filepath, async function() { + const text2 = await fs.read(filepath, { encoding: "utf8" }); + if (text2 === null) return oids; + if (text2.trim() === "") return oids; + text2.trim().split("\n").map((oid) => oids.add(oid)); + }); + return oids; + } + static async write({ fs, gitdir, oids }) { + if (lock$2 === null) lock$2 = new import_async_lock.default(); + const filepath = join(gitdir, "shallow"); + if (oids.size > 0) { + const text2 = [...oids].join("\n") + "\n"; + await lock$2.acquire(filepath, async function() { + await fs.write(filepath, text2, { + encoding: "utf8" + }); + }); + } else { + await lock$2.acquire(filepath, async function() { + await fs.rm(filepath); + }); + } + } +}; +async function hasObjectLoose({ fs, gitdir, oid }) { + const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; + return fs.exists(`${gitdir}/${source}`); +} +async function hasObjectPacked({ + fs, + cache, + gitdir, + oid, + getExternalRefDelta +}) { + let list = await fs.readdir(join(gitdir, "objects/pack")); + list = list.filter((x) => x.endsWith(".idx")); + for (const filename of list) { + const indexFile = `${gitdir}/objects/pack/${filename}`; + const p = await readPackIndex({ + fs, + cache, + filename: indexFile, + getExternalRefDelta + }); + if (p.error) throw new InternalError(p.error); + if (p.offsets.has(oid)) { + return true; + } + } + return false; +} +async function hasObject({ + fs, + cache, + gitdir, + oid, + format = "content" +}) { + const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); + let result = await hasObjectLoose({ fs, gitdir, oid }); + if (!result) { + result = await hasObjectPacked({ + fs, + cache, + gitdir, + oid, + getExternalRefDelta + }); + } + return result; +} +function emptyPackfile(pack) { + const pheader = "5041434b"; + const version2 = "00000002"; + const obCount = "00000000"; + const header = pheader + version2 + obCount; + return pack.slice(0, 12).toString("hex") === header; +} +function filterCapabilities(server, client) { + const serverNames = server.map((cap) => cap.split("=", 1)[0]); + return client.filter((cap) => { + const name = cap.split("=", 1)[0]; + return serverNames.includes(name); + }); +} +var pkg = { + name: "isomorphic-git", + version: "1.27.1", + agent: "git/isomorphic-git@1.27.1" +}; +var FIFO = class { + constructor() { + this._queue = []; + } + write(chunk) { + if (this._ended) { + throw Error("You cannot write to a FIFO that has already been ended!"); + } + if (this._waiting) { + const resolve2 = this._waiting; + this._waiting = null; + resolve2({ value: chunk }); + } else { + this._queue.push(chunk); + } + } + end() { + this._ended = true; + if (this._waiting) { + const resolve2 = this._waiting; + this._waiting = null; + resolve2({ done: true }); + } + } + destroy(err) { + this.error = err; + this.end(); + } + async next() { + if (this._queue.length > 0) { + return { value: this._queue.shift() }; + } + if (this._ended) { + return { done: true }; + } + if (this._waiting) { + throw Error( + "You cannot call read until the previous call to read has returned!" + ); + } + return new Promise((resolve2) => { + this._waiting = resolve2; + }); + } +}; +function findSplit(str) { + const r = str.indexOf("\r"); + const n = str.indexOf("\n"); + if (r === -1 && n === -1) return -1; + if (r === -1) return n + 1; + if (n === -1) return r + 1; + if (n === r + 1) return n + 1; + return Math.min(r, n) + 1; +} +function splitLines(input) { + const output = new FIFO(); + let tmp = ""; + (async () => { + await forAwait(input, (chunk) => { + chunk = chunk.toString("utf8"); + tmp += chunk; + while (true) { + const i = findSplit(tmp); + if (i === -1) break; + output.write(tmp.slice(0, i)); + tmp = tmp.slice(i); + } + }); + if (tmp.length > 0) { + output.write(tmp); + } + output.end(); + })(); + return output; +} +var GitSideBand = class { + static demux(input) { + const read = GitPktLine.streamReader(input); + const packetlines = new FIFO(); + const packfile = new FIFO(); + const progress = new FIFO(); + const nextBit = async function() { + const line = await read(); + if (line === null) return nextBit(); + if (line === true) { + packetlines.end(); + progress.end(); + input.error ? packfile.destroy(input.error) : packfile.end(); + return; + } + switch (line[0]) { + case 1: { + packfile.write(line.slice(1)); + break; + } + case 2: { + progress.write(line.slice(1)); + break; + } + case 3: { + const error = line.slice(1); + progress.write(error); + packetlines.end(); + progress.end(); + packfile.destroy(new Error(error.toString("utf8"))); + return; + } + default: { + packetlines.write(line); + } + } + nextBit(); + }; + nextBit(); + return { + packetlines, + packfile, + progress + }; + } + // static mux ({ + // protocol, // 'side-band' or 'side-band-64k' + // packetlines, + // packfile, + // progress, + // error + // }) { + // const MAX_PACKET_LENGTH = protocol === 'side-band-64k' ? 999 : 65519 + // let output = new PassThrough() + // packetlines.on('data', data => { + // if (data === null) { + // output.write(GitPktLine.flush()) + // } else { + // output.write(GitPktLine.encode(data)) + // } + // }) + // let packfileWasEmpty = true + // let packfileEnded = false + // let progressEnded = false + // let errorEnded = false + // let goodbye = Buffer.concat([ + // GitPktLine.encode(Buffer.from('010A', 'hex')), + // GitPktLine.flush() + // ]) + // packfile + // .on('data', data => { + // packfileWasEmpty = false + // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) + // for (const buffer of buffers) { + // output.write( + // GitPktLine.encode(Buffer.concat([Buffer.from('01', 'hex'), buffer])) + // ) + // } + // }) + // .on('end', () => { + // packfileEnded = true + // if (!packfileWasEmpty) output.write(goodbye) + // if (progressEnded && errorEnded) output.end() + // }) + // progress + // .on('data', data => { + // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) + // for (const buffer of buffers) { + // output.write( + // GitPktLine.encode(Buffer.concat([Buffer.from('02', 'hex'), buffer])) + // ) + // } + // }) + // .on('end', () => { + // progressEnded = true + // if (packfileEnded && errorEnded) output.end() + // }) + // error + // .on('data', data => { + // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) + // for (const buffer of buffers) { + // output.write( + // GitPktLine.encode(Buffer.concat([Buffer.from('03', 'hex'), buffer])) + // ) + // } + // }) + // .on('end', () => { + // errorEnded = true + // if (progressEnded && packfileEnded) output.end() + // }) + // return output + // } +}; +async function parseUploadPackResponse(stream) { + const { packetlines, packfile, progress } = GitSideBand.demux(stream); + const shallows = []; + const unshallows = []; + const acks = []; + let nak = false; + let done = false; + return new Promise((resolve2, reject) => { + forAwait(packetlines, (data) => { + const line = data.toString("utf8").trim(); + if (line.startsWith("shallow")) { + const oid = line.slice(-41).trim(); + if (oid.length !== 40) { + reject(new InvalidOidError(oid)); + } + shallows.push(oid); + } else if (line.startsWith("unshallow")) { + const oid = line.slice(-41).trim(); + if (oid.length !== 40) { + reject(new InvalidOidError(oid)); + } + unshallows.push(oid); + } else if (line.startsWith("ACK")) { + const [, oid, status2] = line.split(" "); + acks.push({ oid, status: status2 }); + if (!status2) done = true; + } else if (line.startsWith("NAK")) { + nak = true; + done = true; + } else { + done = true; + nak = true; + } + if (done) { + stream.error ? reject(stream.error) : resolve2({ shallows, unshallows, acks, nak, packfile, progress }); + } + }).finally(() => { + if (!done) { + stream.error ? reject(stream.error) : resolve2({ shallows, unshallows, acks, nak, packfile, progress }); + } + }); + }); +} +function writeUploadPackRequest({ + capabilities = [], + wants = [], + haves = [], + shallows = [], + depth = null, + since = null, + exclude = [] +}) { + const packstream = []; + wants = [...new Set(wants)]; + let firstLineCapabilities = ` ${capabilities.join(" ")}`; + for (const oid of wants) { + packstream.push(GitPktLine.encode(`want ${oid}${firstLineCapabilities} +`)); + firstLineCapabilities = ""; + } + for (const oid of shallows) { + packstream.push(GitPktLine.encode(`shallow ${oid} +`)); + } + if (depth !== null) { + packstream.push(GitPktLine.encode(`deepen ${depth} +`)); + } + if (since !== null) { + packstream.push( + GitPktLine.encode(`deepen-since ${Math.floor(since.valueOf() / 1e3)} +`) + ); + } + for (const oid of exclude) { + packstream.push(GitPktLine.encode(`deepen-not ${oid} +`)); + } + packstream.push(GitPktLine.flush()); + for (const oid of haves) { + packstream.push(GitPktLine.encode(`have ${oid} +`)); + } + packstream.push(GitPktLine.encode(`done +`)); + return packstream; +} +async function _fetch({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + gitdir, + ref: _ref, + remoteRef: _remoteRef, + remote: _remote, + url: _url, + corsProxy, + depth = null, + since = null, + exclude = [], + relative: relative2 = false, + tags = false, + singleBranch = false, + headers = {}, + prune = false, + pruneTags = false +}) { + const ref = _ref || await _currentBranch({ fs, gitdir, test: true }); + const config = await GitConfigManager.get({ fs, gitdir }); + const remote = _remote || ref && await config.get(`branch.${ref}.remote`) || "origin"; + const url = _url || await config.get(`remote.${remote}.url`); + if (typeof url === "undefined") { + throw new MissingParameterError("remote OR url"); + } + const remoteRef = _remoteRef || ref && await config.get(`branch.${ref}.merge`) || _ref || "HEAD"; + if (corsProxy === void 0) { + corsProxy = await config.get("http.corsProxy"); + } + const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); + const remoteHTTP = await GitRemoteHTTP2.discover({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service: "git-upload-pack", + url, + headers, + protocolVersion: 1 + }); + const auth = remoteHTTP.auth; + const remoteRefs = remoteHTTP.refs; + if (remoteRefs.size === 0) { + return { + defaultBranch: null, + fetchHead: null, + fetchHeadDescription: null + }; + } + if (depth !== null && !remoteHTTP.capabilities.has("shallow")) { + throw new RemoteCapabilityError("shallow", "depth"); + } + if (since !== null && !remoteHTTP.capabilities.has("deepen-since")) { + throw new RemoteCapabilityError("deepen-since", "since"); + } + if (exclude.length > 0 && !remoteHTTP.capabilities.has("deepen-not")) { + throw new RemoteCapabilityError("deepen-not", "exclude"); + } + if (relative2 === true && !remoteHTTP.capabilities.has("deepen-relative")) { + throw new RemoteCapabilityError("deepen-relative", "relative"); + } + const { oid, fullref } = GitRefManager.resolveAgainstMap({ + ref: remoteRef, + map: remoteRefs + }); + for (const remoteRef2 of remoteRefs.keys()) { + if (remoteRef2 === fullref || remoteRef2 === "HEAD" || remoteRef2.startsWith("refs/heads/") || tags && remoteRef2.startsWith("refs/tags/")) { + continue; + } + remoteRefs.delete(remoteRef2); + } + const capabilities = filterCapabilities( + [...remoteHTTP.capabilities], + [ + "multi_ack_detailed", + "no-done", + "side-band-64k", + // Note: I removed 'thin-pack' option since our code doesn't "fatten" packfiles, + // which is necessary for compatibility with git. It was the cause of mysterious + // 'fatal: pack has [x] unresolved deltas' errors that plagued us for some time. + // isomorphic-git is perfectly happy with thin packfiles in .git/objects/pack but + // canonical git it turns out is NOT. + "ofs-delta", + `agent=${pkg.agent}` + ] + ); + if (relative2) capabilities.push("deepen-relative"); + const wants = singleBranch ? [oid] : remoteRefs.values(); + const haveRefs = singleBranch ? [ref] : await GitRefManager.listRefs({ + fs, + gitdir, + filepath: `refs` + }); + let haves = []; + for (let ref2 of haveRefs) { + try { + ref2 = await GitRefManager.expand({ fs, gitdir, ref: ref2 }); + const oid2 = await GitRefManager.resolve({ fs, gitdir, ref: ref2 }); + if (await hasObject({ fs, cache, gitdir, oid: oid2 })) { + haves.push(oid2); + } + } catch (err) { + } + } + haves = [...new Set(haves)]; + const oids = await GitShallowManager.read({ fs, gitdir }); + const shallows = remoteHTTP.capabilities.has("shallow") ? [...oids] : []; + const packstream = writeUploadPackRequest({ + capabilities, + wants, + haves, + shallows, + depth, + since, + exclude + }); + const packbuffer = Buffer.from(await collect(packstream)); + const raw = await GitRemoteHTTP2.connect({ + http, + onProgress, + corsProxy, + service: "git-upload-pack", + url, + auth, + body: [packbuffer], + headers + }); + const response = await parseUploadPackResponse(raw.body); + if (raw.headers) { + response.headers = raw.headers; + } + for (const oid2 of response.shallows) { + if (!oids.has(oid2)) { + try { + const { object } = await _readObject({ fs, cache, gitdir, oid: oid2 }); + const commit2 = new GitCommit(object); + const hasParents = await Promise.all( + commit2.headers().parent.map((oid3) => hasObject({ fs, cache, gitdir, oid: oid3 })) + ); + const haveAllParents = hasParents.length === 0 || hasParents.every((has) => has); + if (!haveAllParents) { + oids.add(oid2); + } + } catch (err) { + oids.add(oid2); + } + } + } + for (const oid2 of response.unshallows) { + oids.delete(oid2); + } + await GitShallowManager.write({ fs, gitdir, oids }); + if (singleBranch) { + const refs = /* @__PURE__ */ new Map([[fullref, oid]]); + const symrefs = /* @__PURE__ */ new Map(); + let bail = 10; + let key2 = fullref; + while (bail--) { + const value = remoteHTTP.symrefs.get(key2); + if (value === void 0) break; + symrefs.set(key2, value); + key2 = value; + } + const realRef = remoteRefs.get(key2); + if (realRef) { + refs.set(key2, realRef); + } + const { pruned } = await GitRefManager.updateRemoteRefs({ + fs, + gitdir, + remote, + refs, + symrefs, + tags, + prune + }); + if (prune) { + response.pruned = pruned; + } + } else { + const { pruned } = await GitRefManager.updateRemoteRefs({ + fs, + gitdir, + remote, + refs: remoteRefs, + symrefs: remoteHTTP.symrefs, + tags, + prune, + pruneTags + }); + if (prune) { + response.pruned = pruned; + } + } + response.HEAD = remoteHTTP.symrefs.get("HEAD"); + if (response.HEAD === void 0) { + const { oid: oid2 } = GitRefManager.resolveAgainstMap({ + ref: "HEAD", + map: remoteRefs + }); + for (const [key2, value] of remoteRefs.entries()) { + if (key2 !== "HEAD" && value === oid2) { + response.HEAD = key2; + break; + } + } + } + const noun = fullref.startsWith("refs/tags") ? "tag" : "branch"; + response.FETCH_HEAD = { + oid, + description: `${noun} '${abbreviateRef(fullref)}' of ${url}` + }; + if (onProgress || onMessage) { + const lines = splitLines(response.progress); + forAwait(lines, async (line) => { + if (onMessage) await onMessage(line); + if (onProgress) { + const matches = line.match(/([^:]*).*\((\d+?)\/(\d+?)\)/); + if (matches) { + await onProgress({ + phase: matches[1].trim(), + loaded: parseInt(matches[2], 10), + total: parseInt(matches[3], 10) + }); + } + } + }); + } + const packfile = Buffer.from(await collect(response.packfile)); + if (raw.body.error) throw raw.body.error; + const packfileSha = packfile.slice(-20).toString("hex"); + const res = { + defaultBranch: response.HEAD, + fetchHead: response.FETCH_HEAD.oid, + fetchHeadDescription: response.FETCH_HEAD.description + }; + if (response.headers) { + res.headers = response.headers; + } + if (prune) { + res.pruned = response.pruned; + } + if (packfileSha !== "" && !emptyPackfile(packfile)) { + res.packfile = `objects/pack/pack-${packfileSha}.pack`; + const fullpath = join(gitdir, res.packfile); + await fs.write(fullpath, packfile); + const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); + const idx = await GitPackIndex.fromPack({ + pack: packfile, + getExternalRefDelta, + onProgress + }); + await fs.write(fullpath.replace(/\.pack$/, ".idx"), await idx.toBuffer()); + } + return res; +} +async function _init({ + fs, + bare = false, + dir, + gitdir = bare ? dir : join(dir, ".git"), + defaultBranch = "master" +}) { + if (await fs.exists(gitdir + "/config")) return; + let folders = [ + "hooks", + "info", + "objects/info", + "objects/pack", + "refs/heads", + "refs/tags" + ]; + folders = folders.map((dir2) => gitdir + "/" + dir2); + for (const folder of folders) { + await fs.mkdir(folder); + } + await fs.write( + gitdir + "/config", + `[core] + repositoryformatversion = 0 + filemode = false + bare = ${bare} +` + (bare ? "" : " logallrefupdates = true\n") + " symlinks = false\n ignorecase = true\n" + ); + await fs.write(gitdir + "/HEAD", `ref: refs/heads/${defaultBranch} +`); +} +async function _clone({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPostCheckout, + dir, + gitdir, + url, + corsProxy, + ref, + remote, + depth, + since, + exclude, + relative: relative2, + singleBranch, + noCheckout, + noTags, + headers +}) { + try { + await _init({ fs, gitdir }); + await _addRemote({ fs, gitdir, remote, url, force: false }); + if (corsProxy) { + const config = await GitConfigManager.get({ fs, gitdir }); + await config.set(`http.corsProxy`, corsProxy); + await GitConfigManager.save({ fs, gitdir, config }); + } + const { defaultBranch, fetchHead } = await _fetch({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + gitdir, + ref, + remote, + corsProxy, + depth, + since, + exclude, + relative: relative2, + singleBranch, + headers, + tags: !noTags + }); + if (fetchHead === null) return; + ref = ref || defaultBranch; + ref = ref.replace("refs/heads/", ""); + await _checkout({ + fs, + cache, + onProgress, + onPostCheckout, + dir, + gitdir, + ref, + remote, + noCheckout + }); + } catch (err) { + await fs.rmdir(gitdir, { recursive: true, maxRetries: 10 }).catch(() => void 0); + throw err; + } +} +async function clone({ + fs, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPostCheckout, + dir, + gitdir = join(dir, ".git"), + url, + corsProxy = void 0, + ref = void 0, + remote = "origin", + depth = void 0, + since = void 0, + exclude = [], + relative: relative2 = false, + singleBranch = false, + noCheckout = false, + noTags = false, + headers = {}, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("http", http); + assertParameter("gitdir", gitdir); + if (!noCheckout) { + assertParameter("dir", dir); + } + assertParameter("url", url); + return await _clone({ + fs: new FileSystem(fs), + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPostCheckout, + dir, + gitdir, + url, + corsProxy, + ref, + remote, + depth, + since, + exclude, + relative: relative2, + singleBranch, + noCheckout, + noTags, + headers + }); + } catch (err) { + err.caller = "git.clone"; + throw err; + } +} +async function commit({ + fs: _fs, + onSign, + dir, + gitdir = join(dir, ".git"), + message, + author, + committer, + signingKey, + amend = false, + dryRun = false, + noUpdateBranch = false, + ref, + parent, + tree, + cache = {} +}) { + try { + assertParameter("fs", _fs); + if (!amend) { + assertParameter("message", message); + } + if (signingKey) { + assertParameter("onSign", onSign); + } + const fs = new FileSystem(_fs); + return await _commit({ + fs, + cache, + onSign, + gitdir, + message, + author, + committer, + signingKey, + amend, + dryRun, + noUpdateBranch, + ref, + parent, + tree + }); + } catch (err) { + err.caller = "git.commit"; + throw err; + } +} +async function currentBranch({ + fs, + dir, + gitdir = join(dir, ".git"), + fullname = false, + test = false +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + return await _currentBranch({ + fs: new FileSystem(fs), + gitdir, + fullname, + test + }); + } catch (err) { + err.caller = "git.currentBranch"; + throw err; + } +} +async function _deleteBranch({ fs, gitdir, ref }) { + ref = ref.startsWith("refs/heads/") ? ref : `refs/heads/${ref}`; + const exist = await GitRefManager.exists({ fs, gitdir, ref }); + if (!exist) { + throw new NotFoundError(ref); + } + const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); + const currentRef = await _currentBranch({ fs, gitdir, fullname: true }); + if (fullRef === currentRef) { + const value = await GitRefManager.resolve({ fs, gitdir, ref: fullRef }); + await GitRefManager.writeRef({ fs, gitdir, ref: "HEAD", value }); + } + await GitRefManager.deleteRef({ fs, gitdir, ref: fullRef }); + const abbrevRef = abbreviateRef(ref); + const config = await GitConfigManager.get({ fs, gitdir }); + await config.deleteSection("branch", abbrevRef); + await GitConfigManager.save({ fs, gitdir, config }); +} +async function deleteBranch({ + fs, + dir, + gitdir = join(dir, ".git"), + ref +}) { + try { + assertParameter("fs", fs); + assertParameter("ref", ref); + return await _deleteBranch({ + fs: new FileSystem(fs), + gitdir, + ref + }); + } catch (err) { + err.caller = "git.deleteBranch"; + throw err; + } +} +async function deleteRef({ fs, dir, gitdir = join(dir, ".git"), ref }) { + try { + assertParameter("fs", fs); + assertParameter("ref", ref); + await GitRefManager.deleteRef({ fs: new FileSystem(fs), gitdir, ref }); + } catch (err) { + err.caller = "git.deleteRef"; + throw err; + } +} +async function _deleteRemote({ fs, gitdir, remote }) { + const config = await GitConfigManager.get({ fs, gitdir }); + await config.deleteSection("remote", remote); + await GitConfigManager.save({ fs, gitdir, config }); +} +async function deleteRemote({ + fs, + dir, + gitdir = join(dir, ".git"), + remote +}) { + try { + assertParameter("fs", fs); + assertParameter("remote", remote); + return await _deleteRemote({ + fs: new FileSystem(fs), + gitdir, + remote + }); + } catch (err) { + err.caller = "git.deleteRemote"; + throw err; + } +} +async function _deleteTag({ fs, gitdir, ref }) { + ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; + await GitRefManager.deleteRef({ fs, gitdir, ref }); +} +async function deleteTag({ fs, dir, gitdir = join(dir, ".git"), ref }) { + try { + assertParameter("fs", fs); + assertParameter("ref", ref); + return await _deleteTag({ + fs: new FileSystem(fs), + gitdir, + ref + }); + } catch (err) { + err.caller = "git.deleteTag"; + throw err; + } +} +async function expandOidLoose({ fs, gitdir, oid: short }) { + const prefix = short.slice(0, 2); + const objectsSuffixes = await fs.readdir(`${gitdir}/objects/${prefix}`); + return objectsSuffixes.map((suffix) => `${prefix}${suffix}`).filter((_oid) => _oid.startsWith(short)); +} +async function expandOidPacked({ + fs, + cache, + gitdir, + oid: short, + getExternalRefDelta +}) { + const results = []; + let list = await fs.readdir(join(gitdir, "objects/pack")); + list = list.filter((x) => x.endsWith(".idx")); + for (const filename of list) { + const indexFile = `${gitdir}/objects/pack/${filename}`; + const p = await readPackIndex({ + fs, + cache, + filename: indexFile, + getExternalRefDelta + }); + if (p.error) throw new InternalError(p.error); + for (const oid of p.offsets.keys()) { + if (oid.startsWith(short)) results.push(oid); + } + } + return results; +} +async function _expandOid({ fs, cache, gitdir, oid: short }) { + const getExternalRefDelta = (oid) => _readObject({ fs, cache, gitdir, oid }); + const results = await expandOidLoose({ fs, gitdir, oid: short }); + const packedOids = await expandOidPacked({ + fs, + cache, + gitdir, + oid: short, + getExternalRefDelta + }); + for (const packedOid of packedOids) { + if (results.indexOf(packedOid) === -1) { + results.push(packedOid); + } + } + if (results.length === 1) { + return results[0]; + } + if (results.length > 1) { + throw new AmbiguousError("oids", short, results); + } + throw new NotFoundError(`an object matching "${short}"`); +} +async function expandOid({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + return await _expandOid({ + fs: new FileSystem(fs), + cache, + gitdir, + oid + }); + } catch (err) { + err.caller = "git.expandOid"; + throw err; + } +} +async function expandRef({ fs, dir, gitdir = join(dir, ".git"), ref }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + return await GitRefManager.expand({ + fs: new FileSystem(fs), + gitdir, + ref + }); + } catch (err) { + err.caller = "git.expandRef"; + throw err; + } +} +async function _findMergeBase({ fs, cache, gitdir, oids }) { + const visits = {}; + const passes = oids.length; + let heads = oids.map((oid, index2) => ({ index: index2, oid })); + while (heads.length) { + const result = /* @__PURE__ */ new Set(); + for (const { oid, index: index2 } of heads) { + if (!visits[oid]) visits[oid] = /* @__PURE__ */ new Set(); + visits[oid].add(index2); + if (visits[oid].size === passes) { + result.add(oid); + } + } + if (result.size > 0) { + return [...result]; + } + const newheads = /* @__PURE__ */ new Map(); + for (const { oid, index: index2 } of heads) { + try { + const { object } = await _readObject({ fs, cache, gitdir, oid }); + const commit2 = GitCommit.from(object); + const { parent } = commit2.parseHeaders(); + for (const oid2 of parent) { + if (!visits[oid2] || !visits[oid2].has(index2)) { + newheads.set(oid2 + ":" + index2, { oid: oid2, index: index2 }); + } + } + } catch (err) { + } + } + heads = Array.from(newheads.values()); + } + return []; +} +var LINEBREAKS = /^.*(\r?\n|$)/gm; +function mergeFile({ branches, contents }) { + const ourName = branches[1]; + const theirName = branches[2]; + const baseContent = contents[0]; + const ourContent = contents[1]; + const theirContent = contents[2]; + const ours = ourContent.match(LINEBREAKS); + const base = baseContent.match(LINEBREAKS); + const theirs = theirContent.match(LINEBREAKS); + const result = (0, import_diff3.default)(ours, base, theirs); + const markerSize = 7; + let mergedText = ""; + let cleanMerge = true; + for (const item of result) { + if (item.ok) { + mergedText += item.ok.join(""); + } + if (item.conflict) { + cleanMerge = false; + mergedText += `${"<".repeat(markerSize)} ${ourName} +`; + mergedText += item.conflict.a.join(""); + mergedText += `${"=".repeat(markerSize)} +`; + mergedText += item.conflict.b.join(""); + mergedText += `${">".repeat(markerSize)} ${theirName} +`; + } + } + return { cleanMerge, mergedText }; +} +async function mergeTree({ + fs, + cache, + dir, + gitdir = join(dir, ".git"), + index: index2, + ourOid, + baseOid, + theirOid, + ourName = "ours", + baseName = "base", + theirName = "theirs", + dryRun = false, + abortOnConflict = true, + mergeDriver +}) { + const ourTree = TREE({ ref: ourOid }); + const baseTree = TREE({ ref: baseOid }); + const theirTree = TREE({ ref: theirOid }); + const unmergedFiles = []; + const bothModified = []; + const deleteByUs = []; + const deleteByTheirs = []; + const results = await _walk({ + fs, + cache, + dir, + gitdir, + trees: [ourTree, baseTree, theirTree], + map: async function(filepath, [ours, base, theirs]) { + const path2 = basename(filepath); + const ourChange = await modified(ours, base); + const theirChange = await modified(theirs, base); + switch (`${ourChange}-${theirChange}`) { + case "false-false": { + return { + mode: await base.mode(), + path: path2, + oid: await base.oid(), + type: await base.type() + }; + } + case "false-true": { + return theirs ? { + mode: await theirs.mode(), + path: path2, + oid: await theirs.oid(), + type: await theirs.type() + } : void 0; + } + case "true-false": { + return ours ? { + mode: await ours.mode(), + path: path2, + oid: await ours.oid(), + type: await ours.type() + } : void 0; + } + case "true-true": { + if (ours && base && theirs && await ours.type() === "blob" && await base.type() === "blob" && await theirs.type() === "blob") { + return mergeBlobs({ + fs, + gitdir, + path: path2, + ours, + base, + theirs, + ourName, + baseName, + theirName, + mergeDriver + }).then(async (r) => { + if (!r.cleanMerge) { + unmergedFiles.push(filepath); + bothModified.push(filepath); + if (!abortOnConflict) { + const baseOid2 = await base.oid(); + const ourOid2 = await ours.oid(); + const theirOid2 = await theirs.oid(); + index2.delete({ filepath }); + index2.insert({ filepath, oid: baseOid2, stage: 1 }); + index2.insert({ filepath, oid: ourOid2, stage: 2 }); + index2.insert({ filepath, oid: theirOid2, stage: 3 }); + } + } else if (!abortOnConflict) { + index2.insert({ filepath, oid: r.mergeResult.oid, stage: 0 }); + } + return r.mergeResult; + }); + } + if (base && !ours && theirs && await base.type() === "blob" && await theirs.type() === "blob") { + unmergedFiles.push(filepath); + deleteByUs.push(filepath); + if (!abortOnConflict) { + const baseOid2 = await base.oid(); + const theirOid2 = await theirs.oid(); + index2.delete({ filepath }); + index2.insert({ filepath, oid: baseOid2, stage: 1 }); + index2.insert({ filepath, oid: theirOid2, stage: 3 }); + } + return { + mode: await theirs.mode(), + oid: await theirs.oid(), + type: "blob", + path: path2 + }; + } + if (base && ours && !theirs && await base.type() === "blob" && await ours.type() === "blob") { + unmergedFiles.push(filepath); + deleteByTheirs.push(filepath); + if (!abortOnConflict) { + const baseOid2 = await base.oid(); + const ourOid2 = await ours.oid(); + index2.delete({ filepath }); + index2.insert({ filepath, oid: baseOid2, stage: 1 }); + index2.insert({ filepath, oid: ourOid2, stage: 2 }); + } + return { + mode: await ours.mode(), + oid: await ours.oid(), + type: "blob", + path: path2 + }; + } + if (base && !ours && !theirs && await base.type() === "blob") { + return void 0; + } + throw new MergeNotSupportedError(); + } + } + }, + /** + * @param {TreeEntry} [parent] + * @param {Array} children + */ + reduce: unmergedFiles.length !== 0 && (!dir || abortOnConflict) ? void 0 : async (parent, children2) => { + const entries = children2.filter(Boolean); + if (!parent) return; + if (parent && parent.type === "tree" && entries.length === 0) return; + if (entries.length > 0) { + const tree = new GitTree(entries); + const object = tree.toObject(); + const oid = await _writeObject({ + fs, + gitdir, + type: "tree", + object, + dryRun + }); + parent.oid = oid; + } + return parent; + } + }); + if (unmergedFiles.length !== 0) { + if (dir && !abortOnConflict) { + await _walk({ + fs, + cache, + dir, + gitdir, + trees: [TREE({ ref: results.oid })], + map: async function(filepath, [entry]) { + const path2 = `${dir}/${filepath}`; + if (await entry.type() === "blob") { + const mode = await entry.mode(); + const content = new TextDecoder().decode(await entry.content()); + await fs.write(path2, content, { mode }); + } + return true; + } + }); + } + return new MergeConflictError( + unmergedFiles, + bothModified, + deleteByUs, + deleteByTheirs + ); + } + return results.oid; +} +async function mergeBlobs({ + fs, + gitdir, + path: path2, + ours, + base, + theirs, + ourName, + theirName, + baseName, + dryRun, + mergeDriver = mergeFile +}) { + const type = "blob"; + const mode = await base.mode() === await ours.mode() ? await theirs.mode() : await ours.mode(); + if (await ours.oid() === await theirs.oid()) { + return { + cleanMerge: true, + mergeResult: { mode, path: path2, oid: await ours.oid(), type } + }; + } + if (await ours.oid() === await base.oid()) { + return { + cleanMerge: true, + mergeResult: { mode, path: path2, oid: await theirs.oid(), type } + }; + } + if (await theirs.oid() === await base.oid()) { + return { + cleanMerge: true, + mergeResult: { mode, path: path2, oid: await ours.oid(), type } + }; + } + const ourContent = Buffer.from(await ours.content()).toString("utf8"); + const baseContent = Buffer.from(await base.content()).toString("utf8"); + const theirContent = Buffer.from(await theirs.content()).toString("utf8"); + const { mergedText, cleanMerge } = await mergeDriver({ + branches: [baseName, ourName, theirName], + contents: [baseContent, ourContent, theirContent], + path: path2 + }); + const oid = await _writeObject({ + fs, + gitdir, + type: "blob", + object: Buffer.from(mergedText, "utf8"), + dryRun + }); + return { cleanMerge, mergeResult: { mode, path: path2, oid, type } }; +} +async function _merge({ + fs, + cache, + dir, + gitdir, + ours, + theirs, + fastForward: fastForward2 = true, + fastForwardOnly = false, + dryRun = false, + noUpdateBranch = false, + abortOnConflict = true, + message, + author, + committer, + signingKey, + onSign, + mergeDriver +}) { + if (ours === void 0) { + ours = await _currentBranch({ fs, gitdir, fullname: true }); + } + ours = await GitRefManager.expand({ + fs, + gitdir, + ref: ours + }); + theirs = await GitRefManager.expand({ + fs, + gitdir, + ref: theirs + }); + const ourOid = await GitRefManager.resolve({ + fs, + gitdir, + ref: ours + }); + const theirOid = await GitRefManager.resolve({ + fs, + gitdir, + ref: theirs + }); + const baseOids = await _findMergeBase({ + fs, + cache, + gitdir, + oids: [ourOid, theirOid] + }); + if (baseOids.length !== 1) { + throw new MergeNotSupportedError(); + } + const baseOid = baseOids[0]; + if (baseOid === theirOid) { + return { + oid: ourOid, + alreadyMerged: true + }; + } + if (fastForward2 && baseOid === ourOid) { + if (!dryRun && !noUpdateBranch) { + await GitRefManager.writeRef({ fs, gitdir, ref: ours, value: theirOid }); + } + return { + oid: theirOid, + fastForward: true + }; + } else { + if (fastForwardOnly) { + throw new FastForwardError(); + } + const tree = await GitIndexManager.acquire( + { fs, gitdir, cache, allowUnmerged: false }, + async (index2) => { + return mergeTree({ + fs, + cache, + dir, + gitdir, + index: index2, + ourOid, + theirOid, + baseOid, + ourName: abbreviateRef(ours), + baseName: "base", + theirName: abbreviateRef(theirs), + dryRun, + abortOnConflict, + mergeDriver + }); + } + ); + if (tree instanceof MergeConflictError) throw tree; + if (!message) { + message = `Merge branch '${abbreviateRef(theirs)}' into ${abbreviateRef( + ours + )}`; + } + const oid = await _commit({ + fs, + cache, + gitdir, + message, + ref: ours, + tree, + parent: [ourOid, theirOid], + author, + committer, + signingKey, + onSign, + dryRun, + noUpdateBranch + }); + return { + oid, + tree, + mergeCommit: true + }; + } +} +async function _pull({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir, + ref, + url, + remote, + remoteRef, + prune, + pruneTags, + fastForward: fastForward2, + fastForwardOnly, + corsProxy, + singleBranch, + headers, + author, + committer, + signingKey +}) { + try { + if (!ref) { + const head = await _currentBranch({ fs, gitdir }); + if (!head) { + throw new MissingParameterError("ref"); + } + ref = head; + } + const { fetchHead, fetchHeadDescription } = await _fetch({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + gitdir, + corsProxy, + ref, + url, + remote, + remoteRef, + singleBranch, + headers, + prune, + pruneTags + }); + await _merge({ + fs, + cache, + gitdir, + ours: ref, + theirs: fetchHead, + fastForward: fastForward2, + fastForwardOnly, + message: `Merge ${fetchHeadDescription}`, + author, + committer, + signingKey, + dryRun: false, + noUpdateBranch: false + }); + await _checkout({ + fs, + cache, + onProgress, + dir, + gitdir, + ref, + remote, + noCheckout: false + }); + } catch (err) { + err.caller = "git.pull"; + throw err; + } +} +async function fastForward({ + fs, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir = join(dir, ".git"), + ref, + url, + remote, + remoteRef, + corsProxy, + singleBranch, + headers = {}, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("http", http); + assertParameter("gitdir", gitdir); + const thisWillNotBeUsed = { + name: "", + email: "", + timestamp: Date.now(), + timezoneOffset: 0 + }; + return await _pull({ + fs: new FileSystem(fs), + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir, + ref, + url, + remote, + remoteRef, + fastForwardOnly: true, + corsProxy, + singleBranch, + headers, + author: thisWillNotBeUsed, + committer: thisWillNotBeUsed + }); + } catch (err) { + err.caller = "git.fastForward"; + throw err; + } +} +async function fetch({ + fs, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir = join(dir, ".git"), + ref, + remote, + remoteRef, + url, + corsProxy, + depth = null, + since = null, + exclude = [], + relative: relative2 = false, + tags = false, + singleBranch = false, + headers = {}, + prune = false, + pruneTags = false, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("http", http); + assertParameter("gitdir", gitdir); + return await _fetch({ + fs: new FileSystem(fs), + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + gitdir, + ref, + remote, + remoteRef, + url, + corsProxy, + depth, + since, + exclude, + relative: relative2, + tags, + singleBranch, + headers, + prune, + pruneTags + }); + } catch (err) { + err.caller = "git.fetch"; + throw err; + } +} +async function findMergeBase({ + fs, + dir, + gitdir = join(dir, ".git"), + oids, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oids", oids); + return await _findMergeBase({ + fs: new FileSystem(fs), + cache, + gitdir, + oids + }); + } catch (err) { + err.caller = "git.findMergeBase"; + throw err; + } +} +async function _findRoot({ fs, filepath }) { + if (await fs.exists(join(filepath, ".git"))) { + return filepath; + } else { + const parent = dirname(filepath); + if (parent === filepath) { + throw new NotFoundError(`git root for ${filepath}`); + } + return _findRoot({ fs, filepath: parent }); + } +} +async function findRoot({ fs, filepath }) { + try { + assertParameter("fs", fs); + assertParameter("filepath", filepath); + return await _findRoot({ fs: new FileSystem(fs), filepath }); + } catch (err) { + err.caller = "git.findRoot"; + throw err; + } +} +async function getConfig({ fs, dir, gitdir = join(dir, ".git"), path: path2 }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("path", path2); + return await _getConfig({ + fs: new FileSystem(fs), + gitdir, + path: path2 + }); + } catch (err) { + err.caller = "git.getConfig"; + throw err; + } +} +async function _getConfigAll({ fs, gitdir, path: path2 }) { + const config = await GitConfigManager.get({ fs, gitdir }); + return config.getall(path2); +} +async function getConfigAll({ + fs, + dir, + gitdir = join(dir, ".git"), + path: path2 +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("path", path2); + return await _getConfigAll({ + fs: new FileSystem(fs), + gitdir, + path: path2 + }); + } catch (err) { + err.caller = "git.getConfigAll"; + throw err; + } +} +async function getRemoteInfo({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + url, + headers = {}, + forPush = false +}) { + try { + assertParameter("http", http); + assertParameter("url", url); + const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); + const remote = await GitRemoteHTTP2.discover({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service: forPush ? "git-receive-pack" : "git-upload-pack", + url, + headers, + protocolVersion: 1 + }); + const result = { + capabilities: [...remote.capabilities] + }; + for (const [ref, oid] of remote.refs) { + const parts = ref.split("/"); + const last2 = parts.pop(); + let o = result; + for (const part of parts) { + o[part] = o[part] || {}; + o = o[part]; + } + o[last2] = oid; + } + for (const [symref, ref] of remote.symrefs) { + const parts = symref.split("/"); + const last2 = parts.pop(); + let o = result; + for (const part of parts) { + o[part] = o[part] || {}; + o = o[part]; + } + o[last2] = ref; + } + return result; + } catch (err) { + err.caller = "git.getRemoteInfo"; + throw err; + } +} +function formatInfoRefs(remote, prefix, symrefs, peelTags) { + const refs = []; + for (const [key2, value] of remote.refs) { + if (prefix && !key2.startsWith(prefix)) continue; + if (key2.endsWith("^{}")) { + if (peelTags) { + const _key = key2.replace("^{}", ""); + const last2 = refs[refs.length - 1]; + const r = last2.ref === _key ? last2 : refs.find((x) => x.ref === _key); + if (r === void 0) { + throw new Error("I did not expect this to happen"); + } + r.peeled = value; + } + continue; + } + const ref = { ref: key2, oid: value }; + if (symrefs) { + if (remote.symrefs.has(key2)) { + ref.target = remote.symrefs.get(key2); + } + } + refs.push(ref); + } + return refs; +} +async function getRemoteInfo2({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + url, + headers = {}, + forPush = false, + protocolVersion = 2 +}) { + try { + assertParameter("http", http); + assertParameter("url", url); + const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); + const remote = await GitRemoteHTTP2.discover({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service: forPush ? "git-receive-pack" : "git-upload-pack", + url, + headers, + protocolVersion + }); + if (remote.protocolVersion === 2) { + return { + protocolVersion: remote.protocolVersion, + capabilities: remote.capabilities2 + }; + } + const capabilities = {}; + for (const cap of remote.capabilities) { + const [key2, value] = cap.split("="); + if (value) { + capabilities[key2] = value; + } else { + capabilities[key2] = true; + } + } + return { + protocolVersion: 1, + capabilities, + refs: formatInfoRefs(remote, void 0, true, true) + }; + } catch (err) { + err.caller = "git.getRemoteInfo2"; + throw err; + } +} +async function hashObject({ + type, + object, + format = "content", + oid = void 0 +}) { + if (format !== "deflated") { + if (format !== "wrapped") { + object = GitObject.wrap({ type, object }); + } + oid = await shasum(object); + } + return { oid, object }; +} +async function hashBlob({ object }) { + try { + assertParameter("object", object); + if (typeof object === "string") { + object = Buffer.from(object, "utf8"); + } else { + object = Buffer.from(object); + } + const type = "blob"; + const { oid, object: _object } = await hashObject({ + type: "blob", + format: "content", + object + }); + return { oid, type, object: new Uint8Array(_object), format: "wrapped" }; + } catch (err) { + err.caller = "git.hashBlob"; + throw err; + } +} +async function _indexPack({ + fs, + cache, + onProgress, + dir, + gitdir, + filepath +}) { + try { + filepath = join(dir, filepath); + const pack = await fs.read(filepath); + const getExternalRefDelta = (oid) => _readObject({ fs, cache, gitdir, oid }); + const idx = await GitPackIndex.fromPack({ + pack, + getExternalRefDelta, + onProgress + }); + await fs.write(filepath.replace(/\.pack$/, ".idx"), await idx.toBuffer()); + return { + oids: [...idx.hashes] + }; + } catch (err) { + err.caller = "git.indexPack"; + throw err; + } +} +async function indexPack({ + fs, + onProgress, + dir, + gitdir = join(dir, ".git"), + filepath, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("dir", dir); + assertParameter("gitdir", dir); + assertParameter("filepath", filepath); + return await _indexPack({ + fs: new FileSystem(fs), + cache, + onProgress, + dir, + gitdir, + filepath + }); + } catch (err) { + err.caller = "git.indexPack"; + throw err; + } +} +async function init({ + fs, + bare = false, + dir, + gitdir = bare ? dir : join(dir, ".git"), + defaultBranch = "master" +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + if (!bare) { + assertParameter("dir", dir); + } + return await _init({ + fs: new FileSystem(fs), + bare, + dir, + gitdir, + defaultBranch + }); + } catch (err) { + err.caller = "git.init"; + throw err; + } +} +async function _isDescendent({ + fs, + cache, + gitdir, + oid, + ancestor, + depth +}) { + const shallows = await GitShallowManager.read({ fs, gitdir }); + if (!oid) { + throw new MissingParameterError("oid"); + } + if (!ancestor) { + throw new MissingParameterError("ancestor"); + } + if (oid === ancestor) return false; + const queue = [oid]; + const visited = /* @__PURE__ */ new Set(); + let searchdepth = 0; + while (queue.length) { + if (searchdepth++ === depth) { + throw new MaxDepthError(depth); + } + const oid2 = queue.shift(); + const { type, object } = await _readObject({ + fs, + cache, + gitdir, + oid: oid2 + }); + if (type !== "commit") { + throw new ObjectTypeError(oid2, type, "commit"); + } + const commit2 = GitCommit.from(object).parse(); + for (const parent of commit2.parent) { + if (parent === ancestor) return true; + } + if (!shallows.has(oid2)) { + for (const parent of commit2.parent) { + if (!visited.has(parent)) { + queue.push(parent); + visited.add(parent); + } + } + } + } + return false; +} +async function isDescendent({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + ancestor, + depth = -1, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + assertParameter("ancestor", ancestor); + return await _isDescendent({ + fs: new FileSystem(fs), + cache, + gitdir, + oid, + ancestor, + depth + }); + } catch (err) { + err.caller = "git.isDescendent"; + throw err; + } +} +async function isIgnored({ + fs, + dir, + gitdir = join(dir, ".git"), + filepath +}) { + try { + assertParameter("fs", fs); + assertParameter("dir", dir); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + return GitIgnoreManager.isIgnored({ + fs: new FileSystem(fs), + dir, + gitdir, + filepath + }); + } catch (err) { + err.caller = "git.isIgnored"; + throw err; + } +} +async function listBranches({ + fs, + dir, + gitdir = join(dir, ".git"), + remote +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + return GitRefManager.listBranches({ + fs: new FileSystem(fs), + gitdir, + remote + }); + } catch (err) { + err.caller = "git.listBranches"; + throw err; + } +} +async function _listFiles({ fs, gitdir, ref, cache }) { + if (ref) { + const oid = await GitRefManager.resolve({ gitdir, fs, ref }); + const filenames = []; + await accumulateFilesFromOid({ + fs, + cache, + gitdir, + oid, + filenames, + prefix: "" + }); + return filenames; + } else { + return GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + return index2.entries.map((x) => x.path); + }); + } +} +async function accumulateFilesFromOid({ + fs, + cache, + gitdir, + oid, + filenames, + prefix +}) { + const { tree } = await _readTree({ fs, cache, gitdir, oid }); + for (const entry of tree) { + if (entry.type === "tree") { + await accumulateFilesFromOid({ + fs, + cache, + gitdir, + oid: entry.oid, + filenames, + prefix: join(prefix, entry.path) + }); + } else { + filenames.push(join(prefix, entry.path)); + } + } +} +async function listFiles({ + fs, + dir, + gitdir = join(dir, ".git"), + ref, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + return await _listFiles({ + fs: new FileSystem(fs), + cache, + gitdir, + ref + }); + } catch (err) { + err.caller = "git.listFiles"; + throw err; + } +} +async function _listNotes({ fs, cache, gitdir, ref }) { + let parent; + try { + parent = await GitRefManager.resolve({ gitdir, fs, ref }); + } catch (err) { + if (err instanceof NotFoundError) { + return []; + } + } + const result = await _readTree({ + fs, + cache, + gitdir, + oid: parent + }); + const notes = result.tree.map((entry) => ({ + target: entry.path, + note: entry.oid + })); + return notes; +} +async function listNotes({ + fs, + dir, + gitdir = join(dir, ".git"), + ref = "refs/notes/commits", + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + return await _listNotes({ + fs: new FileSystem(fs), + cache, + gitdir, + ref + }); + } catch (err) { + err.caller = "git.listNotes"; + throw err; + } +} +async function _listRemotes({ fs, gitdir }) { + const config = await GitConfigManager.get({ fs, gitdir }); + const remoteNames = await config.getSubsections("remote"); + const remotes = Promise.all( + remoteNames.map(async (remote) => { + const url = await config.get(`remote.${remote}.url`); + return { remote, url }; + }) + ); + return remotes; +} +async function listRemotes({ fs, dir, gitdir = join(dir, ".git") }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + return await _listRemotes({ + fs: new FileSystem(fs), + gitdir + }); + } catch (err) { + err.caller = "git.listRemotes"; + throw err; + } +} +async function parseListRefsResponse(stream) { + const read = GitPktLine.streamReader(stream); + const refs = []; + let line; + while (true) { + line = await read(); + if (line === true) break; + if (line === null) continue; + line = line.toString("utf8").replace(/\n$/, ""); + const [oid, ref, ...attrs] = line.split(" "); + const r = { ref, oid }; + for (const attr2 of attrs) { + const [name, value] = attr2.split(":"); + if (name === "symref-target") { + r.target = value; + } else if (name === "peeled") { + r.peeled = value; + } + } + refs.push(r); + } + return refs; +} +async function writeListRefsRequest({ prefix, symrefs, peelTags }) { + const packstream = []; + packstream.push(GitPktLine.encode("command=ls-refs\n")); + packstream.push(GitPktLine.encode(`agent=${pkg.agent} +`)); + if (peelTags || symrefs || prefix) { + packstream.push(GitPktLine.delim()); + } + if (peelTags) packstream.push(GitPktLine.encode("peel")); + if (symrefs) packstream.push(GitPktLine.encode("symrefs")); + if (prefix) packstream.push(GitPktLine.encode(`ref-prefix ${prefix}`)); + packstream.push(GitPktLine.flush()); + return packstream; +} +async function listServerRefs({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + url, + headers = {}, + forPush = false, + protocolVersion = 2, + prefix, + symrefs, + peelTags +}) { + try { + assertParameter("http", http); + assertParameter("url", url); + const remote = await GitRemoteHTTP.discover({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service: forPush ? "git-receive-pack" : "git-upload-pack", + url, + headers, + protocolVersion + }); + if (remote.protocolVersion === 1) { + return formatInfoRefs(remote, prefix, symrefs, peelTags); + } + const body = await writeListRefsRequest({ prefix, symrefs, peelTags }); + const res = await GitRemoteHTTP.connect({ + http, + auth: remote.auth, + headers, + corsProxy, + service: forPush ? "git-receive-pack" : "git-upload-pack", + url, + body + }); + return parseListRefsResponse(res.body); + } catch (err) { + err.caller = "git.listServerRefs"; + throw err; + } +} +async function listTags({ fs, dir, gitdir = join(dir, ".git") }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + return GitRefManager.listTags({ fs: new FileSystem(fs), gitdir }); + } catch (err) { + err.caller = "git.listTags"; + throw err; + } +} +function compareAge(a, b) { + return a.committer.timestamp - b.committer.timestamp; +} +var EMPTY_OID = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"; +async function resolveFileIdInTree({ fs, cache, gitdir, oid, fileId }) { + if (fileId === EMPTY_OID) return; + const _oid = oid; + let filepath; + const result = await resolveTree({ fs, cache, gitdir, oid }); + const tree = result.tree; + if (fileId === result.oid) { + filepath = result.path; + } else { + filepath = await _resolveFileId({ + fs, + cache, + gitdir, + tree, + fileId, + oid: _oid + }); + if (Array.isArray(filepath)) { + if (filepath.length === 0) filepath = void 0; + else if (filepath.length === 1) filepath = filepath[0]; + } + } + return filepath; +} +async function _resolveFileId({ + fs, + cache, + gitdir, + tree, + fileId, + oid, + filepaths = [], + parentPath = "" +}) { + const walks = tree.entries().map(function(entry) { + let result; + if (entry.oid === fileId) { + result = join(parentPath, entry.path); + filepaths.push(result); + } else if (entry.type === "tree") { + result = _readObject({ + fs, + cache, + gitdir, + oid: entry.oid + }).then(function({ object }) { + return _resolveFileId({ + fs, + cache, + gitdir, + tree: GitTree.from(object), + fileId, + oid, + filepaths, + parentPath: join(parentPath, entry.path) + }); + }); + } + return result; + }); + await Promise.all(walks); + return filepaths; +} +async function _log({ + fs, + cache, + gitdir, + filepath, + ref, + depth, + since, + force, + follow +}) { + const sinceTimestamp = typeof since === "undefined" ? void 0 : Math.floor(since.valueOf() / 1e3); + const commits = []; + const shallowCommits = await GitShallowManager.read({ fs, gitdir }); + const oid = await GitRefManager.resolve({ fs, gitdir, ref }); + const tips = [await _readCommit({ fs, cache, gitdir, oid })]; + let lastFileOid; + let lastCommit; + let isOk; + function endCommit(commit2) { + if (isOk && filepath) commits.push(commit2); + } + while (tips.length > 0) { + const commit2 = tips.pop(); + if (sinceTimestamp !== void 0 && commit2.commit.committer.timestamp <= sinceTimestamp) { + break; + } + if (filepath) { + let vFileOid; + try { + vFileOid = await resolveFilepath({ + fs, + cache, + gitdir, + oid: commit2.commit.tree, + filepath + }); + if (lastCommit && lastFileOid !== vFileOid) { + commits.push(lastCommit); + } + lastFileOid = vFileOid; + lastCommit = commit2; + isOk = true; + } catch (e) { + if (e instanceof NotFoundError) { + let found = follow && lastFileOid; + if (found) { + found = await resolveFileIdInTree({ + fs, + cache, + gitdir, + oid: commit2.commit.tree, + fileId: lastFileOid + }); + if (found) { + if (Array.isArray(found)) { + if (lastCommit) { + const lastFound = await resolveFileIdInTree({ + fs, + cache, + gitdir, + oid: lastCommit.commit.tree, + fileId: lastFileOid + }); + if (Array.isArray(lastFound)) { + found = found.filter((p) => lastFound.indexOf(p) === -1); + if (found.length === 1) { + found = found[0]; + filepath = found; + if (lastCommit) commits.push(lastCommit); + } else { + found = false; + if (lastCommit) commits.push(lastCommit); + break; + } + } + } + } else { + filepath = found; + if (lastCommit) commits.push(lastCommit); + } + } + } + if (!found) { + if (isOk && lastFileOid) { + commits.push(lastCommit); + if (!force) break; + } + if (!force && !follow) throw e; + } + lastCommit = commit2; + isOk = false; + } else throw e; + } + } else { + commits.push(commit2); + } + if (depth !== void 0 && commits.length === depth) { + endCommit(commit2); + break; + } + if (!shallowCommits.has(commit2.oid)) { + for (const oid2 of commit2.commit.parent) { + const commit3 = await _readCommit({ fs, cache, gitdir, oid: oid2 }); + if (!tips.map((commit4) => commit4.oid).includes(commit3.oid)) { + tips.push(commit3); + } + } + } + if (tips.length === 0) { + endCommit(commit2); + } + tips.sort((a, b) => compareAge(a.commit, b.commit)); + } + return commits; +} +async function log({ + fs, + dir, + gitdir = join(dir, ".git"), + filepath, + ref = "HEAD", + depth, + since, + // Date + force, + follow, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + return await _log({ + fs: new FileSystem(fs), + cache, + gitdir, + filepath, + ref, + depth, + since, + force, + follow + }); + } catch (err) { + err.caller = "git.log"; + throw err; + } +} +async function merge({ + fs: _fs, + onSign, + dir, + gitdir = join(dir, ".git"), + ours, + theirs, + fastForward: fastForward2 = true, + fastForwardOnly = false, + dryRun = false, + noUpdateBranch = false, + abortOnConflict = true, + message, + author: _author, + committer: _committer, + signingKey, + cache = {}, + mergeDriver +}) { + try { + assertParameter("fs", _fs); + if (signingKey) { + assertParameter("onSign", onSign); + } + const fs = new FileSystem(_fs); + const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); + if (!author && (!fastForwardOnly || !fastForward2)) { + throw new MissingNameError("author"); + } + const committer = await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer + }); + if (!committer && (!fastForwardOnly || !fastForward2)) { + throw new MissingNameError("committer"); + } + return await _merge({ + fs, + cache, + dir, + gitdir, + ours, + theirs, + fastForward: fastForward2, + fastForwardOnly, + dryRun, + noUpdateBranch, + abortOnConflict, + message, + author, + committer, + signingKey, + onSign, + mergeDriver + }); + } catch (err) { + err.caller = "git.merge"; + throw err; + } +} +var types = { + commit: 16, + tree: 32, + blob: 48, + tag: 64, + ofs_delta: 96, + ref_delta: 112 +}; +async function _pack({ + fs, + cache, + dir, + gitdir = join(dir, ".git"), + oids +}) { + const hash2 = new import_sha1.default(); + const outputStream = []; + function write(chunk, enc) { + const buff = Buffer.from(chunk, enc); + outputStream.push(buff); + hash2.update(buff); + } + async function writeObject2({ stype, object }) { + const type = types[stype]; + let length = object.length; + let multibyte = length > 15 ? 128 : 0; + const lastFour = length & 15; + length = length >>> 4; + let byte = (multibyte | type | lastFour).toString(16); + write(byte, "hex"); + while (multibyte) { + multibyte = length > 127 ? 128 : 0; + byte = multibyte | length & 127; + write(padHex(2, byte), "hex"); + length = length >>> 7; + } + write(Buffer.from(await deflate(object))); + } + write("PACK"); + write("00000002", "hex"); + write(padHex(8, oids.length), "hex"); + for (const oid of oids) { + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + await writeObject2({ write, object, stype: type }); + } + const digest = hash2.digest(); + outputStream.push(digest); + return outputStream; +} +async function _packObjects({ fs, cache, gitdir, oids, write }) { + const buffers = await _pack({ fs, cache, gitdir, oids }); + const packfile = Buffer.from(await collect(buffers)); + const packfileSha = packfile.slice(-20).toString("hex"); + const filename = `pack-${packfileSha}.pack`; + if (write) { + await fs.write(join(gitdir, `objects/pack/${filename}`), packfile); + return { filename }; + } + return { + filename, + packfile: new Uint8Array(packfile) + }; +} +async function packObjects({ + fs, + dir, + gitdir = join(dir, ".git"), + oids, + write = false, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oids", oids); + return await _packObjects({ + fs: new FileSystem(fs), + cache, + gitdir, + oids, + write + }); + } catch (err) { + err.caller = "git.packObjects"; + throw err; + } +} +async function pull({ + fs: _fs, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir = join(dir, ".git"), + ref, + url, + remote, + remoteRef, + prune = false, + pruneTags = false, + fastForward: fastForward2 = true, + fastForwardOnly = false, + corsProxy, + singleBranch, + headers = {}, + author: _author, + committer: _committer, + signingKey, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + const fs = new FileSystem(_fs); + const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); + if (!author) throw new MissingNameError("author"); + const committer = await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer + }); + if (!committer) throw new MissingNameError("committer"); + return await _pull({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + dir, + gitdir, + ref, + url, + remote, + remoteRef, + fastForward: fastForward2, + fastForwardOnly, + corsProxy, + singleBranch, + headers, + author, + committer, + signingKey, + prune, + pruneTags + }); + } catch (err) { + err.caller = "git.pull"; + throw err; + } +} +async function listCommitsAndTags({ + fs, + cache, + dir, + gitdir = join(dir, ".git"), + start, + finish +}) { + const shallows = await GitShallowManager.read({ fs, gitdir }); + const startingSet = /* @__PURE__ */ new Set(); + const finishingSet = /* @__PURE__ */ new Set(); + for (const ref of start) { + startingSet.add(await GitRefManager.resolve({ fs, gitdir, ref })); + } + for (const ref of finish) { + try { + const oid = await GitRefManager.resolve({ fs, gitdir, ref }); + finishingSet.add(oid); + } catch (err) { + } + } + const visited = /* @__PURE__ */ new Set(); + async function walk2(oid) { + visited.add(oid); + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type === "tag") { + const tag2 = GitAnnotatedTag.from(object); + const commit2 = tag2.headers().object; + return walk2(commit2); + } + if (type !== "commit") { + throw new ObjectTypeError(oid, type, "commit"); + } + if (!shallows.has(oid)) { + const commit2 = GitCommit.from(object); + const parents = commit2.headers().parent; + for (oid of parents) { + if (!finishingSet.has(oid) && !visited.has(oid)) { + await walk2(oid); + } + } + } + } + for (const oid of startingSet) { + await walk2(oid); + } + return visited; +} +async function listObjects({ + fs, + cache, + dir, + gitdir = join(dir, ".git"), + oids +}) { + const visited = /* @__PURE__ */ new Set(); + async function walk2(oid) { + if (visited.has(oid)) return; + visited.add(oid); + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type === "tag") { + const tag2 = GitAnnotatedTag.from(object); + const obj = tag2.headers().object; + await walk2(obj); + } else if (type === "commit") { + const commit2 = GitCommit.from(object); + const tree = commit2.headers().tree; + await walk2(tree); + } else if (type === "tree") { + const tree = GitTree.from(object); + for (const entry of tree) { + if (entry.type === "blob") { + visited.add(entry.oid); + } + if (entry.type === "tree") { + await walk2(entry.oid); + } + } + } + } + for (const oid of oids) { + await walk2(oid); + } + return visited; +} +async function parseReceivePackResponse(packfile) { + const result = {}; + let response = ""; + const read = GitPktLine.streamReader(packfile); + let line = await read(); + while (line !== true) { + if (line !== null) response += line.toString("utf8") + "\n"; + line = await read(); + } + const lines = response.toString("utf8").split("\n"); + line = lines.shift(); + if (!line.startsWith("unpack ")) { + throw new ParseError('unpack ok" or "unpack [error message]', line); + } + result.ok = line === "unpack ok"; + if (!result.ok) { + result.error = line.slice("unpack ".length); + } + result.refs = {}; + for (const line2 of lines) { + if (line2.trim() === "") continue; + const status2 = line2.slice(0, 2); + const refAndMessage = line2.slice(3); + let space2 = refAndMessage.indexOf(" "); + if (space2 === -1) space2 = refAndMessage.length; + const ref = refAndMessage.slice(0, space2); + const error = refAndMessage.slice(space2 + 1); + result.refs[ref] = { + ok: status2 === "ok", + error + }; + } + return result; +} +async function writeReceivePackRequest({ + capabilities = [], + triplets = [] +}) { + const packstream = []; + let capsFirstLine = `\0 ${capabilities.join(" ")}`; + for (const trip of triplets) { + packstream.push( + GitPktLine.encode( + `${trip.oldoid} ${trip.oid} ${trip.fullRef}${capsFirstLine} +` + ) + ); + capsFirstLine = ""; + } + packstream.push(GitPktLine.flush()); + return packstream; +} +async function _push({ + fs, + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPrePush, + gitdir, + ref: _ref, + remoteRef: _remoteRef, + remote, + url: _url, + force = false, + delete: _delete = false, + corsProxy, + headers = {} +}) { + const ref = _ref || await _currentBranch({ fs, gitdir }); + if (typeof ref === "undefined") { + throw new MissingParameterError("ref"); + } + const config = await GitConfigManager.get({ fs, gitdir }); + remote = remote || await config.get(`branch.${ref}.pushRemote`) || await config.get("remote.pushDefault") || await config.get(`branch.${ref}.remote`) || "origin"; + const url = _url || await config.get(`remote.${remote}.pushurl`) || await config.get(`remote.${remote}.url`); + if (typeof url === "undefined") { + throw new MissingParameterError("remote OR url"); + } + const remoteRef = _remoteRef || await config.get(`branch.${ref}.merge`); + if (typeof url === "undefined") { + throw new MissingParameterError("remoteRef"); + } + if (corsProxy === void 0) { + corsProxy = await config.get("http.corsProxy"); + } + const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); + const oid = _delete ? "0000000000000000000000000000000000000000" : await GitRefManager.resolve({ fs, gitdir, ref: fullRef }); + const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); + const httpRemote = await GitRemoteHTTP2.discover({ + http, + onAuth, + onAuthSuccess, + onAuthFailure, + corsProxy, + service: "git-receive-pack", + url, + headers, + protocolVersion: 1 + }); + const auth = httpRemote.auth; + let fullRemoteRef; + if (!remoteRef) { + fullRemoteRef = fullRef; + } else { + try { + fullRemoteRef = await GitRefManager.expandAgainstMap({ + ref: remoteRef, + map: httpRemote.refs + }); + } catch (err) { + if (err instanceof NotFoundError) { + fullRemoteRef = remoteRef.startsWith("refs/") ? remoteRef : `refs/heads/${remoteRef}`; + } else { + throw err; + } + } + } + const oldoid = httpRemote.refs.get(fullRemoteRef) || "0000000000000000000000000000000000000000"; + if (onPrePush) { + const hookCancel = await onPrePush({ + remote, + url, + localRef: { ref: _delete ? "(delete)" : fullRef, oid }, + remoteRef: { ref: fullRemoteRef, oid: oldoid } + }); + if (!hookCancel) throw new UserCanceledError(); + } + const thinPack = !httpRemote.capabilities.has("no-thin"); + let objects = /* @__PURE__ */ new Set(); + if (!_delete) { + const finish = [...httpRemote.refs.values()]; + let skipObjects = /* @__PURE__ */ new Set(); + if (oldoid !== "0000000000000000000000000000000000000000") { + const mergebase = await _findMergeBase({ + fs, + cache, + gitdir, + oids: [oid, oldoid] + }); + for (const oid2 of mergebase) finish.push(oid2); + if (thinPack) { + skipObjects = await listObjects({ fs, cache, gitdir, oids: mergebase }); + } + } + if (!finish.includes(oid)) { + const commits = await listCommitsAndTags({ + fs, + cache, + gitdir, + start: [oid], + finish + }); + objects = await listObjects({ fs, cache, gitdir, oids: commits }); + } + if (thinPack) { + try { + const ref2 = await GitRefManager.resolve({ + fs, + gitdir, + ref: `refs/remotes/${remote}/HEAD`, + depth: 2 + }); + const { oid: oid2 } = await GitRefManager.resolveAgainstMap({ + ref: ref2.replace(`refs/remotes/${remote}/`, ""), + fullref: ref2, + map: httpRemote.refs + }); + const oids = [oid2]; + for (const oid3 of await listObjects({ fs, cache, gitdir, oids })) { + skipObjects.add(oid3); + } + } catch (e) { + } + for (const oid2 of skipObjects) { + objects.delete(oid2); + } + } + if (oid === oldoid) force = true; + if (!force) { + if (fullRef.startsWith("refs/tags") && oldoid !== "0000000000000000000000000000000000000000") { + throw new PushRejectedError("tag-exists"); + } + if (oid !== "0000000000000000000000000000000000000000" && oldoid !== "0000000000000000000000000000000000000000" && !await _isDescendent({ + fs, + cache, + gitdir, + oid, + ancestor: oldoid, + depth: -1 + })) { + throw new PushRejectedError("not-fast-forward"); + } + } + } + const capabilities = filterCapabilities( + [...httpRemote.capabilities], + ["report-status", "side-band-64k", `agent=${pkg.agent}`] + ); + const packstream1 = await writeReceivePackRequest({ + capabilities, + triplets: [{ oldoid, oid, fullRef: fullRemoteRef }] + }); + const packstream2 = _delete ? [] : await _pack({ + fs, + cache, + gitdir, + oids: [...objects] + }); + const res = await GitRemoteHTTP2.connect({ + http, + onProgress, + corsProxy, + service: "git-receive-pack", + url, + auth, + headers, + body: [...packstream1, ...packstream2] + }); + const { packfile, progress } = await GitSideBand.demux(res.body); + if (onMessage) { + const lines = splitLines(progress); + forAwait(lines, async (line) => { + await onMessage(line); + }); + } + const result = await parseReceivePackResponse(packfile); + if (res.headers) { + result.headers = res.headers; + } + if (remote && result.ok && result.refs[fullRemoteRef].ok && !fullRef.startsWith("refs/tags")) { + const ref2 = `refs/remotes/${remote}/${fullRemoteRef.replace( + "refs/heads", + "" + )}`; + if (_delete) { + await GitRefManager.deleteRef({ fs, gitdir, ref: ref2 }); + } else { + await GitRefManager.writeRef({ fs, gitdir, ref: ref2, value: oid }); + } + } + if (result.ok && Object.values(result.refs).every((result2) => result2.ok)) { + return result; + } else { + const prettyDetails = Object.entries(result.refs).filter(([k, v]) => !v.ok).map(([k, v]) => ` + - ${k}: ${v.error}`).join(""); + throw new GitPushError(prettyDetails, result); + } +} +async function push({ + fs, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPrePush, + dir, + gitdir = join(dir, ".git"), + ref, + remoteRef, + remote = "origin", + url, + force = false, + delete: _delete = false, + corsProxy, + headers = {}, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("http", http); + assertParameter("gitdir", gitdir); + return await _push({ + fs: new FileSystem(fs), + cache, + http, + onProgress, + onMessage, + onAuth, + onAuthSuccess, + onAuthFailure, + onPrePush, + gitdir, + ref, + remoteRef, + remote, + url, + force, + delete: _delete, + corsProxy, + headers + }); + } catch (err) { + err.caller = "git.push"; + throw err; + } +} +async function resolveBlob({ fs, cache, gitdir, oid }) { + const { type, object } = await _readObject({ fs, cache, gitdir, oid }); + if (type === "tag") { + oid = GitAnnotatedTag.from(object).parse().object; + return resolveBlob({ fs, cache, gitdir, oid }); + } + if (type !== "blob") { + throw new ObjectTypeError(oid, type, "blob"); + } + return { oid, blob: new Uint8Array(object) }; +} +async function _readBlob({ + fs, + cache, + gitdir, + oid, + filepath = void 0 +}) { + if (filepath !== void 0) { + oid = await resolveFilepath({ fs, cache, gitdir, oid, filepath }); + } + const blob = await resolveBlob({ + fs, + cache, + gitdir, + oid + }); + return blob; +} +async function readBlob({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + filepath, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + return await _readBlob({ + fs: new FileSystem(fs), + cache, + gitdir, + oid, + filepath + }); + } catch (err) { + err.caller = "git.readBlob"; + throw err; + } +} +async function readCommit({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + return await _readCommit({ + fs: new FileSystem(fs), + cache, + gitdir, + oid + }); + } catch (err) { + err.caller = "git.readCommit"; + throw err; + } +} +async function _readNote({ + fs, + cache, + gitdir, + ref = "refs/notes/commits", + oid +}) { + const parent = await GitRefManager.resolve({ gitdir, fs, ref }); + const { blob } = await _readBlob({ + fs, + cache, + gitdir, + oid: parent, + filepath: oid + }); + return blob; +} +async function readNote({ + fs, + dir, + gitdir = join(dir, ".git"), + ref = "refs/notes/commits", + oid, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + assertParameter("oid", oid); + return await _readNote({ + fs: new FileSystem(fs), + cache, + gitdir, + ref, + oid + }); + } catch (err) { + err.caller = "git.readNote"; + throw err; + } +} +async function readObject({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + oid, + format = "parsed", + filepath = void 0, + encoding = void 0, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + const fs = new FileSystem(_fs); + if (filepath !== void 0) { + oid = await resolveFilepath({ + fs, + cache, + gitdir, + oid, + filepath + }); + } + const _format = format === "parsed" ? "content" : format; + const result = await _readObject({ + fs, + cache, + gitdir, + oid, + format: _format + }); + result.oid = oid; + if (format === "parsed") { + result.format = "parsed"; + switch (result.type) { + case "commit": + result.object = GitCommit.from(result.object).parse(); + break; + case "tree": + result.object = GitTree.from(result.object).entries(); + break; + case "blob": + if (encoding) { + result.object = result.object.toString(encoding); + } else { + result.object = new Uint8Array(result.object); + result.format = "content"; + } + break; + case "tag": + result.object = GitAnnotatedTag.from(result.object).parse(); + break; + default: + throw new ObjectTypeError( + result.oid, + result.type, + "blob|commit|tag|tree" + ); + } + } else if (result.format === "deflated" || result.format === "wrapped") { + result.type = result.format; + } + return result; + } catch (err) { + err.caller = "git.readObject"; + throw err; + } +} +async function _readTag({ fs, cache, gitdir, oid }) { + const { type, object } = await _readObject({ + fs, + cache, + gitdir, + oid, + format: "content" + }); + if (type !== "tag") { + throw new ObjectTypeError(oid, type, "tag"); + } + const tag2 = GitAnnotatedTag.from(object); + const result = { + oid, + tag: tag2.parse(), + payload: tag2.payload() + }; + return result; +} +async function readTag({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + return await _readTag({ + fs: new FileSystem(fs), + cache, + gitdir, + oid + }); + } catch (err) { + err.caller = "git.readTag"; + throw err; + } +} +async function readTree({ + fs, + dir, + gitdir = join(dir, ".git"), + oid, + filepath = void 0, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + return await _readTree({ + fs: new FileSystem(fs), + cache, + gitdir, + oid, + filepath + }); + } catch (err) { + err.caller = "git.readTree"; + throw err; + } +} +async function remove({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + filepath, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + await GitIndexManager.acquire( + { fs: new FileSystem(_fs), gitdir, cache }, + async function(index2) { + index2.delete({ filepath }); + } + ); + } catch (err) { + err.caller = "git.remove"; + throw err; + } +} +async function _removeNote({ + fs, + cache, + onSign, + gitdir, + ref = "refs/notes/commits", + oid, + author, + committer, + signingKey +}) { + let parent; + try { + parent = await GitRefManager.resolve({ gitdir, fs, ref }); + } catch (err) { + if (!(err instanceof NotFoundError)) { + throw err; + } + } + const result = await _readTree({ + fs, + gitdir, + oid: parent || "4b825dc642cb6eb9a060e54bf8d69288fbee4904" + }); + let tree = result.tree; + tree = tree.filter((entry) => entry.path !== oid); + const treeOid = await _writeTree({ + fs, + gitdir, + tree + }); + const commitOid = await _commit({ + fs, + cache, + onSign, + gitdir, + ref, + tree: treeOid, + parent: parent && [parent], + message: `Note removed by 'isomorphic-git removeNote' +`, + author, + committer, + signingKey + }); + return commitOid; +} +async function removeNote({ + fs: _fs, + onSign, + dir, + gitdir = join(dir, ".git"), + ref = "refs/notes/commits", + oid, + author: _author, + committer: _committer, + signingKey, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("oid", oid); + const fs = new FileSystem(_fs); + const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); + if (!author) throw new MissingNameError("author"); + const committer = await normalizeCommitterObject({ + fs, + gitdir, + author, + committer: _committer + }); + if (!committer) throw new MissingNameError("committer"); + return await _removeNote({ + fs, + cache, + onSign, + gitdir, + ref, + oid, + author, + committer, + signingKey + }); + } catch (err) { + err.caller = "git.removeNote"; + throw err; + } +} +async function _renameBranch({ + fs, + gitdir, + oldref, + ref, + checkout: checkout2 = false +}) { + if (ref !== import_clean_git_ref.default.clean(ref)) { + throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); + } + if (oldref !== import_clean_git_ref.default.clean(oldref)) { + throw new InvalidRefNameError(oldref, import_clean_git_ref.default.clean(oldref)); + } + const fulloldref = `refs/heads/${oldref}`; + const fullnewref = `refs/heads/${ref}`; + const newexist = await GitRefManager.exists({ fs, gitdir, ref: fullnewref }); + if (newexist) { + throw new AlreadyExistsError("branch", ref, false); + } + const value = await GitRefManager.resolve({ + fs, + gitdir, + ref: fulloldref, + depth: 1 + }); + await GitRefManager.writeRef({ fs, gitdir, ref: fullnewref, value }); + await GitRefManager.deleteRef({ fs, gitdir, ref: fulloldref }); + const fullCurrentBranchRef = await _currentBranch({ + fs, + gitdir, + fullname: true + }); + const isCurrentBranch = fullCurrentBranchRef === fulloldref; + if (checkout2 || isCurrentBranch) { + await GitRefManager.writeSymbolicRef({ + fs, + gitdir, + ref: "HEAD", + value: fullnewref + }); + } +} +async function renameBranch({ + fs, + dir, + gitdir = join(dir, ".git"), + ref, + oldref, + checkout: checkout2 = false +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + assertParameter("oldref", oldref); + return await _renameBranch({ + fs: new FileSystem(fs), + gitdir, + ref, + oldref, + checkout: checkout2 + }); + } catch (err) { + err.caller = "git.renameBranch"; + throw err; + } +} +async function hashObject$1({ gitdir, type, object }) { + return shasum(GitObject.wrap({ type, object })); +} +async function resetIndex({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + filepath, + ref, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + const fs = new FileSystem(_fs); + let oid; + let workdirOid; + try { + oid = await GitRefManager.resolve({ fs, gitdir, ref: ref || "HEAD" }); + } catch (e) { + if (ref) { + throw e; + } + } + if (oid) { + try { + oid = await resolveFilepath({ + fs, + cache, + gitdir, + oid, + filepath + }); + } catch (e) { + oid = null; + } + } + let stats = { + ctime: /* @__PURE__ */ new Date(0), + mtime: /* @__PURE__ */ new Date(0), + dev: 0, + ino: 0, + mode: 0, + uid: 0, + gid: 0, + size: 0 + }; + const object = dir && await fs.read(join(dir, filepath)); + if (object) { + workdirOid = await hashObject$1({ + gitdir, + type: "blob", + object + }); + if (oid === workdirOid) { + stats = await fs.lstat(join(dir, filepath)); + } + } + await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + index2.delete({ filepath }); + if (oid) { + index2.insert({ filepath, stats, oid }); + } + }); + } catch (err) { + err.caller = "git.reset"; + throw err; + } +} +async function resolveRef({ + fs, + dir, + gitdir = join(dir, ".git"), + ref, + depth +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + const oid = await GitRefManager.resolve({ + fs: new FileSystem(fs), + gitdir, + ref, + depth + }); + return oid; + } catch (err) { + err.caller = "git.resolveRef"; + throw err; + } +} +async function setConfig({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + path: path2, + value, + append: append3 = false +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("path", path2); + const fs = new FileSystem(_fs); + const config = await GitConfigManager.get({ fs, gitdir }); + if (append3) { + await config.append(path2, value); + } else { + await config.set(path2, value); + } + await GitConfigManager.save({ fs, gitdir, config }); + } catch (err) { + err.caller = "git.setConfig"; + throw err; + } +} +async function status({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + filepath, + cache = {} +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + const fs = new FileSystem(_fs); + const ignored = await GitIgnoreManager.isIgnored({ + fs, + gitdir, + dir, + filepath + }); + if (ignored) { + return "ignored"; + } + const headTree = await getHeadTree({ fs, cache, gitdir }); + const treeOid = await getOidAtPath({ + fs, + cache, + gitdir, + tree: headTree, + path: filepath + }); + const indexEntry = await GitIndexManager.acquire( + { fs, gitdir, cache }, + async function(index2) { + for (const entry of index2) { + if (entry.path === filepath) return entry; + } + return null; + } + ); + const stats = await fs.lstat(join(dir, filepath)); + const H = treeOid !== null; + const I = indexEntry !== null; + const W = stats !== null; + const getWorkdirOid = async () => { + if (I && !compareStats(indexEntry, stats)) { + return indexEntry.oid; + } else { + const object = await fs.read(join(dir, filepath)); + const workdirOid = await hashObject$1({ + gitdir, + type: "blob", + object + }); + if (I && indexEntry.oid === workdirOid) { + if (stats.size !== -1) { + GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + index2.insert({ filepath, stats, oid: workdirOid }); + }); + } + } + return workdirOid; + } + }; + if (!H && !W && !I) return "absent"; + if (!H && !W && I) return "*absent"; + if (!H && W && !I) return "*added"; + if (!H && W && I) { + const workdirOid = await getWorkdirOid(); + return workdirOid === indexEntry.oid ? "added" : "*added"; + } + if (H && !W && !I) return "deleted"; + if (H && !W && I) { + return treeOid === indexEntry.oid ? "*deleted" : "*deleted"; + } + if (H && W && !I) { + const workdirOid = await getWorkdirOid(); + return workdirOid === treeOid ? "*undeleted" : "*undeletemodified"; + } + if (H && W && I) { + const workdirOid = await getWorkdirOid(); + if (workdirOid === treeOid) { + return workdirOid === indexEntry.oid ? "unmodified" : "*unmodified"; + } else { + return workdirOid === indexEntry.oid ? "modified" : "*modified"; + } + } + } catch (err) { + err.caller = "git.status"; + throw err; + } +} +async function getOidAtPath({ fs, cache, gitdir, tree, path: path2 }) { + if (typeof path2 === "string") path2 = path2.split("/"); + const dirname3 = path2.shift(); + for (const entry of tree) { + if (entry.path === dirname3) { + if (path2.length === 0) { + return entry.oid; + } + const { type, object } = await _readObject({ + fs, + cache, + gitdir, + oid: entry.oid + }); + if (type === "tree") { + const tree2 = GitTree.from(object); + return getOidAtPath({ fs, cache, gitdir, tree: tree2, path: path2 }); + } + if (type === "blob") { + throw new ObjectTypeError(entry.oid, type, "blob", path2.join("/")); + } + } + } + return null; +} +async function getHeadTree({ fs, cache, gitdir }) { + let oid; + try { + oid = await GitRefManager.resolve({ fs, gitdir, ref: "HEAD" }); + } catch (e) { + if (e instanceof NotFoundError) { + return []; + } + } + const { tree } = await _readTree({ fs, cache, gitdir, oid }); + return tree; +} +async function statusMatrix({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + ref = "HEAD", + filepaths = ["."], + filter, + cache = {}, + ignored: shouldIgnore = false +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + const fs = new FileSystem(_fs); + return await _walk({ + fs, + cache, + dir, + gitdir, + trees: [TREE({ ref }), WORKDIR(), STAGE()], + map: async function(filepath, [head, workdir, stage]) { + if (!head && !stage && workdir) { + if (!shouldIgnore) { + const isIgnored2 = await GitIgnoreManager.isIgnored({ + fs, + dir, + filepath + }); + if (isIgnored2) { + return null; + } + } + } + if (!filepaths.some((base) => worthWalking(filepath, base))) { + return null; + } + if (filter) { + if (!filter(filepath)) return; + } + const [headType, workdirType, stageType] = await Promise.all([ + head && head.type(), + workdir && workdir.type(), + stage && stage.type() + ]); + const isBlob = [headType, workdirType, stageType].includes("blob"); + if ((headType === "tree" || headType === "special") && !isBlob) return; + if (headType === "commit") return null; + if ((workdirType === "tree" || workdirType === "special") && !isBlob) + return; + if (stageType === "commit") return null; + if ((stageType === "tree" || stageType === "special") && !isBlob) return; + const headOid = headType === "blob" ? await head.oid() : void 0; + const stageOid = stageType === "blob" ? await stage.oid() : void 0; + let workdirOid; + if (headType !== "blob" && workdirType === "blob" && stageType !== "blob") { + workdirOid = "42"; + } else if (workdirType === "blob") { + workdirOid = await workdir.oid(); + } + const entry = [void 0, headOid, workdirOid, stageOid]; + const result = entry.map((value) => entry.indexOf(value)); + result.shift(); + return [filepath, ...result]; + } + }); + } catch (err) { + err.caller = "git.statusMatrix"; + throw err; + } +} +async function tag({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + ref, + object, + force = false +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + const fs = new FileSystem(_fs); + if (ref === void 0) { + throw new MissingParameterError("ref"); + } + ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; + const value = await GitRefManager.resolve({ + fs, + gitdir, + ref: object || "HEAD" + }); + if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { + throw new AlreadyExistsError("tag", ref); + } + await GitRefManager.writeRef({ fs, gitdir, ref, value }); + } catch (err) { + err.caller = "git.tag"; + throw err; + } +} +async function updateIndex({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + cache = {}, + filepath, + oid, + mode, + add: add2, + remove: remove3, + force +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("filepath", filepath); + const fs = new FileSystem(_fs); + if (remove3) { + return await GitIndexManager.acquire( + { fs, gitdir, cache }, + async function(index2) { + let fileStats2; + if (!force) { + fileStats2 = await fs.lstat(join(dir, filepath)); + if (fileStats2) { + if (fileStats2.isDirectory()) { + throw new InvalidFilepathError("directory"); + } + return; + } + } + if (index2.has({ filepath })) { + index2.delete({ + filepath + }); + } + } + ); + } + let fileStats; + if (!oid) { + fileStats = await fs.lstat(join(dir, filepath)); + if (!fileStats) { + throw new NotFoundError( + `file at "${filepath}" on disk and "remove" not set` + ); + } + if (fileStats.isDirectory()) { + throw new InvalidFilepathError("directory"); + } + } + return await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { + if (!add2 && !index2.has({ filepath })) { + throw new NotFoundError( + `file at "${filepath}" in index and "add" not set` + ); + } + let stats = { + ctime: /* @__PURE__ */ new Date(0), + mtime: /* @__PURE__ */ new Date(0), + dev: 0, + ino: 0, + mode, + uid: 0, + gid: 0, + size: 0 + }; + if (!oid) { + stats = fileStats; + const object = stats.isSymbolicLink() ? await fs.readlink(join(dir, filepath)) : await fs.read(join(dir, filepath)); + oid = await _writeObject({ + fs, + gitdir, + type: "blob", + format: "content", + object + }); + } + index2.insert({ + filepath, + oid, + stats + }); + return oid; + }); + } catch (err) { + err.caller = "git.updateIndex"; + throw err; + } +} +function version() { + try { + return pkg.version; + } catch (err) { + err.caller = "git.version"; + throw err; + } +} +async function walk({ + fs, + dir, + gitdir = join(dir, ".git"), + trees, + map, + reduce, + iterate, + cache = {} +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("trees", trees); + return await _walk({ + fs: new FileSystem(fs), + cache, + dir, + gitdir, + trees, + map, + reduce, + iterate + }); + } catch (err) { + err.caller = "git.walk"; + throw err; + } +} +async function writeBlob({ fs, dir, gitdir = join(dir, ".git"), blob }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("blob", blob); + return await _writeObject({ + fs: new FileSystem(fs), + gitdir, + type: "blob", + object: blob, + format: "content" + }); + } catch (err) { + err.caller = "git.writeBlob"; + throw err; + } +} +async function _writeCommit({ fs, gitdir, commit: commit2 }) { + const object = GitCommit.from(commit2).toObject(); + const oid = await _writeObject({ + fs, + gitdir, + type: "commit", + object, + format: "content" + }); + return oid; +} +async function writeCommit({ + fs, + dir, + gitdir = join(dir, ".git"), + commit: commit2 +}) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("commit", commit2); + return await _writeCommit({ + fs: new FileSystem(fs), + gitdir, + commit: commit2 + }); + } catch (err) { + err.caller = "git.writeCommit"; + throw err; + } +} +async function writeObject({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + type, + object, + format = "parsed", + oid, + encoding = void 0 +}) { + try { + const fs = new FileSystem(_fs); + if (format === "parsed") { + switch (type) { + case "commit": + object = GitCommit.from(object).toObject(); + break; + case "tree": + object = GitTree.from(object).toObject(); + break; + case "blob": + object = Buffer.from(object, encoding); + break; + case "tag": + object = GitAnnotatedTag.from(object).toObject(); + break; + default: + throw new ObjectTypeError(oid || "", type, "blob|commit|tag|tree"); + } + format = "content"; + } + oid = await _writeObject({ + fs, + gitdir, + type, + object, + oid, + format + }); + return oid; + } catch (err) { + err.caller = "git.writeObject"; + throw err; + } +} +async function writeRef({ + fs: _fs, + dir, + gitdir = join(dir, ".git"), + ref, + value, + force = false, + symbolic = false +}) { + try { + assertParameter("fs", _fs); + assertParameter("gitdir", gitdir); + assertParameter("ref", ref); + assertParameter("value", value); + const fs = new FileSystem(_fs); + if (ref !== import_clean_git_ref.default.clean(ref)) { + throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); + } + if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { + throw new AlreadyExistsError("ref", ref); + } + if (symbolic) { + await GitRefManager.writeSymbolicRef({ + fs, + gitdir, + ref, + value + }); + } else { + value = await GitRefManager.resolve({ + fs, + gitdir, + ref: value + }); + await GitRefManager.writeRef({ + fs, + gitdir, + ref, + value + }); + } + } catch (err) { + err.caller = "git.writeRef"; + throw err; + } +} +async function _writeTag({ fs, gitdir, tag: tag2 }) { + const object = GitAnnotatedTag.from(tag2).toObject(); + const oid = await _writeObject({ + fs, + gitdir, + type: "tag", + object, + format: "content" + }); + return oid; +} +async function writeTag({ fs, dir, gitdir = join(dir, ".git"), tag: tag2 }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("tag", tag2); + return await _writeTag({ + fs: new FileSystem(fs), + gitdir, + tag: tag2 + }); + } catch (err) { + err.caller = "git.writeTag"; + throw err; + } +} +async function writeTree({ fs, dir, gitdir = join(dir, ".git"), tree }) { + try { + assertParameter("fs", fs); + assertParameter("gitdir", gitdir); + assertParameter("tree", tree); + return await _writeTree({ + fs: new FileSystem(fs), + gitdir, + tree + }); + } catch (err) { + err.caller = "git.writeTree"; + throw err; + } +} +var index = { + Errors, + STAGE, + TREE, + WORKDIR, + add, + abortMerge, + addNote, + addRemote, + annotatedTag, + branch, + checkout, + clone, + commit, + getConfig, + getConfigAll, + setConfig, + currentBranch, + deleteBranch, + deleteRef, + deleteRemote, + deleteTag, + expandOid, + expandRef, + fastForward, + fetch, + findMergeBase, + findRoot, + getRemoteInfo, + getRemoteInfo2, + hashBlob, + indexPack, + init, + isDescendent, + isIgnored, + listBranches, + listFiles, + listNotes, + listRemotes, + listServerRefs, + listTags, + log, + merge, + packObjects, + pull, + push, + readBlob, + readCommit, + readNote, + readObject, + readTag, + readTree, + remove, + removeNote, + renameBranch, + resetIndex, + updateIndex, + resolveRef, + status, + statusMatrix, + tag, + version, + walk, + writeBlob, + writeCommit, + writeObject, + writeRef, + writeTag, + writeTree +}; +var isomorphic_git_default = index; + +// src/main.ts +var import_obsidian31 = require("obsidian"); + +// src/lineAuthor/lineAuthorIntegration.ts +init_polyfill_buffer(); +var import_obsidian12 = require("obsidian"); + +// src/gitManager/simpleGit.ts +init_polyfill_buffer(); +var import_child_process2 = require("child_process"); +var import_debug2 = __toESM(require_browser()); +var import_obsidian4 = require("obsidian"); +var path = __toESM(require("path")); +var import_path = require("path"); + +// node_modules/.pnpm/simple-git@https+++codeload.github.com+Vinzent03+git-js+tar.gz+6b9a2d899bc8256e38a1d6f0b8a881_rku6lxlylrt42756swupwur2wa/node_modules/simple-git/dist/esm/index.js +init_polyfill_buffer(); +var import_file_exists = __toESM(require_dist(), 1); +var import_debug = __toESM(require_browser(), 1); +var import_child_process = require("child_process"); +var import_promise_deferred = __toESM(require_dist2(), 1); +var import_promise_deferred2 = __toESM(require_dist2(), 1); +var __defProp2 = Object.defineProperty; +var __defProps = Object.defineProperties; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropDescs = Object.getOwnPropertyDescriptors; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __defNormalProp2 = (obj, key2, value) => key2 in obj ? __defProp2(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp2.call(b, prop)) + __defNormalProp2(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp2(a, prop, b[prop]); + } + return a; +}; +var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); +var __markAsModule = (target) => __defProp2(target, "__esModule", { value: true }); +var __esm2 = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; +}; +var __commonJS2 = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, copyDefault, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key2 of __getOwnPropNames2(module2)) + if (!__hasOwnProp2.call(target, key2) && (copyDefault || key2 !== "default")) + __defProp2(target, key2, { get: () => module2[key2], enumerable: !(desc = __getOwnPropDesc2(module2, key2)) || desc.enumerable }); + } + return target; +}; +var __toCommonJS2 = /* @__PURE__ */ ((cache) => { + return (module2, temp) => { + return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp); + }; +})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0); +var __async = (__this, __arguments, generator) => { + return new Promise((resolve2, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; +var GitError; +var init_git_error = __esm2({ + "src/lib/errors/git-error.ts"() { + GitError = class extends Error { + constructor(task, message) { + super(message); + this.task = task; + Object.setPrototypeOf(this, new.target.prototype); + } + }; + } +}); +var GitResponseError; +var init_git_response_error = __esm2({ + "src/lib/errors/git-response-error.ts"() { + init_git_error(); + GitResponseError = class extends GitError { + constructor(git, message) { + super(void 0, message || String(git)); + this.git = git; + } + }; + } +}); +var TaskConfigurationError; +var init_task_configuration_error = __esm2({ + "src/lib/errors/task-configuration-error.ts"() { + init_git_error(); + TaskConfigurationError = class extends GitError { + constructor(message) { + super(void 0, message); + } + }; + } +}); +function asFunction(source) { + return typeof source === "function" ? source : NOOP; +} +function isUserFunction(source) { + return typeof source === "function" && source !== NOOP; +} +function splitOn(input, char) { + const index2 = input.indexOf(char); + if (index2 <= 0) { + return [input, ""]; + } + return [input.substr(0, index2), input.substr(index2 + 1)]; +} +function first(input, offset = 0) { + return isArrayLike(input) && input.length > offset ? input[offset] : void 0; +} +function last(input, offset = 0) { + if (isArrayLike(input) && input.length > offset) { + return input[input.length - 1 - offset]; + } +} +function isArrayLike(input) { + return !!(input && typeof input.length === "number"); +} +function toLinesWithContent(input = "", trimmed2 = true, separator2 = "\n") { + return input.split(separator2).reduce((output, line) => { + const lineContent = trimmed2 ? line.trim() : line; + if (lineContent) { + output.push(lineContent); + } + return output; + }, []); +} +function forEachLineWithContent(input, callback) { + return toLinesWithContent(input, true).map((line) => callback(line)); +} +function folderExists(path2) { + return (0, import_file_exists.exists)(path2, import_file_exists.FOLDER); +} +function append(target, item) { + if (Array.isArray(target)) { + if (!target.includes(item)) { + target.push(item); + } + } else { + target.add(item); + } + return item; +} +function including(target, item) { + if (Array.isArray(target) && !target.includes(item)) { + target.push(item); + } + return target; +} +function remove2(target, item) { + if (Array.isArray(target)) { + const index2 = target.indexOf(item); + if (index2 >= 0) { + target.splice(index2, 1); + } + } else { + target.delete(item); + } + return item; +} +function asArray(source) { + return Array.isArray(source) ? source : [source]; +} +function asStringArray(source) { + return asArray(source).map(String); +} +function asNumber(source, onNaN = 0) { + if (source == null) { + return onNaN; + } + const num2 = parseInt(source, 10); + return isNaN(num2) ? onNaN : num2; +} +function prefixedArray(input, prefix) { + const output = []; + for (let i = 0, max = input.length; i < max; i++) { + output.push(prefix, input[i]); + } + return output; +} +function bufferToString(input) { + return (Array.isArray(input) ? Buffer.concat(input) : input).toString("utf-8"); +} +function pick(source, properties) { + return Object.assign({}, ...properties.map((property) => property in source ? { [property]: source[property] } : {})); +} +function delay(duration = 0) { + return new Promise((done) => setTimeout(done, duration)); +} +var NULL; +var NOOP; +var objectToString; +var init_util = __esm2({ + "src/lib/utils/util.ts"() { + NULL = "\0"; + NOOP = () => { + }; + objectToString = Object.prototype.toString.call.bind(Object.prototype.toString); + } +}); +function filterType(input, filter, def) { + if (filter(input)) { + return input; + } + return arguments.length > 2 ? def : void 0; +} +function filterPrimitives(input, omit) { + return /number|string|boolean/.test(typeof input) && (!omit || !omit.includes(typeof input)); +} +function filterPlainObject(input) { + return !!input && objectToString(input) === "[object Object]"; +} +function filterFunction(input) { + return typeof input === "function"; +} +var filterArray; +var filterString; +var filterStringArray; +var filterStringOrStringArray; +var filterHasLength; +var init_argument_filters = __esm2({ + "src/lib/utils/argument-filters.ts"() { + init_util(); + filterArray = (input) => { + return Array.isArray(input); + }; + filterString = (input) => { + return typeof input === "string"; + }; + filterStringArray = (input) => { + return Array.isArray(input) && input.every(filterString); + }; + filterStringOrStringArray = (input) => { + return filterString(input) || Array.isArray(input) && input.every(filterString); + }; + filterHasLength = (input) => { + if (input == null || "number|boolean|function".includes(typeof input)) { + return false; + } + return Array.isArray(input) || typeof input === "string" || typeof input.length === "number"; + }; + } +}); +var ExitCodes; +var init_exit_codes = __esm2({ + "src/lib/utils/exit-codes.ts"() { + ExitCodes = /* @__PURE__ */ ((ExitCodes2) => { + ExitCodes2[ExitCodes2["SUCCESS"] = 0] = "SUCCESS"; + ExitCodes2[ExitCodes2["ERROR"] = 1] = "ERROR"; + ExitCodes2[ExitCodes2["NOT_FOUND"] = -2] = "NOT_FOUND"; + ExitCodes2[ExitCodes2["UNCLEAN"] = 128] = "UNCLEAN"; + return ExitCodes2; + })(ExitCodes || {}); + } +}); +var GitOutputStreams; +var init_git_output_streams = __esm2({ + "src/lib/utils/git-output-streams.ts"() { + GitOutputStreams = class { + constructor(stdOut, stdErr) { + this.stdOut = stdOut; + this.stdErr = stdErr; + } + asStrings() { + return new GitOutputStreams(this.stdOut.toString("utf8"), this.stdErr.toString("utf8")); + } + }; + } +}); +var LineParser; +var RemoteLineParser; +var init_line_parser = __esm2({ + "src/lib/utils/line-parser.ts"() { + LineParser = class { + constructor(regExp, useMatches) { + this.matches = []; + this.parse = (line, target) => { + this.resetMatches(); + if (!this._regExp.every((reg, index2) => this.addMatch(reg, index2, line(index2)))) { + return false; + } + return this.useMatches(target, this.prepareMatches()) !== false; + }; + this._regExp = Array.isArray(regExp) ? regExp : [regExp]; + if (useMatches) { + this.useMatches = useMatches; + } + } + useMatches(target, match) { + throw new Error(`LineParser:useMatches not implemented`); + } + resetMatches() { + this.matches.length = 0; + } + prepareMatches() { + return this.matches; + } + addMatch(reg, index2, line) { + const matched = line && reg.exec(line); + if (matched) { + this.pushMatch(index2, matched); + } + return !!matched; + } + pushMatch(_index, matched) { + this.matches.push(...matched.slice(1)); + } + }; + RemoteLineParser = class extends LineParser { + addMatch(reg, index2, line) { + return /^remote:\s/.test(String(line)) && super.addMatch(reg, index2, line); + } + pushMatch(index2, matched) { + if (index2 > 0 || matched.length > 1) { + super.pushMatch(index2, matched); + } + } + }; + } +}); +function createInstanceConfig(...options) { + const baseDir = process.cwd(); + const config = Object.assign(__spreadValues({ baseDir }, defaultOptions), ...options.filter((o) => typeof o === "object" && o)); + config.baseDir = config.baseDir || baseDir; + config.trimmed = config.trimmed === true; + return config; +} +var defaultOptions; +var init_simple_git_options = __esm2({ + "src/lib/utils/simple-git-options.ts"() { + defaultOptions = { + binary: "git", + maxConcurrentProcesses: 5, + config: [], + trimmed: false + }; + } +}); +function appendTaskOptions(options, commands2 = []) { + if (!filterPlainObject(options)) { + return commands2; + } + return Object.keys(options).reduce((commands22, key2) => { + const value = options[key2]; + if (filterPrimitives(value, ["boolean"])) { + commands22.push(key2 + "=" + value); + } else { + commands22.push(key2); + } + return commands22; + }, commands2); +} +function getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) { + const command = []; + for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) { + if ("string|number".includes(typeof args[i])) { + command.push(String(args[i])); + } + } + appendTaskOptions(trailingOptionsArgument(args), command); + if (!objectOnly) { + command.push(...trailingArrayArgument(args)); + } + return command; +} +function trailingArrayArgument(args) { + const hasTrailingCallback = typeof last(args) === "function"; + return filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []); +} +function trailingOptionsArgument(args) { + const hasTrailingCallback = filterFunction(last(args)); + return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject); +} +function trailingFunctionArgument(args, includeNoop = true) { + const callback = asFunction(last(args)); + return includeNoop || isUserFunction(callback) ? callback : void 0; +} +var init_task_options = __esm2({ + "src/lib/utils/task-options.ts"() { + init_argument_filters(); + init_util(); + } +}); +function callTaskParser(parser3, streams) { + return parser3(streams.stdOut, streams.stdErr); +} +function parseStringResponse(result, parsers12, texts, trim = true) { + asArray(texts).forEach((text2) => { + for (let lines = toLinesWithContent(text2, trim), i = 0, max = lines.length; i < max; i++) { + const line = (offset = 0) => { + if (i + offset >= max) { + return; + } + return lines[i + offset]; + }; + parsers12.some(({ parse: parse2 }) => parse2(line, result)); + } + }); + return result; +} +var init_task_parser = __esm2({ + "src/lib/utils/task-parser.ts"() { + init_util(); + } +}); +var utils_exports = {}; +__export2(utils_exports, { + ExitCodes: () => ExitCodes, + GitOutputStreams: () => GitOutputStreams, + LineParser: () => LineParser, + NOOP: () => NOOP, + NULL: () => NULL, + RemoteLineParser: () => RemoteLineParser, + append: () => append, + appendTaskOptions: () => appendTaskOptions, + asArray: () => asArray, + asFunction: () => asFunction, + asNumber: () => asNumber, + asStringArray: () => asStringArray, + bufferToString: () => bufferToString, + callTaskParser: () => callTaskParser, + createInstanceConfig: () => createInstanceConfig, + delay: () => delay, + filterArray: () => filterArray, + filterFunction: () => filterFunction, + filterHasLength: () => filterHasLength, + filterPlainObject: () => filterPlainObject, + filterPrimitives: () => filterPrimitives, + filterString: () => filterString, + filterStringArray: () => filterStringArray, + filterStringOrStringArray: () => filterStringOrStringArray, + filterType: () => filterType, + first: () => first, + folderExists: () => folderExists, + forEachLineWithContent: () => forEachLineWithContent, + getTrailingOptions: () => getTrailingOptions, + including: () => including, + isUserFunction: () => isUserFunction, + last: () => last, + objectToString: () => objectToString, + parseStringResponse: () => parseStringResponse, + pick: () => pick, + prefixedArray: () => prefixedArray, + remove: () => remove2, + splitOn: () => splitOn, + toLinesWithContent: () => toLinesWithContent, + trailingFunctionArgument: () => trailingFunctionArgument, + trailingOptionsArgument: () => trailingOptionsArgument +}); +var init_utils = __esm2({ + "src/lib/utils/index.ts"() { + init_argument_filters(); + init_exit_codes(); + init_git_output_streams(); + init_line_parser(); + init_simple_git_options(); + init_task_options(); + init_task_parser(); + init_util(); + } +}); +var check_is_repo_exports = {}; +__export2(check_is_repo_exports, { + CheckRepoActions: () => CheckRepoActions, + checkIsBareRepoTask: () => checkIsBareRepoTask, + checkIsRepoRootTask: () => checkIsRepoRootTask, + checkIsRepoTask: () => checkIsRepoTask +}); +function checkIsRepoTask(action) { + switch (action) { + case "bare": + return checkIsBareRepoTask(); + case "root": + return checkIsRepoRootTask(); + } + const commands2 = ["rev-parse", "--is-inside-work-tree"]; + return { + commands: commands2, + format: "utf-8", + onError, + parser + }; +} +function checkIsRepoRootTask() { + const commands2 = ["rev-parse", "--git-dir"]; + return { + commands: commands2, + format: "utf-8", + onError, + parser(path2) { + return /^\.(git)?$/.test(path2.trim()); + } + }; +} +function checkIsBareRepoTask() { + const commands2 = ["rev-parse", "--is-bare-repository"]; + return { + commands: commands2, + format: "utf-8", + onError, + parser + }; +} +function isNotRepoMessage(error) { + return /(Not a git repository|Kein Git-Repository)/i.test(String(error)); +} +var CheckRepoActions; +var onError; +var parser; +var init_check_is_repo = __esm2({ + "src/lib/tasks/check-is-repo.ts"() { + init_utils(); + CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => { + CheckRepoActions2["BARE"] = "bare"; + CheckRepoActions2["IN_TREE"] = "tree"; + CheckRepoActions2["IS_REPO_ROOT"] = "root"; + return CheckRepoActions2; + })(CheckRepoActions || {}); + onError = ({ exitCode }, error, done, fail) => { + if (exitCode === 128 && isNotRepoMessage(error)) { + return done(Buffer.from("false")); + } + fail(error); + }; + parser = (text2) => { + return text2.trim() === "true"; + }; + } +}); +function cleanSummaryParser(dryRun, text2) { + const summary = new CleanResponse(dryRun); + const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp; + toLinesWithContent(text2).forEach((line) => { + const removed = line.replace(regexp, ""); + summary.paths.push(removed); + (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed); + }); + return summary; +} +var CleanResponse; +var removalRegexp; +var dryRunRemovalRegexp; +var isFolderRegexp; +var init_CleanSummary = __esm2({ + "src/lib/responses/CleanSummary.ts"() { + init_utils(); + CleanResponse = class { + constructor(dryRun) { + this.dryRun = dryRun; + this.paths = []; + this.files = []; + this.folders = []; + } + }; + removalRegexp = /^[a-z]+\s*/i; + dryRunRemovalRegexp = /^[a-z]+\s+[a-z]+\s*/i; + isFolderRegexp = /\/$/; + } +}); +var task_exports = {}; +__export2(task_exports, { + EMPTY_COMMANDS: () => EMPTY_COMMANDS, + adhocExecTask: () => adhocExecTask, + configurationErrorTask: () => configurationErrorTask, + isBufferTask: () => isBufferTask, + isEmptyTask: () => isEmptyTask, + straightThroughBufferTask: () => straightThroughBufferTask, + straightThroughStringTask: () => straightThroughStringTask +}); +function adhocExecTask(parser3) { + return { + commands: EMPTY_COMMANDS, + format: "empty", + parser: parser3 + }; +} +function configurationErrorTask(error) { + return { + commands: EMPTY_COMMANDS, + format: "empty", + parser() { + throw typeof error === "string" ? new TaskConfigurationError(error) : error; + } + }; +} +function straightThroughStringTask(commands2, trimmed2 = false) { + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return trimmed2 ? String(text2).trim() : text2; + } + }; +} +function straightThroughBufferTask(commands2) { + return { + commands: commands2, + format: "buffer", + parser(buffer2) { + return buffer2; + } + }; +} +function isBufferTask(task) { + return task.format === "buffer"; +} +function isEmptyTask(task) { + return task.format === "empty" || !task.commands.length; +} +var EMPTY_COMMANDS; +var init_task = __esm2({ + "src/lib/tasks/task.ts"() { + init_task_configuration_error(); + EMPTY_COMMANDS = []; + } +}); +var clean_exports = {}; +__export2(clean_exports, { + CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE, + CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED, + CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION, + CleanOptions: () => CleanOptions, + cleanTask: () => cleanTask, + cleanWithOptionsTask: () => cleanWithOptionsTask, + isCleanOptionsArray: () => isCleanOptionsArray +}); +function cleanWithOptionsTask(mode, customArgs) { + const { cleanMode, options, valid } = getCleanOptions(mode); + if (!cleanMode) { + return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED); + } + if (!valid.options) { + return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode)); + } + options.push(...customArgs); + if (options.some(isInteractiveMode)) { + return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE); + } + return cleanTask(cleanMode, options); +} +function cleanTask(mode, customArgs) { + const commands2 = ["clean", `-${mode}`, ...customArgs]; + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return cleanSummaryParser(mode === "n", text2); + } + }; +} +function isCleanOptionsArray(input) { + return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test)); +} +function getCleanOptions(input) { + let cleanMode; + let options = []; + let valid = { cleanMode: false, options: true }; + input.replace(/[^a-z]i/g, "").split("").forEach((char) => { + if (isCleanMode(char)) { + cleanMode = char; + valid.cleanMode = true; + } else { + valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`); + } + }); + return { + cleanMode, + options, + valid + }; +} +function isCleanMode(cleanMode) { + return cleanMode === "f" || cleanMode === "n"; +} +function isKnownOption(option) { + return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1)); +} +function isInteractiveMode(option) { + if (/^-[^\-]/.test(option)) { + return option.indexOf("i") > 0; + } + return option === "--interactive"; +} +var CONFIG_ERROR_INTERACTIVE_MODE; +var CONFIG_ERROR_MODE_REQUIRED; +var CONFIG_ERROR_UNKNOWN_OPTION; +var CleanOptions; +var CleanOptionValues; +var init_clean = __esm2({ + "src/lib/tasks/clean.ts"() { + init_CleanSummary(); + init_utils(); + init_task(); + CONFIG_ERROR_INTERACTIVE_MODE = "Git clean interactive mode is not supported"; + CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter ("n" or "f") is required'; + CONFIG_ERROR_UNKNOWN_OPTION = "Git clean unknown option found in: "; + CleanOptions = /* @__PURE__ */ ((CleanOptions2) => { + CleanOptions2["DRY_RUN"] = "n"; + CleanOptions2["FORCE"] = "f"; + CleanOptions2["IGNORED_INCLUDED"] = "x"; + CleanOptions2["IGNORED_ONLY"] = "X"; + CleanOptions2["EXCLUDING"] = "e"; + CleanOptions2["QUIET"] = "q"; + CleanOptions2["RECURSIVE"] = "d"; + return CleanOptions2; + })(CleanOptions || {}); + CleanOptionValues = /* @__PURE__ */ new Set([ + "i", + ...asStringArray(Object.values(CleanOptions)) + ]); + } +}); +function configListParser(text2) { + const config = new ConfigList(); + for (const item of configParser(text2)) { + config.addValue(item.file, String(item.key), item.value); + } + return config; +} +function configGetParser(text2, key2) { + let value = null; + const values = []; + const scopes = /* @__PURE__ */ new Map(); + for (const item of configParser(text2, key2)) { + if (item.key !== key2) { + continue; + } + values.push(value = item.value); + if (!scopes.has(item.file)) { + scopes.set(item.file, []); + } + scopes.get(item.file).push(value); + } + return { + key: key2, + paths: Array.from(scopes.keys()), + scopes, + value, + values + }; +} +function configFilePath(filePath) { + return filePath.replace(/^(file):/, ""); +} +function* configParser(text2, requestedKey = null) { + const lines = text2.split("\0"); + for (let i = 0, max = lines.length - 1; i < max; ) { + const file = configFilePath(lines[i++]); + let value = lines[i++]; + let key2 = requestedKey; + if (value.includes("\n")) { + const line = splitOn(value, "\n"); + key2 = line[0]; + value = line[1]; + } + yield { file, key: key2, value }; + } +} +var ConfigList; +var init_ConfigList = __esm2({ + "src/lib/responses/ConfigList.ts"() { + init_utils(); + ConfigList = class { + constructor() { + this.files = []; + this.values = /* @__PURE__ */ Object.create(null); + } + get all() { + if (!this._all) { + this._all = this.files.reduce((all, file) => { + return Object.assign(all, this.values[file]); + }, {}); + } + return this._all; + } + addFile(file) { + if (!(file in this.values)) { + const latest = last(this.files); + this.values[file] = latest ? Object.create(this.values[latest]) : {}; + this.files.push(file); + } + return this.values[file]; + } + addValue(file, key2, value) { + const values = this.addFile(file); + if (!values.hasOwnProperty(key2)) { + values[key2] = value; + } else if (Array.isArray(values[key2])) { + values[key2].push(value); + } else { + values[key2] = [values[key2], value]; + } + this._all = void 0; + } + }; + } +}); +function asConfigScope(scope, fallback) { + if (typeof scope === "string" && GitConfigScope.hasOwnProperty(scope)) { + return scope; + } + return fallback; +} +function addConfigTask(key2, value, append22, scope) { + const commands2 = ["config", `--${scope}`]; + if (append22) { + commands2.push("--add"); + } + commands2.push(key2, value); + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return text2; + } + }; +} +function getConfigTask(key2, scope) { + const commands2 = ["config", "--null", "--show-origin", "--get-all", key2]; + if (scope) { + commands2.splice(1, 0, `--${scope}`); + } + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return configGetParser(text2, key2); + } + }; +} +function listConfigTask(scope) { + const commands2 = ["config", "--list", "--show-origin", "--null"]; + if (scope) { + commands2.push(`--${scope}`); + } + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return configListParser(text2); + } + }; +} +function config_default() { + return { + addConfig(key2, value, ...rest) { + return this._runTask(addConfigTask(key2, value, rest[0] === true, asConfigScope( + rest[1], + "local" + /* local */ + )), trailingFunctionArgument(arguments)); + }, + getConfig(key2, scope) { + return this._runTask(getConfigTask(key2, asConfigScope(scope, void 0)), trailingFunctionArgument(arguments)); + }, + listConfig(...rest) { + return this._runTask(listConfigTask(asConfigScope(rest[0], void 0)), trailingFunctionArgument(arguments)); + } + }; +} +var GitConfigScope; +var init_config = __esm2({ + "src/lib/tasks/config.ts"() { + init_ConfigList(); + init_utils(); + GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => { + GitConfigScope2["system"] = "system"; + GitConfigScope2["global"] = "global"; + GitConfigScope2["local"] = "local"; + GitConfigScope2["worktree"] = "worktree"; + return GitConfigScope2; + })(GitConfigScope || {}); + } +}); +function grepQueryBuilder(...params) { + return new GrepQuery().param(...params); +} +function parseGrep(grep) { + const paths = /* @__PURE__ */ new Set(); + const results = {}; + forEachLineWithContent(grep, (input) => { + const [path2, line, preview] = input.split(NULL); + paths.add(path2); + (results[path2] = results[path2] || []).push({ + line: asNumber(line), + path: path2, + preview + }); + }); + return { + paths, + results + }; +} +function grep_default() { + return { + grep(searchTerm) { + const then = trailingFunctionArgument(arguments); + const options = getTrailingOptions(arguments); + for (const option of disallowedOptions) { + if (options.includes(option)) { + return this._runTask(configurationErrorTask(`git.grep: use of "${option}" is not supported.`), then); + } + } + if (typeof searchTerm === "string") { + searchTerm = grepQueryBuilder().param(searchTerm); + } + const commands2 = ["grep", "--null", "-n", "--full-name", ...options, ...searchTerm]; + return this._runTask({ + commands: commands2, + format: "utf-8", + parser(stdOut) { + return parseGrep(stdOut); + } + }, then); + } + }; +} +var disallowedOptions; +var Query; +var _a; +var GrepQuery; +var init_grep = __esm2({ + "src/lib/tasks/grep.ts"() { + init_utils(); + init_task(); + disallowedOptions = ["-h"]; + Query = Symbol("grepQuery"); + GrepQuery = class { + constructor() { + this[_a] = []; + } + *[(_a = Query, Symbol.iterator)]() { + for (const query of this[Query]) { + yield query; + } + } + and(...and) { + and.length && this[Query].push("--and", "(", ...prefixedArray(and, "-e"), ")"); + return this; + } + param(...param) { + this[Query].push(...prefixedArray(param, "-e")); + return this; + } + }; + } +}); +var reset_exports = {}; +__export2(reset_exports, { + ResetMode: () => ResetMode, + getResetMode: () => getResetMode, + resetTask: () => resetTask +}); +function resetTask(mode, customArgs) { + const commands2 = ["reset"]; + if (isValidResetMode(mode)) { + commands2.push(`--${mode}`); + } + commands2.push(...customArgs); + return straightThroughStringTask(commands2); +} +function getResetMode(mode) { + if (isValidResetMode(mode)) { + return mode; + } + switch (typeof mode) { + case "string": + case "undefined": + return "soft"; + } + return; +} +function isValidResetMode(mode) { + return ResetModes.includes(mode); +} +var ResetMode; +var ResetModes; +var init_reset = __esm2({ + "src/lib/tasks/reset.ts"() { + init_task(); + ResetMode = /* @__PURE__ */ ((ResetMode2) => { + ResetMode2["MIXED"] = "mixed"; + ResetMode2["SOFT"] = "soft"; + ResetMode2["HARD"] = "hard"; + ResetMode2["MERGE"] = "merge"; + ResetMode2["KEEP"] = "keep"; + return ResetMode2; + })(ResetMode || {}); + ResetModes = Array.from(Object.values(ResetMode)); + } +}); +function createLog() { + return (0, import_debug.default)("simple-git"); +} +function prefixedLogger(to, prefix, forward) { + if (!prefix || !String(prefix).replace(/\s*/, "")) { + return !forward ? to : (message, ...args) => { + to(message, ...args); + forward(message, ...args); + }; + } + return (message, ...args) => { + to(`%s ${message}`, prefix, ...args); + if (forward) { + forward(message, ...args); + } + }; +} +function childLoggerName(name, childDebugger, { namespace: parentNamespace }) { + if (typeof name === "string") { + return name; + } + const childNamespace = childDebugger && childDebugger.namespace || ""; + if (childNamespace.startsWith(parentNamespace)) { + return childNamespace.substr(parentNamespace.length + 1); + } + return childNamespace || parentNamespace; +} +function createLogger(label, verbose, initialStep, infoDebugger = createLog()) { + const labelPrefix = label && `[${label}]` || ""; + const spawned = []; + const debugDebugger = typeof verbose === "string" ? infoDebugger.extend(verbose) : verbose; + const key2 = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger); + return step(initialStep); + function sibling(name, initial) { + return append(spawned, createLogger(label, key2.replace(/^[^:]+/, name), initial, infoDebugger)); + } + function step(phase) { + const stepPrefix = phase && `[${phase}]` || ""; + const debug22 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP; + const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug22); + return Object.assign(debugDebugger ? debug22 : info, { + label, + sibling, + info, + step + }); + } +} +var init_git_logger = __esm2({ + "src/lib/git-logger.ts"() { + init_utils(); + import_debug.default.formatters.L = (value) => String(filterHasLength(value) ? value.length : "-"); + import_debug.default.formatters.B = (value) => { + if (Buffer.isBuffer(value)) { + return value.toString("utf8"); + } + return objectToString(value); + }; + } +}); +var _TasksPendingQueue; +var TasksPendingQueue; +var init_tasks_pending_queue = __esm2({ + "src/lib/runners/tasks-pending-queue.ts"() { + init_git_error(); + init_git_logger(); + _TasksPendingQueue = class { + constructor(logLabel = "GitExecutor") { + this.logLabel = logLabel; + this._queue = /* @__PURE__ */ new Map(); + } + withProgress(task) { + return this._queue.get(task); + } + createProgress(task) { + const name = _TasksPendingQueue.getName(task.commands[0]); + const logger = createLogger(this.logLabel, name); + return { + task, + logger, + name + }; + } + push(task) { + const progress = this.createProgress(task); + progress.logger("Adding task to the queue, commands = %o", task.commands); + this._queue.set(task, progress); + return progress; + } + fatal(err) { + for (const [task, { logger }] of Array.from(this._queue.entries())) { + if (task === err.task) { + logger.info(`Failed %o`, err); + logger(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`); + } else { + logger.info(`A fatal exception occurred in a previous task, the queue has been purged: %o`, err.message); + } + this.complete(task); + } + if (this._queue.size !== 0) { + throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`); + } + } + complete(task) { + const progress = this.withProgress(task); + if (progress) { + this._queue.delete(task); + } + } + attempt(task) { + const progress = this.withProgress(task); + if (!progress) { + throw new GitError(void 0, "TasksPendingQueue: attempt called for an unknown task"); + } + progress.logger("Starting task"); + return progress; + } + static getName(name = "empty") { + return `task:${name}:${++_TasksPendingQueue.counter}`; + } + }; + TasksPendingQueue = _TasksPendingQueue; + TasksPendingQueue.counter = 0; + } +}); +function pluginContext(task, commands2) { + return { + method: first(task.commands) || "", + commands: commands2 + }; +} +function onErrorReceived(target, logger) { + return (err) => { + logger(`[ERROR] child process exception %o`, err); + target.push(Buffer.from(String(err.stack), "ascii")); + }; +} +function onDataReceived(target, name, logger, output) { + return (buffer2) => { + logger(`%s received %L bytes`, name, buffer2); + output(`%B`, buffer2); + target.push(buffer2); + }; +} +var GitExecutorChain; +var init_git_executor_chain = __esm2({ + "src/lib/runners/git-executor-chain.ts"() { + init_git_error(); + init_task(); + init_utils(); + init_tasks_pending_queue(); + GitExecutorChain = class { + constructor(_executor, _scheduler, _plugins) { + this._executor = _executor; + this._scheduler = _scheduler; + this._plugins = _plugins; + this._chain = Promise.resolve(); + this._queue = new TasksPendingQueue(); + } + get binary() { + return this._executor.binary; + } + get cwd() { + return this._cwd || this._executor.cwd; + } + set cwd(cwd) { + this._cwd = cwd; + } + get env() { + return this._executor.env; + } + get outputHandler() { + return this._executor.outputHandler; + } + chain() { + return this; + } + push(task) { + this._queue.push(task); + return this._chain = this._chain.then(() => this.attemptTask(task)); + } + attemptTask(task) { + return __async(this, null, function* () { + const onScheduleComplete = yield this._scheduler.next(); + const onQueueComplete = () => this._queue.complete(task); + try { + const { logger } = this._queue.attempt(task); + return yield isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger); + } catch (e) { + throw this.onFatalException(task, e); + } finally { + onQueueComplete(); + onScheduleComplete(); + } + }); + } + onFatalException(task, e) { + const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e)); + this._chain = Promise.resolve(); + this._queue.fatal(gitError); + return gitError; + } + attemptRemoteTask(task, logger) { + return __async(this, null, function* () { + const args = this._plugins.exec("spawn.args", [...task.commands], pluginContext(task, task.commands)); + const raw = yield this.gitResponse(task, this.binary, args, this.outputHandler, logger.step("SPAWN")); + const outputStreams = yield this.handleTaskData(task, args, raw, logger.step("HANDLE")); + logger(`passing response to task's parser as a %s`, task.format); + if (isBufferTask(task)) { + return callTaskParser(task.parser, outputStreams); + } + return callTaskParser(task.parser, outputStreams.asStrings()); + }); + } + attemptEmptyTask(task, logger) { + return __async(this, null, function* () { + logger(`empty task bypassing child process to call to task's parser`); + return task.parser(this); + }); + } + handleTaskData(task, args, result, logger) { + const { exitCode, rejection, stdOut, stdErr } = result; + return new Promise((done, fail) => { + logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode); + const { error } = this._plugins.exec("task.error", { error: rejection }, __spreadValues(__spreadValues({}, pluginContext(task, args)), result)); + if (error && task.onError) { + logger.info(`exitCode=%s handling with custom error handler`); + return task.onError(result, error, (newStdOut) => { + logger.info(`custom error handler treated as success`); + logger(`custom error returned a %s`, objectToString(newStdOut)); + done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr))); + }, fail); + } + if (error) { + logger.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`, exitCode, stdErr.length, rejection); + return fail(error); + } + logger.info(`retrieving task output complete`); + done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr))); + }); + } + gitResponse(task, command, args, outputHandler, logger) { + return __async(this, null, function* () { + const outputLogger = logger.sibling("output"); + const spawnOptions = this._plugins.exec("spawn.options", { + cwd: this.cwd, + env: this.env, + windowsHide: true + }, pluginContext(task, task.commands)); + return new Promise((done) => { + const stdOut = []; + const stdErr = []; + logger.info(`%s %o`, command, args); + logger("%O", spawnOptions); + let rejection = this._beforeSpawn(task, args); + if (rejection) { + return done({ + stdOut, + stdErr, + exitCode: 9901, + rejection + }); + } + this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { + kill(reason) { + rejection = reason || rejection; + } + })); + const spawned = (0, import_child_process.spawn)(command, args, spawnOptions); + spawned.stdout.on("data", onDataReceived(stdOut, "stdOut", logger, outputLogger.step("stdOut"))); + spawned.stderr.on("data", onDataReceived(stdErr, "stdErr", logger, outputLogger.step("stdErr"))); + spawned.on("error", onErrorReceived(stdErr, logger)); + if (outputHandler) { + logger(`Passing child process stdOut/stdErr to custom outputHandler`); + outputHandler(command, spawned.stdout, spawned.stderr, [...args]); + } + this._plugins.exec("spawn.after", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { + spawned, + close(exitCode, reason) { + done({ + stdOut, + stdErr, + exitCode, + rejection: rejection || reason + }); + }, + kill(reason) { + if (spawned.killed) { + return; + } + rejection = reason; + spawned.kill("SIGINT"); + } + })); + }); + }); + } + _beforeSpawn(task, args) { + let rejection; + this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { + kill(reason) { + rejection = reason || rejection; + } + })); + return rejection; + } + }; + } +}); +var git_executor_exports = {}; +__export2(git_executor_exports, { + GitExecutor: () => GitExecutor +}); +var GitExecutor; +var init_git_executor = __esm2({ + "src/lib/runners/git-executor.ts"() { + init_git_executor_chain(); + GitExecutor = class { + constructor(binary = "git", cwd, _scheduler, _plugins) { + this.binary = binary; + this.cwd = cwd; + this._scheduler = _scheduler; + this._plugins = _plugins; + this._chain = new GitExecutorChain(this, this._scheduler, this._plugins); + } + chain() { + return new GitExecutorChain(this, this._scheduler, this._plugins); + } + push(task) { + return this._chain.push(task); + } + }; + } +}); +function taskCallback(task, response, callback = NOOP) { + const onSuccess = (data) => { + callback(null, data); + }; + const onError2 = (err) => { + if ((err == null ? void 0 : err.task) === task) { + callback(err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err, void 0); + } + }; + response.then(onSuccess, onError2); +} +function addDeprecationNoticeToError(err) { + let log2 = (name) => { + console.warn(`simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`); + log2 = NOOP; + }; + return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {})); + function descriptorReducer(all, name) { + if (name in err) { + return all; + } + all[name] = { + enumerable: false, + configurable: false, + get() { + log2(name); + return err.git[name]; + } + }; + return all; + } +} +var init_task_callback = __esm2({ + "src/lib/task-callback.ts"() { + init_git_response_error(); + init_utils(); + } +}); +function changeWorkingDirectoryTask(directory, root2) { + return adhocExecTask((instance10) => { + if (!folderExists(directory)) { + throw new Error(`Git.cwd: cannot change to non-directory "${directory}"`); + } + return (root2 || instance10).cwd = directory; + }); +} +var init_change_working_directory = __esm2({ + "src/lib/tasks/change-working-directory.ts"() { + init_utils(); + init_task(); + } +}); +function checkoutTask(args) { + const commands2 = ["checkout", ...args]; + if (commands2[1] === "-b" && commands2.includes("-B")) { + commands2[1] = remove2(commands2, "-B"); + } + return straightThroughStringTask(commands2); +} +function checkout_default() { + return { + checkout() { + return this._runTask(checkoutTask(getTrailingOptions(arguments, 1)), trailingFunctionArgument(arguments)); + }, + checkoutBranch(branchName, startPoint) { + return this._runTask(checkoutTask(["-b", branchName, startPoint, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); + }, + checkoutLocalBranch(branchName) { + return this._runTask(checkoutTask(["-b", branchName, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); + } + }; +} +var init_checkout = __esm2({ + "src/lib/tasks/checkout.ts"() { + init_utils(); + init_task(); + } +}); +function parseCommitResult(stdOut) { + const result = { + author: null, + branch: "", + commit: "", + root: false, + summary: { + changes: 0, + insertions: 0, + deletions: 0 + } + }; + return parseStringResponse(result, parsers, stdOut); +} +var parsers; +var init_parse_commit = __esm2({ + "src/lib/parsers/parse-commit.ts"() { + init_utils(); + parsers = [ + new LineParser(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/, (result, [branch2, root2, commit2]) => { + result.branch = branch2; + result.commit = commit2; + result.root = !!root2; + }), + new LineParser(/\s*Author:\s(.+)/i, (result, [author]) => { + const parts = author.split("<"); + const email = parts.pop(); + if (!email || !email.includes("@")) { + return; + } + result.author = { + email: email.substr(0, email.length - 1), + name: parts.join("<").trim() + }; + }), + new LineParser(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g, (result, [changes, insertions, deletions]) => { + result.summary.changes = parseInt(changes, 10) || 0; + result.summary.insertions = parseInt(insertions, 10) || 0; + result.summary.deletions = parseInt(deletions, 10) || 0; + }), + new LineParser(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/, (result, [changes, lines, direction]) => { + result.summary.changes = parseInt(changes, 10) || 0; + const count = parseInt(lines, 10) || 0; + if (direction === "-") { + result.summary.deletions = count; + } else if (direction === "+") { + result.summary.insertions = count; + } + }) + ]; + } +}); +function commitTask(message, files, customArgs) { + const commands2 = [ + "-c", + "core.abbrev=40", + "commit", + ...prefixedArray(message, "-m"), + ...files, + ...customArgs + ]; + return { + commands: commands2, + format: "utf-8", + parser: parseCommitResult + }; +} +function commit_default() { + return { + commit(message, ...rest) { + const next = trailingFunctionArgument(arguments); + const task = rejectDeprecatedSignatures(message) || commitTask(asArray(message), asArray(filterType(rest[0], filterStringOrStringArray, [])), [...filterType(rest[1], filterArray, []), ...getTrailingOptions(arguments, 0, true)]); + return this._runTask(task, next); + } + }; + function rejectDeprecatedSignatures(message) { + return !filterStringOrStringArray(message) && configurationErrorTask(`git.commit: requires the commit message to be supplied as a string/string[]`); + } +} +var init_commit = __esm2({ + "src/lib/tasks/commit.ts"() { + init_parse_commit(); + init_utils(); + init_task(); + } +}); +function hashObjectTask(filePath, write) { + const commands2 = ["hash-object", filePath]; + if (write) { + commands2.push("-w"); + } + return straightThroughStringTask(commands2, true); +} +var init_hash_object = __esm2({ + "src/lib/tasks/hash-object.ts"() { + init_task(); + } +}); +function parseInit(bare, path2, text2) { + const response = String(text2).trim(); + let result; + if (result = initResponseRegex.exec(response)) { + return new InitSummary(bare, path2, false, result[1]); + } + if (result = reInitResponseRegex.exec(response)) { + return new InitSummary(bare, path2, true, result[1]); + } + let gitDir = ""; + const tokens = response.split(" "); + while (tokens.length) { + const token = tokens.shift(); + if (token === "in") { + gitDir = tokens.join(" "); + break; + } + } + return new InitSummary(bare, path2, /^re/i.test(response), gitDir); +} +var InitSummary; +var initResponseRegex; +var reInitResponseRegex; +var init_InitSummary = __esm2({ + "src/lib/responses/InitSummary.ts"() { + InitSummary = class { + constructor(bare, path2, existing, gitDir) { + this.bare = bare; + this.path = path2; + this.existing = existing; + this.gitDir = gitDir; + } + }; + initResponseRegex = /^Init.+ repository in (.+)$/; + reInitResponseRegex = /^Rein.+ in (.+)$/; + } +}); +function hasBareCommand(command) { + return command.includes(bareCommand); +} +function initTask(bare = false, path2, customArgs) { + const commands2 = ["init", ...customArgs]; + if (bare && !hasBareCommand(commands2)) { + commands2.splice(1, 0, bareCommand); + } + return { + commands: commands2, + format: "utf-8", + parser(text2) { + return parseInit(commands2.includes("--bare"), path2, text2); + } + }; +} +var bareCommand; +var init_init = __esm2({ + "src/lib/tasks/init.ts"() { + init_InitSummary(); + bareCommand = "--bare"; + } +}); +function logFormatFromCommand(customArgs) { + for (let i = 0; i < customArgs.length; i++) { + const format = logFormatRegex.exec(customArgs[i]); + if (format) { + return `--${format[1]}`; + } + } + return ""; +} +function isLogFormat(customArg) { + return logFormatRegex.test(customArg); +} +var logFormatRegex; +var init_log_format = __esm2({ + "src/lib/args/log-format.ts"() { + logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/; + } +}); +var DiffSummary; +var init_DiffSummary = __esm2({ + "src/lib/responses/DiffSummary.ts"() { + DiffSummary = class { + constructor() { + this.changed = 0; + this.deletions = 0; + this.insertions = 0; + this.files = []; + } + }; + } +}); +function getDiffParser(format = "") { + const parser3 = diffSummaryParsers[format]; + return (stdOut) => parseStringResponse(new DiffSummary(), parser3, stdOut, false); +} +var statParser; +var numStatParser; +var nameOnlyParser; +var nameStatusParser; +var diffSummaryParsers; +var init_parse_diff_summary = __esm2({ + "src/lib/parsers/parse-diff-summary.ts"() { + init_log_format(); + init_DiffSummary(); + init_utils(); + statParser = [ + new LineParser(/(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/, (result, [file, changes, alterations = ""]) => { + result.files.push({ + file: file.trim(), + changes: asNumber(changes), + insertions: alterations.replace(/[^+]/g, "").length, + deletions: alterations.replace(/[^-]/g, "").length, + binary: false + }); + }), + new LineParser(/(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/, (result, [file, before, after]) => { + result.files.push({ + file: file.trim(), + before: asNumber(before), + after: asNumber(after), + binary: true + }); + }), + new LineParser(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/, (result, [changed, summary]) => { + const inserted = /(\d+) i/.exec(summary); + const deleted = /(\d+) d/.exec(summary); + result.changed = asNumber(changed); + result.insertions = asNumber(inserted == null ? void 0 : inserted[1]); + result.deletions = asNumber(deleted == null ? void 0 : deleted[1]); + }) + ]; + numStatParser = [ + new LineParser(/(\d+)\t(\d+)\t(.+)$/, (result, [changesInsert, changesDelete, file]) => { + const insertions = asNumber(changesInsert); + const deletions = asNumber(changesDelete); + result.changed++; + result.insertions += insertions; + result.deletions += deletions; + result.files.push({ + file, + changes: insertions + deletions, + insertions, + deletions, + binary: false + }); + }), + new LineParser(/-\t-\t(.+)$/, (result, [file]) => { + result.changed++; + result.files.push({ + file, + after: 0, + before: 0, + binary: true + }); + }) + ]; + nameOnlyParser = [ + new LineParser(/(.+)$/, (result, [file]) => { + result.changed++; + result.files.push({ + file, + changes: 0, + insertions: 0, + deletions: 0, + binary: false + }); + }) + ]; + nameStatusParser = [ + new LineParser(/([ACDMRTUXB])([0-9][0-9][0-9])?\t(.[^\t]+)\t?(.*)?$/, (result, [status2, _similarity, from, to]) => { + result.changed++; + result.files.push({ + file: to != null ? to : from, + changes: 0, + status: status2, + insertions: 0, + deletions: 0, + binary: false + }); + }) + ]; + diffSummaryParsers = { + [ + "" + /* NONE */ + ]: statParser, + [ + "--stat" + /* STAT */ + ]: statParser, + [ + "--numstat" + /* NUM_STAT */ + ]: numStatParser, + [ + "--name-status" + /* NAME_STATUS */ + ]: nameStatusParser, + [ + "--name-only" + /* NAME_ONLY */ + ]: nameOnlyParser + }; + } +}); +function lineBuilder(tokens, fields) { + return fields.reduce((line, field, index2) => { + line[field] = tokens[index2] || ""; + return line; + }, /* @__PURE__ */ Object.create({ diff: null })); +} +function createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = "") { + const parseDiffResult = getDiffParser(logFormat); + return function(stdOut) { + const all = toLinesWithContent(stdOut, true, START_BOUNDARY).map(function(item) { + const lineDetail = item.trim().split(COMMIT_BOUNDARY); + const listLogLine = lineBuilder(lineDetail[0].trim().split(splitter), fields); + if (lineDetail.length > 1 && !!lineDetail[1].trim()) { + listLogLine.diff = parseDiffResult(lineDetail[1]); + } + return listLogLine; + }); + return { + all, + latest: all.length && all[0] || null, + total: all.length + }; + }; +} +var START_BOUNDARY; +var COMMIT_BOUNDARY; +var SPLITTER; +var defaultFieldNames; +var init_parse_list_log_summary = __esm2({ + "src/lib/parsers/parse-list-log-summary.ts"() { + init_utils(); + init_parse_diff_summary(); + init_log_format(); + START_BOUNDARY = "\xF2\xF2\xF2\xF2\xF2\xF2 "; + COMMIT_BOUNDARY = " \xF2\xF2"; + SPLITTER = " \xF2 "; + defaultFieldNames = ["hash", "date", "message", "refs", "author_name", "author_email"]; + } +}); +var diff_exports = {}; +__export2(diff_exports, { + diffSummaryTask: () => diffSummaryTask, + validateLogFormatConfig: () => validateLogFormatConfig +}); +function diffSummaryTask(customArgs) { + let logFormat = logFormatFromCommand(customArgs); + const commands2 = ["diff"]; + if (logFormat === "") { + logFormat = "--stat"; + commands2.push("--stat=4096"); + } + commands2.push(...customArgs); + return validateLogFormatConfig(commands2) || { + commands: commands2, + format: "utf-8", + parser: getDiffParser(logFormat) + }; +} +function validateLogFormatConfig(customArgs) { + const flags = customArgs.filter(isLogFormat); + if (flags.length > 1) { + return configurationErrorTask(`Summary flags are mutually exclusive - pick one of ${flags.join(",")}`); + } + if (flags.length && customArgs.includes("-z")) { + return configurationErrorTask(`Summary flag ${flags} parsing is not compatible with null termination option '-z'`); + } +} +var init_diff = __esm2({ + "src/lib/tasks/diff.ts"() { + init_log_format(); + init_parse_diff_summary(); + init_task(); + } +}); +function prettyFormat(format, splitter) { + const fields = []; + const formatStr = []; + Object.keys(format).forEach((field) => { + fields.push(field); + formatStr.push(String(format[field])); + }); + return [fields, formatStr.join(splitter)]; +} +function userOptions(input) { + return Object.keys(input).reduce((out, key2) => { + if (!(key2 in excludeOptions)) { + out[key2] = input[key2]; + } + return out; + }, {}); +} +function parseLogOptions(opt = {}, customArgs = []) { + const splitter = filterType(opt.splitter, filterString, SPLITTER); + const format = !filterPrimitives(opt.format) && opt.format ? opt.format : { + hash: "%H", + date: opt.strictDate === false ? "%ai" : "%aI", + message: "%s", + refs: "%D", + body: opt.multiLine ? "%B" : "%b", + author_name: opt.mailMap !== false ? "%aN" : "%an", + author_email: opt.mailMap !== false ? "%aE" : "%ae" + }; + const [fields, formatStr] = prettyFormat(format, splitter); + const suffix = []; + const command = [ + `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`, + ...customArgs + ]; + const maxCount = opt.n || opt["max-count"] || opt.maxCount; + if (maxCount) { + command.push(`--max-count=${maxCount}`); + } + if (opt.from || opt.to) { + const rangeOperator = opt.symmetric !== false ? "..." : ".."; + suffix.push(`${opt.from || ""}${rangeOperator}${opt.to || ""}`); + } + if (filterString(opt.file)) { + suffix.push("--follow", opt.file); + } + appendTaskOptions(userOptions(opt), command); + return { + fields, + splitter, + commands: [...command, ...suffix] + }; +} +function logTask(splitter, fields, customArgs) { + const parser3 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs)); + return { + commands: ["log", ...customArgs], + format: "utf-8", + parser: parser3 + }; +} +function log_default() { + return { + log(...rest) { + const next = trailingFunctionArgument(arguments); + const options = parseLogOptions(trailingOptionsArgument(arguments), filterType(arguments[0], filterArray)); + const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options); + return this._runTask(task, next); + } + }; + function createLogTask(options) { + return logTask(options.splitter, options.fields, options.commands); + } + function rejectDeprecatedSignatures(from, to) { + return filterString(from) && filterString(to) && configurationErrorTask(`git.log(string, string) should be replaced with git.log({ from: string, to: string })`); + } +} +var excludeOptions; +var init_log = __esm2({ + "src/lib/tasks/log.ts"() { + init_log_format(); + init_parse_list_log_summary(); + init_utils(); + init_task(); + init_diff(); + excludeOptions = /* @__PURE__ */ ((excludeOptions2) => { + excludeOptions2[excludeOptions2["--pretty"] = 0] = "--pretty"; + excludeOptions2[excludeOptions2["max-count"] = 1] = "max-count"; + excludeOptions2[excludeOptions2["maxCount"] = 2] = "maxCount"; + excludeOptions2[excludeOptions2["n"] = 3] = "n"; + excludeOptions2[excludeOptions2["file"] = 4] = "file"; + excludeOptions2[excludeOptions2["format"] = 5] = "format"; + excludeOptions2[excludeOptions2["from"] = 6] = "from"; + excludeOptions2[excludeOptions2["to"] = 7] = "to"; + excludeOptions2[excludeOptions2["splitter"] = 8] = "splitter"; + excludeOptions2[excludeOptions2["symmetric"] = 9] = "symmetric"; + excludeOptions2[excludeOptions2["mailMap"] = 10] = "mailMap"; + excludeOptions2[excludeOptions2["multiLine"] = 11] = "multiLine"; + excludeOptions2[excludeOptions2["strictDate"] = 12] = "strictDate"; + return excludeOptions2; + })(excludeOptions || {}); + } +}); +var MergeSummaryConflict; +var MergeSummaryDetail; +var init_MergeSummary = __esm2({ + "src/lib/responses/MergeSummary.ts"() { + MergeSummaryConflict = class { + constructor(reason, file = null, meta) { + this.reason = reason; + this.file = file; + this.meta = meta; + } + toString() { + return `${this.file}:${this.reason}`; + } + }; + MergeSummaryDetail = class { + constructor() { + this.conflicts = []; + this.merges = []; + this.result = "success"; + } + get failed() { + return this.conflicts.length > 0; + } + get reason() { + return this.result; + } + toString() { + if (this.conflicts.length) { + return `CONFLICTS: ${this.conflicts.join(", ")}`; + } + return "OK"; + } + }; + } +}); +var PullSummary; +var PullFailedSummary; +var init_PullSummary = __esm2({ + "src/lib/responses/PullSummary.ts"() { + PullSummary = class { + constructor() { + this.remoteMessages = { + all: [] + }; + this.created = []; + this.deleted = []; + this.files = []; + this.deletions = {}; + this.insertions = {}; + this.summary = { + changes: 0, + deletions: 0, + insertions: 0 + }; + } + }; + PullFailedSummary = class { + constructor() { + this.remote = ""; + this.hash = { + local: "", + remote: "" + }; + this.branch = { + local: "", + remote: "" + }; + this.message = ""; + } + toString() { + return this.message; + } + }; + } +}); +function objectEnumerationResult(remoteMessages) { + return remoteMessages.objects = remoteMessages.objects || { + compressing: 0, + counting: 0, + enumerating: 0, + packReused: 0, + reused: { count: 0, delta: 0 }, + total: { count: 0, delta: 0 } + }; +} +function asObjectCount(source) { + const count = /^\s*(\d+)/.exec(source); + const delta = /delta (\d+)/i.exec(source); + return { + count: asNumber(count && count[1] || "0"), + delta: asNumber(delta && delta[1] || "0") + }; +} +var remoteMessagesObjectParsers; +var init_parse_remote_objects = __esm2({ + "src/lib/parsers/parse-remote-objects.ts"() { + init_utils(); + remoteMessagesObjectParsers = [ + new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i, (result, [action, count]) => { + const key2 = action.toLowerCase(); + const enumeration = objectEnumerationResult(result.remoteMessages); + Object.assign(enumeration, { [key2]: asNumber(count) }); + }), + new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i, (result, [action, count]) => { + const key2 = action.toLowerCase(); + const enumeration = objectEnumerationResult(result.remoteMessages); + Object.assign(enumeration, { [key2]: asNumber(count) }); + }), + new RemoteLineParser(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i, (result, [total, reused, packReused]) => { + const objects = objectEnumerationResult(result.remoteMessages); + objects.total = asObjectCount(total); + objects.reused = asObjectCount(reused); + objects.packReused = asNumber(packReused); + }) + ]; + } +}); +function parseRemoteMessages(_stdOut, stdErr) { + return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr); +} +var parsers2; +var RemoteMessageSummary; +var init_parse_remote_messages = __esm2({ + "src/lib/parsers/parse-remote-messages.ts"() { + init_utils(); + init_parse_remote_objects(); + parsers2 = [ + new RemoteLineParser(/^remote:\s*(.+)$/, (result, [text2]) => { + result.remoteMessages.all.push(text2.trim()); + return false; + }), + ...remoteMessagesObjectParsers, + new RemoteLineParser([/create a (?:pull|merge) request/i, /\s(https?:\/\/\S+)$/], (result, [pullRequestUrl]) => { + result.remoteMessages.pullRequestUrl = pullRequestUrl; + }), + new RemoteLineParser([/found (\d+) vulnerabilities.+\(([^)]+)\)/i, /\s(https?:\/\/\S+)$/], (result, [count, summary, url]) => { + result.remoteMessages.vulnerabilities = { + count: asNumber(count), + summary, + url + }; + }) + ]; + RemoteMessageSummary = class { + constructor() { + this.all = []; + } + }; + } +}); +function parsePullErrorResult(stdOut, stdErr) { + const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]); + return pullError.message && pullError; +} +var FILE_UPDATE_REGEX; +var SUMMARY_REGEX; +var ACTION_REGEX; +var parsers3; +var errorParsers; +var parsePullDetail; +var parsePullResult; +var init_parse_pull = __esm2({ + "src/lib/parsers/parse-pull.ts"() { + init_PullSummary(); + init_utils(); + init_parse_remote_messages(); + FILE_UPDATE_REGEX = /^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/; + SUMMARY_REGEX = /(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/; + ACTION_REGEX = /^(create|delete) mode \d+ (.+)/; + parsers3 = [ + new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => { + result.files.push(file); + if (insertions) { + result.insertions[file] = insertions.length; + } + if (deletions) { + result.deletions[file] = deletions.length; + } + }), + new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => { + if (insertions !== void 0 || deletions !== void 0) { + result.summary.changes = +changes || 0; + result.summary.insertions = +insertions || 0; + result.summary.deletions = +deletions || 0; + return true; + } + return false; + }), + new LineParser(ACTION_REGEX, (result, [action, file]) => { + append(result.files, file); + append(action === "create" ? result.created : result.deleted, file); + }) + ]; + errorParsers = [ + new LineParser(/^from\s(.+)$/i, (result, [remote]) => void (result.remote = remote)), + new LineParser(/^fatal:\s(.+)$/, (result, [message]) => void (result.message = message)), + new LineParser(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/, (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => { + result.branch.local = branchLocal; + result.hash.local = hashLocal; + result.branch.remote = branchRemote; + result.hash.remote = hashRemote; + }) + ]; + parsePullDetail = (stdOut, stdErr) => { + return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]); + }; + parsePullResult = (stdOut, stdErr) => { + return Object.assign(new PullSummary(), parsePullDetail(stdOut, stdErr), parseRemoteMessages(stdOut, stdErr)); + }; + } +}); +var parsers4; +var parseMergeResult; +var parseMergeDetail; +var init_parse_merge = __esm2({ + "src/lib/parsers/parse-merge.ts"() { + init_MergeSummary(); + init_utils(); + init_parse_pull(); + parsers4 = [ + new LineParser(/^Auto-merging\s+(.+)$/, (summary, [autoMerge]) => { + summary.merges.push(autoMerge); + }), + new LineParser(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/, (summary, [reason, file]) => { + summary.conflicts.push(new MergeSummaryConflict(reason, file)); + }), + new LineParser(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/, (summary, [reason, file, deleteRef2]) => { + summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef: deleteRef2 })); + }), + new LineParser(/^CONFLICT\s+\((.+)\):/, (summary, [reason]) => { + summary.conflicts.push(new MergeSummaryConflict(reason, null)); + }), + new LineParser(/^Automatic merge failed;\s+(.+)$/, (summary, [result]) => { + summary.result = result; + }) + ]; + parseMergeResult = (stdOut, stdErr) => { + return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr)); + }; + parseMergeDetail = (stdOut) => { + return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut); + }; + } +}); +function mergeTask(customArgs) { + if (!customArgs.length) { + return configurationErrorTask("Git.merge requires at least one option"); + } + return { + commands: ["merge", ...customArgs], + format: "utf-8", + parser(stdOut, stdErr) { + const merge2 = parseMergeResult(stdOut, stdErr); + if (merge2.failed) { + throw new GitResponseError(merge2); + } + return merge2; + } + }; +} +var init_merge = __esm2({ + "src/lib/tasks/merge.ts"() { + init_git_response_error(); + init_parse_merge(); + init_task(); + } +}); +function pushResultPushedItem(local, remote, status2) { + const deleted = status2.includes("deleted"); + const tag2 = status2.includes("tag") || /^refs\/tags/.test(local); + const alreadyUpdated = !status2.includes("new"); + return { + deleted, + tag: tag2, + branch: !tag2, + new: !alreadyUpdated, + alreadyUpdated, + local, + remote + }; +} +var parsers5; +var parsePushResult; +var parsePushDetail; +var init_parse_push = __esm2({ + "src/lib/parsers/parse-push.ts"() { + init_utils(); + init_parse_remote_messages(); + parsers5 = [ + new LineParser(/^Pushing to (.+)$/, (result, [repo]) => { + result.repo = repo; + }), + new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => { + result.ref = __spreadProps(__spreadValues({}, result.ref || {}), { + local + }); + }), + new LineParser(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/, (result, [local, remote, type]) => { + result.pushed.push(pushResultPushedItem(local, remote, type)); + }), + new LineParser(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/, (result, [local, remote, remoteName]) => { + result.branch = __spreadProps(__spreadValues({}, result.branch || {}), { + local, + remote, + remoteName + }); + }), + new LineParser(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/, (result, [local, remote, from, to]) => { + result.update = { + head: { + local, + remote + }, + hash: { + from, + to + } + }; + }) + ]; + parsePushResult = (stdOut, stdErr) => { + const pushDetail = parsePushDetail(stdOut, stdErr); + const responseDetail = parseRemoteMessages(stdOut, stdErr); + return __spreadValues(__spreadValues({}, pushDetail), responseDetail); + }; + parsePushDetail = (stdOut, stdErr) => { + return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]); + }; + } +}); +var push_exports = {}; +__export2(push_exports, { + pushTagsTask: () => pushTagsTask, + pushTask: () => pushTask +}); +function pushTagsTask(ref = {}, customArgs) { + append(customArgs, "--tags"); + return pushTask(ref, customArgs); +} +function pushTask(ref = {}, customArgs) { + const commands2 = ["push", ...customArgs]; + if (ref.branch) { + commands2.splice(1, 0, ref.branch); + } + if (ref.remote) { + commands2.splice(1, 0, ref.remote); + } + remove2(commands2, "-v"); + append(commands2, "--verbose"); + append(commands2, "--porcelain"); + return { + commands: commands2, + format: "utf-8", + parser: parsePushResult + }; +} +var init_push = __esm2({ + "src/lib/tasks/push.ts"() { + init_parse_push(); + init_utils(); + } +}); +var fromPathRegex; +var FileStatusSummary; +var init_FileStatusSummary = __esm2({ + "src/lib/responses/FileStatusSummary.ts"() { + fromPathRegex = /^(.+) -> (.+)$/; + FileStatusSummary = class { + constructor(path2, index2, working_dir) { + this.path = path2; + this.index = index2; + this.working_dir = working_dir; + if (index2 + working_dir === "R") { + const detail = fromPathRegex.exec(path2) || [null, path2, path2]; + this.from = detail[1] || ""; + this.path = detail[2] || ""; + } + } + }; + } +}); +function renamedFile(line) { + const [to, from] = line.split(NULL); + return { + from: from || to, + to + }; +} +function parser2(indexX, indexY, handler) { + return [`${indexX}${indexY}`, handler]; +} +function conflicts(indexX, ...indexY) { + return indexY.map((y) => parser2(indexX, y, (result, file) => append(result.conflicted, file))); +} +function splitLine(result, lineStr) { + const trimmed2 = lineStr.trim(); + switch (" ") { + case trimmed2.charAt(2): + return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.substr(3)); + case trimmed2.charAt(1): + return data(" ", trimmed2.charAt(0), trimmed2.substr(2)); + default: + return; + } + function data(index2, workingDir, path2) { + const raw = `${index2}${workingDir}`; + const handler = parsers6.get(raw); + if (handler) { + handler(result, path2); + } + if (raw !== "##" && raw !== "!!") { + result.files.push(new FileStatusSummary(path2.replace(/\0.+$/, ""), index2, workingDir)); + } + } +} +var StatusSummary; +var parsers6; +var parseStatusSummary; +var init_StatusSummary = __esm2({ + "src/lib/responses/StatusSummary.ts"() { + init_utils(); + init_FileStatusSummary(); + StatusSummary = class { + constructor() { + this.not_added = []; + this.conflicted = []; + this.created = []; + this.deleted = []; + this.ignored = void 0; + this.modified = []; + this.renamed = []; + this.files = []; + this.staged = []; + this.ahead = 0; + this.behind = 0; + this.current = null; + this.tracking = null; + this.detached = false; + this.isClean = () => { + return !this.files.length; + }; + } + }; + parsers6 = new Map([ + parser2(" ", "A", (result, file) => append(result.created, file)), + parser2(" ", "D", (result, file) => append(result.deleted, file)), + parser2(" ", "M", (result, file) => append(result.modified, file)), + parser2("A", " ", (result, file) => append(result.created, file) && append(result.staged, file)), + parser2("A", "M", (result, file) => append(result.created, file) && append(result.staged, file) && append(result.modified, file)), + parser2("D", " ", (result, file) => append(result.deleted, file) && append(result.staged, file)), + parser2("M", " ", (result, file) => append(result.modified, file) && append(result.staged, file)), + parser2("M", "M", (result, file) => append(result.modified, file) && append(result.staged, file)), + parser2("R", " ", (result, file) => { + append(result.renamed, renamedFile(file)); + }), + parser2("R", "M", (result, file) => { + const renamed = renamedFile(file); + append(result.renamed, renamed); + append(result.modified, renamed.to); + }), + parser2("!", "!", (_result, _file) => { + append(_result.ignored = _result.ignored || [], _file); + }), + parser2("?", "?", (result, file) => append(result.not_added, file)), + ...conflicts( + "A", + "A", + "U" + /* UNMERGED */ + ), + ...conflicts( + "D", + "D", + "U" + /* UNMERGED */ + ), + ...conflicts( + "U", + "A", + "D", + "U" + /* UNMERGED */ + ), + [ + "##", + (result, line) => { + const aheadReg = /ahead (\d+)/; + const behindReg = /behind (\d+)/; + const currentReg = /^(.+?(?=(?:\.{3}|\s|$)))/; + const trackingReg = /\.{3}(\S*)/; + const onEmptyBranchReg = /\son\s([\S]+)$/; + let regexResult; + regexResult = aheadReg.exec(line); + result.ahead = regexResult && +regexResult[1] || 0; + regexResult = behindReg.exec(line); + result.behind = regexResult && +regexResult[1] || 0; + regexResult = currentReg.exec(line); + result.current = regexResult && regexResult[1]; + regexResult = trackingReg.exec(line); + result.tracking = regexResult && regexResult[1]; + regexResult = onEmptyBranchReg.exec(line); + result.current = regexResult && regexResult[1] || result.current; + result.detached = /\(no branch\)/.test(line); + } + ] + ]); + parseStatusSummary = function(text2) { + const lines = text2.split(NULL); + const status2 = new StatusSummary(); + for (let i = 0, l = lines.length; i < l; ) { + let line = lines[i++].trim(); + if (!line) { + continue; + } + if (line.charAt(0) === "R") { + line += NULL + (lines[i++] || ""); + } + splitLine(status2, line); + } + return status2; + }; + } +}); +function statusTask(customArgs) { + const commands2 = [ + "status", + "--porcelain", + "-b", + "-u", + "--null", + ...customArgs.filter((arg) => !ignoredOptions.includes(arg)) + ]; + return { + format: "utf-8", + commands: commands2, + parser(text2) { + return parseStatusSummary(text2); + } + }; +} +var ignoredOptions; +var init_status = __esm2({ + "src/lib/tasks/status.ts"() { + init_StatusSummary(); + ignoredOptions = ["--null", "-z"]; + } +}); +function versionResponse(major = 0, minor = 0, patch = 0, agent = "", installed = true) { + return Object.defineProperty({ + major, + minor, + patch, + agent, + installed + }, "toString", { + value() { + return `${this.major}.${this.minor}.${this.patch}`; + }, + configurable: false, + enumerable: false + }); +} +function notInstalledResponse() { + return versionResponse(0, 0, 0, "", false); +} +function version_default() { + return { + version() { + return this._runTask({ + commands: ["--version"], + format: "utf-8", + parser: versionParser, + onError(result, error, done, fail) { + if (result.exitCode === -2) { + return done(Buffer.from(NOT_INSTALLED)); + } + fail(error); + } + }); + } + }; +} +function versionParser(stdOut) { + if (stdOut === NOT_INSTALLED) { + return notInstalledResponse(); + } + return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut); +} +var NOT_INSTALLED; +var parsers7; +var init_version = __esm2({ + "src/lib/tasks/version.ts"() { + init_utils(); + NOT_INSTALLED = "installed=false"; + parsers7 = [ + new LineParser(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/, (result, [major, minor, patch, agent = ""]) => { + Object.assign(result, versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)); + }), + new LineParser(/version (\d+)\.(\d+)\.(\D+)(.+)?$/, (result, [major, minor, patch, agent = ""]) => { + Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent)); + }) + ]; + } +}); +var simple_git_api_exports = {}; +__export2(simple_git_api_exports, { + SimpleGitApi: () => SimpleGitApi +}); +var SimpleGitApi; +var init_simple_git_api = __esm2({ + "src/lib/simple-git-api.ts"() { + init_task_callback(); + init_change_working_directory(); + init_checkout(); + init_commit(); + init_config(); + init_grep(); + init_hash_object(); + init_init(); + init_log(); + init_merge(); + init_push(); + init_status(); + init_task(); + init_version(); + init_utils(); + SimpleGitApi = class { + constructor(_executor) { + this._executor = _executor; + } + _runTask(task, then) { + const chain = this._executor.chain(); + const promise2 = chain.push(task); + if (then) { + taskCallback(task, promise2, then); + } + return Object.create(this, { + then: { value: promise2.then.bind(promise2) }, + catch: { value: promise2.catch.bind(promise2) }, + _executor: { value: chain } + }); + } + add(files) { + return this._runTask(straightThroughStringTask(["add", ...asArray(files)]), trailingFunctionArgument(arguments)); + } + cwd(directory) { + const next = trailingFunctionArgument(arguments); + if (typeof directory === "string") { + return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next); + } + if (typeof (directory == null ? void 0 : directory.path) === "string") { + return this._runTask(changeWorkingDirectoryTask(directory.path, directory.root && this._executor || void 0), next); + } + return this._runTask(configurationErrorTask("Git.cwd: workingDirectory must be supplied as a string"), next); + } + hashObject(path2, write) { + return this._runTask(hashObjectTask(path2, write === true), trailingFunctionArgument(arguments)); + } + init(bare) { + return this._runTask(initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); + } + merge() { + return this._runTask(mergeTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); + } + mergeFromTo(remote, branch2) { + if (!(filterString(remote) && filterString(branch2))) { + return this._runTask(configurationErrorTask(`Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`)); + } + return this._runTask(mergeTask([remote, branch2, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments, false)); + } + outputHandler(handler) { + this._executor.outputHandler = handler; + return this; + } + push() { + const task = pushTask({ + remote: filterType(arguments[0], filterString), + branch: filterType(arguments[1], filterString) + }, getTrailingOptions(arguments)); + return this._runTask(task, trailingFunctionArgument(arguments)); + } + stash() { + return this._runTask(straightThroughStringTask(["stash", ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); + } + status() { + return this._runTask(statusTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); + } + }; + Object.assign(SimpleGitApi.prototype, checkout_default(), commit_default(), config_default(), grep_default(), log_default(), version_default()); + } +}); +var scheduler_exports = {}; +__export2(scheduler_exports, { + Scheduler: () => Scheduler +}); +var createScheduledTask; +var Scheduler; +var init_scheduler = __esm2({ + "src/lib/runners/scheduler.ts"() { + init_utils(); + init_git_logger(); + createScheduledTask = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + const { promise: promise2, done } = (0, import_promise_deferred.createDeferred)(); + return { + promise: promise2, + done, + id + }; + }; + })(); + Scheduler = class { + constructor(concurrency = 2) { + this.concurrency = concurrency; + this.logger = createLogger("", "scheduler"); + this.pending = []; + this.running = []; + this.logger(`Constructed, concurrency=%s`, concurrency); + } + schedule() { + if (!this.pending.length || this.running.length >= this.concurrency) { + this.logger(`Schedule attempt ignored, pending=%s running=%s concurrency=%s`, this.pending.length, this.running.length, this.concurrency); + return; + } + const task = append(this.running, this.pending.shift()); + this.logger(`Attempting id=%s`, task.id); + task.done(() => { + this.logger(`Completing id=`, task.id); + remove2(this.running, task); + this.schedule(); + }); + } + next() { + const { promise: promise2, id } = append(this.pending, createScheduledTask()); + this.logger(`Scheduling id=%s`, id); + this.schedule(); + return promise2; + } + }; + } +}); +var apply_patch_exports = {}; +__export2(apply_patch_exports, { + applyPatchTask: () => applyPatchTask +}); +function applyPatchTask(patches, customArgs) { + return straightThroughStringTask(["apply", ...customArgs, ...patches]); +} +var init_apply_patch = __esm2({ + "src/lib/tasks/apply-patch.ts"() { + init_task(); + } +}); +function branchDeletionSuccess(branch2, hash2) { + return { + branch: branch2, + hash: hash2, + success: true + }; +} +function branchDeletionFailure(branch2) { + return { + branch: branch2, + hash: null, + success: false + }; +} +var BranchDeletionBatch; +var init_BranchDeleteSummary = __esm2({ + "src/lib/responses/BranchDeleteSummary.ts"() { + BranchDeletionBatch = class { + constructor() { + this.all = []; + this.branches = {}; + this.errors = []; + } + get success() { + return !this.errors.length; + } + }; + } +}); +function hasBranchDeletionError(data, processExitCode) { + return processExitCode === 1 && deleteErrorRegex.test(data); +} +var deleteSuccessRegex; +var deleteErrorRegex; +var parsers8; +var parseBranchDeletions; +var init_parse_branch_delete = __esm2({ + "src/lib/parsers/parse-branch-delete.ts"() { + init_BranchDeleteSummary(); + init_utils(); + deleteSuccessRegex = /(\S+)\s+\(\S+\s([^)]+)\)/; + deleteErrorRegex = /^error[^']+'([^']+)'/m; + parsers8 = [ + new LineParser(deleteSuccessRegex, (result, [branch2, hash2]) => { + const deletion = branchDeletionSuccess(branch2, hash2); + result.all.push(deletion); + result.branches[branch2] = deletion; + }), + new LineParser(deleteErrorRegex, (result, [branch2]) => { + const deletion = branchDeletionFailure(branch2); + result.errors.push(deletion); + result.all.push(deletion); + result.branches[branch2] = deletion; + }) + ]; + parseBranchDeletions = (stdOut, stdErr) => { + return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]); + }; + } +}); +var BranchSummaryResult; +var init_BranchSummary = __esm2({ + "src/lib/responses/BranchSummary.ts"() { + BranchSummaryResult = class { + constructor() { + this.all = []; + this.branches = {}; + this.current = ""; + this.detached = false; + } + push(status2, detached, name, commit2, label) { + if (status2 === "*") { + this.detached = detached; + this.current = name; + } + this.all.push(name); + this.branches[name] = { + current: status2 === "*", + linkedWorkTree: status2 === "+", + name, + commit: commit2, + label + }; + } + }; + } +}); +function branchStatus(input) { + return input ? input.charAt(0) : ""; +} +function parseBranchSummary(stdOut) { + return parseStringResponse(new BranchSummaryResult(), parsers9, stdOut); +} +var parsers9; +var init_parse_branch = __esm2({ + "src/lib/parsers/parse-branch.ts"() { + init_BranchSummary(); + init_utils(); + parsers9 = [ + new LineParser(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/, (result, [current, name, commit2, label]) => { + result.push(branchStatus(current), true, name, commit2, label); + }), + new LineParser(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s, (result, [current, name, commit2, label]) => { + result.push(branchStatus(current), false, name, commit2, label); + }) + ]; + } +}); +var branch_exports = {}; +__export2(branch_exports, { + branchLocalTask: () => branchLocalTask, + branchTask: () => branchTask, + containsDeleteBranchCommand: () => containsDeleteBranchCommand, + deleteBranchTask: () => deleteBranchTask, + deleteBranchesTask: () => deleteBranchesTask +}); +function containsDeleteBranchCommand(commands2) { + const deleteCommands = ["-d", "-D", "--delete"]; + return commands2.some((command) => deleteCommands.includes(command)); +} +function branchTask(customArgs) { + const isDelete = containsDeleteBranchCommand(customArgs); + const commands2 = ["branch", ...customArgs]; + if (commands2.length === 1) { + commands2.push("-a"); + } + if (!commands2.includes("-v")) { + commands2.splice(1, 0, "-v"); + } + return { + format: "utf-8", + commands: commands2, + parser(stdOut, stdErr) { + if (isDelete) { + return parseBranchDeletions(stdOut, stdErr).all[0]; + } + return parseBranchSummary(stdOut); + } + }; +} +function branchLocalTask() { + const parser3 = parseBranchSummary; + return { + format: "utf-8", + commands: ["branch", "-v"], + parser: parser3 + }; +} +function deleteBranchesTask(branches, forceDelete = false) { + return { + format: "utf-8", + commands: ["branch", "-v", forceDelete ? "-D" : "-d", ...branches], + parser(stdOut, stdErr) { + return parseBranchDeletions(stdOut, stdErr); + }, + onError({ exitCode, stdOut }, error, done, fail) { + if (!hasBranchDeletionError(String(error), exitCode)) { + return fail(error); + } + done(stdOut); + } + }; +} +function deleteBranchTask(branch2, forceDelete = false) { + const task = { + format: "utf-8", + commands: ["branch", "-v", forceDelete ? "-D" : "-d", branch2], + parser(stdOut, stdErr) { + return parseBranchDeletions(stdOut, stdErr).branches[branch2]; + }, + onError({ exitCode, stdErr, stdOut }, error, _, fail) { + if (!hasBranchDeletionError(String(error), exitCode)) { + return fail(error); + } + throw new GitResponseError(task.parser(bufferToString(stdOut), bufferToString(stdErr)), String(error)); + } + }; + return task; +} +var init_branch = __esm2({ + "src/lib/tasks/branch.ts"() { + init_git_response_error(); + init_parse_branch_delete(); + init_parse_branch(); + init_utils(); + } +}); +var parseCheckIgnore; +var init_CheckIgnore = __esm2({ + "src/lib/responses/CheckIgnore.ts"() { + parseCheckIgnore = (text2) => { + return text2.split(/\n/g).map((line) => line.trim()).filter((file) => !!file); + }; + } +}); +var check_ignore_exports = {}; +__export2(check_ignore_exports, { + checkIgnoreTask: () => checkIgnoreTask +}); +function checkIgnoreTask(paths) { + return { + commands: ["check-ignore", ...paths], + format: "utf-8", + parser: parseCheckIgnore + }; +} +var init_check_ignore = __esm2({ + "src/lib/tasks/check-ignore.ts"() { + init_CheckIgnore(); + } +}); +var clone_exports = {}; +__export2(clone_exports, { + cloneMirrorTask: () => cloneMirrorTask, + cloneTask: () => cloneTask +}); +function disallowedCommand(command) { + return /^--upload-pack(=|$)/.test(command); +} +function cloneTask(repo, directory, customArgs) { + const commands2 = ["clone", ...customArgs]; + filterString(repo) && commands2.push(repo); + filterString(directory) && commands2.push(directory); + const banned = commands2.find(disallowedCommand); + if (banned) { + return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); + } + return straightThroughStringTask(commands2); +} +function cloneMirrorTask(repo, directory, customArgs) { + append(customArgs, "--mirror"); + return cloneTask(repo, directory, customArgs); +} +var init_clone = __esm2({ + "src/lib/tasks/clone.ts"() { + init_task(); + init_utils(); + } +}); +function parseFetchResult(stdOut, stdErr) { + const result = { + raw: stdOut, + remote: null, + branches: [], + tags: [], + updated: [], + deleted: [] + }; + return parseStringResponse(result, parsers10, [stdOut, stdErr]); +} +var parsers10; +var init_parse_fetch = __esm2({ + "src/lib/parsers/parse-fetch.ts"() { + init_utils(); + parsers10 = [ + new LineParser(/From (.+)$/, (result, [remote]) => { + result.remote = remote; + }), + new LineParser(/\* \[new branch]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { + result.branches.push({ + name, + tracking + }); + }), + new LineParser(/\* \[new tag]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { + result.tags.push({ + name, + tracking + }); + }), + new LineParser(/- \[deleted]\s+\S+\s*-> (.+)$/, (result, [tracking]) => { + result.deleted.push({ + tracking + }); + }), + new LineParser(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/, (result, [from, to, name, tracking]) => { + result.updated.push({ + name, + tracking, + to, + from + }); + }) + ]; + } +}); +var fetch_exports = {}; +__export2(fetch_exports, { + fetchTask: () => fetchTask +}); +function disallowedCommand2(command) { + return /^--upload-pack(=|$)/.test(command); +} +function fetchTask(remote, branch2, customArgs) { + const commands2 = ["fetch", ...customArgs]; + if (remote && branch2) { + commands2.push(remote, branch2); + } + const banned = commands2.find(disallowedCommand2); + if (banned) { + return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); + } + return { + commands: commands2, + format: "utf-8", + parser: parseFetchResult + }; +} +var init_fetch = __esm2({ + "src/lib/tasks/fetch.ts"() { + init_parse_fetch(); + init_task(); + } +}); +function parseMoveResult(stdOut) { + return parseStringResponse({ moves: [] }, parsers11, stdOut); +} +var parsers11; +var init_parse_move = __esm2({ + "src/lib/parsers/parse-move.ts"() { + init_utils(); + parsers11 = [ + new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => { + result.moves.push({ from, to }); + }) + ]; + } +}); +var move_exports = {}; +__export2(move_exports, { + moveTask: () => moveTask +}); +function moveTask(from, to) { + return { + commands: ["mv", "-v", ...asArray(from), to], + format: "utf-8", + parser: parseMoveResult + }; +} +var init_move = __esm2({ + "src/lib/tasks/move.ts"() { + init_parse_move(); + init_utils(); + } +}); +var pull_exports = {}; +__export2(pull_exports, { + pullTask: () => pullTask +}); +function pullTask(remote, branch2, customArgs) { + const commands2 = ["pull", ...customArgs]; + if (remote && branch2) { + commands2.splice(1, 0, remote, branch2); + } + return { + commands: commands2, + format: "utf-8", + parser(stdOut, stdErr) { + return parsePullResult(stdOut, stdErr); + }, + onError(result, _error, _done, fail) { + const pullError = parsePullErrorResult(bufferToString(result.stdOut), bufferToString(result.stdErr)); + if (pullError) { + return fail(new GitResponseError(pullError)); + } + fail(_error); + } + }; +} +var init_pull = __esm2({ + "src/lib/tasks/pull.ts"() { + init_git_response_error(); + init_parse_pull(); + init_utils(); + } +}); +function parseGetRemotes(text2) { + const remotes = {}; + forEach(text2, ([name]) => remotes[name] = { name }); + return Object.values(remotes); +} +function parseGetRemotesVerbose(text2) { + const remotes = {}; + forEach(text2, ([name, url, purpose]) => { + if (!remotes.hasOwnProperty(name)) { + remotes[name] = { + name, + refs: { fetch: "", push: "" } + }; + } + if (purpose && url) { + remotes[name].refs[purpose.replace(/[^a-z]/g, "")] = url; + } + }); + return Object.values(remotes); +} +function forEach(text2, handler) { + forEachLineWithContent(text2, (line) => handler(line.split(/\s+/))); +} +var init_GetRemoteSummary = __esm2({ + "src/lib/responses/GetRemoteSummary.ts"() { + init_utils(); + } +}); +var remote_exports = {}; +__export2(remote_exports, { + addRemoteTask: () => addRemoteTask, + getRemotesTask: () => getRemotesTask, + listRemotesTask: () => listRemotesTask, + remoteTask: () => remoteTask, + removeRemoteTask: () => removeRemoteTask +}); +function addRemoteTask(remoteName, remoteRepo, customArgs = []) { + return straightThroughStringTask(["remote", "add", ...customArgs, remoteName, remoteRepo]); +} +function getRemotesTask(verbose) { + const commands2 = ["remote"]; + if (verbose) { + commands2.push("-v"); + } + return { + commands: commands2, + format: "utf-8", + parser: verbose ? parseGetRemotesVerbose : parseGetRemotes + }; +} +function listRemotesTask(customArgs = []) { + const commands2 = [...customArgs]; + if (commands2[0] !== "ls-remote") { + commands2.unshift("ls-remote"); + } + return straightThroughStringTask(commands2); +} +function remoteTask(customArgs = []) { + const commands2 = [...customArgs]; + if (commands2[0] !== "remote") { + commands2.unshift("remote"); + } + return straightThroughStringTask(commands2); +} +function removeRemoteTask(remoteName) { + return straightThroughStringTask(["remote", "remove", remoteName]); +} +var init_remote = __esm2({ + "src/lib/tasks/remote.ts"() { + init_GetRemoteSummary(); + init_task(); + } +}); +var stash_list_exports = {}; +__export2(stash_list_exports, { + stashListTask: () => stashListTask +}); +function stashListTask(opt = {}, customArgs) { + const options = parseLogOptions(opt); + const commands2 = ["stash", "list", ...options.commands, ...customArgs]; + const parser3 = createListLogSummaryParser(options.splitter, options.fields, logFormatFromCommand(commands2)); + return validateLogFormatConfig(commands2) || { + commands: commands2, + format: "utf-8", + parser: parser3 + }; +} +var init_stash_list = __esm2({ + "src/lib/tasks/stash-list.ts"() { + init_log_format(); + init_parse_list_log_summary(); + init_diff(); + init_log(); + } +}); +var sub_module_exports = {}; +__export2(sub_module_exports, { + addSubModuleTask: () => addSubModuleTask, + initSubModuleTask: () => initSubModuleTask, + subModuleTask: () => subModuleTask, + updateSubModuleTask: () => updateSubModuleTask +}); +function addSubModuleTask(repo, path2) { + return subModuleTask(["add", repo, path2]); +} +function initSubModuleTask(customArgs) { + return subModuleTask(["init", ...customArgs]); +} +function subModuleTask(customArgs) { + const commands2 = [...customArgs]; + if (commands2[0] !== "submodule") { + commands2.unshift("submodule"); + } + return straightThroughStringTask(commands2); +} +function updateSubModuleTask(customArgs) { + return subModuleTask(["update", ...customArgs]); +} +var init_sub_module = __esm2({ + "src/lib/tasks/sub-module.ts"() { + init_task(); + } +}); +function singleSorted(a, b) { + const aIsNum = isNaN(a); + const bIsNum = isNaN(b); + if (aIsNum !== bIsNum) { + return aIsNum ? 1 : -1; + } + return aIsNum ? sorted(a, b) : 0; +} +function sorted(a, b) { + return a === b ? 0 : a > b ? 1 : -1; +} +function trimmed(input) { + return input.trim(); +} +function toNumber(input) { + if (typeof input === "string") { + return parseInt(input.replace(/^\D+/g, ""), 10) || 0; + } + return 0; +} +var TagList; +var parseTagList; +var init_TagList = __esm2({ + "src/lib/responses/TagList.ts"() { + TagList = class { + constructor(all, latest) { + this.all = all; + this.latest = latest; + } + }; + parseTagList = function(data, customSort = false) { + const tags = data.split("\n").map(trimmed).filter(Boolean); + if (!customSort) { + tags.sort(function(tagA, tagB) { + const partsA = tagA.split("."); + const partsB = tagB.split("."); + if (partsA.length === 1 || partsB.length === 1) { + return singleSorted(toNumber(partsA[0]), toNumber(partsB[0])); + } + for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) { + const diff3 = sorted(toNumber(partsA[i]), toNumber(partsB[i])); + if (diff3) { + return diff3; + } + } + return 0; + }); + } + const latest = customSort ? tags[0] : [...tags].reverse().find((tag2) => tag2.indexOf(".") >= 0); + return new TagList(tags, latest); + }; + } +}); +var tag_exports = {}; +__export2(tag_exports, { + addAnnotatedTagTask: () => addAnnotatedTagTask, + addTagTask: () => addTagTask, + tagListTask: () => tagListTask +}); +function tagListTask(customArgs = []) { + const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option)); + return { + format: "utf-8", + commands: ["tag", "-l", ...customArgs], + parser(text2) { + return parseTagList(text2, hasCustomSort); + } + }; +} +function addTagTask(name) { + return { + format: "utf-8", + commands: ["tag", name], + parser() { + return { name }; + } + }; +} +function addAnnotatedTagTask(name, tagMessage) { + return { + format: "utf-8", + commands: ["tag", "-a", "-m", tagMessage, name], + parser() { + return { name }; + } + }; +} +var init_tag = __esm2({ + "src/lib/tasks/tag.ts"() { + init_TagList(); + } +}); +var require_git = __commonJS2({ + "src/git.js"(exports2, module2) { + var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS2(git_executor_exports)); + var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS2(simple_git_api_exports)); + var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS2(scheduler_exports)); + var { configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS2(task_exports)); + var { + asArray: asArray2, + filterArray: filterArray2, + filterPrimitives: filterPrimitives2, + filterString: filterString2, + filterStringOrStringArray: filterStringOrStringArray2, + filterType: filterType2, + getTrailingOptions: getTrailingOptions2, + trailingFunctionArgument: trailingFunctionArgument2, + trailingOptionsArgument: trailingOptionsArgument2 + } = (init_utils(), __toCommonJS2(utils_exports)); + var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS2(apply_patch_exports)); + var { + branchTask: branchTask2, + branchLocalTask: branchLocalTask2, + deleteBranchesTask: deleteBranchesTask2, + deleteBranchTask: deleteBranchTask2 + } = (init_branch(), __toCommonJS2(branch_exports)); + var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS2(check_ignore_exports)); + var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS2(check_is_repo_exports)); + var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS2(clone_exports)); + var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS2(clean_exports)); + var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS2(diff_exports)); + var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS2(fetch_exports)); + var { moveTask: moveTask2 } = (init_move(), __toCommonJS2(move_exports)); + var { pullTask: pullTask2 } = (init_pull(), __toCommonJS2(pull_exports)); + var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS2(push_exports)); + var { + addRemoteTask: addRemoteTask2, + getRemotesTask: getRemotesTask2, + listRemotesTask: listRemotesTask2, + remoteTask: remoteTask2, + removeRemoteTask: removeRemoteTask2 + } = (init_remote(), __toCommonJS2(remote_exports)); + var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS2(reset_exports)); + var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS2(stash_list_exports)); + var { + addSubModuleTask: addSubModuleTask2, + initSubModuleTask: initSubModuleTask2, + subModuleTask: subModuleTask2, + updateSubModuleTask: updateSubModuleTask2 + } = (init_sub_module(), __toCommonJS2(sub_module_exports)); + var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS2(tag_exports)); + var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS2(task_exports)); + function Git2(options, plugins) { + this._executor = new GitExecutor2(options.binary, options.baseDir, new Scheduler2(options.maxConcurrentProcesses), plugins); + this._trimmed = options.trimmed; + } + (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2; + Git2.prototype.customBinary = function(command) { + this._executor.binary = command; + return this; + }; + Git2.prototype.env = function(name, value) { + if (arguments.length === 1 && typeof name === "object") { + this._executor.env = name; + } else { + (this._executor.env = this._executor.env || {})[name] = value; + } + return this; + }; + Git2.prototype.stashList = function(options) { + return this._runTask(stashListTask2(trailingOptionsArgument2(arguments) || {}, filterArray2(options) && options || []), trailingFunctionArgument2(arguments)); + }; + function createCloneTask(api, task, repoPath, localPath) { + if (typeof repoPath !== "string") { + return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`); + } + return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments)); + } + Git2.prototype.clone = function() { + return this._runTask(createCloneTask("clone", cloneTask2, ...arguments), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.mirror = function() { + return this._runTask(createCloneTask("mirror", cloneMirrorTask2, ...arguments), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.mv = function(from, to) { + return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.checkoutLatestTag = function(then) { + var git = this; + return this.pull(function() { + git.tags(function(err, tags) { + git.checkout(tags.latest, then); + }); + }); + }; + Git2.prototype.pull = function(remote, branch2, options, then) { + return this._runTask(pullTask2(filterType2(remote, filterString2), filterType2(branch2, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.fetch = function(remote, branch2) { + return this._runTask(fetchTask2(filterType2(remote, filterString2), filterType2(branch2, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.silent = function(silence) { + console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3"); + return this; + }; + Git2.prototype.tags = function(options, then) { + return this._runTask(tagListTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.rebase = function() { + return this._runTask(straightThroughStringTask2(["rebase", ...getTrailingOptions2(arguments)]), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.reset = function(mode) { + return this._runTask(resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.revert = function(commit2) { + const next = trailingFunctionArgument2(arguments); + if (typeof commit2 !== "string") { + return this._runTask(configurationErrorTask2("Commit must be a string"), next); + } + return this._runTask(straightThroughStringTask2(["revert", ...getTrailingOptions2(arguments, 0, true), commit2]), next); + }; + Git2.prototype.addTag = function(name) { + const task = typeof name === "string" ? addTagTask2(name) : configurationErrorTask2("Git.addTag requires a tag name"); + return this._runTask(task, trailingFunctionArgument2(arguments)); + }; + Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) { + return this._runTask(addAnnotatedTagTask2(tagName, tagMessage), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) { + return this._runTask(deleteBranchTask2(branchName, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) { + return this._runTask(deleteBranchesTask2(branchNames, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.branch = function(options, then) { + return this._runTask(branchTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.branchLocal = function(then) { + return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.raw = function(commands2) { + const createRestCommands = !Array.isArray(commands2); + const command = [].slice.call(createRestCommands ? arguments : commands2, 0); + for (let i = 0; i < command.length && createRestCommands; i++) { + if (!filterPrimitives2(command[i])) { + command.splice(i, command.length - i); + break; + } + } + command.push(...getTrailingOptions2(arguments, 0, true)); + var next = trailingFunctionArgument2(arguments); + if (!command.length) { + return this._runTask(configurationErrorTask2("Raw: must supply one or more command to execute"), next); + } + return this._runTask(straightThroughStringTask2(command, this._trimmed), next); + }; + Git2.prototype.submoduleAdd = function(repo, path2, then) { + return this._runTask(addSubModuleTask2(repo, path2), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.submoduleUpdate = function(args, then) { + return this._runTask(updateSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.submoduleInit = function(args, then) { + return this._runTask(initSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.subModule = function(options, then) { + return this._runTask(subModuleTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.listRemote = function() { + return this._runTask(listRemotesTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.addRemote = function(remoteName, remoteRepo, then) { + return this._runTask(addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.removeRemote = function(remoteName, then) { + return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.getRemotes = function(verbose, then) { + return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.remote = function(options, then) { + return this._runTask(remoteTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.tag = function(options, then) { + const command = getTrailingOptions2(arguments); + if (command[0] !== "tag") { + command.unshift("tag"); + } + return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.updateServerInfo = function(then) { + return this._runTask(straightThroughStringTask2(["update-server-info"]), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.pushTags = function(remote, then) { + const task = pushTagsTask2({ remote: filterType2(remote, filterString2) }, getTrailingOptions2(arguments)); + return this._runTask(task, trailingFunctionArgument2(arguments)); + }; + Git2.prototype.rm = function(files) { + return this._runTask(straightThroughStringTask2(["rm", "-f", ...asArray2(files)]), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.rmKeepLocal = function(files) { + return this._runTask(straightThroughStringTask2(["rm", "--cached", ...asArray2(files)]), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.catFile = function(options, then) { + return this._catFile("utf-8", arguments); + }; + Git2.prototype.binaryCatFile = function() { + return this._catFile("buffer", arguments); + }; + Git2.prototype._catFile = function(format, args) { + var handler = trailingFunctionArgument2(args); + var command = ["cat-file"]; + var options = args[0]; + if (typeof options === "string") { + return this._runTask(configurationErrorTask2("Git.catFile: options must be supplied as an array of strings"), handler); + } + if (Array.isArray(options)) { + command.push.apply(command, options); + } + const task = format === "buffer" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command); + return this._runTask(task, handler); + }; + Git2.prototype.diff = function(options, then) { + const task = filterString2(options) ? configurationErrorTask2("git.diff: supplying options as a single string is no longer supported, switch to an array of strings") : straightThroughStringTask2(["diff", ...getTrailingOptions2(arguments)]); + return this._runTask(task, trailingFunctionArgument2(arguments)); + }; + Git2.prototype.diffSummary = function() { + return this._runTask(diffSummaryTask2(getTrailingOptions2(arguments, 1)), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.applyPatch = function(patches) { + const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(`git.applyPatch requires one or more string patches as the first argument`) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1))); + return this._runTask(task, trailingFunctionArgument2(arguments)); + }; + Git2.prototype.revparse = function() { + const commands2 = ["rev-parse", ...getTrailingOptions2(arguments, true)]; + return this._runTask(straightThroughStringTask2(commands2, true), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.show = function(options, then) { + return this._runTask(straightThroughStringTask2(["show", ...getTrailingOptions2(arguments, 1)]), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.clean = function(mode, options, then) { + const usingCleanOptionsArray = isCleanOptionsArray2(mode); + const cleanMode = usingCleanOptionsArray && mode.join("") || filterType2(mode, filterString2) || ""; + const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0)); + return this._runTask(cleanWithOptionsTask2(cleanMode, customArgs), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.exec = function(then) { + const task = { + commands: [], + format: "utf-8", + parser() { + if (typeof then === "function") { + then(); + } + } + }; + return this._runTask(task); + }; + Git2.prototype.clearQueue = function() { + return this; + }; + Git2.prototype.checkIgnore = function(pathnames, then) { + return this._runTask(checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))), trailingFunctionArgument2(arguments)); + }; + Git2.prototype.checkIsRepo = function(checkType, then) { + return this._runTask(checkIsRepoTask2(filterType2(checkType, filterString2)), trailingFunctionArgument2(arguments)); + }; + module2.exports = Git2; + } +}); +init_git_error(); +var GitConstructError = class extends GitError { + constructor(config, message) { + super(void 0, message); + this.config = config; + } +}; +init_git_error(); +init_git_error(); +var GitPluginError = class extends GitError { + constructor(task, plugin, message) { + super(task, message); + this.task = task; + this.plugin = plugin; + Object.setPrototypeOf(this, new.target.prototype); + } +}; +init_git_response_error(); +init_task_configuration_error(); +init_check_is_repo(); +init_clean(); +init_config(); +init_grep(); +init_reset(); +function abortPlugin(signal) { + if (!signal) { + return; + } + const onSpawnAfter = { + type: "spawn.after", + action(_data, context) { + function kill() { + context.kill(new GitPluginError(void 0, "abort", "Abort signal received")); + } + signal.addEventListener("abort", kill); + context.spawned.on("close", () => signal.removeEventListener("abort", kill)); + } + }; + const onSpawnBefore = { + type: "spawn.before", + action(_data, context) { + if (signal.aborted) { + context.kill(new GitPluginError(void 0, "abort", "Abort already signaled")); + } + } + }; + return [onSpawnBefore, onSpawnAfter]; +} +function isConfigSwitch(arg) { + return typeof arg === "string" && arg.trim().toLowerCase() === "-c"; +} +function preventProtocolOverride(arg, next) { + if (!isConfigSwitch(arg)) { + return; + } + if (!/^\s*protocol(.[a-z]+)?.allow/.test(next)) { + return; + } + throw new GitPluginError(void 0, "unsafe", "Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol"); +} +function preventUploadPack(arg, method2) { + if (/^\s*--(upload|receive)-pack/.test(arg)) { + throw new GitPluginError(void 0, "unsafe", `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`); + } + if (method2 === "clone" && /^\s*-u\b/.test(arg)) { + throw new GitPluginError(void 0, "unsafe", `Use of clone with option -u is not permitted without enabling allowUnsafePack`); + } + if (method2 === "push" && /^\s*--exec\b/.test(arg)) { + throw new GitPluginError(void 0, "unsafe", `Use of push with option --exec is not permitted without enabling allowUnsafePack`); + } +} +function blockUnsafeOperationsPlugin({ + allowUnsafeProtocolOverride = false, + allowUnsafePack = false +} = {}) { + return { + type: "spawn.args", + action(args, context) { + args.forEach((current, index2) => { + const next = index2 < args.length ? args[index2 + 1] : ""; + allowUnsafeProtocolOverride || preventProtocolOverride(current, next); + allowUnsafePack || preventUploadPack(current, context.method); + }); + return args; + } + }; +} +init_utils(); +function commandConfigPrefixingPlugin(configuration) { + const prefix = prefixedArray(configuration, "-c"); + return { + type: "spawn.args", + action(data) { + return [...prefix, ...data]; + } + }; +} +init_utils(); +var never = (0, import_promise_deferred2.deferred)().promise; +function completionDetectionPlugin({ + onClose = true, + onExit = 50 +} = {}) { + function createEvents() { + let exitCode = -1; + const events = { + close: (0, import_promise_deferred2.deferred)(), + closeTimeout: (0, import_promise_deferred2.deferred)(), + exit: (0, import_promise_deferred2.deferred)(), + exitTimeout: (0, import_promise_deferred2.deferred)() + }; + const result = Promise.race([ + onClose === false ? never : events.closeTimeout.promise, + onExit === false ? never : events.exitTimeout.promise + ]); + configureTimeout(onClose, events.close, events.closeTimeout); + configureTimeout(onExit, events.exit, events.exitTimeout); + return { + close(code) { + exitCode = code; + events.close.done(); + }, + exit(code) { + exitCode = code; + events.exit.done(); + }, + get exitCode() { + return exitCode; + }, + result + }; + } + function configureTimeout(flag, event, timeout) { + if (flag === false) { + return; + } + (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done); + } + return { + type: "spawn.after", + action(_0, _1) { + return __async(this, arguments, function* (_data, { spawned, close }) { + var _a2, _b; + const events = createEvents(); + let deferClose = true; + let quickClose = () => void (deferClose = false); + (_a2 = spawned.stdout) == null ? void 0 : _a2.on("data", quickClose); + (_b = spawned.stderr) == null ? void 0 : _b.on("data", quickClose); + spawned.on("error", quickClose); + spawned.on("close", (code) => events.close(code)); + spawned.on("exit", (code) => events.exit(code)); + try { + yield events.result; + if (deferClose) { + yield delay(50); + } + close(events.exitCode); + } catch (err) { + close(events.exitCode, err); + } + }); + } + }; +} +init_git_error(); +function isTaskError(result) { + return !!(result.exitCode && result.stdErr.length); +} +function getErrorMessage(result) { + return Buffer.concat([...result.stdOut, ...result.stdErr]); +} +function errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) { + return (error, result) => { + if (!overwrite && error || !isError(result)) { + return error; + } + return errorMessage(result); + }; +} +function errorDetectionPlugin(config) { + return { + type: "task.error", + action(data, context) { + const error = config(data.error, { + stdErr: context.stdErr, + stdOut: context.stdOut, + exitCode: context.exitCode + }); + if (Buffer.isBuffer(error)) { + return { error: new GitError(void 0, error.toString("utf-8")) }; + } + return { + error + }; + } + }; +} +init_utils(); +var PluginStore = class { + constructor() { + this.plugins = /* @__PURE__ */ new Set(); + } + add(plugin) { + const plugins = []; + asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2))); + return () => { + plugins.forEach((plugin2) => this.plugins.delete(plugin2)); + }; + } + exec(type, data, context) { + let output = data; + const contextual = Object.freeze(Object.create(context)); + for (const plugin of this.plugins) { + if (plugin.type === type) { + output = plugin.action(output, contextual); + } + } + return output; + } +}; +init_utils(); +function progressMonitorPlugin(progress) { + const progressCommand = "--progress"; + const progressMethods = ["checkout", "clone", "fetch", "pull", "push"]; + const onProgress = { + type: "spawn.after", + action(_data, context) { + var _a2; + if (!context.commands.includes(progressCommand)) { + return; + } + (_a2 = context.spawned.stderr) == null ? void 0 : _a2.on("data", (chunk) => { + const message = /^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(chunk.toString("utf8")); + if (!message) { + return; + } + progress({ + method: context.method, + stage: progressEventStage(message[1]), + progress: asNumber(message[2]), + processed: asNumber(message[3]), + total: asNumber(message[4]) + }); + }); + } + }; + const onArgs = { + type: "spawn.args", + action(args, context) { + if (!progressMethods.includes(context.method)) { + return args; + } + return including(args, progressCommand); + } + }; + return [onArgs, onProgress]; +} +function progressEventStage(input) { + return String(input.toLowerCase().split(" ", 1)) || "unknown"; +} +init_utils(); +function spawnOptionsPlugin(spawnOptions) { + const options = pick(spawnOptions, ["uid", "gid"]); + return { + type: "spawn.options", + action(data) { + return __spreadValues(__spreadValues({}, options), data); + } + }; +} +function timeoutPlugin({ + block, + stdErr = true, + stdOut = true +}) { + if (block > 0) { + return { + type: "spawn.after", + action(_data, context) { + var _a2, _b; + let timeout; + function wait3() { + timeout && clearTimeout(timeout); + timeout = setTimeout(kill, block); + } + function stop() { + var _a3, _b2; + (_a3 = context.spawned.stdout) == null ? void 0 : _a3.off("data", wait3); + (_b2 = context.spawned.stderr) == null ? void 0 : _b2.off("data", wait3); + context.spawned.off("exit", stop); + context.spawned.off("close", stop); + timeout && clearTimeout(timeout); + } + function kill() { + stop(); + context.kill(new GitPluginError(void 0, "timeout", `block timeout reached`)); + } + stdOut && ((_a2 = context.spawned.stdout) == null ? void 0 : _a2.on("data", wait3)); + stdErr && ((_b = context.spawned.stderr) == null ? void 0 : _b.on("data", wait3)); + context.spawned.on("exit", stop); + context.spawned.on("close", stop); + wait3(); + } + }; + } +} +init_utils(); +var Git = require_git(); +function gitInstanceFactory(baseDir, options) { + const plugins = new PluginStore(); + const config = createInstanceConfig(baseDir && (typeof baseDir === "string" ? { baseDir } : baseDir) || {}, options); + if (!folderExists(config.baseDir)) { + throw new GitConstructError(config, `Cannot use simple-git on a directory that does not exist`); + } + if (Array.isArray(config.config)) { + plugins.add(commandConfigPrefixingPlugin(config.config)); + } + plugins.add(blockUnsafeOperationsPlugin(config.unsafe)); + plugins.add(completionDetectionPlugin(config.completion)); + config.abort && plugins.add(abortPlugin(config.abort)); + config.progress && plugins.add(progressMonitorPlugin(config.progress)); + config.timeout && plugins.add(timeoutPlugin(config.timeout)); + config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions)); + plugins.add(errorDetectionPlugin(errorDetectionHandler(true))); + config.errors && plugins.add(errorDetectionPlugin(config.errors)); + return new Git(config, plugins); +} +init_git_response_error(); +var esm_default = gitInstanceFactory; + +// src/constants.ts +init_polyfill_buffer(); +var import_obsidian2 = require("obsidian"); +var DATE_FORMAT = "YYYY-MM-DD"; +var DATE_TIME_FORMAT_MINUTES = `${DATE_FORMAT} HH:mm`; +var DATE_TIME_FORMAT_SECONDS = `${DATE_FORMAT} HH:mm:ss`; +var GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH = 40; +var DEFAULT_SETTINGS = { + commitMessage: "vault backup: {{date}}", + commitDateFormat: DATE_TIME_FORMAT_SECONDS, + autoSaveInterval: 0, + autoPushInterval: 0, + autoPullInterval: 0, + autoPullOnBoot: false, + disablePush: false, + pullBeforePush: true, + disablePopups: false, + disablePopupsForNoChanges: false, + listChangedFilesInMessageBody: false, + showStatusBar: true, + updateSubmodules: false, + syncMethod: "merge", + customMessageOnAutoBackup: false, + autoBackupAfterFileChange: false, + treeStructure: false, + refreshSourceControl: import_obsidian2.Platform.isDesktopApp, + basePath: "", + differentIntervalCommitAndPush: false, + changedFilesInStatusBar: false, + showedMobileNotice: false, + refreshSourceControlTimer: 7e3, + showBranchStatusBar: true, + setLastSaveToLastCommit: false, + submoduleRecurseCheckout: false, + gitDir: "", + showFileMenu: true, + authorInHistoryView: "hide", + dateInHistoryView: false, + lineAuthor: { + show: false, + followMovement: "inactive", + authorDisplay: "initials", + showCommitHash: false, + dateTimeFormatOptions: "date", + dateTimeFormatCustomString: DATE_TIME_FORMAT_MINUTES, + dateTimeTimezone: "viewer-local", + coloringMaxAge: "1y", + // colors were picked via: + // https://color.adobe.com/de/create/color-accessibility + colorNew: { r: 255, g: 150, b: 150 }, + colorOld: { r: 120, g: 160, b: 255 }, + textColorCss: "var(--text-muted)", + // more pronounced than line numbers, but less than the content text + ignoreWhitespace: false, + gutterSpacingFallbackLength: 5 + } +}; +var SOURCE_CONTROL_VIEW_CONFIG = { + type: "git-view", + name: "Source Control", + icon: "git-pull-request" +}; +var HISTORY_VIEW_CONFIG = { + type: "git-history-view", + name: "History", + icon: "history" +}; +var DIFF_VIEW_CONFIG = { + type: "diff-view", + name: "Diff View", + icon: "git-pull-request" +}; + +// src/types.ts +init_polyfill_buffer(); +function mergeSettingsByPriority(low, high) { + const lineAuthor = Object.assign({}, low.lineAuthor, high.lineAuthor); + return Object.assign({}, low, high, { lineAuthor }); +} + +// src/utils.ts +init_polyfill_buffer(); +var cssColorConverter = __toESM(require_lib3()); +var import_deep_equal = __toESM(require_deep_equal()); +var import_obsidian3 = require("obsidian"); +var worthWalking2 = (filepath, root2) => { + if (filepath === "." || root2 == null || root2.length === 0 || root2 === ".") { + return true; + } + if (root2.length >= filepath.length) { + return root2.startsWith(filepath); + } else { + return filepath.startsWith(root2); + } +}; +function getNewLeaf(event) { + let leaf; + if (event) { + if (event.button === 0 || event.button === 1) { + const type = import_obsidian3.Keymap.isModEvent(event); + leaf = app.workspace.getLeaf(type); + } + } else { + leaf = app.workspace.getLeaf(false); + } + return leaf; +} +function mayTriggerFileMenu(app2, event, filePath, view, source) { + if (event.button == 2) { + const file = app2.vault.getAbstractFileByPath(filePath); + if (file != null) { + const fileMenu = new import_obsidian3.Menu(); + app2.workspace.trigger("file-menu", fileMenu, file, source, view); + fileMenu.showAtPosition({ x: event.pageX, y: event.pageY }); + } + } +} +function impossibleBranch(x) { + throw new Error("Impossible branch: " + x); +} +function rgbToString(rgb) { + return `rgb(${rgb.r},${rgb.g},${rgb.b})`; +} +function convertToRgb(str) { + var _a2; + const color = (_a2 = cssColorConverter.fromString(str)) == null ? void 0 : _a2.toRgbaArray(); + if (color === void 0) { + return void 0; + } + const [r, g, b] = color; + return { r, g, b }; +} +function momentToEpochSeconds(instant) { + return instant.diff(import_obsidian3.moment.unix(0), "seconds"); +} +function median(array) { + if (array.length === 0) return void 0; + return array.slice().sort()[Math.floor(array.length / 2)]; +} +function strictDeepEqual(a, b) { + return (0, import_deep_equal.default)(a, b, { strict: true }); +} +function resizeToLength(original, desiredLength, fillChar) { + if (original.length <= desiredLength) { + const prefix = new Array(desiredLength - original.length).fill(fillChar).join(""); + return prefix + original; + } else { + return original.substring(original.length - desiredLength); + } +} +function prefixOfLengthAsWhitespace(toBeRenderedText, whitespacePrefixLength) { + if (whitespacePrefixLength <= 0) return toBeRenderedText; + const whitespacePrefix = new Array(whitespacePrefixLength).fill(" ").join(""); + const originalSuffix = toBeRenderedText.substring( + whitespacePrefixLength, + toBeRenderedText.length + ); + return whitespacePrefix + originalSuffix; +} +function between(l, x, r) { + return l <= x && x <= r; +} +function splitRemoteBranch(remoteBranch) { + const [remote, ...branch2] = remoteBranch.split("/"); + return [remote, branch2.length === 0 ? void 0 : branch2.join("/")]; +} +function getDisplayPath(path2) { + if (path2.endsWith("/")) return path2; + return path2.split("/").last().replace(".md", ""); +} +function formatMinutes(minutes) { + if (minutes === 1) return "1 minute"; + return `${minutes} minutes`; +} + +// src/gitManager/gitManager.ts +init_polyfill_buffer(); +var GitManager = class { + constructor(plugin) { + this.plugin = plugin; + this.app = plugin.app; + } + // Constructs a path relative to the vault from a path relative to the git repository + getRelativeVaultPath(path2) { + if (this.plugin.settings.basePath) { + return this.plugin.settings.basePath + "/" + path2; + } else { + return path2; + } + } + // Constructs a path relative to the git repository from a path relative to the vault + // + // @param doConversion - If false, the path is returned as is. This is added because that parameter is often passed on to functions where this method is called. + getRelativeRepoPath(filePath, doConversion = true) { + if (doConversion) { + if (this.plugin.settings.basePath.length > 0) { + return filePath.substring( + this.plugin.settings.basePath.length + 1 + ); + } + } + return filePath; + } + _getTreeStructure(children2, beginLength = 0) { + const list = []; + children2 = [...children2]; + while (children2.length > 0) { + const first2 = children2.first(); + const restPath = first2.path.substring(beginLength); + if (restPath.contains("/")) { + const title = restPath.substring(0, restPath.indexOf("/")); + const childrenWithSameTitle = children2.filter((item) => { + return item.path.substring(beginLength).startsWith(title + "/"); + }); + childrenWithSameTitle.forEach((item) => children2.remove(item)); + const path2 = first2.path.substring( + 0, + restPath.indexOf("/") + beginLength + ); + list.push({ + title, + path: path2, + vaultPath: this.getRelativeVaultPath(path2), + children: this._getTreeStructure( + childrenWithSameTitle, + (beginLength > 0 ? beginLength + title.length : title.length) + 1 + ) + }); + } else { + list.push({ + title: restPath, + data: first2, + path: first2.path, + vaultPath: this.getRelativeVaultPath(first2.path) + }); + children2.remove(first2); + } + } + return list; + } + /* + * Sorts the children and simplifies the title + * If a node only contains another subdirectory, that subdirectory is moved up one level and integrated into the parent node + */ + simplify(tree) { + var _a2, _b, _c, _d; + for (const node of tree) { + while (true) { + const singleChild = ((_a2 = node.children) == null ? void 0 : _a2.length) == 1; + const singleChildIsDir = ((_c = (_b = node.children) == null ? void 0 : _b.first()) == null ? void 0 : _c.data) == void 0; + if (!(node.children != void 0 && singleChild && singleChildIsDir)) + break; + const child = node.children.first(); + node.title += "/" + child.title; + node.data = child.data; + node.path = child.path; + node.vaultPath = child.vaultPath; + node.children = child.children; + } + if (node.children != void 0) { + this.simplify(node.children); + } + (_d = node.children) == null ? void 0 : _d.sort((a, b) => { + const dirCompare = (b.data == void 0 ? 1 : 0) - (a.data == void 0 ? 1 : 0); + if (dirCompare != 0) { + return dirCompare; + } else { + return a.title.localeCompare(b.title); + } + }); + } + return tree.sort((a, b) => { + const dirCompare = (b.data == void 0 ? 1 : 0) - (a.data == void 0 ? 1 : 0); + if (dirCompare != 0) { + return dirCompare; + } else { + return a.title.localeCompare(b.title); + } + }); + } + getTreeStructure(children2) { + const tree = this._getTreeStructure(children2); + const res = this.simplify(tree); + return res; + } + async formatCommitMessage(template) { + let status2; + if (template.includes("{{numFiles}}")) { + status2 = await this.status(); + const numFiles = status2.staged.length; + template = template.replace("{{numFiles}}", String(numFiles)); + } + if (template.includes("{{hostname}}")) { + const hostname = this.plugin.localStorage.getHostname() || ""; + template = template.replace("{{hostname}}", hostname); + } + if (template.includes("{{files}}")) { + status2 = status2 != null ? status2 : await this.status(); + const changeset = {}; + let files = ""; + if (status2.staged.length < 100) { + status2.staged.forEach((value) => { + if (value.index in changeset) { + changeset[value.index].push(value.path); + } else { + changeset[value.index] = [value.path]; + } + }); + const chunks = []; + for (const [action, files2] of Object.entries(changeset)) { + chunks.push(action + " " + files2.join(" ")); + } + files = chunks.join(", "); + } else { + files = "Too many files to list"; + } + template = template.replace("{{files}}", files); + } + const moment6 = window.moment; + template = template.replace( + "{{date}}", + moment6().format(this.plugin.settings.commitDateFormat) + ); + if (this.plugin.settings.listChangedFilesInMessageBody) { + const status22 = status2 != null ? status2 : await this.status(); + let files = ""; + if (status22.staged.length < 100) { + files = status22.staged.map((e) => e.path).join("\n"); + } else { + files = "Too many files to list"; + } + template = template + "\n\nAffected files:\n" + files; + } + return template; + } +}; + +// src/gitManager/simpleGit.ts +var SimpleGit = class extends GitManager { + constructor(plugin) { + super(plugin); + } + async setGitInstance(ignoreError = false) { + if (this.isGitInstalled()) { + const adapter = this.app.vault.adapter; + const vaultBasePath = adapter.getBasePath(); + let basePath = vaultBasePath; + if (this.plugin.settings.basePath) { + const exists2 = await adapter.exists( + (0, import_obsidian4.normalizePath)(this.plugin.settings.basePath) + ); + if (exists2) { + basePath = path.join( + vaultBasePath, + this.plugin.settings.basePath + ); + } else if (!ignoreError) { + new import_obsidian4.Notice("ObsidianGit: Base path does not exist"); + } + } + this.absoluteRepoPath = basePath; + this.git = esm_default({ + baseDir: basePath, + binary: this.plugin.localStorage.getGitPath() || void 0, + config: ["core.quotepath=off"] + }); + const pathPaths = this.plugin.localStorage.getPATHPaths(); + const envVars = this.plugin.localStorage.getEnvVars(); + const gitDir = this.plugin.settings.gitDir; + if (pathPaths.length > 0) { + const path2 = process.env["PATH"] + ":" + pathPaths.join(":"); + process.env["PATH"] = path2; + } + if (gitDir) { + process.env["GIT_DIR"] = gitDir; + } + for (const envVar of envVars) { + const [key2, value] = envVar.split("="); + process.env[key2] = value; + } + import_debug2.default.enable("simple-git"); + if (await this.git.checkIsRepo()) { + const relativeRoot = await this.git.revparse("--show-cdup"); + const absoluteRoot = (0, import_path.resolve)(basePath + import_path.sep + relativeRoot); + this.absoluteRepoPath = absoluteRoot; + await this.git.cwd(absoluteRoot); + } + } + } + // Constructs a path relative to the vault from a path relative to the git repository + getRelativeVaultPath(filePath) { + const adapter = this.app.vault.adapter; + const from = adapter.getBasePath(); + const to = path.join(this.absoluteRepoPath, filePath); + let res = path.relative(from, to); + if (import_obsidian4.Platform.isWin) { + res = res.replace(/\\/g, "/"); + } + return res; + } + // Constructs a path relative to the git repository from a path relative to the vault + // + // @param doConversion - If false, the path is returned as is. This is added because that parameter is often passed on to functions where this method is called. + getRelativeRepoPath(filePath, doConversion = true) { + if (doConversion) { + const adapter = this.plugin.app.vault.adapter; + const vaultPath = adapter.getBasePath(); + const from = this.absoluteRepoPath; + const to = path.join(vaultPath, filePath); + let res = path.relative(from, to); + if (import_obsidian4.Platform.isWin) { + res = res.replace(/\\/g, "/"); + } + return res; + } + return filePath; + } + async status() { + this.plugin.setState(1 /* status */); + const status2 = await this.git.status((err) => this.onError(err)); + this.plugin.setState(0 /* idle */); + const allFilesFormatted = status2.files.map((e) => { + const res = this.formatPath(e); + return { + path: res.path, + from: res.from, + index: e.index === "?" ? "U" : e.index, + working_dir: e.working_dir === "?" ? "U" : e.working_dir, + vault_path: this.getRelativeVaultPath(res.path) + }; + }); + return { + all: allFilesFormatted, + changed: allFilesFormatted.filter((e) => e.working_dir !== " "), + staged: allFilesFormatted.filter( + (e) => e.index !== " " && e.index != "U" + ), + conflicted: status2.conflicted.map( + (path2) => this.formatPath({ path: path2 }).path + ) + }; + } + async submoduleAwareHeadRevisonInContainingDirectory(filepath) { + const repoPath = this.getRelativeRepoPath(filepath); + const containingDirectory = path.dirname(repoPath); + const args = ["-C", containingDirectory, "rev-parse", "HEAD"]; + const result = this.git.raw(args); + result.catch( + (err) => console.warn("obsidian-git: rev-parse error:", err) + ); + return result; + } + async getSubmodulePaths() { + return new Promise(async (resolve2) => { + this.git.outputHandler(async (cmd, stdout, stderr, args) => { + if (!(args.contains("submodule") && args.contains("foreach"))) { + return; + } + let body = ""; + const root2 = this.app.vault.adapter.getBasePath() + (this.plugin.settings.basePath ? "/" + this.plugin.settings.basePath : ""); + stdout.on("data", (chunk) => { + body += chunk.toString("utf8"); + }); + stdout.on("end", async () => { + const submods = body.split("\n"); + const strippedSubmods = submods.map((i) => { + const submod = i.match(/'([^']*)'/); + if (submod != void 0) { + return root2 + "/" + submod[1] + import_path.sep; + } + }).filter((i) => !!i); + strippedSubmods.reverse(); + resolve2(strippedSubmods); + }); + }); + await this.git.subModule(["foreach", "--recursive", ""]); + this.git.outputHandler(() => { + }); + }); + } + //Remove wrong `"` like "My file.md" + formatPath(path2, renamed = false) { + function format(path3) { + if (path3 == void 0) return void 0; + if (path3.startsWith('"') && path3.endsWith('"')) { + return path3.substring(1, path3.length - 1); + } else { + return path3; + } + } + if (renamed) { + return { + from: format(path2.from), + path: format(path2.path) + }; + } else { + return { + path: format(path2.path) + }; + } + } + async blame(path2, trackMovement, ignoreWhitespace) { + path2 = this.getRelativeRepoPath(path2); + if (!await this.isTracked(path2)) return "untracked"; + const inSubmodule = await this.getSubmoduleOfFile(path2); + const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; + const relativePath = inSubmodule ? inSubmodule.relativeFilepath : path2; + args.push("blame", "--porcelain"); + if (ignoreWhitespace) args.push("-w"); + const trackCArg = `-C${GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH}`; + switch (trackMovement) { + case "inactive": + break; + case "same-commit": + args.push("-C", trackCArg); + break; + case "all-commits": + args.push("-C", "-C", trackCArg); + break; + default: + impossibleBranch(trackMovement); + } + args.push("--", relativePath); + const rawBlame = await this.git.raw( + args, + (err) => err && console.warn("git-blame", err) + ); + return parseBlame(rawBlame); + } + async isTracked(path2) { + const inSubmodule = await this.getSubmoduleOfFile(path2); + const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; + const relativePath = inSubmodule ? inSubmodule.relativeFilepath : path2; + args.push("ls-files", "--", relativePath); + return this.git.raw(args, (err) => err && console.warn("ls-files", err)).then((x) => x.trim() !== ""); + } + async commitAll({ message }) { + if (this.plugin.settings.updateSubmodules) { + this.plugin.setState(4 /* commit */); + const submodulePaths = await this.getSubmodulePaths(); + for (const item of submodulePaths) { + await this.git.cwd({ path: item, root: false }).add("-A", (err) => this.onError(err)); + await this.git.cwd({ path: item, root: false }).commit( + await this.formatCommitMessage(message), + (err) => this.onError(err) + ); + } + } + this.plugin.setState(3 /* add */); + await this.git.add("-A", (err) => this.onError(err)); + this.plugin.setState(4 /* commit */); + const res = await this.git.commit( + await this.formatCommitMessage(message), + (err) => this.onError(err) + ); + dispatchEvent(new CustomEvent("git-head-update")); + return res.summary.changes; + } + async commit({ + message, + amend + }) { + this.plugin.setState(4 /* commit */); + const res = (await this.git.commit( + await this.formatCommitMessage(message), + amend ? ["--amend"] : [], + (err) => this.onError(err) + )).summary.changes; + dispatchEvent(new CustomEvent("git-head-update")); + this.plugin.setState(0 /* idle */); + return res; + } + async stage(path2, relativeToVault) { + this.plugin.setState(3 /* add */); + path2 = this.getRelativeRepoPath(path2, relativeToVault); + await this.git.add(["--", path2], (err) => this.onError(err)); + this.plugin.setState(0 /* idle */); + } + async stageAll({ dir }) { + this.plugin.setState(3 /* add */); + await this.git.add(dir != null ? dir : "-A", (err) => this.onError(err)); + this.plugin.setState(0 /* idle */); + } + async unstageAll({ dir }) { + this.plugin.setState(3 /* add */); + await this.git.reset( + dir != void 0 ? ["--", dir] : [], + (err) => this.onError(err) + ); + this.plugin.setState(0 /* idle */); + } + async unstage(path2, relativeToVault) { + this.plugin.setState(3 /* add */); + path2 = this.getRelativeRepoPath(path2, relativeToVault); + await this.git.reset(["--", path2], (err) => this.onError(err)); + this.plugin.setState(0 /* idle */); + } + async discard(filepath) { + this.plugin.setState(3 /* add */); + await this.git.checkout(["--", filepath], (err) => this.onError(err)); + this.plugin.setState(0 /* idle */); + } + async hashObject(filepath) { + filepath = this.getRelativeRepoPath(filepath); + const inSubmodule = await this.getSubmoduleOfFile(filepath); + const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; + const relativeFilepath = inSubmodule ? inSubmodule.relativeFilepath : filepath; + args.push("hash-object", "--", relativeFilepath); + const revision = this.git.raw(args); + revision.catch( + (err) => err && console.warn("obsidian-git. hash-object failed:", err == null ? void 0 : err.message) + ); + return revision; + } + async discardAll({ dir }) { + return this.discard(dir != null ? dir : "."); + } + async pull() { + this.plugin.setState(2 /* pull */); + if (this.plugin.settings.updateSubmodules) + await this.git.subModule( + ["update", "--remote", "--merge", "--recursive"], + (err) => this.onError(err) + ); + const branchInfo = await this.branchInfo(); + const localCommit = await this.git.revparse( + [branchInfo.current], + (err) => this.onError(err) + ); + if (!branchInfo.tracking && this.plugin.settings.updateSubmodules) { + this.plugin.log( + "No tracking branch found. Ignoring pull of main repo and updating submodules only." + ); + return; + } + await this.git.fetch((err) => this.onError(err)); + const upstreamCommit = await this.git.revparse( + [branchInfo.tracking], + (err) => this.onError(err) + ); + if (localCommit !== upstreamCommit) { + if (this.plugin.settings.syncMethod === "merge" || this.plugin.settings.syncMethod === "rebase") { + try { + switch (this.plugin.settings.syncMethod) { + case "merge": + await this.git.merge([branchInfo.tracking]); + break; + case "rebase": + await this.git.rebase([branchInfo.tracking]); + } + } catch (err) { + this.plugin.displayError( + `Pull failed (${this.plugin.settings.syncMethod}): ${err.message}` + ); + return; + } + } else if (this.plugin.settings.syncMethod === "reset") { + try { + await this.git.raw( + [ + "update-ref", + `refs/heads/${branchInfo.current}`, + upstreamCommit + ], + (err) => this.onError(err) + ); + await this.unstageAll({}); + } catch (err) { + this.plugin.displayError( + `Sync failed (${this.plugin.settings.syncMethod}): ${err.message}` + ); + } + } + dispatchEvent(new CustomEvent("git-head-update")); + const afterMergeCommit = await this.git.revparse( + [branchInfo.current], + (err) => this.onError(err) + ); + const filesChanged = await this.git.diff([ + `${localCommit}..${afterMergeCommit}`, + "--name-only" + ]); + return filesChanged.split(/\r\n|\r|\n/).filter((value) => value.length > 0).map((e) => { + return { + path: e, + working_dir: "P", + vault_path: this.getRelativeVaultPath(e) + }; + }); + } else { + return []; + } + } + async push() { + this.plugin.setState(5 /* push */); + if (this.plugin.settings.updateSubmodules) { + const res = await this.git.env({ ...process.env, OBSIDIAN_GIT: 1 }).subModule( + [ + "foreach", + "--recursive", + `tracking=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"); echo $tracking; if [ ! -z "$(git diff --shortstat $tracking)" ]; then git push; fi` + ], + (err) => this.onError(err) + ); + console.log(res); + } + const status2 = await this.git.status(); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + if (!trackingBranch && this.plugin.settings.updateSubmodules) { + this.plugin.log( + "No tracking branch found. Ignoring push of main repo and updating submodules only." + ); + return void 0; + } + const remoteChangedFiles = (await this.git.diffSummary( + [currentBranch2, trackingBranch, "--"], + (err) => this.onError(err) + )).changed; + await this.git.env({ ...process.env, OBSIDIAN_GIT: 1 }).push((err) => this.onError(err)); + return remoteChangedFiles; + } + async getUnpushedCommits() { + const status2 = await this.git.status(); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + if (trackingBranch == null || currentBranch2 == null) { + return 0; + } + const remoteChangedFiles = (await this.git.diffSummary( + [currentBranch2, trackingBranch, "--"], + (err) => this.onError(err) + )).changed; + return remoteChangedFiles; + } + async canPush() { + if (this.plugin.settings.updateSubmodules === true) { + return true; + } + const status2 = await this.git.status((err) => this.onError(err)); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + if (!trackingBranch) { + return false; + } + const remoteChangedFiles = (await this.git.diffSummary([currentBranch2, trackingBranch, "--"])).changed; + return remoteChangedFiles !== 0; + } + async checkRequirements() { + if (!this.isGitInstalled()) { + return "missing-git"; + } + if (!await this.git.checkIsRepo()) { + return "missing-repo"; + } + return "valid"; + } + async branchInfo() { + const status2 = await this.git.status((err) => this.onError(err)); + const branches = await this.git.branch( + ["--no-color"], + (err) => this.onError(err) + ); + return { + current: status2.current || void 0, + tracking: status2.tracking || void 0, + branches: branches.all + }; + } + async getRemoteUrl(remote) { + try { + return await this.git.remote(["get-url", remote]) || void 0; + } catch (error) { + if (error.toString().contains(remote)) { + return void 0; + } else { + this.onError(error); + } + } + } + // https://github.com/kometenstaub/obsidian-version-history-diff/issues/3 + async log(file, relativeToVault = true, limit) { + let path2; + if (file) { + path2 = this.getRelativeRepoPath(file, relativeToVault); + } + const res = await this.git.log( + { + file: path2, + maxCount: limit, + "-m": null, + "--name-status": null + }, + (err) => this.onError(err) + ); + return res.all.map((e) => { + var _a2, _b, _c, _d; + return { + ...e, + author: { + name: e.author_name, + email: e.author_email + }, + refs: e.refs.split(", ").filter((e2) => e2.length > 0), + diff: { + ...e.diff, + files: (_b = (_a2 = e.diff) == null ? void 0 : _a2.files.map((f) => ({ + ...f, + status: f.status, + path: f.file, + hash: e.hash, + vault_path: this.getRelativeVaultPath(f.file) + }))) != null ? _b : [] + }, + fileName: (_d = (_c = e.diff) == null ? void 0 : _c.files.first()) == null ? void 0 : _d.file + }; + }); + } + async show(commitHash, file, relativeToVault = true) { + const path2 = this.getRelativeRepoPath(file, relativeToVault); + return this.git.show( + [commitHash + ":" + path2], + (err) => this.onError(err) + ); + } + async checkout(branch2, remote) { + if (remote) { + branch2 = `${remote}/${branch2}`; + } + await this.git.checkout(branch2, (err) => this.onError(err)); + if (this.plugin.settings.submoduleRecurseCheckout) { + const submodulePaths = await this.getSubmodulePaths(); + for (const submodulePath of submodulePaths) { + const branchSummary = await this.git.cwd({ path: submodulePath, root: false }).branch(); + if (Object.keys(branchSummary.branches).includes(branch2)) { + await this.git.cwd({ path: submodulePath, root: false }).checkout(branch2, (err) => this.onError(err)); + } + } + } + } + async createBranch(branch2) { + await this.git.checkout(["-b", branch2], (err) => this.onError(err)); + } + async deleteBranch(branch2, force) { + await this.git.branch( + [force ? "-D" : "-d", branch2], + (err) => this.onError(err) + ); + } + async branchIsMerged(branch2) { + const notMergedBranches = await this.git.branch( + ["--no-merged"], + (err) => this.onError(err) + ); + return !notMergedBranches.all.contains(branch2); + } + async init() { + await this.git.init(false, (err) => this.onError(err)); + } + async clone(url, dir, depth) { + await this.git.clone( + url, + path.join( + this.app.vault.adapter.getBasePath(), + dir + ), + depth ? ["--depth", `${depth}`] : [], + (err) => this.onError(err) + ); + } + async setConfig(path2, value) { + if (value == void 0) { + await this.git.raw(["config", "--local", "--unset", path2]); + } else { + await this.git.addConfig(path2, value, (err) => this.onError(err)); + } + } + async getConfig(path2) { + const config = await this.git.listConfig( + "local", + (err) => this.onError(err) + ); + return config.all[path2]; + } + async fetch(remote) { + await this.git.fetch( + remote != void 0 ? [remote] : [], + (err) => this.onError(err) + ); + } + async setRemote(name, url) { + if ((await this.getRemotes()).includes(name)) + await this.git.remote( + ["set-url", name, url], + (err) => this.onError(err) + ); + else { + await this.git.remote( + ["add", name, url], + (err) => this.onError(err) + ); + } + } + async getRemoteBranches(remote) { + const res = await this.git.branch( + ["-r", "--list", `${remote}*`], + (err) => this.onError(err) + ); + const list = []; + for (const item in res.branches) { + list.push(res.branches[item].name); + } + return list; + } + async getRemotes() { + const res = await this.git.remote([], (err) => this.onError(err)); + if (res) { + return res.trim().split("\n"); + } else { + return []; + } + } + async removeRemote(remoteName) { + await this.git.removeRemote(remoteName); + } + async updateUpstreamBranch(remoteBranch) { + try { + await this.git.branch(["--set-upstream-to", remoteBranch]); + } catch (e) { + console.error(e); + try { + await this.git.branch(["--set-upstream", remoteBranch]); + } catch (e2) { + console.error(e2); + await this.git.push( + // A type error occurs here because the third element could be undefined. + // However, it is unlikely to be undefined due to the `remoteBranch`'s format, and error handling is in place. + // Therefore, we temporarily ignore the error. + // @ts-ignore + ["--set-upstream", ...splitRemoteBranch(remoteBranch)], + (err) => this.onError(err) + ); + } + } + } + updateGitPath(_) { + this.setGitInstance(); + } + updateBasePath(_) { + this.setGitInstance(true); + } + async getDiffString(filePath, stagedChanges = false, hash2) { + if (stagedChanges) + return await this.git.diff(["--cached", "--", filePath]); + if (hash2) return await this.git.show([`${hash2}`, "--", filePath]); + else return await this.git.diff(["--", filePath]); + } + async diff(file, commit1, commit2) { + return await this.git.diff([`${commit1}..${commit2}`, "--", file]); + } + async getSubmoduleOfFile(repositoryRelativeFile) { + let submoduleRoot = await this.git.raw( + [ + "-C", + path.dirname(repositoryRelativeFile), + "rev-parse", + "--show-toplevel" + ], + (err) => err && console.warn("get-submodule-of-file", err == null ? void 0 : err.message) + ); + submoduleRoot = submoduleRoot.trim(); + const superProject = await this.git.raw( + [ + "-C", + path.dirname(repositoryRelativeFile), + "rev-parse", + "--show-superproject-working-tree" + ], + (err) => err && console.warn("get-submodule-of-file", err == null ? void 0 : err.message) + ); + if (superProject.trim() === "") { + return void 0; + } + const fsAdapter = this.app.vault.adapter; + const absolutePath = fsAdapter.getFullPath( + path.normalize(repositoryRelativeFile) + ); + const newRelativePath = path.relative(submoduleRoot, absolutePath); + return { submodule: submoduleRoot, relativeFilepath: newRelativePath }; + } + async getLastCommitTime() { + const res = await this.git.log({ n: 1 }, (err) => this.onError(err)); + if (res != null && res.latest != null) { + return new Date(res.latest.date); + } + } + isGitInstalled() { + const command = (0, import_child_process2.spawnSync)( + this.plugin.localStorage.getGitPath() || "git", + ["--version"], + { + stdio: "ignore" + } + ); + if (command.error) { + console.error(command.error); + return false; + } + return true; + } + onError(error) { + if (error) { + const networkFailure = error.message.contains("Could not resolve host") || error.message.match( + /ssh: connect to host .*? port .*?: Operation timed out/ + ) || error.message.match( + /ssh: connect to host .*? port .*?: Network is unreachable/ + ); + if (!networkFailure) { + this.plugin.displayError(error.message); + this.plugin.setState(0 /* idle */); + } else if (!this.plugin.offlineMode) { + this.plugin.displayError( + "Git: Going into offline mode. Future network errors will no longer be displayed.", + 2e3 + ); + } + if (networkFailure) { + this.plugin.offlineMode = true; + this.plugin.setState(0 /* idle */); + } + } + } +}; +var zeroCommit = { + hash: "000000", + isZeroCommit: true, + summary: "" +}; +function parseBlame(blameOutputUnnormalized) { + const blameOutput = blameOutputUnnormalized.replace("\r\n", "\n"); + const blameLines = blameOutput.split("\n"); + const result = { + commits: /* @__PURE__ */ new Map(), + hashPerLine: [void 0], + // one-based indices + originalFileLineNrPerLine: [void 0], + finalFileLineNrPerLine: [void 0], + groupSizePerStartingLine: /* @__PURE__ */ new Map() + }; + let line = 1; + for (let bi = 0; bi < blameLines.length; ) { + if (startsWithNonWhitespace(blameLines[bi])) { + const lineInfo = blameLines[bi].split(" "); + const commitHash = parseLineInfoInto(lineInfo, line, result); + bi++; + for (; startsWithNonWhitespace(blameLines[bi]); bi++) { + const spaceSeparatedHeaderValues = blameLines[bi].split(" "); + parseHeaderInto(spaceSeparatedHeaderValues, result, line); + } + finalizeBlameCommitInfo(result.commits.get(commitHash)); + line += 1; + } else if (blameLines[bi] === "" && bi === blameLines.length - 1) { + } else { + throw Error( + `Expected non-whitespace line or EOF, but found: ${blameLines[bi]}` + ); + } + bi++; + } + return result; +} +function parseLineInfoInto(lineInfo, line, result) { + const hash2 = lineInfo[0]; + result.hashPerLine.push(hash2); + result.originalFileLineNrPerLine.push(parseInt(lineInfo[1])); + result.finalFileLineNrPerLine.push(parseInt(lineInfo[2])); + lineInfo.length >= 4 && result.groupSizePerStartingLine.set(line, parseInt(lineInfo[3])); + if (parseInt(lineInfo[2]) !== line) { + throw Error( + `git-blame output is out of order: ${line} vs ${lineInfo[2]}` + ); + } + return hash2; +} +function parseHeaderInto(header, out, line) { + const key2 = header[0]; + const value = header.slice(1).join(" "); + const commitHash = out.hashPerLine[line]; + const commit2 = out.commits.get(commitHash) || { + hash: commitHash, + author: {}, + committer: {}, + previous: {} + }; + switch (key2) { + case "summary": + commit2.summary = value; + break; + case "author": + commit2.author.name = value; + break; + case "author-mail": + commit2.author.email = removeEmailBrackets(value); + break; + case "author-time": + commit2.author.epochSeconds = parseInt(value); + break; + case "author-tz": + commit2.author.tz = value; + break; + case "committer": + commit2.committer.name = value; + break; + case "committer-mail": + commit2.committer.email = removeEmailBrackets(value); + break; + case "committer-time": + commit2.committer.epochSeconds = parseInt(value); + break; + case "committer-tz": + commit2.committer.tz = value; + break; + case "previous": + commit2.previous.commitHash = value; + break; + case "filename": + commit2.previous.filename = value; + break; + } + out.commits.set(commitHash, commit2); +} +function finalizeBlameCommitInfo(commit2) { + if (commit2.summary === void 0) { + throw Error(`Summary not provided for commit: ${commit2.hash}`); + } + if (isUndefinedOrEmptyObject(commit2.author)) { + commit2.author = void 0; + } + if (isUndefinedOrEmptyObject(commit2.committer)) { + commit2.committer = void 0; + } + if (isUndefinedOrEmptyObject(commit2.previous)) { + commit2.previous = void 0; + } + commit2.isZeroCommit = Boolean(commit2.hash.match(/^0*$/)); +} +function isUndefinedOrEmptyObject(obj) { + return !obj || Object.keys(obj).length === 0; +} +function startsWithNonWhitespace(str) { + return str.length > 0 && str[0].trim() === str[0]; +} +function removeEmailBrackets(gitEmail) { + const prefixCleaned = gitEmail.startsWith("<") ? gitEmail.substring(1) : gitEmail; + return prefixCleaned.endsWith(">") ? prefixCleaned.substring(0, prefixCleaned.length - 1) : prefixCleaned; +} + +// src/lineAuthor/lineAuthorProvider.ts +init_polyfill_buffer(); +var import_state4 = require("@codemirror/state"); + +// src/lineAuthor/control.ts +init_polyfill_buffer(); +var import_state2 = require("@codemirror/state"); +var import_obsidian9 = require("obsidian"); + +// src/lineAuthor/eventsPerFilepath.ts +init_polyfill_buffer(); +var SECONDS = 1e3; +var REMOVE_STALES_FREQUENCY = 60 * SECONDS; +var EventsPerFilePath = class { + constructor() { + this.eventsPerFilepath = /* @__PURE__ */ new Map(); + this.startRemoveStalesSubscribersInterval(); + } + /** + * Run the {@link handler} on the subscribers to {@link filepath}. + */ + ifFilepathDefinedTransformSubscribers(filepath, handler) { + if (!filepath) return; + this.ensureInitialized(filepath); + return handler(this.eventsPerFilepath.get(filepath)); + } + forEachSubscriber(handler) { + this.eventsPerFilepath.forEach((subs) => subs.forEach(handler)); + } + ensureInitialized(filepath) { + if (!this.eventsPerFilepath.get(filepath)) + this.eventsPerFilepath.set(filepath, /* @__PURE__ */ new Set()); + } + startRemoveStalesSubscribersInterval() { + this.removeStalesSubscribersTimer = window.setInterval( + () => this == null ? void 0 : this.forEachSubscriber((las) => las == null ? void 0 : las.removeIfStale()), + REMOVE_STALES_FREQUENCY + ); + } + clear() { + window.clearInterval(this.removeStalesSubscribersTimer); + this.eventsPerFilepath.clear(); + } +}; +var eventsPerFilePathSingleton = new EventsPerFilePath(); + +// src/lineAuthor/model.ts +init_polyfill_buffer(); +var import_state = require("@codemirror/state"); +var import_js_sha256 = __toESM(require_sha256()); + +// src/setting/settings.ts +init_polyfill_buffer(); +var import_obsidian8 = require("obsidian"); + +// src/gitManager/isomorphicGit.ts +init_polyfill_buffer(); + +// node_modules/.pnpm/diff@5.2.0/node_modules/diff/lib/index.mjs +init_polyfill_buffer(); +function Diff() { +} +Diff.prototype = { + diff: function diff(oldString, newString) { + var _options$timeout; + var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var callback = options.callback; + if (typeof options === "function") { + callback = options; + options = {}; + } + this.options = options; + var self2 = this; + function done(value) { + if (callback) { + setTimeout(function() { + callback(void 0, value); + }, 0); + return true; + } else { + return value; + } + } + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + if (options.maxEditLength) { + maxEditLength = Math.min(maxEditLength, options.maxEditLength); + } + var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; + var abortAfterTimestamp = Date.now() + maxExecutionTime; + var bestPath = [{ + oldPos: -1, + lastComponent: void 0 + }]; + var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); + if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { + return done([{ + value: this.join(newString), + count: newString.length + }]); + } + var minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity; + function execEditLength() { + for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { + var basePath = void 0; + var removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1]; + if (removePath) { + bestPath[diagonalPath - 1] = void 0; + } + var canAdd = false; + if (addPath) { + var addPathNewPos = addPath.oldPos - diagonalPath; + canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; + } + var canRemove = removePath && removePath.oldPos + 1 < oldLen; + if (!canAdd && !canRemove) { + bestPath[diagonalPath] = void 0; + continue; + } + if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { + basePath = self2.addToPath(addPath, true, void 0, 0); + } else { + basePath = self2.addToPath(removePath, void 0, true, 1); + } + newPos = self2.extractCommon(basePath, newString, oldString, diagonalPath); + if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { + return done(buildValues(self2, basePath.lastComponent, newString, oldString, self2.useLongestToken)); + } else { + bestPath[diagonalPath] = basePath; + if (basePath.oldPos + 1 >= oldLen) { + maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); + } + if (newPos + 1 >= newLen) { + minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); + } + } + } + editLength++; + } + if (callback) { + (function exec() { + setTimeout(function() { + if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { + return callback(); + } + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { + var ret = execEditLength(); + if (ret) { + return ret; + } + } + } + }, + addToPath: function addToPath(path2, added, removed, oldPosInc) { + var last2 = path2.lastComponent; + if (last2 && last2.added === added && last2.removed === removed) { + return { + oldPos: path2.oldPos + oldPosInc, + lastComponent: { + count: last2.count + 1, + added, + removed, + previousComponent: last2.previousComponent + } + }; + } else { + return { + oldPos: path2.oldPos + oldPosInc, + lastComponent: { + count: 1, + added, + removed, + previousComponent: last2 + } + }; + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, oldLen = oldString.length, oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + if (commonCount) { + basePath.lastComponent = { + count: commonCount, + previousComponent: basePath.lastComponent + }; + } + basePath.oldPos = oldPos; + return newPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(""); + }, + join: function join3(chars) { + return chars.join(""); + } +}; +function buildValues(diff3, lastComponent, newString, oldString, useLongestToken) { + var components = []; + var nextComponent; + while (lastComponent) { + components.push(lastComponent); + nextComponent = lastComponent.previousComponent; + delete lastComponent.previousComponent; + lastComponent = nextComponent; + } + components.reverse(); + var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function(value2, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value2.length ? oldValue : value2; + }); + component.value = diff3.join(value); + } else { + component.value = diff3.join(newString.slice(newPos, newPos + component.count)); + } + newPos += component.count; + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff3.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } + var finalComponent = components[componentLen - 1]; + if (componentLen > 1 && typeof finalComponent.value === "string" && (finalComponent.added || finalComponent.removed) && diff3.equals("", finalComponent.value)) { + components[componentLen - 2].value += finalComponent.value; + components.pop(); + } + return components; +} +var characterDiff = new Diff(); +var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; +var reWhitespace = /\S/; +var wordDiff = new Diff(); +wordDiff.equals = function(left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); +}; +wordDiff.tokenize = function(value) { + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); + for (var i = 0; i < tokens.length - 1; i++) { + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + return tokens; +}; +var lineDiff = new Diff(); +lineDiff.tokenize = function(value) { + if (this.options.stripTrailingCr) { + value = value.replace(/\r\n/g, "\n"); + } + var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + retLines.push(line); + } + } + return retLines; +}; +function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); +} +var sentenceDiff = new Diff(); +sentenceDiff.tokenize = function(value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); +}; +var cssDiff = new Diff(); +cssDiff.tokenize = function(value) { + return value.split(/([{}:;,]|\s+)/); +}; +function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function(obj2) { + return typeof obj2; + }; + } else { + _typeof = function(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }; + } + return _typeof(obj); +} +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; +} +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +var objectPrototypeToString = Object.prototype.toString; +var jsonDiff = new Diff(); +jsonDiff.useLongestToken = true; +jsonDiff.tokenize = lineDiff.tokenize; +jsonDiff.castInput = function(value) { + var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { + return typeof v === "undefined" ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === "string" ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, " "); +}; +jsonDiff.equals = function(left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); +}; +function canonicalize(obj, stack, replacementStack, replacer, key2) { + stack = stack || []; + replacementStack = replacementStack || []; + if (replacer) { + obj = replacer(key2, obj); + } + var i; + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + var canonicalizedObj; + if ("[object Array]" === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key2); + } + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + if (_typeof(obj) === "object" && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + var sortedKeys = [], _key; + for (_key in obj) { + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + sortedKeys.sort(); + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + return canonicalizedObj; +} +var arrayDiff = new Diff(); +arrayDiff.tokenize = function(value) { + return value.slice(); +}; +arrayDiff.join = arrayDiff.removeEmpty = function(value) { + return value; +}; +function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + if (typeof options.context === "undefined") { + options.context = 4; + } + var diff3 = diffLines(oldStr, newStr, options); + if (!diff3) { + return; + } + diff3.push({ + value: "", + lines: [] + }); + function contextLines(lines) { + return lines.map(function(entry) { + return " " + entry; + }); + } + var hunks = []; + var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1; + var _loop = function _loop2(i2) { + var current = diff3[i2], lines = current.lines || current.value.replace(/\n$/, "").split("\n"); + current.lines = lines; + if (current.added || current.removed) { + var _curRange; + if (!oldRangeStart) { + var prev = diff3[i2 - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function(entry) { + return (current.added ? "+" : "-") + entry; + }))); + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + if (oldRangeStart) { + if (lines.length <= options.context * 2 && i2 < diff3.length - 2) { + var _curRange2; + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + var contextSize = Math.min(lines.length, options.context); + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + if (i2 >= diff3.length - 2 && lines.length <= options.context) { + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + curRange.splice(hunk.oldLines, 0, "\\ No newline at end of file"); + } + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push("\\ No newline at end of file"); + } + } + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + oldLine += lines.length; + newLine += lines.length; + } + }; + for (var i = 0; i < diff3.length; i++) { + _loop(i); + } + return { + oldFileName, + newFileName, + oldHeader, + newHeader, + hunks + }; +} +function formatPatch(diff3) { + if (Array.isArray(diff3)) { + return diff3.map(formatPatch).join("\n"); + } + var ret = []; + if (diff3.oldFileName == diff3.newFileName) { + ret.push("Index: " + diff3.oldFileName); + } + ret.push("==================================================================="); + ret.push("--- " + diff3.oldFileName + (typeof diff3.oldHeader === "undefined" ? "" : " " + diff3.oldHeader)); + ret.push("+++ " + diff3.newFileName + (typeof diff3.newHeader === "undefined" ? "" : " " + diff3.newHeader)); + for (var i = 0; i < diff3.hunks.length; i++) { + var hunk = diff3.hunks[i]; + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + ret.push("@@ -" + hunk.oldStart + "," + hunk.oldLines + " +" + hunk.newStart + "," + hunk.newLines + " @@"); + ret.push.apply(ret, hunk.lines); + } + return ret.join("\n") + "\n"; +} +function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); +} +function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); +} + +// src/gitManager/isomorphicGit.ts +var import_obsidian7 = require("obsidian"); + +// src/ui/modals/generalModal.ts +init_polyfill_buffer(); +var import_obsidian5 = require("obsidian"); +var generalModalConfigDefaults = { + options: [], + placeholder: "", + allowEmpty: false, + onlySelection: false, + initialValue: void 0 +}; +var GeneralModal = class extends import_obsidian5.SuggestModal { + constructor(config) { + super(app); + this.config = { ...generalModalConfigDefaults, ...config }; + this.setPlaceholder(this.config.placeholder); + } + open() { + super.open(); + if (this.config.initialValue != void 0) { + this.inputEl.value = this.config.initialValue; + this.inputEl.dispatchEvent(new Event("input")); + } + return new Promise((resolve2) => { + this.resolve = resolve2; + }); + } + selectSuggestion(value, evt) { + if (this.resolve) { + let res; + if (this.config.allowEmpty && value === " ") res = ""; + else if (value === "...") res = void 0; + else res = value; + this.resolve(res); + } + super.selectSuggestion(value, evt); + } + onClose() { + if (this.resolve) this.resolve(void 0); + } + getSuggestions(query) { + if (this.config.onlySelection) { + return this.config.options; + } else if (this.config.allowEmpty) { + return [query.length > 0 ? query : " ", ...this.config.options]; + } else { + return [query.length > 0 ? query : "...", ...this.config.options]; + } + } + renderSuggestion(value, el) { + el.setText(value); + } + onChooseSuggestion(item, evt) { + } +}; + +// src/gitManager/myAdapter.ts +init_polyfill_buffer(); +var import_obsidian6 = require("obsidian"); +var MyAdapter = class { + constructor(vault, plugin) { + this.plugin = plugin; + this.promises = {}; + this.adapter = vault.adapter; + this.vault = vault; + this.lastBasePath = this.plugin.settings.basePath; + this.promises.readFile = this.readFile.bind(this); + this.promises.writeFile = this.writeFile.bind(this); + this.promises.readdir = this.readdir.bind(this); + this.promises.mkdir = this.mkdir.bind(this); + this.promises.rmdir = this.rmdir.bind(this); + this.promises.stat = this.stat.bind(this); + this.promises.unlink = this.unlink.bind(this); + this.promises.lstat = this.lstat.bind(this); + this.promises.readlink = this.readlink.bind(this); + this.promises.symlink = this.symlink.bind(this); + } + async readFile(path2, opts) { + var _a2; + this.maybeLog("Read: " + path2 + JSON.stringify(opts)); + if (opts == "utf8" || opts.encoding == "utf8") { + const file = this.vault.getAbstractFileByPath(path2); + if (file instanceof import_obsidian6.TFile) { + this.maybeLog("Reuse"); + return this.vault.read(file); + } else { + return this.adapter.read(path2); + } + } else { + if (path2.endsWith(this.gitDir + "/index")) { + if (this.plugin.settings.basePath != this.lastBasePath) { + this.clearIndex(); + this.lastBasePath = this.plugin.settings.basePath; + return this.adapter.readBinary(path2); + } + return (_a2 = this.index) != null ? _a2 : this.adapter.readBinary(path2); + } + const file = this.vault.getAbstractFileByPath(path2); + if (file instanceof import_obsidian6.TFile) { + this.maybeLog("Reuse"); + return this.vault.readBinary(file); + } else { + return this.adapter.readBinary(path2); + } + } + } + async writeFile(path2, data) { + this.maybeLog("Write: " + path2); + if (typeof data === "string") { + const file = this.vault.getAbstractFileByPath(path2); + if (file instanceof import_obsidian6.TFile) { + return this.vault.modify(file, data); + } else { + return this.adapter.write(path2, data); + } + } else { + if (path2.endsWith(this.gitDir + "/index")) { + this.index = data; + this.indexmtime = Date.now(); + } else { + const file = this.vault.getAbstractFileByPath(path2); + if (file instanceof import_obsidian6.TFile) { + return this.vault.modifyBinary(file, data); + } else { + return this.adapter.writeBinary(path2, data); + } + } + } + } + async readdir(path2) { + if (path2 === ".") path2 = "/"; + const res = await this.adapter.list(path2); + const all = [...res.files, ...res.folders]; + let formattedAll; + if (path2 !== "/") { + formattedAll = all.map( + (e) => (0, import_obsidian6.normalizePath)(e.substring(path2.length)) + ); + } else { + formattedAll = all; + } + return formattedAll; + } + async mkdir(path2) { + return this.adapter.mkdir(path2); + } + async rmdir(path2, opts) { + var _a2, _b; + return this.adapter.rmdir(path2, (_b = (_a2 = opts == null ? void 0 : opts.options) == null ? void 0 : _a2.recursive) != null ? _b : false); + } + async stat(path2) { + if (path2.endsWith(this.gitDir + "/index")) { + if (this.index !== void 0 && this.indexctime != void 0 && this.indexmtime != void 0) { + return { + isFile: () => true, + isDirectory: () => false, + isSymbolicLink: () => false, + size: this.index.length, + type: "file", + ctimeMs: this.indexctime, + mtimeMs: this.indexmtime + }; + } else { + const stat = await this.adapter.stat(path2); + if (stat == void 0) { + throw { code: "ENOENT" }; + } + this.indexctime = stat.ctime; + this.indexmtime = stat.mtime; + return { + ctimeMs: stat.ctime, + mtimeMs: stat.mtime, + size: stat.size, + type: "file", + isFile: () => true, + isDirectory: () => false, + isSymbolicLink: () => false + }; + } + } + if (path2 === ".") path2 = "/"; + const file = this.vault.getAbstractFileByPath(path2); + this.maybeLog("Stat: " + path2); + if (file instanceof import_obsidian6.TFile) { + this.maybeLog("Reuse stat"); + return { + ctimeMs: file.stat.ctime, + mtimeMs: file.stat.mtime, + size: file.stat.size, + type: "file", + isFile: () => true, + isDirectory: () => false, + isSymbolicLink: () => false + }; + } else { + const stat = await this.adapter.stat(path2); + if (stat) { + return { + ctimeMs: stat.ctime, + mtimeMs: stat.mtime, + size: stat.size, + type: stat.type === "folder" ? "directory" : stat.type, + isFile: () => stat.type === "file", + isDirectory: () => stat.type === "folder", + isSymbolicLink: () => false + }; + } else { + throw { code: "ENOENT" }; + } + } + } + async unlink(path2) { + return this.adapter.remove(path2); + } + async lstat(path2) { + return this.stat(path2); + } + async readlink(path2) { + throw new Error(`readlink of (${path2}) is not implemented.`); + } + async symlink(path2) { + throw new Error(`symlink of (${path2}) is not implemented.`); + } + async saveAndClear() { + if (this.index !== void 0) { + await this.adapter.writeBinary( + this.plugin.gitManager.getRelativeVaultPath( + this.gitDir + "/index" + ), + this.index, + { + ctime: this.indexctime, + mtime: this.indexmtime + } + ); + } + this.clearIndex(); + } + clearIndex() { + this.index = void 0; + this.indexctime = void 0; + this.indexmtime = void 0; + } + get gitDir() { + return this.plugin.settings.gitDir || ".git"; + } + maybeLog(text2) { + } +}; + +// src/gitManager/isomorphicGit.ts +var IsomorphicGit = class extends GitManager { + constructor(plugin) { + super(plugin); + this.FILE = 0; + this.HEAD = 1; + this.WORKDIR = 2; + this.STAGE = 3; + // Mapping from statusMatrix to git status codes based off git status --short + // See: https://isomorphic-git.org/docs/en/statusMatrix + this.status_mapping = { + "000": " ", + "003": "AD", + "020": "??", + "022": "A ", + "023": "AM", + "100": "D ", + "101": " D", + "103": "MD", + "110": "DA", + // Technically, two files: first one is deleted "D " and second one is untracked "??" + "111": " ", + "113": "MM", + "120": "DA", + // Same as "110" + "121": " M", + "122": "M ", + "123": "MM" + }; + this.noticeLength = 999999; + this.fs = new MyAdapter(this.app.vault, this.plugin); + } + getRepo() { + return { + fs: this.fs, + dir: this.plugin.settings.basePath, + gitdir: this.plugin.settings.gitDir || void 0, + onAuth: () => { + var _a2, _b; + return { + username: (_a2 = this.plugin.localStorage.getUsername()) != null ? _a2 : void 0, + password: (_b = this.plugin.localStorage.getPassword()) != null ? _b : void 0 + }; + }, + onAuthFailure: async () => { + new import_obsidian7.Notice( + "Authentication failed. Please try with different credentials" + ); + const username = await new GeneralModal({ + placeholder: "Specify your username" + }).open(); + if (username) { + const password = await new GeneralModal({ + placeholder: "Specify your password/personal access token" + }).open(); + if (password) { + this.plugin.localStorage.setUsername(username); + this.plugin.localStorage.setPassword(password); + return { + username, + password + }; + } + } + return { cancel: true }; + }, + http: { + async request({ + url, + method: method2, + headers, + body + }) { + if (body) { + body = await collect2(body); + body = body.buffer; + } + const res = await (0, import_obsidian7.requestUrl)({ + url, + method: method2, + headers, + body, + throw: false + }); + return { + url, + method: method2, + headers: res.headers, + body: [new Uint8Array(res.arrayBuffer)], + statusCode: res.status, + statusMessage: res.status.toString() + }; + } + } + }; + } + async wrapFS(call) { + try { + const res = await call; + await this.fs.saveAndClear(); + return res; + } catch (error) { + await this.fs.saveAndClear(); + throw error; + } + } + async status() { + let notice; + const timeout = window.setTimeout(function() { + notice = new import_obsidian7.Notice( + "This takes longer: Getting status", + this.noticeLength + ); + }, 2e4); + try { + this.plugin.setState(1 /* status */); + const status2 = (await this.wrapFS(isomorphic_git_default.statusMatrix({ ...this.getRepo() }))).map((row) => this.getFileStatusResult(row)); + const changed = status2.filter( + (fileStatus) => fileStatus.working_dir !== " " + ); + const staged = status2.filter( + (fileStatus) => fileStatus.index !== " " && fileStatus.index !== "U" + ); + const conflicted = []; + window.clearTimeout(timeout); + notice == null ? void 0 : notice.hide(); + return { all: status2, changed, staged, conflicted }; + } catch (error) { + window.clearTimeout(timeout); + notice == null ? void 0 : notice.hide(); + this.plugin.displayError(error); + throw error; + } + } + async commitAll({ + message, + status: status2, + unstagedFiles + }) { + try { + await this.checkAuthorInfo(); + await this.stageAll({ status: status2, unstagedFiles }); + return this.commit({ message }); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async commit({ + message + }) { + try { + await this.checkAuthorInfo(); + this.plugin.setState(4 /* commit */); + const formatMessage = await this.formatCommitMessage(message); + const hadConflict = this.plugin.localStorage.getConflict(); + let parent = void 0; + if (hadConflict) { + const branchInfo = await this.branchInfo(); + parent = [branchInfo.current, branchInfo.tracking]; + } + await this.wrapFS( + isomorphic_git_default.commit({ + ...this.getRepo(), + message: formatMessage, + parent + }) + ); + this.plugin.localStorage.setConflict(false); + return; + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async stage(filepath, relativeToVault) { + const gitPath = this.getRelativeRepoPath(filepath, relativeToVault); + let vaultPath; + if (relativeToVault) { + vaultPath = filepath; + } else { + vaultPath = this.getRelativeVaultPath(filepath); + } + try { + this.plugin.setState(3 /* add */); + if (await this.app.vault.adapter.exists(vaultPath)) { + await this.wrapFS( + isomorphic_git_default.add({ ...this.getRepo(), filepath: gitPath }) + ); + } else { + await this.wrapFS( + isomorphic_git_default.remove({ ...this.getRepo(), filepath: gitPath }) + ); + } + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async stageAll({ + dir, + status: status2, + unstagedFiles + }) { + try { + if (status2) { + await Promise.all( + status2.changed.map( + (file) => file.working_dir !== "D" ? this.wrapFS( + isomorphic_git_default.add({ + ...this.getRepo(), + filepath: file.path + }) + ) : isomorphic_git_default.remove({ + ...this.getRepo(), + filepath: file.path + }) + ) + ); + } else { + const filesToStage = unstagedFiles != null ? unstagedFiles : await this.getUnstagedFiles(dir != null ? dir : "."); + await Promise.all( + filesToStage.map( + ({ filepath, deleted }) => deleted ? isomorphic_git_default.remove({ ...this.getRepo(), filepath }) : this.wrapFS( + isomorphic_git_default.add({ ...this.getRepo(), filepath }) + ) + ) + ); + } + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async unstage(filepath, relativeToVault) { + try { + this.plugin.setState(3 /* add */); + filepath = this.getRelativeRepoPath(filepath, relativeToVault); + await this.wrapFS( + isomorphic_git_default.resetIndex({ ...this.getRepo(), filepath }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async unstageAll({ + dir, + status: status2 + }) { + try { + let staged; + if (status2) { + staged = status2.staged.map((file) => file.path); + } else { + const res = await this.getStagedFiles(dir != null ? dir : "."); + staged = res.map(({ filepath }) => filepath); + } + await this.wrapFS( + Promise.all( + staged.map( + (file) => isomorphic_git_default.resetIndex({ ...this.getRepo(), filepath: file }) + ) + ) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async discard(filepath) { + try { + this.plugin.setState(3 /* add */); + await this.wrapFS( + isomorphic_git_default.checkout({ + ...this.getRepo(), + filepaths: [filepath], + force: true + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async discardAll({ + dir, + status: status2 + }) { + let files = []; + if (status2) { + if (dir != void 0) { + files = status2.changed.filter((file) => file.path.startsWith(dir)).map((file) => file.path); + } else { + files = status2.changed.map((file) => file.path); + } + } else { + files = (await this.getUnstagedFiles(dir)).map( + ({ filepath }) => filepath + ); + } + try { + await this.wrapFS( + isomorphic_git_default.checkout({ + ...this.getRepo(), + filepaths: files, + force: true + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + getProgressText(action, event) { + let out = `${action} progress:`; + if (event.phase) { + out = `${out} ${event.phase}:`; + } + if (event.loaded) { + out = `${out} ${event.loaded}`; + if (event.total) { + out = `${out} of ${event.total}`; + } + } + return out; + } + resolveRef(ref) { + return this.wrapFS(isomorphic_git_default.resolveRef({ ...this.getRepo(), ref })); + } + async pull() { + const progressNotice = this.showNotice("Initializing pull"); + try { + this.plugin.setState(2 /* pull */); + const localCommit = await this.resolveRef("HEAD"); + await this.fetch(); + const branchInfo = await this.branchInfo(); + await this.checkAuthorInfo(); + const mergeRes = await this.wrapFS( + isomorphic_git_default.merge({ + ...this.getRepo(), + ours: branchInfo.current, + theirs: branchInfo.tracking, + abortOnConflict: false + }) + ); + if (!mergeRes.alreadyMerged) { + await this.wrapFS( + isomorphic_git_default.checkout({ + ...this.getRepo(), + ref: branchInfo.current, + onProgress: (progress) => { + if (progressNotice !== void 0) { + progressNotice.noticeEl.innerText = this.getProgressText("Checkout", progress); + } + }, + remote: branchInfo.remote + }) + ); + } + progressNotice == null ? void 0 : progressNotice.hide(); + const upstreamCommit = await this.resolveRef("HEAD"); + const changedFiles = await this.getFileChangesCount( + localCommit, + upstreamCommit + ); + this.showNotice("Finished pull", false); + return changedFiles.map((file) => ({ + path: file.path, + working_dir: "P", + index: "P", + vault_path: this.getRelativeVaultPath(file.path) + })); + } catch (error) { + progressNotice == null ? void 0 : progressNotice.hide(); + if (error instanceof Errors.MergeConflictError) { + this.plugin.handleConflict( + error.data.filepaths.map( + (file) => this.getRelativeVaultPath(file) + ) + ); + } + this.plugin.displayError(error); + throw error; + } + } + async push() { + if (!await this.canPush()) { + return 0; + } + const progressNotice = this.showNotice("Initializing push"); + try { + this.plugin.setState(1 /* status */); + const status2 = await this.branchInfo(); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + const numChangedFiles = (await this.getFileChangesCount(currentBranch2, trackingBranch)).length; + this.plugin.setState(5 /* push */); + await this.wrapFS( + isomorphic_git_default.push({ + ...this.getRepo(), + onProgress: (progress) => { + if (progressNotice !== void 0) { + progressNotice.noticeEl.innerText = this.getProgressText("Pushing", progress); + } + } + }) + ); + progressNotice == null ? void 0 : progressNotice.hide(); + return numChangedFiles; + } catch (error) { + progressNotice == null ? void 0 : progressNotice.hide(); + this.plugin.displayError(error); + throw error; + } + } + async getUnpushedCommits() { + const status2 = await this.branchInfo(); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + if (trackingBranch == null || currentBranch2 == null) { + return 0; + } + const localCommit = await this.resolveRef(currentBranch2); + const upstreamCommit = await this.resolveRef(trackingBranch); + const changedFiles = await this.getFileChangesCount( + localCommit, + upstreamCommit + ); + return changedFiles.length; + } + async canPush() { + const status2 = await this.branchInfo(); + const trackingBranch = status2.tracking; + const currentBranch2 = status2.current; + const current = await this.resolveRef(currentBranch2); + const tracking = await this.resolveRef(trackingBranch); + return current != tracking; + } + async checkRequirements() { + const headExists = await this.plugin.app.vault.adapter.exists( + `${this.getRepo().dir}/.git/HEAD` + ); + return headExists ? "valid" : "missing-repo"; + } + async branchInfo() { + var _a2, _b; + try { + const current = await isomorphic_git_default.currentBranch(this.getRepo()) || ""; + const branches = await isomorphic_git_default.listBranches(this.getRepo()); + const remote = (_a2 = await this.getConfig(`branch.${current}.remote`)) != null ? _a2 : "origin"; + const trackingBranch = (_b = await this.getConfig(`branch.${current}.merge`)) == null ? void 0 : _b.split("refs/heads")[1]; + const tracking = trackingBranch ? remote + trackingBranch : void 0; + return { + current, + tracking, + branches, + remote + }; + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async getCurrentRemote() { + var _a2; + const current = await isomorphic_git_default.currentBranch(this.getRepo()) || ""; + const remote = (_a2 = await this.getConfig(`branch.${current}.remote`)) != null ? _a2 : "origin"; + return remote; + } + async checkout(branch2, remote) { + try { + return this.wrapFS( + isomorphic_git_default.checkout({ + ...this.getRepo(), + ref: branch2, + force: !!remote, + remote + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async createBranch(branch2) { + try { + await this.wrapFS( + isomorphic_git_default.branch({ ...this.getRepo(), ref: branch2, checkout: true }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async deleteBranch(branch2) { + try { + await this.wrapFS( + isomorphic_git_default.deleteBranch({ ...this.getRepo(), ref: branch2 }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async branchIsMerged(_) { + return true; + } + async init() { + try { + await this.wrapFS(isomorphic_git_default.init(this.getRepo())); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async clone(url, dir, depth) { + const progressNotice = this.showNotice("Initializing clone"); + try { + await this.wrapFS( + isomorphic_git_default.clone({ + ...this.getRepo(), + dir, + url, + depth, + onProgress: (progress) => { + if (progressNotice !== void 0) { + progressNotice.noticeEl.innerText = this.getProgressText("Cloning", progress); + } + } + }) + ); + progressNotice == null ? void 0 : progressNotice.hide(); + } catch (error) { + progressNotice == null ? void 0 : progressNotice.hide(); + this.plugin.displayError(error); + throw error; + } + } + async setConfig(path2, value) { + try { + return this.wrapFS( + isomorphic_git_default.setConfig({ + ...this.getRepo(), + path: path2, + value + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async getConfig(path2) { + try { + return this.wrapFS( + isomorphic_git_default.getConfig({ + ...this.getRepo(), + path: path2 + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async fetch(remote) { + const progressNotice = this.showNotice("Initializing fetch"); + try { + const args = { + ...this.getRepo(), + onProgress: (progress) => { + if (progressNotice !== void 0) { + progressNotice.noticeEl.innerText = this.getProgressText("Fetching", progress); + } + }, + remote: remote != null ? remote : await this.getCurrentRemote() + }; + await this.wrapFS(isomorphic_git_default.fetch(args)); + progressNotice == null ? void 0 : progressNotice.hide(); + } catch (error) { + this.plugin.displayError(error); + progressNotice == null ? void 0 : progressNotice.hide(); + throw error; + } + } + async setRemote(name, url) { + try { + await this.wrapFS( + isomorphic_git_default.addRemote({ + ...this.getRepo(), + remote: name, + url, + force: true + }) + ); + } catch (error) { + this.plugin.displayError(error); + throw error; + } + } + async getRemoteBranches(remote) { + let remoteBranches = []; + remoteBranches.push( + ...await this.wrapFS( + isomorphic_git_default.listBranches({ ...this.getRepo(), remote }) + ) + ); + remoteBranches.remove("HEAD"); + remoteBranches = remoteBranches.map((e) => `${remote}/${e}`); + return remoteBranches; + } + async getRemotes() { + return (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).map( + (remoteUrl) => remoteUrl.remote + ); + } + async removeRemote(remoteName) { + await this.wrapFS( + isomorphic_git_default.deleteRemote({ ...this.getRepo(), remote: remoteName }) + ); + } + async getRemoteUrl(remote) { + var _a2; + return (_a2 = (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).filter((item) => item.remote == remote)[0]) == null ? void 0 : _a2.url; + } + async log(_, __ = true, limit) { + const logs = await this.wrapFS( + isomorphic_git_default.log({ ...this.getRepo(), depth: limit }) + ); + return Promise.all( + logs.map(async (log2) => { + const completeMessage = log2.commit.message.split("\n\n"); + return { + message: completeMessage[0], + author: { + name: log2.commit.author.name, + email: log2.commit.author.email + }, + body: completeMessage.slice(1).join("\n\n"), + date: new Date( + log2.commit.committer.timestamp + ).toDateString(), + diff: { + changed: 0, + files: (await this.getFileChangesCount( + log2.commit.parent.first(), + log2.oid + )).map((item) => { + return { + path: item.path, + status: item.type, + vault_path: this.getRelativeVaultPath( + item.path + ), + hash: log2.oid, + binary: void 0 + }; + }) + }, + hash: log2.oid, + refs: [] + }; + }) + ); + } + updateBasePath(basePath) { + this.getRepo().dir = basePath; + } + async updateUpstreamBranch(remoteBranch) { + const [remote, branch2] = splitRemoteBranch(remoteBranch); + const branchInfo = await this.branchInfo(); + await this.setConfig( + `branch.${branchInfo.current}.merge`, + `refs/heads/${branch2}` + ); + await this.setConfig(`branch.${branch2}.remote`, remote); + } + updateGitPath(_) { + return; + } + async getFileChangesCount(commitHash1, commitHash2) { + return this.walkDifference({ + walkers: [ + isomorphic_git_default.TREE({ ref: commitHash1 }), + isomorphic_git_default.TREE({ ref: commitHash2 }) + ] + }); + } + async walkDifference({ + walkers, + dir: base + }) { + const res = await this.wrapFS( + isomorphic_git_default.walk({ + ...this.getRepo(), + trees: walkers, + map: async function(filepath, [A, B]) { + if (!worthWalking2(filepath, base)) { + return null; + } + if (await (A == null ? void 0 : A.type()) === "tree" || await (B == null ? void 0 : B.type()) === "tree") { + return; + } + const Aoid = await (A == null ? void 0 : A.oid()); + const Boid = await (B == null ? void 0 : B.oid()); + let type = "equal"; + if (Aoid !== Boid) { + type = "M"; + } + if (Aoid === void 0) { + type = "A"; + } + if (Boid === void 0) { + type = "D"; + } + if (Aoid === void 0 && Boid === void 0) { + console.log("Something weird happened:"); + console.log(A); + console.log(B); + } + if (type === "equal") { + return; + } + return { + path: filepath, + type + }; + } + }) + ); + return res; + } + async getStagedFiles(dir = ".") { + const res = await this.walkDifference({ + walkers: [isomorphic_git_default.TREE({ ref: "HEAD" }), isomorphic_git_default.STAGE()], + dir + }); + return res.map((file) => { + return { + vault_path: this.getRelativeVaultPath(file.path), + filepath: file.path + }; + }); + } + async getUnstagedFiles(base = ".") { + let notice; + const timeout = window.setTimeout(function() { + notice = new import_obsidian7.Notice( + "This takes longer: Getting status", + this.noticeLength + ); + }, 2e4); + try { + const repo = this.getRepo(); + const res = await this.wrapFS( + //Modified from `git.statusMatrix` + isomorphic_git_default.walk({ + ...repo, + trees: [isomorphic_git_default.WORKDIR(), isomorphic_git_default.STAGE()], + map: async function(filepath, [workdir, stage]) { + if (!stage && workdir) { + const isIgnored2 = await isomorphic_git_default.isIgnored({ + ...repo, + filepath + }); + if (isIgnored2) { + return null; + } + } + if (!worthWalking2(filepath, base)) { + return null; + } + const [workdirType, stageType] = await Promise.all([ + workdir && workdir.type(), + stage && stage.type() + ]); + const isBlob = [workdirType, stageType].includes( + "blob" + ); + if ((workdirType === "tree" || workdirType === "special") && !isBlob) + return; + if (stageType === "commit") return null; + if ((stageType === "tree" || stageType === "special") && !isBlob) + return; + const stageOid = stageType === "blob" ? await stage.oid() : void 0; + let workdirOid; + if (workdirType === "blob" && stageType !== "blob") { + workdirOid = "42"; + } else if (workdirType === "blob") { + workdirOid = await workdir.oid(); + } + if (!workdirOid) { + return { + filepath, + deleted: true + }; + } + if (workdirOid !== stageOid) { + return { + filepath, + deleted: false + }; + } + return null; + } + }) + ); + window.clearTimeout(timeout); + notice == null ? void 0 : notice.hide(); + return res; + } catch (error) { + window.clearTimeout(timeout); + notice == null ? void 0 : notice.hide(); + this.plugin.displayError(error); + throw error; + } + } + async getDiffString(filePath, stagedChanges = false, hash2) { + const vaultPath = this.getRelativeVaultPath(filePath); + const map = async (file, [A]) => { + if (filePath == file) { + const oid = await A.oid(); + const contents = await isomorphic_git_default.readBlob({ + ...this.getRepo(), + oid + }); + return contents.blob; + } + }; + if (hash2) { + const commitContent = await readBlob({ + ...this.getRepo(), + filepath: filePath, + oid: hash2 + }).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { + if (err instanceof isomorphic_git_default.Errors.NotFoundError) + return void 0; + throw err; + }); + const commit2 = await isomorphic_git_default.readCommit({ + ...this.getRepo(), + oid: hash2 + }); + const previousContent = await readBlob({ + ...this.getRepo(), + filepath: filePath, + oid: commit2.commit.parent.first() + }).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { + if (err instanceof isomorphic_git_default.Errors.NotFoundError) + return void 0; + throw err; + }); + const diff3 = createPatch( + vaultPath, + previousContent != null ? previousContent : "", + commitContent != null ? commitContent : "" + ); + return diff3; + } + const stagedBlob = (await isomorphic_git_default.walk({ + ...this.getRepo(), + trees: [isomorphic_git_default.STAGE()], + map + })).first(); + const stagedContent = new TextDecoder().decode(stagedBlob); + if (stagedChanges) { + const headContent = await this.resolveRef("HEAD").then( + (oid) => readBlob({ + ...this.getRepo(), + filepath: filePath, + oid + }) + ).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { + if (err instanceof isomorphic_git_default.Errors.NotFoundError) + return void 0; + throw err; + }); + const diff3 = createPatch( + vaultPath, + headContent != null ? headContent : "", + stagedContent + ); + return diff3; + } else { + let workdirContent; + if (await this.app.vault.adapter.exists(vaultPath)) { + workdirContent = await this.app.vault.adapter.read(vaultPath); + } else { + workdirContent = ""; + } + const diff3 = createPatch(vaultPath, stagedContent, workdirContent); + return diff3; + } + } + async getLastCommitTime() { + const repo = this.getRepo(); + const oid = await this.resolveRef("HEAD"); + const commit2 = await isomorphic_git_default.readCommit({ ...repo, oid }); + const date = commit2.commit.committer.timestamp; + return new Date(date * 1e3); + } + getFileStatusResult(row) { + const status2 = this.status_mapping[`${row[this.HEAD]}${row[this.WORKDIR]}${row[this.STAGE]}`]; + return { + index: status2[0] == "?" ? "U" : status2[0], + working_dir: status2[1] == "?" ? "U" : status2[1], + path: row[this.FILE], + vault_path: this.getRelativeVaultPath(row[this.FILE]) + }; + } + async checkAuthorInfo() { + const name = await this.getConfig("user.name"); + const email = await this.getConfig("user.email"); + if (!name || !email) { + throw "Git author information is not set. Please set it in the settings."; + } + } + showNotice(message, infinity = true) { + if (!this.plugin.settings.disablePopups) { + return new import_obsidian7.Notice( + message, + infinity ? this.noticeLength : void 0 + ); + } + } +}; +function fromValue2(value) { + let queue = [value]; + return { + next() { + return Promise.resolve({ + done: queue.length === 0, + value: queue.pop() + }); + }, + return() { + queue = []; + return {}; + }, + [Symbol.asyncIterator]() { + return this; + } + }; +} +function getIterator2(iterable) { + if (iterable[Symbol.asyncIterator]) { + return iterable[Symbol.asyncIterator](); + } + if (iterable[Symbol.iterator]) { + return iterable[Symbol.iterator](); + } + if (iterable.next) { + return iterable; + } + return fromValue2(iterable); +} +async function forAwait2(iterable, cb) { + const iter = getIterator2(iterable); + while (true) { + const { value, done } = await iter.next(); + if (value) await cb(value); + if (done) break; + } + if (iter.return) iter.return(); +} +async function collect2(iterable) { + let size = 0; + const buffers = []; + await forAwait2(iterable, (value) => { + buffers.push(value); + size += value.byteLength; + }); + const result = new Uint8Array(size); + let nextIndex = 0; + for (const buffer2 of buffers) { + result.set(buffer2, nextIndex); + nextIndex += buffer2.byteLength; + } + return result; +} + +// src/setting/settings.ts +var FORMAT_STRING_REFERENCE_URL = "https://momentjs.com/docs/#/parsing/string-format/"; +var LINE_AUTHOR_FEATURE_WIKI_LINK = "https://publish.obsidian.md/git-doc/Line+Authoring"; +var ObsidianGitSettingsTab = class extends import_obsidian8.PluginSettingTab { + constructor(app2, plugin) { + super(app2, plugin); + this.plugin = plugin; + this.lineAuthorColorSettings = /* @__PURE__ */ new Map(); + } + get settings() { + return this.plugin.settings; + } + display() { + const { containerEl } = this; + const plugin = this.plugin; + const commitOrBackup = plugin.settings.differentIntervalCommitAndPush ? "commit" : "backup"; + const gitReady = plugin.gitReady; + containerEl.empty(); + if (!gitReady) { + containerEl.createEl("p", { + text: "Git is not ready. When all settings are correct you can configure auto backup, etc." + }); + containerEl.createEl("br"); + } + if (gitReady) { + new import_obsidian8.Setting(containerEl).setName("Automatic").setHeading(); + new import_obsidian8.Setting(containerEl).setName("Split automatic commit and push").setDesc("Enable to use separate timer for commit and push").addToggle( + (toggle) => toggle.setValue( + plugin.settings.differentIntervalCommitAndPush + ).onChange((value) => { + plugin.settings.differentIntervalCommitAndPush = value; + plugin.saveSettings(); + plugin.clearAutoBackup(); + plugin.clearAutoPush(); + if (plugin.settings.autoSaveInterval > 0) { + plugin.startAutoBackup( + plugin.settings.autoSaveInterval + ); + } + if (value && plugin.settings.autoPushInterval > 0) { + plugin.startAutoPush( + plugin.settings.autoPushInterval + ); + } + this.display(); + }) + ); + new import_obsidian8.Setting(containerEl).setName(`Vault ${commitOrBackup} interval (minutes)`).setDesc( + `${plugin.settings.differentIntervalCommitAndPush ? "Commit" : "Commit and push"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)` + ).addText( + (text2) => text2.setValue(String(plugin.settings.autoSaveInterval)).onChange((value) => { + if (!isNaN(Number(value))) { + plugin.settings.autoSaveInterval = Number(value); + plugin.saveSettings(); + if (plugin.settings.autoSaveInterval > 0) { + plugin.clearAutoBackup(); + plugin.startAutoBackup( + plugin.settings.autoSaveInterval + ); + new import_obsidian8.Notice( + `Automatic ${commitOrBackup} enabled! Every ${formatMinutes( + plugin.settings.autoSaveInterval + )}.` + ); + } else if (plugin.settings.autoSaveInterval <= 0) { + plugin.clearAutoBackup() && new import_obsidian8.Notice( + `Automatic ${commitOrBackup} disabled!` + ); + } + } else { + new import_obsidian8.Notice("Please specify a valid number."); + } + }) + ); + if (!plugin.settings.setLastSaveToLastCommit) + new import_obsidian8.Setting(containerEl).setName(`Auto Backup after stopping file edits`).setDesc( + `Requires the ${commitOrBackup} interval not to be 0. + If turned on, do auto ${commitOrBackup} every ${formatMinutes( + plugin.settings.autoSaveInterval + )} after stopping file edits. + This also prevents auto ${commitOrBackup} while editing a file. If turned off, it's independent from the last change.` + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.autoBackupAfterFileChange).onChange((value) => { + plugin.settings.autoBackupAfterFileChange = value; + this.display(); + plugin.saveSettings(); + plugin.clearAutoBackup(); + if (plugin.settings.autoSaveInterval > 0) { + plugin.startAutoBackup( + plugin.settings.autoSaveInterval + ); + } + }) + ); + if (!plugin.settings.autoBackupAfterFileChange) + new import_obsidian8.Setting(containerEl).setName(`Auto ${commitOrBackup} after latest commit`).setDesc( + `If turned on, set last auto ${commitOrBackup} time to latest commit` + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.setLastSaveToLastCommit).onChange(async (value) => { + plugin.settings.setLastSaveToLastCommit = value; + plugin.saveSettings(); + this.display(); + plugin.clearAutoBackup(); + await plugin.setUpAutoBackup(); + }) + ); + if (plugin.settings.differentIntervalCommitAndPush) { + new import_obsidian8.Setting(containerEl).setName(`Vault push interval (minutes)`).setDesc( + "Push changes every X minutes. Set to 0 (default) to disable." + ).addText( + (text2) => text2.setValue(String(plugin.settings.autoPushInterval)).onChange((value) => { + if (!isNaN(Number(value))) { + plugin.settings.autoPushInterval = Number(value); + plugin.saveSettings(); + if (plugin.settings.autoPushInterval > 0) { + plugin.clearAutoPush(); + plugin.startAutoPush( + plugin.settings.autoPushInterval + ); + new import_obsidian8.Notice( + `Automatic push enabled! Every ${formatMinutes( + plugin.settings.autoPushInterval + )}.` + ); + } else if (plugin.settings.autoPushInterval <= 0) { + plugin.clearAutoPush() && new import_obsidian8.Notice( + "Automatic push disabled!" + ); + } + } else { + new import_obsidian8.Notice( + "Please specify a valid number." + ); + } + }) + ); + } + new import_obsidian8.Setting(containerEl).setName("Auto pull interval (minutes)").setDesc( + "Pull changes every X minutes. Set to 0 (default) to disable." + ).addText( + (text2) => text2.setValue(String(plugin.settings.autoPullInterval)).onChange((value) => { + if (!isNaN(Number(value))) { + plugin.settings.autoPullInterval = Number(value); + plugin.saveSettings(); + if (plugin.settings.autoPullInterval > 0) { + plugin.clearAutoPull(); + plugin.startAutoPull( + plugin.settings.autoPullInterval + ); + new import_obsidian8.Notice( + `Automatic pull enabled! Every ${formatMinutes( + plugin.settings.autoPullInterval + )}.` + ); + } else if (plugin.settings.autoPullInterval <= 0) { + plugin.clearAutoPull() && new import_obsidian8.Notice("Automatic pull disabled!"); + } + } else { + new import_obsidian8.Notice("Please specify a valid number."); + } + }) + ); + new import_obsidian8.Setting(containerEl).setName("Specify custom commit message on auto backup").setDesc("You will get a pop up to specify your message").addToggle( + (toggle) => toggle.setValue(plugin.settings.customMessageOnAutoBackup).onChange((value) => { + plugin.settings.customMessageOnAutoBackup = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Commit message on auto backup/commit").setDesc( + "Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message)" + ).addTextArea( + (text2) => text2.setPlaceholder("vault backup: {{date}}").setValue(plugin.settings.autoCommitMessage).onChange((value) => { + plugin.settings.autoCommitMessage = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Commit message").setHeading(); + new import_obsidian8.Setting(containerEl).setName("Commit message on manual backup/commit").setDesc( + "Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message)" + ).addTextArea( + (text2) => text2.setPlaceholder("vault backup: {{date}}").setValue( + plugin.settings.commitMessage ? plugin.settings.commitMessage : "" + ).onChange((value) => { + plugin.settings.commitMessage = value; + plugin.saveSettings(); + }) + ); + const datePlaceholderSetting = new import_obsidian8.Setting(containerEl).setName("{{date}} placeholder format").addText( + (text2) => text2.setPlaceholder(plugin.settings.commitDateFormat).setValue(plugin.settings.commitDateFormat).onChange(async (value) => { + plugin.settings.commitDateFormat = value; + await plugin.saveSettings(); + }) + ); + datePlaceholderSetting.descEl.innerHTML = ` + Specify custom date format. E.g. "${DATE_TIME_FORMAT_SECONDS}. See Moment.js for more formats.`; + new import_obsidian8.Setting(containerEl).setName("{{hostname}} placeholder replacement").setDesc("Specify custom hostname for every device.").addText( + (text2) => { + var _a2; + return text2.setValue((_a2 = plugin.localStorage.getHostname()) != null ? _a2 : "").onChange(async (value) => { + plugin.localStorage.setHostname(value); + }); + } + ); + new import_obsidian8.Setting(containerEl).setName("Preview commit message").addButton( + (button) => button.setButtonText("Preview").onClick(async () => { + const commitMessagePreview = await plugin.gitManager.formatCommitMessage( + plugin.settings.commitMessage + ); + new import_obsidian8.Notice(`${commitMessagePreview}`); + }) + ); + new import_obsidian8.Setting(containerEl).setName("List filenames affected by commit in the commit body").addToggle( + (toggle) => toggle.setValue(plugin.settings.listChangedFilesInMessageBody).onChange((value) => { + plugin.settings.listChangedFilesInMessageBody = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Backup").setHeading(); + if (plugin.gitManager instanceof SimpleGit) + new import_obsidian8.Setting(containerEl).setName("Sync Method").setDesc( + "Selects the method used for handling new changes found in your remote git repository." + ).addDropdown((dropdown) => { + const options = { + merge: "Merge", + rebase: "Rebase", + reset: "Other sync service (Only updates the HEAD without touching the working directory)" + }; + dropdown.addOptions(options); + dropdown.setValue(plugin.settings.syncMethod); + dropdown.onChange(async (option) => { + plugin.settings.syncMethod = option; + plugin.saveSettings(); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Pull updates on startup").setDesc("Automatically pull updates when Obsidian starts").addToggle( + (toggle) => toggle.setValue(plugin.settings.autoPullOnBoot).onChange((value) => { + plugin.settings.autoPullOnBoot = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Push on backup").setDesc("Disable to only commit changes").addToggle( + (toggle) => toggle.setValue(!plugin.settings.disablePush).onChange((value) => { + plugin.settings.disablePush = !value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Pull changes before push").setDesc("Commit -> pull -> push (Only if pushing is enabled)").addToggle( + (toggle) => toggle.setValue(plugin.settings.pullBeforePush).onChange((value) => { + plugin.settings.pullBeforePush = value; + plugin.saveSettings(); + }) + ); + if (plugin.gitManager instanceof SimpleGit) { + new import_obsidian8.Setting(containerEl).setName("Line author information").setHeading(); + this.addLineAuthorInfoSettings(); + } + } + new import_obsidian8.Setting(containerEl).setName("History view").setHeading(); + new import_obsidian8.Setting(containerEl).setName("Show Author").setDesc("Show the author of the commit in the history view").addDropdown((dropdown) => { + const options = { + hide: "Hide", + full: "Full", + initials: "Initials" + }; + dropdown.addOptions(options); + dropdown.setValue(plugin.settings.authorInHistoryView); + dropdown.onChange(async (option) => { + plugin.settings.authorInHistoryView = option; + plugin.saveSettings(); + plugin.refresh(); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Show Date").setDesc( + "Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date." + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.dateInHistoryView).onChange((value) => { + plugin.settings.dateInHistoryView = value; + plugin.saveSettings(); + plugin.refresh(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Source control view").setHeading(); + new import_obsidian8.Setting(containerEl).setName( + "Automatically refresh source control view on file changes" + ).setDesc( + "On slower machines this may cause lags. If so, just disable this option" + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.refreshSourceControl).onChange((value) => { + plugin.settings.refreshSourceControl = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Source control view refresh interval").setDesc( + "Milliseconds to wait after file change before refreshing the Source Control View" + ).addText( + (toggle) => toggle.setValue( + plugin.settings.refreshSourceControlTimer.toString() + ).setPlaceholder("7000").onChange((value) => { + plugin.settings.refreshSourceControlTimer = Math.max( + parseInt(value), + 500 + ); + plugin.saveSettings(); + plugin.setRefreshDebouncer(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Miscellaneous").setHeading(); + new import_obsidian8.Setting(containerEl).setName("Disable notifications").setDesc( + "Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting" + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.disablePopups).onChange((value) => { + plugin.settings.disablePopups = value; + this.display(); + plugin.saveSettings(); + }) + ); + if (!plugin.settings.disablePopups) + new import_obsidian8.Setting(containerEl).setName("Hide notifications for no changes").setDesc( + "Don't show notifications when there are no changes to commit/push" + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.disablePopupsForNoChanges).onChange((value) => { + plugin.settings.disablePopupsForNoChanges = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Show status bar").setDesc( + "Obsidian must be restarted for the changes to take affect" + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.showStatusBar).onChange((value) => { + plugin.settings.showStatusBar = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Show stage/unstage button in file menu").addToggle( + (toggle) => toggle.setValue(plugin.settings.showFileMenu).onChange((value) => { + plugin.settings.showFileMenu = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Show branch status bar").setDesc( + "Obsidian must be restarted for the changes to take affect" + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.showBranchStatusBar).onChange((value) => { + plugin.settings.showBranchStatusBar = value; + plugin.saveSettings(); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Show the count of modified files in the status bar").addToggle( + (toggle) => toggle.setValue(plugin.settings.changedFilesInStatusBar).onChange((value) => { + plugin.settings.changedFilesInStatusBar = value; + plugin.saveSettings(); + }) + ); + if (plugin.gitManager instanceof IsomorphicGit) { + new import_obsidian8.Setting(containerEl).setName("Authentication/commit author").setHeading(); + } else { + new import_obsidian8.Setting(containerEl).setName("Commit author").setHeading(); + } + if (plugin.gitManager instanceof IsomorphicGit) + new import_obsidian8.Setting(containerEl).setName( + "Username on your git server. E.g. your username on GitHub" + ).addText((cb) => { + var _a2; + cb.setValue((_a2 = plugin.localStorage.getUsername()) != null ? _a2 : ""); + cb.onChange((value) => { + plugin.localStorage.setUsername(value); + }); + }); + if (plugin.gitManager instanceof IsomorphicGit) + new import_obsidian8.Setting(containerEl).setName("Password/Personal access token").setDesc( + "Type in your password. You won't be able to see it again." + ).addText((cb) => { + cb.inputEl.autocapitalize = "off"; + cb.inputEl.autocomplete = "off"; + cb.inputEl.spellcheck = false; + cb.onChange((value) => { + plugin.localStorage.setPassword(value); + }); + }); + if (plugin.gitReady) + new import_obsidian8.Setting(containerEl).setName("Author name for commit").addText(async (cb) => { + cb.setValue(await plugin.gitManager.getConfig("user.name")); + cb.onChange((value) => { + plugin.gitManager.setConfig( + "user.name", + value == "" ? void 0 : value + ); + }); + }); + if (plugin.gitReady) + new import_obsidian8.Setting(containerEl).setName("Author email for commit").addText(async (cb) => { + cb.setValue( + await plugin.gitManager.getConfig("user.email") + ); + cb.onChange((value) => { + plugin.gitManager.setConfig( + "user.email", + value == "" ? void 0 : value + ); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Advanced").setHeading(); + if (plugin.gitManager instanceof SimpleGit) { + new import_obsidian8.Setting(containerEl).setName("Update submodules").setDesc( + '"Create backup" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule' + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.updateSubmodules).onChange((value) => { + plugin.settings.updateSubmodules = value; + plugin.saveSettings(); + }) + ); + if (plugin.settings.updateSubmodules) { + new import_obsidian8.Setting(containerEl).setName("Submodule recurse checkout/switch").setDesc( + "Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist)." + ).addToggle( + (toggle) => toggle.setValue(plugin.settings.submoduleRecurseCheckout).onChange((value) => { + plugin.settings.submoduleRecurseCheckout = value; + plugin.saveSettings(); + }) + ); + } + } + if (plugin.gitManager instanceof SimpleGit) + new import_obsidian8.Setting(containerEl).setName("Custom Git binary path").addText((cb) => { + var _a2; + cb.setValue((_a2 = plugin.localStorage.getGitPath()) != null ? _a2 : ""); + cb.setPlaceholder("git"); + cb.onChange((value) => { + plugin.localStorage.setGitPath(value); + plugin.gitManager.updateGitPath(value || "git"); + }); + }); + if (plugin.gitManager instanceof SimpleGit) + new import_obsidian8.Setting(containerEl).setName("Additional environment variables").setDesc( + "Use each line for a new environment variable in the format KEY=VALUE" + ).addTextArea((cb) => { + cb.setPlaceholder("GIT_DIR=/path/to/git/dir"); + cb.setValue(plugin.localStorage.getEnvVars().join("\n")); + cb.onChange((value) => { + plugin.localStorage.setEnvVars(value.split("\n")); + }); + }); + if (plugin.gitManager instanceof SimpleGit) + new import_obsidian8.Setting(containerEl).setName("Additional PATH environment variable paths").setDesc("Use each line for one path").addTextArea((cb) => { + cb.setValue(plugin.localStorage.getPATHPaths().join("\n")); + cb.onChange((value) => { + plugin.localStorage.setPATHPaths(value.split("\n")); + }); + }); + if (plugin.gitManager instanceof SimpleGit) + new import_obsidian8.Setting(containerEl).setName("Reload with new environment variables").setDesc( + "Removing previously added environment variables will not take effect until Obsidian is restarted." + ).addButton((cb) => { + cb.setButtonText("Reload"); + cb.setCta(); + cb.onClick(() => { + plugin.gitManager.setGitInstance(); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Custom base path (Git repository path)").setDesc( + ` + Sets the relative path to the vault from which the Git binary should be executed. + Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use "\\" instead of "/" on Windows. + ` + ).addText((cb) => { + cb.setValue(plugin.settings.basePath); + cb.setPlaceholder("directory/directory-with-git-repo"); + cb.onChange((value) => { + plugin.settings.basePath = value; + plugin.saveSettings(); + plugin.gitManager.updateBasePath(value || ""); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Custom Git directory path (Instead of '.git')").setDesc( + `Requires restart of Obsidian to take effect. Use "\\" instead of "/" on Windows.` + ).addText((cb) => { + cb.setValue(plugin.settings.gitDir); + cb.setPlaceholder(".git"); + cb.onChange((value) => { + plugin.settings.gitDir = value; + plugin.saveSettings(); + }); + }); + new import_obsidian8.Setting(containerEl).setName("Disable on this device").setDesc( + "Disables the plugin on this device. This setting is not synced." + ).addToggle( + (toggle) => toggle.setValue(plugin.localStorage.getPluginDisabled()).onChange((value) => { + plugin.localStorage.setPluginDisabled(value); + if (value) { + plugin.unloadPlugin(); + } else { + plugin.loadPlugin(); + } + new import_obsidian8.Notice( + "Obsidian must be restarted for the changes to take affect" + ); + }) + ); + new import_obsidian8.Setting(containerEl).setName("Donate").setDesc( + "If you like this Plugin, consider donating to support continued development." + ).addButton((bt) => { + bt.buttonEl.outerHTML = "Buy Me a Coffee at ko-fi.com"; + }); + const info = containerEl.createDiv(); + info.setAttr("align", "center"); + info.setText( + "Debugging and logging:\nYou can always see the logs of this and every other plugin by opening the console with" + ); + const keys = containerEl.createDiv(); + keys.setAttr("align", "center"); + keys.addClass("obsidian-git-shortcuts"); + if (import_obsidian8.Platform.isMacOS === true) { + keys.createEl("kbd", { text: "CMD (\u2318) + OPTION (\u2325) + I" }); + } else { + keys.createEl("kbd", { text: "CTRL + SHIFT + I" }); + } + } + configureLineAuthorShowStatus(show) { + this.settings.lineAuthor.show = show; + this.plugin.saveSettings(); + if (show) this.plugin.lineAuthoringFeature.activateFeature(); + else this.plugin.lineAuthoringFeature.deactivateFeature(); + } + /** + * Persists the setting {@link key} with value {@link value} and + * refreshes the line author info views. + */ + lineAuthorSettingHandler(key2, value) { + this.settings.lineAuthor[key2] = value; + this.plugin.saveSettings(); + this.plugin.lineAuthoringFeature.refreshLineAuthorViews(); + } + /** + * Ensure, that certain last shown values are persisten in the settings. + * + * Necessary for the line author info gutter context menus. + */ + beforeSaveSettings() { + const laSettings = this.settings.lineAuthor; + if (laSettings.authorDisplay !== "hide") { + laSettings.lastShownAuthorDisplay = laSettings.authorDisplay; + } + if (laSettings.dateTimeFormatOptions !== "hide") { + laSettings.lastShownDateTimeFormatOptions = laSettings.dateTimeFormatOptions; + } + } + addLineAuthorInfoSettings() { + const baseLineAuthorInfoSetting = new import_obsidian8.Setting(this.containerEl).setName( + "Show commit authoring information next to each line" + ); + if (!this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform()) { + baseLineAuthorInfoSetting.setDesc("Only available on desktop currently.").setDisabled(true); + } + baseLineAuthorInfoSetting.descEl.innerHTML = ` + Feature guide and quick examples
+ The commit hash, author name and authoring date can all be individually toggled.
Hide everything, to only show the age-colored sidebar.`; + baseLineAuthorInfoSetting.addToggle( + (toggle) => toggle.setValue(this.settings.lineAuthor.show).onChange((value) => { + this.configureLineAuthorShowStatus(value); + this.display(); + }) + ); + if (this.settings.lineAuthor.show) { + const trackMovement = new import_obsidian8.Setting(this.containerEl).setName("Follow movement and copies across files and commits").setDesc("").addDropdown((dropdown) => { + dropdown.addOptions({ + inactive: "Do not follow (default)", + "same-commit": "Follow within same commit", + "all-commits": "Follow within all commits (maybe slow)" + }); + dropdown.setValue(this.settings.lineAuthor.followMovement); + dropdown.onChange( + (value) => this.lineAuthorSettingHandler("followMovement", value) + ); + }); + trackMovement.descEl.innerHTML = ` + By default (deactivated), each line only shows the newest commit where it was changed. +
+ With same commit, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown. +
+ With all commits, cut-copy-paste-ing text inbetween multiple commits will be detected. +
+ It uses git-blame and + for matches (at least ${GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH} characters) within the same (or all) commit(s), the originating commit's information is shown.`; + new import_obsidian8.Setting(this.containerEl).setName("Show commit hash").addToggle((tgl) => { + tgl.setValue(this.settings.lineAuthor.showCommitHash); + tgl.onChange( + async (value) => this.lineAuthorSettingHandler("showCommitHash", value) + ); + }); + new import_obsidian8.Setting(this.containerEl).setName("Author name display").setDesc("If and how the author is displayed").addDropdown((dropdown) => { + const options = { + hide: "Hide", + initials: "Initials (default)", + "first name": "First name", + "last name": "Last name", + full: "Full name" + }; + dropdown.addOptions(options); + dropdown.setValue(this.settings.lineAuthor.authorDisplay); + dropdown.onChange( + async (value) => this.lineAuthorSettingHandler("authorDisplay", value) + ); + }); + new import_obsidian8.Setting(this.containerEl).setName("Authoring date display").setDesc( + "If and how the date and time of authoring the line is displayed" + ).addDropdown((dropdown) => { + const options = { + hide: "Hide", + date: "Date (default)", + datetime: "Date and time", + "natural language": "Natural language", + custom: "Custom" + }; + dropdown.addOptions(options); + dropdown.setValue( + this.settings.lineAuthor.dateTimeFormatOptions + ); + dropdown.onChange( + async (value) => { + this.lineAuthorSettingHandler( + "dateTimeFormatOptions", + value + ); + this.display(); + } + ); + }); + if (this.settings.lineAuthor.dateTimeFormatOptions === "custom") { + const dateTimeFormatCustomStringSetting = new import_obsidian8.Setting( + this.containerEl + ); + dateTimeFormatCustomStringSetting.setName("Custom authoring date format").addText((cb) => { + cb.setValue( + this.settings.lineAuthor.dateTimeFormatCustomString + ); + cb.setPlaceholder("YYYY-MM-DD HH:mm"); + cb.onChange((value) => { + this.lineAuthorSettingHandler( + "dateTimeFormatCustomString", + value + ); + dateTimeFormatCustomStringSetting.descEl.innerHTML = this.previewCustomDateTimeDescriptionHtml( + value + ); + }); + }); + dateTimeFormatCustomStringSetting.descEl.innerHTML = this.previewCustomDateTimeDescriptionHtml( + this.settings.lineAuthor.dateTimeFormatCustomString + ); + } + new import_obsidian8.Setting(this.containerEl).setName("Authoring date display timezone").addDropdown((dropdown) => { + const options = { + "viewer-local": "My local (default)", + "author-local": "Author's local", + utc0000: "UTC+0000/Z" + }; + dropdown.addOptions(options); + dropdown.setValue( + this.settings.lineAuthor.dateTimeTimezone + ); + dropdown.onChange( + async (value) => this.lineAuthorSettingHandler("dateTimeTimezone", value) + ); + }).descEl.innerHTML = ` + The time-zone in which the authoring date should be shown. + Either your local time-zone (default), + the author's time-zone during commit creation or + UTC\xB100:00. + `; + const oldestAgeSetting = new import_obsidian8.Setting(this.containerEl).setName( + "Oldest age in coloring" + ); + oldestAgeSetting.descEl.innerHTML = this.previewOldestAgeDescriptionHtml( + this.settings.lineAuthor.coloringMaxAge + )[0]; + oldestAgeSetting.addText((text2) => { + text2.setPlaceholder("1y"); + text2.setValue(this.settings.lineAuthor.coloringMaxAge); + text2.onChange((value) => { + const [preview, valid] = this.previewOldestAgeDescriptionHtml(value); + oldestAgeSetting.descEl.innerHTML = preview; + if (valid) { + this.lineAuthorSettingHandler("coloringMaxAge", value); + this.refreshColorSettingsName("oldest"); + } + }); + }); + this.createColorSetting("newest"); + this.createColorSetting("oldest"); + new import_obsidian8.Setting(this.containerEl).setName("Text color").addText((field) => { + field.setValue(this.settings.lineAuthor.textColorCss); + field.onChange((value) => { + this.lineAuthorSettingHandler("textColorCss", value); + }); + }).descEl.innerHTML = ` + The CSS color of the gutter text.
+ + It is higly recommended to use + + CSS variables + defined by themes + (e.g.
var(--text-muted)
or +
var(--text-on-accent)
, + because they automatically adapt to theme changes.
+ + See: + List of available CSS variables in Obsidian + + `; + new import_obsidian8.Setting(this.containerEl).setName("Ignore whitespace and newlines in changes").addToggle((tgl) => { + tgl.setValue(this.settings.lineAuthor.ignoreWhitespace); + tgl.onChange( + (value) => this.lineAuthorSettingHandler("ignoreWhitespace", value) + ); + }).descEl.innerHTML = ` + Whitespace and newlines are interpreted as + part of the document and in changes + by default (hence not ignored). + This makes the last line being shown as 'changed' + when a new subsequent line is added, + even if the previously last line's text is the same. +
+ If you don't care about purely-whitespace changes + (e.g. list nesting / quote indentation changes), + then activating this will provide more meaningful change detection. + `; + } + } + createColorSetting(which) { + const setting = new import_obsidian8.Setting(this.containerEl).setName("").addText((text2) => { + const color = pickColor(which, this.settings.lineAuthor); + const defaultColor = pickColor( + which, + DEFAULT_SETTINGS.lineAuthor + ); + text2.setPlaceholder(rgbToString(defaultColor)); + text2.setValue(rgbToString(color)); + text2.onChange((colorNew) => { + const rgb = convertToRgb(colorNew); + if (rgb !== void 0) { + const key2 = which === "newest" ? "colorNew" : "colorOld"; + this.lineAuthorSettingHandler(key2, rgb); + } + this.refreshColorSettingsDesc(which, rgb); + }); + }); + this.lineAuthorColorSettings.set(which, setting); + this.refreshColorSettingsName(which); + this.refreshColorSettingsDesc( + which, + pickColor(which, this.settings.lineAuthor) + ); + } + refreshColorSettingsName(which) { + const settingsDom = this.lineAuthorColorSettings.get(which); + if (settingsDom) { + const whichDescriber = which === "oldest" ? `oldest (${this.settings.lineAuthor.coloringMaxAge} or older)` : "newest"; + settingsDom.nameEl.innerText = `Color for ${whichDescriber} commits`; + } + } + refreshColorSettingsDesc(which, rgb) { + const settingsDom = this.lineAuthorColorSettings.get(which); + if (settingsDom) { + settingsDom.descEl.innerHTML = this.colorSettingPreviewDescHtml( + which, + this.settings.lineAuthor, + rgb !== void 0 + ); + } + } + colorSettingPreviewDescHtml(which, laSettings, colorIsValid) { + const rgbStr = colorIsValid ? previewColor(which, laSettings) : `rgba(127,127,127,0.3)`; + const today = import_obsidian8.moment.unix(import_obsidian8.moment.now() / 1e3).format("YYYY-MM-DD"); + const text2 = colorIsValid ? `abcdef Author Name ${today}` : "invalid color"; + const preview = `
${text2}
`; + return `Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and + named colors (e.g. 'black', 'purple'). Color preview: ${preview}`; + } + previewCustomDateTimeDescriptionHtml(dateTimeFormatCustomString) { + const formattedDateTime = (0, import_obsidian8.moment)().format(dateTimeFormatCustomString); + return `
Format string to display the authoring date.
Currently: ${formattedDateTime}`; + } + previewOldestAgeDescriptionHtml(coloringMaxAge) { + const duration = parseColoringMaxAgeDuration(coloringMaxAge); + const durationString = duration !== void 0 ? `${duration.asDays()} days` : "invalid!"; + return [ + `The oldest age in the line author coloring. Everything older will have the same color. +
Smallest valid age is "1d". Currently: ${durationString}`, + duration + ]; + } +}; +function pickColor(which, las) { + return which === "oldest" ? las.colorOld : las.colorNew; +} +function parseColoringMaxAgeDuration(durationString) { + const duration = import_obsidian8.moment.duration("P" + durationString.toUpperCase()); + return duration.isValid() && duration.asDays() && duration.asDays() >= 1 ? duration : void 0; +} + +// src/lineAuthor/model.ts +function lineAuthoringId(head, objHash, path2) { + if (head === void 0 || objHash === void 0 || path2 === void 0) { + return void 0; + } + return `head${head}-obj${objHash}-path${path2}`; +} +var LineAuthoringContainerType = import_state.Annotation.define(); +function newComputationResultAsTransaction(key2, la, state) { + return state.update({ + annotations: LineAuthoringContainerType.of({ + key: key2, + la, + lineOffsetsFromUnsavedChanges: /* @__PURE__ */ new Map() + }) + }); +} +function getLineAuthorAnnotation(tr) { + return tr.annotation(LineAuthoringContainerType); +} +var lineAuthorState = import_state.StateField.define({ + create: (_state) => void 0, + /** + * The state can be updated from either an annotated transaction containing + * the newest line authoring (for the saved document) - or from + * unsaved changes of the document as the user is actively typing in the editor. + * + * In the first case, we take the new line authoring and discard anything we had remembered + * from unsaved changes. In the second case, we use the unsaved changes in {@link enrichUnsavedChanges} to pre-compute information to immediately update the + * line author gutter without needing to wait until the document is saved and the + * line authoring is properly computed. + */ + update: (previous, transaction) => { + var _a2; + return (_a2 = getLineAuthorAnnotation(transaction)) != null ? _a2 : enrichUnsavedChanges(transaction, previous); + }, + // compare cache keys. + // equality rate is >= 95% :) + // hence avoids recomputation of views + compare: (l, r) => (l == null ? void 0 : l.key) === (r == null ? void 0 : r.key) +}); +function laStateDigest(laState) { + var _a2; + const digest = import_js_sha256.sha256.create(); + if (!laState) return digest; + const { la, key: key2, lineOffsetsFromUnsavedChanges } = laState; + digest.update(la === "untracked" ? "t" : "f"); + digest.update(key2); + for (const [k, v] of (_a2 = lineOffsetsFromUnsavedChanges.entries()) != null ? _a2 : []) + digest.update([k, v]); + return digest; +} +var latestSettings = { + get: void 0, + save: void 0 +}; +function provideSettingsAccess(settingsGetter, settingsSetter) { + latestSettings.get = settingsGetter; + latestSettings.save = settingsSetter; +} +function maxAgeInDaysFromSettings(settings) { + var _a2, _b; + return (_b = (_a2 = parseColoringMaxAgeDuration(settings.coloringMaxAge)) == null ? void 0 : _a2.asDays()) != null ? _b : parseColoringMaxAgeDuration( + DEFAULT_SETTINGS.lineAuthor.coloringMaxAge + ).asDays(); +} +function enrichUnsavedChanges(tr, prev) { + if (!prev) return void 0; + if (!tr.changes.empty) { + tr.changes.iterChanges((fromA, toA, fromB, toB) => { + var _a2; + const oldDoc = tr.startState.doc; + const { newDoc } = tr; + const beforeFrom = oldDoc.lineAt(fromA).number; + const beforeTo = oldDoc.lineAt(toA).number; + const afterFrom = newDoc.lineAt(fromB).number; + const afterTo = newDoc.lineAt(toB).number; + const beforeLen = beforeTo - beforeFrom + 1; + const afterLen = afterTo - afterFrom + 1; + for (let afterI = afterFrom; afterI <= afterTo; afterI++) { + let offset = (_a2 = prev.lineOffsetsFromUnsavedChanges.get(afterI)) != null ? _a2 : 0; + const isLastLine = afterTo === afterI; + const changeInNumberOfLines = afterLen - beforeLen; + if (isLastLine) offset += changeInNumberOfLines; + prev.lineOffsetsFromUnsavedChanges.set(afterI, offset); + } + }); + } + return prev; +} + +// src/lineAuthor/control.ts +var LineAuthoringSubscriber = class { + // remember path to detect and adapt to renames + constructor(state) { + this.state = state; + this.subscribeMe(); + } + async notifyLineAuthoring(id, la) { + if (this.view === void 0) { + console.warn( + `Git: View is not defined for editor cache key. Unforeseen situation. id: ${id}` + ); + return; + } + const state = this.view.state; + const transaction = newComputationResultAsTransaction(id, la, state); + this.view.dispatch(transaction); + } + updateToNewState(state) { + const filepathChanged = this.lastSeenPath && this.filepath != this.lastSeenPath; + this.state = state; + if (filepathChanged) { + this.unsubscribeMe(this.lastSeenPath); + this.subscribeMe(); + } + return this; + } + removeIfStale() { + if (this.view.destroyed) { + this.unsubscribeMe(this.lastSeenPath); + } + } + subscribeMe() { + if (this.filepath === void 0) return; + eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( + this.filepath, + (subs) => subs.add(this) + ); + this.lastSeenPath = this.filepath; + } + unsubscribeMe(oldFilepath) { + eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( + oldFilepath, + (subs) => subs.delete(this) + ); + } + get filepath() { + var _a2, _b; + return (_b = (_a2 = this.state.field(import_obsidian9.editorViewField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path; + } + get view() { + return this.state.field(import_obsidian9.editorEditorField); + } +}; +var subscribeNewEditor = import_state2.StateField.define({ + create: (state) => new LineAuthoringSubscriber(state), + update: (v, transaction) => v.updateToNewState(transaction.state), + compare: (a, b) => a === b +}); + +// src/lineAuthor/view/cache.ts +init_polyfill_buffer(); +function clearViewCache() { + longestRenderedGutter = void 0; + renderedAgeInDaysForAdaptiveInitialColoring = []; + ageIdx = 0; + gutterInstances.clear(); + gutterMarkersRangeSet.clear(); + attachedGutterElements.clear(); +} +var longestRenderedGutter = void 0; +var getLongestRenderedGutter = () => longestRenderedGutter; +function conditionallyUpdateLongestRenderedGutter(gutter2, text2) { + var _a2; + const length = text2.length; + if (length < ((_a2 = longestRenderedGutter == null ? void 0 : longestRenderedGutter.length) != null ? _a2 : 0)) return; + longestRenderedGutter = { gutter: gutter2, length, text: text2 }; + const settings = latestSettings.get(); + if (length !== settings.gutterSpacingFallbackLength) { + settings.gutterSpacingFallbackLength = length; + latestSettings.save(settings); + } +} +var renderedAgeInDaysForAdaptiveInitialColoring = []; +var ADAPTIVE_INITIAL_COLORING_AGE_CACHE_SIZE = 15; +var ageIdx = 0; +function recordRenderedAgeInDays(age) { + renderedAgeInDaysForAdaptiveInitialColoring[ageIdx] = age; + ageIdx = (ageIdx + 1) % ADAPTIVE_INITIAL_COLORING_AGE_CACHE_SIZE; +} +function computeAdaptiveInitialColoringAgeInDays() { + return median(renderedAgeInDaysForAdaptiveInitialColoring); +} +var gutterInstances = /* @__PURE__ */ new Map(); +var gutterMarkersRangeSet = /* @__PURE__ */ new Map(); +var attachedGutterElements = /* @__PURE__ */ new Set(); + +// src/lineAuthor/view/view.ts +init_polyfill_buffer(); +var import_state3 = require("@codemirror/state"); +var import_view2 = require("@codemirror/view"); + +// src/lineAuthor/view/gutter/gutter.ts +init_polyfill_buffer(); +var import_view = require("@codemirror/view"); +var import_js_sha2562 = __toESM(require_sha256()); +var import_obsidian10 = require("obsidian"); + +// src/lineAuthor/view/contextMenu.ts +init_polyfill_buffer(); + +// src/lineAuthor/view/gutter/gutterElementSearch.ts +init_polyfill_buffer(); +var mouseXY = { x: -10, y: -10 }; +function prepareGutterSearchForContextMenuHandling() { + if (mouseXY.x === -10) { + window.addEventListener("mousedown", (e) => { + mouseXY.x = e.clientX; + mouseXY.y = e.clientY; + }); + } +} +function findGutterElementUnderMouse() { + for (const elt of attachedGutterElements) { + if (contains(elt, mouseXY)) return elt; + } +} +function contains(elt, pt) { + const { x, y, width, height } = elt.getBoundingClientRect(); + return x <= pt.x && pt.x <= x + width && y <= pt.y && pt.y <= y + height; +} + +// src/pluginGlobalRef.ts +init_polyfill_buffer(); +var pluginRef = {}; + +// src/lineAuthor/view/contextMenu.ts +var COMMIT_ATTR = "data-commit"; +function handleContextMenu(menu, editor, _mdv) { + if (editor.hasFocus()) return; + const gutterElement = findGutterElementUnderMouse(); + if (!gutterElement) return; + const info = getCommitInfo(gutterElement); + if (!info) return; + if (!info.isZeroCommit && !info.isWaitingGutter) { + addCopyHashMenuItem(info, menu); + } + addConfigurableLineAuthorSettings("showCommitHash", menu); + addConfigurableLineAuthorSettings("authorDisplay", menu); + addConfigurableLineAuthorSettings("dateTimeFormatOptions", menu); +} +function addCopyHashMenuItem(commit2, menu) { + menu.addItem( + (item) => item.setTitle("Copy commit hash").setIcon("copy").setSection("obs-git-line-author-copy").onClick((_e) => navigator.clipboard.writeText(commit2.hash)) + ); +} +function addConfigurableLineAuthorSettings(key2, menu) { + var _a2, _b; + let title; + let actionNewValue; + const settings = pluginRef.plugin.settings.lineAuthor; + const currentValue = settings[key2]; + const currentlyShown = typeof currentValue === "boolean" ? currentValue : currentValue !== "hide"; + const defaultValue = DEFAULT_SETTINGS.lineAuthor[key2]; + if (key2 === "showCommitHash") { + title = "Show commit hash"; + actionNewValue = !currentValue; + } else if (key2 === "authorDisplay") { + const showOption = (_a2 = settings.lastShownAuthorDisplay) != null ? _a2 : defaultValue; + title = "Show author " + (currentlyShown ? currentValue : showOption); + actionNewValue = currentlyShown ? "hide" : showOption; + } else if (key2 === "dateTimeFormatOptions") { + const showOption = (_b = settings.lastShownDateTimeFormatOptions) != null ? _b : defaultValue; + title = "Show " + (currentlyShown ? currentValue : showOption); + title += !title.contains("date") ? " date" : ""; + actionNewValue = currentlyShown ? "hide" : showOption; + } else { + impossibleBranch(key2); + } + menu.addItem( + (item) => item.setTitle(title).setSection("obs-git-line-author-configure").setChecked(currentlyShown).onClick( + (_e) => { + var _a3, _b2; + return (_b2 = (_a3 = pluginRef.plugin) == null ? void 0 : _a3.settingsTab) == null ? void 0 : _b2.lineAuthorSettingHandler( + key2, + actionNewValue + ); + } + ) + ); +} +function enrichCommitInfoForContextMenu(commit2, isWaitingGutter, elt) { + elt.setAttr( + COMMIT_ATTR, + JSON.stringify({ + hash: commit2.hash, + isZeroCommit: commit2.isZeroCommit, + isWaitingGutter + }) + ); +} +function getCommitInfo(elt) { + const commitInfoStr = elt.getAttr(COMMIT_ATTR); + return commitInfoStr ? JSON.parse(commitInfoStr) : void 0; +} + +// src/lineAuthor/view/gutter/coloring.ts +init_polyfill_buffer(); +function previewColor(which, settings) { + return which === "oldest" ? coloringBasedOnCommitAge(0, false, settings).color : coloringBasedOnCommitAge(void 0, true, settings).color; +} +function coloringBasedOnCommitAge(commitAuthorEpochSeonds, isZeroCommit, settings) { + const maxAgeInDays = maxAgeInDaysFromSettings(settings); + const epochSecondsNow = Date.now() / 1e3; + const authoringEpochSeconds = commitAuthorEpochSeonds != null ? commitAuthorEpochSeonds : 0; + const secondsSinceCommit = isZeroCommit ? 0 : epochSecondsNow - authoringEpochSeconds; + const daysSinceCommit = secondsSinceCommit / 60 / 60 / 24; + const x = Math.pow( + Math.clamp(daysSinceCommit / maxAgeInDays, 0, 1), + 1 / 2.3 + ); + const dark = isDarkMode(); + const color0 = settings.colorNew; + const color1 = settings.colorOld; + const scaling = dark ? 0.4 : 1; + const r = lin(color0.r, color1.r, x) * scaling; + const g = lin(color0.g, color1.g, x) * scaling; + const b = lin(color0.b, color1.b, x) * scaling; + const a = dark ? 0.75 : 0.25; + return { color: `rgba(${r},${g},${b},${a})`, daysSinceCommit }; +} +function lin(z0, z1, x) { + return z0 + (z1 - z0) * x; +} +function isDarkMode() { + const obsidian = window == null ? void 0 : window.app; + return (obsidian == null ? void 0 : obsidian.getTheme()) === "obsidian"; +} +function setTextColorCssBasedOnSetting(settings) { + document.body.style.setProperty( + "--obs-git-gutter-text", + settings.textColorCss + ); +} + +// src/lineAuthor/view/gutter/commitChoice.ts +init_polyfill_buffer(); +function chooseNewestCommit(lineAuthoring, startLine, endLine) { + let newest = void 0; + for (let line = startLine; line <= endLine; line++) { + const currentHash = lineAuthoring.hashPerLine[line]; + const currentCommit = lineAuthoring.commits.get(currentHash); + if (!newest || currentCommit.isZeroCommit || isNewerThan(currentCommit, newest)) { + newest = currentCommit; + } + } + return newest; +} +function isNewerThan(left, right) { + var _a2, _b, _c, _d; + const l = (_b = (_a2 = left.author) == null ? void 0 : _a2.epochSeconds) != null ? _b : 0; + const r = (_d = (_c = right.author) == null ? void 0 : _c.epochSeconds) != null ? _d : 0; + return l > r; +} + +// src/lineAuthor/view/gutter/gutter.ts +var VALUE_NOT_FOUND_FALLBACK = "-"; +var NEW_CHANGE_CHARACTER = "+"; +var NEW_CHANGE_NUMBER_OF_CHARACTERS = 3; +var DIFFERING_AUTHOR_COMMITTER_MARKER = "*"; +var NON_WHITESPACE_REGEXP = /\S/g; +var UNINTRUSIVE_CHARACTER_FOR_WAITING_RENDERING = "%"; +var TextGutter = class extends import_view.GutterMarker { + constructor(text2) { + super(); + this.text = text2; + } + eq(other) { + return this.text === (other == null ? void 0 : other.text); + } + toDOM() { + return document.createTextNode(this.text); + } + destroy(dom) { + if (!document.body.contains(dom)) dom.remove(); + } +}; +var LineAuthoringGutter = class extends import_view.GutterMarker { + /** + * **This should only be called {@link lineAuthoringGutterMarker}!** + * + * We want to avoid creating the same instance multiple times for improved performance. + */ + constructor(lineAuthoring, startLine, endLine, key2, settings, options) { + super(); + this.lineAuthoring = lineAuthoring; + this.startLine = startLine; + this.endLine = endLine; + this.key = key2; + this.settings = settings; + this.options = options; + this.point = false; + this.elementClass = "obs-git-blame-gutter"; + } + // Equality used by CodeMirror for optimisations + eq(other) { + return this.key === (other == null ? void 0 : other.key) && this.startLine === (other == null ? void 0 : other.startLine) && this.endLine === (other == null ? void 0 : other.endLine) && (this == null ? void 0 : this.options) === (other == null ? void 0 : other.options); + } + /** + * Renders to a Html node. + * + * It choses the newest commit within the line-range, + * renders it, makes adjustments for fake-commits and finally warps + * it into HTML. + * + * The DOM is actually precomputed with {@link computeDom}, + * which provides a finaliser to run before the DOM is handed over to CodeMirror. + * This is done, because this method is called frequently. It is called, + * whenever a gutter gets into the viewport and needs to be rendered. + * + * The age in days is recorded via {@link recordRenderedAgeInDays} to enable adaptive coloring. + */ + toDOM() { + var _a2; + this.precomputedDomProvider = (_a2 = this.precomputedDomProvider) != null ? _a2 : this.computeDom(); + return this.precomputedDomProvider(); + } + destroy(dom) { + if (!document.body.contains(dom)) { + dom.remove(); + attachedGutterElements.delete(dom); + } + } + /** + * Prepares the DOM for this gutter. + */ + computeDom() { + const commit2 = chooseNewestCommit( + this.lineAuthoring, + this.startLine, + this.endLine + ); + let toBeRenderedText = commit2.isZeroCommit ? "" : this.renderNonZeroCommit(commit2); + const isTrueCommit = !commit2.isZeroCommit && this.options !== "waiting-for-result"; + if (isTrueCommit) { + conditionallyUpdateLongestRenderedGutter(this, toBeRenderedText); + } else { + toBeRenderedText = this.adaptTextForFakeCommit( + commit2, + toBeRenderedText, + this.options + ); + } + const domProvider = this.createHtmlNode( + commit2, + toBeRenderedText, + this.options === "waiting-for-result" + ); + return domProvider; + } + createHtmlNode(commit2, text2, isWaitingGutter) { + var _a2; + const templateElt = window.createDiv(); + templateElt.innerText = text2; + const { color, daysSinceCommit } = coloringBasedOnCommitAge( + (_a2 = commit2 == null ? void 0 : commit2.author) == null ? void 0 : _a2.epochSeconds, + commit2 == null ? void 0 : commit2.isZeroCommit, + this.settings + ); + templateElt.style.backgroundColor = color; + enrichCommitInfoForContextMenu(commit2, isWaitingGutter, templateElt); + function prepareForDomAttachment() { + const elt = templateElt.cloneNode(true); + attachedGutterElements.add(elt); + if (!isWaitingGutter) recordRenderedAgeInDays(daysSinceCommit); + return elt; + } + return prepareForDomAttachment; + } + renderNonZeroCommit(commit2) { + const optionalShortHash = this.settings.showCommitHash ? this.renderHash(commit2) : ""; + const optionalAuthorName = this.settings.authorDisplay === "hide" ? "" : `${this.renderAuthorName( + commit2, + this.settings.authorDisplay + )}`; + const optionalAuthoringDate = this.settings.dateTimeFormatOptions === "hide" ? "" : `${this.renderAuthoringDate( + commit2, + this.settings.dateTimeFormatOptions, + this.settings.dateTimeFormatCustomString, + this.settings.dateTimeTimezone + )}`; + const parts = [ + optionalShortHash, + optionalAuthorName, + optionalAuthoringDate + ]; + return parts.filter((x) => x.length >= 1).join(" "); + } + renderHash(nonZeroCommit) { + return nonZeroCommit.hash.substring(0, 6); + } + renderAuthorName(nonZeroCommit, authorDisplay) { + var _a2, _b, _c, _d; + const name = (_b = (_a2 = nonZeroCommit == null ? void 0 : nonZeroCommit.author) == null ? void 0 : _a2.name) != null ? _b : ""; + const words = name.split(" ").filter((word) => word.length >= 1); + let rendered; + switch (authorDisplay) { + case "initials": + rendered = words.map((word) => word[0].toUpperCase()).join(""); + break; + case "first name": + rendered = (_c = words.first()) != null ? _c : VALUE_NOT_FOUND_FALLBACK; + break; + case "last name": + rendered = (_d = words.last()) != null ? _d : VALUE_NOT_FOUND_FALLBACK; + break; + case "full": + rendered = name; + break; + default: + return impossibleBranch(authorDisplay); + } + if (!strictDeepEqual(nonZeroCommit == null ? void 0 : nonZeroCommit.author, nonZeroCommit == null ? void 0 : nonZeroCommit.committer)) { + rendered = rendered + DIFFERING_AUTHOR_COMMITTER_MARKER; + } + return rendered; + } + renderAuthoringDate(nonZeroCommit, dateTimeFormatOptions, dateTimeFormatCustomString, dateTimeTimezone) { + var _a2; + const FALLBACK_COMMIT_DATE = "?"; + if (((_a2 = nonZeroCommit == null ? void 0 : nonZeroCommit.author) == null ? void 0 : _a2.epochSeconds) === void 0) + return FALLBACK_COMMIT_DATE; + let dateTimeFormatting; + switch (dateTimeFormatOptions) { + case "date": + dateTimeFormatting = DATE_FORMAT; + break; + case "datetime": + dateTimeFormatting = DATE_TIME_FORMAT_MINUTES; + break; + case "custom": + dateTimeFormatting = dateTimeFormatCustomString; + break; + case "natural language": + dateTimeFormatting = (time) => { + const diff3 = time.diff((0, import_obsidian10.moment)()); + const addFluentSuffix = true; + return import_obsidian10.moment.duration(diff3).humanize(addFluentSuffix); + }; + break; + default: + return impossibleBranch(dateTimeFormatOptions); + } + let authoringDate = import_obsidian10.moment.unix( + nonZeroCommit.author.epochSeconds + ); + switch (dateTimeTimezone) { + case "viewer-local": + break; + case "author-local": + authoringDate = authoringDate.utcOffset( + nonZeroCommit.author.tz + ); + dateTimeFormatting += " Z"; + break; + case "utc0000": + authoringDate = authoringDate.utc(); + dateTimeFormatting += "[Z]"; + break; + default: + return impossibleBranch(dateTimeTimezone); + } + if (typeof dateTimeFormatting === "string") { + return authoringDate.format(dateTimeFormatting); + } else { + return dateTimeFormatting(authoringDate); + } + } + adaptTextForFakeCommit(commit2, toBeRenderedText, options) { + var _a2, _b, _c, _d; + const original = (_b = (_a2 = getLongestRenderedGutter()) == null ? void 0 : _a2.text) != null ? _b : toBeRenderedText; + const fillCharacter = options !== "waiting-for-result" && commit2.isZeroCommit ? NEW_CHANGE_CHARACTER : UNINTRUSIVE_CHARACTER_FOR_WAITING_RENDERING; + toBeRenderedText = original.replace( + NON_WHITESPACE_REGEXP, + fillCharacter + ); + const desiredTextLength = (_d = (_c = latestSettings.get()) == null ? void 0 : _c.gutterSpacingFallbackLength) != null ? _d : toBeRenderedText.length; + toBeRenderedText = resizeToLength( + toBeRenderedText, + desiredTextLength, + fillCharacter + ); + if (options !== "waiting-for-result" && commit2.isZeroCommit) { + const numberOfLastCharactersToKeep = Math.min( + desiredTextLength, + NEW_CHANGE_NUMBER_OF_CHARACTERS + ); + toBeRenderedText = prefixOfLengthAsWhitespace( + toBeRenderedText, + desiredTextLength - numberOfLastCharactersToKeep + ); + } + return toBeRenderedText; + } +}; +function lineAuthoringGutterMarker(la, startLine, endLine, key2, settings, options) { + const digest = import_js_sha2562.sha256.create(); + digest.update(Object.values(settings).join(",")); + digest.update(`s${startLine}-e${endLine}-k${key2}-o${options}`); + const cacheKey = digest.hex(); + const cached = gutterInstances.get(cacheKey); + if (cached) return cached; + const result = new LineAuthoringGutter( + la, + startLine, + endLine, + key2, + settings, + options + ); + gutterInstances.set(cacheKey, result); + return result; +} + +// src/lineAuthor/view/gutter/initial.ts +init_polyfill_buffer(); +var import_obsidian11 = require("obsidian"); +function initialSpacingGutter() { + var _a2, _b; + const length = (_b = (_a2 = latestSettings.get()) == null ? void 0 : _a2.gutterSpacingFallbackLength) != null ? _b : DEFAULT_SETTINGS.lineAuthor.gutterSpacingFallbackLength; + return new TextGutter(Array(length).fill("-").join("")); +} +function initialLineAuthoringGutter(settings) { + const { lineAuthoring, ageForInitialRender } = adaptiveInitialColoredWaitingLineAuthoring(settings); + return lineAuthoringGutterMarker( + lineAuthoring, + 1, + 1, + "initialGutter" + ageForInitialRender, + // use a age coloring based cache key + settings, + "waiting-for-result" + ); +} +function adaptiveInitialColoredWaitingLineAuthoring(settings) { + var _a2; + const ageForInitialRender = (_a2 = computeAdaptiveInitialColoringAgeInDays()) != null ? _a2 : maxAgeInDaysFromSettings(settings) * 0.25; + const slightlyOlderAgeForInitialRender = (0, import_obsidian11.moment)().add( + -ageForInitialRender, + "days" + ); + const dummyAuthor = { + name: "", + epochSeconds: momentToEpochSeconds(slightlyOlderAgeForInitialRender), + tz: "+0000" + }; + const dummyCommit = { + hash: "waiting-for-result", + author: dummyAuthor, + committer: dummyAuthor, + isZeroCommit: false + }; + return { + lineAuthoring: { + hashPerLine: [void 0, "waiting-for-result"], + commits: /* @__PURE__ */ new Map([["waiting-for-result", dummyCommit]]) + }, + ageForInitialRender + }; +} + +// src/lineAuthor/view/gutter/untrackedFile.ts +init_polyfill_buffer(); +function newUntrackedFileGutter(key2, settings) { + const dummyLineAuthoring = { + hashPerLine: [void 0, "000000"], + commits: /* @__PURE__ */ new Map([["000000", zeroCommit]]) + }; + return lineAuthoringGutterMarker(dummyLineAuthoring, 1, 1, key2, settings); +} + +// src/lineAuthor/view/view.ts +var UNDISPLAYED = new TextGutter(""); +var lineAuthorGutter = (0, import_view2.gutter)({ + class: "line-author-gutter-container", + markers(view) { + const lineAuthoring = view.state.field(lineAuthorState, false); + return lineAuthoringGutterMarkersRangeSet(view, lineAuthoring); + }, + lineMarkerChange(update2) { + const newLineAuthoringId = laStateDigest( + update2.state.field(lineAuthorState) + ); + const oldLineAuthoringId = laStateDigest( + update2.startState.field(lineAuthorState) + ); + return oldLineAuthoringId !== newLineAuthoringId; + }, + renderEmptyElements: true, + initialSpacer: (view) => { + temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(view); + return initialSpacingGutter(); + }, + updateSpacer: (_sp, update2) => { + var _a2, _b; + temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(update2.view); + return (_b = (_a2 = getLongestRenderedGutter()) == null ? void 0 : _a2.gutter) != null ? _b : initialSpacingGutter(); + } +}); +function lineAuthoringGutterMarkersRangeSet(view, optLA) { + const digest = laStateDigest(optLA); + const doc = view.state.doc; + const lineBlockEndPos = /* @__PURE__ */ new Map(); + for (let line = 1; line <= doc.lines; line++) { + const from = doc.line(line).from; + const to = view.lineBlockAt(from).to; + lineBlockEndPos.set(line, [from, to]); + digest.update([from, to, 0]); + } + const laSettings = latestSettings.get(); + digest.update("s" + Object.values(latestSettings).join(",")); + const cacheKey = digest.hex(); + const cached = gutterMarkersRangeSet.get(cacheKey); + if (cached) return cached; + const { result, allowCache } = computeLineAuthoringGutterMarkersRangeSet( + doc, + lineBlockEndPos, + laSettings, + optLA + ); + if (allowCache) gutterMarkersRangeSet.set(cacheKey, result); + return result; +} +function computeLineAuthoringGutterMarkersRangeSet(doc, blocksPerLine, settings, optLA) { + let allowCache = true; + const docLastLine = doc.lines; + const ranges = []; + function add2(from, to, gutter2) { + return ranges.push(gutter2.range(from, to)); + } + const lineFrom = computeLineMappingForUnsavedChanges(docLastLine, optLA); + const emptyDoc = doc.length === 0; + const lastLineIsEmpty = doc.iterLines(docLastLine, docLastLine + 1).next().value === ""; + for (let startLine = 1; startLine <= docLastLine; startLine++) { + const [from, to] = blocksPerLine.get(startLine); + const endLine = doc.lineAt(to).number; + if (emptyDoc) { + add2(from, to, UNDISPLAYED); + continue; + } + if (startLine === docLastLine && lastLineIsEmpty) { + add2(from, to, UNDISPLAYED); + continue; + } + if (optLA === void 0) { + add2(from, to, initialLineAuthoringGutter(settings)); + allowCache = false; + continue; + } + const { key: key2, la } = optLA; + if (la === "untracked") { + add2(from, to, newUntrackedFileGutter(la, settings)); + continue; + } + const lastAuthorLine = la.hashPerLine.length - 1; + const laStartLine = lineFrom[startLine]; + const laEndLine = lineFrom[endLine]; + if (laEndLine && laEndLine > lastAuthorLine) { + add2(from, to, UNDISPLAYED); + } + if (laStartLine !== void 0 && between(1, laStartLine, lastAuthorLine) && laEndLine !== void 0 && between(1, laEndLine, lastAuthorLine)) { + add2( + from, + to, + lineAuthoringGutterMarker( + la, + laStartLine, + laEndLine, + key2, + settings + ) + ); + continue; + } + if (lastAuthorLine < 1) { + add2(from, to, initialLineAuthoringGutter(settings)); + allowCache = false; + continue; + } + const start = Math.clamp(laStartLine != null ? laStartLine : startLine, 1, lastAuthorLine); + const end = Math.clamp(laEndLine != null ? laEndLine : endLine, 1, lastAuthorLine); + add2( + from, + to, + lineAuthoringGutterMarker( + la, + start, + end, + key2 + "computing", + settings, + "waiting-for-result" + ) + ); + } + return { result: import_state3.RangeSet.of( + ranges, + /* sort = */ + true + ), allowCache }; +} +function computeLineMappingForUnsavedChanges(docLastLine, optLA) { + if (!(optLA == null ? void 0 : optLA.lineOffsetsFromUnsavedChanges)) { + return Array.from(new Array(docLastLine + 1), (ln) => ln); + } + const lineFrom = [void 0]; + let cumulativeLineOffset = 0; + for (let ln = 1; ln <= docLastLine; ln++) { + const unsavedChanges = optLA.lineOffsetsFromUnsavedChanges.get(ln); + cumulativeLineOffset += unsavedChanges != null ? unsavedChanges : 0; + lineFrom[ln] = unsavedChanges === void 0 ? ln - cumulativeLineOffset : void 0; + } + return lineFrom; +} +function temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(view) { + const guttersContainers = view.dom.querySelectorAll( + ".cm-gutters" + ); + guttersContainers.forEach((cont) => { + if (!(cont == null ? void 0 : cont.style)) return; + if (!cont.style.marginLeft) { + cont.style.marginLeft = "unset"; + } + }); +} + +// src/lineAuthor/lineAuthorProvider.ts +var LineAuthorProvider = class { + constructor(plugin) { + this.plugin = plugin; + /** + * Saves all computed line authoring results. + * + * See {@link LineAuthoringId} + */ + this.lineAuthorings = /* @__PURE__ */ new Map(); + } + async trackChanged(file) { + this.trackChangedHelper(file).catch((reason) => { + console.warn("Git: Error in trackChanged." + reason); + return Promise.reject(reason); + }); + } + async trackChangedHelper(file) { + if (!file) return; + if (file.path === void 0) { + console.warn( + "Git: Attempted to track change of undefined filepath. Unforeseen situation." + ); + return; + } + this.computeLineAuthorInfo(file.path); + } + destroy() { + this.lineAuthorings.clear(); + eventsPerFilePathSingleton.clear(); + clearViewCache(); + } + async computeLineAuthorInfo(filepath) { + const gitManager = this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager; + const headRevision = await gitManager.submoduleAwareHeadRevisonInContainingDirectory( + filepath + ); + const fileHash = await gitManager.hashObject(filepath); + const key2 = lineAuthoringId(headRevision, fileHash, filepath); + if (key2 === void 0) { + return; + } + if (this.lineAuthorings.has(key2)) { + } else { + const gitAuthorResult = await gitManager.blame( + filepath, + this.plugin.settings.lineAuthor.followMovement, + this.plugin.settings.lineAuthor.ignoreWhitespace + ); + this.lineAuthorings.set(key2, gitAuthorResult); + } + this.notifyComputationResultToSubscribers(filepath, key2); + } + notifyComputationResultToSubscribers(filepath, key2) { + eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( + filepath, + async (subs) => subs.forEach( + (sub) => sub.notifyLineAuthoring(key2, this.lineAuthorings.get(key2)) + ) + ); + } +}; +var enabledLineAuthorInfoExtensions = import_state4.Prec.high([ + subscribeNewEditor, + lineAuthorState, + lineAuthorGutter +]); + +// src/lineAuthor/lineAuthorIntegration.ts +var LineAuthoringFeature = class { + constructor(plg) { + this.plg = plg; + this.codeMirrorExtensions = []; + this.handleWorkspaceLeaf = (leaf) => { + const obsView = leaf == null ? void 0 : leaf.view; + const file = obsView == null ? void 0 : obsView.file; + if (!this.lineAuthorInfoProvider) { + console.warn( + "Git: undefined lineAuthorInfoProvider. Unexpected situation." + ); + return; + } + if (file === void 0 || (obsView == null ? void 0 : obsView.allowNoFile) === true) return; + this.lineAuthorInfoProvider.trackChanged(file); + }; + } + // ========================= INIT and DE-INIT ========================== + onLoadPlugin() { + this.plg.registerEditorExtension(this.codeMirrorExtensions); + provideSettingsAccess( + () => this.plg.settings.lineAuthor, + (laSettings) => { + this.plg.settings.lineAuthor = laSettings; + this.plg.saveSettings(); + } + ); + } + conditionallyActivateBySettings() { + if (this.plg.settings.lineAuthor.show) { + this.activateFeature(); + } + } + activateFeature() { + try { + if (!this.isAvailableOnCurrentPlatform().available) return; + setTextColorCssBasedOnSetting(this.plg.settings.lineAuthor); + this.lineAuthorInfoProvider = new LineAuthorProvider(this.plg); + this.createEventHandlers(); + this.activateCodeMirrorExtensions(); + console.log(this.plg.manifest.name + ": Enabled line authoring."); + } catch (e) { + console.warn("Git: Error while loading line authoring feature.", e); + this.deactivateFeature(); + } + } + /** + * Deactivates the feature. This function is very defensive, as it is also + * called to cleanup, if a critical error in the line authoring has occurred. + */ + deactivateFeature() { + var _a2; + this.destroyEventHandlers(); + this.deactivateCodeMirrorExtensions(); + (_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.destroy(); + this.lineAuthorInfoProvider = void 0; + console.log(this.plg.manifest.name + ": Disabled line authoring."); + } + isAvailableOnCurrentPlatform() { + return { + available: this.plg.useSimpleGit && import_obsidian12.Platform.isDesktopApp, + gitManager: this.plg.gitManager instanceof SimpleGit ? this.plg.gitManager : void 0 + }; + } + // ========================= REFRESH ========================== + refreshLineAuthorViews() { + if (this.plg.settings.lineAuthor.show) { + this.deactivateFeature(); + this.activateFeature(); + } + } + // ========================= CODEMIRROR EXTENSIONS ========================== + activateCodeMirrorExtensions() { + this.codeMirrorExtensions.push(enabledLineAuthorInfoExtensions); + this.plg.app.workspace.updateOptions(); + this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf); + } + deactivateCodeMirrorExtensions() { + for (const ext of this.codeMirrorExtensions) { + this.codeMirrorExtensions.remove(ext); + } + this.plg.app.workspace.updateOptions(); + } + // ========================= HANDLERS ========================== + createEventHandlers() { + this.gutterContextMenuEvent = this.createGutterContextMenuHandler(); + this.fileOpenEvent = this.createFileOpenEvent(); + this.workspaceLeafChangeEvent = this.createWorkspaceLeafChangeEvent(); + this.fileModificationEvent = this.createVaultFileModificationHandler(); + this.refreshOnCssChangeEvent = this.createCssRefreshHandler(); + this.fileRenameEvent = this.createFileRenameEvent(); + prepareGutterSearchForContextMenuHandling(); + this.plg.registerEvent(this.gutterContextMenuEvent); + this.plg.registerEvent(this.refreshOnCssChangeEvent); + this.plg.registerEvent(this.fileOpenEvent); + this.plg.registerEvent(this.workspaceLeafChangeEvent); + this.plg.registerEvent(this.fileModificationEvent); + this.plg.registerEvent(this.fileRenameEvent); + } + destroyEventHandlers() { + this.plg.app.workspace.offref(this.refreshOnCssChangeEvent); + this.plg.app.workspace.offref(this.fileOpenEvent); + this.plg.app.workspace.offref(this.workspaceLeafChangeEvent); + this.plg.app.workspace.offref(this.refreshOnCssChangeEvent); + this.plg.app.vault.offref(this.fileRenameEvent); + this.plg.app.workspace.offref(this.gutterContextMenuEvent); + } + createFileOpenEvent() { + return this.plg.app.workspace.on( + "file-open", + (file) => { + var _a2; + return (_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(file); + } + ); + } + createWorkspaceLeafChangeEvent() { + return this.plg.app.workspace.on( + "active-leaf-change", + this.handleWorkspaceLeaf + ); + } + createFileRenameEvent() { + return this.plg.app.vault.on( + "rename", + (file, _old) => { + var _a2; + return file instanceof import_obsidian12.TFile && ((_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(file)); + } + ); + } + createVaultFileModificationHandler() { + return this.plg.app.vault.on( + "modify", + (anyPath) => { + var _a2; + return anyPath instanceof import_obsidian12.TFile && ((_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(anyPath)); + } + ); + } + createCssRefreshHandler() { + return this.plg.app.workspace.on( + "css-change", + () => this.refreshLineAuthorViews() + ); + } + createGutterContextMenuHandler() { + return this.plg.app.workspace.on("editor-menu", handleContextMenu); + } +}; + +// src/promiseQueue.ts +init_polyfill_buffer(); +var PromiseQueue = class { + constructor() { + this.tasks = []; + } + addTask(task) { + this.tasks.push(task); + if (this.tasks.length === 1) { + this.handleTask(); + } + } + async handleTask() { + if (this.tasks.length > 0) { + this.tasks[0]().finally(() => { + this.tasks.shift(); + this.handleTask(); + }); + } + } +}; + +// src/statusBar.ts +init_polyfill_buffer(); +var import_obsidian13 = require("obsidian"); +var StatusBar = class { + constructor(statusBarEl, plugin) { + this.statusBarEl = statusBarEl; + this.plugin = plugin; + this.messages = []; + this.base = "obsidian-git-statusbar-"; + this.statusBarEl.setAttribute("data-tooltip-position", "top"); + addEventListener("git-refresh", this.refreshCommitTimestamp.bind(this)); + } + displayMessage(message, timeout) { + this.messages.push({ + message: `Git: ${message.slice(0, 100)}`, + timeout + }); + this.display(); + } + display() { + if (this.messages.length > 0 && !this.currentMessage) { + this.currentMessage = this.messages.shift(); + this.statusBarEl.addClass(this.base + "message"); + this.statusBarEl.ariaLabel = ""; + this.statusBarEl.setText(this.currentMessage.message); + this.lastMessageTimestamp = Date.now(); + } else if (this.currentMessage) { + const messageAge = Date.now() - this.lastMessageTimestamp; + if (messageAge >= this.currentMessage.timeout) { + this.currentMessage = null; + this.lastMessageTimestamp = null; + } + } else { + this.displayState(); + } + } + displayState() { + if (this.statusBarEl.getText().length > 3 || !this.statusBarEl.hasChildNodes()) { + this.statusBarEl.empty(); + this.iconEl = this.statusBarEl.createDiv(); + this.textEl = this.statusBarEl.createDiv(); + this.textEl.style.float = "right"; + this.textEl.style.marginLeft = "5px"; + this.iconEl.style.float = "left"; + } + switch (this.plugin.state) { + case 0 /* idle */: + this.displayFromNow(); + break; + case 1 /* status */: + this.statusBarEl.ariaLabel = "Checking repository status..."; + (0, import_obsidian13.setIcon)(this.iconEl, "refresh-cw"); + this.statusBarEl.addClass(this.base + "status"); + break; + case 3 /* add */: + this.statusBarEl.ariaLabel = "Adding files..."; + (0, import_obsidian13.setIcon)(this.iconEl, "refresh-w"); + this.statusBarEl.addClass(this.base + "add"); + break; + case 4 /* commit */: + this.statusBarEl.ariaLabel = "Committing changes..."; + (0, import_obsidian13.setIcon)(this.iconEl, "git-commit"); + this.statusBarEl.addClass(this.base + "commit"); + break; + case 5 /* push */: + this.statusBarEl.ariaLabel = "Pushing changes..."; + (0, import_obsidian13.setIcon)(this.iconEl, "upload"); + this.statusBarEl.addClass(this.base + "push"); + break; + case 2 /* pull */: + this.statusBarEl.ariaLabel = "Pulling changes..."; + (0, import_obsidian13.setIcon)(this.iconEl, "download"); + this.statusBarEl.addClass(this.base + "pull"); + break; + case 6 /* conflicted */: + this.statusBarEl.ariaLabel = "You have conflict files..."; + (0, import_obsidian13.setIcon)(this.iconEl, "alert-circle"); + this.statusBarEl.addClass(this.base + "conflict"); + break; + default: + this.statusBarEl.ariaLabel = "Failed on initialization!"; + (0, import_obsidian13.setIcon)(this.iconEl, "alert-triangle"); + this.statusBarEl.addClass(this.base + "failed-init"); + break; + } + } + displayFromNow() { + var _a2; + const timestamp = this.lastCommitTimestamp; + if (timestamp) { + const moment6 = window.moment; + const fromNow = moment6(timestamp).fromNow(); + this.statusBarEl.ariaLabel = `${this.plugin.offlineMode ? "Offline: " : ""}Last Commit: ${fromNow}`; + if ((_a2 = this.unPushedCommits) != null ? _a2 : 0 > 0) { + this.statusBarEl.ariaLabel += ` +(${this.unPushedCommits} unpushed commits)`; + } + } else { + this.statusBarEl.ariaLabel = this.plugin.offlineMode ? "Git is offline" : "Git is ready"; + } + if (this.plugin.offlineMode) { + (0, import_obsidian13.setIcon)(this.iconEl, "globe"); + } else { + (0, import_obsidian13.setIcon)(this.iconEl, "check"); + } + if (this.plugin.settings.changedFilesInStatusBar && this.plugin.cachedStatus) { + this.textEl.setText( + this.plugin.cachedStatus.changed.length.toString() + ); + } + this.statusBarEl.addClass(this.base + "idle"); + } + async refreshCommitTimestamp() { + this.lastCommitTimestamp = await this.plugin.gitManager.getLastCommitTime(); + this.unPushedCommits = await this.plugin.gitManager.getUnpushedCommits(); + } +}; + +// src/ui/modals/changedFilesModal.ts +init_polyfill_buffer(); +var import_obsidian14 = require("obsidian"); +var ChangedFilesModal = class extends import_obsidian14.FuzzySuggestModal { + constructor(plugin, changedFiles) { + super(plugin.app); + this.plugin = plugin; + this.changedFiles = changedFiles; + this.setPlaceholder( + "Not supported files will be opened by default app!" + ); + } + getItems() { + return this.changedFiles; + } + getItemText(item) { + if (item.index == "U" && item.working_dir == "U") { + return `Untracked | ${item.vault_path}`; + } + let working_dir = ""; + let index2 = ""; + if (item.working_dir != " ") + working_dir = `Working Dir: ${item.working_dir} `; + if (item.index != " ") index2 = `Index: ${item.index}`; + return `${working_dir}${index2} | ${item.vault_path}`; + } + onChooseItem(item, _) { + if (this.plugin.app.metadataCache.getFirstLinkpathDest( + item.vault_path, + "" + ) == null) { + this.app.openWithDefaultApp(item.vault_path); + } else { + this.plugin.app.workspace.openLinkText(item.vault_path, "/"); + } + } +}; + +// src/ui/modals/customMessageModal.ts +init_polyfill_buffer(); +var import_obsidian15 = require("obsidian"); +var CustomMessageModal = class extends import_obsidian15.SuggestModal { + constructor(plugin, fromAutoBackup) { + super(plugin.app); + this.fromAutoBackup = fromAutoBackup; + this.resolve = null; + this.plugin = plugin; + this.setPlaceholder( + "Type your message and select optional the version with the added date." + ); + } + open() { + super.open(); + return new Promise((resolve2) => { + this.resolve = resolve2; + }); + } + onClose() { + if (this.resolve) this.resolve(void 0); + } + selectSuggestion(value, evt) { + if (this.resolve) this.resolve(value); + super.selectSuggestion(value, evt); + } + getSuggestions(query) { + const date = window.moment().format(this.plugin.settings.commitDateFormat); + if (query == "") query = "..."; + return [query, `${date}: ${query}`, `${query}: ${date}`]; + } + renderSuggestion(value, el) { + el.innerText = value; + } + onChooseSuggestion(item, _) { + } +}; + +// src/openInGitHub.ts +init_polyfill_buffer(); +var import_obsidian16 = require("obsidian"); +async function openLineInGitHub(editor, file, manager) { + const data = await getData(file, manager); + if (data.result === "failure") { + new import_obsidian16.Notice(data.reason); + return; + } + const { isGitHub, branch: branch2, repo, user, filePath } = data; + if (isGitHub) { + const from = editor.getCursor("from").line + 1; + const to = editor.getCursor("to").line + 1; + if (from === to) { + window.open( + `https://github.com/${user}/${repo}/blob/${branch2}/${filePath}?plain=1#L${from}` + ); + } else { + window.open( + `https://github.com/${user}/${repo}/blob/${branch2}/${filePath}?plain=1#L${from}-L${to}` + ); + } + } else { + new import_obsidian16.Notice("It seems like you are not using GitHub"); + } +} +async function openHistoryInGitHub(file, manager) { + const data = await getData(file, manager); + if (data.result === "failure") { + new import_obsidian16.Notice(data.reason); + return; + } + const { isGitHub, branch: branch2, repo, user, filePath } = data; + if (isGitHub) { + window.open( + `https://github.com/${user}/${repo}/commits/${branch2}/${filePath}` + ); + } else { + new import_obsidian16.Notice("It seems like you are not using GitHub"); + } +} +async function getData(file, manager) { + const branchInfo = await manager.branchInfo(); + let remoteBranch = branchInfo.tracking; + let branch2 = branchInfo.current; + let remoteUrl = void 0; + let filePath = manager.getRelativeRepoPath(file.path); + if (manager instanceof SimpleGit) { + const submodule = await manager.getSubmoduleOfFile( + manager.getRelativeRepoPath(file.path) + ); + if (submodule) { + filePath = submodule.relativeFilepath; + const status2 = await manager.git.cwd({ + path: submodule.submodule, + root: false + }).status(); + remoteBranch = status2.tracking || void 0; + branch2 = status2.current || void 0; + if (remoteBranch) { + const remote = remoteBranch.substring( + 0, + remoteBranch.indexOf("/") + ); + const config = await manager.git.cwd({ + path: submodule.submodule, + root: false + }).getConfig(`remote.${remote}.url`, "local"); + if (config.value != null) { + remoteUrl = config.value; + } else { + return { + result: "failure", + reason: "Failed to get remote url of submodule" + }; + } + } + } + } + if (remoteBranch == null) { + return { + result: "failure", + reason: "Remote branch is not configured" + }; + } + if (branch2 == null) { + return { + result: "failure", + reason: "Failed to get current branch name" + }; + } + if (remoteUrl == null) { + const remote = remoteBranch.substring(0, remoteBranch.indexOf("/")); + remoteUrl = await manager.getConfig(`remote.${remote}.url`); + if (remoteUrl == null) { + return { + result: "failure", + reason: "Failed to get remote url" + }; + } + } + const res = remoteUrl.match( + /(?:^https:\/\/github\.com\/(.+)\/(.+?)(?:\.git)?$)|(?:^[a-zA-Z]+@github\.com:(.+)\/(.+?)(?:\.git)?$)/ + ); + if (res == null) { + return { + result: "failure", + reason: "Could not parse remote url" + }; + } else { + const [isGitHub, httpsUser, httpsRepo, sshUser, sshRepo] = res; + return { + result: "success", + isGitHub: !!isGitHub, + repo: httpsRepo || sshRepo, + user: httpsUser || sshUser, + branch: branch2, + filePath + }; + } +} + +// src/setting/localStorageSettings.ts +init_polyfill_buffer(); +var LocalStorageSettings = class { + constructor(plugin) { + this.plugin = plugin; + this.prefix = this.plugin.manifest.id + ":"; + } + migrate() { + const keys = [ + "password", + "hostname", + "conflict", + "lastAutoPull", + "lastAutoBackup", + "lastAutoPush", + "gitPath", + "pluginDisabled" + ]; + for (const key2 of keys) { + const old = localStorage.getItem(this.prefix + key2); + if (app.loadLocalStorage(this.prefix + key2) == null && old != null) { + if (old != null) { + app.saveLocalStorage(this.prefix + key2, old); + localStorage.removeItem(this.prefix + key2); + } + } + } + } + getPassword() { + return app.loadLocalStorage(this.prefix + "password"); + } + setPassword(value) { + return app.saveLocalStorage(this.prefix + "password", value); + } + getUsername() { + return app.loadLocalStorage(this.prefix + "username"); + } + setUsername(value) { + return app.saveLocalStorage(this.prefix + "username", value); + } + getHostname() { + return app.loadLocalStorage(this.prefix + "hostname"); + } + setHostname(value) { + return app.saveLocalStorage(this.prefix + "hostname", value); + } + getConflict() { + return app.loadLocalStorage(this.prefix + "conflict") == "true"; + } + setConflict(value) { + return app.saveLocalStorage(this.prefix + "conflict", `${value}`); + } + getLastAutoPull() { + return app.loadLocalStorage(this.prefix + "lastAutoPull"); + } + setLastAutoPull(value) { + return app.saveLocalStorage(this.prefix + "lastAutoPull", value); + } + getLastAutoBackup() { + return app.loadLocalStorage(this.prefix + "lastAutoBackup"); + } + setLastAutoBackup(value) { + return app.saveLocalStorage(this.prefix + "lastAutoBackup", value); + } + getLastAutoPush() { + return app.loadLocalStorage(this.prefix + "lastAutoPush"); + } + setLastAutoPush(value) { + return app.saveLocalStorage(this.prefix + "lastAutoPush", value); + } + getGitPath() { + return app.loadLocalStorage(this.prefix + "gitPath"); + } + setGitPath(value) { + return app.saveLocalStorage(this.prefix + "gitPath", value); + } + getPATHPaths() { + var _a2, _b; + return (_b = (_a2 = app.loadLocalStorage(this.prefix + "PATHPaths")) == null ? void 0 : _a2.split(":")) != null ? _b : []; + } + setPATHPaths(value) { + return app.saveLocalStorage(this.prefix + "PATHPaths", value.join(":")); + } + getEnvVars() { + var _a2; + return JSON.parse( + (_a2 = app.loadLocalStorage(this.prefix + "envVars")) != null ? _a2 : "[]" + ); + } + setEnvVars(value) { + return app.saveLocalStorage( + this.prefix + "envVars", + JSON.stringify(value) + ); + } + getPluginDisabled() { + return app.loadLocalStorage(this.prefix + "pluginDisabled") == "true"; + } + setPluginDisabled(value) { + return app.saveLocalStorage(this.prefix + "pluginDisabled", `${value}`); + } +}; + +// src/ui/diff/diffView.ts +init_polyfill_buffer(); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/diff2html.js +init_polyfill_buffer(); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/diff-parser.js +init_polyfill_buffer(); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/types.js +init_polyfill_buffer(); +var LineType; +(function(LineType2) { + LineType2["INSERT"] = "insert"; + LineType2["DELETE"] = "delete"; + LineType2["CONTEXT"] = "context"; +})(LineType || (LineType = {})); +var OutputFormatType = { + LINE_BY_LINE: "line-by-line", + SIDE_BY_SIDE: "side-by-side" +}; +var LineMatchingType = { + LINES: "lines", + WORDS: "words", + NONE: "none" +}; +var DiffStyleType = { + WORD: "word", + CHAR: "char" +}; +var ColorSchemeType; +(function(ColorSchemeType2) { + ColorSchemeType2["AUTO"] = "auto"; + ColorSchemeType2["DARK"] = "dark"; + ColorSchemeType2["LIGHT"] = "light"; +})(ColorSchemeType || (ColorSchemeType = {})); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/utils.js +init_polyfill_buffer(); +var specials = [ + "-", + "[", + "]", + "/", + "{", + "}", + "(", + ")", + "*", + "+", + "?", + ".", + "\\", + "^", + "$", + "|" +]; +var regex = RegExp("[" + specials.join("\\") + "]", "g"); +function escapeForRegExp(str) { + return str.replace(regex, "\\$&"); +} +function unifyPath(path2) { + return path2 ? path2.replace(/\\/g, "/") : path2; +} +function hashCode(text2) { + let i, chr, len; + let hash2 = 0; + for (i = 0, len = text2.length; i < len; i++) { + chr = text2.charCodeAt(i); + hash2 = (hash2 << 5) - hash2 + chr; + hash2 |= 0; + } + return hash2; +} + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/diff-parser.js +function getExtension(filename, language) { + const filenameParts = filename.split("."); + return filenameParts.length > 1 ? filenameParts[filenameParts.length - 1] : language; +} +function startsWithAny(str, prefixes) { + return prefixes.reduce((startsWith, prefix) => startsWith || str.startsWith(prefix), false); +} +var baseDiffFilenamePrefixes = ["a/", "b/", "i/", "w/", "c/", "o/"]; +function getFilename(line, linePrefix, extraPrefix) { + const prefixes = extraPrefix !== void 0 ? [...baseDiffFilenamePrefixes, extraPrefix] : baseDiffFilenamePrefixes; + const FilenameRegExp = linePrefix ? new RegExp(`^${escapeForRegExp(linePrefix)} "?(.+?)"?$`) : new RegExp('^"?(.+?)"?$'); + const [, filename = ""] = FilenameRegExp.exec(line) || []; + const matchingPrefix = prefixes.find((p) => filename.indexOf(p) === 0); + const fnameWithoutPrefix = matchingPrefix ? filename.slice(matchingPrefix.length) : filename; + return fnameWithoutPrefix.replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/, ""); +} +function getSrcFilename(line, srcPrefix) { + return getFilename(line, "---", srcPrefix); +} +function getDstFilename(line, dstPrefix) { + return getFilename(line, "+++", dstPrefix); +} +function parse(diffInput, config = {}) { + const files = []; + let currentFile = null; + let currentBlock = null; + let oldLine = null; + let oldLine2 = null; + let newLine = null; + let possibleOldName = null; + let possibleNewName = null; + const oldFileNameHeader = "--- "; + const newFileNameHeader = "+++ "; + const hunkHeaderPrefix = "@@"; + const oldMode = /^old mode (\d{6})/; + const newMode = /^new mode (\d{6})/; + const deletedFileMode = /^deleted file mode (\d{6})/; + const newFileMode = /^new file mode (\d{6})/; + const copyFrom = /^copy from "?(.+)"?/; + const copyTo = /^copy to "?(.+)"?/; + const renameFrom = /^rename from "?(.+)"?/; + const renameTo = /^rename to "?(.+)"?/; + const similarityIndex = /^similarity index (\d+)%/; + const dissimilarityIndex = /^dissimilarity index (\d+)%/; + const index2 = /^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/; + const binaryFiles = /^Binary files (.*) and (.*) differ/; + const binaryDiff = /^GIT binary patch/; + const combinedIndex = /^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/; + const combinedMode = /^mode (\d{6}),(\d{6})\.\.(\d{6})/; + const combinedNewFile = /^new file mode (\d{6})/; + const combinedDeletedFile = /^deleted file mode (\d{6}),(\d{6})/; + const diffLines2 = diffInput.replace(/\\ No newline at end of file/g, "").replace(/\r\n?/g, "\n").split("\n"); + function saveBlock() { + if (currentBlock !== null && currentFile !== null) { + currentFile.blocks.push(currentBlock); + currentBlock = null; + } + } + function saveFile() { + if (currentFile !== null) { + if (!currentFile.oldName && possibleOldName !== null) { + currentFile.oldName = possibleOldName; + } + if (!currentFile.newName && possibleNewName !== null) { + currentFile.newName = possibleNewName; + } + if (currentFile.newName) { + files.push(currentFile); + currentFile = null; + } + } + possibleOldName = null; + possibleNewName = null; + } + function startFile() { + saveBlock(); + saveFile(); + currentFile = { + blocks: [], + deletedLines: 0, + addedLines: 0 + }; + } + function startBlock(line) { + saveBlock(); + let values; + if (currentFile !== null) { + if (values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line)) { + currentFile.isCombined = false; + oldLine = parseInt(values[1], 10); + newLine = parseInt(values[2], 10); + } else if (values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line)) { + currentFile.isCombined = true; + oldLine = parseInt(values[1], 10); + oldLine2 = parseInt(values[2], 10); + newLine = parseInt(values[3], 10); + } else { + if (line.startsWith(hunkHeaderPrefix)) { + console.error("Failed to parse lines, starting in 0!"); + } + oldLine = 0; + newLine = 0; + currentFile.isCombined = false; + } + } + currentBlock = { + lines: [], + oldStartLine: oldLine, + oldStartLine2: oldLine2, + newStartLine: newLine, + header: line + }; + } + function createLine(line) { + if (currentFile === null || currentBlock === null || oldLine === null || newLine === null) + return; + const currentLine = { + content: line + }; + const addedPrefixes = currentFile.isCombined ? ["+ ", " +", "++"] : ["+"]; + const deletedPrefixes = currentFile.isCombined ? ["- ", " -", "--"] : ["-"]; + if (startsWithAny(line, addedPrefixes)) { + currentFile.addedLines++; + currentLine.type = LineType.INSERT; + currentLine.oldNumber = void 0; + currentLine.newNumber = newLine++; + } else if (startsWithAny(line, deletedPrefixes)) { + currentFile.deletedLines++; + currentLine.type = LineType.DELETE; + currentLine.oldNumber = oldLine++; + currentLine.newNumber = void 0; + } else { + currentLine.type = LineType.CONTEXT; + currentLine.oldNumber = oldLine++; + currentLine.newNumber = newLine++; + } + currentBlock.lines.push(currentLine); + } + function existHunkHeader(line, lineIdx) { + let idx = lineIdx; + while (idx < diffLines2.length - 3) { + if (line.startsWith("diff")) { + return false; + } + if (diffLines2[idx].startsWith(oldFileNameHeader) && diffLines2[idx + 1].startsWith(newFileNameHeader) && diffLines2[idx + 2].startsWith(hunkHeaderPrefix)) { + return true; + } + idx++; + } + return false; + } + diffLines2.forEach((line, lineIndex) => { + if (!line || line.startsWith("*")) { + return; + } + let values; + const prevLine = diffLines2[lineIndex - 1]; + const nxtLine = diffLines2[lineIndex + 1]; + const afterNxtLine = diffLines2[lineIndex + 2]; + if (line.startsWith("diff --git") || line.startsWith("diff --combined")) { + startFile(); + const gitDiffStart = /^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/; + if (values = gitDiffStart.exec(line)) { + possibleOldName = getFilename(values[1], void 0, config.dstPrefix); + possibleNewName = getFilename(values[2], void 0, config.srcPrefix); + } + if (currentFile === null) { + throw new Error("Where is my file !!!"); + } + currentFile.isGitDiff = true; + return; + } + if (line.startsWith("Binary files") && !(currentFile === null || currentFile === void 0 ? void 0 : currentFile.isGitDiff)) { + startFile(); + const unixDiffBinaryStart = /^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/; + if (values = unixDiffBinaryStart.exec(line)) { + possibleOldName = getFilename(values[1], void 0, config.dstPrefix); + possibleNewName = getFilename(values[2], void 0, config.srcPrefix); + } + if (currentFile === null) { + throw new Error("Where is my file !!!"); + } + currentFile.isBinary = true; + return; + } + if (!currentFile || !currentFile.isGitDiff && currentFile && line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) && afterNxtLine.startsWith(hunkHeaderPrefix)) { + startFile(); + } + if (currentFile === null || currentFile === void 0 ? void 0 : currentFile.isTooBig) { + return; + } + if (currentFile && (typeof config.diffMaxChanges === "number" && currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges || typeof config.diffMaxLineLength === "number" && line.length > config.diffMaxLineLength)) { + currentFile.isTooBig = true; + currentFile.addedLines = 0; + currentFile.deletedLines = 0; + currentFile.blocks = []; + currentBlock = null; + const message = typeof config.diffTooBigMessage === "function" ? config.diffTooBigMessage(files.length) : "Diff too big to be displayed"; + startBlock(message); + return; + } + if (line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) || line.startsWith(newFileNameHeader) && prevLine.startsWith(oldFileNameHeader)) { + if (currentFile && !currentFile.oldName && line.startsWith("--- ") && (values = getSrcFilename(line, config.srcPrefix))) { + currentFile.oldName = values; + currentFile.language = getExtension(currentFile.oldName, currentFile.language); + return; + } + if (currentFile && !currentFile.newName && line.startsWith("+++ ") && (values = getDstFilename(line, config.dstPrefix))) { + currentFile.newName = values; + currentFile.language = getExtension(currentFile.newName, currentFile.language); + return; + } + } + if (currentFile && (line.startsWith(hunkHeaderPrefix) || currentFile.isGitDiff && currentFile.oldName && currentFile.newName && !currentBlock)) { + startBlock(line); + return; + } + if (currentBlock && (line.startsWith("+") || line.startsWith("-") || line.startsWith(" "))) { + createLine(line); + return; + } + const doesNotExistHunkHeader = !existHunkHeader(line, lineIndex); + if (currentFile === null) { + throw new Error("Where is my file !!!"); + } + if (values = oldMode.exec(line)) { + currentFile.oldMode = values[1]; + } else if (values = newMode.exec(line)) { + currentFile.newMode = values[1]; + } else if (values = deletedFileMode.exec(line)) { + currentFile.deletedFileMode = values[1]; + currentFile.isDeleted = true; + } else if (values = newFileMode.exec(line)) { + currentFile.newFileMode = values[1]; + currentFile.isNew = true; + } else if (values = copyFrom.exec(line)) { + if (doesNotExistHunkHeader) { + currentFile.oldName = values[1]; + } + currentFile.isCopy = true; + } else if (values = copyTo.exec(line)) { + if (doesNotExistHunkHeader) { + currentFile.newName = values[1]; + } + currentFile.isCopy = true; + } else if (values = renameFrom.exec(line)) { + if (doesNotExistHunkHeader) { + currentFile.oldName = values[1]; + } + currentFile.isRename = true; + } else if (values = renameTo.exec(line)) { + if (doesNotExistHunkHeader) { + currentFile.newName = values[1]; + } + currentFile.isRename = true; + } else if (values = binaryFiles.exec(line)) { + currentFile.isBinary = true; + currentFile.oldName = getFilename(values[1], void 0, config.srcPrefix); + currentFile.newName = getFilename(values[2], void 0, config.dstPrefix); + startBlock("Binary file"); + } else if (binaryDiff.test(line)) { + currentFile.isBinary = true; + startBlock(line); + } else if (values = similarityIndex.exec(line)) { + currentFile.unchangedPercentage = parseInt(values[1], 10); + } else if (values = dissimilarityIndex.exec(line)) { + currentFile.changedPercentage = parseInt(values[1], 10); + } else if (values = index2.exec(line)) { + currentFile.checksumBefore = values[1]; + currentFile.checksumAfter = values[2]; + values[3] && (currentFile.mode = values[3]); + } else if (values = combinedIndex.exec(line)) { + currentFile.checksumBefore = [values[2], values[3]]; + currentFile.checksumAfter = values[1]; + } else if (values = combinedMode.exec(line)) { + currentFile.oldMode = [values[2], values[3]]; + currentFile.newMode = values[1]; + } else if (values = combinedNewFile.exec(line)) { + currentFile.newFileMode = values[1]; + currentFile.isNew = true; + } else if (values = combinedDeletedFile.exec(line)) { + currentFile.deletedFileMode = values[1]; + currentFile.isDeleted = true; + } + }); + saveBlock(); + saveFile(); + return files; +} + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/file-list-renderer.js +init_polyfill_buffer(); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/render-utils.js +init_polyfill_buffer(); + +// node_modules/.pnpm/diff@5.1.0/node_modules/diff/lib/index.mjs +init_polyfill_buffer(); +function Diff2() { +} +Diff2.prototype = { + diff: function diff2(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var callback = options.callback; + if (typeof options === "function") { + callback = options; + options = {}; + } + this.options = options; + var self2 = this; + function done(value) { + if (callback) { + setTimeout(function() { + callback(void 0, value); + }, 0); + return true; + } else { + return value; + } + } + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + if (options.maxEditLength) { + maxEditLength = Math.min(maxEditLength, options.maxEditLength); + } + var bestPath = [{ + newPos: -1, + components: [] + }]; + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + return done([{ + value: this.join(newString), + count: newString.length + }]); + } + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + var addPath = bestPath[diagonalPath - 1], removePath = bestPath[diagonalPath + 1], _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + if (addPath) { + bestPath[diagonalPath - 1] = void 0; + } + var canAdd = addPath && addPath.newPos + 1 < newLen, canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + if (!canAdd && !canRemove) { + bestPath[diagonalPath] = void 0; + continue; + } + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self2.pushComponent(basePath.components, void 0, true); + } else { + basePath = addPath; + basePath.newPos++; + self2.pushComponent(basePath.components, true, void 0); + } + _oldPos = self2.extractCommon(basePath, newString, oldString, diagonalPath); + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues2(self2, basePath.components, newString, oldString, self2.useLongestToken)); + } else { + bestPath[diagonalPath] = basePath; + } + } + editLength++; + } + if (callback) { + (function exec() { + setTimeout(function() { + if (editLength > maxEditLength) { + return callback(); + } + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last2 = components[components.length - 1]; + if (last2 && last2.added === added && last2.removed === removed) { + components[components.length - 1] = { + count: last2.count + 1, + added, + removed + }; + } else { + components.push({ + count: 1, + added, + removed + }); + } + }, + extractCommon: function extractCommon2(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, oldLen = oldString.length, newPos = basePath.newPos, oldPos = newPos - diagonalPath, commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals2(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty2(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + return ret; + }, + castInput: function castInput2(value) { + return value; + }, + tokenize: function tokenize2(value) { + return value.split(""); + }, + join: function join4(chars) { + return chars.join(""); + } +}; +function buildValues2(diff3, components, newString, oldString, useLongestToken) { + var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function(value2, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value2.length ? oldValue : value2; + }); + component.value = diff3.join(value); + } else { + component.value = diff3.join(newString.slice(newPos, newPos + component.count)); + } + newPos += component.count; + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff3.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } + var lastComponent = components[componentLen - 1]; + if (componentLen > 1 && typeof lastComponent.value === "string" && (lastComponent.added || lastComponent.removed) && diff3.equals("", lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + return components; +} +function clonePath(path2) { + return { + newPos: path2.newPos, + components: path2.components.slice(0) + }; +} +var characterDiff2 = new Diff2(); +function diffChars(oldStr, newStr, options) { + return characterDiff2.diff(oldStr, newStr, options); +} +var extendedWordChars2 = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; +var reWhitespace2 = /\S/; +var wordDiff2 = new Diff2(); +wordDiff2.equals = function(left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + return left === right || this.options.ignoreWhitespace && !reWhitespace2.test(left) && !reWhitespace2.test(right); +}; +wordDiff2.tokenize = function(value) { + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); + for (var i = 0; i < tokens.length - 1; i++) { + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars2.test(tokens[i]) && extendedWordChars2.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + return tokens; +}; +function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff2.diff(oldStr, newStr, options); +} +var lineDiff2 = new Diff2(); +lineDiff2.tokenize = function(value) { + var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + retLines.push(line); + } + } + return retLines; +}; +var sentenceDiff2 = new Diff2(); +sentenceDiff2.tokenize = function(value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); +}; +var cssDiff2 = new Diff2(); +cssDiff2.tokenize = function(value) { + return value.split(/([{}:;,]|\s+)/); +}; +function _typeof2(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof2 = function(obj2) { + return typeof obj2; + }; + } else { + _typeof2 = function(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }; + } + return _typeof2(obj); +} +var objectPrototypeToString2 = Object.prototype.toString; +var jsonDiff2 = new Diff2(); +jsonDiff2.useLongestToken = true; +jsonDiff2.tokenize = lineDiff2.tokenize; +jsonDiff2.castInput = function(value) { + var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { + return typeof v === "undefined" ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === "string" ? value : JSON.stringify(canonicalize2(value, null, null, stringifyReplacer), stringifyReplacer, " "); +}; +jsonDiff2.equals = function(left, right) { + return Diff2.prototype.equals.call(jsonDiff2, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); +}; +function canonicalize2(obj, stack, replacementStack, replacer, key2) { + stack = stack || []; + replacementStack = replacementStack || []; + if (replacer) { + obj = replacer(key2, obj); + } + var i; + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + var canonicalizedObj; + if ("[object Array]" === objectPrototypeToString2.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize2(obj[i], stack, replacementStack, replacer, key2); + } + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + if (_typeof2(obj) === "object" && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + var sortedKeys = [], _key; + for (_key in obj) { + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + sortedKeys.sort(); + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize2(obj[_key], stack, replacementStack, replacer, _key); + } + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + return canonicalizedObj; +} +var arrayDiff2 = new Diff2(); +arrayDiff2.tokenize = function(value) { + return value.slice(); +}; +arrayDiff2.join = arrayDiff2.removeEmpty = function(value) { + return value; +}; + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/rematch.js +init_polyfill_buffer(); +function levenshtein(a, b) { + if (a.length === 0) { + return b.length; + } + if (b.length === 0) { + return a.length; + } + const matrix = []; + let i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } + let j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) === a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)); + } + } + } + return matrix[b.length][a.length]; +} +function newDistanceFn(str) { + return (x, y) => { + const xValue = str(x).trim(); + const yValue = str(y).trim(); + const lev = levenshtein(xValue, yValue); + return lev / (xValue.length + yValue.length); + }; +} +function newMatcherFn(distance2) { + function findBestMatch(a, b, cache = /* @__PURE__ */ new Map()) { + let bestMatchDist = Infinity; + let bestMatch; + for (let i = 0; i < a.length; ++i) { + for (let j = 0; j < b.length; ++j) { + const cacheKey = JSON.stringify([a[i], b[j]]); + let md; + if (!(cache.has(cacheKey) && (md = cache.get(cacheKey)))) { + md = distance2(a[i], b[j]); + cache.set(cacheKey, md); + } + if (md < bestMatchDist) { + bestMatchDist = md; + bestMatch = { indexA: i, indexB: j, score: bestMatchDist }; + } + } + } + return bestMatch; + } + function group(a, b, level = 0, cache = /* @__PURE__ */ new Map()) { + const bm = findBestMatch(a, b, cache); + if (!bm || a.length + b.length < 3) { + return [[a, b]]; + } + const a1 = a.slice(0, bm.indexA); + const b1 = b.slice(0, bm.indexB); + const aMatch = [a[bm.indexA]]; + const bMatch = [b[bm.indexB]]; + const tailA = bm.indexA + 1; + const tailB = bm.indexB + 1; + const a2 = a.slice(tailA); + const b2 = b.slice(tailB); + const group1 = group(a1, b1, level + 1, cache); + const groupMatch = group(aMatch, bMatch, level + 1, cache); + const group2 = group(a2, b2, level + 1, cache); + let result = groupMatch; + if (bm.indexA > 0 || bm.indexB > 0) { + result = group1.concat(result); + } + if (a.length > tailA || b.length > tailB) { + result = result.concat(group2); + } + return result; + } + return group; +} + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/render-utils.js +var CSSLineClass = { + INSERTS: "d2h-ins", + DELETES: "d2h-del", + CONTEXT: "d2h-cntx", + INFO: "d2h-info", + INSERT_CHANGES: "d2h-ins d2h-change", + DELETE_CHANGES: "d2h-del d2h-change" +}; +var defaultRenderConfig = { + matching: LineMatchingType.NONE, + matchWordsThreshold: 0.25, + maxLineLengthHighlight: 1e4, + diffStyle: DiffStyleType.WORD, + colorScheme: ColorSchemeType.LIGHT +}; +var separator = "/"; +var distance = newDistanceFn((change) => change.value); +var matcher = newMatcherFn(distance); +function isDevNullName(name) { + return name.indexOf("dev/null") !== -1; +} +function removeInsElements(line) { + return line.replace(/(]*>((.|\n)*?)<\/ins>)/g, ""); +} +function removeDelElements(line) { + return line.replace(/(]*>((.|\n)*?)<\/del>)/g, ""); +} +function toCSSClass(lineType) { + switch (lineType) { + case LineType.CONTEXT: + return CSSLineClass.CONTEXT; + case LineType.INSERT: + return CSSLineClass.INSERTS; + case LineType.DELETE: + return CSSLineClass.DELETES; + } +} +function colorSchemeToCss(colorScheme) { + switch (colorScheme) { + case ColorSchemeType.DARK: + return "d2h-dark-color-scheme"; + case ColorSchemeType.AUTO: + return "d2h-auto-color-scheme"; + case ColorSchemeType.LIGHT: + default: + return "d2h-light-color-scheme"; + } +} +function prefixLength(isCombined) { + return isCombined ? 2 : 1; +} +function escapeForHtml(str) { + return str.slice(0).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\//g, "/"); +} +function deconstructLine(line, isCombined, escape = true) { + const indexToSplit = prefixLength(isCombined); + return { + prefix: line.substring(0, indexToSplit), + content: escape ? escapeForHtml(line.substring(indexToSplit)) : line.substring(indexToSplit) + }; +} +function filenameDiff(file) { + const oldFilename = unifyPath(file.oldName); + const newFilename = unifyPath(file.newName); + if (oldFilename !== newFilename && !isDevNullName(oldFilename) && !isDevNullName(newFilename)) { + const prefixPaths = []; + const suffixPaths = []; + const oldFilenameParts = oldFilename.split(separator); + const newFilenameParts = newFilename.split(separator); + const oldFilenamePartsSize = oldFilenameParts.length; + const newFilenamePartsSize = newFilenameParts.length; + let i = 0; + let j = oldFilenamePartsSize - 1; + let k = newFilenamePartsSize - 1; + while (i < j && i < k) { + if (oldFilenameParts[i] === newFilenameParts[i]) { + prefixPaths.push(newFilenameParts[i]); + i += 1; + } else { + break; + } + } + while (j > i && k > i) { + if (oldFilenameParts[j] === newFilenameParts[k]) { + suffixPaths.unshift(newFilenameParts[k]); + j -= 1; + k -= 1; + } else { + break; + } + } + const finalPrefix = prefixPaths.join(separator); + const finalSuffix = suffixPaths.join(separator); + const oldRemainingPath = oldFilenameParts.slice(i, j + 1).join(separator); + const newRemainingPath = newFilenameParts.slice(i, k + 1).join(separator); + if (finalPrefix.length && finalSuffix.length) { + return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; + } else if (finalPrefix.length) { + return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}"; + } else if (finalSuffix.length) { + return "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; + } + return oldFilename + " \u2192 " + newFilename; + } else if (!isDevNullName(newFilename)) { + return newFilename; + } else { + return oldFilename; + } +} +function getHtmlId(file) { + return `d2h-${hashCode(filenameDiff(file)).toString().slice(-6)}`; +} +function getFileIcon(file) { + let templateName = "file-changed"; + if (file.isRename) { + templateName = "file-renamed"; + } else if (file.isCopy) { + templateName = "file-renamed"; + } else if (file.isNew) { + templateName = "file-added"; + } else if (file.isDeleted) { + templateName = "file-deleted"; + } else if (file.newName !== file.oldName) { + templateName = "file-renamed"; + } + return templateName; +} +function diffHighlight(diffLine1, diffLine2, isCombined, config = {}) { + const { matching, maxLineLengthHighlight, matchWordsThreshold, diffStyle } = Object.assign(Object.assign({}, defaultRenderConfig), config); + const line1 = deconstructLine(diffLine1, isCombined, false); + const line2 = deconstructLine(diffLine2, isCombined, false); + if (line1.content.length > maxLineLengthHighlight || line2.content.length > maxLineLengthHighlight) { + return { + oldLine: { + prefix: line1.prefix, + content: escapeForHtml(line1.content) + }, + newLine: { + prefix: line2.prefix, + content: escapeForHtml(line2.content) + } + }; + } + const diff3 = diffStyle === "char" ? diffChars(line1.content, line2.content) : diffWordsWithSpace(line1.content, line2.content); + const changedWords = []; + if (diffStyle === "word" && matching === "words") { + const removed = diff3.filter((element2) => element2.removed); + const added = diff3.filter((element2) => element2.added); + const chunks = matcher(added, removed); + chunks.forEach((chunk) => { + if (chunk[0].length === 1 && chunk[1].length === 1) { + const dist = distance(chunk[0][0], chunk[1][0]); + if (dist < matchWordsThreshold) { + changedWords.push(chunk[0][0]); + changedWords.push(chunk[1][0]); + } + } + }); + } + const highlightedLine = diff3.reduce((highlightedLine2, part) => { + const elemType = part.added ? "ins" : part.removed ? "del" : null; + const addClass = changedWords.indexOf(part) > -1 ? ' class="d2h-change"' : ""; + const escapedValue = escapeForHtml(part.value); + return elemType !== null ? `${highlightedLine2}<${elemType}${addClass}>${escapedValue}` : `${highlightedLine2}${escapedValue}`; + }, ""); + return { + oldLine: { + prefix: line1.prefix, + content: removeInsElements(highlightedLine) + }, + newLine: { + prefix: line2.prefix, + content: removeDelElements(highlightedLine) + } + }; +} + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/file-list-renderer.js +var baseTemplatesPath = "file-summary"; +var iconsBaseTemplatesPath = "icon"; +var defaultFileListRendererConfig = { + colorScheme: defaultRenderConfig.colorScheme +}; +var FileListRenderer = class { + constructor(hoganUtils, config = {}) { + this.hoganUtils = hoganUtils; + this.config = Object.assign(Object.assign({}, defaultFileListRendererConfig), config); + } + render(diffFiles) { + const files = diffFiles.map((file) => this.hoganUtils.render(baseTemplatesPath, "line", { + fileHtmlId: getHtmlId(file), + oldName: file.oldName, + newName: file.newName, + fileName: filenameDiff(file), + deletedLines: "-" + file.deletedLines, + addedLines: "+" + file.addedLines + }, { + fileIcon: this.hoganUtils.template(iconsBaseTemplatesPath, getFileIcon(file)) + })).join("\n"); + return this.hoganUtils.render(baseTemplatesPath, "wrapper", { + colorScheme: colorSchemeToCss(this.config.colorScheme), + filesNumber: diffFiles.length, + files + }); + } +}; + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/line-by-line-renderer.js +init_polyfill_buffer(); +var defaultLineByLineRendererConfig = Object.assign(Object.assign({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); +var genericTemplatesPath = "generic"; +var baseTemplatesPath2 = "line-by-line"; +var iconsBaseTemplatesPath2 = "icon"; +var tagsBaseTemplatesPath = "tag"; +var LineByLineRenderer = class { + constructor(hoganUtils, config = {}) { + this.hoganUtils = hoganUtils; + this.config = Object.assign(Object.assign({}, defaultLineByLineRendererConfig), config); + } + render(diffFiles) { + const diffsHtml = diffFiles.map((file) => { + let diffs; + if (file.blocks.length) { + diffs = this.generateFileHtml(file); + } else { + diffs = this.generateEmptyDiff(); + } + return this.makeFileDiffHtml(file, diffs); + }).join("\n"); + return this.hoganUtils.render(genericTemplatesPath, "wrapper", { + colorScheme: colorSchemeToCss(this.config.colorScheme), + content: diffsHtml + }); + } + makeFileDiffHtml(file, diffs) { + if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) + return ""; + const fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath2, "file-diff"); + const filePathTemplate = this.hoganUtils.template(genericTemplatesPath, "file-path"); + const fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath2, "file"); + const fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath, getFileIcon(file)); + return fileDiffTemplate.render({ + file, + fileHtmlId: getHtmlId(file), + diffs, + filePath: filePathTemplate.render({ + fileDiffName: filenameDiff(file) + }, { + fileIcon: fileIconTemplate, + fileTag: fileTagTemplate + }) + }); + } + generateEmptyDiff() { + return this.hoganUtils.render(genericTemplatesPath, "empty-diff", { + contentClass: "d2h-code-line", + CSSLineClass + }); + } + generateFileHtml(file) { + const matcher2 = newMatcherFn(newDistanceFn((e) => deconstructLine(e.content, file.isCombined).content)); + return file.blocks.map((block) => { + let lines = this.hoganUtils.render(genericTemplatesPath, "block-header", { + CSSLineClass, + blockHeader: file.isTooBig ? block.header : escapeForHtml(block.header), + lineClass: "d2h-code-linenumber", + contentClass: "d2h-code-line" + }); + this.applyLineGroupping(block).forEach(([contextLines, oldLines, newLines]) => { + if (oldLines.length && newLines.length && !contextLines.length) { + this.applyRematchMatching(oldLines, newLines, matcher2).map(([oldLines2, newLines2]) => { + const { left, right } = this.processChangedLines(file, file.isCombined, oldLines2, newLines2); + lines += left; + lines += right; + }); + } else if (contextLines.length) { + contextLines.forEach((line) => { + const { prefix, content } = deconstructLine(line.content, file.isCombined); + lines += this.generateSingleLineHtml(file, { + type: CSSLineClass.CONTEXT, + prefix, + content, + oldNumber: line.oldNumber, + newNumber: line.newNumber + }); + }); + } else if (oldLines.length || newLines.length) { + const { left, right } = this.processChangedLines(file, file.isCombined, oldLines, newLines); + lines += left; + lines += right; + } else { + console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); + } + }); + return lines; + }).join("\n"); + } + applyLineGroupping(block) { + const blockLinesGroups = []; + let oldLines = []; + let newLines = []; + for (let i = 0; i < block.lines.length; i++) { + const diffLine = block.lines[i]; + if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { + blockLinesGroups.push([[], oldLines, newLines]); + oldLines = []; + newLines = []; + } + if (diffLine.type === LineType.CONTEXT) { + blockLinesGroups.push([[diffLine], [], []]); + } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { + blockLinesGroups.push([[], [], [diffLine]]); + } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { + newLines.push(diffLine); + } else if (diffLine.type === LineType.DELETE) { + oldLines.push(diffLine); + } + } + if (oldLines.length || newLines.length) { + blockLinesGroups.push([[], oldLines, newLines]); + oldLines = []; + newLines = []; + } + return blockLinesGroups; + } + applyRematchMatching(oldLines, newLines, matcher2) { + const comparisons = oldLines.length * newLines.length; + const maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map((elem) => elem.content.length))); + const doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); + return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; + } + processChangedLines(file, isCombined, oldLines, newLines) { + const fileHtml = { + right: "", + left: "" + }; + const maxLinesNumber = Math.max(oldLines.length, newLines.length); + for (let i = 0; i < maxLinesNumber; i++) { + const oldLine = oldLines[i]; + const newLine = newLines[i]; + const diff3 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; + const preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { + prefix: diff3.oldLine.prefix, + content: diff3.oldLine.content, + type: CSSLineClass.DELETE_CHANGES + } : Object.assign(Object.assign({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { oldNumber: oldLine.oldNumber, newNumber: oldLine.newNumber }) : void 0; + const preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { + prefix: diff3.newLine.prefix, + content: diff3.newLine.content, + type: CSSLineClass.INSERT_CHANGES + } : Object.assign(Object.assign({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { oldNumber: newLine.oldNumber, newNumber: newLine.newNumber }) : void 0; + const { left, right } = this.generateLineHtml(file, preparedOldLine, preparedNewLine); + fileHtml.left += left; + fileHtml.right += right; + } + return fileHtml; + } + generateLineHtml(file, oldLine, newLine) { + return { + left: this.generateSingleLineHtml(file, oldLine), + right: this.generateSingleLineHtml(file, newLine) + }; + } + generateSingleLineHtml(file, line) { + if (line === void 0) + return ""; + const lineNumberHtml = this.hoganUtils.render(baseTemplatesPath2, "numbers", { + oldNumber: line.oldNumber || "", + newNumber: line.newNumber || "" + }); + return this.hoganUtils.render(genericTemplatesPath, "line", { + type: line.type, + lineClass: "d2h-code-linenumber", + contentClass: "d2h-code-line", + prefix: line.prefix === " " ? " " : line.prefix, + content: line.content, + lineNumber: lineNumberHtml, + line, + file + }); + } +}; + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/side-by-side-renderer.js +init_polyfill_buffer(); +var defaultSideBySideRendererConfig = Object.assign(Object.assign({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); +var genericTemplatesPath2 = "generic"; +var baseTemplatesPath3 = "side-by-side"; +var iconsBaseTemplatesPath3 = "icon"; +var tagsBaseTemplatesPath2 = "tag"; +var SideBySideRenderer = class { + constructor(hoganUtils, config = {}) { + this.hoganUtils = hoganUtils; + this.config = Object.assign(Object.assign({}, defaultSideBySideRendererConfig), config); + } + render(diffFiles) { + const diffsHtml = diffFiles.map((file) => { + let diffs; + if (file.blocks.length) { + diffs = this.generateFileHtml(file); + } else { + diffs = this.generateEmptyDiff(); + } + return this.makeFileDiffHtml(file, diffs); + }).join("\n"); + return this.hoganUtils.render(genericTemplatesPath2, "wrapper", { + colorScheme: colorSchemeToCss(this.config.colorScheme), + content: diffsHtml + }); + } + makeFileDiffHtml(file, diffs) { + if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) + return ""; + const fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath3, "file-diff"); + const filePathTemplate = this.hoganUtils.template(genericTemplatesPath2, "file-path"); + const fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath3, "file"); + const fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath2, getFileIcon(file)); + return fileDiffTemplate.render({ + file, + fileHtmlId: getHtmlId(file), + diffs, + filePath: filePathTemplate.render({ + fileDiffName: filenameDiff(file) + }, { + fileIcon: fileIconTemplate, + fileTag: fileTagTemplate + }) + }); + } + generateEmptyDiff() { + return { + right: "", + left: this.hoganUtils.render(genericTemplatesPath2, "empty-diff", { + contentClass: "d2h-code-side-line", + CSSLineClass + }) + }; + } + generateFileHtml(file) { + const matcher2 = newMatcherFn(newDistanceFn((e) => deconstructLine(e.content, file.isCombined).content)); + return file.blocks.map((block) => { + const fileHtml = { + left: this.makeHeaderHtml(block.header, file), + right: this.makeHeaderHtml("") + }; + this.applyLineGroupping(block).forEach(([contextLines, oldLines, newLines]) => { + if (oldLines.length && newLines.length && !contextLines.length) { + this.applyRematchMatching(oldLines, newLines, matcher2).map(([oldLines2, newLines2]) => { + const { left, right } = this.processChangedLines(file.isCombined, oldLines2, newLines2); + fileHtml.left += left; + fileHtml.right += right; + }); + } else if (contextLines.length) { + contextLines.forEach((line) => { + const { prefix, content } = deconstructLine(line.content, file.isCombined); + const { left, right } = this.generateLineHtml({ + type: CSSLineClass.CONTEXT, + prefix, + content, + number: line.oldNumber + }, { + type: CSSLineClass.CONTEXT, + prefix, + content, + number: line.newNumber + }); + fileHtml.left += left; + fileHtml.right += right; + }); + } else if (oldLines.length || newLines.length) { + const { left, right } = this.processChangedLines(file.isCombined, oldLines, newLines); + fileHtml.left += left; + fileHtml.right += right; + } else { + console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); + } + }); + return fileHtml; + }).reduce((accomulated, html2) => { + return { left: accomulated.left + html2.left, right: accomulated.right + html2.right }; + }, { left: "", right: "" }); + } + applyLineGroupping(block) { + const blockLinesGroups = []; + let oldLines = []; + let newLines = []; + for (let i = 0; i < block.lines.length; i++) { + const diffLine = block.lines[i]; + if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { + blockLinesGroups.push([[], oldLines, newLines]); + oldLines = []; + newLines = []; + } + if (diffLine.type === LineType.CONTEXT) { + blockLinesGroups.push([[diffLine], [], []]); + } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { + blockLinesGroups.push([[], [], [diffLine]]); + } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { + newLines.push(diffLine); + } else if (diffLine.type === LineType.DELETE) { + oldLines.push(diffLine); + } + } + if (oldLines.length || newLines.length) { + blockLinesGroups.push([[], oldLines, newLines]); + oldLines = []; + newLines = []; + } + return blockLinesGroups; + } + applyRematchMatching(oldLines, newLines, matcher2) { + const comparisons = oldLines.length * newLines.length; + const maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map((elem) => elem.content.length))); + const doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); + return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; + } + makeHeaderHtml(blockHeader, file) { + return this.hoganUtils.render(genericTemplatesPath2, "block-header", { + CSSLineClass, + blockHeader: (file === null || file === void 0 ? void 0 : file.isTooBig) ? blockHeader : escapeForHtml(blockHeader), + lineClass: "d2h-code-side-linenumber", + contentClass: "d2h-code-side-line" + }); + } + processChangedLines(isCombined, oldLines, newLines) { + const fileHtml = { + right: "", + left: "" + }; + const maxLinesNumber = Math.max(oldLines.length, newLines.length); + for (let i = 0; i < maxLinesNumber; i++) { + const oldLine = oldLines[i]; + const newLine = newLines[i]; + const diff3 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; + const preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { + prefix: diff3.oldLine.prefix, + content: diff3.oldLine.content, + type: CSSLineClass.DELETE_CHANGES + } : Object.assign(Object.assign({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { number: oldLine.oldNumber }) : void 0; + const preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { + prefix: diff3.newLine.prefix, + content: diff3.newLine.content, + type: CSSLineClass.INSERT_CHANGES + } : Object.assign(Object.assign({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { number: newLine.newNumber }) : void 0; + const { left, right } = this.generateLineHtml(preparedOldLine, preparedNewLine); + fileHtml.left += left; + fileHtml.right += right; + } + return fileHtml; + } + generateLineHtml(oldLine, newLine) { + return { + left: this.generateSingleHtml(oldLine), + right: this.generateSingleHtml(newLine) + }; + } + generateSingleHtml(line) { + const lineClass = "d2h-code-side-linenumber"; + const contentClass = "d2h-code-side-line"; + return this.hoganUtils.render(genericTemplatesPath2, "line", { + type: (line === null || line === void 0 ? void 0 : line.type) || `${CSSLineClass.CONTEXT} d2h-emptyplaceholder`, + lineClass: line !== void 0 ? lineClass : `${lineClass} d2h-code-side-emptyplaceholder`, + contentClass: line !== void 0 ? contentClass : `${contentClass} d2h-code-side-emptyplaceholder`, + prefix: (line === null || line === void 0 ? void 0 : line.prefix) === " " ? " " : line === null || line === void 0 ? void 0 : line.prefix, + content: line === null || line === void 0 ? void 0 : line.content, + lineNumber: line === null || line === void 0 ? void 0 : line.number + }); + } +}; + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/hoganjs-utils.js +init_polyfill_buffer(); +var Hogan3 = __toESM(require_hogan()); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/diff2html-templates.js +init_polyfill_buffer(); +var Hogan2 = __toESM(require_hogan()); +var defaultTemplates = {}; +defaultTemplates["file-summary-line"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('
  • '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(t.rp("'); + t.b(t.v(t.f("fileName", c, p, 0))); + t.b(""); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(' '); + t.b(t.v(t.f("addedLines", c, p, 0))); + t.b(""); + t.b("\n" + i); + t.b(' '); + t.b(t.v(t.f("deletedLines", c, p, 0))); + t.b(""); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b("
  • "); + return t.fl(); +}, partials: { "'); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(' Files changed ('); + t.b(t.v(t.f("filesNumber", c, p, 0))); + t.b(")"); + t.b("\n" + i); + t.b(' hide'); + t.b("\n" + i); + t.b(' show'); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b('
      '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("files", c, p, 0))); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b(""); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["generic-block-header"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b(""); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b('
    '); + if (t.s(t.f("blockHeader", c, p, 1), c, p, 0, 156, 173, "{{ }}")) { + t.rs(c, p, function(c2, p2, t2) { + t2.b(t2.t(t2.f("blockHeader", c2, p2, 0))); + }); + c.pop(); + } + if (!t.s(t.f("blockHeader", c, p, 1), c, p, 1, 0, 0, "")) { + t.b(" "); + } + ; + t.b("
    "); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b(""); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["generic-empty-diff"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b(""); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(" File without changes"); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b(""); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["generic-file-path"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b(''); + t.b("\n" + i); + t.b(t.rp("'); + t.b(t.v(t.f("fileDiffName", c, p, 0))); + t.b(""); + t.b("\n" + i); + t.b(t.rp(""); + t.b("\n" + i); + t.b('"); + return t.fl(); +}, partials: { ""); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("lineNumber", c, p, 0))); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + if (t.s(t.f("prefix", c, p, 1), c, p, 0, 162, 238, "{{ }}")) { + t.rs(c, p, function(c2, p2, t2) { + t2.b(' '); + t2.b(t2.t(t2.f("prefix", c2, p2, 0))); + t2.b(""); + t2.b("\n" + i); + }); + c.pop(); + } + if (!t.s(t.f("prefix", c, p, 1), c, p, 1, 0, 0, "")) { + t.b('  '); + t.b("\n" + i); + } + ; + if (t.s(t.f("content", c, p, 1), c, p, 0, 371, 445, "{{ }}")) { + t.rs(c, p, function(c2, p2, t2) { + t2.b(' '); + t2.b(t2.t(t2.f("content", c2, p2, 0))); + t2.b(""); + t2.b("\n" + i); + }); + c.pop(); + } + if (!t.s(t.f("content", c, p, 1), c, p, 1, 0, 0, "")) { + t.b('
    '); + t.b("\n" + i); + } + ; + t.b("
    "); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b(""); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["generic-wrapper"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('
    '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("content", c, p, 0))); + t.b("\n" + i); + t.b("
    "); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["icon-file-added"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('"); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["icon-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('"); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["icon-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('"); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["icon-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('"); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["icon-file"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('"); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["line-by-line-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("filePath", c, p, 0))); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("diffs", c, p, 0))); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["line-by-line-numbers"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('
    '); + t.b(t.v(t.f("oldNumber", c, p, 0))); + t.b("
    "); + t.b("\n" + i); + t.b('
    '); + t.b(t.v(t.f("newNumber", c, p, 0))); + t.b("
    "); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["side-by-side-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.f("filePath", c, p, 0))); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.d("diffs.left", c, p, 0))); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b('
    '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(' '); + t.b("\n" + i); + t.b(" "); + t.b(t.t(t.d("diffs.right", c, p, 0))); + t.b("\n" + i); + t.b(" "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + t.b("\n" + i); + t.b("
    "); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["tag-file-added"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('ADDED'); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["tag-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('CHANGED'); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["tag-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('DELETED'); + return t.fl(); +}, partials: {}, subs: {} }); +defaultTemplates["tag-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { + var t = this; + t.b(i = i || ""); + t.b('RENAMED'); + return t.fl(); +}, partials: {}, subs: {} }); + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/hoganjs-utils.js +var HoganJsUtils = class { + constructor({ compiledTemplates = {}, rawTemplates = {} }) { + const compiledRawTemplates = Object.entries(rawTemplates).reduce((previousTemplates, [name, templateString]) => { + const compiledTemplate = Hogan3.compile(templateString, { asString: false }); + return Object.assign(Object.assign({}, previousTemplates), { [name]: compiledTemplate }); + }, {}); + this.preCompiledTemplates = Object.assign(Object.assign(Object.assign({}, defaultTemplates), compiledTemplates), compiledRawTemplates); + } + static compile(templateString) { + return Hogan3.compile(templateString, { asString: false }); + } + render(namespace, view, params, partials, indent2) { + const templateKey = this.templateKey(namespace, view); + try { + const template = this.preCompiledTemplates[templateKey]; + return template.render(params, partials, indent2); + } catch (e) { + throw new Error(`Could not find template to render '${templateKey}'`); + } + } + template(namespace, view) { + return this.preCompiledTemplates[this.templateKey(namespace, view)]; + } + templateKey(namespace, view) { + return `${namespace}-${view}`; + } +}; + +// node_modules/.pnpm/diff2html@3.4.48/node_modules/diff2html/lib-esm/diff2html.js +var defaultDiff2HtmlConfig = Object.assign(Object.assign(Object.assign({}, defaultLineByLineRendererConfig), defaultSideBySideRendererConfig), { outputFormat: OutputFormatType.LINE_BY_LINE, drawFileList: true }); +function html(diffInput, configuration = {}) { + const config = Object.assign(Object.assign({}, defaultDiff2HtmlConfig), configuration); + const diffJson = typeof diffInput === "string" ? parse(diffInput, config) : diffInput; + const hoganUtils = new HoganJsUtils(config); + const { colorScheme } = config; + const fileListRendererConfig = { colorScheme }; + const fileList = config.drawFileList ? new FileListRenderer(hoganUtils, fileListRendererConfig).render(diffJson) : ""; + const diffOutput = config.outputFormat === "side-by-side" ? new SideBySideRenderer(hoganUtils, config).render(diffJson) : new LineByLineRenderer(hoganUtils, config).render(diffJson); + return fileList + diffOutput; +} + +// src/ui/diff/diffView.ts +var import_obsidian17 = require("obsidian"); +var DiffView = class extends import_obsidian17.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.plugin = plugin; + this.gettingDiff = false; + this.gitRefreshBind = this.refresh.bind(this); + this.gitViewRefreshBind = this.refresh.bind(this); + this.parser = new DOMParser(); + this.navigation = true; + addEventListener("git-refresh", this.gitRefreshBind); + addEventListener("git-view-refresh", this.gitViewRefreshBind); + } + getViewType() { + return DIFF_VIEW_CONFIG.type; + } + getDisplayText() { + var _a2; + if (((_a2 = this.state) == null ? void 0 : _a2.file) != null) { + let fileName = this.state.file.split("/").last(); + if (fileName == null ? void 0 : fileName.endsWith(".md")) fileName = fileName.slice(0, -3); + return DIFF_VIEW_CONFIG.name + ` (${fileName})`; + } + return DIFF_VIEW_CONFIG.name; + } + getIcon() { + return DIFF_VIEW_CONFIG.icon; + } + async setState(state, result) { + this.state = state; + if (import_obsidian17.Platform.isMobile) { + this.leaf.view.titleEl.textContent = this.getDisplayText(); + } + await this.refresh(); + } + getState() { + return this.state; + } + onClose() { + removeEventListener("git-refresh", this.gitRefreshBind); + removeEventListener("git-view-refresh", this.gitViewRefreshBind); + return super.onClose(); + } + onOpen() { + this.refresh(); + return super.onOpen(); + } + async refresh() { + var _a2; + if (((_a2 = this.state) == null ? void 0 : _a2.file) && !this.gettingDiff && this.plugin.gitManager) { + this.gettingDiff = true; + try { + let diff3 = await this.plugin.gitManager.getDiffString( + this.state.file, + this.state.staged, + this.state.hash + ); + this.contentEl.empty(); + if (!diff3) { + if (this.plugin.gitManager instanceof SimpleGit && await this.plugin.gitManager.isTracked( + this.state.file + )) { + diff3 = [ + `--- ${this.state.file}`, + `+++ ${this.state.file}`, + "" + ].join("\n"); + } else { + const content = await this.app.vault.adapter.read( + this.plugin.gitManager.getRelativeVaultPath( + this.state.file + ) + ); + const header = `--- /dev/null ++++ ${this.state.file} +@@ -0,0 +1,${content.split("\n").length} @@`; + diff3 = [ + ...header.split("\n"), + ...content.split("\n").map((line) => `+${line}`) + ].join("\n"); + } + } + const diffEl = this.parser.parseFromString(html(diff3), "text/html").querySelector(".d2h-file-diff"); + this.contentEl.append(diffEl); + } finally { + this.gettingDiff = false; + } + } + } +}; + +// src/ui/history/historyView.ts +init_polyfill_buffer(); +var import_obsidian21 = require("obsidian"); + +// src/ui/history/historyView.svelte +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/index.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/animations.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/utils.js +init_polyfill_buffer(); +function noop() { +} +var identity = (x) => x; +function run(fn) { + return fn(); +} +function blank_object() { + return /* @__PURE__ */ Object.create(null); +} +function run_all(fns) { + fns.forEach(run); +} +function is_function(thing) { + return typeof thing === "function"; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; +} +function is_empty(obj) { + return Object.keys(obj).length === 0; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/environment.js +init_polyfill_buffer(); +var is_client = typeof window !== "undefined"; +var now = is_client ? () => window.performance.now() : () => Date.now(); +var raf = is_client ? (cb) => requestAnimationFrame(cb) : noop; + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/loop.js +init_polyfill_buffer(); +var tasks = /* @__PURE__ */ new Set(); +function run_tasks(now2) { + tasks.forEach((task) => { + if (!task.c(now2)) { + tasks.delete(task); + task.f(); + } + }); + if (tasks.size !== 0) raf(run_tasks); +} +function loop(callback) { + let task; + if (tasks.size === 0) raf(run_tasks); + return { + promise: new Promise((fulfill) => { + tasks.add(task = { c: callback, f: fulfill }); + }), + abort() { + tasks.delete(task); + } + }; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/style_manager.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/dom.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/globals.js +init_polyfill_buffer(); +var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : ( + // @ts-ignore Node typings have this + global +); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js +var ResizeObserverSingleton = class _ResizeObserverSingleton { + /** @param {ResizeObserverOptions} options */ + constructor(options) { + /** + * @private + * @readonly + * @type {WeakMap} + */ + __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0); + /** + * @private + * @type {ResizeObserver} + */ + __publicField(this, "_observer"); + /** @type {ResizeObserverOptions} */ + __publicField(this, "options"); + this.options = options; + } + /** + * @param {Element} element + * @param {import('./private.js').Listener} listener + * @returns {() => void} + */ + observe(element2, listener) { + this._listeners.set(element2, listener); + this._getObserver().observe(element2, this.options); + return () => { + this._listeners.delete(element2); + this._observer.unobserve(element2); + }; + } + /** + * @private + */ + _getObserver() { + var _a2; + return (_a2 = this._observer) != null ? _a2 : this._observer = new ResizeObserver((entries) => { + var _a3; + for (const entry of entries) { + _ResizeObserverSingleton.entries.set(entry.target, entry); + (_a3 = this._listeners.get(entry.target)) == null ? void 0 : _a3(entry); + } + }); + } +}; +ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0; + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/dom.js +var is_hydrating = false; +function start_hydrating() { + is_hydrating = true; +} +function end_hydrating() { + is_hydrating = false; +} +function append2(target, node) { + target.appendChild(node); +} +function append_styles(target, style_sheet_id, styles) { + const append_styles_to = get_root_for_style(target); + if (!append_styles_to.getElementById(style_sheet_id)) { + const style = element("style"); + style.id = style_sheet_id; + style.textContent = styles; + append_stylesheet(append_styles_to, style); + } +} +function get_root_for_style(node) { + if (!node) return document; + const root2 = node.getRootNode ? node.getRootNode() : node.ownerDocument; + if (root2 && /** @type {ShadowRoot} */ + root2.host) { + return ( + /** @type {ShadowRoot} */ + root2 + ); + } + return node.ownerDocument; +} +function append_empty_stylesheet(node) { + const style_element = element("style"); + style_element.textContent = "/* empty */"; + append_stylesheet(get_root_for_style(node), style_element); + return style_element.sheet; +} +function append_stylesheet(node, style) { + append2( + /** @type {Document} */ + node.head || node, + style + ); + return style.sheet; +} +function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); +} +function detach(node) { + if (node.parentNode) { + node.parentNode.removeChild(node); + } +} +function destroy_each(iterations, detaching) { + for (let i = 0; i < iterations.length; i += 1) { + if (iterations[i]) iterations[i].d(detaching); + } +} +function element(name) { + return document.createElement(name); +} +function text(data) { + return document.createTextNode(data); +} +function space() { + return text(" "); +} +function empty() { + return text(""); +} +function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); +} +function stop_propagation(fn) { + return function(event) { + event.stopPropagation(); + return fn.call(this, event); + }; +} +function attr(node, attribute, value) { + if (value == null) node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); +} +function children(element2) { + return Array.from(element2.childNodes); +} +function set_data(text2, data) { + data = "" + data; + if (text2.data === data) return; + text2.data = /** @type {string} */ + data; +} +function set_input_value(input, value) { + input.value = value == null ? "" : value; +} +function set_style(node, key2, value, important) { + if (value == null) { + node.style.removeProperty(key2); + } else { + node.style.setProperty(key2, value, important ? "important" : ""); + } +} +function toggle_class(element2, name, toggle) { + element2.classList.toggle(name, !!toggle); +} +function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { + return new CustomEvent(type, { detail, bubbles, cancelable }); +} +function get_custom_elements_slots(element2) { + const result = {}; + element2.childNodes.forEach( + /** @param {Element} node */ + (node) => { + result[node.slot || "default"] = true; + } + ); + return result; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/style_manager.js +var managed_styles = /* @__PURE__ */ new Map(); +var active = 0; +function hash(str) { + let hash2 = 5381; + let i = str.length; + while (i--) hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i); + return hash2 >>> 0; +} +function create_style_information(doc, node) { + const info = { stylesheet: append_empty_stylesheet(node), rules: {} }; + managed_styles.set(doc, info); + return info; +} +function create_rule(node, a, b, duration, delay2, ease, fn, uid = 0) { + const step = 16.666 / duration; + let keyframes = "{\n"; + for (let p = 0; p <= 1; p += step) { + const t = a + (b - a) * ease(p); + keyframes += p * 100 + `%{${fn(t, 1 - t)}} +`; + } + const rule = keyframes + `100% {${fn(b, 1 - b)}} +}`; + const name = `__svelte_${hash(rule)}_${uid}`; + const doc = get_root_for_style(node); + const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node); + if (!rules[name]) { + rules[name] = true; + stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length); + } + const animation = node.style.animation || ""; + node.style.animation = `${animation ? `${animation}, ` : ""}${name} ${duration}ms linear ${delay2}ms 1 both`; + active += 1; + return name; +} +function delete_rule(node, name) { + const previous = (node.style.animation || "").split(", "); + const next = previous.filter( + name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf("__svelte") === -1 + // remove all Svelte animations + ); + const deleted = previous.length - next.length; + if (deleted) { + node.style.animation = next.join(", "); + active -= deleted; + if (!active) clear_rules(); + } +} +function clear_rules() { + raf(() => { + if (active) return; + managed_styles.forEach((info) => { + const { ownerNode } = info.stylesheet; + if (ownerNode) detach(ownerNode); + }); + managed_styles.clear(); + }); +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/await_block.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/transitions.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/scheduler.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/lifecycle.js +init_polyfill_buffer(); +var current_component; +function set_current_component(component) { + current_component = component; +} +function get_current_component() { + if (!current_component) throw new Error("Function called outside component initialization"); + return current_component; +} +function onDestroy(fn) { + get_current_component().$$.on_destroy.push(fn); +} +function bubble(component, event) { + const callbacks = component.$$.callbacks[event.type]; + if (callbacks) { + callbacks.slice().forEach((fn) => fn.call(this, event)); + } +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/scheduler.js +var dirty_components = []; +var binding_callbacks = []; +var render_callbacks = []; +var flush_callbacks = []; +var resolved_promise = /* @__PURE__ */ Promise.resolve(); +var update_scheduled = false; +function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } +} +function add_render_callback(fn) { + render_callbacks.push(fn); +} +var seen_callbacks = /* @__PURE__ */ new Set(); +var flushidx = 0; +function flush() { + if (flushidx !== 0) { + return; + } + const saved_component = current_component; + do { + try { + while (flushidx < dirty_components.length) { + const component = dirty_components[flushidx]; + flushidx++; + set_current_component(component); + update(component.$$); + } + } catch (e) { + dirty_components.length = 0; + flushidx = 0; + throw e; + } + set_current_component(null); + dirty_components.length = 0; + flushidx = 0; + while (binding_callbacks.length) binding_callbacks.pop()(); + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + seen_callbacks.clear(); + set_current_component(saved_component); +} +function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } +} +function flush_render_callbacks(fns) { + const filtered = []; + const targets = []; + render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); + targets.forEach((c) => c()); + render_callbacks = filtered; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/transitions.js +var promise; +function wait() { + if (!promise) { + promise = Promise.resolve(); + promise.then(() => { + promise = null; + }); + } + return promise; +} +function dispatch(node, direction, kind) { + node.dispatchEvent(custom_event(`${direction ? "intro" : "outro"}${kind}`)); +} +var outroing = /* @__PURE__ */ new Set(); +var outros; +function group_outros() { + outros = { + r: 0, + c: [], + p: outros + // parent group + }; +} +function check_outros() { + if (!outros.r) { + run_all(outros.c); + } + outros = outros.p; +} +function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); + } +} +function transition_out(block, local, detach2, callback) { + if (block && block.o) { + if (outroing.has(block)) return; + outroing.add(block); + outros.c.push(() => { + outroing.delete(block); + if (callback) { + if (detach2) block.d(1); + callback(); + } + }); + block.o(local); + } else if (callback) { + callback(); + } +} +var null_transition = { duration: 0 }; +function create_bidirectional_transition(node, fn, params, intro) { + const options = { direction: "both" }; + let config = fn(node, params, options); + let t = intro ? 0 : 1; + let running_program = null; + let pending_program = null; + let animation_name = null; + let original_inert_value; + function clear_animation() { + if (animation_name) delete_rule(node, animation_name); + } + function init3(program, duration) { + const d = ( + /** @type {Program['d']} */ + program.b - t + ); + duration *= Math.abs(d); + return { + a: t, + b: program.b, + d, + duration, + start: program.start, + end: program.start + duration, + group: program.group + }; + } + function go(b) { + const { + delay: delay2 = 0, + duration = 300, + easing = identity, + tick: tick2 = noop, + css + } = config || null_transition; + const program = { + start: now() + delay2, + b + }; + if (!b) { + program.group = outros; + outros.r += 1; + } + if ("inert" in node) { + if (b) { + if (original_inert_value !== void 0) { + node.inert = original_inert_value; + } + } else { + original_inert_value = /** @type {HTMLElement} */ + node.inert; + node.inert = true; + } + } + if (running_program || pending_program) { + pending_program = program; + } else { + if (css) { + clear_animation(); + animation_name = create_rule(node, t, b, duration, delay2, easing, css); + } + if (b) tick2(0, 1); + running_program = init3(program, duration); + add_render_callback(() => dispatch(node, b, "start")); + loop((now2) => { + if (pending_program && now2 > pending_program.start) { + running_program = init3(pending_program, duration); + pending_program = null; + dispatch(node, running_program.b, "start"); + if (css) { + clear_animation(); + animation_name = create_rule( + node, + t, + running_program.b, + running_program.duration, + 0, + easing, + config.css + ); + } + } + if (running_program) { + if (now2 >= running_program.end) { + tick2(t = running_program.b, 1 - t); + dispatch(node, running_program.b, "end"); + if (!pending_program) { + if (running_program.b) { + clear_animation(); + } else { + if (!--running_program.group.r) run_all(running_program.group.c); + } + } + running_program = null; + } else if (now2 >= running_program.start) { + const p = now2 - running_program.start; + t = running_program.a + running_program.d * easing(p / running_program.duration); + tick2(t, 1 - t); + } + } + return !!(running_program || pending_program); + }); + } + } + return { + run(b) { + if (is_function(config)) { + wait().then(() => { + const opts = { direction: b ? "in" : "out" }; + config = config(opts); + go(b); + }); + } else { + go(b); + } + }, + end() { + clear_animation(); + running_program = pending_program = null; + } + }; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/each.js +init_polyfill_buffer(); +function ensure_array_like(array_like_or_iterator) { + return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/spread.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/ssr.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/shared/boolean_attributes.js +init_polyfill_buffer(); +var _boolean_attributes = ( + /** @type {const} */ + [ + "allowfullscreen", + "allowpaymentrequest", + "async", + "autofocus", + "autoplay", + "checked", + "controls", + "default", + "defer", + "disabled", + "formnovalidate", + "hidden", + "inert", + "ismap", + "loop", + "multiple", + "muted", + "nomodule", + "novalidate", + "open", + "playsinline", + "readonly", + "required", + "reversed", + "selected" + ] +); +var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/shared/utils/names.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/Component.js +init_polyfill_buffer(); +function create_component(block) { + block && block.c(); +} +function mount_component(component, target, anchor) { + const { fragment, after_update } = component.$$; + fragment && fragment.m(target, anchor); + add_render_callback(() => { + const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); + if (component.$$.on_destroy) { + component.$$.on_destroy.push(...new_on_destroy); + } else { + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + after_update.forEach(add_render_callback); +} +function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + flush_render_callbacks($$.after_update); + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + $$.on_destroy = $$.fragment = null; + $$.ctx = []; + } +} +function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); + } + component.$$.dirty[i / 31 | 0] |= 1 << i % 31; +} +function init2(component, options, instance10, create_fragment10, not_equal, props, append_styles2 = null, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: [], + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false, + root: options.target || parent_component.$$.root + }; + append_styles2 && append_styles2($$.root); + let ready = false; + $$.ctx = instance10 ? instance10(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); + if (ready) make_dirty(component, i); + } + return ret; + }) : []; + $$.update(); + ready = true; + run_all($$.before_update); + $$.fragment = create_fragment10 ? create_fragment10($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + start_hydrating(); + const nodes = children(options.target); + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } else { + $$.fragment && $$.fragment.c(); + } + if (options.intro) transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor); + end_hydrating(); + flush(); + } + set_current_component(parent_component); +} +var SvelteElement; +if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + constructor($$componentCtor, $$slots, use_shadow_dom) { + super(); + /** The Svelte component constructor */ + __publicField(this, "$$ctor"); + /** Slots */ + __publicField(this, "$$s"); + /** The Svelte component instance */ + __publicField(this, "$$c"); + /** Whether or not the custom element is connected */ + __publicField(this, "$$cn", false); + /** Component props data */ + __publicField(this, "$$d", {}); + /** `true` if currently in the process of reflecting component props back to attributes */ + __publicField(this, "$$r", false); + /** @type {Record} Props definition (name, reflected, type etc) */ + __publicField(this, "$$p_d", {}); + /** @type {Record} Event listeners */ + __publicField(this, "$$l", {}); + /** @type {Map} Event listener unsubscribe functions */ + __publicField(this, "$$l_u", /* @__PURE__ */ new Map()); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (use_shadow_dom) { + this.attachShadow({ mode: "open" }); + } + } + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(name) { + return () => { + let node; + const obj = { + c: function create() { + node = element("slot"); + if (name !== "default") { + attr(node, "name", name); + } + }, + /** + * @param {HTMLElement} target + * @param {HTMLElement} [anchor] + */ + m: function mount(target, anchor) { + insert(target, node, anchor); + }, + d: function destroy(detaching) { + if (detaching) { + detach(node); + } + } + }; + return obj; + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + $$slots[name] = [create_slot(name)]; + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key2 in this.$$p_d) { + if (!(key2 in this.$$d) && this[key2] !== void 0) { + this.$$d[key2] = this[key2]; + delete this[key2]; + } + } + this.$$c = new this.$$ctor({ + target: this.shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$scope: { + ctx: [] + } + } + }); + const reflect_attributes = () => { + this.$$r = true; + for (const key2 in this.$$p_d) { + this.$$d[key2] = this.$$c.$$.ctx[this.$$c.$$.props[key2]]; + if (this.$$p_d[key2].reflect) { + const attribute_value = get_custom_element_value( + key2, + this.$$d[key2], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key2].attribute || key2); + } else { + this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); + } + } + } + this.$$r = false; + }; + this.$$c.$$.after_update.push(reflect_attributes); + reflect_attributes(); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + attributeChangedCallback(attr2, _oldValue, newValue) { + var _a2; + if (this.$$r) return; + attr2 = this.$$g_p(attr2); + this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp"); + (_a2 = this.$$c) == null ? void 0 : _a2.$set({ [attr2]: this.$$d[attr2] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$c = void 0; + } + }); + } + $$g_p(attribute_name) { + return Object.keys(this.$$p_d).find( + (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name + ) || attribute_name; + } + }; +} +function get_custom_element_value(prop, value, props_definition, transform) { + var _a2; + const type = (_a2 = props_definition[prop]) == null ? void 0 : _a2.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + case "Number": + return value != null ? +value : value; + default: + return value; + } + } +} +var SvelteComponent = class { + constructor() { + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$"); + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$set"); + } + /** @returns {void} */ + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + /** + * @template {Extract} K + * @param {K} type + * @param {((e: Events[K]) => void) | null | undefined} callback + * @returns {() => void} + */ + $on(type, callback) { + if (!is_function(callback)) { + return noop; + } + const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); + callbacks.push(callback); + return () => { + const index2 = callbacks.indexOf(callback); + if (index2 !== -1) callbacks.splice(index2, 1); + }; + } + /** + * @param {Partial} props + * @returns {void} + */ + $set(props) { + if (this.$$set && !is_empty(props)) { + this.$$.skip_bound = true; + this.$$set(props); + this.$$.skip_bound = false; + } + } +}; + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/dev.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/shared/version.js +init_polyfill_buffer(); +var PUBLIC_VERSION = "4"; + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/internal/disclose-version/index.js +init_polyfill_buffer(); +if (typeof window !== "undefined") + (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); + +// node_modules/.pnpm/tslib@2.6.3/node_modules/tslib/tslib.es6.mjs +init_polyfill_buffer(); +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +// src/ui/history/historyView.svelte +var import_obsidian20 = require("obsidian"); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/index.js +init_polyfill_buffer(); + +// src/ui/history/components/logComponent.svelte +init_polyfill_buffer(); +var import_obsidian19 = require("obsidian"); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/transition/index.js +init_polyfill_buffer(); + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/easing/index.js +init_polyfill_buffer(); +function cubicOut(t) { + const f = t - 1; + return f * f * f + 1; +} + +// node_modules/.pnpm/svelte@4.2.18/node_modules/svelte/src/runtime/transition/index.js +function slide(node, { delay: delay2 = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) { + const style = getComputedStyle(node); + const opacity = +style.opacity; + const primary_property = axis === "y" ? "height" : "width"; + const primary_property_value = parseFloat(style[primary_property]); + const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"]; + const capitalized_secondary_properties = secondary_properties.map( + (e) => `${e[0].toUpperCase()}${e.slice(1)}` + ); + const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]); + const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]); + const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]); + const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]); + const border_width_start_value = parseFloat( + style[`border${capitalized_secondary_properties[0]}Width`] + ); + const border_width_end_value = parseFloat( + style[`border${capitalized_secondary_properties[1]}Width`] + ); + return { + delay: delay2, + duration, + easing, + css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;` + }; +} + +// src/ui/history/components/logFileComponent.svelte +init_polyfill_buffer(); +var import_obsidian18 = require("obsidian"); +function add_css(target) { + append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); +} +function create_if_block(ctx) { + let div; + let mounted; + let dispose; + return { + c() { + div = element("div"); + attr(div, "data-icon", "go-to-file"); + attr(div, "aria-label", "Open File"); + attr(div, "class", "clickable-icon"); + }, + m(target, anchor) { + insert(target, div, anchor); + ctx[7](div); + if (!mounted) { + dispose = [ + listen(div, "auxclick", stop_propagation( + /*open*/ + ctx[4] + )), + listen(div, "click", stop_propagation( + /*open*/ + ctx[4] + )) + ]; + mounted = true; + } + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + ctx[7](null); + mounted = false; + run_all(dispose); + } + }; +} +function create_fragment(ctx) { + let main; + let div3; + let div0; + let t0_value = getDisplayPath( + /*diff*/ + ctx[0].vault_path + ) + ""; + let t0; + let t1; + let div2; + let div1; + let show_if = ( + /*view*/ + ctx[1].app.vault.getAbstractFileByPath( + /*diff*/ + ctx[0].vault_path + ) instanceof import_obsidian18.TFile + ); + let t2; + let span; + let t3_value = ( + /*diff*/ + ctx[0].status + "" + ); + let t3; + let span_data_type_value; + let div3_data_path_value; + let div3_aria_label_value; + let mounted; + let dispose; + let if_block = show_if && create_if_block(ctx); + return { + c() { + var _a2, _b; + main = element("main"); + div3 = element("div"); + div0 = element("div"); + t0 = text(t0_value); + t1 = space(); + div2 = element("div"); + div1 = element("div"); + if (if_block) if_block.c(); + t2 = space(); + span = element("span"); + t3 = text(t3_value); + attr(div0, "class", "tree-item-inner nav-file-title-content"); + attr(div1, "class", "buttons"); + attr(span, "class", "type"); + attr(span, "data-type", span_data_type_value = /*diff*/ + ctx[0].status); + attr(div2, "class", "git-tools"); + attr(div3, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); + attr(div3, "data-path", div3_data_path_value = /*diff*/ + ctx[0].vault_path); + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx[3] + ); + attr(div3, "aria-label", div3_aria_label_value = /*diff*/ + ctx[0].vault_path); + toggle_class( + div3, + "is-active", + /*view*/ + ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*diff*/ + ctx[0].vault_path && /*view*/ + ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) + ); + attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div3); + append2(div3, div0); + append2(div0, t0); + append2(div3, t1); + append2(div3, div2); + append2(div2, div1); + if (if_block) if_block.m(div1, null); + append2(div2, t2); + append2(div2, span); + append2(span, t3); + if (!mounted) { + dispose = [ + listen(main, "click", stop_propagation( + /*showDiff*/ + ctx[5] + )), + listen(main, "auxclick", stop_propagation( + /*auxclick_handler*/ + ctx[8] + )), + listen( + main, + "focus", + /*focus_handler*/ + ctx[6] + ) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + var _a2, _b; + if (dirty & /*diff*/ + 1 && t0_value !== (t0_value = getDisplayPath( + /*diff*/ + ctx2[0].vault_path + ) + "")) set_data(t0, t0_value); + if (dirty & /*view, diff*/ + 3) show_if = /*view*/ + ctx2[1].app.vault.getAbstractFileByPath( + /*diff*/ + ctx2[0].vault_path + ) instanceof import_obsidian18.TFile; + if (show_if) { + if (if_block) { + if_block.p(ctx2, dirty); + } else { + if_block = create_if_block(ctx2); + if_block.c(); + if_block.m(div1, null); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + if (dirty & /*diff*/ + 1 && t3_value !== (t3_value = /*diff*/ + ctx2[0].status + "")) set_data(t3, t3_value); + if (dirty & /*diff*/ + 1 && span_data_type_value !== (span_data_type_value = /*diff*/ + ctx2[0].status)) { + attr(span, "data-type", span_data_type_value); + } + if (dirty & /*diff*/ + 1 && div3_data_path_value !== (div3_data_path_value = /*diff*/ + ctx2[0].vault_path)) { + attr(div3, "data-path", div3_data_path_value); + } + if (dirty & /*side*/ + 8) { + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx2[3] + ); + } + if (dirty & /*diff*/ + 1 && div3_aria_label_value !== (div3_aria_label_value = /*diff*/ + ctx2[0].vault_path)) { + attr(div3, "aria-label", div3_aria_label_value); + } + if (dirty & /*view, diff*/ + 3) { + toggle_class( + div3, + "is-active", + /*view*/ + ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*diff*/ + ctx2[0].vault_path && /*view*/ + ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) + ); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(main); + } + if (if_block) if_block.d(); + mounted = false; + run_all(dispose); + } + }; +} +function instance($$self, $$props, $$invalidate) { + let side; + let { diff: diff3 } = $$props; + let { view } = $$props; + let buttons = []; + window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian18.setIcon)(b, b.getAttr("data-icon"))), 0); + function open(event) { + var _a2; + const file = view.app.vault.getAbstractFileByPath(diff3.vault_path); + if (file instanceof import_obsidian18.TFile) { + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); + } + } + function showDiff(event) { + var _a2; + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ + type: DIFF_VIEW_CONFIG.type, + active: true, + state: { + file: diff3.path, + staged: false, + hash: diff3.hash + } + }); + } + function focus_handler(event) { + bubble.call(this, $$self, event); + } + function div_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[0] = $$value; + $$invalidate(2, buttons); + }); + } + const auxclick_handler = (event) => mayTriggerFileMenu(view.app, event, diff3.vault_path, view.leaf, "git-history"); + $$self.$$set = ($$props2) => { + if ("diff" in $$props2) $$invalidate(0, diff3 = $$props2.diff); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 2) { + $: $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [ + diff3, + view, + buttons, + side, + open, + showDiff, + focus_handler, + div_binding, + auxclick_handler + ]; +} +var LogFileComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance, create_fragment, safe_not_equal, { diff: 0, view: 1 }, add_css); + } +}; +var logFileComponent_default = LogFileComponent; + +// src/ui/history/components/logTreeComponent.svelte +init_polyfill_buffer(); +function add_css2(target) { + append_styles(target, "svelte-1lnl15d", "main.svelte-1lnl15d .nav-folder-title-content.svelte-1lnl15d{display:flex;align-items:center}"); +} +function get_each_context(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[8] = list[i]; + return child_ctx; +} +function create_else_block(ctx) { + let div4; + let div3; + let div0; + let t0; + let div1; + let t1; + let div2; + let t2_value = ( + /*entity*/ + ctx[8].title + "" + ); + let t2; + let div3_aria_label_value; + let t3; + let t4; + let current; + let mounted; + let dispose; + function click_handler() { + return ( + /*click_handler*/ + ctx[7]( + /*entity*/ + ctx[8] + ) + ); + } + let if_block = !/*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ] && create_if_block_1(ctx); + return { + c() { + div4 = element("div"); + div3 = element("div"); + div0 = element("div"); + t0 = space(); + div1 = element("div"); + div1.innerHTML = ``; + t1 = space(); + div2 = element("div"); + t2 = text(t2_value); + t3 = space(); + if (if_block) if_block.c(); + t4 = space(); + attr(div0, "data-icon", "folder"); + set_style(div0, "padding-right", "5px"); + set_style(div0, "display", "flex"); + attr(div1, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + toggle_class( + div1, + "is-collapsed", + /*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ] + ); + attr(div2, "class", "tree-item-inner nav-folder-title-content svelte-1lnl15d"); + attr(div3, "class", "tree-item-self is-clickable nav-folder-title"); + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx[5] + ); + attr(div3, "aria-label", div3_aria_label_value = /*entity*/ + ctx[8].vaultPath); + attr(div4, "class", "tree-item nav-folder"); + toggle_class( + div4, + "is-collapsed", + /*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ] + ); + }, + m(target, anchor) { + insert(target, div4, anchor); + append2(div4, div3); + append2(div3, div0); + append2(div3, t0); + append2(div3, div1); + append2(div3, t1); + append2(div3, div2); + append2(div2, t2); + append2(div4, t3); + if (if_block) if_block.m(div4, null); + append2(div4, t4); + current = true; + if (!mounted) { + dispose = listen(div3, "click", click_handler); + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (!current || dirty & /*closed, hierarchy*/ + 17) { + toggle_class( + div1, + "is-collapsed", + /*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ] + ); + } + if ((!current || dirty & /*hierarchy*/ + 1) && t2_value !== (t2_value = /*entity*/ + ctx[8].title + "")) set_data(t2, t2_value); + if (!current || dirty & /*side*/ + 32) { + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx[5] + ); + } + if (!current || dirty & /*hierarchy*/ + 1 && div3_aria_label_value !== (div3_aria_label_value = /*entity*/ + ctx[8].vaultPath)) { + attr(div3, "aria-label", div3_aria_label_value); + } + if (!/*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ]) { + if (if_block) { + if_block.p(ctx, dirty); + if (dirty & /*closed, hierarchy*/ + 17) { + transition_in(if_block, 1); + } + } else { + if_block = create_if_block_1(ctx); + if_block.c(); + transition_in(if_block, 1); + if_block.m(div4, t4); + } + } else if (if_block) { + group_outros(); + transition_out(if_block, 1, 1, () => { + if_block = null; + }); + check_outros(); + } + if (!current || dirty & /*closed, hierarchy*/ + 17) { + toggle_class( + div4, + "is-collapsed", + /*closed*/ + ctx[4][ + /*entity*/ + ctx[8].title + ] + ); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div4); + } + if (if_block) if_block.d(); + mounted = false; + dispose(); + } + }; +} +function create_if_block2(ctx) { + let div; + let logfilecomponent; + let t; + let current; + logfilecomponent = new logFileComponent_default({ + props: { + diff: ( + /*entity*/ + ctx[8].data + ), + view: ( + /*view*/ + ctx[2] + ) + } + }); + return { + c() { + div = element("div"); + create_component(logfilecomponent.$$.fragment); + t = space(); + }, + m(target, anchor) { + insert(target, div, anchor); + mount_component(logfilecomponent, div, null); + append2(div, t); + current = true; + }, + p(ctx2, dirty) { + const logfilecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) logfilecomponent_changes.diff = /*entity*/ + ctx2[8].data; + if (dirty & /*view*/ + 4) logfilecomponent_changes.view = /*view*/ + ctx2[2]; + logfilecomponent.$set(logfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(logfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(logfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + destroy_component(logfilecomponent); + } + }; +} +function create_if_block_1(ctx) { + let div; + let logtreecomponent; + let div_transition; + let current; + logtreecomponent = new LogTreeComponent({ + props: { + hierarchy: ( + /*entity*/ + ctx[8] + ), + plugin: ( + /*plugin*/ + ctx[1] + ), + view: ( + /*view*/ + ctx[2] + ) + } + }); + return { + c() { + div = element("div"); + create_component(logtreecomponent.$$.fragment); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + mount_component(logtreecomponent, div, null); + current = true; + }, + p(ctx2, dirty) { + const logtreecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) logtreecomponent_changes.hierarchy = /*entity*/ + ctx2[8]; + if (dirty & /*plugin*/ + 2) logtreecomponent_changes.plugin = /*plugin*/ + ctx2[1]; + if (dirty & /*view*/ + 4) logtreecomponent_changes.view = /*view*/ + ctx2[2]; + logtreecomponent.$set(logtreecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(logtreecomponent.$$.fragment, local); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(logtreecomponent.$$.fragment, local); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + destroy_component(logtreecomponent); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_each_block(ctx) { + let current_block_type_index; + let if_block; + let if_block_anchor; + let current; + const if_block_creators = [create_if_block2, create_else_block]; + const if_blocks = []; + function select_block_type(ctx2, dirty) { + if ( + /*entity*/ + ctx2[8].data + ) return 0; + return 1; + } + current_block_type_index = select_block_type(ctx, -1); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + if_block.c(); + if_block_anchor = empty(); + }, + m(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(if_block_anchor); + } + if_blocks[current_block_type_index].d(detaching); + } + }; +} +function create_fragment2(ctx) { + let main; + let current; + let each_value = ensure_array_like( + /*hierarchy*/ + ctx[0].children + ); + let each_blocks = []; + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + main = element("main"); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + attr(main, "class", "svelte-1lnl15d"); + toggle_class( + main, + "topLevel", + /*topLevel*/ + ctx[3] + ); + }, + m(target, anchor) { + insert(target, main, anchor); + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(main, null); + } + } + current = true; + }, + p(ctx2, [dirty]) { + if (dirty & /*hierarchy, view, closed, plugin, side, fold*/ + 119) { + each_value = ensure_array_like( + /*hierarchy*/ + ctx2[0].children + ); + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context(ctx2, each_value, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(main, null); + } + } + group_outros(); + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + if (!current || dirty & /*topLevel*/ + 8) { + toggle_class( + main, + "topLevel", + /*topLevel*/ + ctx2[3] + ); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(main); + } + destroy_each(each_blocks, detaching); + } + }; +} +function instance2($$self, $$props, $$invalidate) { + let side; + let { hierarchy } = $$props; + let { plugin } = $$props; + let { view } = $$props; + let { topLevel = false } = $$props; + const closed = {}; + function fold(item) { + $$invalidate(4, closed[item.title] = !closed[item.title], closed); + } + const click_handler = (entity) => fold(entity); + $$self.$$set = ($$props2) => { + if ("hierarchy" in $$props2) $$invalidate(0, hierarchy = $$props2.hierarchy); + if ("plugin" in $$props2) $$invalidate(1, plugin = $$props2.plugin); + if ("view" in $$props2) $$invalidate(2, view = $$props2.view); + if ("topLevel" in $$props2) $$invalidate(3, topLevel = $$props2.topLevel); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 4) { + $: $$invalidate(5, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [hierarchy, plugin, view, topLevel, closed, side, fold, click_handler]; +} +var LogTreeComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2( + this, + options, + instance2, + create_fragment2, + safe_not_equal, + { + hierarchy: 0, + plugin: 1, + view: 2, + topLevel: 3 + }, + add_css2 + ); + } +}; +var logTreeComponent_default = LogTreeComponent; + +// src/ui/history/components/logComponent.svelte +function get_each_context2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[9] = list[i]; + return child_ctx; +} +function create_if_block_4(ctx) { + let div; + let t_value = ( + /*log*/ + ctx[0].refs.join(", ") + "" + ); + let t; + return { + c() { + div = element("div"); + t = text(t_value); + attr(div, "class", "git-ref"); + }, + m(target, anchor) { + insert(target, div, anchor); + append2(div, t); + }, + p(ctx2, dirty) { + if (dirty & /*log*/ + 1 && t_value !== (t_value = /*log*/ + ctx2[0].refs.join(", ") + "")) set_data(t, t_value); + }, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_if_block_3(ctx) { + let div; + let t_value = ( + /*authorToString*/ + ctx[7]( + /*log*/ + ctx[0] + ) + "" + ); + let t; + return { + c() { + div = element("div"); + t = text(t_value); + attr(div, "class", "git-author"); + }, + m(target, anchor) { + insert(target, div, anchor); + append2(div, t); + }, + p(ctx2, dirty) { + if (dirty & /*log*/ + 1 && t_value !== (t_value = /*authorToString*/ + ctx2[7]( + /*log*/ + ctx2[0] + ) + "")) set_data(t, t_value); + }, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_if_block_2(ctx) { + let div; + let t_value = (0, import_obsidian19.moment)( + /*log*/ + ctx[0].date + ).format( + /*plugin*/ + ctx[3].settings.commitDateFormat + ) + ""; + let t; + return { + c() { + div = element("div"); + t = text(t_value); + attr(div, "class", "git-date"); + }, + m(target, anchor) { + insert(target, div, anchor); + append2(div, t); + }, + p(ctx2, dirty) { + if (dirty & /*log, plugin*/ + 9 && t_value !== (t_value = (0, import_obsidian19.moment)( + /*log*/ + ctx2[0].date + ).format( + /*plugin*/ + ctx2[3].settings.commitDateFormat + ) + "")) set_data(t, t_value); + }, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_if_block3(ctx) { + let div; + let current_block_type_index; + let if_block; + let div_transition; + let current; + const if_block_creators = [create_if_block_12, create_else_block2]; + const if_blocks = []; + function select_block_type(ctx2, dirty) { + if ( + /*showTree*/ + ctx2[2] + ) return 0; + return 1; + } + current_block_type_index = select_block_type(ctx, -1); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + div = element("div"); + if_block.c(); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + if_blocks[current_block_type_index].m(div, null); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div, null); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + if_blocks[current_block_type_index].d(); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_else_block2(ctx) { + let each_1_anchor; + let current; + let each_value = ensure_array_like( + /*log*/ + ctx[0].diff.files + ); + let each_blocks = []; + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block2(get_each_context2(ctx, each_value, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + each_1_anchor = empty(); + }, + m(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(target, anchor); + } + } + insert(target, each_1_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + if (dirty & /*view, log*/ + 3) { + each_value = ensure_array_like( + /*log*/ + ctx2[0].diff.files + ); + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context2(ctx2, each_value, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block2(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); + } + } + group_outros(); + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(each_1_anchor); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_if_block_12(ctx) { + let logtreecomponent; + let current; + logtreecomponent = new logTreeComponent_default({ + props: { + hierarchy: ( + /*logsHierarchy*/ + ctx[6] + ), + plugin: ( + /*plugin*/ + ctx[3] + ), + view: ( + /*view*/ + ctx[1] + ), + topLevel: true + } + }); + return { + c() { + create_component(logtreecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(logtreecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const logtreecomponent_changes = {}; + if (dirty & /*logsHierarchy*/ + 64) logtreecomponent_changes.hierarchy = /*logsHierarchy*/ + ctx2[6]; + if (dirty & /*plugin*/ + 8) logtreecomponent_changes.plugin = /*plugin*/ + ctx2[3]; + if (dirty & /*view*/ + 2) logtreecomponent_changes.view = /*view*/ + ctx2[1]; + logtreecomponent.$set(logtreecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(logtreecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(logtreecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(logtreecomponent, detaching); + } + }; +} +function create_each_block2(ctx) { + let logfilecomponent; + let current; + logfilecomponent = new logFileComponent_default({ + props: { + view: ( + /*view*/ + ctx[1] + ), + diff: ( + /*file*/ + ctx[9] + ) + } + }); + return { + c() { + create_component(logfilecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(logfilecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const logfilecomponent_changes = {}; + if (dirty & /*view*/ + 2) logfilecomponent_changes.view = /*view*/ + ctx2[1]; + if (dirty & /*log*/ + 1) logfilecomponent_changes.diff = /*file*/ + ctx2[9]; + logfilecomponent.$set(logfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(logfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(logfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(logfilecomponent, detaching); + } + }; +} +function create_fragment3(ctx) { + var _a2; + let main; + let div4; + let div3; + let div0; + let t0; + let div2; + let t1; + let t2; + let t3; + let div1; + let t4_value = ( + /*log*/ + ctx[0].message + "" + ); + let t4; + let div3_aria_label_value; + let t5; + let current; + let mounted; + let dispose; + let if_block0 = ( + /*log*/ + ctx[0].refs.length > 0 && create_if_block_4(ctx) + ); + let if_block1 = ( + /*plugin*/ + ctx[3].settings.authorInHistoryView != "hide" && /*log*/ + ((_a2 = ctx[0].author) == null ? void 0 : _a2.name) && create_if_block_3(ctx) + ); + let if_block2 = ( + /*plugin*/ + ctx[3].settings.dateInHistoryView && create_if_block_2(ctx) + ); + let if_block3 = !/*isCollapsed*/ + ctx[4] && create_if_block3(ctx); + return { + c() { + var _a3; + main = element("main"); + div4 = element("div"); + div3 = element("div"); + div0 = element("div"); + div0.innerHTML = ``; + t0 = space(); + div2 = element("div"); + if (if_block0) if_block0.c(); + t1 = space(); + if (if_block1) if_block1.c(); + t2 = space(); + if (if_block2) if_block2.c(); + t3 = space(); + div1 = element("div"); + t4 = text(t4_value); + t5 = space(); + if (if_block3) if_block3.c(); + attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + toggle_class( + div0, + "is-collapsed", + /*isCollapsed*/ + ctx[4] + ); + attr(div1, "class", "tree-item-inner nav-folder-title-content"); + attr(div3, "class", "tree-item-self is-clickable nav-folder-title"); + attr(div3, "aria-label", div3_aria_label_value = `${/*log*/ + ctx[0].refs.length > 0 ? ( + /*log*/ + ctx[0].refs.join(", ") + "\n" + ) : ""}${/*log*/ + (_a3 = ctx[0].author) == null ? void 0 : _a3.name} +${(0, import_obsidian19.moment)( + /*log*/ + ctx[0].date + ).format( + /*plugin*/ + ctx[3].settings.commitDateFormat + )} +${/*log*/ + ctx[0].message}`); + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx[5] + ); + attr(div4, "class", "tree-item nav-folder"); + toggle_class( + div4, + "is-collapsed", + /*isCollapsed*/ + ctx[4] + ); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div4); + append2(div4, div3); + append2(div3, div0); + append2(div3, t0); + append2(div3, div2); + if (if_block0) if_block0.m(div2, null); + append2(div2, t1); + if (if_block1) if_block1.m(div2, null); + append2(div2, t2); + if (if_block2) if_block2.m(div2, null); + append2(div2, t3); + append2(div2, div1); + append2(div1, t4); + append2(div4, t5); + if (if_block3) if_block3.m(div4, null); + current = true; + if (!mounted) { + dispose = listen( + div3, + "click", + /*click_handler*/ + ctx[8] + ); + mounted = true; + } + }, + p(ctx2, [dirty]) { + var _a3, _b; + if (!current || dirty & /*isCollapsed*/ + 16) { + toggle_class( + div0, + "is-collapsed", + /*isCollapsed*/ + ctx2[4] + ); + } + if ( + /*log*/ + ctx2[0].refs.length > 0 + ) { + if (if_block0) { + if_block0.p(ctx2, dirty); + } else { + if_block0 = create_if_block_4(ctx2); + if_block0.c(); + if_block0.m(div2, t1); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + if ( + /*plugin*/ + ctx2[3].settings.authorInHistoryView != "hide" && /*log*/ + ((_a3 = ctx2[0].author) == null ? void 0 : _a3.name) + ) { + if (if_block1) { + if_block1.p(ctx2, dirty); + } else { + if_block1 = create_if_block_3(ctx2); + if_block1.c(); + if_block1.m(div2, t2); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + if ( + /*plugin*/ + ctx2[3].settings.dateInHistoryView + ) { + if (if_block2) { + if_block2.p(ctx2, dirty); + } else { + if_block2 = create_if_block_2(ctx2); + if_block2.c(); + if_block2.m(div2, t3); + } + } else if (if_block2) { + if_block2.d(1); + if_block2 = null; + } + if ((!current || dirty & /*log*/ + 1) && t4_value !== (t4_value = /*log*/ + ctx2[0].message + "")) set_data(t4, t4_value); + if (!current || dirty & /*log, plugin*/ + 9 && div3_aria_label_value !== (div3_aria_label_value = `${/*log*/ + ctx2[0].refs.length > 0 ? ( + /*log*/ + ctx2[0].refs.join(", ") + "\n" + ) : ""}${/*log*/ + (_b = ctx2[0].author) == null ? void 0 : _b.name} +${(0, import_obsidian19.moment)( + /*log*/ + ctx2[0].date + ).format( + /*plugin*/ + ctx2[3].settings.commitDateFormat + )} +${/*log*/ + ctx2[0].message}`)) { + attr(div3, "aria-label", div3_aria_label_value); + } + if (!current || dirty & /*side*/ + 32) { + attr( + div3, + "data-tooltip-position", + /*side*/ + ctx2[5] + ); + } + if (!/*isCollapsed*/ + ctx2[4]) { + if (if_block3) { + if_block3.p(ctx2, dirty); + if (dirty & /*isCollapsed*/ + 16) { + transition_in(if_block3, 1); + } + } else { + if_block3 = create_if_block3(ctx2); + if_block3.c(); + transition_in(if_block3, 1); + if_block3.m(div4, null); + } + } else if (if_block3) { + group_outros(); + transition_out(if_block3, 1, 1, () => { + if_block3 = null; + }); + check_outros(); + } + if (!current || dirty & /*isCollapsed*/ + 16) { + toggle_class( + div4, + "is-collapsed", + /*isCollapsed*/ + ctx2[4] + ); + } + }, + i(local) { + if (current) return; + transition_in(if_block3); + current = true; + }, + o(local) { + transition_out(if_block3); + current = false; + }, + d(detaching) { + if (detaching) { + detach(main); + } + if (if_block0) if_block0.d(); + if (if_block1) if_block1.d(); + if (if_block2) if_block2.d(); + if (if_block3) if_block3.d(); + mounted = false; + dispose(); + } + }; +} +function instance3($$self, $$props, $$invalidate) { + let logsHierarchy; + let side; + let { log: log2 } = $$props; + let { view } = $$props; + let { showTree } = $$props; + let { plugin } = $$props; + let isCollapsed = true; + function authorToString(log3) { + const name = log3.author.name; + if (plugin.settings.authorInHistoryView == "full") { + return name; + } else if (plugin.settings.authorInHistoryView == "initials") { + const words = name.split(" ").filter((word) => word.length > 0); + return words.map((word) => word[0].toUpperCase()).join(""); + } + } + const click_handler = () => $$invalidate(4, isCollapsed = !isCollapsed); + $$self.$$set = ($$props2) => { + if ("log" in $$props2) $$invalidate(0, log2 = $$props2.log); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + if ("showTree" in $$props2) $$invalidate(2, showTree = $$props2.showTree); + if ("plugin" in $$props2) $$invalidate(3, plugin = $$props2.plugin); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*plugin, log*/ + 9) { + $: $$invalidate(6, logsHierarchy = { + title: "", + path: "", + vaultPath: "", + children: plugin.gitManager.getTreeStructure(log2.diff.files) + }); + } + if ($$self.$$.dirty & /*view*/ + 2) { + $: $$invalidate(5, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [ + log2, + view, + showTree, + plugin, + isCollapsed, + side, + logsHierarchy, + authorToString, + click_handler + ]; +} +var LogComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance3, create_fragment3, safe_not_equal, { log: 0, view: 1, showTree: 2, plugin: 3 }); + } +}; +var logComponent_default = LogComponent; + +// src/ui/history/historyView.svelte +function get_each_context3(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[11] = list[i]; + return child_ctx; +} +function create_if_block4(ctx) { + let div1; + let div0; + let current; + let each_value = ensure_array_like( + /*logs*/ + ctx[6] + ); + let each_blocks = []; + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block3(get_each_context3(ctx, each_value, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + div1 = element("div"); + div0 = element("div"); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + attr(div0, "class", "tree-item-children nav-folder-children"); + attr(div1, "class", "tree-item nav-folder mod-root"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append2(div1, div0); + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(div0, null); + } + } + current = true; + }, + p(ctx2, dirty) { + if (dirty & /*view, showTree, logs, plugin*/ + 71) { + each_value = ensure_array_like( + /*logs*/ + ctx2[6] + ); + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context3(ctx2, each_value, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block3(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(div0, null); + } + } + group_outros(); + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div1); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_each_block3(ctx) { + let logcomponent; + let current; + logcomponent = new logComponent_default({ + props: { + view: ( + /*view*/ + ctx[1] + ), + showTree: ( + /*showTree*/ + ctx[2] + ), + log: ( + /*log*/ + ctx[11] + ), + plugin: ( + /*plugin*/ + ctx[0] + ) + } + }); + return { + c() { + create_component(logcomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(logcomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const logcomponent_changes = {}; + if (dirty & /*view*/ + 2) logcomponent_changes.view = /*view*/ + ctx2[1]; + if (dirty & /*showTree*/ + 4) logcomponent_changes.showTree = /*showTree*/ + ctx2[2]; + if (dirty & /*logs*/ + 64) logcomponent_changes.log = /*log*/ + ctx2[11]; + if (dirty & /*plugin*/ + 1) logcomponent_changes.plugin = /*plugin*/ + ctx2[0]; + logcomponent.$set(logcomponent_changes); + }, + i(local) { + if (current) return; + transition_in(logcomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(logcomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(logcomponent, detaching); + } + }; +} +function create_fragment4(ctx) { + let main; + let div3; + let div2; + let div0; + let t0; + let div1; + let t1; + let div4; + let current; + let mounted; + let dispose; + let if_block = ( + /*logs*/ + ctx[6] && create_if_block4(ctx) + ); + return { + c() { + main = element("main"); + div3 = element("div"); + div2 = element("div"); + div0 = element("div"); + t0 = space(); + div1 = element("div"); + t1 = space(); + div4 = element("div"); + if (if_block) if_block.c(); + attr(div0, "id", "layoutChange"); + attr(div0, "class", "clickable-icon nav-action-button"); + attr(div0, "aria-label", "Change Layout"); + attr(div1, "id", "refresh"); + attr(div1, "class", "clickable-icon nav-action-button"); + attr(div1, "data-icon", "refresh-cw"); + attr(div1, "aria-label", "Refresh"); + set_style(div1, "margin", "1px"); + toggle_class( + div1, + "loading", + /*loading*/ + ctx[4] + ); + attr(div2, "class", "nav-buttons-container"); + attr(div3, "class", "nav-header"); + attr(div4, "class", "nav-files-container"); + set_style(div4, "position", "relative"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div3); + append2(div3, div2); + append2(div2, div0); + ctx[7](div0); + append2(div2, t0); + append2(div2, div1); + ctx[9](div1); + append2(main, t1); + append2(main, div4); + if (if_block) if_block.m(div4, null); + current = true; + if (!mounted) { + dispose = [ + listen( + div0, + "click", + /*click_handler*/ + ctx[8] + ), + listen(div1, "click", triggerRefresh) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + if (!current || dirty & /*loading*/ + 16) { + toggle_class( + div1, + "loading", + /*loading*/ + ctx2[4] + ); + } + if ( + /*logs*/ + ctx2[6] + ) { + if (if_block) { + if_block.p(ctx2, dirty); + if (dirty & /*logs*/ + 64) { + transition_in(if_block, 1); + } + } else { + if_block = create_if_block4(ctx2); + if_block.c(); + transition_in(if_block, 1); + if_block.m(div4, null); + } + } else if (if_block) { + group_outros(); + transition_out(if_block, 1, 1, () => { + if_block = null; + }); + check_outros(); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(main); + } + ctx[7](null); + ctx[9](null); + if (if_block) if_block.d(); + mounted = false; + run_all(dispose); + } + }; +} +function triggerRefresh() { + dispatchEvent(new CustomEvent("git-refresh")); +} +function instance4($$self, $$props, $$invalidate) { + let { plugin } = $$props; + let { view } = $$props; + let loading; + let buttons = []; + let logs; + let showTree = plugin.settings.treeStructure; + let layoutBtn; + addEventListener("git-view-refresh", refresh); + plugin.app.workspace.onLayoutReady(() => { + window.setTimeout( + () => { + buttons.forEach((btn) => (0, import_obsidian20.setIcon)(btn, btn.getAttr("data-icon"))); + (0, import_obsidian20.setIcon)(layoutBtn, showTree ? "list" : "folder"); + }, + 0 + ); + }); + onDestroy(() => { + removeEventListener("git-view-refresh", refresh); + }); + function refresh() { + return __awaiter(this, void 0, void 0, function* () { + $$invalidate(4, loading = true); + const isSimpleGit = plugin.gitManager instanceof SimpleGit; + $$invalidate(6, logs = yield plugin.gitManager.log(void 0, false, isSimpleGit ? 50 : 10)); + $$invalidate(4, loading = false); + }); + } + function div0_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + layoutBtn = $$value; + $$invalidate(3, layoutBtn); + }); + } + const click_handler = () => { + $$invalidate(2, showTree = !showTree); + $$invalidate(0, plugin.settings.treeStructure = showTree, plugin); + plugin.saveSettings(); + }; + function div1_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[6] = $$value; + $$invalidate(5, buttons); + }); + } + $$self.$$set = ($$props2) => { + if ("plugin" in $$props2) $$invalidate(0, plugin = $$props2.plugin); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*layoutBtn, showTree*/ + 12) { + $: { + if (layoutBtn) { + layoutBtn.empty(); + (0, import_obsidian20.setIcon)(layoutBtn, showTree ? "list" : "folder"); + } + } + } + }; + return [ + plugin, + view, + showTree, + layoutBtn, + loading, + buttons, + logs, + div0_binding, + click_handler, + div1_binding + ]; +} +var HistoryView = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance4, create_fragment4, safe_not_equal, { plugin: 0, view: 1 }); + } +}; +var historyView_default = HistoryView; + +// src/ui/history/historyView.ts +var HistoryView2 = class extends import_obsidian21.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.plugin = plugin; + this.hoverPopover = null; + } + getViewType() { + return HISTORY_VIEW_CONFIG.type; + } + getDisplayText() { + return HISTORY_VIEW_CONFIG.name; + } + getIcon() { + return HISTORY_VIEW_CONFIG.icon; + } + onClose() { + return super.onClose(); + } + onOpen() { + this._view = new historyView_default({ + target: this.contentEl, + props: { + plugin: this.plugin, + view: this + } + }); + return super.onOpen(); + } +}; + +// src/ui/modals/branchModal.ts +init_polyfill_buffer(); +var import_obsidian22 = require("obsidian"); +var BranchModal = class extends import_obsidian22.FuzzySuggestModal { + constructor(branches) { + super(app); + this.branches = branches; + this.setPlaceholder("Select branch to checkout"); + } + getItems() { + return this.branches; + } + getItemText(item) { + return item; + } + onChooseItem(item, evt) { + this.resolve(item); + } + open() { + super.open(); + return new Promise((resolve2) => { + this.resolve = resolve2; + }); + } + async onClose() { + await new Promise((resolve2) => setTimeout(resolve2, 10)); + if (this.resolve) this.resolve(void 0); + } +}; + +// src/ui/modals/ignoreModal.ts +init_polyfill_buffer(); +var import_obsidian23 = require("obsidian"); +var IgnoreModal = class extends import_obsidian23.Modal { + constructor(app2, content) { + super(app2); + this.content = content; + this.resolve = null; + } + open() { + super.open(); + return new Promise((resolve2) => { + this.resolve = resolve2; + }); + } + onOpen() { + const { contentEl, titleEl } = this; + titleEl.setText("Edit .gitignore"); + const div = contentEl.createDiv(); + const text2 = div.createEl("textarea", { + text: this.content, + cls: ["obsidian-git-textarea"], + attr: { rows: 10, cols: 30, wrap: "off" } + }); + div.createEl("button", { + cls: ["mod-cta", "obsidian-git-center-button"], + text: "Save" + }).addEventListener("click", async () => { + this.resolve(text2.value); + this.close(); + }); + } + onClose() { + const { contentEl } = this; + this.resolve(void 0); + contentEl.empty(); + } +}; + +// src/ui/sourceControl/sourceControl.ts +init_polyfill_buffer(); +var import_obsidian30 = require("obsidian"); + +// src/ui/sourceControl/sourceControl.svelte +init_polyfill_buffer(); +var import_obsidian29 = require("obsidian"); + +// src/ui/modals/discardModal.ts +init_polyfill_buffer(); +var import_obsidian24 = require("obsidian"); +var DiscardModal = class extends import_obsidian24.Modal { + constructor(app2, deletion, filename) { + super(app2); + this.deletion = deletion; + this.filename = filename; + this.resolve = null; + } + myOpen() { + this.open(); + return new Promise((resolve2) => { + this.resolve = resolve2; + }); + } + onOpen() { + const { contentEl, titleEl } = this; + titleEl.setText(`${this.deletion ? "Delete" : "Discard"} this file?`); + contentEl.createEl("p").setText( + `Do you really want to ${this.deletion ? "delete" : "discard the changes of"} "${this.filename}"` + ); + const div = contentEl.createDiv({ cls: "modal-button-container" }); + const discard = div.createEl("button", { + cls: "mod-warning", + text: this.deletion ? "Delete" : "Discard" + }); + discard.addEventListener("click", async () => { + if (this.resolve) this.resolve(true); + this.close(); + }); + discard.addEventListener("keypress", async () => { + if (this.resolve) this.resolve(true); + this.close(); + }); + const close = div.createEl("button", { + text: "Cancel" + }); + close.addEventListener("click", () => { + if (this.resolve) this.resolve(false); + return this.close(); + }); + close.addEventListener("keypress", () => { + if (this.resolve) this.resolve(false); + return this.close(); + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/ui/sourceControl/components/fileComponent.svelte +init_polyfill_buffer(); +var import_obsidian26 = require("obsidian"); + +// node_modules/.pnpm/obsidian-community-lib@https+++codeload.github.com+Vinzent03+obsidian-community-lib+tar.gz+e6_gis2so5ruhuavxzhyb52fw447e/node_modules/obsidian-community-lib/dist/index.js +init_polyfill_buffer(); + +// node_modules/.pnpm/obsidian-community-lib@https+++codeload.github.com+Vinzent03+obsidian-community-lib+tar.gz+e6_gis2so5ruhuavxzhyb52fw447e/node_modules/obsidian-community-lib/dist/utils.js +init_polyfill_buffer(); +var feather = __toESM(require_feather()); +var import_obsidian25 = require("obsidian"); +function hoverPreview(event, view, to) { + const targetEl = event.target; + app.workspace.trigger("hover-link", { + event, + source: view.getViewType(), + hoverParent: view, + targetEl, + linktext: to + }); +} + +// src/ui/sourceControl/components/fileComponent.svelte +function add_css3(target) { + append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); +} +function create_if_block5(ctx) { + let div; + let mounted; + let dispose; + return { + c() { + div = element("div"); + attr(div, "data-icon", "go-to-file"); + attr(div, "aria-label", "Open File"); + attr(div, "class", "clickable-icon"); + }, + m(target, anchor) { + insert(target, div, anchor); + ctx[11](div); + if (!mounted) { + dispose = [ + listen(div, "auxclick", stop_propagation( + /*open*/ + ctx[5] + )), + listen(div, "click", stop_propagation( + /*open*/ + ctx[5] + )) + ]; + mounted = true; + } + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + ctx[11](null); + mounted = false; + run_all(dispose); + } + }; +} +function create_fragment5(ctx) { + let main; + let div6; + let div0; + let t0_value = getDisplayPath( + /*change*/ + ctx[0].vault_path + ) + ""; + let t0; + let t1; + let div5; + let div3; + let show_if = ( + /*view*/ + ctx[1].app.vault.getAbstractFileByPath( + /*change*/ + ctx[0].vault_path + ) + ); + let t2; + let div1; + let t3; + let div2; + let t4; + let div4; + let t5_value = ( + /*change*/ + ctx[0].working_dir + "" + ); + let t5; + let div4_data_type_value; + let div6_data_path_value; + let div6_aria_label_value; + let mounted; + let dispose; + let if_block = show_if && create_if_block5(ctx); + return { + c() { + var _a2, _b, _c; + main = element("main"); + div6 = element("div"); + div0 = element("div"); + t0 = text(t0_value); + t1 = space(); + div5 = element("div"); + div3 = element("div"); + if (if_block) if_block.c(); + t2 = space(); + div1 = element("div"); + t3 = space(); + div2 = element("div"); + t4 = space(); + div4 = element("div"); + t5 = text(t5_value); + attr(div0, "class", "tree-item-inner nav-file-title-content"); + attr(div1, "data-icon", "undo"); + attr(div1, "aria-label", "Discard"); + attr(div1, "class", "clickable-icon"); + attr(div2, "data-icon", "plus"); + attr(div2, "aria-label", "Stage"); + attr(div2, "class", "clickable-icon"); + attr(div3, "class", "buttons"); + attr(div4, "class", "type"); + attr(div4, "data-type", div4_data_type_value = /*change*/ + ctx[0].working_dir); + attr(div5, "class", "git-tools"); + attr(div6, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); + attr(div6, "data-path", div6_data_path_value = /*change*/ + ctx[0].vault_path); + attr( + div6, + "data-tooltip-position", + /*side*/ + ctx[3] + ); + attr(div6, "aria-label", div6_aria_label_value = /*change*/ + ctx[0].vault_path); + toggle_class( + div6, + "is-active", + /*view*/ + ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ + ctx[0].vault_path && !/*view*/ + ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && !/*view*/ + ((_c = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) + ); + attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div6); + append2(div6, div0); + append2(div0, t0); + append2(div6, t1); + append2(div6, div5); + append2(div5, div3); + if (if_block) if_block.m(div3, null); + append2(div3, t2); + append2(div3, div1); + ctx[12](div1); + append2(div3, t3); + append2(div3, div2); + ctx[13](div2); + append2(div5, t4); + append2(div5, div4); + append2(div4, t5); + if (!mounted) { + dispose = [ + listen(div1, "click", stop_propagation( + /*discard*/ + ctx[8] + )), + listen(div2, "click", stop_propagation( + /*stage*/ + ctx[6] + )), + listen( + main, + "mouseover", + /*hover*/ + ctx[4] + ), + listen(main, "click", stop_propagation( + /*showDiff*/ + ctx[7] + )), + listen(main, "auxclick", stop_propagation( + /*auxclick_handler*/ + ctx[14] + )), + listen( + main, + "focus", + /*focus_handler*/ + ctx[10] + ) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + var _a2, _b, _c; + if (dirty & /*change*/ + 1 && t0_value !== (t0_value = getDisplayPath( + /*change*/ + ctx2[0].vault_path + ) + "")) set_data(t0, t0_value); + if (dirty & /*view, change*/ + 3) show_if = /*view*/ + ctx2[1].app.vault.getAbstractFileByPath( + /*change*/ + ctx2[0].vault_path + ); + if (show_if) { + if (if_block) { + if_block.p(ctx2, dirty); + } else { + if_block = create_if_block5(ctx2); + if_block.c(); + if_block.m(div3, t2); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + if (dirty & /*change*/ + 1 && t5_value !== (t5_value = /*change*/ + ctx2[0].working_dir + "")) set_data(t5, t5_value); + if (dirty & /*change*/ + 1 && div4_data_type_value !== (div4_data_type_value = /*change*/ + ctx2[0].working_dir)) { + attr(div4, "data-type", div4_data_type_value); + } + if (dirty & /*change*/ + 1 && div6_data_path_value !== (div6_data_path_value = /*change*/ + ctx2[0].vault_path)) { + attr(div6, "data-path", div6_data_path_value); + } + if (dirty & /*side*/ + 8) { + attr( + div6, + "data-tooltip-position", + /*side*/ + ctx2[3] + ); + } + if (dirty & /*change*/ + 1 && div6_aria_label_value !== (div6_aria_label_value = /*change*/ + ctx2[0].vault_path)) { + attr(div6, "aria-label", div6_aria_label_value); + } + if (dirty & /*view, change*/ + 3) { + toggle_class( + div6, + "is-active", + /*view*/ + ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ + ctx2[0].vault_path && !/*view*/ + ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && !/*view*/ + ((_c = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) + ); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(main); + } + if (if_block) if_block.d(); + ctx[12](null); + ctx[13](null); + mounted = false; + run_all(dispose); + } + }; +} +function instance5($$self, $$props, $$invalidate) { + let side; + let { change } = $$props; + let { view } = $$props; + let { manager } = $$props; + let buttons = []; + window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian26.setIcon)(b, b.getAttr("data-icon"))), 0); + function hover(event) { + if (app.vault.getAbstractFileByPath(change.vault_path)) { + hoverPreview(event, view, change.vault_path); + } + } + function open(event) { + var _a2; + const file = view.app.vault.getAbstractFileByPath(change.vault_path); + if (file instanceof import_obsidian26.TFile) { + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); + } + } + function stage() { + manager.stage(change.path, false).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + function showDiff(event) { + var _a2; + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ + type: DIFF_VIEW_CONFIG.type, + active: true, + state: { file: change.path, staged: false } + }); + } + function discard() { + const deleteFile = change.working_dir == "U"; + new DiscardModal(view.app, deleteFile, change.vault_path).myOpen().then((shouldDiscard) => { + if (shouldDiscard === true) { + if (deleteFile) { + view.app.vault.adapter.remove(change.vault_path).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } else { + manager.discard(change.path).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + } + }); + } + function focus_handler(event) { + bubble.call(this, $$self, event); + } + function div_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[1] = $$value; + $$invalidate(2, buttons); + }); + } + function div1_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[0] = $$value; + $$invalidate(2, buttons); + }); + } + function div2_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[2] = $$value; + $$invalidate(2, buttons); + }); + } + const auxclick_handler = (event) => mayTriggerFileMenu(view.app, event, change.vault_path, view.leaf, "git-source-control"); + $$self.$$set = ($$props2) => { + if ("change" in $$props2) $$invalidate(0, change = $$props2.change); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + if ("manager" in $$props2) $$invalidate(9, manager = $$props2.manager); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 2) { + $: $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [ + change, + view, + buttons, + side, + hover, + open, + stage, + showDiff, + discard, + manager, + focus_handler, + div_binding, + div1_binding, + div2_binding, + auxclick_handler + ]; +} +var FileComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance5, create_fragment5, safe_not_equal, { change: 0, view: 1, manager: 9 }, add_css3); + } +}; +var fileComponent_default = FileComponent; + +// src/ui/sourceControl/components/pulledFileComponent.svelte +init_polyfill_buffer(); +var import_obsidian27 = require("obsidian"); +function add_css4(target) { + append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); +} +function create_fragment6(ctx) { + let main; + let div2; + let div0; + let t0_value = getDisplayPath( + /*change*/ + ctx[0].vault_path + ) + ""; + let t0; + let t1; + let div1; + let span; + let t2_value = ( + /*change*/ + ctx[0].working_dir + "" + ); + let t2; + let span_data_type_value; + let div2_data_path_value; + let div2_aria_label_value; + let mounted; + let dispose; + return { + c() { + main = element("main"); + div2 = element("div"); + div0 = element("div"); + t0 = text(t0_value); + t1 = space(); + div1 = element("div"); + span = element("span"); + t2 = text(t2_value); + attr(div0, "class", "tree-item-inner nav-file-title-content"); + attr(span, "class", "type"); + attr(span, "data-type", span_data_type_value = /*change*/ + ctx[0].working_dir); + attr(div1, "class", "git-tools"); + attr(div2, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); + attr(div2, "data-path", div2_data_path_value = /*change*/ + ctx[0].vault_path); + attr( + div2, + "data-tooltip-position", + /*side*/ + ctx[2] + ); + attr(div2, "aria-label", div2_aria_label_value = /*change*/ + ctx[0].vault_path); + attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div2); + append2(div2, div0); + append2(div0, t0); + append2(div2, t1); + append2(div2, div1); + append2(div1, span); + append2(span, t2); + if (!mounted) { + dispose = [ + listen( + main, + "mouseover", + /*hover*/ + ctx[3] + ), + listen(main, "click", stop_propagation( + /*open*/ + ctx[4] + )), + listen(main, "auxclick", stop_propagation( + /*auxclick_handler*/ + ctx[6] + )), + listen( + main, + "focus", + /*focus_handler*/ + ctx[5] + ) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + if (dirty & /*change*/ + 1 && t0_value !== (t0_value = getDisplayPath( + /*change*/ + ctx2[0].vault_path + ) + "")) set_data(t0, t0_value); + if (dirty & /*change*/ + 1 && t2_value !== (t2_value = /*change*/ + ctx2[0].working_dir + "")) set_data(t2, t2_value); + if (dirty & /*change*/ + 1 && span_data_type_value !== (span_data_type_value = /*change*/ + ctx2[0].working_dir)) { + attr(span, "data-type", span_data_type_value); + } + if (dirty & /*change*/ + 1 && div2_data_path_value !== (div2_data_path_value = /*change*/ + ctx2[0].vault_path)) { + attr(div2, "data-path", div2_data_path_value); + } + if (dirty & /*side*/ + 4) { + attr( + div2, + "data-tooltip-position", + /*side*/ + ctx2[2] + ); + } + if (dirty & /*change*/ + 1 && div2_aria_label_value !== (div2_aria_label_value = /*change*/ + ctx2[0].vault_path)) { + attr(div2, "aria-label", div2_aria_label_value); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(main); + } + mounted = false; + run_all(dispose); + } + }; +} +function instance6($$self, $$props, $$invalidate) { + let side; + let { change } = $$props; + let { view } = $$props; + function hover(event) { + if (app.vault.getAbstractFileByPath(change.vault_path)) { + hoverPreview(event, view, change.vault_path); + } + } + function open(event) { + var _a2; + const file = view.app.vault.getAbstractFileByPath(change.vault_path); + if (file instanceof import_obsidian27.TFile) { + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); + } + } + function focus_handler(event) { + bubble.call(this, $$self, event); + } + const auxclick_handler = (event) => mayTriggerFileMenu(view.app, event, change.vault_path, view.leaf, "git-source-control"); + $$self.$$set = ($$props2) => { + if ("change" in $$props2) $$invalidate(0, change = $$props2.change); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 2) { + $: $$invalidate(2, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [change, view, side, hover, open, focus_handler, auxclick_handler]; +} +var PulledFileComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance6, create_fragment6, safe_not_equal, { change: 0, view: 1 }, add_css4); + } +}; +var pulledFileComponent_default = PulledFileComponent; + +// src/ui/sourceControl/components/stagedFileComponent.svelte +init_polyfill_buffer(); +var import_obsidian28 = require("obsidian"); +function add_css5(target) { + append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); +} +function create_if_block6(ctx) { + let div; + let mounted; + let dispose; + return { + c() { + div = element("div"); + attr(div, "data-icon", "go-to-file"); + attr(div, "aria-label", "Open File"); + attr(div, "class", "clickable-icon"); + }, + m(target, anchor) { + insert(target, div, anchor); + ctx[10](div); + if (!mounted) { + dispose = listen(div, "click", stop_propagation( + /*open*/ + ctx[5] + )); + mounted = true; + } + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + ctx[10](null); + mounted = false; + dispose(); + } + }; +} +function create_fragment7(ctx) { + let main; + let div5; + let div0; + let t0_value = getDisplayPath( + /*change*/ + ctx[0].vault_path + ) + ""; + let t0; + let t1; + let div4; + let div2; + let show_if = ( + /*view*/ + ctx[1].app.vault.getAbstractFileByPath( + /*change*/ + ctx[0].vault_path + ) + ); + let t2; + let div1; + let t3; + let div3; + let t4_value = ( + /*change*/ + ctx[0].index + "" + ); + let t4; + let div3_data_type_value; + let div5_data_path_value; + let div5_aria_label_value; + let mounted; + let dispose; + let if_block = show_if && create_if_block6(ctx); + return { + c() { + var _a2, _b, _c; + main = element("main"); + div5 = element("div"); + div0 = element("div"); + t0 = text(t0_value); + t1 = space(); + div4 = element("div"); + div2 = element("div"); + if (if_block) if_block.c(); + t2 = space(); + div1 = element("div"); + t3 = space(); + div3 = element("div"); + t4 = text(t4_value); + attr(div0, "class", "tree-item-inner nav-file-title-content"); + attr(div1, "data-icon", "minus"); + attr(div1, "aria-label", "Unstage"); + attr(div1, "class", "clickable-icon"); + attr(div2, "class", "buttons"); + attr(div3, "class", "type"); + attr(div3, "data-type", div3_data_type_value = /*change*/ + ctx[0].index); + attr(div4, "class", "git-tools"); + attr(div5, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); + attr(div5, "data-path", div5_data_path_value = /*change*/ + ctx[0].vault_path); + attr( + div5, + "data-tooltip-position", + /*side*/ + ctx[3] + ); + attr(div5, "aria-label", div5_aria_label_value = /*change*/ + ctx[0].vault_path); + toggle_class( + div5, + "is-active", + /*view*/ + ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ + ctx[0].vault_path && !/*view*/ + ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && /*view*/ + ((_c = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) + ); + attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div5); + append2(div5, div0); + append2(div0, t0); + append2(div5, t1); + append2(div5, div4); + append2(div4, div2); + if (if_block) if_block.m(div2, null); + append2(div2, t2); + append2(div2, div1); + ctx[11](div1); + append2(div4, t3); + append2(div4, div3); + append2(div3, t4); + if (!mounted) { + dispose = [ + listen(div1, "click", stop_propagation( + /*unstage*/ + ctx[7] + )), + listen( + main, + "mouseover", + /*hover*/ + ctx[4] + ), + listen( + main, + "focus", + /*focus_handler*/ + ctx[9] + ), + listen(main, "click", stop_propagation( + /*showDiff*/ + ctx[6] + )), + listen(main, "auxclick", stop_propagation( + /*auxclick_handler*/ + ctx[12] + )) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + var _a2, _b, _c; + if (dirty & /*change*/ + 1 && t0_value !== (t0_value = getDisplayPath( + /*change*/ + ctx2[0].vault_path + ) + "")) set_data(t0, t0_value); + if (dirty & /*view, change*/ + 3) show_if = /*view*/ + ctx2[1].app.vault.getAbstractFileByPath( + /*change*/ + ctx2[0].vault_path + ); + if (show_if) { + if (if_block) { + if_block.p(ctx2, dirty); + } else { + if_block = create_if_block6(ctx2); + if_block.c(); + if_block.m(div2, t2); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + if (dirty & /*change*/ + 1 && t4_value !== (t4_value = /*change*/ + ctx2[0].index + "")) set_data(t4, t4_value); + if (dirty & /*change*/ + 1 && div3_data_type_value !== (div3_data_type_value = /*change*/ + ctx2[0].index)) { + attr(div3, "data-type", div3_data_type_value); + } + if (dirty & /*change*/ + 1 && div5_data_path_value !== (div5_data_path_value = /*change*/ + ctx2[0].vault_path)) { + attr(div5, "data-path", div5_data_path_value); + } + if (dirty & /*side*/ + 8) { + attr( + div5, + "data-tooltip-position", + /*side*/ + ctx2[3] + ); + } + if (dirty & /*change*/ + 1 && div5_aria_label_value !== (div5_aria_label_value = /*change*/ + ctx2[0].vault_path)) { + attr(div5, "aria-label", div5_aria_label_value); + } + if (dirty & /*view, change*/ + 3) { + toggle_class( + div5, + "is-active", + /*view*/ + ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ + ctx2[0].vault_path && !/*view*/ + ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && /*view*/ + ((_c = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) + ); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(main); + } + if (if_block) if_block.d(); + ctx[11](null); + mounted = false; + run_all(dispose); + } + }; +} +function instance7($$self, $$props, $$invalidate) { + let side; + let { change } = $$props; + let { view } = $$props; + let { manager } = $$props; + let buttons = []; + window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian28.setIcon)(b, b.getAttr("data-icon"))), 0); + function hover(event) { + if (app.vault.getAbstractFileByPath(change.vault_path)) { + hoverPreview(event, view, change.vault_path); + } + } + function open(event) { + var _a2; + const file = view.app.vault.getAbstractFileByPath(change.vault_path); + if (file instanceof import_obsidian28.TFile) { + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); + } + } + function showDiff(event) { + var _a2; + (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ + type: DIFF_VIEW_CONFIG.type, + active: true, + state: { file: change.path, staged: true } + }); + } + function unstage() { + manager.unstage(change.path, false).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + function focus_handler(event) { + bubble.call(this, $$self, event); + } + function div_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[1] = $$value; + $$invalidate(2, buttons); + }); + } + function div1_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[0] = $$value; + $$invalidate(2, buttons); + }); + } + const auxclick_handler = (event) => mayTriggerFileMenu(view.app, event, change.vault_path, view.leaf, "git-source-control"); + $$self.$$set = ($$props2) => { + if ("change" in $$props2) $$invalidate(0, change = $$props2.change); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + if ("manager" in $$props2) $$invalidate(8, manager = $$props2.manager); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 2) { + $: $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [ + change, + view, + buttons, + side, + hover, + open, + showDiff, + unstage, + manager, + focus_handler, + div_binding, + div1_binding, + auxclick_handler + ]; +} +var StagedFileComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance7, create_fragment7, safe_not_equal, { change: 0, view: 1, manager: 8 }, add_css5); + } +}; +var stagedFileComponent_default = StagedFileComponent; + +// src/ui/sourceControl/components/treeComponent.svelte +init_polyfill_buffer(); +function add_css6(target) { + append_styles(target, "svelte-hup5mn", "main.svelte-hup5mn .nav-folder-title.svelte-hup5mn{align-items:center}"); +} +function get_each_context4(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[16] = list[i]; + return child_ctx; +} +function create_else_block3(ctx) { + let div7; + let div6; + let div0; + let t0; + let div1; + let t1; + let div2; + let t2_value = ( + /*entity*/ + ctx[16].title + "" + ); + let t2; + let t3; + let div5; + let div4; + let t4; + let div3; + let div6_aria_label_value; + let t5; + let t6; + let current; + let mounted; + let dispose; + function select_block_type_2(ctx2, dirty) { + if ( + /*fileType*/ + ctx2[3] == 0 /* staged */ + ) return create_if_block_5; + return create_else_block_1; + } + let current_block_type = select_block_type_2(ctx, -1); + let if_block0 = current_block_type(ctx); + let if_block1 = !/*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ] && create_if_block_42(ctx); + function click_handler_3() { + return ( + /*click_handler_3*/ + ctx[14]( + /*entity*/ + ctx[16] + ) + ); + } + function auxclick_handler(...args) { + return ( + /*auxclick_handler*/ + ctx[15]( + /*entity*/ + ctx[16], + ...args + ) + ); + } + return { + c() { + div7 = element("div"); + div6 = element("div"); + div0 = element("div"); + t0 = space(); + div1 = element("div"); + div1.innerHTML = ``; + t1 = space(); + div2 = element("div"); + t2 = text(t2_value); + t3 = space(); + div5 = element("div"); + div4 = element("div"); + if_block0.c(); + t4 = space(); + div3 = element("div"); + t5 = space(); + if (if_block1) if_block1.c(); + t6 = space(); + attr(div0, "data-icon", "folder"); + set_style(div0, "padding-right", "5px"); + set_style(div0, "display", "flex"); + attr(div1, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + toggle_class( + div1, + "is-collapsed", + /*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ] + ); + attr(div2, "class", "tree-item-inner nav-folder-title-content"); + set_style(div3, "width", "11px"); + attr(div4, "class", "buttons"); + attr(div5, "class", "git-tools"); + attr(div6, "class", "tree-item-self is-clickable nav-folder-title svelte-hup5mn"); + attr( + div6, + "data-tooltip-position", + /*side*/ + ctx[6] + ); + attr(div6, "aria-label", div6_aria_label_value = /*entity*/ + ctx[16].vaultPath); + attr(div7, "class", "tree-item nav-folder"); + toggle_class( + div7, + "is-collapsed", + /*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ] + ); + }, + m(target, anchor) { + insert(target, div7, anchor); + append2(div7, div6); + append2(div6, div0); + append2(div6, t0); + append2(div6, div1); + append2(div6, t1); + append2(div6, div2); + append2(div2, t2); + append2(div6, t3); + append2(div6, div5); + append2(div5, div4); + if_block0.m(div4, null); + append2(div4, t4); + append2(div4, div3); + append2(div7, t5); + if (if_block1) if_block1.m(div7, null); + append2(div7, t6); + current = true; + if (!mounted) { + dispose = [ + listen(div7, "click", stop_propagation(click_handler_3)), + listen(div7, "auxclick", stop_propagation(auxclick_handler)) + ]; + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (!current || dirty & /*closed, hierarchy*/ + 33) { + toggle_class( + div1, + "is-collapsed", + /*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ] + ); + } + if ((!current || dirty & /*hierarchy*/ + 1) && t2_value !== (t2_value = /*entity*/ + ctx[16].title + "")) set_data(t2, t2_value); + if (current_block_type === (current_block_type = select_block_type_2(ctx, dirty)) && if_block0) { + if_block0.p(ctx, dirty); + } else { + if_block0.d(1); + if_block0 = current_block_type(ctx); + if (if_block0) { + if_block0.c(); + if_block0.m(div4, t4); + } + } + if (!current || dirty & /*side*/ + 64) { + attr( + div6, + "data-tooltip-position", + /*side*/ + ctx[6] + ); + } + if (!current || dirty & /*hierarchy*/ + 1 && div6_aria_label_value !== (div6_aria_label_value = /*entity*/ + ctx[16].vaultPath)) { + attr(div6, "aria-label", div6_aria_label_value); + } + if (!/*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ]) { + if (if_block1) { + if_block1.p(ctx, dirty); + if (dirty & /*closed, hierarchy*/ + 33) { + transition_in(if_block1, 1); + } + } else { + if_block1 = create_if_block_42(ctx); + if_block1.c(); + transition_in(if_block1, 1); + if_block1.m(div7, t6); + } + } else if (if_block1) { + group_outros(); + transition_out(if_block1, 1, 1, () => { + if_block1 = null; + }); + check_outros(); + } + if (!current || dirty & /*closed, hierarchy*/ + 33) { + toggle_class( + div7, + "is-collapsed", + /*closed*/ + ctx[5][ + /*entity*/ + ctx[16].title + ] + ); + } + }, + i(local) { + if (current) return; + transition_in(if_block1); + current = true; + }, + o(local) { + transition_out(if_block1); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div7); + } + if_block0.d(); + if (if_block1) if_block1.d(); + mounted = false; + run_all(dispose); + } + }; +} +function create_if_block7(ctx) { + let div; + let current_block_type_index; + let if_block; + let t; + let current; + const if_block_creators = [create_if_block_13, create_if_block_22, create_if_block_32]; + const if_blocks = []; + function select_block_type_1(ctx2, dirty) { + if ( + /*fileType*/ + ctx2[3] == 0 /* staged */ + ) return 0; + if ( + /*fileType*/ + ctx2[3] == 1 /* changed */ + ) return 1; + if ( + /*fileType*/ + ctx2[3] == 2 /* pulled */ + ) return 2; + return -1; + } + if (~(current_block_type_index = select_block_type_1(ctx, -1))) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + } + return { + c() { + div = element("div"); + if (if_block) if_block.c(); + t = space(); + }, + m(target, anchor) { + insert(target, div, anchor); + if (~current_block_type_index) { + if_blocks[current_block_type_index].m(div, null); + } + append2(div, t); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type_1(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if (~current_block_type_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } + } else { + if (if_block) { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + } + if (~current_block_type_index) { + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div, t); + } else { + if_block = null; + } + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + if (~current_block_type_index) { + if_blocks[current_block_type_index].d(); + } + } + }; +} +function create_else_block_1(ctx) { + let div0; + let t; + let div1; + let mounted; + let dispose; + function click_handler_1() { + return ( + /*click_handler_1*/ + ctx[12]( + /*entity*/ + ctx[16] + ) + ); + } + function click_handler_2() { + return ( + /*click_handler_2*/ + ctx[13]( + /*entity*/ + ctx[16] + ) + ); + } + return { + c() { + div0 = element("div"); + div0.innerHTML = ``; + t = space(); + div1 = element("div"); + div1.innerHTML = ``; + attr(div0, "data-icon", "undo"); + attr(div0, "aria-label", "Discard"); + attr(div0, "class", "clickable-icon"); + attr(div1, "data-icon", "plus"); + attr(div1, "aria-label", "Stage"); + attr(div1, "class", "clickable-icon"); + }, + m(target, anchor) { + insert(target, div0, anchor); + insert(target, t, anchor); + insert(target, div1, anchor); + if (!mounted) { + dispose = [ + listen(div0, "click", stop_propagation(click_handler_1)), + listen(div1, "click", stop_propagation(click_handler_2)) + ]; + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + }, + d(detaching) { + if (detaching) { + detach(div0); + detach(t); + detach(div1); + } + mounted = false; + run_all(dispose); + } + }; +} +function create_if_block_5(ctx) { + let div; + let mounted; + let dispose; + function click_handler() { + return ( + /*click_handler*/ + ctx[11]( + /*entity*/ + ctx[16] + ) + ); + } + return { + c() { + div = element("div"); + div.innerHTML = ``; + attr(div, "data-icon", "minus"); + attr(div, "aria-label", "Unstage"); + attr(div, "class", "clickable-icon"); + }, + m(target, anchor) { + insert(target, div, anchor); + if (!mounted) { + dispose = listen(div, "click", stop_propagation(click_handler)); + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + }, + d(detaching) { + if (detaching) { + detach(div); + } + mounted = false; + dispose(); + } + }; +} +function create_if_block_42(ctx) { + let div; + let treecomponent; + let div_transition; + let current; + treecomponent = new TreeComponent({ + props: { + hierarchy: ( + /*entity*/ + ctx[16] + ), + plugin: ( + /*plugin*/ + ctx[1] + ), + view: ( + /*view*/ + ctx[2] + ), + fileType: ( + /*fileType*/ + ctx[3] + ) + } + }); + return { + c() { + div = element("div"); + create_component(treecomponent.$$.fragment); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + mount_component(treecomponent, div, null); + current = true; + }, + p(ctx2, dirty) { + const treecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) treecomponent_changes.hierarchy = /*entity*/ + ctx2[16]; + if (dirty & /*plugin*/ + 2) treecomponent_changes.plugin = /*plugin*/ + ctx2[1]; + if (dirty & /*view*/ + 4) treecomponent_changes.view = /*view*/ + ctx2[2]; + if (dirty & /*fileType*/ + 8) treecomponent_changes.fileType = /*fileType*/ + ctx2[3]; + treecomponent.$set(treecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(treecomponent.$$.fragment, local); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(treecomponent.$$.fragment, local); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + destroy_component(treecomponent); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_if_block_32(ctx) { + let pulledfilecomponent; + let current; + pulledfilecomponent = new pulledFileComponent_default({ + props: { + change: ( + /*entity*/ + ctx[16].data + ), + view: ( + /*view*/ + ctx[2] + ) + } + }); + return { + c() { + create_component(pulledfilecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(pulledfilecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const pulledfilecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) pulledfilecomponent_changes.change = /*entity*/ + ctx2[16].data; + if (dirty & /*view*/ + 4) pulledfilecomponent_changes.view = /*view*/ + ctx2[2]; + pulledfilecomponent.$set(pulledfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(pulledfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(pulledfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(pulledfilecomponent, detaching); + } + }; +} +function create_if_block_22(ctx) { + let filecomponent; + let current; + filecomponent = new fileComponent_default({ + props: { + change: ( + /*entity*/ + ctx[16].data + ), + manager: ( + /*plugin*/ + ctx[1].gitManager + ), + view: ( + /*view*/ + ctx[2] + ) + } + }); + return { + c() { + create_component(filecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(filecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const filecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) filecomponent_changes.change = /*entity*/ + ctx2[16].data; + if (dirty & /*plugin*/ + 2) filecomponent_changes.manager = /*plugin*/ + ctx2[1].gitManager; + if (dirty & /*view*/ + 4) filecomponent_changes.view = /*view*/ + ctx2[2]; + filecomponent.$set(filecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(filecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(filecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(filecomponent, detaching); + } + }; +} +function create_if_block_13(ctx) { + let stagedfilecomponent; + let current; + stagedfilecomponent = new stagedFileComponent_default({ + props: { + change: ( + /*entity*/ + ctx[16].data + ), + manager: ( + /*plugin*/ + ctx[1].gitManager + ), + view: ( + /*view*/ + ctx[2] + ) + } + }); + return { + c() { + create_component(stagedfilecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(stagedfilecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const stagedfilecomponent_changes = {}; + if (dirty & /*hierarchy*/ + 1) stagedfilecomponent_changes.change = /*entity*/ + ctx2[16].data; + if (dirty & /*plugin*/ + 2) stagedfilecomponent_changes.manager = /*plugin*/ + ctx2[1].gitManager; + if (dirty & /*view*/ + 4) stagedfilecomponent_changes.view = /*view*/ + ctx2[2]; + stagedfilecomponent.$set(stagedfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(stagedfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(stagedfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(stagedfilecomponent, detaching); + } + }; +} +function create_each_block4(ctx) { + let current_block_type_index; + let if_block; + let if_block_anchor; + let current; + const if_block_creators = [create_if_block7, create_else_block3]; + const if_blocks = []; + function select_block_type(ctx2, dirty) { + if ( + /*entity*/ + ctx2[16].data + ) return 0; + return 1; + } + current_block_type_index = select_block_type(ctx, -1); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + if_block.c(); + if_block_anchor = empty(); + }, + m(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(if_block_anchor); + } + if_blocks[current_block_type_index].d(detaching); + } + }; +} +function create_fragment8(ctx) { + let main; + let current; + let each_value = ensure_array_like( + /*hierarchy*/ + ctx[0].children + ); + let each_blocks = []; + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block4(get_each_context4(ctx, each_value, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + main = element("main"); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + attr(main, "class", "svelte-hup5mn"); + toggle_class( + main, + "topLevel", + /*topLevel*/ + ctx[4] + ); + }, + m(target, anchor) { + insert(target, main, anchor); + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(main, null); + } + } + current = true; + }, + p(ctx2, [dirty]) { + if (dirty & /*hierarchy, plugin, view, fileType, closed, fold, side, unstage, stage, discard*/ + 2031) { + each_value = ensure_array_like( + /*hierarchy*/ + ctx2[0].children + ); + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context4(ctx2, each_value, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block4(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(main, null); + } + } + group_outros(); + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + if (!current || dirty & /*topLevel*/ + 16) { + toggle_class( + main, + "topLevel", + /*topLevel*/ + ctx2[4] + ); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(main); + } + destroy_each(each_blocks, detaching); + } + }; +} +function instance8($$self, $$props, $$invalidate) { + let side; + let { hierarchy } = $$props; + let { plugin } = $$props; + let { view } = $$props; + let { fileType } = $$props; + let { topLevel = false } = $$props; + const closed = {}; + function stage(path2) { + plugin.gitManager.stageAll({ dir: path2 }).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + function unstage(path2) { + plugin.gitManager.unstageAll({ dir: path2 }).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + function discard(item) { + new DiscardModal(view.app, false, item.vaultPath).myOpen().then((shouldDiscard) => { + if (shouldDiscard === true) { + plugin.gitManager.discardAll({ + dir: item.path, + status: plugin.cachedStatus + }).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + }); + } + }); + } + function fold(item) { + $$invalidate(5, closed[item.title] = !closed[item.title], closed); + } + const click_handler = (entity) => unstage(entity.path); + const click_handler_1 = (entity) => discard(entity); + const click_handler_2 = (entity) => stage(entity.path); + const click_handler_3 = (entity) => fold(entity); + const auxclick_handler = (entity, event) => mayTriggerFileMenu(view.app, event, entity.vaultPath, view.leaf, "git-source-control"); + $$self.$$set = ($$props2) => { + if ("hierarchy" in $$props2) $$invalidate(0, hierarchy = $$props2.hierarchy); + if ("plugin" in $$props2) $$invalidate(1, plugin = $$props2.plugin); + if ("view" in $$props2) $$invalidate(2, view = $$props2.view); + if ("fileType" in $$props2) $$invalidate(3, fileType = $$props2.fileType); + if ("topLevel" in $$props2) $$invalidate(4, topLevel = $$props2.topLevel); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*view*/ + 4) { + $: $$invalidate(6, side = view.leaf.getRoot().side == "left" ? "right" : "left"); + } + }; + return [ + hierarchy, + plugin, + view, + fileType, + topLevel, + closed, + side, + stage, + unstage, + discard, + fold, + click_handler, + click_handler_1, + click_handler_2, + click_handler_3, + auxclick_handler + ]; +} +var TreeComponent = class extends SvelteComponent { + constructor(options) { + super(); + init2( + this, + options, + instance8, + create_fragment8, + safe_not_equal, + { + hierarchy: 0, + plugin: 1, + view: 2, + fileType: 3, + topLevel: 4 + }, + add_css6 + ); + } +}; +var treeComponent_default = TreeComponent; + +// src/ui/sourceControl/sourceControl.svelte +function add_css7(target) { + append_styles(target, "svelte-11adhly", `.commit-msg-input.svelte-11adhly.svelte-11adhly{width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field)}.git-commit-msg.svelte-11adhly.svelte-11adhly{position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto}main.svelte-11adhly .git-tools .files-count.svelte-11adhly{padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center}.nav-folder-title.svelte-11adhly.svelte-11adhly{align-items:center}.git-commit-msg-clear-button.svelte-11adhly.svelte-11adhly{position:absolute;background:transparent;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:-4px;right:2px;bottom:0px;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0 0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color 0.15s ease-in-out}.git-commit-msg-clear-button.svelte-11adhly.svelte-11adhly:after{content:"";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentColor;mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;-webkit-mask-image:url("data:image/svg+xml,");-webkit-mask-repeat:no-repeat}`); +} +function get_each_context5(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[40] = list[i]; + return child_ctx; +} +function get_each_context_1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[40] = list[i]; + return child_ctx; +} +function get_each_context_2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[45] = list[i]; + return child_ctx; +} +function create_if_block_8(ctx) { + let div; + let div_aria_label_value; + let mounted; + let dispose; + return { + c() { + div = element("div"); + attr(div, "class", "git-commit-msg-clear-button svelte-11adhly"); + attr(div, "aria-label", div_aria_label_value = "Clear"); + }, + m(target, anchor) { + insert(target, div, anchor); + if (!mounted) { + dispose = listen( + div, + "click", + /*click_handler_1*/ + ctx[33] + ); + mounted = true; + } + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + mounted = false; + dispose(); + } + }; +} +function create_if_block8(ctx) { + let div18; + let div17; + let div7; + let div6; + let div0; + let t0; + let div1; + let t2; + let div5; + let div3; + let div2; + let t3; + let div4; + let t4_value = ( + /*status*/ + ctx[6].staged.length + "" + ); + let t4; + let t5; + let t6; + let div16; + let div15; + let div8; + let t7; + let div9; + let t9; + let div14; + let div12; + let div10; + let t10; + let div11; + let t11; + let div13; + let t12_value = ( + /*status*/ + ctx[6].changed.length + "" + ); + let t12; + let t13; + let t14; + let current; + let mounted; + let dispose; + let if_block0 = ( + /*stagedOpen*/ + ctx[13] && create_if_block_6(ctx) + ); + let if_block1 = ( + /*changesOpen*/ + ctx[12] && create_if_block_43(ctx) + ); + let if_block2 = ( + /*lastPulledFiles*/ + ctx[7].length > 0 && create_if_block_14(ctx) + ); + return { + c() { + div18 = element("div"); + div17 = element("div"); + div7 = element("div"); + div6 = element("div"); + div0 = element("div"); + div0.innerHTML = ``; + t0 = space(); + div1 = element("div"); + div1.textContent = "Staged Changes"; + t2 = space(); + div5 = element("div"); + div3 = element("div"); + div2 = element("div"); + div2.innerHTML = ``; + t3 = space(); + div4 = element("div"); + t4 = text(t4_value); + t5 = space(); + if (if_block0) if_block0.c(); + t6 = space(); + div16 = element("div"); + div15 = element("div"); + div8 = element("div"); + div8.innerHTML = ``; + t7 = space(); + div9 = element("div"); + div9.textContent = "Changes"; + t9 = space(); + div14 = element("div"); + div12 = element("div"); + div10 = element("div"); + div10.innerHTML = ``; + t10 = space(); + div11 = element("div"); + div11.innerHTML = ``; + t11 = space(); + div13 = element("div"); + t12 = text(t12_value); + t13 = space(); + if (if_block1) if_block1.c(); + t14 = space(); + if (if_block2) if_block2.c(); + attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + toggle_class(div0, "is-collapsed", !/*stagedOpen*/ + ctx[13]); + attr(div1, "class", "tree-item-inner nav-folder-title-content"); + attr(div2, "data-icon", "minus"); + attr(div2, "aria-label", "Unstage"); + attr(div2, "class", "clickable-icon"); + attr(div3, "class", "buttons"); + attr(div4, "class", "files-count svelte-11adhly"); + attr(div5, "class", "git-tools"); + attr(div6, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); + attr(div7, "class", "staged tree-item nav-folder"); + toggle_class(div7, "is-collapsed", !/*stagedOpen*/ + ctx[13]); + attr(div8, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + toggle_class(div8, "is-collapsed", !/*changesOpen*/ + ctx[12]); + attr(div9, "class", "tree-item-inner nav-folder-title-content"); + attr(div10, "data-icon", "undo"); + attr(div10, "aria-label", "Discard"); + attr(div10, "class", "clickable-icon"); + attr(div11, "data-icon", "plus"); + attr(div11, "aria-label", "Stage"); + attr(div11, "class", "clickable-icon"); + attr(div12, "class", "buttons"); + attr(div13, "class", "files-count svelte-11adhly"); + attr(div14, "class", "git-tools"); + attr(div15, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); + attr(div16, "class", "changes tree-item nav-folder"); + toggle_class(div16, "is-collapsed", !/*changesOpen*/ + ctx[12]); + attr(div17, "class", "tree-item-children nav-folder-children"); + attr(div18, "class", "tree-item nav-folder mod-root"); + }, + m(target, anchor) { + insert(target, div18, anchor); + append2(div18, div17); + append2(div17, div7); + append2(div7, div6); + append2(div6, div0); + append2(div6, t0); + append2(div6, div1); + append2(div6, t2); + append2(div6, div5); + append2(div5, div3); + append2(div3, div2); + ctx[34](div2); + append2(div5, t3); + append2(div5, div4); + append2(div4, t4); + append2(div7, t5); + if (if_block0) if_block0.m(div7, null); + append2(div17, t6); + append2(div17, div16); + append2(div16, div15); + append2(div15, div8); + append2(div15, t7); + append2(div15, div9); + append2(div15, t9); + append2(div15, div14); + append2(div14, div12); + append2(div12, div10); + append2(div12, t10); + append2(div12, div11); + ctx[36](div11); + append2(div14, t11); + append2(div14, div13); + append2(div13, t12); + append2(div16, t13); + if (if_block1) if_block1.m(div16, null); + append2(div17, t14); + if (if_block2) if_block2.m(div17, null); + current = true; + if (!mounted) { + dispose = [ + listen(div2, "click", stop_propagation( + /*unstageAll*/ + ctx[19] + )), + listen( + div6, + "click", + /*click_handler_2*/ + ctx[35] + ), + listen(div10, "click", stop_propagation( + /*discard*/ + ctx[22] + )), + listen(div11, "click", stop_propagation( + /*stageAll*/ + ctx[18] + )), + listen( + div15, + "click", + /*click_handler_3*/ + ctx[37] + ) + ]; + mounted = true; + } + }, + p(ctx2, dirty) { + if (!current || dirty[0] & /*stagedOpen*/ + 8192) { + toggle_class(div0, "is-collapsed", !/*stagedOpen*/ + ctx2[13]); + } + if ((!current || dirty[0] & /*status*/ + 64) && t4_value !== (t4_value = /*status*/ + ctx2[6].staged.length + "")) set_data(t4, t4_value); + if ( + /*stagedOpen*/ + ctx2[13] + ) { + if (if_block0) { + if_block0.p(ctx2, dirty); + if (dirty[0] & /*stagedOpen*/ + 8192) { + transition_in(if_block0, 1); + } + } else { + if_block0 = create_if_block_6(ctx2); + if_block0.c(); + transition_in(if_block0, 1); + if_block0.m(div7, null); + } + } else if (if_block0) { + group_outros(); + transition_out(if_block0, 1, 1, () => { + if_block0 = null; + }); + check_outros(); + } + if (!current || dirty[0] & /*stagedOpen*/ + 8192) { + toggle_class(div7, "is-collapsed", !/*stagedOpen*/ + ctx2[13]); + } + if (!current || dirty[0] & /*changesOpen*/ + 4096) { + toggle_class(div8, "is-collapsed", !/*changesOpen*/ + ctx2[12]); + } + if ((!current || dirty[0] & /*status*/ + 64) && t12_value !== (t12_value = /*status*/ + ctx2[6].changed.length + "")) set_data(t12, t12_value); + if ( + /*changesOpen*/ + ctx2[12] + ) { + if (if_block1) { + if_block1.p(ctx2, dirty); + if (dirty[0] & /*changesOpen*/ + 4096) { + transition_in(if_block1, 1); + } + } else { + if_block1 = create_if_block_43(ctx2); + if_block1.c(); + transition_in(if_block1, 1); + if_block1.m(div16, null); + } + } else if (if_block1) { + group_outros(); + transition_out(if_block1, 1, 1, () => { + if_block1 = null; + }); + check_outros(); + } + if (!current || dirty[0] & /*changesOpen*/ + 4096) { + toggle_class(div16, "is-collapsed", !/*changesOpen*/ + ctx2[12]); + } + if ( + /*lastPulledFiles*/ + ctx2[7].length > 0 + ) { + if (if_block2) { + if_block2.p(ctx2, dirty); + if (dirty[0] & /*lastPulledFiles*/ + 128) { + transition_in(if_block2, 1); + } + } else { + if_block2 = create_if_block_14(ctx2); + if_block2.c(); + transition_in(if_block2, 1); + if_block2.m(div17, null); + } + } else if (if_block2) { + group_outros(); + transition_out(if_block2, 1, 1, () => { + if_block2 = null; + }); + check_outros(); + } + }, + i(local) { + if (current) return; + transition_in(if_block0); + transition_in(if_block1); + transition_in(if_block2); + current = true; + }, + o(local) { + transition_out(if_block0); + transition_out(if_block1); + transition_out(if_block2); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div18); + } + ctx[34](null); + if (if_block0) if_block0.d(); + ctx[36](null); + if (if_block1) if_block1.d(); + if (if_block2) if_block2.d(); + mounted = false; + run_all(dispose); + } + }; +} +function create_if_block_6(ctx) { + let div; + let current_block_type_index; + let if_block; + let div_transition; + let current; + const if_block_creators = [create_if_block_7, create_else_block_2]; + const if_blocks = []; + function select_block_type(ctx2, dirty) { + if ( + /*showTree*/ + ctx2[3] + ) return 0; + return 1; + } + current_block_type_index = select_block_type(ctx, [-1, -1]); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + div = element("div"); + if_block.c(); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + if_blocks[current_block_type_index].m(div, null); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div, null); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + if_blocks[current_block_type_index].d(); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_else_block_2(ctx) { + let each_1_anchor; + let current; + let each_value_2 = ensure_array_like( + /*status*/ + ctx[6].staged + ); + let each_blocks = []; + for (let i = 0; i < each_value_2.length; i += 1) { + each_blocks[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + each_1_anchor = empty(); + }, + m(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(target, anchor); + } + } + insert(target, each_1_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + if (dirty[0] & /*status, view, plugin*/ + 67) { + each_value_2 = ensure_array_like( + /*status*/ + ctx2[6].staged + ); + let i; + for (i = 0; i < each_value_2.length; i += 1) { + const child_ctx = get_each_context_2(ctx2, each_value_2, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block_2(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); + } + } + group_outros(); + for (i = each_value_2.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value_2.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(each_1_anchor); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_if_block_7(ctx) { + let treecomponent; + let current; + treecomponent = new treeComponent_default({ + props: { + hierarchy: ( + /*stagedHierarchy*/ + ctx[10] + ), + plugin: ( + /*plugin*/ + ctx[0] + ), + view: ( + /*view*/ + ctx[1] + ), + fileType: 0 /* staged */, + topLevel: true + } + }); + return { + c() { + create_component(treecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(treecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const treecomponent_changes = {}; + if (dirty[0] & /*stagedHierarchy*/ + 1024) treecomponent_changes.hierarchy = /*stagedHierarchy*/ + ctx2[10]; + if (dirty[0] & /*plugin*/ + 1) treecomponent_changes.plugin = /*plugin*/ + ctx2[0]; + if (dirty[0] & /*view*/ + 2) treecomponent_changes.view = /*view*/ + ctx2[1]; + treecomponent.$set(treecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(treecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(treecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(treecomponent, detaching); + } + }; +} +function create_each_block_2(ctx) { + let stagedfilecomponent; + let current; + stagedfilecomponent = new stagedFileComponent_default({ + props: { + change: ( + /*stagedFile*/ + ctx[45] + ), + view: ( + /*view*/ + ctx[1] + ), + manager: ( + /*plugin*/ + ctx[0].gitManager + ) + } + }); + return { + c() { + create_component(stagedfilecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(stagedfilecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const stagedfilecomponent_changes = {}; + if (dirty[0] & /*status*/ + 64) stagedfilecomponent_changes.change = /*stagedFile*/ + ctx2[45]; + if (dirty[0] & /*view*/ + 2) stagedfilecomponent_changes.view = /*view*/ + ctx2[1]; + if (dirty[0] & /*plugin*/ + 1) stagedfilecomponent_changes.manager = /*plugin*/ + ctx2[0].gitManager; + stagedfilecomponent.$set(stagedfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(stagedfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(stagedfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(stagedfilecomponent, detaching); + } + }; +} +function create_if_block_43(ctx) { + let div; + let current_block_type_index; + let if_block; + let div_transition; + let current; + const if_block_creators = [create_if_block_52, create_else_block_12]; + const if_blocks = []; + function select_block_type_1(ctx2, dirty) { + if ( + /*showTree*/ + ctx2[3] + ) return 0; + return 1; + } + current_block_type_index = select_block_type_1(ctx, [-1, -1]); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + div = element("div"); + if_block.c(); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + if_blocks[current_block_type_index].m(div, null); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type_1(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div, null); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + if_blocks[current_block_type_index].d(); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_else_block_12(ctx) { + let each_1_anchor; + let current; + let each_value_1 = ensure_array_like( + /*status*/ + ctx[6].changed + ); + let each_blocks = []; + for (let i = 0; i < each_value_1.length; i += 1) { + each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + each_1_anchor = empty(); + }, + m(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(target, anchor); + } + } + insert(target, each_1_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + if (dirty[0] & /*status, view, plugin*/ + 67) { + each_value_1 = ensure_array_like( + /*status*/ + ctx2[6].changed + ); + let i; + for (i = 0; i < each_value_1.length; i += 1) { + const child_ctx = get_each_context_1(ctx2, each_value_1, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block_1(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); + } + } + group_outros(); + for (i = each_value_1.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value_1.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(each_1_anchor); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_if_block_52(ctx) { + let treecomponent; + let current; + treecomponent = new treeComponent_default({ + props: { + hierarchy: ( + /*changeHierarchy*/ + ctx[9] + ), + plugin: ( + /*plugin*/ + ctx[0] + ), + view: ( + /*view*/ + ctx[1] + ), + fileType: 1 /* changed */, + topLevel: true + } + }); + return { + c() { + create_component(treecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(treecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const treecomponent_changes = {}; + if (dirty[0] & /*changeHierarchy*/ + 512) treecomponent_changes.hierarchy = /*changeHierarchy*/ + ctx2[9]; + if (dirty[0] & /*plugin*/ + 1) treecomponent_changes.plugin = /*plugin*/ + ctx2[0]; + if (dirty[0] & /*view*/ + 2) treecomponent_changes.view = /*view*/ + ctx2[1]; + treecomponent.$set(treecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(treecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(treecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(treecomponent, detaching); + } + }; +} +function create_each_block_1(ctx) { + let filecomponent; + let current; + filecomponent = new fileComponent_default({ + props: { + change: ( + /*change*/ + ctx[40] + ), + view: ( + /*view*/ + ctx[1] + ), + manager: ( + /*plugin*/ + ctx[0].gitManager + ) + } + }); + filecomponent.$on("git-refresh", triggerRefresh2); + return { + c() { + create_component(filecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(filecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const filecomponent_changes = {}; + if (dirty[0] & /*status*/ + 64) filecomponent_changes.change = /*change*/ + ctx2[40]; + if (dirty[0] & /*view*/ + 2) filecomponent_changes.view = /*view*/ + ctx2[1]; + if (dirty[0] & /*plugin*/ + 1) filecomponent_changes.manager = /*plugin*/ + ctx2[0].gitManager; + filecomponent.$set(filecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(filecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(filecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(filecomponent, detaching); + } + }; +} +function create_if_block_14(ctx) { + let div3; + let div2; + let div0; + let t0; + let div1; + let t2; + let span; + let t3_value = ( + /*lastPulledFiles*/ + ctx[7].length + "" + ); + let t3; + let t4; + let current; + let mounted; + let dispose; + let if_block = ( + /*lastPulledFilesOpen*/ + ctx[14] && create_if_block_23(ctx) + ); + return { + c() { + div3 = element("div"); + div2 = element("div"); + div0 = element("div"); + div0.innerHTML = ``; + t0 = space(); + div1 = element("div"); + div1.textContent = "Recently Pulled Files"; + t2 = space(); + span = element("span"); + t3 = text(t3_value); + t4 = space(); + if (if_block) if_block.c(); + attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); + attr(div1, "class", "tree-item-inner nav-folder-title-content"); + attr(span, "class", "tree-item-flair"); + attr(div2, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); + attr(div3, "class", "pulled nav-folder"); + toggle_class(div3, "is-collapsed", !/*lastPulledFilesOpen*/ + ctx[14]); + }, + m(target, anchor) { + insert(target, div3, anchor); + append2(div3, div2); + append2(div2, div0); + append2(div2, t0); + append2(div2, div1); + append2(div2, t2); + append2(div2, span); + append2(span, t3); + append2(div3, t4); + if (if_block) if_block.m(div3, null); + current = true; + if (!mounted) { + dispose = listen( + div2, + "click", + /*click_handler_4*/ + ctx[38] + ); + mounted = true; + } + }, + p(ctx2, dirty) { + if ((!current || dirty[0] & /*lastPulledFiles*/ + 128) && t3_value !== (t3_value = /*lastPulledFiles*/ + ctx2[7].length + "")) set_data(t3, t3_value); + if ( + /*lastPulledFilesOpen*/ + ctx2[14] + ) { + if (if_block) { + if_block.p(ctx2, dirty); + if (dirty[0] & /*lastPulledFilesOpen*/ + 16384) { + transition_in(if_block, 1); + } + } else { + if_block = create_if_block_23(ctx2); + if_block.c(); + transition_in(if_block, 1); + if_block.m(div3, null); + } + } else if (if_block) { + group_outros(); + transition_out(if_block, 1, 1, () => { + if_block = null; + }); + check_outros(); + } + if (!current || dirty[0] & /*lastPulledFilesOpen*/ + 16384) { + toggle_class(div3, "is-collapsed", !/*lastPulledFilesOpen*/ + ctx2[14]); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + o(local) { + transition_out(if_block); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div3); + } + if (if_block) if_block.d(); + mounted = false; + dispose(); + } + }; +} +function create_if_block_23(ctx) { + let div; + let current_block_type_index; + let if_block; + let div_transition; + let current; + const if_block_creators = [create_if_block_33, create_else_block4]; + const if_blocks = []; + function select_block_type_2(ctx2, dirty) { + if ( + /*showTree*/ + ctx2[3] + ) return 0; + return 1; + } + current_block_type_index = select_block_type_2(ctx, [-1, -1]); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + div = element("div"); + if_block.c(); + attr(div, "class", "tree-item-children nav-folder-children"); + }, + m(target, anchor) { + insert(target, div, anchor); + if_blocks[current_block_type_index].m(div, null); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type_2(ctx2, dirty); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div, null); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + if (local) { + add_render_callback(() => { + if (!current) return; + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); + div_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block); + if (local) { + if (!div_transition) div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); + div_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + if_blocks[current_block_type_index].d(); + if (detaching && div_transition) div_transition.end(); + } + }; +} +function create_else_block4(ctx) { + let each_1_anchor; + let current; + let each_value = ensure_array_like( + /*lastPulledFiles*/ + ctx[7] + ); + let each_blocks = []; + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block5(get_each_context5(ctx, each_value, i)); + } + const out = (i) => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + return { + c() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + each_1_anchor = empty(); + }, + m(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(target, anchor); + } + } + insert(target, each_1_anchor, anchor); + current = true; + }, + p(ctx2, dirty) { + if (dirty[0] & /*lastPulledFiles, view*/ + 130) { + each_value = ensure_array_like( + /*lastPulledFiles*/ + ctx2[7] + ); + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context5(ctx2, each_value, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block5(child_ctx); + each_blocks[i].c(); + transition_in(each_blocks[i], 1); + each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); + } + } + group_outros(); + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + check_outros(); + } + }, + i(local) { + if (current) return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(each_1_anchor); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_if_block_33(ctx) { + let treecomponent; + let current; + treecomponent = new treeComponent_default({ + props: { + hierarchy: ( + /*lastPulledFilesHierarchy*/ + ctx[11] + ), + plugin: ( + /*plugin*/ + ctx[0] + ), + view: ( + /*view*/ + ctx[1] + ), + fileType: 2 /* pulled */, + topLevel: true + } + }); + return { + c() { + create_component(treecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(treecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const treecomponent_changes = {}; + if (dirty[0] & /*lastPulledFilesHierarchy*/ + 2048) treecomponent_changes.hierarchy = /*lastPulledFilesHierarchy*/ + ctx2[11]; + if (dirty[0] & /*plugin*/ + 1) treecomponent_changes.plugin = /*plugin*/ + ctx2[0]; + if (dirty[0] & /*view*/ + 2) treecomponent_changes.view = /*view*/ + ctx2[1]; + treecomponent.$set(treecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(treecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(treecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(treecomponent, detaching); + } + }; +} +function create_each_block5(ctx) { + let pulledfilecomponent; + let current; + pulledfilecomponent = new pulledFileComponent_default({ + props: { + change: ( + /*change*/ + ctx[40] + ), + view: ( + /*view*/ + ctx[1] + ) + } + }); + pulledfilecomponent.$on("git-refresh", triggerRefresh2); + return { + c() { + create_component(pulledfilecomponent.$$.fragment); + }, + m(target, anchor) { + mount_component(pulledfilecomponent, target, anchor); + current = true; + }, + p(ctx2, dirty) { + const pulledfilecomponent_changes = {}; + if (dirty[0] & /*lastPulledFiles*/ + 128) pulledfilecomponent_changes.change = /*change*/ + ctx2[40]; + if (dirty[0] & /*view*/ + 2) pulledfilecomponent_changes.view = /*view*/ + ctx2[1]; + pulledfilecomponent.$set(pulledfilecomponent_changes); + }, + i(local) { + if (current) return; + transition_in(pulledfilecomponent.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(pulledfilecomponent.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(pulledfilecomponent, detaching); + } + }; +} +function create_fragment9(ctx) { + let main; + let div9; + let div8; + let div0; + let t0; + let div1; + let t1; + let div2; + let t2; + let div3; + let t3; + let div4; + let t4; + let div5; + let t5; + let div6; + let t6; + let div7; + let t7; + let div10; + let textarea; + let t8; + let t9; + let div11; + let main_data_type_value; + let current; + let mounted; + let dispose; + let if_block0 = ( + /*commitMessage*/ + ctx[2] && create_if_block_8(ctx) + ); + let if_block1 = ( + /*status*/ + ctx[6] && /*stagedHierarchy*/ + ctx[10] && /*changeHierarchy*/ + ctx[9] && create_if_block8(ctx) + ); + return { + c() { + main = element("main"); + div9 = element("div"); + div8 = element("div"); + div0 = element("div"); + t0 = space(); + div1 = element("div"); + t1 = space(); + div2 = element("div"); + t2 = space(); + div3 = element("div"); + t3 = space(); + div4 = element("div"); + t4 = space(); + div5 = element("div"); + t5 = space(); + div6 = element("div"); + t6 = space(); + div7 = element("div"); + t7 = space(); + div10 = element("div"); + textarea = element("textarea"); + t8 = space(); + if (if_block0) if_block0.c(); + t9 = space(); + div11 = element("div"); + if (if_block1) if_block1.c(); + attr(div0, "id", "backup-btn"); + attr(div0, "data-icon", "arrow-up-circle"); + attr(div0, "class", "clickable-icon nav-action-button"); + attr(div0, "aria-label", "Backup"); + attr(div1, "id", "commit-btn"); + attr(div1, "data-icon", "check"); + attr(div1, "class", "clickable-icon nav-action-button"); + attr(div1, "aria-label", "Commit"); + attr(div2, "id", "stage-all"); + attr(div2, "class", "clickable-icon nav-action-button"); + attr(div2, "data-icon", "plus-circle"); + attr(div2, "aria-label", "Stage all"); + attr(div3, "id", "unstage-all"); + attr(div3, "class", "clickable-icon nav-action-button"); + attr(div3, "data-icon", "minus-circle"); + attr(div3, "aria-label", "Unstage all"); + attr(div4, "id", "push"); + attr(div4, "class", "clickable-icon nav-action-button"); + attr(div4, "data-icon", "upload"); + attr(div4, "aria-label", "Push"); + attr(div5, "id", "pull"); + attr(div5, "class", "clickable-icon nav-action-button"); + attr(div5, "data-icon", "download"); + attr(div5, "aria-label", "Pull"); + attr(div6, "id", "layoutChange"); + attr(div6, "class", "clickable-icon nav-action-button"); + attr(div6, "aria-label", "Change Layout"); + attr(div7, "id", "refresh"); + attr(div7, "class", "clickable-icon nav-action-button"); + attr(div7, "data-icon", "refresh-cw"); + attr(div7, "aria-label", "Refresh"); + set_style(div7, "margin", "1px"); + toggle_class( + div7, + "loading", + /*loading*/ + ctx[5] + ); + attr(div8, "class", "nav-buttons-container"); + attr(div9, "class", "nav-header"); + attr( + textarea, + "rows", + /*rows*/ + ctx[15] + ); + attr(textarea, "class", "commit-msg-input svelte-11adhly"); + attr(textarea, "spellcheck", "true"); + attr(textarea, "placeholder", "Commit Message"); + attr(div10, "class", "git-commit-msg svelte-11adhly"); + attr(div11, "class", "nav-files-container"); + set_style(div11, "position", "relative"); + attr(main, "data-type", main_data_type_value = SOURCE_CONTROL_VIEW_CONFIG.type); + attr(main, "class", "svelte-11adhly"); + }, + m(target, anchor) { + insert(target, main, anchor); + append2(main, div9); + append2(div9, div8); + append2(div8, div0); + ctx[23](div0); + append2(div8, t0); + append2(div8, div1); + ctx[24](div1); + append2(div8, t1); + append2(div8, div2); + ctx[25](div2); + append2(div8, t2); + append2(div8, div3); + ctx[26](div3); + append2(div8, t3); + append2(div8, div4); + ctx[27](div4); + append2(div8, t4); + append2(div8, div5); + ctx[28](div5); + append2(div8, t5); + append2(div8, div6); + ctx[29](div6); + append2(div8, t6); + append2(div8, div7); + ctx[31](div7); + append2(main, t7); + append2(main, div10); + append2(div10, textarea); + set_input_value( + textarea, + /*commitMessage*/ + ctx[2] + ); + append2(div10, t8); + if (if_block0) if_block0.m(div10, null); + append2(main, t9); + append2(main, div11); + if (if_block1) if_block1.m(div11, null); + current = true; + if (!mounted) { + dispose = [ + listen( + div0, + "click", + /*backup*/ + ctx[17] + ), + listen( + div1, + "click", + /*commit*/ + ctx[16] + ), + listen( + div2, + "click", + /*stageAll*/ + ctx[18] + ), + listen( + div3, + "click", + /*unstageAll*/ + ctx[19] + ), + listen( + div4, + "click", + /*push*/ + ctx[20] + ), + listen( + div5, + "click", + /*pull*/ + ctx[21] + ), + listen( + div6, + "click", + /*click_handler*/ + ctx[30] + ), + listen(div7, "click", triggerRefresh2), + listen( + textarea, + "input", + /*textarea_input_handler*/ + ctx[32] + ) + ]; + mounted = true; + } + }, + p(ctx2, dirty) { + if (!current || dirty[0] & /*loading*/ + 32) { + toggle_class( + div7, + "loading", + /*loading*/ + ctx2[5] + ); + } + if (!current || dirty[0] & /*rows*/ + 32768) { + attr( + textarea, + "rows", + /*rows*/ + ctx2[15] + ); + } + if (dirty[0] & /*commitMessage*/ + 4) { + set_input_value( + textarea, + /*commitMessage*/ + ctx2[2] + ); + } + if ( + /*commitMessage*/ + ctx2[2] + ) { + if (if_block0) { + if_block0.p(ctx2, dirty); + } else { + if_block0 = create_if_block_8(ctx2); + if_block0.c(); + if_block0.m(div10, null); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + if ( + /*status*/ + ctx2[6] && /*stagedHierarchy*/ + ctx2[10] && /*changeHierarchy*/ + ctx2[9] + ) { + if (if_block1) { + if_block1.p(ctx2, dirty); + if (dirty[0] & /*status, stagedHierarchy, changeHierarchy*/ + 1600) { + transition_in(if_block1, 1); + } + } else { + if_block1 = create_if_block8(ctx2); + if_block1.c(); + transition_in(if_block1, 1); + if_block1.m(div11, null); + } + } else if (if_block1) { + group_outros(); + transition_out(if_block1, 1, 1, () => { + if_block1 = null; + }); + check_outros(); + } + }, + i(local) { + if (current) return; + transition_in(if_block1); + current = true; + }, + o(local) { + transition_out(if_block1); + current = false; + }, + d(detaching) { + if (detaching) { + detach(main); + } + ctx[23](null); + ctx[24](null); + ctx[25](null); + ctx[26](null); + ctx[27](null); + ctx[28](null); + ctx[29](null); + ctx[31](null); + if (if_block0) if_block0.d(); + if (if_block1) if_block1.d(); + mounted = false; + run_all(dispose); + } + }; +} +function triggerRefresh2() { + dispatchEvent(new CustomEvent("git-refresh")); +} +function instance9($$self, $$props, $$invalidate) { + let rows; + let { plugin } = $$props; + let { view } = $$props; + let loading; + let status2; + let lastPulledFiles = []; + let commitMessage = plugin.settings.commitMessage; + let buttons = []; + let changeHierarchy; + let stagedHierarchy; + let lastPulledFilesHierarchy; + let changesOpen = true; + let stagedOpen = true; + let lastPulledFilesOpen = true; + let showTree = plugin.settings.treeStructure; + let layoutBtn; + addEventListener("git-view-refresh", refresh); + plugin.app.workspace.onLayoutReady(() => { + window.setTimeout( + () => { + buttons.forEach((btn) => (0, import_obsidian29.setIcon)(btn, btn.getAttr("data-icon"))); + (0, import_obsidian29.setIcon)(layoutBtn, showTree ? "list" : "folder"); + }, + 0 + ); + }); + onDestroy(() => { + removeEventListener("git-view-refresh", refresh); + }); + function commit2() { + return __awaiter(this, void 0, void 0, function* () { + $$invalidate(5, loading = true); + if (status2) { + if (yield plugin.hasTooBigFiles(status2.staged)) { + plugin.setState(0 /* idle */); + return false; + } + plugin.promiseQueue.addTask(() => plugin.gitManager.commit({ message: commitMessage }).then(() => { + if (commitMessage !== plugin.settings.commitMessage) { + $$invalidate(2, commitMessage = ""); + } + plugin.setUpAutoBackup(); + }).finally(triggerRefresh2)); + } + }); + } + function backup() { + return __awaiter(this, void 0, void 0, function* () { + $$invalidate(5, loading = true); + if (status2) { + plugin.promiseQueue.addTask(() => plugin.createBackup(false, false, commitMessage).then(() => { + if (commitMessage !== plugin.settings.commitMessage) { + $$invalidate(2, commitMessage = ""); + } + }).finally(triggerRefresh2)); + } + }); + } + function refresh() { + return __awaiter(this, void 0, void 0, function* () { + if (!plugin.gitReady) { + $$invalidate(6, status2 = void 0); + return; + } + const unPushedCommits = yield plugin.gitManager.getUnpushedCommits(); + buttons.forEach((btn) => { + var _a2, _b; + if (import_obsidian29.Platform.isMobile) { + btn.removeClass("button-border"); + if (btn.id == "push" && unPushedCommits > 0) { + btn.addClass("button-border"); + } + } else { + (_a2 = btn.firstElementChild) === null || _a2 === void 0 ? void 0 : _a2.removeAttribute("color"); + if (btn.id == "push" && unPushedCommits > 0) { + (_b = btn.firstElementChild) === null || _b === void 0 ? void 0 : _b.setAttr("color", "var(--text-accent)"); + } + } + }); + $$invalidate(6, status2 = plugin.cachedStatus); + if (plugin.lastPulledFiles && plugin.lastPulledFiles != lastPulledFiles) { + $$invalidate(7, lastPulledFiles = plugin.lastPulledFiles); + $$invalidate(11, lastPulledFilesHierarchy = { + title: "", + path: "", + vaultPath: "", + children: plugin.gitManager.getTreeStructure(lastPulledFiles) + }); + } + if (status2) { + const sort = (a, b) => { + return a.vault_path.split("/").last().localeCompare(getDisplayPath(b.vault_path)); + }; + status2.changed.sort(sort); + status2.staged.sort(sort); + if (status2.changed.length + status2.staged.length > 500) { + $$invalidate(6, status2 = void 0); + if (!plugin.loading) { + plugin.displayError("Too many changes to display"); + } + } else { + $$invalidate(9, changeHierarchy = { + title: "", + path: "", + vaultPath: "", + children: plugin.gitManager.getTreeStructure(status2.changed) + }); + $$invalidate(10, stagedHierarchy = { + title: "", + path: "", + vaultPath: "", + children: plugin.gitManager.getTreeStructure(status2.staged) + }); + } + } else { + $$invalidate(9, changeHierarchy = void 0); + $$invalidate(10, stagedHierarchy = void 0); + } + $$invalidate(5, loading = plugin.loading); + }); + } + function stageAll() { + $$invalidate(5, loading = true); + plugin.promiseQueue.addTask(() => plugin.gitManager.stageAll({ status: status2 }).finally(triggerRefresh2)); + } + function unstageAll() { + $$invalidate(5, loading = true); + plugin.promiseQueue.addTask(() => plugin.gitManager.unstageAll({ status: status2 }).finally(triggerRefresh2)); + } + function push2() { + $$invalidate(5, loading = true); + plugin.promiseQueue.addTask(() => plugin.push().finally(triggerRefresh2)); + } + function pull2() { + $$invalidate(5, loading = true); + plugin.promiseQueue.addTask(() => plugin.pullChangesFromRemote().finally(triggerRefresh2)); + } + function discard() { + new DiscardModal(view.app, false, plugin.gitManager.getRelativeVaultPath("/")).myOpen().then((shouldDiscard) => { + if (shouldDiscard === true) { + plugin.promiseQueue.addTask(() => plugin.gitManager.discardAll({ status: plugin.cachedStatus }).finally(() => { + dispatchEvent(new CustomEvent("git-refresh")); + })); + } + }); + } + function div0_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[5] = $$value; + $$invalidate(8, buttons); + }); + } + function div1_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[0] = $$value; + $$invalidate(8, buttons); + }); + } + function div2_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[1] = $$value; + $$invalidate(8, buttons); + }); + } + function div3_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[2] = $$value; + $$invalidate(8, buttons); + }); + } + function div4_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[3] = $$value; + $$invalidate(8, buttons); + }); + } + function div5_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[4] = $$value; + $$invalidate(8, buttons); + }); + } + function div6_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + layoutBtn = $$value; + $$invalidate(4, layoutBtn); + }); + } + const click_handler = () => { + $$invalidate(3, showTree = !showTree); + $$invalidate(0, plugin.settings.treeStructure = showTree, plugin); + plugin.saveSettings(); + }; + function div7_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[6] = $$value; + $$invalidate(8, buttons); + }); + } + function textarea_input_handler() { + commitMessage = this.value; + $$invalidate(2, commitMessage); + } + const click_handler_1 = () => $$invalidate(2, commitMessage = ""); + function div2_binding_1($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[8] = $$value; + $$invalidate(8, buttons); + }); + } + const click_handler_2 = () => $$invalidate(13, stagedOpen = !stagedOpen); + function div11_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + buttons[9] = $$value; + $$invalidate(8, buttons); + }); + } + const click_handler_3 = () => $$invalidate(12, changesOpen = !changesOpen); + const click_handler_4 = () => $$invalidate(14, lastPulledFilesOpen = !lastPulledFilesOpen); + $$self.$$set = ($$props2) => { + if ("plugin" in $$props2) $$invalidate(0, plugin = $$props2.plugin); + if ("view" in $$props2) $$invalidate(1, view = $$props2.view); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty[0] & /*layoutBtn, showTree*/ + 24) { + $: { + if (layoutBtn) { + layoutBtn.empty(); + (0, import_obsidian29.setIcon)(layoutBtn, showTree ? "list" : "folder"); + } + } + } + if ($$self.$$.dirty[0] & /*commitMessage*/ + 4) { + $: $$invalidate(15, rows = (commitMessage.match(/\n/g) || []).length + 1 || 1); + } + }; + return [ + plugin, + view, + commitMessage, + showTree, + layoutBtn, + loading, + status2, + lastPulledFiles, + buttons, + changeHierarchy, + stagedHierarchy, + lastPulledFilesHierarchy, + changesOpen, + stagedOpen, + lastPulledFilesOpen, + rows, + commit2, + backup, + stageAll, + unstageAll, + push2, + pull2, + discard, + div0_binding, + div1_binding, + div2_binding, + div3_binding, + div4_binding, + div5_binding, + div6_binding, + click_handler, + div7_binding, + textarea_input_handler, + click_handler_1, + div2_binding_1, + click_handler_2, + div11_binding, + click_handler_3, + click_handler_4 + ]; +} +var SourceControl = class extends SvelteComponent { + constructor(options) { + super(); + init2(this, options, instance9, create_fragment9, safe_not_equal, { plugin: 0, view: 1 }, add_css7, [-1, -1]); + } +}; +var sourceControl_default = SourceControl; + +// src/ui/sourceControl/sourceControl.ts +var GitView = class extends import_obsidian30.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.plugin = plugin; + this.hoverPopover = null; + } + getViewType() { + return SOURCE_CONTROL_VIEW_CONFIG.type; + } + getDisplayText() { + return SOURCE_CONTROL_VIEW_CONFIG.name; + } + getIcon() { + return SOURCE_CONTROL_VIEW_CONFIG.icon; + } + onClose() { + return super.onClose(); + } + onOpen() { + this._view = new sourceControl_default({ + target: this.contentEl, + props: { + plugin: this.plugin, + view: this + } + }); + return super.onOpen(); + } +}; + +// src/ui/statusBar/branchStatusBar.ts +init_polyfill_buffer(); +var BranchStatusBar = class { + constructor(statusBarEl, plugin) { + this.statusBarEl = statusBarEl; + this.plugin = plugin; + this.statusBarEl.addClass("mod-clickable"); + this.statusBarEl.onClickEvent((e) => { + this.plugin.switchBranch(); + }); + } + async display() { + if (this.plugin.gitReady) { + const branchInfo = await this.plugin.gitManager.branchInfo(); + if (branchInfo.current != void 0) { + this.statusBarEl.setText(branchInfo.current); + } else { + this.statusBarEl.empty(); + } + } else { + this.statusBarEl.empty(); + } + } +}; + +// src/main.ts +var ObsidianGit = class extends import_obsidian31.Plugin { + constructor() { + super(...arguments); + this.gitReady = false; + this.promiseQueue = new PromiseQueue(); + this.conflictOutputFile = "conflict-files-obsidian-git.md"; + this.offlineMode = false; + this.loading = false; + this.lineAuthoringFeature = new LineAuthoringFeature(this); + } + setState(state) { + var _a2; + this.state = state; + (_a2 = this.statusBar) == null ? void 0 : _a2.display(); + } + async updateCachedStatus() { + this.cachedStatus = await this.gitManager.status(); + return this.cachedStatus; + } + async refresh() { + const gitView = this.app.workspace.getLeavesOfType( + SOURCE_CONTROL_VIEW_CONFIG.type + ); + const historyView = this.app.workspace.getLeavesOfType( + HISTORY_VIEW_CONFIG.type + ); + if (this.settings.changedFilesInStatusBar || gitView.length > 0 || historyView.length > 0) { + this.loading = true; + dispatchEvent(new CustomEvent("git-view-refresh")); + await this.updateCachedStatus(); + this.loading = false; + dispatchEvent(new CustomEvent("git-view-refresh")); + } + } + async refreshUpdatedHead() { + this.lineAuthoringFeature.refreshLineAuthorViews(); + } + async onload() { + console.log("loading " + this.manifest.name + " plugin"); + pluginRef.plugin = this; + this.localStorage = new LocalStorageSettings(this); + this.localStorage.migrate(); + await this.loadSettings(); + this.migrateSettings(); + this.settingsTab = new ObsidianGitSettingsTab(this.app, this); + this.addSettingTab(this.settingsTab); + if (!this.localStorage.getPluginDisabled()) { + this.loadPlugin(); + } + } + async loadPlugin() { + addEventListener("git-refresh", this.refresh.bind(this)); + addEventListener("git-head-update", this.refreshUpdatedHead.bind(this)); + this.registerView(SOURCE_CONTROL_VIEW_CONFIG.type, (leaf) => { + return new GitView(leaf, this); + }); + this.registerView(HISTORY_VIEW_CONFIG.type, (leaf) => { + return new HistoryView2(leaf, this); + }); + this.registerView(DIFF_VIEW_CONFIG.type, (leaf) => { + return new DiffView(leaf, this); + }); + this.lineAuthoringFeature.onLoadPlugin(); + this.app.workspace.registerHoverLinkSource( + SOURCE_CONTROL_VIEW_CONFIG.type, + { + display: "Git View", + defaultMod: true + } + ); + this.setRefreshDebouncer(); + this.addCommand({ + id: "edit-gitignore", + name: "Edit .gitignore", + callback: async () => { + const path2 = this.gitManager.getRelativeVaultPath(".gitignore"); + if (!await this.app.vault.adapter.exists(path2)) { + this.app.vault.adapter.write(path2, ""); + } + const content = await this.app.vault.adapter.read(path2); + const modal = new IgnoreModal(this.app, content); + const res = await modal.open(); + if (res !== void 0) { + await this.app.vault.adapter.write(path2, res); + this.refresh(); + } + } + }); + this.addCommand({ + id: "open-git-view", + name: "Open source control view", + callback: async () => { + var _a2; + const leafs = this.app.workspace.getLeavesOfType( + SOURCE_CONTROL_VIEW_CONFIG.type + ); + let leaf; + if (leafs.length === 0) { + leaf = (_a2 = this.app.workspace.getRightLeaf(false)) != null ? _a2 : this.app.workspace.getLeaf(); + await leaf.setViewState({ + type: SOURCE_CONTROL_VIEW_CONFIG.type + }); + } else { + leaf = leafs.first(); + } + this.app.workspace.revealLeaf(leaf); + dispatchEvent(new CustomEvent("git-refresh")); + } + }); + this.addCommand({ + id: "open-history-view", + name: "Open history view", + callback: async () => { + var _a2; + const leafs = this.app.workspace.getLeavesOfType( + HISTORY_VIEW_CONFIG.type + ); + let leaf; + if (leafs.length === 0) { + leaf = (_a2 = this.app.workspace.getRightLeaf(false)) != null ? _a2 : this.app.workspace.getLeaf(); + await leaf.setViewState({ + type: HISTORY_VIEW_CONFIG.type + }); + } else { + leaf = leafs.first(); + } + this.app.workspace.revealLeaf(leaf); + dispatchEvent(new CustomEvent("git-refresh")); + } + }); + this.addCommand({ + id: "open-diff-view", + name: "Open diff view", + checkCallback: (checking) => { + var _a2; + const file = this.app.workspace.getActiveFile(); + if (checking) { + return file !== null; + } else { + (_a2 = getNewLeaf()) == null ? void 0 : _a2.setViewState({ + type: DIFF_VIEW_CONFIG.type, + active: true, + state: { + staged: false, + file: this.gitManager.getRelativeRepoPath( + file.path, + true + ) + } + }); + } + } + }); + this.addCommand({ + id: "view-file-on-github", + name: "Open file on GitHub", + editorCallback: (editor, { file }) => { + if (file) + return openLineInGitHub(editor, file, this.gitManager); + } + }); + this.addCommand({ + id: "view-history-on-github", + name: "Open file history on GitHub", + editorCallback: (_, { file }) => { + if (file) return openHistoryInGitHub(file, this.gitManager); + } + }); + this.addCommand({ + id: "pull", + name: "Pull", + callback: () => this.promiseQueue.addTask(() => this.pullChangesFromRemote()) + }); + this.addCommand({ + id: "fetch", + name: "fetch", + callback: () => this.promiseQueue.addTask(() => this.fetch()) + }); + this.addCommand({ + id: "switch-to-remote-branch", + name: "Switch to remote branch", + callback: () => this.promiseQueue.addTask(() => this.switchRemoteBranch()) + }); + this.addCommand({ + id: "add-to-gitignore", + name: "Add file to gitignore", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (checking) { + return file !== null; + } else { + this.addFileToGitignore(file); + } + } + }); + this.addCommand({ + id: "push", + name: "Create backup", + callback: () => this.promiseQueue.addTask(() => this.createBackup(false)) + }); + this.addCommand({ + id: "backup-and-close", + name: "Create backup and close", + callback: () => this.promiseQueue.addTask(async () => { + await this.createBackup(false); + window.close(); + }) + }); + this.addCommand({ + id: "commit-push-specified-message", + name: "Create backup with specific message", + callback: () => this.promiseQueue.addTask(() => this.createBackup(false, true)) + }); + this.addCommand({ + id: "commit", + name: "Commit all changes", + callback: () => this.promiseQueue.addTask( + () => this.commit({ fromAutoBackup: false }) + ) + }); + this.addCommand({ + id: "commit-specified-message", + name: "Commit all changes with specific message", + callback: () => this.promiseQueue.addTask( + () => this.commit({ + fromAutoBackup: false, + requestCustomMessage: true + }) + ) + }); + this.addCommand({ + id: "commit-staged", + name: "Commit staged", + callback: () => this.promiseQueue.addTask( + () => this.commit({ + fromAutoBackup: false, + requestCustomMessage: false, + onlyStaged: true + }) + ) + }); + if (import_obsidian31.Platform.isDesktopApp) { + this.addCommand({ + id: "commit-amend-staged-specified-message", + name: "Commit Amend", + callback: () => this.promiseQueue.addTask( + () => this.commit({ + fromAutoBackup: false, + requestCustomMessage: true, + onlyStaged: true, + amend: true + }) + ) + }); + } + this.addCommand({ + id: "commit-staged-specified-message", + name: "Commit staged with specific message", + callback: () => this.promiseQueue.addTask( + () => this.commit({ + fromAutoBackup: false, + requestCustomMessage: true, + onlyStaged: true + }) + ) + }); + this.addCommand({ + id: "push2", + name: "Push", + callback: () => this.promiseQueue.addTask(() => this.push()) + }); + this.addCommand({ + id: "stage-current-file", + name: "Stage current file", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (checking) { + return file !== null; + } else { + this.promiseQueue.addTask(() => this.stageFile(file)); + } + } + }); + this.addCommand({ + id: "unstage-current-file", + name: "Unstage current file", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (checking) { + return file !== null; + } else { + this.promiseQueue.addTask(() => this.unstageFile(file)); + } + } + }); + this.addCommand({ + id: "edit-remotes", + name: "Edit remotes", + callback: async () => this.editRemotes() + }); + this.addCommand({ + id: "remove-remote", + name: "Remove remote", + callback: async () => this.removeRemote() + }); + this.addCommand({ + id: "set-upstream-branch", + name: "Set upstream branch", + callback: async () => this.setUpstreamBranch() + }); + this.addCommand({ + id: "delete-repo", + name: "CAUTION: Delete repository", + callback: async () => { + const repoExists = await this.app.vault.adapter.exists( + `${this.settings.basePath}/.git` + ); + if (repoExists) { + const modal = new GeneralModal({ + options: ["NO", "YES"], + placeholder: "Do you really want to delete the repository (.git directory)? This action cannot be undone.", + onlySelection: true + }); + const shouldDelete = await modal.open() === "YES"; + if (shouldDelete) { + await this.app.vault.adapter.rmdir( + `${this.settings.basePath}/.git`, + true + ); + new import_obsidian31.Notice( + "Successfully deleted repository. Reloading plugin..." + ); + this.unloadPlugin(); + this.init(); + } + } else { + new import_obsidian31.Notice("No repository found"); + } + } + }); + this.addCommand({ + id: "init-repo", + name: "Initialize a new repo", + callback: async () => this.createNewRepo() + }); + this.addCommand({ + id: "clone-repo", + name: "Clone an existing remote repo", + callback: async () => this.cloneNewRepo() + }); + this.addCommand({ + id: "list-changed-files", + name: "List changed files", + callback: async () => { + if (!await this.isAllInitialized()) return; + const status2 = await this.gitManager.status(); + console.log(status2); + this.setState(0 /* idle */); + if (status2.changed.length + status2.staged.length > 500) { + this.displayError("Too many changes to display"); + return; + } + new ChangedFilesModal(this, status2.all).open(); + } + }); + this.addCommand({ + id: "switch-branch", + name: "Switch branch", + callback: () => { + this.switchBranch(); + } + }); + this.addCommand({ + id: "create-branch", + name: "Create new branch", + callback: () => { + this.createBranch(); + } + }); + this.addCommand({ + id: "delete-branch", + name: "Delete branch", + callback: () => { + this.deleteBranch(); + } + }); + this.addCommand({ + id: "discard-all", + name: "CAUTION: Discard all changes", + callback: async () => { + if (!await this.isAllInitialized()) return false; + const modal = new GeneralModal({ + options: ["NO", "YES"], + placeholder: "Do you want to discard all changes to tracked files? This action cannot be undone.", + onlySelection: true + }); + const shouldDiscardAll = await modal.open() === "YES"; + if (shouldDiscardAll) { + this.promiseQueue.addTask(() => this.discardAll()); + } + } + }); + this.addCommand({ + id: "toggle-line-author-info", + name: "Toggle line author information", + callback: () => { + var _a2; + return (_a2 = this.settingsTab) == null ? void 0 : _a2.configureLineAuthorShowStatus( + !this.settings.lineAuthor.show + ); + } + }); + this.registerEvent( + this.app.workspace.on("file-menu", (menu, file, source) => { + this.handleFileMenu(menu, file, source); + }) + ); + if (this.settings.showStatusBar) { + const statusBarEl = this.addStatusBarItem(); + this.statusBar = new StatusBar(statusBarEl, this); + this.registerInterval( + window.setInterval(() => { + var _a2; + return (_a2 = this.statusBar) == null ? void 0 : _a2.display(); + }, 1e3) + ); + } + if (import_obsidian31.Platform.isDesktop && this.settings.showBranchStatusBar) { + const branchStatusBarEl = this.addStatusBarItem(); + this.branchBar = new BranchStatusBar(branchStatusBarEl, this); + this.registerInterval( + window.setInterval(() => { + var _a2; + return (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + }, 6e4) + ); + } + this.app.workspace.onLayoutReady(() => this.init()); + } + setRefreshDebouncer() { + var _a2; + (_a2 = this.debRefresh) == null ? void 0 : _a2.cancel(); + this.debRefresh = (0, import_obsidian31.debounce)( + () => { + if (this.settings.refreshSourceControl) { + this.refresh(); + } + }, + this.settings.refreshSourceControlTimer, + true + ); + } + async showNotices() { + const length = 1e4; + if (this.manifest.id === "obsidian-git" && import_obsidian31.Platform.isDesktopApp && !this.settings.showedMobileNotice) { + new import_obsidian31.Notice( + "Git is now available on mobile! Please read the plugin's README for more information.", + length + ); + this.settings.showedMobileNotice = true; + await this.saveSettings(); + } + if (this.manifest.id === "obsidian-git-isomorphic") { + new import_obsidian31.Notice( + "Git Mobile is now deprecated. Please uninstall it and install Git instead.", + length + ); + } + } + async addFileToGitignore(file) { + await this.app.vault.adapter.append( + this.gitManager.getRelativeVaultPath(".gitignore"), + "\n" + this.gitManager.getRelativeRepoPath(file.path, true) + ); + this.refresh(); + } + handleFileMenu(menu, file, source) { + if (!this.gitReady) return; + if (!this.settings.showFileMenu) return; + if (!file) return; + if (this.settings.showFileMenu && source == "file-explorer-context-menu") { + menu.addItem((item) => { + item.setTitle(`Git: Stage`).setIcon("plus-circle").setSection("action").onClick((_) => { + this.promiseQueue.addTask(async () => { + if (file instanceof import_obsidian31.TFile) { + await this.gitManager.stage(file.path, true); + } else { + await this.gitManager.stageAll({ + dir: this.gitManager.getRelativeRepoPath( + file.path, + true + ) + }); + } + this.displayMessage(`Staged ${file.path}`); + }); + }); + }); + menu.addItem((item) => { + item.setTitle(`Git: Unstage`).setIcon("minus-circle").setSection("action").onClick((_) => { + this.promiseQueue.addTask(async () => { + if (file instanceof import_obsidian31.TFile) { + await this.gitManager.unstage(file.path, true); + } else { + await this.gitManager.unstageAll({ + dir: this.gitManager.getRelativeRepoPath( + file.path, + true + ) + }); + } + this.displayMessage(`Unstaged ${file.path}`); + }); + }); + }); + menu.addItem((item) => { + item.setTitle(`Git: Add to .gitignore`).setIcon("file-x").setSection("action").onClick((_) => { + this.addFileToGitignore(file); + }); + }); + } + if (source == "git-source-control") { + menu.addItem((item) => { + item.setTitle(`Git: Add to .gitignore`).setIcon("file-x").setSection("action").onClick((_) => { + this.addFileToGitignore(file); + }); + }); + } + } + async migrateSettings() { + if (this.settings.mergeOnPull != void 0) { + this.settings.syncMethod = this.settings.mergeOnPull ? "merge" : "rebase"; + this.settings.mergeOnPull = void 0; + await this.saveSettings(); + } + if (this.settings.autoCommitMessage === void 0) { + this.settings.autoCommitMessage = this.settings.commitMessage; + await this.saveSettings(); + } + if (this.settings.gitPath != void 0) { + this.localStorage.setGitPath(this.settings.gitPath); + this.settings.gitPath = void 0; + await this.saveSettings(); + } + if (this.settings.username != void 0) { + this.localStorage.setPassword(this.settings.username); + this.settings.username = void 0; + await this.saveSettings(); + } + } + unloadPlugin() { + this.gitReady = false; + dispatchEvent(new CustomEvent("git-refresh")); + this.lineAuthoringFeature.deactivateFeature(); + this.clearAutoPull(); + this.clearAutoPush(); + this.clearAutoBackup(); + removeEventListener("git-refresh", this.refresh.bind(this)); + removeEventListener( + "git-head-update", + this.refreshUpdatedHead.bind(this) + ); + this.app.workspace.offref(this.openEvent); + this.app.metadataCache.offref(this.modifyEvent); + this.app.metadataCache.offref(this.deleteEvent); + this.app.metadataCache.offref(this.createEvent); + this.app.metadataCache.offref(this.renameEvent); + this.debRefresh.cancel(); + } + async onunload() { + this.app.workspace.unregisterHoverLinkSource( + SOURCE_CONTROL_VIEW_CONFIG.type + ); + this.unloadPlugin(); + console.log("unloading " + this.manifest.name + " plugin"); + } + async loadSettings() { + let data = await this.loadData(); + if (data == void 0) { + data = { showedMobileNotice: true }; + } + this.settings = mergeSettingsByPriority(DEFAULT_SETTINGS, data); + } + async saveSettings() { + var _a2; + (_a2 = this.settingsTab) == null ? void 0 : _a2.beforeSaveSettings(); + await this.saveData(this.settings); + } + saveLastAuto(date, mode) { + if (mode === "backup") { + this.localStorage.setLastAutoBackup(date.toString()); + } else if (mode === "pull") { + this.localStorage.setLastAutoPull(date.toString()); + } else if (mode === "push") { + this.localStorage.setLastAutoPush(date.toString()); + } + } + loadLastAuto() { + var _a2, _b, _c; + return { + backup: new Date((_a2 = this.localStorage.getLastAutoBackup()) != null ? _a2 : ""), + pull: new Date((_b = this.localStorage.getLastAutoPull()) != null ? _b : ""), + push: new Date((_c = this.localStorage.getLastAutoPush()) != null ? _c : "") + }; + } + get useSimpleGit() { + return import_obsidian31.Platform.isDesktopApp; + } + async init() { + var _a2; + this.showNotices(); + try { + if (this.useSimpleGit) { + this.gitManager = new SimpleGit(this); + await this.gitManager.setGitInstance(); + } else { + this.gitManager = new IsomorphicGit(this); + } + const result = await this.gitManager.checkRequirements(); + switch (result) { + case "missing-git": + this.displayError("Cannot run git command"); + break; + case "missing-repo": + new import_obsidian31.Notice( + "Can't find a valid git repository. Please create one via the given command or clone an existing repo.", + 1e4 + ); + break; + case "valid": + this.gitReady = true; + this.setState(0 /* idle */); + this.openEvent = this.app.workspace.on( + "active-leaf-change", + (leaf) => this.handleViewActiveState(leaf) + ); + this.modifyEvent = this.app.vault.on("modify", () => { + this.debRefresh(); + }); + this.deleteEvent = this.app.vault.on("delete", () => { + this.debRefresh(); + }); + this.createEvent = this.app.vault.on("create", () => { + this.debRefresh(); + }); + this.renameEvent = this.app.vault.on("rename", () => { + this.debRefresh(); + }); + this.registerEvent(this.modifyEvent); + this.registerEvent(this.deleteEvent); + this.registerEvent(this.createEvent); + this.registerEvent(this.renameEvent); + (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + this.lineAuthoringFeature.conditionallyActivateBySettings(); + dispatchEvent(new CustomEvent("git-refresh")); + if (this.settings.autoPullOnBoot) { + this.promiseQueue.addTask( + () => this.pullChangesFromRemote() + ); + } + this.setUpAutos(); + break; + default: + console.log( + "Something weird happened. The 'checkRequirements' result is " + result + ); + } + } catch (error) { + this.displayError(error); + console.error(error); + } + } + async createNewRepo() { + await this.gitManager.init(); + new import_obsidian31.Notice("Initialized new repo"); + await this.init(); + } + async cloneNewRepo() { + const modal = new GeneralModal({ placeholder: "Enter remote URL" }); + const url = await modal.open(); + if (url) { + const confirmOption = "Vault Root"; + let dir = await new GeneralModal({ + options: this.gitManager instanceof IsomorphicGit ? [confirmOption] : [], + placeholder: "Enter directory for clone. It needs to be empty or not existent.", + allowEmpty: this.gitManager instanceof IsomorphicGit + }).open(); + if (dir !== void 0) { + if (dir === confirmOption) { + dir = "."; + } + dir = (0, import_obsidian31.normalizePath)(dir); + if (dir === "/") { + dir = "."; + } + if (dir === ".") { + const modal2 = new GeneralModal({ + options: ["NO", "YES"], + placeholder: `Does your remote repo contain a ${app.vault.configDir} directory at the root?`, + onlySelection: true + }); + const containsConflictDir = await modal2.open(); + if (containsConflictDir === void 0) { + new import_obsidian31.Notice("Aborted clone"); + return; + } else if (containsConflictDir === "YES") { + const confirmOption2 = "DELETE ALL YOUR LOCAL CONFIG AND PLUGINS"; + const modal3 = new GeneralModal({ + options: ["Abort clone", confirmOption2], + placeholder: `To avoid conflicts, the local ${app.vault.configDir} directory needs to be deleted.`, + onlySelection: true + }); + const shouldDelete = await modal3.open() === confirmOption2; + if (shouldDelete) { + await this.app.vault.adapter.rmdir( + app.vault.configDir, + true + ); + } else { + new import_obsidian31.Notice("Aborted clone"); + return; + } + } + } + const depth = await new GeneralModal({ + placeholder: "Specify depth of clone. Leave empty for full clone.", + allowEmpty: true + }).open(); + let depthInt = void 0; + if (depth !== "") { + depthInt = parseInt(depth); + if (isNaN(depthInt)) { + new import_obsidian31.Notice("Invalid depth. Aborting clone."); + return; + } + } + new import_obsidian31.Notice(`Cloning new repo into "${dir}"`); + const oldBase = this.settings.basePath; + const customDir = dir && dir !== "."; + if (customDir) { + this.settings.basePath = dir; + } + try { + await this.gitManager.clone(url, dir, depthInt); + } catch (error) { + this.settings.basePath = oldBase; + this.saveSettings(); + throw error; + } + new import_obsidian31.Notice("Cloned new repo."); + new import_obsidian31.Notice("Please restart Obsidian"); + if (customDir) { + this.saveSettings(); + } + } + } + } + /** + * Retries to call `this.init()` if necessary, otherwise returns directly + * @returns true if `this.gitManager` is ready to be used, false if not. + */ + async isAllInitialized() { + if (!this.gitReady) { + await this.init(); + } + return this.gitReady; + } + ///Used for command + async pullChangesFromRemote() { + if (!await this.isAllInitialized()) return; + const filesUpdated = await this.pull(); + this.setUpAutoBackup(); + if (filesUpdated === false) { + return; + } + if (!filesUpdated) { + this.displayMessage("Everything is up-to-date"); + } + if (this.gitManager instanceof SimpleGit) { + const status2 = await this.gitManager.status(); + if (status2.conflicted.length > 0) { + this.displayError( + `You have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}` + ); + this.handleConflict(status2.conflicted); + } + } + dispatchEvent(new CustomEvent("git-refresh")); + this.setState(0 /* idle */); + } + async createBackup(fromAutoBackup, requestCustomMessage = false, commitMessage) { + if (!await this.isAllInitialized()) return; + if (this.settings.syncMethod == "reset" && this.settings.pullBeforePush) { + await this.pull(); + } + if (!await this.commit({ + fromAutoBackup, + requestCustomMessage, + commitMessage + })) { + return; + } + if (!this.settings.disablePush) { + if (await this.remotesAreSet() && await this.gitManager.canPush()) { + if (this.settings.syncMethod != "reset" && this.settings.pullBeforePush) { + await this.pull(); + } + await this.push(); + } else { + this.displayMessage("No changes to push"); + } + } + this.setState(0 /* idle */); + } + // Returns true if commit was successfully + async commit({ + fromAutoBackup, + requestCustomMessage = false, + onlyStaged = false, + commitMessage, + amend = false + }) { + if (!await this.isAllInitialized()) return false; + let hadConflict = this.localStorage.getConflict(); + let changedFiles; + let status2; + let unstagedFiles; + if (this.gitManager instanceof SimpleGit) { + this.mayDeleteConflictFile(); + status2 = await this.updateCachedStatus(); + if (status2.conflicted.length == 0) { + this.localStorage.setConflict(false); + hadConflict = false; + } + if (fromAutoBackup && status2.conflicted.length > 0) { + this.displayError( + `Did not commit, because you have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}. Please resolve them and commit per command.` + ); + this.handleConflict(status2.conflicted); + return false; + } + changedFiles = [...status2.changed, ...status2.staged]; + } else if (fromAutoBackup && hadConflict) { + this.setState(6 /* conflicted */); + this.displayError( + `Did not commit, because you have conflicts. Please resolve them and commit per command.` + ); + return false; + } else if (hadConflict) { + await this.mayDeleteConflictFile(); + status2 = await this.updateCachedStatus(); + changedFiles = [...status2.changed, ...status2.staged]; + } else { + if (onlyStaged) { + changedFiles = await this.gitManager.getStagedFiles(); + } else { + unstagedFiles = await this.gitManager.getUnstagedFiles(); + changedFiles = unstagedFiles.map(({ filepath }) => ({ + vault_path: this.gitManager.getRelativeVaultPath(filepath) + })); + } + } + if (await this.hasTooBigFiles(changedFiles)) { + this.setState(0 /* idle */); + return false; + } + if (changedFiles.length !== 0 || hadConflict) { + let cmtMessage = commitMessage != null ? commitMessage : commitMessage = fromAutoBackup ? this.settings.autoCommitMessage : this.settings.commitMessage; + if (fromAutoBackup && this.settings.customMessageOnAutoBackup || requestCustomMessage) { + if (!this.settings.disablePopups && fromAutoBackup) { + new import_obsidian31.Notice( + "Auto backup: Please enter a custom commit message. Leave empty to abort" + ); + } + const tempMessage = await new CustomMessageModal( + this, + true + ).open(); + if (tempMessage != void 0 && tempMessage != "" && tempMessage != "...") { + cmtMessage = tempMessage; + } else { + this.setState(0 /* idle */); + return false; + } + } + let committedFiles; + if (onlyStaged) { + committedFiles = await this.gitManager.commit({ + message: cmtMessage, + amend + }); + } else { + committedFiles = await this.gitManager.commitAll({ + message: cmtMessage, + status: status2, + unstagedFiles, + amend + }); + } + if (this.gitManager instanceof SimpleGit) { + if ((await this.updateCachedStatus()).conflicted.length == 0) { + this.localStorage.setConflict(false); + } + } + let roughly = false; + if (committedFiles === void 0) { + roughly = true; + committedFiles = changedFiles.length; + } + this.setUpAutoBackup(); + this.displayMessage( + `Committed${roughly ? " approx." : ""} ${committedFiles} ${committedFiles == 1 ? "file" : "files"}` + ); + } else { + this.displayMessage("No changes to commit"); + } + dispatchEvent(new CustomEvent("git-refresh")); + this.setState(0 /* idle */); + return true; + } + async hasTooBigFiles(files) { + const branchInfo = await this.gitManager.branchInfo(); + const remote = branchInfo.tracking ? splitRemoteBranch(branchInfo.tracking)[0] : null; + if (remote) { + const remoteUrl = await this.gitManager.getRemoteUrl(remote); + if (remoteUrl == null ? void 0 : remoteUrl.includes("github.com")) { + const tooBigFiles = files.filter((f) => { + const file = this.app.vault.getAbstractFileByPath( + f.vault_path + ); + if (file instanceof import_obsidian31.TFile) { + return file.stat.size >= 1e8; + } + return false; + }); + if (tooBigFiles.length > 0) { + this.displayError( + `Did not commit, because following files are too big: ${tooBigFiles.map( + (e) => e.vault_path + )}. Please remove them.` + ); + return true; + } + } + } + return false; + } + async push() { + if (!await this.isAllInitialized()) return false; + if (!await this.remotesAreSet()) { + return false; + } + const hadConflict = this.localStorage.getConflict(); + if (this.gitManager instanceof SimpleGit) + await this.mayDeleteConflictFile(); + let status2; + if (this.gitManager instanceof SimpleGit && (status2 = await this.updateCachedStatus()).conflicted.length > 0) { + this.displayError( + `Cannot push. You have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}` + ); + this.handleConflict(status2.conflicted); + return false; + } else if (this.gitManager instanceof IsomorphicGit && hadConflict) { + this.displayError(`Cannot push. You have conflicts`); + this.setState(6 /* conflicted */); + return false; + } + console.log("Pushing...."); + const pushedFiles = await this.gitManager.push(); + if (pushedFiles !== void 0) { + console.log("Pushed!", pushedFiles); + if (pushedFiles > 0) { + this.displayMessage( + `Pushed ${pushedFiles} ${pushedFiles == 1 ? "file" : "files"} to remote` + ); + } else { + this.displayMessage(`No changes to push`); + } + } + this.offlineMode = false; + this.setState(0 /* idle */); + dispatchEvent(new CustomEvent("git-refresh")); + return true; + } + /** Used for internals + Returns whether the pull added a commit or not. + + See {@link pullChangesFromRemote} for the command version. */ + async pull() { + if (!await this.remotesAreSet()) { + return false; + } + const pulledFiles = await this.gitManager.pull() || []; + this.offlineMode = false; + if (pulledFiles.length > 0) { + this.displayMessage( + `Pulled ${pulledFiles.length} ${pulledFiles.length == 1 ? "file" : "files"} from remote` + ); + this.lastPulledFiles = pulledFiles; + } + return pulledFiles.length; + } + async fetch() { + if (!await this.remotesAreSet()) { + return; + } + await this.gitManager.fetch(); + this.displayMessage(`Fetched from remote`); + this.offlineMode = false; + dispatchEvent(new CustomEvent("git-refresh")); + } + async mayDeleteConflictFile() { + const file = this.app.vault.getAbstractFileByPath( + this.conflictOutputFile + ); + if (file) { + this.app.workspace.iterateAllLeaves((leaf) => { + var _a2; + if (leaf.view instanceof import_obsidian31.MarkdownView && ((_a2 = leaf.view.file) == null ? void 0 : _a2.path) == file.path) { + leaf.detach(); + } + }); + await this.app.vault.delete(file); + } + } + async stageFile(file) { + if (!await this.isAllInitialized()) return false; + await this.gitManager.stage(file.path, true); + this.displayMessage(`Staged ${file.path}`); + dispatchEvent(new CustomEvent("git-refresh")); + this.setState(0 /* idle */); + return true; + } + async unstageFile(file) { + if (!await this.isAllInitialized()) return false; + await this.gitManager.unstage(file.path, true); + this.displayMessage(`Unstaged ${file.path}`); + dispatchEvent(new CustomEvent("git-refresh")); + this.setState(0 /* idle */); + return true; + } + async switchBranch() { + var _a2; + if (!await this.isAllInitialized()) return; + const branchInfo = await this.gitManager.branchInfo(); + const selectedBranch = await new BranchModal( + branchInfo.branches + ).open(); + if (selectedBranch != void 0) { + await this.gitManager.checkout(selectedBranch); + this.displayMessage(`Switched to ${selectedBranch}`); + (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + return selectedBranch; + } + } + async switchRemoteBranch() { + var _a2; + if (!await this.isAllInitialized()) return; + const selectedBranch = await this.selectRemoteBranch() || ""; + const [remote, branch2] = splitRemoteBranch(selectedBranch); + if (branch2 != void 0 && remote != void 0) { + await this.gitManager.checkout(branch2, remote); + this.displayMessage(`Switched to ${selectedBranch}`); + (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + return selectedBranch; + } + } + async createBranch() { + var _a2; + if (!await this.isAllInitialized()) return; + const newBranch = await new GeneralModal({ + placeholder: "Create new branch" + }).open(); + if (newBranch != void 0) { + await this.gitManager.createBranch(newBranch); + this.displayMessage(`Created new branch ${newBranch}`); + (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + return newBranch; + } + } + async deleteBranch() { + var _a2; + if (!await this.isAllInitialized()) return; + const branchInfo = await this.gitManager.branchInfo(); + if (branchInfo.current) branchInfo.branches.remove(branchInfo.current); + const branch2 = await new GeneralModal({ + options: branchInfo.branches, + placeholder: "Delete branch", + onlySelection: true + }).open(); + if (branch2 != void 0) { + let force = false; + const merged = await this.gitManager.branchIsMerged(branch2); + if (!merged) { + const forceAnswer = await new GeneralModal({ + options: ["YES", "NO"], + placeholder: "This branch isn't merged into HEAD. Force delete?", + onlySelection: true + }).open(); + if (forceAnswer !== "YES") { + return; + } + force = forceAnswer === "YES"; + } + await this.gitManager.deleteBranch(branch2, force); + this.displayMessage(`Deleted branch ${branch2}`); + (_a2 = this.branchBar) == null ? void 0 : _a2.display(); + return branch2; + } + } + // Ensures that the upstream branch is set. + // If not, it will prompt the user to set it. + // + // An exception is when the user has submodules enabled. + // In this case, the upstream branch is not required, + // to allow pulling/pushing only the submodules and not the outer repo. + async remotesAreSet() { + if (this.settings.updateSubmodules) { + return true; + } + if (!(await this.gitManager.branchInfo()).tracking) { + new import_obsidian31.Notice("No upstream branch is set. Please select one."); + return await this.setUpstreamBranch(); + } + return true; + } + async setUpstreamBranch() { + const remoteBranch = await this.selectRemoteBranch(); + if (remoteBranch == void 0) { + this.displayError("Aborted. No upstream-branch is set!", 1e4); + this.setState(0 /* idle */); + return false; + } else { + await this.gitManager.updateUpstreamBranch(remoteBranch); + this.displayMessage(`Set upstream branch to ${remoteBranch}`); + this.setState(0 /* idle */); + return true; + } + } + async setUpAutoBackup() { + if (this.settings.setLastSaveToLastCommit) { + this.clearAutoBackup(); + const lastCommitDate = await this.gitManager.getLastCommitTime(); + if (lastCommitDate) { + this.localStorage.setLastAutoBackup(lastCommitDate.toString()); + } + } + if (!this.timeoutIDBackup && !this.onFileModifyEventRef) { + const lastAutos = this.loadLastAuto(); + if (this.settings.autoSaveInterval > 0) { + const now2 = /* @__PURE__ */ new Date(); + const diff3 = this.settings.autoSaveInterval - Math.round( + (now2.getTime() - lastAutos.backup.getTime()) / 1e3 / 60 + ); + this.startAutoBackup(diff3 <= 0 ? 0 : diff3); + } + } + } + async setUpAutos() { + this.setUpAutoBackup(); + const lastAutos = this.loadLastAuto(); + if (this.settings.differentIntervalCommitAndPush && this.settings.autoPushInterval > 0) { + const now2 = /* @__PURE__ */ new Date(); + const diff3 = this.settings.autoPushInterval - Math.round( + (now2.getTime() - lastAutos.push.getTime()) / 1e3 / 60 + ); + this.startAutoPush(diff3 <= 0 ? 0 : diff3); + } + if (this.settings.autoPullInterval > 0) { + const now2 = /* @__PURE__ */ new Date(); + const diff3 = this.settings.autoPullInterval - Math.round( + (now2.getTime() - lastAutos.pull.getTime()) / 1e3 / 60 + ); + this.startAutoPull(diff3 <= 0 ? 0 : diff3); + } + } + async discardAll() { + await this.gitManager.discardAll({ + status: this.cachedStatus + }); + new import_obsidian31.Notice( + "All local changes have been discarded. New files remain untouched." + ); + } + clearAutos() { + this.clearAutoBackup(); + this.clearAutoPush(); + this.clearAutoPull(); + } + startAutoBackup(minutes) { + let time = (minutes != null ? minutes : this.settings.autoSaveInterval) * 6e4; + if (this.settings.autoBackupAfterFileChange) { + if (minutes === 0) { + this.doAutoBackup(); + } else { + this.onFileModifyEventRef = this.app.vault.on( + "modify", + () => this.autoBackupDebouncer() + ); + this.autoBackupDebouncer = (0, import_obsidian31.debounce)( + () => this.doAutoBackup(), + time, + true + ); + } + } else { + if (time > 2147483647) time = 2147483647; + this.timeoutIDBackup = window.setTimeout( + () => this.doAutoBackup(), + time + ); + } + } + // This is used for both auto backup and commit + doAutoBackup() { + this.promiseQueue.addTask(() => { + if (this.settings.differentIntervalCommitAndPush) { + return this.commit({ fromAutoBackup: true }); + } else { + return this.createBackup(true); + } + }); + this.saveLastAuto(/* @__PURE__ */ new Date(), "backup"); + this.saveSettings(); + this.startAutoBackup(); + } + startAutoPull(minutes) { + let time = (minutes != null ? minutes : this.settings.autoPullInterval) * 6e4; + if (time > 2147483647) time = 2147483647; + this.timeoutIDPull = window.setTimeout(() => { + this.promiseQueue.addTask(() => this.pullChangesFromRemote()); + this.saveLastAuto(/* @__PURE__ */ new Date(), "pull"); + this.saveSettings(); + this.startAutoPull(); + }, time); + } + startAutoPush(minutes) { + let time = (minutes != null ? minutes : this.settings.autoPushInterval) * 6e4; + if (time > 2147483647) time = 2147483647; + this.timeoutIDPush = window.setTimeout(() => { + this.promiseQueue.addTask(() => this.push()); + this.saveLastAuto(/* @__PURE__ */ new Date(), "push"); + this.saveSettings(); + this.startAutoPush(); + }, time); + } + clearAutoBackup() { + var _a2; + let wasActive = false; + if (this.timeoutIDBackup) { + window.clearTimeout(this.timeoutIDBackup); + this.timeoutIDBackup = void 0; + wasActive = true; + } + if (this.onFileModifyEventRef) { + (_a2 = this.autoBackupDebouncer) == null ? void 0 : _a2.cancel(); + this.app.vault.offref(this.onFileModifyEventRef); + this.onFileModifyEventRef = void 0; + wasActive = true; + } + return wasActive; + } + clearAutoPull() { + if (this.timeoutIDPull) { + window.clearTimeout(this.timeoutIDPull); + this.timeoutIDPull = void 0; + return true; + } + return false; + } + clearAutoPush() { + if (this.timeoutIDPush) { + window.clearTimeout(this.timeoutIDPush); + this.timeoutIDPush = void 0; + return true; + } + return false; + } + async handleConflict(conflicted) { + this.setState(6 /* conflicted */); + this.localStorage.setConflict(true); + let lines; + if (conflicted !== void 0) { + lines = [ + "# Conflicts", + "Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push`", + "(This file will automatically be deleted before commit)", + "[[#Additional Instructions]] available below file list", + "", + ...conflicted.map((e) => { + const file = this.app.vault.getAbstractFileByPath(e); + if (file instanceof import_obsidian31.TFile) { + const link = this.app.metadataCache.fileToLinktext( + file, + "/" + ); + return `- [[${link}]]`; + } else { + return `- Not a file: ${e}`; + } + }), + ` +# Additional Instructions +I strongly recommend to use "Source mode" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text. + +\`\`\`diff +<<<<<<< HEAD + File changes in local repository +======= + File changes in remote repository +>>>>>>> origin/main +\`\`\`` + ]; + } + this.writeAndOpenFile(lines == null ? void 0 : lines.join("\n")); + } + async editRemotes() { + if (!await this.isAllInitialized()) return; + const remotes = await this.gitManager.getRemotes(); + const nameModal = new GeneralModal({ + options: remotes, + placeholder: "Select or create a new remote by typing its name and selecting it" + }); + const remoteName = await nameModal.open(); + if (remoteName) { + const oldUrl = await this.gitManager.getRemoteUrl(remoteName); + const urlModal = new GeneralModal({ initialValue: oldUrl }); + const remoteURL = await urlModal.open(); + if (remoteURL) { + await this.gitManager.setRemote(remoteName, remoteURL); + return remoteName; + } + } + } + async selectRemoteBranch() { + let remotes = await this.gitManager.getRemotes(); + let selectedRemote; + if (remotes.length === 0) { + selectedRemote = await this.editRemotes(); + if (selectedRemote == void 0) { + remotes = await this.gitManager.getRemotes(); + } + } + const nameModal = new GeneralModal({ + options: remotes, + placeholder: "Select or create a new remote by typing its name and selecting it" + }); + const remoteName = selectedRemote != null ? selectedRemote : await nameModal.open(); + if (remoteName) { + this.displayMessage("Fetching remote branches"); + await this.gitManager.fetch(remoteName); + const branches = await this.gitManager.getRemoteBranches(remoteName); + const branchModal = new GeneralModal({ + options: branches, + placeholder: "Select or create a new remote branch by typing its name and selecting it" + }); + return await branchModal.open(); + } + } + async removeRemote() { + if (!await this.isAllInitialized()) return; + const remotes = await this.gitManager.getRemotes(); + const nameModal = new GeneralModal({ + options: remotes, + placeholder: "Select a remote" + }); + const remoteName = await nameModal.open(); + if (remoteName) { + this.gitManager.removeRemote(remoteName); + } + } + async writeAndOpenFile(text2) { + if (text2 !== void 0) { + await this.app.vault.adapter.write(this.conflictOutputFile, text2); + } + let fileIsAlreadyOpened = false; + this.app.workspace.iterateAllLeaves((leaf) => { + if (leaf.getDisplayText() != "" && this.conflictOutputFile.startsWith(leaf.getDisplayText())) { + fileIsAlreadyOpened = true; + } + }); + if (!fileIsAlreadyOpened) { + this.app.workspace.openLinkText(this.conflictOutputFile, "/", true); + } + } + handleViewActiveState(leaf) { + var _a2, _b; + if (!(leaf == null ? void 0 : leaf.view.getState().file)) return; + const sourceControlLeaf = this.app.workspace.getLeavesOfType(SOURCE_CONTROL_VIEW_CONFIG.type).first(); + const historyLeaf = this.app.workspace.getLeavesOfType(HISTORY_VIEW_CONFIG.type).first(); + (_a2 = sourceControlLeaf == null ? void 0 : sourceControlLeaf.view.containerEl.querySelector(`div.nav-file-title.is-active`)) == null ? void 0 : _a2.removeClass("is-active"); + (_b = historyLeaf == null ? void 0 : historyLeaf.view.containerEl.querySelector(`div.nav-file-title.is-active`)) == null ? void 0 : _b.removeClass("is-active"); + if ((leaf == null ? void 0 : leaf.view) instanceof DiffView) { + const path2 = leaf.view.state.file; + this.lastDiffViewState = leaf.view.getState(); + let el; + if (sourceControlLeaf && leaf.view.state.staged) { + el = sourceControlLeaf.view.containerEl.querySelector( + `div.staged div.nav-file-title[data-path='${path2}']` + ); + } else if (sourceControlLeaf && leaf.view.state.staged === false && !leaf.view.state.hash) { + el = sourceControlLeaf.view.containerEl.querySelector( + `div.changes div.nav-file-title[data-path='${path2}']` + ); + } else if (historyLeaf && leaf.view.state.hash) { + el = historyLeaf.view.containerEl.querySelector( + `div.nav-file-title[data-path='${path2}']` + ); + } + el == null ? void 0 : el.addClass("is-active"); + } else { + this.lastDiffViewState = void 0; + } + } + // region: displaying / formatting messages + displayMessage(message, timeout = 4 * 1e3) { + var _a2; + (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout); + if (!this.settings.disablePopups) { + if (!this.settings.disablePopupsForNoChanges || !message.startsWith("No changes")) { + new import_obsidian31.Notice(message, 5 * 1e3); + } + } + this.log(message); + } + displayError(message, timeout = 10 * 1e3) { + var _a2; + if (message instanceof Errors.UserCanceledError) { + new import_obsidian31.Notice("Aborted"); + return; + } + message = message.toString(); + new import_obsidian31.Notice(message, timeout); + console.log(`git obsidian error: ${message}`); + (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout); + } + log(message) { + console.log(`${this.manifest.id}: ` + message); + } +}; +/*! Bundled license information: + +ieee754/index.js: + (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) + +buffer/index.js: + (*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + *) + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh *) + +crc-32/crc32.js: + (*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com *) + +js-sha256/src/sha256.js: + (** + * [js-sha256]{@link https://github.com/emn178/js-sha256} + * + * @version 0.9.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2017 + * @license MIT + *) + +feather-icons/dist/feather.js: + (*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + *) +*/ diff --git a/.obsidian/plugins/obsidian-git/manifest.json b/.obsidian/plugins/obsidian-git/manifest.json new file mode 100644 index 0000000..3179c1e --- /dev/null +++ b/.obsidian/plugins/obsidian-git/manifest.json @@ -0,0 +1,10 @@ +{ + "author": "Vinzent", + "authorUrl": "https://github.com/Vinzent03", + "id": "obsidian-git", + "name": "Git", + "description": "Integrate Git version control with automatic backup and other advanced features.", + "isDesktopOnly": false, + "fundingUrl": "https://ko-fi.com/vinzent", + "version": "2.25.0" +} diff --git a/.obsidian/plugins/obsidian-git/styles.css b/.obsidian/plugins/obsidian-git/styles.css new file mode 100644 index 0000000..d5ad0cc --- /dev/null +++ b/.obsidian/plugins/obsidian-git/styles.css @@ -0,0 +1,562 @@ +@keyframes loading { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.workspace-leaf-content[data-type="git-view"] .button-border { + border: 2px solid var(--interactive-accent); + border-radius: var(--radius-s); +} + +.workspace-leaf-content[data-type="git-view"] .view-content { + padding: 0; +} + +.workspace-leaf-content[data-type="git-history-view"] .view-content { + padding: 0; +} + +.loading > svg { + animation: 2s linear infinite loading; + transform-origin: 50% 50%; + display: inline-block; +} + +.obsidian-git-center { + margin: auto; + text-align: center; + width: 50%; +} + +.obsidian-git-textarea { + display: block; + margin-left: auto; + margin-right: auto; +} + +.obsidian-git-center-button { + display: block; + margin: 20px auto; +} + +.tooltip.mod-left { + overflow-wrap: break-word; +} + +.tooltip.mod-right { + overflow-wrap: break-word; +} +.git-tools { + display: flex; + margin-left: auto; +} +.git-tools .type { + padding-left: var(--size-2-1); + display: flex; + align-items: center; + justify-content: center; + width: 11px; +} + +.git-tools .type[data-type="M"] { + color: orange; +} +.git-tools .type[data-type="D"] { + color: red; +} +.git-tools .buttons { + display: flex; +} +.git-tools .buttons > * { + padding: 0 0; + height: auto; +} + +.is-active .git-tools .buttons > * { + color: var(--nav-item-color-active); +} + +.git-author { + color: var(--text-accent); +} + +.git-date { + color: var(--text-accent); +} + +.git-ref { + color: var(--text-accent); +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-d-none { + display: none; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper { + text-align: left; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-header { + background-color: var(--background-primary); + border-bottom: 1px solid var(--interactive-accent); + font-family: var(--font-monospace); + height: 35px; + padding: 5px 10px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-header, +.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { + font-size: 14px; + margin-left: auto; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added { + border: 1px solid #b4e2b4; + border-radius: 5px 0 0 5px; + color: #399839; + padding: 2px; + text-align: right; + vertical-align: middle; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted { + border: 1px solid #e9aeae; + border-radius: 0 5px 5px 0; + color: #c33; + margin-left: 1px; + padding: 2px; + text-align: left; + vertical-align: middle; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 15px; + width: 100%; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-name { + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper { + border: 1px solid var(--background-modifier-border); + border-radius: 3px; + margin-bottom: 1em; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse { + -webkit-box-pack: end; + -ms-flex-pack: end; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid var(--background-modifier-border); + border-radius: 3px; + cursor: pointer; + display: none; + font-size: 12px; + justify-content: flex-end; + padding: 4px 8px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected { + background-color: #c8e1ff; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input { + margin: 0 4px 0 0; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table { + border-collapse: collapse; + font-family: Menlo, Consolas, monospace; + font-size: 13px; + width: 100%; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff { + width: 100%; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff { + overflow-y: hidden; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff { + display: inline-block; + margin-bottom: -8px; + margin-right: -4px; + overflow-x: scroll; + overflow-y: hidden; + width: 50%; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line { + padding: 0 8em; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + white-space: nowrap; + width: 100%; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { + padding: 0 4.5em; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn { + word-wrap: normal; + background: none; + display: inline-block; + padding: 0; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + vertical-align: middle; + white-space: pre; + width: 100%; +} + +.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, +.theme-light + .workspace-leaf-content[data-type="diff-view"] + .d2h-code-side-line + del { + background-color: #ffb6ba; +} + +.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, +.theme-dark + .workspace-leaf-content[data-type="diff-view"] + .d2h-code-side-line + del { + background-color: #8d232881; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { + border-radius: 0.2em; + display: inline-block; + margin-top: -1px; + text-decoration: none; + vertical-align: middle; +} + +.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, +.theme-light + .workspace-leaf-content[data-type="diff-view"] + .d2h-code-side-line + ins { + background-color: #97f295; + text-align: left; +} + +.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, +.theme-dark + .workspace-leaf-content[data-type="diff-view"] + .d2h-code-side-line + ins { + background-color: #1d921996; + text-align: left; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix { + word-wrap: normal; + background: none; + display: inline; + padding: 0; + white-space: pre; +} + +.workspace-leaf-content[data-type="diff-view"] .line-num1 { + float: left; +} + +.workspace-leaf-content[data-type="diff-view"] .line-num1, +.workspace-leaf-content[data-type="diff-view"] .line-num2 { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + padding: 0 0.5em; + text-overflow: ellipsis; + width: 3.5em; +} + +.workspace-leaf-content[data-type="diff-view"] .line-num2 { + float: right; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber { + background-color: var(--background-primary); + border: solid var(--background-modifier-border); + border-width: 0 1px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--text-muted); + cursor: pointer; + display: inline-block; + position: absolute; + text-align: right; + width: 7.5em; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after { + content: "\200b"; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { + background-color: var(--background-primary); + border: solid var(--background-modifier-border); + border-width: 0 1px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--text-muted); + cursor: pointer; + display: inline-block; + overflow: hidden; + padding: 0 0.5em; + position: absolute; + text-align: right; + text-overflow: ellipsis; + width: 4em; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr { + position: relative; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after { + content: "\200b"; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder, +.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { + background-color: var(--background-primary); + border-color: var(--background-modifier-border); +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber, +.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, +.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { + direction: rtl; +} + +.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del { + background-color: #fee8e9; + border-color: #e9aeae; +} + +.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins { + background-color: #dfd; + border-color: #b4e2b4; +} + +.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del { + background-color: #521b1d83; + border-color: #691d1d73; +} + +.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins { + background-color: rgba(30, 71, 30, 0.5); + border-color: #13501381; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-info { + background-color: var(--background-primary); + border-color: var(--background-modifier-border); + color: var(--text-normal); +} + +.theme-light + .workspace-leaf-content[data-type="diff-view"] + .d2h-file-diff + .d2h-del.d2h-change { + background-color: #fdf2d0; +} + +.theme-dark + .workspace-leaf-content[data-type="diff-view"] + .d2h-file-diff + .d2h-del.d2h-change { + background-color: #55492480; +} + +.theme-light + .workspace-leaf-content[data-type="diff-view"] + .d2h-file-diff + .d2h-ins.d2h-change { + background-color: #ded; +} + +.theme-dark + .workspace-leaf-content[data-type="diff-view"] + .d2h-file-diff + .d2h-ins.d2h-change { + background-color: rgba(37, 78, 37, 0.418); +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper { + margin-bottom: 10px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a { + color: #3572b0; + text-decoration: none; +} + +.workspace-leaf-content[data-type="diff-view"] + .d2h-file-list-wrapper + a:visited { + color: #3572b0; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header { + text-align: left; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title { + font-weight: 700; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + text-align: left; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list { + display: block; + list-style: none; + margin: 0; + padding: 0; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li { + border-bottom: 1px solid var(--background-modifier-border); + margin: 0; + padding: 5px 10px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child { + border-bottom: none; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch { + cursor: pointer; + display: none; + font-size: 10px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-icon { + fill: currentColor; + margin-right: 10px; + vertical-align: middle; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-deleted { + color: #c33; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-added { + color: #399839; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-changed { + color: #d0b44c; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-moved { + color: #3572b0; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-tag { + background-color: var(--background-primary); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 10px; + margin-left: 5px; + padding: 0 2px; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag { + border: 2px solid #c33; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag { + border: 1px solid #399839; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag { + border: 1px solid #d0b44c; +} + +.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag { + border: 1px solid #3572b0; +} + +/* ====================== Line Authoring Information ====================== */ + +.cm-gutterElement.obs-git-blame-gutter { + /* Add background color to spacing inbetween and around the gutter for better aesthetics */ + border-width: 0px 2px 0.2px 2px; + border-style: solid; + border-color: var(--background-secondary); + background-color: var(--background-secondary); +} + +.cm-gutterElement.obs-git-blame-gutter > div, +.line-author-settings-preview { + /* delegate text color to settings */ + color: var(--obs-git-gutter-text); + font-family: monospace; + height: 100%; /* ensure, that age-based background color occupies entire parent */ + text-align: right; + padding: 0px 6px 0px 6px; + white-space: pre; /* Keep spaces and do not collapse them. */ +} + +@media (max-width: 800px) { + /* hide git blame gutter not to superpose text */ + .cm-gutterElement.obs-git-blame-gutter { + display: none; + } +} diff --git a/.obsidian/plugins/obsidian-livesync/data.json b/.obsidian/plugins/obsidian-livesync/data.json new file mode 100644 index 0000000..97d2059 --- /dev/null +++ b/.obsidian/plugins/obsidian-livesync/data.json @@ -0,0 +1,143 @@ +{ + "remoteType": "", + "useCustomRequestHandler": false, + "couchDB_URI": "", + "couchDB_USER": "", + "couchDB_PASSWORD": "", + "couchDB_DBNAME": "", + "liveSync": true, + "syncOnSave": true, + "syncOnStart": false, + "savingDelay": 200, + "lessInformationInLog": false, + "gcDelay": 0, + "versionUpFlash": "", + "minimumChunkSize": 20, + "longLineThreshold": 250, + "showVerboseLog": false, + "suspendFileWatching": false, + "trashInsteadDelete": true, + "periodicReplication": false, + "periodicReplicationInterval": 60, + "syncOnFileOpen": false, + "encrypt": false, + "passphrase": "", + "usePathObfuscation": false, + "doNotDeleteFolder": true, + "resolveConflictsByNewerFile": true, + "batchSave": false, + "batchSaveMinimumDelay": 5, + "batchSaveMaximumDelay": 60, + "deviceAndVaultName": "", + "usePluginSettings": false, + "showOwnPlugins": false, + "showStatusOnEditor": true, + "showStatusOnStatusbar": true, + "showOnlyIconsOnEditor": false, + "usePluginSync": true, + "autoSweepPlugins": true, + "autoSweepPluginsPeriodic": true, + "notifyPluginOrSettingUpdated": true, + "checkIntegrityOnSave": false, + "batch_size": 25, + "batches_limit": 25, + "useHistory": true, + "disableRequestURI": true, + "skipOlderFilesOnSync": true, + "checkConflictOnlyOnOpen": false, + "showMergeDialogOnlyOnActive": false, + "syncInternalFiles": true, + "syncInternalFilesBeforeReplication": false, + "syncInternalFilesIgnorePatterns": "\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/", + "syncInternalFilesInterval": 60, + "additionalSuffixOfDatabaseName": "3719da583cc6987d", + "ignoreVersionCheck": false, + "lastReadUpdates": 23, + "deleteMetadataOfDeletedFiles": true, + "syncIgnoreRegEx": "", + "syncOnlyRegEx": "", + "customChunkSize": 50, + "readChunksOnline": true, + "watchInternalFileChanges": true, + "automaticallyDeleteMetadataOfDeletedFiles": 0, + "disableMarkdownAutoMerge": false, + "writeDocumentsIfConflicted": false, + "useDynamicIterationCount": false, + "syncAfterMerge": false, + "configPassphraseStore": "", + "encryptedPassphrase": "", + "encryptedCouchDBConnection": "%715397eb7e2bc5d56bc88bf109000000fafc3ff1f1fcef6659c7a50964edabb8alBKDrfdWWaYF/bum5agBsCe1bGO+/jGE55lOTiXvGH+KFPQG1+agqxg3mu4rqrXcHUXhS4tz8TeWYy5hjobGmJFAGHDJJvTp7rO+rQ8OrXmEkJDEIOaOfpLYgTIFPp6WGBgznqSMLqHUlMpwDg7BSOzln535X8o4J88CVcGZMtc/kU5cG4PjI7n6qHmkQlMJ8+CTvrEcVKx30VZwX22X6XRZ2p4+aGeslj6BvKFKjRtMtSyQN9JcV1BCfeUBymYV9soaOXdV8jRQKVsANvn1O/ggEAWAafYkcnYYGw9S6OowhSwnSgBH9W9ACckmszV7L7LhFSkLvbBmOQ=", + "permitEmptyPassphrase": false, + "useIndexedDBAdapter": true, + "useTimeouts": false, + "writeLogToTheFile": false, + "doNotPaceReplication": false, + "hashCacheMaxCount": 300, + "hashCacheMaxAmount": 50, + "concurrencyOfReadChunksOnline": 30, + "minimumIntervalOfReadChunksOnline": 25, + "hashAlg": "xxhash64", + "suspendParseReplicationResult": false, + "doNotSuspendOnFetching": false, + "useIgnoreFiles": false, + "ignoreFiles": ".gitignore", + "syncOnEditorSave": false, + "pluginSyncExtendedSetting": { + "PLUGIN_DATA/folder-note-plugin": { + "key": "PLUGIN_DATA/folder-note-plugin", + "mode": 1, + "files": [ + "plugins/folder-note-plugin/data.json" + ] + }, + "PLUGIN_MAIN/folder-note-plugin": { + "key": "PLUGIN_MAIN/folder-note-plugin", + "mode": 1, + "files": [ + "plugins/folder-note-plugin/manifest.json", + "plugins/folder-note-plugin/main.js", + "plugins/folder-note-plugin/styles.css" + ] + }, + "PLUGIN_DATA/obsidian-livesync": { + "key": "PLUGIN_DATA/obsidian-livesync", + "mode": 1, + "files": [ + "plugins/obsidian-livesync/data.json" + ] + }, + "PLUGIN_MAIN/obsidian-livesync": { + "key": "PLUGIN_MAIN/obsidian-livesync", + "mode": 1, + "files": [ + "plugins/obsidian-livesync/manifest.json", + "plugins/obsidian-livesync/main.js", + "plugins/obsidian-livesync/styles.css" + ] + } + }, + "syncMaxSizeInMB": 50, + "settingSyncFile": "settings", + "writeCredentialsForSettingSync": false, + "notifyAllSettingSyncFile": true, + "isConfigured": true, + "settingVersion": 0, + "enableCompression": false, + "accessKey": "", + "bucket": "", + "endpoint": "", + "region": "", + "secretKey": "", + "useEden": false, + "maxChunksInEden": 10, + "maxTotalLengthInEden": 1024, + "maxAgeInEden": 10, + "disableCheckingConfigMismatch": false, + "displayLanguage": "", + "enableChunkSplitterV2": false, + "disableWorkerForGeneratingChunks": false, + "processSmallFilesInUIThread": false, + "notifyThresholdOfRemoteStorageSize": 0, + "usePluginSyncV2": false, + "usePluginEtc": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-livesync/main.js b/.obsidian/plugins/obsidian-livesync/main.js new file mode 100644 index 0000000..797f8a5 --- /dev/null +++ b/.obsidian/plugins/obsidian-livesync/main.js @@ -0,0 +1,45102 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD AND TERSER +if you want to view the source, please visit the github repository of this plugin +*/ + +"use strict"; + +var __create = Object.create, __defProp = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __getOwnPropNames = Object.getOwnPropertyNames, __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty, __typeError = _ => { + throw TypeError(_); +}, __defNormalProp = (_, ee, ne) => ee in _ ? __defProp(_, ee, { + enumerable: true, + configurable: true, + writable: true, + value: ne +}) : _[ee] = ne, __commonJS = (_, ee) => function __require() { + return ee || (0, _[__getOwnPropNames(_)[0]])((ee = { + exports: {} + }).exports, ee), ee.exports; +}, __export = (_, ee) => { + for (var ne in ee) __defProp(_, ne, { + get: ee[ne], + enumerable: true + }); +}, __copyProps = (_, ee, ne, ie) => { + if (ee && "object" == typeof ee || "function" == typeof ee) for (let re of __getOwnPropNames(ee)) if (!__hasOwnProp.call(_, re) && re !== ne) __defProp(_, re, { + get: () => ee[re], + enumerable: !(ie = __getOwnPropDesc(ee, re)) || ie.enumerable + }); + return _; +}, __toESM = (_, ee, ne) => (ne = null != _ ? __create(__getProtoOf(_)) : {}, __copyProps(ee || !_ || !_.__esModule ? __defProp(ne, "default", { + value: _, + enumerable: true +}) : ne, _)), __toCommonJS = _ => __copyProps(__defProp({}, "__esModule", { + value: true +}), _), __publicField = (_, ee, ne) => __defNormalProp(_, "symbol" != typeof ee ? ee + "" : ee, ne), __accessCheck = (_, ee, ne) => ee.has(_) || __typeError("Cannot " + ne), __privateGet = (_, ee, ne) => (__accessCheck(_, ee, "read from private field"), +ne ? ne.call(_) : ee.get(_)), __privateAdd = (_, ee, ne) => ee.has(_) ? __typeError("Cannot add the same private member more than once") : ee instanceof WeakSet ? ee.add(_) : ee.set(_, ne), __privateSet = (_, ee, ne, ie) => (__accessCheck(_, ee, "write to private field"), +ie ? ie.call(_, ne) : ee.set(_, ne), ne), __privateMethod = (_, ee, ne) => (__accessCheck(_, ee, "access private method"), +ne), require_diff_match_patch = __commonJS({ + "node_modules/diff-match-patch/index.js"(_, ee) { + var diff_match_patch2 = function() { + this.Diff_Timeout = 1; + this.Diff_EditCost = 4; + this.Match_Threshold = .5; + this.Match_Distance = 1e3; + this.Patch_DeleteThreshold = .5; + this.Patch_Margin = 4; + this.Match_MaxBits = 32; + }, ne = -1; + diff_match_patch2.Diff = function(_, ee) { + return [ _, ee ]; + }; + diff_match_patch2.prototype.diff_main = function(_, ee, ne, ie) { + if ("undefined" == typeof ie) if (this.Diff_Timeout <= 0) ie = Number.MAX_VALUE; else ie = (new Date).getTime() + 1e3 * this.Diff_Timeout; + var re = ie; + if (null == _ || null == ee) throw new Error("Null input. (diff_main)"); + if (_ == ee) if (_) return [ new diff_match_patch2.Diff(0, _) ]; else return []; + if ("undefined" == typeof ne) ne = true; + var se = ne, oe = this.diff_commonPrefix(_, ee), le = _.substring(0, oe); + _ = _.substring(oe); + ee = ee.substring(oe); + oe = this.diff_commonSuffix(_, ee); + var ue = _.substring(_.length - oe); + _ = _.substring(0, _.length - oe); + ee = ee.substring(0, ee.length - oe); + var de = this.diff_compute_(_, ee, se, re); + if (le) de.unshift(new diff_match_patch2.Diff(0, le)); + if (ue) de.push(new diff_match_patch2.Diff(0, ue)); + this.diff_cleanupMerge(de); + return de; + }; + diff_match_patch2.prototype.diff_compute_ = function(_, ee, ie, re) { + var se; + if (!_) return [ new diff_match_patch2.Diff(1, ee) ]; + if (!ee) return [ new diff_match_patch2.Diff(ne, _) ]; + var oe = _.length > ee.length ? _ : ee, le = _.length > ee.length ? ee : _, ue = oe.indexOf(le); + if (-1 != ue) { + se = [ new diff_match_patch2.Diff(1, oe.substring(0, ue)), new diff_match_patch2.Diff(0, le), new diff_match_patch2.Diff(1, oe.substring(ue + le.length)) ]; + if (_.length > ee.length) se[0][0] = se[2][0] = ne; + return se; + } + if (1 == le.length) return [ new diff_match_patch2.Diff(ne, _), new diff_match_patch2.Diff(1, ee) ]; + var de = this.diff_halfMatch_(_, ee); + if (de) { + var fe = de[0], he = de[1], pe = de[2], ge = de[3], me = de[4], ye = this.diff_main(fe, pe, ie, re), Se = this.diff_main(he, ge, ie, re); + return ye.concat([ new diff_match_patch2.Diff(0, me) ], Se); + } + if (ie && _.length > 100 && ee.length > 100) return this.diff_lineMode_(_, ee, re); else return this.diff_bisect_(_, ee, re); + }; + diff_match_patch2.prototype.diff_lineMode_ = function(_, ee, ie) { + var re = this.diff_linesToChars_(_, ee); + _ = re.chars1; + ee = re.chars2; + var se = re.lineArray, oe = this.diff_main(_, ee, false, ie); + this.diff_charsToLines_(oe, se); + this.diff_cleanupSemantic(oe); + oe.push(new diff_match_patch2.Diff(0, "")); + for (var le = 0, ue = 0, de = 0, fe = "", he = ""; le < oe.length; ) { + switch (oe[le][0]) { + case 1: + de++; + he += oe[le][1]; + break; + + case ne: + ue++; + fe += oe[le][1]; + break; + + case 0: + if (ue >= 1 && de >= 1) { + oe.splice(le - ue - de, ue + de); + le = le - ue - de; + for (var pe = this.diff_main(fe, he, false, ie), ge = pe.length - 1; ge >= 0; ge--) oe.splice(le, 0, pe[ge]); + le += pe.length; + } + de = 0; + ue = 0; + fe = ""; + he = ""; + break; + } + le++; + } + oe.pop(); + return oe; + }; + diff_match_patch2.prototype.diff_bisect_ = function(_, ee, ie) { + for (var re = _.length, se = ee.length, oe = Math.ceil((re + se) / 2), le = oe, ue = 2 * oe, de = new Array(ue), fe = new Array(ue), he = 0; he < ue; he++) { + de[he] = -1; + fe[he] = -1; + } + de[le + 1] = 0; + fe[le + 1] = 0; + for (var pe = re - se, ge = pe % 2 != 0, me = 0, ye = 0, Se = 0, Ee = 0, ve = 0; ve < oe && !((new Date).getTime() > ie); ve++) { + for (var Ce = -ve + me; Ce <= ve - ye; Ce += 2) { + var we = le + Ce; + if (Ce == -ve || Ce != ve && de[we - 1] < de[we + 1]) Re = de[we + 1]; else Re = de[we - 1] + 1; + for (var Le = Re - Ce; Re < re && Le < se && _.charAt(Re) == ee.charAt(Le); ) { + Re++; + Le++; + } + de[we] = Re; + if (Re > re) ye += 2; else if (Le > se) me += 2; else if (ge) if ((Ae = le + pe - Ce) >= 0 && Ae < ue && -1 != fe[Ae]) if (Re >= (ke = re - fe[Ae])) return this.diff_bisectSplit_(_, ee, Re, Le, ie); + } + for (var Oe = -ve + Se; Oe <= ve - Ee; Oe += 2) { + var ke, Ae = le + Oe; + if (Oe == -ve || Oe != ve && fe[Ae - 1] < fe[Ae + 1]) ke = fe[Ae + 1]; else ke = fe[Ae - 1] + 1; + for (var xe = ke - Oe; ke < re && xe < se && _.charAt(re - ke - 1) == ee.charAt(se - xe - 1); ) { + ke++; + xe++; + } + fe[Ae] = ke; + if (ke > re) Ee += 2; else if (xe > se) Se += 2; else if (!ge) if ((we = le + pe - Oe) >= 0 && we < ue && -1 != de[we]) { + var Re; + Le = le + (Re = de[we]) - we; + if (Re >= (ke = re - ke)) return this.diff_bisectSplit_(_, ee, Re, Le, ie); + } + } + } + return [ new diff_match_patch2.Diff(ne, _), new diff_match_patch2.Diff(1, ee) ]; + }; + diff_match_patch2.prototype.diff_bisectSplit_ = function(_, ee, ne, ie, re) { + var se = _.substring(0, ne), oe = ee.substring(0, ie), le = _.substring(ne), ue = ee.substring(ie), de = this.diff_main(se, oe, false, re), fe = this.diff_main(le, ue, false, re); + return de.concat(fe); + }; + diff_match_patch2.prototype.diff_linesToChars_ = function(_, ee) { + var ne = [], ie = {}; + ne[0] = ""; + function diff_linesToCharsMunge_(_) { + for (var ee = "", se = 0, oe = -1, le = ne.length; oe < _.length - 1; ) { + if (-1 == (oe = _.indexOf("\n", se))) oe = _.length - 1; + var ue = _.substring(se, oe + 1); + if (ie.hasOwnProperty ? ie.hasOwnProperty(ue) : void 0 !== ie[ue]) ee += String.fromCharCode(ie[ue]); else { + if (le == re) { + ue = _.substring(se); + oe = _.length; + } + ee += String.fromCharCode(le); + ie[ue] = le; + ne[le++] = ue; + } + se = oe + 1; + } + return ee; + } + var re = 4e4, se = diff_linesToCharsMunge_(_); + re = 65535; + return { + chars1: se, + chars2: diff_linesToCharsMunge_(ee), + lineArray: ne + }; + }; + diff_match_patch2.prototype.diff_charsToLines_ = function(_, ee) { + for (var ne = 0; ne < _.length; ne++) { + for (var ie = _[ne][1], re = [], se = 0; se < ie.length; se++) re[se] = ee[ie.charCodeAt(se)]; + _[ne][1] = re.join(""); + } + }; + diff_match_patch2.prototype.diff_commonPrefix = function(_, ee) { + if (!_ || !ee || _.charAt(0) != ee.charAt(0)) return 0; + for (var ne = 0, ie = Math.min(_.length, ee.length), re = ie, se = 0; ne < re; ) { + if (_.substring(se, re) == ee.substring(se, re)) se = ne = re; else ie = re; + re = Math.floor((ie - ne) / 2 + ne); + } + return re; + }; + diff_match_patch2.prototype.diff_commonSuffix = function(_, ee) { + if (!_ || !ee || _.charAt(_.length - 1) != ee.charAt(ee.length - 1)) return 0; + for (var ne = 0, ie = Math.min(_.length, ee.length), re = ie, se = 0; ne < re; ) { + if (_.substring(_.length - re, _.length - se) == ee.substring(ee.length - re, ee.length - se)) se = ne = re; else ie = re; + re = Math.floor((ie - ne) / 2 + ne); + } + return re; + }; + diff_match_patch2.prototype.diff_commonOverlap_ = function(_, ee) { + var ne = _.length, ie = ee.length; + if (0 == ne || 0 == ie) return 0; + if (ne > ie) _ = _.substring(ne - ie); else if (ne < ie) ee = ee.substring(0, ne); + var re = Math.min(ne, ie); + if (_ == ee) return re; + for (var se = 0, oe = 1; ;) { + var le = _.substring(re - oe), ue = ee.indexOf(le); + if (-1 == ue) return se; + oe += ue; + if (0 == ue || _.substring(re - oe) == ee.substring(0, oe)) { + se = oe; + oe++; + } + } + }; + diff_match_patch2.prototype.diff_halfMatch_ = function(_, ee) { + if (this.Diff_Timeout <= 0) return null; + var ne = _.length > ee.length ? _ : ee, ie = _.length > ee.length ? ee : _; + if (ne.length < 4 || 2 * ie.length < ne.length) return null; + var re = this; + function diff_halfMatchI_(_, ee, ne) { + for (var ie, se, oe, le, ue = _.substring(ne, ne + Math.floor(_.length / 4)), de = -1, fe = ""; -1 != (de = ee.indexOf(ue, de + 1)); ) { + var he = re.diff_commonPrefix(_.substring(ne), ee.substring(de)), pe = re.diff_commonSuffix(_.substring(0, ne), ee.substring(0, de)); + if (fe.length < pe + he) { + fe = ee.substring(de - pe, de) + ee.substring(de, de + he); + ie = _.substring(0, ne - pe); + se = _.substring(ne + he); + oe = ee.substring(0, de - pe); + le = ee.substring(de + he); + } + } + if (2 * fe.length >= _.length) return [ ie, se, oe, le, fe ]; else return null; + } + var se, oe, le, ue, de, fe = diff_halfMatchI_(ne, ie, Math.ceil(ne.length / 4)), he = diff_halfMatchI_(ne, ie, Math.ceil(ne.length / 2)); + if (!fe && !he) return null; else if (!he) se = fe; else if (!fe) se = he; else se = fe[4].length > he[4].length ? fe : he; + if (_.length > ee.length) { + oe = se[0]; + le = se[1]; + ue = se[2]; + de = se[3]; + } else { + ue = se[0]; + de = se[1]; + oe = se[2]; + le = se[3]; + } + return [ oe, le, ue, de, se[4] ]; + }; + diff_match_patch2.prototype.diff_cleanupSemantic = function(_) { + for (var ee = false, ie = [], re = 0, se = null, oe = 0, le = 0, ue = 0, de = 0, fe = 0; oe < _.length; ) { + if (0 == _[oe][0]) { + ie[re++] = oe; + le = de; + ue = fe; + de = 0; + fe = 0; + se = _[oe][1]; + } else { + if (1 == _[oe][0]) de += _[oe][1].length; else fe += _[oe][1].length; + if (se && se.length <= Math.max(le, ue) && se.length <= Math.max(de, fe)) { + _.splice(ie[re - 1], 0, new diff_match_patch2.Diff(ne, se)); + _[ie[re - 1] + 1][0] = 1; + re--; + oe = --re > 0 ? ie[re - 1] : -1; + le = 0; + ue = 0; + de = 0; + fe = 0; + se = null; + ee = true; + } + } + oe++; + } + if (ee) this.diff_cleanupMerge(_); + this.diff_cleanupSemanticLossless(_); + oe = 1; + for (;oe < _.length; ) { + if (_[oe - 1][0] == ne && 1 == _[oe][0]) { + var he = _[oe - 1][1], pe = _[oe][1], ge = this.diff_commonOverlap_(he, pe), me = this.diff_commonOverlap_(pe, he); + if (ge >= me) { + if (ge >= he.length / 2 || ge >= pe.length / 2) { + _.splice(oe, 0, new diff_match_patch2.Diff(0, pe.substring(0, ge))); + _[oe - 1][1] = he.substring(0, he.length - ge); + _[oe + 1][1] = pe.substring(ge); + oe++; + } + } else if (me >= he.length / 2 || me >= pe.length / 2) { + _.splice(oe, 0, new diff_match_patch2.Diff(0, he.substring(0, me))); + _[oe - 1][0] = 1; + _[oe - 1][1] = pe.substring(0, pe.length - me); + _[oe + 1][0] = ne; + _[oe + 1][1] = he.substring(me); + oe++; + } + oe++; + } + oe++; + } + }; + diff_match_patch2.prototype.diff_cleanupSemanticLossless = function(_) { + function diff_cleanupSemanticScore_(_, ee) { + if (!_ || !ee) return 6; + var ne = _.charAt(_.length - 1), ie = ee.charAt(0), re = ne.match(diff_match_patch2.nonAlphaNumericRegex_), se = ie.match(diff_match_patch2.nonAlphaNumericRegex_), oe = re && ne.match(diff_match_patch2.whitespaceRegex_), le = se && ie.match(diff_match_patch2.whitespaceRegex_), ue = oe && ne.match(diff_match_patch2.linebreakRegex_), de = le && ie.match(diff_match_patch2.linebreakRegex_), fe = ue && _.match(diff_match_patch2.blanklineEndRegex_), he = de && ee.match(diff_match_patch2.blanklineStartRegex_); + if (fe || he) return 5; else if (ue || de) return 4; else if (re && !oe && le) return 3; else if (oe || le) return 2; else if (re || se) return 1; + return 0; + } + for (var ee = 1; ee < _.length - 1; ) { + if (0 == _[ee - 1][0] && 0 == _[ee + 1][0]) { + var ne = _[ee - 1][1], ie = _[ee][1], re = _[ee + 1][1], se = this.diff_commonSuffix(ne, ie); + if (se) { + var oe = ie.substring(ie.length - se); + ne = ne.substring(0, ne.length - se); + ie = oe + ie.substring(0, ie.length - se); + re = oe + re; + } + for (var le = ne, ue = ie, de = re, fe = diff_cleanupSemanticScore_(ne, ie) + diff_cleanupSemanticScore_(ie, re); ie.charAt(0) === re.charAt(0); ) { + ne += ie.charAt(0); + ie = ie.substring(1) + re.charAt(0); + re = re.substring(1); + var he = diff_cleanupSemanticScore_(ne, ie) + diff_cleanupSemanticScore_(ie, re); + if (he >= fe) { + fe = he; + le = ne; + ue = ie; + de = re; + } + } + if (_[ee - 1][1] != le) { + if (le) _[ee - 1][1] = le; else { + _.splice(ee - 1, 1); + ee--; + } + _[ee][1] = ue; + if (de) _[ee + 1][1] = de; else { + _.splice(ee + 1, 1); + ee--; + } + } + } + ee++; + } + }; + diff_match_patch2.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; + diff_match_patch2.whitespaceRegex_ = /\s/; + diff_match_patch2.linebreakRegex_ = /[\r\n]/; + diff_match_patch2.blanklineEndRegex_ = /\n\r?\n$/; + diff_match_patch2.blanklineStartRegex_ = /^\r?\n\r?\n/; + diff_match_patch2.prototype.diff_cleanupEfficiency = function(_) { + for (var ee = false, ie = [], re = 0, se = null, oe = 0, le = false, ue = false, de = false, fe = false; oe < _.length; ) { + if (0 == _[oe][0]) { + if (_[oe][1].length < this.Diff_EditCost && (de || fe)) { + ie[re++] = oe; + le = de; + ue = fe; + se = _[oe][1]; + } else { + re = 0; + se = null; + } + de = fe = false; + } else { + if (_[oe][0] == ne) fe = true; else de = true; + if (se && (le && ue && de && fe || se.length < this.Diff_EditCost / 2 && le + ue + de + fe == 3)) { + _.splice(ie[re - 1], 0, new diff_match_patch2.Diff(ne, se)); + _[ie[re - 1] + 1][0] = 1; + re--; + se = null; + if (le && ue) { + de = fe = true; + re = 0; + } else { + oe = --re > 0 ? ie[re - 1] : -1; + de = fe = false; + } + ee = true; + } + } + oe++; + } + if (ee) this.diff_cleanupMerge(_); + }; + diff_match_patch2.prototype.diff_cleanupMerge = function(_) { + _.push(new diff_match_patch2.Diff(0, "")); + for (var ee, ie = 0, re = 0, se = 0, oe = "", le = ""; ie < _.length; ) switch (_[ie][0]) { + case 1: + se++; + le += _[ie][1]; + ie++; + break; + + case ne: + re++; + oe += _[ie][1]; + ie++; + break; + + case 0: + if (re + se > 1) { + if (0 !== re && 0 !== se) { + if (0 !== (ee = this.diff_commonPrefix(le, oe))) { + if (ie - re - se > 0 && 0 == _[ie - re - se - 1][0]) _[ie - re - se - 1][1] += le.substring(0, ee); else { + _.splice(0, 0, new diff_match_patch2.Diff(0, le.substring(0, ee))); + ie++; + } + le = le.substring(ee); + oe = oe.substring(ee); + } + if (0 !== (ee = this.diff_commonSuffix(le, oe))) { + _[ie][1] = le.substring(le.length - ee) + _[ie][1]; + le = le.substring(0, le.length - ee); + oe = oe.substring(0, oe.length - ee); + } + } + ie -= re + se; + _.splice(ie, re + se); + if (oe.length) { + _.splice(ie, 0, new diff_match_patch2.Diff(ne, oe)); + ie++; + } + if (le.length) { + _.splice(ie, 0, new diff_match_patch2.Diff(1, le)); + ie++; + } + ie++; + } else if (0 !== ie && 0 == _[ie - 1][0]) { + _[ie - 1][1] += _[ie][1]; + _.splice(ie, 1); + } else ie++; + se = 0; + re = 0; + oe = ""; + le = ""; + break; + } + if ("" === _[_.length - 1][1]) _.pop(); + var ue = false; + ie = 1; + for (;ie < _.length - 1; ) { + if (0 == _[ie - 1][0] && 0 == _[ie + 1][0]) if (_[ie][1].substring(_[ie][1].length - _[ie - 1][1].length) == _[ie - 1][1]) { + _[ie][1] = _[ie - 1][1] + _[ie][1].substring(0, _[ie][1].length - _[ie - 1][1].length); + _[ie + 1][1] = _[ie - 1][1] + _[ie + 1][1]; + _.splice(ie - 1, 1); + ue = true; + } else if (_[ie][1].substring(0, _[ie + 1][1].length) == _[ie + 1][1]) { + _[ie - 1][1] += _[ie + 1][1]; + _[ie][1] = _[ie][1].substring(_[ie + 1][1].length) + _[ie + 1][1]; + _.splice(ie + 1, 1); + ue = true; + } + ie++; + } + if (ue) this.diff_cleanupMerge(_); + }; + diff_match_patch2.prototype.diff_xIndex = function(_, ee) { + var ie, re = 0, se = 0, oe = 0, le = 0; + for (ie = 0; ie < _.length; ie++) { + if (1 !== _[ie][0]) re += _[ie][1].length; + if (_[ie][0] !== ne) se += _[ie][1].length; + if (re > ee) break; + oe = re; + le = se; + } + if (_.length != ie && _[ie][0] === ne) return le; else return le + (ee - oe); + }; + diff_match_patch2.prototype.diff_prettyHtml = function(_) { + for (var ee = [], ie = /&/g, re = //g, oe = /\n/g, le = 0; le < _.length; le++) { + var ue = _[le][0], de = _[le][1].replace(ie, "&").replace(re, "<").replace(se, ">").replace(oe, "¶
    "); + switch (ue) { + case 1: + ee[le] = '' + de + ""; + break; + + case ne: + ee[le] = '' + de + ""; + break; + + case 0: + ee[le] = "" + de + ""; + break; + } + } + return ee.join(""); + }; + diff_match_patch2.prototype.diff_text1 = function(_) { + for (var ee = [], ne = 0; ne < _.length; ne++) if (1 !== _[ne][0]) ee[ne] = _[ne][1]; + return ee.join(""); + }; + diff_match_patch2.prototype.diff_text2 = function(_) { + for (var ee = [], ie = 0; ie < _.length; ie++) if (_[ie][0] !== ne) ee[ie] = _[ie][1]; + return ee.join(""); + }; + diff_match_patch2.prototype.diff_levenshtein = function(_) { + for (var ee = 0, ie = 0, re = 0, se = 0; se < _.length; se++) { + var oe = _[se][0], le = _[se][1]; + switch (oe) { + case 1: + ie += le.length; + break; + + case ne: + re += le.length; + break; + + case 0: + ee += Math.max(ie, re); + ie = 0; + re = 0; + break; + } + } + return ee += Math.max(ie, re); + }; + diff_match_patch2.prototype.diff_toDelta = function(_) { + for (var ee = [], ie = 0; ie < _.length; ie++) switch (_[ie][0]) { + case 1: + ee[ie] = "+" + encodeURI(_[ie][1]); + break; + + case ne: + ee[ie] = "-" + _[ie][1].length; + break; + + case 0: + ee[ie] = "=" + _[ie][1].length; + break; + } + return ee.join("\t").replace(/%20/g, " "); + }; + diff_match_patch2.prototype.diff_fromDelta = function(_, ee) { + for (var ie = [], re = 0, se = 0, oe = ee.split(/\t/g), le = 0; le < oe.length; le++) { + var ue = oe[le].substring(1); + switch (oe[le].charAt(0)) { + case "+": + try { + ie[re++] = new diff_match_patch2.Diff(1, decodeURI(ue)); + } catch (_) { + throw new Error("Illegal escape in diff_fromDelta: " + ue); + } + break; + + case "-": + case "=": + var de = parseInt(ue, 10); + if (isNaN(de) || de < 0) throw new Error("Invalid number in diff_fromDelta: " + ue); + var fe = _.substring(se, se += de); + if ("=" == oe[le].charAt(0)) ie[re++] = new diff_match_patch2.Diff(0, fe); else ie[re++] = new diff_match_patch2.Diff(ne, fe); + break; + + default: + if (oe[le]) throw new Error("Invalid diff operation in diff_fromDelta: " + oe[le]); + } + } + if (se != _.length) throw new Error("Delta length (" + se + ") does not equal source text length (" + _.length + ")."); + return ie; + }; + diff_match_patch2.prototype.match_main = function(_, ee, ne) { + if (null == _ || null == ee || null == ne) throw new Error("Null input. (match_main)"); + ne = Math.max(0, Math.min(ne, _.length)); + if (_ == ee) return 0; else if (!_.length) return -1; else if (_.substring(ne, ne + ee.length) == ee) return ne; else return this.match_bitap_(_, ee, ne); + }; + diff_match_patch2.prototype.match_bitap_ = function(_, ee, ne) { + if (ee.length > this.Match_MaxBits) throw new Error("Pattern too long for this browser."); + var ie = this.match_alphabet_(ee), re = this; + function match_bitapScore_(_, ie) { + var se = _ / ee.length, oe = Math.abs(ne - ie); + if (!re.Match_Distance) return oe ? 1 : se; else return se + oe / re.Match_Distance; + } + var se = this.Match_Threshold, oe = _.indexOf(ee, ne); + if (-1 != oe) { + se = Math.min(match_bitapScore_(0, oe), se); + if (-1 != (oe = _.lastIndexOf(ee, ne + ee.length))) se = Math.min(match_bitapScore_(0, oe), se); + } + var le, ue, de = 1 << ee.length - 1; + oe = -1; + for (var fe, he = ee.length + _.length, pe = 0; pe < ee.length; pe++) { + le = 0; + ue = he; + for (;le < ue; ) { + if (match_bitapScore_(pe, ne + ue) <= se) le = ue; else he = ue; + ue = Math.floor((he - le) / 2 + le); + } + he = ue; + var ge = Math.max(1, ne - ue + 1), me = Math.min(ne + ue, _.length) + ee.length, ye = Array(me + 2); + ye[me + 1] = (1 << pe) - 1; + for (var Se = me; Se >= ge; Se--) { + var Ee = ie[_.charAt(Se - 1)]; + if (0 === pe) ye[Se] = (ye[Se + 1] << 1 | 1) & Ee; else ye[Se] = (ye[Se + 1] << 1 | 1) & Ee | (fe[Se + 1] | fe[Se]) << 1 | 1 | fe[Se + 1]; + if (ye[Se] & de) { + var ve = match_bitapScore_(pe, Se - 1); + if (ve <= se) { + se = ve; + if ((oe = Se - 1) > ne) ge = Math.max(1, 2 * ne - oe); else break; + } + } + } + if (match_bitapScore_(pe + 1, ne) > se) break; + fe = ye; + } + return oe; + }; + diff_match_patch2.prototype.match_alphabet_ = function(_) { + for (var ee = {}, ne = 0; ne < _.length; ne++) ee[_.charAt(ne)] = 0; + for (ne = 0; ne < _.length; ne++) ee[_.charAt(ne)] |= 1 << _.length - ne - 1; + return ee; + }; + diff_match_patch2.prototype.patch_addContext_ = function(_, ee) { + if (0 != ee.length) { + if (null === _.start2) throw Error("patch not initialized"); + for (var ne = ee.substring(_.start2, _.start2 + _.length1), ie = 0; ee.indexOf(ne) != ee.lastIndexOf(ne) && ne.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin; ) { + ie += this.Patch_Margin; + ne = ee.substring(_.start2 - ie, _.start2 + _.length1 + ie); + } + ie += this.Patch_Margin; + var re = ee.substring(_.start2 - ie, _.start2); + if (re) _.diffs.unshift(new diff_match_patch2.Diff(0, re)); + var se = ee.substring(_.start2 + _.length1, _.start2 + _.length1 + ie); + if (se) _.diffs.push(new diff_match_patch2.Diff(0, se)); + _.start1 -= re.length; + _.start2 -= re.length; + _.length1 += re.length + se.length; + _.length2 += re.length + se.length; + } + }; + diff_match_patch2.prototype.patch_make = function(_, ee, ie) { + var re, se; + if ("string" == typeof _ && "string" == typeof ee && "undefined" == typeof ie) { + re = _; + if ((se = this.diff_main(re, ee, true)).length > 2) { + this.diff_cleanupSemantic(se); + this.diff_cleanupEfficiency(se); + } + } else if (_ && "object" == typeof _ && "undefined" == typeof ee && "undefined" == typeof ie) { + se = _; + re = this.diff_text1(se); + } else if ("string" == typeof _ && ee && "object" == typeof ee && "undefined" == typeof ie) { + re = _; + se = ee; + } else if ("string" == typeof _ && "string" == typeof ee && ie && "object" == typeof ie) { + re = _; + se = ie; + } else throw new Error("Unknown call format to patch_make."); + if (0 === se.length) return []; + for (var oe = [], le = new diff_match_patch2.patch_obj, ue = 0, de = 0, fe = 0, he = re, pe = re, ge = 0; ge < se.length; ge++) { + var me = se[ge][0], ye = se[ge][1]; + if (!ue && 0 !== me) { + le.start1 = de; + le.start2 = fe; + } + switch (me) { + case 1: + le.diffs[ue++] = se[ge]; + le.length2 += ye.length; + pe = pe.substring(0, fe) + ye + pe.substring(fe); + break; + + case ne: + le.length1 += ye.length; + le.diffs[ue++] = se[ge]; + pe = pe.substring(0, fe) + pe.substring(fe + ye.length); + break; + + case 0: + if (ye.length <= 2 * this.Patch_Margin && ue && se.length != ge + 1) { + le.diffs[ue++] = se[ge]; + le.length1 += ye.length; + le.length2 += ye.length; + } else if (ye.length >= 2 * this.Patch_Margin) if (ue) { + this.patch_addContext_(le, he); + oe.push(le); + le = new diff_match_patch2.patch_obj; + ue = 0; + he = pe; + de = fe; + } + break; + } + if (1 !== me) de += ye.length; + if (me !== ne) fe += ye.length; + } + if (ue) { + this.patch_addContext_(le, he); + oe.push(le); + } + return oe; + }; + diff_match_patch2.prototype.patch_deepCopy = function(_) { + for (var ee = [], ne = 0; ne < _.length; ne++) { + var ie = _[ne], re = new diff_match_patch2.patch_obj; + re.diffs = []; + for (var se = 0; se < ie.diffs.length; se++) re.diffs[se] = new diff_match_patch2.Diff(ie.diffs[se][0], ie.diffs[se][1]); + re.start1 = ie.start1; + re.start2 = ie.start2; + re.length1 = ie.length1; + re.length2 = ie.length2; + ee[ne] = re; + } + return ee; + }; + diff_match_patch2.prototype.patch_apply = function(_, ee) { + if (0 == _.length) return [ ee, [] ]; + _ = this.patch_deepCopy(_); + var ie = this.patch_addPadding(_); + ee = ie + ee + ie; + this.patch_splitMax(_); + for (var re = 0, se = [], oe = 0; oe < _.length; oe++) { + var le, ue = _[oe].start2 + re, de = this.diff_text1(_[oe].diffs), fe = -1; + if (de.length > this.Match_MaxBits) { + if (-1 != (le = this.match_main(ee, de.substring(0, this.Match_MaxBits), ue))) if (-1 == (fe = this.match_main(ee, de.substring(de.length - this.Match_MaxBits), ue + de.length - this.Match_MaxBits)) || le >= fe) le = -1; + } else le = this.match_main(ee, de, ue); + if (-1 == le) { + se[oe] = false; + re -= _[oe].length2 - _[oe].length1; + } else { + se[oe] = true; + re = le - ue; + var he; + if (-1 == fe) he = ee.substring(le, le + de.length); else he = ee.substring(le, fe + this.Match_MaxBits); + if (de == he) ee = ee.substring(0, le) + this.diff_text2(_[oe].diffs) + ee.substring(le + de.length); else { + var pe = this.diff_main(de, he, false); + if (de.length > this.Match_MaxBits && this.diff_levenshtein(pe) / de.length > this.Patch_DeleteThreshold) se[oe] = false; else { + this.diff_cleanupSemanticLossless(pe); + for (var ge, me = 0, ye = 0; ye < _[oe].diffs.length; ye++) { + var Se = _[oe].diffs[ye]; + if (0 !== Se[0]) ge = this.diff_xIndex(pe, me); + if (1 === Se[0]) ee = ee.substring(0, le + ge) + Se[1] + ee.substring(le + ge); else if (Se[0] === ne) ee = ee.substring(0, le + ge) + ee.substring(le + this.diff_xIndex(pe, me + Se[1].length)); + if (Se[0] !== ne) me += Se[1].length; + } + } + } + } + } + return [ ee = ee.substring(ie.length, ee.length - ie.length), se ]; + }; + diff_match_patch2.prototype.patch_addPadding = function(_) { + for (var ee = this.Patch_Margin, ne = "", ie = 1; ie <= ee; ie++) ne += String.fromCharCode(ie); + for (ie = 0; ie < _.length; ie++) { + _[ie].start1 += ee; + _[ie].start2 += ee; + } + var re = _[0], se = re.diffs; + if (0 == se.length || 0 != se[0][0]) { + se.unshift(new diff_match_patch2.Diff(0, ne)); + re.start1 -= ee; + re.start2 -= ee; + re.length1 += ee; + re.length2 += ee; + } else if (ee > se[0][1].length) { + var oe = ee - se[0][1].length; + se[0][1] = ne.substring(se[0][1].length) + se[0][1]; + re.start1 -= oe; + re.start2 -= oe; + re.length1 += oe; + re.length2 += oe; + } + if (0 == (se = (re = _[_.length - 1]).diffs).length || 0 != se[se.length - 1][0]) { + se.push(new diff_match_patch2.Diff(0, ne)); + re.length1 += ee; + re.length2 += ee; + } else if (ee > se[se.length - 1][1].length) { + oe = ee - se[se.length - 1][1].length; + se[se.length - 1][1] += ne.substring(0, oe); + re.length1 += oe; + re.length2 += oe; + } + return ne; + }; + diff_match_patch2.prototype.patch_splitMax = function(_) { + for (var ee = this.Match_MaxBits, ie = 0; ie < _.length; ie++) if (!(_[ie].length1 <= ee)) { + var re = _[ie]; + _.splice(ie--, 1); + for (var se = re.start1, oe = re.start2, le = ""; 0 !== re.diffs.length; ) { + var ue = new diff_match_patch2.patch_obj, de = true; + ue.start1 = se - le.length; + ue.start2 = oe - le.length; + if ("" !== le) { + ue.length1 = ue.length2 = le.length; + ue.diffs.push(new diff_match_patch2.Diff(0, le)); + } + for (;0 !== re.diffs.length && ue.length1 < ee - this.Patch_Margin; ) { + var fe = re.diffs[0][0], he = re.diffs[0][1]; + if (1 === fe) { + ue.length2 += he.length; + oe += he.length; + ue.diffs.push(re.diffs.shift()); + de = false; + } else if (fe === ne && 1 == ue.diffs.length && 0 == ue.diffs[0][0] && he.length > 2 * ee) { + ue.length1 += he.length; + se += he.length; + de = false; + ue.diffs.push(new diff_match_patch2.Diff(fe, he)); + re.diffs.shift(); + } else { + he = he.substring(0, ee - ue.length1 - this.Patch_Margin); + ue.length1 += he.length; + se += he.length; + if (0 === fe) { + ue.length2 += he.length; + oe += he.length; + } else de = false; + ue.diffs.push(new diff_match_patch2.Diff(fe, he)); + if (he == re.diffs[0][1]) re.diffs.shift(); else re.diffs[0][1] = re.diffs[0][1].substring(he.length); + } + } + le = (le = this.diff_text2(ue.diffs)).substring(le.length - this.Patch_Margin); + var pe = this.diff_text1(re.diffs).substring(0, this.Patch_Margin); + if ("" !== pe) { + ue.length1 += pe.length; + ue.length2 += pe.length; + if (0 !== ue.diffs.length && 0 === ue.diffs[ue.diffs.length - 1][0]) ue.diffs[ue.diffs.length - 1][1] += pe; else ue.diffs.push(new diff_match_patch2.Diff(0, pe)); + } + if (!de) _.splice(++ie, 0, ue); + } + } + }; + diff_match_patch2.prototype.patch_toText = function(_) { + for (var ee = [], ne = 0; ne < _.length; ne++) ee[ne] = _[ne]; + return ee.join(""); + }; + diff_match_patch2.prototype.patch_fromText = function(_) { + var ee = []; + if (!_) return ee; + for (var ie = _.split("\n"), re = 0, se = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/; re < ie.length; ) { + var oe = ie[re].match(se); + if (!oe) throw new Error("Invalid patch string: " + ie[re]); + var le = new diff_match_patch2.patch_obj; + ee.push(le); + le.start1 = parseInt(oe[1], 10); + if ("" === oe[2]) { + le.start1--; + le.length1 = 1; + } else if ("0" == oe[2]) le.length1 = 0; else { + le.start1--; + le.length1 = parseInt(oe[2], 10); + } + le.start2 = parseInt(oe[3], 10); + if ("" === oe[4]) { + le.start2--; + le.length2 = 1; + } else if ("0" == oe[4]) le.length2 = 0; else { + le.start2--; + le.length2 = parseInt(oe[4], 10); + } + re++; + for (;re < ie.length; ) { + var ue = ie[re].charAt(0); + try { + var de = decodeURI(ie[re].substring(1)); + } catch (_) { + throw new Error("Illegal escape in patch_fromText: " + de); + } + if ("-" == ue) le.diffs.push(new diff_match_patch2.Diff(ne, de)); else if ("+" == ue) le.diffs.push(new diff_match_patch2.Diff(1, de)); else if (" " == ue) le.diffs.push(new diff_match_patch2.Diff(0, de)); else if ("@" == ue) break; else if ("" === ue) ; else throw new Error('Invalid patch mode "' + ue + '" in: ' + de); + re++; + } + } + return ee; + }; + diff_match_patch2.patch_obj = function() { + this.diffs = []; + this.start1 = null; + this.start2 = null; + this.length1 = 0; + this.length2 = 0; + }; + diff_match_patch2.patch_obj.prototype.toString = function() { + var _, ee; + if (0 === this.length1) _ = this.start1 + ",0"; else if (1 == this.length1) _ = this.start1 + 1; else _ = this.start1 + 1 + "," + this.length1; + if (0 === this.length2) ee = this.start2 + ",0"; else if (1 == this.length2) ee = this.start2 + 1; else ee = this.start2 + 1 + "," + this.length2; + for (var ie, re = [ "@@ -" + _ + " +" + ee + " @@\n" ], se = 0; se < this.diffs.length; se++) { + switch (this.diffs[se][0]) { + case 1: + ie = "+"; + break; + + case ne: + ie = "-"; + break; + + case 0: + ie = " "; + break; + } + re[se + 1] = ie + encodeURI(this.diffs[se][1]) + "\n"; + } + return re.join("").replace(/%20/g, " "); + }; + ee.exports = diff_match_patch2; + ee.exports["diff_match_patch"] = diff_match_patch2; + ee.exports["DIFF_DELETE"] = ne; + ee.exports["DIFF_INSERT"] = 1; + ee.exports["DIFF_EQUAL"] = 0; + } +}), require_balanced_match = __commonJS({ + "node_modules/balanced-match/index.js"(_, ee) { + "use strict"; + ee.exports = balanced; + function balanced(_, ee, ne) { + if (_ instanceof RegExp) _ = maybeMatch(_, ne); + if (ee instanceof RegExp) ee = maybeMatch(ee, ne); + var ie = range2(_, ee, ne); + return ie && { + start: ie[0], + end: ie[1], + pre: ne.slice(0, ie[0]), + body: ne.slice(ie[0] + _.length, ie[1]), + post: ne.slice(ie[1] + ee.length) + }; + } + function maybeMatch(_, ee) { + var ne = ee.match(_); + return ne ? ne[0] : null; + } + balanced.range = range2; + function range2(_, ee, ne) { + var ie, re, se, oe, le, ue = ne.indexOf(_), de = ne.indexOf(ee, ue + 1), fe = ue; + if (ue >= 0 && de > 0) { + if (_ === ee) return [ ue, de ]; + ie = []; + se = ne.length; + for (;fe >= 0 && !le; ) { + if (fe == ue) { + ie.push(fe); + ue = ne.indexOf(_, fe + 1); + } else if (1 == ie.length) le = [ ie.pop(), de ]; else { + if ((re = ie.pop()) < se) { + se = re; + oe = de; + } + de = ne.indexOf(ee, fe + 1); + } + fe = ue < de && ue >= 0 ? ue : de; + } + if (ie.length) le = [ se, oe ]; + } + return le; + } + } +}), require_brace_expansion = __commonJS({ + "node_modules/brace-expansion/index.js"(_, ee) { + var ne = require_balanced_match(); + ee.exports = function expandTop(_) { + if (!_) return []; + if ("{}" === _.substr(0, 2)) _ = "\\{\\}" + _.substr(2); + return expand2(function escapeBraces(_) { + return _.split("\\\\").join(ie).split("\\{").join(re).split("\\}").join(se).split("\\,").join(oe).split("\\.").join(le); + }(_), true).map(unescapeBraces); + }; + var ie = "\0SLASH" + Math.random() + "\0", re = "\0OPEN" + Math.random() + "\0", se = "\0CLOSE" + Math.random() + "\0", oe = "\0COMMA" + Math.random() + "\0", le = "\0PERIOD" + Math.random() + "\0"; + function numeric(_) { + return parseInt(_, 10) == _ ? parseInt(_, 10) : _.charCodeAt(0); + } + function unescapeBraces(_) { + return _.split(ie).join("\\").split(re).join("{").split(se).join("}").split(oe).join(",").split(le).join("."); + } + function parseCommaParts(_) { + if (!_) return [ "" ]; + var ee = [], ie = ne("{", "}", _); + if (!ie) return _.split(","); + var re = ie.pre, se = ie.body, oe = ie.post, le = re.split(","); + le[le.length - 1] += "{" + se + "}"; + var ue = parseCommaParts(oe); + if (oe.length) { + le[le.length - 1] += ue.shift(); + le.push.apply(le, ue); + } + ee.push.apply(ee, le); + return ee; + } + function embrace(_) { + return "{" + _ + "}"; + } + function isPadded(_) { + return /^-?0\d/.test(_); + } + function lte(_, ee) { + return _ <= ee; + } + function gte(_, ee) { + return _ >= ee; + } + function expand2(_, ee) { + var ie = [], re = ne("{", "}", _); + if (!re) return [ _ ]; + var oe = re.pre, le = re.post.length ? expand2(re.post, false) : [ "" ]; + if (/\$$/.test(re.pre)) for (var ue = 0; ue < le.length; ue++) { + var de = oe + "{" + re.body + "}" + le[ue]; + ie.push(de); + } else { + var fe, he, pe = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(re.body), ge = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(re.body), me = pe || ge, ye = re.body.indexOf(",") >= 0; + if (!me && !ye) if (re.post.match(/,.*\}/)) return expand2(_ = re.pre + "{" + re.body + se + re.post); else return [ _ ]; + if (me) fe = re.body.split(/\.\./); else if (1 === (fe = parseCommaParts(re.body)).length) if (1 === (fe = expand2(fe[0], false).map(embrace)).length) return le.map((function(_) { + return re.pre + fe[0] + _; + })); + if (me) { + var Se = numeric(fe[0]), Ee = numeric(fe[1]), ve = Math.max(fe[0].length, fe[1].length), Ce = 3 == fe.length ? Math.abs(numeric(fe[2])) : 1, we = lte; + if (Ee < Se) { + Ce *= -1; + we = gte; + } + var Le = fe.some(isPadded); + he = []; + for (var Oe = Se; we(Oe, Ee); Oe += Ce) { + var ke; + if (ge) { + if ("\\" === (ke = String.fromCharCode(Oe))) ke = ""; + } else { + ke = String(Oe); + if (Le) { + var Ae = ve - ke.length; + if (Ae > 0) { + var xe = new Array(Ae + 1).join("0"); + if (Oe < 0) ke = "-" + xe + ke.slice(1); else ke = xe + ke; + } + } + } + he.push(ke); + } + } else { + he = []; + for (var Re = 0; Re < fe.length; Re++) he.push.apply(he, expand2(fe[Re], false)); + } + for (Re = 0; Re < he.length; Re++) for (ue = 0; ue < le.length; ue++) { + de = oe + he[Re] + le[ue]; + if (!ee || me || de) ie.push(de); + } + } + return ie; + } + } +}), require_events = __commonJS({ + "node_modules/events/events.js"(_, ee) { + "use strict"; + var ne, ie = "object" == typeof Reflect ? Reflect : null, re = ie && "function" == typeof ie.apply ? ie.apply : function ReflectApply2(_, ee, ne) { + return Function.prototype.apply.call(_, ee, ne); + }; + if (ie && "function" == typeof ie.ownKeys) ne = ie.ownKeys; else if (Object.getOwnPropertySymbols) ne = function ReflectOwnKeys2(_) { + return Object.getOwnPropertyNames(_).concat(Object.getOwnPropertySymbols(_)); + }; else ne = function ReflectOwnKeys2(_) { + return Object.getOwnPropertyNames(_); + }; + var se = Number.isNaN || function NumberIsNaN2(_) { + return _ != _; + }; + function EventEmitter2() { + EventEmitter2.init.call(this); + } + ee.exports = EventEmitter2; + ee.exports.once = function once2(_, ee) { + return new Promise((function(ne, ie) { + function errorListener(ne) { + _.removeListener(ee, resolver); + ie(ne); + } + function resolver() { + if ("function" == typeof _.removeListener) _.removeListener("error", errorListener); + ne([].slice.call(arguments)); + } + eventTargetAgnosticAddListener(_, ee, resolver, { + once: true + }); + if ("error" !== ee) (function addErrorHandlerIfEventEmitter(_, ee, ne) { + if ("function" == typeof _.on) eventTargetAgnosticAddListener(_, "error", ee, ne); + })(_, errorListener, { + once: true + }); + })); + }; + EventEmitter2.EventEmitter = EventEmitter2; + EventEmitter2.prototype._events = void 0; + EventEmitter2.prototype._eventsCount = 0; + EventEmitter2.prototype._maxListeners = void 0; + var oe = 10; + function checkListener(_) { + if ("function" != typeof _) throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof _); + } + Object.defineProperty(EventEmitter2, "defaultMaxListeners", { + enumerable: true, + get: function() { + return oe; + }, + set: function(_) { + if ("number" != typeof _ || _ < 0 || se(_)) throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + _ + "."); + oe = _; + } + }); + EventEmitter2.init = function() { + if (void 0 === this._events || this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + this._maxListeners = this._maxListeners || void 0; + }; + EventEmitter2.prototype.setMaxListeners = function setMaxListeners(_) { + if ("number" != typeof _ || _ < 0 || se(_)) throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + _ + "."); + this._maxListeners = _; + return this; + }; + function _getMaxListeners(_) { + if (void 0 === _._maxListeners) return EventEmitter2.defaultMaxListeners; else return _._maxListeners; + } + EventEmitter2.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); + }; + EventEmitter2.prototype.emit = function emit2(_) { + for (var ee = [], ne = 1; ne < arguments.length; ne++) ee.push(arguments[ne]); + var ie = "error" === _, se = this._events; + if (void 0 !== se) ie = ie && void 0 === se.error; else if (!ie) return false; + if (ie) { + var oe; + if (ee.length > 0) oe = ee[0]; + if (oe instanceof Error) throw oe; + var le = new Error("Unhandled error." + (oe ? " (" + oe.message + ")" : "")); + le.context = oe; + throw le; + } + var ue = se[_]; + if (void 0 === ue) return false; + if ("function" == typeof ue) re(ue, this, ee); else { + var de = ue.length, fe = arrayClone(ue, de); + for (ne = 0; ne < de; ++ne) re(fe[ne], this, ee); + } + return true; + }; + function _addListener(_, ee, ne, ie) { + var re, se, oe; + checkListener(ne); + if (void 0 === (se = _._events)) { + se = _._events = Object.create(null); + _._eventsCount = 0; + } else { + if (void 0 !== se.newListener) { + _.emit("newListener", ee, ne.listener ? ne.listener : ne); + se = _._events; + } + oe = se[ee]; + } + if (void 0 === oe) { + oe = se[ee] = ne; + ++_._eventsCount; + } else { + if ("function" == typeof oe) oe = se[ee] = ie ? [ ne, oe ] : [ oe, ne ]; else if (ie) oe.unshift(ne); else oe.push(ne); + if ((re = _getMaxListeners(_)) > 0 && oe.length > re && !oe.warned) { + oe.warned = true; + var le = new Error("Possible EventEmitter memory leak detected. " + oe.length + " " + String(ee) + " listeners added. Use emitter.setMaxListeners() to increase limit"); + le.name = "MaxListenersExceededWarning"; + le.emitter = _; + le.type = ee; + le.count = oe.length; + (function ProcessEmitWarning(_) { + if (console && console.warn) console.warn(_); + })(le); + } + } + return _; + } + EventEmitter2.prototype.addListener = function addListener(_, ee) { + return _addListener(this, _, ee, false); + }; + EventEmitter2.prototype.on = EventEmitter2.prototype.addListener; + EventEmitter2.prototype.prependListener = function prependListener(_, ee) { + return _addListener(this, _, ee, true); + }; + function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (0 === arguments.length) return this.listener.call(this.target); else return this.listener.apply(this.target, arguments); + } + } + function _onceWrap(_, ee, ne) { + var ie = { + fired: false, + wrapFn: void 0, + target: _, + type: ee, + listener: ne + }, re = onceWrapper.bind(ie); + re.listener = ne; + ie.wrapFn = re; + return re; + } + EventEmitter2.prototype.once = function once3(_, ee) { + checkListener(ee); + this.on(_, _onceWrap(this, _, ee)); + return this; + }; + EventEmitter2.prototype.prependOnceListener = function prependOnceListener(_, ee) { + checkListener(ee); + this.prependListener(_, _onceWrap(this, _, ee)); + return this; + }; + EventEmitter2.prototype.removeListener = function removeListener(_, ee) { + var ne, ie, re, se, oe; + checkListener(ee); + if (void 0 === (ie = this._events)) return this; + if (void 0 === (ne = ie[_])) return this; + if (ne === ee || ne.listener === ee) if (0 == --this._eventsCount) this._events = Object.create(null); else { + delete ie[_]; + if (ie.removeListener) this.emit("removeListener", _, ne.listener || ee); + } else if ("function" != typeof ne) { + re = -1; + for (se = ne.length - 1; se >= 0; se--) if (ne[se] === ee || ne[se].listener === ee) { + oe = ne[se].listener; + re = se; + break; + } + if (re < 0) return this; + if (0 === re) ne.shift(); else (function spliceOne(_, ee) { + for (;ee + 1 < _.length; ee++) _[ee] = _[ee + 1]; + _.pop(); + })(ne, re); + if (1 === ne.length) ie[_] = ne[0]; + if (void 0 !== ie.removeListener) this.emit("removeListener", _, oe || ee); + } + return this; + }; + EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener; + EventEmitter2.prototype.removeAllListeners = function removeAllListeners(_) { + var ee, ne, ie; + if (void 0 === (ne = this._events)) return this; + if (void 0 === ne.removeListener) { + if (0 === arguments.length) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (void 0 !== ne[_]) if (0 == --this._eventsCount) this._events = Object.create(null); else delete ne[_]; + return this; + } + if (0 === arguments.length) { + var re, se = Object.keys(ne); + for (ie = 0; ie < se.length; ++ie) if ("removeListener" !== (re = se[ie])) this.removeAllListeners(re); + this.removeAllListeners("removeListener"); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + if ("function" == typeof (ee = ne[_])) this.removeListener(_, ee); else if (void 0 !== ee) for (ie = ee.length - 1; ie >= 0; ie--) this.removeListener(_, ee[ie]); + return this; + }; + function _listeners(_, ee, ne) { + var ie = _._events; + if (void 0 === ie) return []; + var re = ie[ee]; + if (void 0 === re) return []; + if ("function" == typeof re) return ne ? [ re.listener || re ] : [ re ]; else return ne ? function unwrapListeners(_) { + for (var ee = new Array(_.length), ne = 0; ne < ee.length; ++ne) ee[ne] = _[ne].listener || _[ne]; + return ee; + }(re) : arrayClone(re, re.length); + } + EventEmitter2.prototype.listeners = function listeners(_) { + return _listeners(this, _, true); + }; + EventEmitter2.prototype.rawListeners = function rawListeners(_) { + return _listeners(this, _, false); + }; + EventEmitter2.listenerCount = function(_, ee) { + if ("function" == typeof _.listenerCount) return _.listenerCount(ee); else return listenerCount2.call(_, ee); + }; + EventEmitter2.prototype.listenerCount = listenerCount2; + function listenerCount2(_) { + var ee = this._events; + if (void 0 !== ee) { + var ne = ee[_]; + if ("function" == typeof ne) return 1; else if (void 0 !== ne) return ne.length; + } + return 0; + } + EventEmitter2.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ne(this._events) : []; + }; + function arrayClone(_, ee) { + for (var ne = new Array(ee), ie = 0; ie < ee; ++ie) ne[ie] = _[ie]; + return ne; + } + function eventTargetAgnosticAddListener(_, ee, ne, ie) { + if ("function" == typeof _.on) if (ie.once) _.once(ee, ne); else _.on(ee, ne); else if ("function" == typeof _.addEventListener) _.addEventListener(ee, (function wrapListener(re) { + if (ie.once) _.removeEventListener(ee, wrapListener); + ne(re); + })); else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof _); + } + } +}), require_spark_md5 = __commonJS({ + "node_modules/spark-md5/spark-md5.js"(_, ee) { + (function(ne) { + if ("object" == typeof _) ee.exports = ne(); else if ("function" == typeof define && define.amd) define(ne); else { + var ie; + try { + ie = window; + } catch (_) { + ie = self; + } + ie.SparkMD5 = ne(); + } + })((function(_) { + "use strict"; + var ee = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" ]; + function md5cycle(_, ee) { + var ne = _[0], ie = _[1], re = _[2], se = _[3]; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & re | ~ie & se) + ee[0] - 680876936 | 0) << 7 | ne >>> 25) + ie | 0) & ie | ~ne & re) + ee[1] - 389564586 | 0) << 12 | se >>> 20) + ne | 0) & ne | ~se & ie) + ee[2] + 606105819 | 0) << 17 | re >>> 15) + se | 0) & se | ~re & ne) + ee[3] - 1044525330 | 0) << 22 | ie >>> 10) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & re | ~ie & se) + ee[4] - 176418897 | 0) << 7 | ne >>> 25) + ie | 0) & ie | ~ne & re) + ee[5] + 1200080426 | 0) << 12 | se >>> 20) + ne | 0) & ne | ~se & ie) + ee[6] - 1473231341 | 0) << 17 | re >>> 15) + se | 0) & se | ~re & ne) + ee[7] - 45705983 | 0) << 22 | ie >>> 10) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & re | ~ie & se) + ee[8] + 1770035416 | 0) << 7 | ne >>> 25) + ie | 0) & ie | ~ne & re) + ee[9] - 1958414417 | 0) << 12 | se >>> 20) + ne | 0) & ne | ~se & ie) + ee[10] - 42063 | 0) << 17 | re >>> 15) + se | 0) & se | ~re & ne) + ee[11] - 1990404162 | 0) << 22 | ie >>> 10) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & re | ~ie & se) + ee[12] + 1804603682 | 0) << 7 | ne >>> 25) + ie | 0) & ie | ~ne & re) + ee[13] - 40341101 | 0) << 12 | se >>> 20) + ne | 0) & ne | ~se & ie) + ee[14] - 1502002290 | 0) << 17 | re >>> 15) + se | 0) & se | ~re & ne) + ee[15] + 1236535329 | 0) << 22 | ie >>> 10) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & se | re & ~se) + ee[1] - 165796510 | 0) << 5 | ne >>> 27) + ie | 0) & re | ie & ~re) + ee[6] - 1069501632 | 0) << 9 | se >>> 23) + ne | 0) & ie | ne & ~ie) + ee[11] + 643717713 | 0) << 14 | re >>> 18) + se | 0) & ne | se & ~ne) + ee[0] - 373897302 | 0) << 20 | ie >>> 12) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & se | re & ~se) + ee[5] - 701558691 | 0) << 5 | ne >>> 27) + ie | 0) & re | ie & ~re) + ee[10] + 38016083 | 0) << 9 | se >>> 23) + ne | 0) & ie | ne & ~ie) + ee[15] - 660478335 | 0) << 14 | re >>> 18) + se | 0) & ne | se & ~ne) + ee[4] - 405537848 | 0) << 20 | ie >>> 12) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & se | re & ~se) + ee[9] + 568446438 | 0) << 5 | ne >>> 27) + ie | 0) & re | ie & ~re) + ee[14] - 1019803690 | 0) << 9 | se >>> 23) + ne | 0) & ie | ne & ~ie) + ee[3] - 187363961 | 0) << 14 | re >>> 18) + se | 0) & ne | se & ~ne) + ee[8] + 1163531501 | 0) << 20 | ie >>> 12) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie & se | re & ~se) + ee[13] - 1444681467 | 0) << 5 | ne >>> 27) + ie | 0) & re | ie & ~re) + ee[2] - 51403784 | 0) << 9 | se >>> 23) + ne | 0) & ie | ne & ~ie) + ee[7] + 1735328473 | 0) << 14 | re >>> 18) + se | 0) & ne | se & ~ne) + ee[12] - 1926607734 | 0) << 20 | ie >>> 12) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie ^ re ^ se) + ee[5] - 378558 | 0) << 4 | ne >>> 28) + ie | 0) ^ ie ^ re) + ee[8] - 2022574463 | 0) << 11 | se >>> 21) + ne | 0) ^ ne ^ ie) + ee[11] + 1839030562 | 0) << 16 | re >>> 16) + se | 0) ^ se ^ ne) + ee[14] - 35309556 | 0) << 23 | ie >>> 9) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie ^ re ^ se) + ee[1] - 1530992060 | 0) << 4 | ne >>> 28) + ie | 0) ^ ie ^ re) + ee[4] + 1272893353 | 0) << 11 | se >>> 21) + ne | 0) ^ ne ^ ie) + ee[7] - 155497632 | 0) << 16 | re >>> 16) + se | 0) ^ se ^ ne) + ee[10] - 1094730640 | 0) << 23 | ie >>> 9) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie ^ re ^ se) + ee[13] + 681279174 | 0) << 4 | ne >>> 28) + ie | 0) ^ ie ^ re) + ee[0] - 358537222 | 0) << 11 | se >>> 21) + ne | 0) ^ ne ^ ie) + ee[3] - 722521979 | 0) << 16 | re >>> 16) + se | 0) ^ se ^ ne) + ee[6] + 76029189 | 0) << 23 | ie >>> 9) + re | 0; + ie = ((ie += ((re = ((re += ((se = ((se += ((ne = ((ne += (ie ^ re ^ se) + ee[9] - 640364487 | 0) << 4 | ne >>> 28) + ie | 0) ^ ie ^ re) + ee[12] - 421815835 | 0) << 11 | se >>> 21) + ne | 0) ^ ne ^ ie) + ee[15] + 530742520 | 0) << 16 | re >>> 16) + se | 0) ^ se ^ ne) + ee[2] - 995338651 | 0) << 23 | ie >>> 9) + re | 0; + ie = ((ie += ((se = ((se += (ie ^ ((ne = ((ne += (re ^ (ie | ~se)) + ee[0] - 198630844 | 0) << 6 | ne >>> 26) + ie | 0) | ~re)) + ee[7] + 1126891415 | 0) << 10 | se >>> 22) + ne | 0) ^ ((re = ((re += (ne ^ (se | ~ie)) + ee[14] - 1416354905 | 0) << 15 | re >>> 17) + se | 0) | ~ne)) + ee[5] - 57434055 | 0) << 21 | ie >>> 11) + re | 0; + ie = ((ie += ((se = ((se += (ie ^ ((ne = ((ne += (re ^ (ie | ~se)) + ee[12] + 1700485571 | 0) << 6 | ne >>> 26) + ie | 0) | ~re)) + ee[3] - 1894986606 | 0) << 10 | se >>> 22) + ne | 0) ^ ((re = ((re += (ne ^ (se | ~ie)) + ee[10] - 1051523 | 0) << 15 | re >>> 17) + se | 0) | ~ne)) + ee[1] - 2054922799 | 0) << 21 | ie >>> 11) + re | 0; + ie = ((ie += ((se = ((se += (ie ^ ((ne = ((ne += (re ^ (ie | ~se)) + ee[8] + 1873313359 | 0) << 6 | ne >>> 26) + ie | 0) | ~re)) + ee[15] - 30611744 | 0) << 10 | se >>> 22) + ne | 0) ^ ((re = ((re += (ne ^ (se | ~ie)) + ee[6] - 1560198380 | 0) << 15 | re >>> 17) + se | 0) | ~ne)) + ee[13] + 1309151649 | 0) << 21 | ie >>> 11) + re | 0; + ie = ((ie += ((se = ((se += (ie ^ ((ne = ((ne += (re ^ (ie | ~se)) + ee[4] - 145523070 | 0) << 6 | ne >>> 26) + ie | 0) | ~re)) + ee[11] - 1120210379 | 0) << 10 | se >>> 22) + ne | 0) ^ ((re = ((re += (ne ^ (se | ~ie)) + ee[2] + 718787259 | 0) << 15 | re >>> 17) + se | 0) | ~ne)) + ee[9] - 343485551 | 0) << 21 | ie >>> 11) + re | 0; + _[0] = ne + _[0] | 0; + _[1] = ie + _[1] | 0; + _[2] = re + _[2] | 0; + _[3] = se + _[3] | 0; + } + function md5blk(_) { + var ee, ne = []; + for (ee = 0; ee < 64; ee += 4) ne[ee >> 2] = _.charCodeAt(ee) + (_.charCodeAt(ee + 1) << 8) + (_.charCodeAt(ee + 2) << 16) + (_.charCodeAt(ee + 3) << 24); + return ne; + } + function md5blk_array(_) { + var ee, ne = []; + for (ee = 0; ee < 64; ee += 4) ne[ee >> 2] = _[ee] + (_[ee + 1] << 8) + (_[ee + 2] << 16) + (_[ee + 3] << 24); + return ne; + } + function md51(_) { + var ee, ne, ie, re, se, oe, le = _.length, ue = [ 1732584193, -271733879, -1732584194, 271733878 ]; + for (ee = 64; ee <= le; ee += 64) md5cycle(ue, md5blk(_.substring(ee - 64, ee))); + ne = (_ = _.substring(ee - 64)).length; + ie = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + for (ee = 0; ee < ne; ee += 1) ie[ee >> 2] |= _.charCodeAt(ee) << (ee % 4 << 3); + ie[ee >> 2] |= 128 << (ee % 4 << 3); + if (ee > 55) { + md5cycle(ue, ie); + for (ee = 0; ee < 16; ee += 1) ie[ee] = 0; + } + re = (re = 8 * le).toString(16).match(/(.*?)(.{0,8})$/); + se = parseInt(re[2], 16); + oe = parseInt(re[1], 16) || 0; + ie[14] = se; + ie[15] = oe; + md5cycle(ue, ie); + return ue; + } + function rhex(_) { + var ne, ie = ""; + for (ne = 0; ne < 4; ne += 1) ie += ee[_ >> 8 * ne + 4 & 15] + ee[_ >> 8 * ne & 15]; + return ie; + } + function hex(_) { + var ee; + for (ee = 0; ee < _.length; ee += 1) _[ee] = rhex(_[ee]); + return _.join(""); + } + if ("5d41402abc4b2a76b9719d911017c592" !== hex(md51("hello"))) ; + if ("undefined" != typeof ArrayBuffer && !ArrayBuffer.prototype.slice) (function() { + function clamp(_, ee) { + if ((_ = 0 | _ || 0) < 0) return Math.max(_ + ee, 0); else return Math.min(_, ee); + } + ArrayBuffer.prototype.slice = function(ee, ne) { + var ie, re, se, oe, le = this.byteLength, ue = clamp(ee, le), de = le; + if (ne !== _) de = clamp(ne, le); + if (ue > de) return new ArrayBuffer(0); + ie = de - ue; + re = new ArrayBuffer(ie); + se = new Uint8Array(re); + oe = new Uint8Array(this, ue, ie); + se.set(oe); + return re; + }; + })(); + function toUtf82(_) { + if (/[\u0080-\uFFFF]/.test(_)) _ = unescape(encodeURIComponent(_)); + return _; + } + function hexToBinaryString(_) { + var ee, ne = [], ie = _.length; + for (ee = 0; ee < ie - 1; ee += 2) ne.push(parseInt(_.substr(ee, 2), 16)); + return String.fromCharCode.apply(String, ne); + } + function SparkMD5() { + this.reset(); + } + SparkMD5.prototype.append = function(_) { + this.appendBinary(toUtf82(_)); + return this; + }; + SparkMD5.prototype.appendBinary = function(_) { + this._buff += _; + this._length += _.length; + var ee, ne = this._buff.length; + for (ee = 64; ee <= ne; ee += 64) md5cycle(this._hash, md5blk(this._buff.substring(ee - 64, ee))); + this._buff = this._buff.substring(ee - 64); + return this; + }; + SparkMD5.prototype.end = function(_) { + var ee, ne, ie = this._buff, re = ie.length, se = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + for (ee = 0; ee < re; ee += 1) se[ee >> 2] |= ie.charCodeAt(ee) << (ee % 4 << 3); + this._finish(se, re); + ne = hex(this._hash); + if (_) ne = hexToBinaryString(ne); + this.reset(); + return ne; + }; + SparkMD5.prototype.reset = function() { + this._buff = ""; + this._length = 0; + this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ]; + return this; + }; + SparkMD5.prototype.getState = function() { + return { + buff: this._buff, + length: this._length, + hash: this._hash.slice() + }; + }; + SparkMD5.prototype.setState = function(_) { + this._buff = _.buff; + this._length = _.length; + this._hash = _.hash; + return this; + }; + SparkMD5.prototype.destroy = function() { + delete this._hash; + delete this._buff; + delete this._length; + }; + SparkMD5.prototype._finish = function(_, ee) { + var ne, ie, re, se = ee; + _[se >> 2] |= 128 << (se % 4 << 3); + if (se > 55) { + md5cycle(this._hash, _); + for (se = 0; se < 16; se += 1) _[se] = 0; + } + ne = (ne = 8 * this._length).toString(16).match(/(.*?)(.{0,8})$/); + ie = parseInt(ne[2], 16); + re = parseInt(ne[1], 16) || 0; + _[14] = ie; + _[15] = re; + md5cycle(this._hash, _); + }; + SparkMD5.hash = function(_, ee) { + return SparkMD5.hashBinary(toUtf82(_), ee); + }; + SparkMD5.hashBinary = function(_, ee) { + var ne = hex(md51(_)); + return ee ? hexToBinaryString(ne) : ne; + }; + SparkMD5.ArrayBuffer = function() { + this.reset(); + }; + SparkMD5.ArrayBuffer.prototype.append = function(_) { + var ee, ne = function concatenateArrayBuffers(_, ee, ne) { + var ie = new Uint8Array(_.byteLength + ee.byteLength); + ie.set(new Uint8Array(_)); + ie.set(new Uint8Array(ee), _.byteLength); + return ne ? ie : ie.buffer; + }(this._buff.buffer, _, true), ie = ne.length; + this._length += _.byteLength; + for (ee = 64; ee <= ie; ee += 64) md5cycle(this._hash, md5blk_array(ne.subarray(ee - 64, ee))); + this._buff = ee - 64 < ie ? new Uint8Array(ne.buffer.slice(ee - 64)) : new Uint8Array(0); + return this; + }; + SparkMD5.ArrayBuffer.prototype.end = function(_) { + var ee, ne, ie = this._buff, re = ie.length, se = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + for (ee = 0; ee < re; ee += 1) se[ee >> 2] |= ie[ee] << (ee % 4 << 3); + this._finish(se, re); + ne = hex(this._hash); + if (_) ne = hexToBinaryString(ne); + this.reset(); + return ne; + }; + SparkMD5.ArrayBuffer.prototype.reset = function() { + this._buff = new Uint8Array(0); + this._length = 0; + this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ]; + return this; + }; + SparkMD5.ArrayBuffer.prototype.getState = function() { + var _ = SparkMD5.prototype.getState.call(this); + _.buff = function arrayBuffer2Utf8Str(_) { + return String.fromCharCode.apply(null, new Uint8Array(_)); + }(_.buff); + return _; + }; + SparkMD5.ArrayBuffer.prototype.setState = function(_) { + _.buff = function utf8Str2ArrayBuffer(_, ee) { + var ne, ie = _.length, re = new ArrayBuffer(ie), se = new Uint8Array(re); + for (ne = 0; ne < ie; ne += 1) se[ne] = _.charCodeAt(ne); + return ee ? se : re; + }(_.buff, true); + return SparkMD5.prototype.setState.call(this, _); + }; + SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; + SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; + SparkMD5.ArrayBuffer.hash = function(_, ee) { + var ne = function md51_array(_) { + var ee, ne, ie, re, se, oe, le = _.length, ue = [ 1732584193, -271733879, -1732584194, 271733878 ]; + for (ee = 64; ee <= le; ee += 64) md5cycle(ue, md5blk_array(_.subarray(ee - 64, ee))); + ne = (_ = ee - 64 < le ? _.subarray(ee - 64) : new Uint8Array(0)).length; + ie = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + for (ee = 0; ee < ne; ee += 1) ie[ee >> 2] |= _[ee] << (ee % 4 << 3); + ie[ee >> 2] |= 128 << (ee % 4 << 3); + if (ee > 55) { + md5cycle(ue, ie); + for (ee = 0; ee < 16; ee += 1) ie[ee] = 0; + } + re = (re = 8 * le).toString(16).match(/(.*?)(.{0,8})$/); + se = parseInt(re[2], 16); + oe = parseInt(re[1], 16) || 0; + ie[14] = se; + ie[15] = oe; + md5cycle(ue, ie); + return ue; + }(new Uint8Array(_)), ie = hex(ne); + return ee ? hexToBinaryString(ie) : ie; + }; + return SparkMD5; + })); + } +}), require_vuvuzela = __commonJS({ + "node_modules/vuvuzela/index.js"(_) { + "use strict"; + _.stringify = function stringify3(_) { + var ee = []; + ee.push({ + obj: _ + }); + for (var ne, ie, re, se, oe, le, ue, de, fe, he, pe = ""; ne = ee.pop(); ) { + ie = ne.obj; + pe += ne.prefix || ""; + if (re = ne.val || "") pe += re; else if ("object" != typeof ie) pe += "undefined" == typeof ie ? null : JSON.stringify(ie); else if (null === ie) pe += "null"; else if (Array.isArray(ie)) { + ee.push({ + val: "]" + }); + for (se = ie.length - 1; se >= 0; se--) { + oe = 0 === se ? "" : ","; + ee.push({ + obj: ie[se], + prefix: oe + }); + } + ee.push({ + val: "[" + }); + } else { + le = []; + for (ue in ie) if (ie.hasOwnProperty(ue)) le.push(ue); + ee.push({ + val: "}" + }); + for (se = le.length - 1; se >= 0; se--) { + fe = ie[de = le[se]]; + he = se > 0 ? "," : ""; + he += JSON.stringify(de) + ":"; + ee.push({ + obj: fe, + prefix: he + }); + } + ee.push({ + val: "{" + }); + } + } + return pe; + }; + function pop2(_, ee, ne) { + var ie = ne[ne.length - 1]; + if (_ === ie.element) { + ne.pop(); + ie = ne[ne.length - 1]; + } + var re = ie.element, se = ie.index; + if (Array.isArray(re)) re.push(_); else if (se === ee.length - 2) re[ee.pop()] = _; else ee.push(_); + } + _.parse = function(_) { + for (var ee, ne, ie, re, se, oe, le, ue, de, fe = [], he = [], pe = 0; ;) { + if ("}" === (ee = _[pe++]) || "]" === ee || "undefined" == typeof ee) if (1 === fe.length) return fe.pop(); else { + pop2(fe.pop(), fe, he); + continue; + } + switch (ee) { + case " ": + case "\t": + case "\n": + case ":": + case ",": + break; + + case "n": + pe += 3; + pop2(null, fe, he); + break; + + case "t": + pe += 3; + pop2(true, fe, he); + break; + + case "f": + pe += 4; + pop2(false, fe, he); + break; + + case "0": + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + case "-": + ne = ""; + pe--; + for (;;) { + ie = _[pe++]; + if (/[\d\.\-e\+]/.test(ie)) ne += ie; else { + pe--; + break; + } + } + pop2(parseFloat(ne), fe, he); + break; + + case '"': + re = ""; + se = void 0; + oe = 0; + for (;'"' !== (le = _[pe++]) || "\\" === se && oe % 2 == 1; ) { + re += le; + if ("\\" === (se = le)) oe++; else oe = 0; + } + pop2(JSON.parse('"' + re + '"'), fe, he); + break; + + case "[": + ue = { + element: [], + index: fe.length + }; + fe.push(ue.element); + he.push(ue); + break; + + case "{": + de = { + element: {}, + index: fe.length + }; + fe.push(de.element); + he.push(de); + break; + + default: + throw new Error("unexpectedly reached end of input: " + ee); + } + } + }; + } +}), require_pouchdb_wrappers = __commonJS({ + "node_modules/pouchdb-wrappers/index.js"(_, ee) { + "use strict"; + function replacementMethod(_, ee) { + return function(...ne) { + function doMethod() { + let ie = null; + const re = "query" === ee ? 1 : 0; + if (ne.length > re && "function" == typeof ne[ne.length - 1]) ie = ne.pop(); + let se = _._originals[ee].bind(_); + for (const ne of _._handlers[ee]) se = ne.bind(_, se); + const oe = se(...ne); + if (oe.then && ie) (function nodify(_, ee) { + _.then(((..._) => { + ee(null, ..._); + })).catch((_ => { + ee(_); + })); + })(oe, ie); + return oe; + } + if ("changes" !== ee && _.taskqueue && !_.taskqueue.isReady) return new Promise(((ee, ne) => { + _.taskqueue.addTask((_ => { + if (_) ne(_); else ee(); + })); + })).then(doMethod); else return doMethod(); + }; + } + var ne = { + install: function installWrappers(_, ee = {}) { + if (!_._originals || !_._handlers) { + _._originals = {}; + _._handlers = {}; + } + for (const [ne, ie] of Object.entries(ee)) { + if (!(ne in _)) throw new Error(`Method '${ne}' does not exist on given base, so it cannot be wrapped.`); + if (!(ne in _._originals)) _._originals[ne] = _[ne]; + if (ne in _._handlers) _._handlers[ne].unshift(ie); else { + _._handlers[ne] = [ ie ]; + _[ne] = replacementMethod(_, ne); + } + } + }, + uninstall: function uninstallWrappers(_, ee) { + if (!_._originals || !_._handlers) throw new Error("No wrapper methods installed, so no methods can be uninstalled."); + for (const [ne, ie] of Object.entries(ee)) { + const ee = `Wrapper method for '${ne}' not installed: ${ie.toString()}`; + if (!(ne in _._handlers)) throw new Error(ee); + const re = _._handlers[ne].indexOf(ie); + if (-1 === re) throw new Error(ee); else _._handlers[ne].splice(re, 1); + } + } + }; + try { + ee.exports = ne; + } catch (_) {} + try { + window.PouchDBWrappers = ne; + } catch (_) {} + } +}), require_transform_pouch = __commonJS({ + "node_modules/transform-pouch/index.js"(_, ee) { + "use strict"; + var ne = require_pouchdb_wrappers(); + function isntInternalKey(_) { + return "_" !== _[0]; + } + function isUntransformable(_) { + if ("string" == typeof _._id && /^_local/.test(_._id)) return true; + if (_._deleted) return 0 === Object.keys(_).filter(isntInternalKey).length; else return false; + } + ee.exports = { + transform: transform2, + filter: transform2 + }; + function transform2(_) { + const incoming = function(ee) { + if (!isUntransformable(ee) && _.incoming) return _.incoming(ee); else return ee; + }, outgoing = function(ee) { + if (!isUntransformable(ee) && _.outgoing) return _.outgoing(ee); else return ee; + }, ee = { + async get(_, ...ee) { + const ne = await _(...ee); + if (Array.isArray(ne)) { + await Promise.all(ne.map((async _ => { + if (_.ok) _.ok = await outgoing(_.ok); + }))); + return ne; + } else return outgoing(ne); + }, + async bulkDocs(_, ee, ...ne) { + if (ee.docs) ee.docs = await Promise.all(ee.docs.map(incoming)); else ee = await Promise.all(ee.map(incoming)); + return _(ee, ...ne); + }, + async allDocs(_, ...ee) { + const ne = await _(...ee); + await Promise.all(ne.rows.map((async _ => { + if (_.doc) _.doc = await outgoing(_.doc); + }))); + return ne; + }, + async bulkGet(_, ...ee) { + const mapDoc = async _ => { + if (_.ok) return { + ok: await outgoing(_.ok) + }; else return _; + }; + let {results: ne, ...ie} = await _(...ee); + ne = await Promise.all(ne.map((async _ => { + const {id: ee, docs: ne} = _; + if (ee && ne && Array.isArray(ne)) return { + id: ee, + docs: await Promise.all(ne.map(mapDoc)) + }; else return _; + }))); + return { + results: ne, + ...ie + }; + }, + changes(_, ...ee) { + async function modifyChange(_) { + if (_.doc) { + _.doc = await outgoing(_.doc); + return _; + } + return _; + } + async function modifyChanges(_) { + if (_.results) { + _.results = await Promise.all(_.results.map(modifyChange)); + return _; + } + return _; + } + const ne = _(...ee), {on: ie, then: re} = ne; + return Object.assign(ne, { + on(_, ee) { + const re = ee; + if ("change" === _) ee = async _ => { + re(await modifyChange(_)); + }; else if ("complete" === _) ee = async _ => { + re(await modifyChanges(_)); + }; + return ie.call(ne, _, ee); + }, + then: (_, ee) => re.call(ne, modifyChanges).then(_, ee) + }); + } + }; + if ("http" === this.type()) { + ee.put = async function(_, ee, ...ne) { + return _(ee = await incoming(ee), ...ne); + }; + ee.query = async function(_, ...ee) { + const ne = await _(...ee); + await Promise.all(ne.rows.map((async _ => { + if (_.doc) _.doc = await outgoing(_.doc); + }))); + return ne; + }; + } + ne.install(this, ee); + } + if ("undefined" != typeof window && window.PouchDB) window.PouchDB.plugin(_); + } +}), require_util = __commonJS({ + "node_modules/fast-xml-parser/src/util.js"(_) { + "use strict"; + var ee = ":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD", ne = "[" + ee + "][" + ee + "\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*", ie = new RegExp("^" + ne + "$"); + _.isExist = function(_) { + return "undefined" != typeof _; + }; + _.isEmptyObject = function(_) { + return 0 === Object.keys(_).length; + }; + _.merge = function(_, ee, ne) { + if (ee) { + const ie = Object.keys(ee), re = ie.length; + for (let se = 0; se < re; se++) if ("strict" === ne) _[ie[se]] = [ ee[ie[se]] ]; else _[ie[se]] = ee[ie[se]]; + } + }; + _.getValue = function(ee) { + if (_.isExist(ee)) return ee; else return ""; + }; + _.isName = function(_) { + const ee = ie.exec(_); + return !(null === ee || "undefined" == typeof ee); + }; + _.getAllMatches = function(_, ee) { + const ne = []; + let ie = ee.exec(_); + for (;ie; ) { + const re = []; + re.startIndex = ee.lastIndex - ie[0].length; + const se = ie.length; + for (let _ = 0; _ < se; _++) re.push(ie[_]); + ne.push(re); + ie = ee.exec(_); + } + return ne; + }; + _.nameRegexp = ne; + } +}), require_validator = __commonJS({ + "node_modules/fast-xml-parser/src/validator.js"(_) { + "use strict"; + var ee = require_util(), ne = { + allowBooleanAttributes: false, + unpairedTags: [] + }; + _.validate = function(_, ie) { + ie = Object.assign({}, ne, ie); + const re = []; + let se = false, oe = false; + if ("\ufeff" === _[0]) _ = _.substr(1); + for (let ne = 0; ne < _.length; ne++) if ("<" === _[ne] && "?" === _[ne + 1]) { + ne += 2; + ne = readPI(_, ne); + if (ne.err) return ne; + } else if ("<" === _[ne]) { + let ue = ne; + ne++; + if ("!" === _[ne]) { + ne = readCommentAndCDATA(_, ne); + continue; + } else { + let de = false; + if ("/" === _[ne]) { + de = true; + ne++; + } + let fe = ""; + for (;ne < _.length && ">" !== _[ne] && " " !== _[ne] && "\t" !== _[ne] && "\n" !== _[ne] && "\r" !== _[ne]; ne++) fe += _[ne]; + fe = fe.trim(); + if ("/" === fe[fe.length - 1]) { + fe = fe.substring(0, fe.length - 1); + ne--; + } + if (!(le = fe, ee.isName(le))) { + let ee; + if (0 === fe.trim().length) ee = "Invalid space after '<'."; else ee = "Tag '" + fe + "' is an invalid name."; + return getErrorObject("InvalidTag", ee, getLineNumberForPosition(_, ne)); + } + const he = readAttributeStr(_, ne); + if (false === he) return getErrorObject("InvalidAttr", "Attributes for '" + fe + "' have open quote.", getLineNumberForPosition(_, ne)); + let pe = he.value; + ne = he.index; + if ("/" === pe[pe.length - 1]) { + const ee = ne - pe.length; + pe = pe.substring(0, pe.length - 1); + const re = validateAttributeString(pe, ie); + if (true === re) se = true; else return getErrorObject(re.err.code, re.err.msg, getLineNumberForPosition(_, ee + re.err.line)); + } else if (de) if (!he.tagClosed) return getErrorObject("InvalidTag", "Closing tag '" + fe + "' doesn't have proper closing.", getLineNumberForPosition(_, ne)); else if (pe.trim().length > 0) return getErrorObject("InvalidTag", "Closing tag '" + fe + "' can't have attributes or invalid starting.", getLineNumberForPosition(_, ue)); else { + const ee = re.pop(); + if (fe !== ee.tagName) { + let ne = getLineNumberForPosition(_, ee.tagStartPos); + return getErrorObject("InvalidTag", "Expected closing tag '" + ee.tagName + "' (opened in line " + ne.line + ", col " + ne.col + ") instead of closing tag '" + fe + "'.", getLineNumberForPosition(_, ue)); + } + if (0 == re.length) oe = true; + } else { + const ee = validateAttributeString(pe, ie); + if (true !== ee) return getErrorObject(ee.err.code, ee.err.msg, getLineNumberForPosition(_, ne - pe.length + ee.err.line)); + if (true === oe) return getErrorObject("InvalidXml", "Multiple possible root nodes found.", getLineNumberForPosition(_, ne)); else if (-1 !== ie.unpairedTags.indexOf(fe)) ; else re.push({ + tagName: fe, + tagStartPos: ue + }); + se = true; + } + for (ne++; ne < _.length; ne++) if ("<" === _[ne]) if ("!" === _[ne + 1]) { + ne++; + ne = readCommentAndCDATA(_, ne); + continue; + } else if ("?" === _[ne + 1]) { + ne = readPI(_, ++ne); + if (ne.err) return ne; + } else break; else if ("&" === _[ne]) { + const ee = validateAmpersand(_, ne); + if (-1 == ee) return getErrorObject("InvalidChar", "char '&' is not expected.", getLineNumberForPosition(_, ne)); + ne = ee; + } else if (true === oe && !isWhiteSpace(_[ne])) return getErrorObject("InvalidXml", "Extra text at the end", getLineNumberForPosition(_, ne)); + if ("<" === _[ne]) ne--; + } + } else { + if (isWhiteSpace(_[ne])) continue; + return getErrorObject("InvalidChar", "char '" + _[ne] + "' is not expected.", getLineNumberForPosition(_, ne)); + } + var le; + if (!se) return getErrorObject("InvalidXml", "Start tag expected.", 1); else if (1 == re.length) return getErrorObject("InvalidTag", "Unclosed tag '" + re[0].tagName + "'.", getLineNumberForPosition(_, re[0].tagStartPos)); else if (re.length > 0) return getErrorObject("InvalidXml", "Invalid '" + JSON.stringify(re.map((_ => _.tagName)), null, 4).replace(/\r?\n/g, "") + "' found.", { + line: 1, + col: 1 + }); + return true; + }; + function isWhiteSpace(_) { + return " " === _ || "\t" === _ || "\n" === _ || "\r" === _; + } + function readPI(_, ee) { + const ne = ee; + for (;ee < _.length; ee++) if ("?" == _[ee] || " " == _[ee]) { + const ie = _.substr(ne, ee - ne); + if (ee > 5 && "xml" === ie) return getErrorObject("InvalidXml", "XML declaration allowed only at the start of the document.", getLineNumberForPosition(_, ee)); else if ("?" == _[ee] && ">" == _[ee + 1]) { + ee++; + break; + } else continue; + } + return ee; + } + function readCommentAndCDATA(_, ee) { + if (_.length > ee + 5 && "-" === _[ee + 1] && "-" === _[ee + 2]) { + for (ee += 3; ee < _.length; ee++) if ("-" === _[ee] && "-" === _[ee + 1] && ">" === _[ee + 2]) { + ee += 2; + break; + } + } else if (_.length > ee + 8 && "D" === _[ee + 1] && "O" === _[ee + 2] && "C" === _[ee + 3] && "T" === _[ee + 4] && "Y" === _[ee + 5] && "P" === _[ee + 6] && "E" === _[ee + 7]) { + let ne = 1; + for (ee += 8; ee < _.length; ee++) if ("<" === _[ee]) ne++; else if (">" === _[ee]) { + ne--; + if (0 === ne) break; + } + } else if (_.length > ee + 9 && "[" === _[ee + 1] && "C" === _[ee + 2] && "D" === _[ee + 3] && "A" === _[ee + 4] && "T" === _[ee + 5] && "A" === _[ee + 6] && "[" === _[ee + 7]) for (ee += 8; ee < _.length; ee++) if ("]" === _[ee] && "]" === _[ee + 1] && ">" === _[ee + 2]) { + ee += 2; + break; + } + return ee; + } + function readAttributeStr(_, ee) { + let ne = "", ie = "", re = false; + for (;ee < _.length; ee++) { + if ('"' === _[ee] || "'" === _[ee]) if ("" === ie) ie = _[ee]; else if (ie !== _[ee]) ; else ie = ""; else if (">" === _[ee]) if ("" === ie) { + re = true; + break; + } + ne += _[ee]; + } + if ("" !== ie) return false; else return { + value: ne, + index: ee, + tagClosed: re + }; + } + var ie = new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?", "g"); + function validateAttributeString(_, ne) { + const re = ee.getAllMatches(_, ie), se = {}; + for (let _ = 0; _ < re.length; _++) { + if (0 === re[_][1].length) return getErrorObject("InvalidAttr", "Attribute '" + re[_][2] + "' has no space in starting.", getPositionFromMatch(re[_])); else if (void 0 !== re[_][3] && void 0 === re[_][4]) return getErrorObject("InvalidAttr", "Attribute '" + re[_][2] + "' is without value.", getPositionFromMatch(re[_])); else if (void 0 === re[_][3] && !ne.allowBooleanAttributes) return getErrorObject("InvalidAttr", "boolean attribute '" + re[_][2] + "' is not allowed.", getPositionFromMatch(re[_])); + const ee = re[_][2]; + if (!validateAttrName(ee)) return getErrorObject("InvalidAttr", "Attribute '" + ee + "' is an invalid name.", getPositionFromMatch(re[_])); + if (!se.hasOwnProperty(ee)) se[ee] = 1; else return getErrorObject("InvalidAttr", "Attribute '" + ee + "' is repeated.", getPositionFromMatch(re[_])); + } + return true; + } + function validateAmpersand(_, ee) { + if (";" === _[++ee]) return -1; + if ("#" === _[ee]) return function validateNumberAmpersand(_, ee) { + let ne = /\d/; + if ("x" === _[ee]) { + ee++; + ne = /[\da-fA-F]/; + } + for (;ee < _.length; ee++) { + if (";" === _[ee]) return ee; + if (!_[ee].match(ne)) break; + } + return -1; + }(_, ++ee); + let ne = 0; + for (;ee < _.length; ee++, ne++) if (!(_[ee].match(/\w/) && ne < 20)) { + if (";" === _[ee]) break; + return -1; + } + return ee; + } + function getErrorObject(_, ee, ne) { + return { + err: { + code: _, + msg: ee, + line: ne.line || ne, + col: ne.col + } + }; + } + function validateAttrName(_) { + return ee.isName(_); + } + function getLineNumberForPosition(_, ee) { + const ne = _.substring(0, ee).split(/\r?\n/); + return { + line: ne.length, + col: ne[ne.length - 1].length + 1 + }; + } + function getPositionFromMatch(_) { + return _.startIndex + _[1].length; + } + } +}), require_OptionsBuilder = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js"(_) { + var ee = { + preserveOrder: false, + attributeNamePrefix: "@_", + attributesGroupName: false, + textNodeName: "#text", + ignoreAttributes: true, + removeNSPrefix: false, + allowBooleanAttributes: false, + parseTagValue: true, + parseAttributeValue: false, + trimValues: true, + cdataPropName: false, + numberParseOptions: { + hex: true, + leadingZeros: true, + eNotation: true + }, + tagValueProcessor: function(_, ee) { + return ee; + }, + attributeValueProcessor: function(_, ee) { + return ee; + }, + stopNodes: [], + alwaysCreateTextNode: false, + isArray: () => false, + commentPropName: false, + unpairedTags: [], + processEntities: true, + htmlEntities: false, + ignoreDeclaration: false, + ignorePiTags: false, + transformTagName: false, + transformAttributeName: false, + updateTag: function(_, ee, ne) { + return _; + } + }; + _.buildOptions = function(_) { + return Object.assign({}, ee, _); + }; + _.defaultOptions = ee; + } +}), require_xmlNode = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/xmlNode.js"(_, ee) { + "use strict"; + ee.exports = class { + constructor(_) { + this.tagname = _; + this.child = []; + this[":@"] = {}; + } + add(_, ee) { + if ("__proto__" === _) _ = "#__proto__"; + this.child.push({ + [_]: ee + }); + } + addChild(_) { + if ("__proto__" === _.tagname) _.tagname = "#__proto__"; + if (_[":@"] && Object.keys(_[":@"]).length > 0) this.child.push({ + [_.tagname]: _.child, + [":@"]: _[":@"] + }); else this.child.push({ + [_.tagname]: _.child + }); + } + }; + } +}), require_DocTypeReader = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js"(_, ee) { + var ne = require_util(); + function readEntityExp(_, ee) { + let ne = ""; + for (;ee < _.length && "'" !== _[ee] && '"' !== _[ee]; ee++) ne += _[ee]; + ne = ne.trim(); + if (-1 !== ne.indexOf(" ")) throw new Error("External entites are not supported"); + const ie = _[ee++]; + let re = ""; + for (;ee < _.length && _[ee] !== ie; ee++) re += _[ee]; + return [ ne, re, ee ]; + } + function isComment(_, ee) { + if ("!" === _[ee + 1] && "-" === _[ee + 2] && "-" === _[ee + 3]) return true; else return false; + } + function isEntity(_, ee) { + if ("!" === _[ee + 1] && "E" === _[ee + 2] && "N" === _[ee + 3] && "T" === _[ee + 4] && "I" === _[ee + 5] && "T" === _[ee + 6] && "Y" === _[ee + 7]) return true; else return false; + } + function isElement(_, ee) { + if ("!" === _[ee + 1] && "E" === _[ee + 2] && "L" === _[ee + 3] && "E" === _[ee + 4] && "M" === _[ee + 5] && "E" === _[ee + 6] && "N" === _[ee + 7] && "T" === _[ee + 8]) return true; else return false; + } + function isAttlist(_, ee) { + if ("!" === _[ee + 1] && "A" === _[ee + 2] && "T" === _[ee + 3] && "T" === _[ee + 4] && "L" === _[ee + 5] && "I" === _[ee + 6] && "S" === _[ee + 7] && "T" === _[ee + 8]) return true; else return false; + } + function isNotation(_, ee) { + if ("!" === _[ee + 1] && "N" === _[ee + 2] && "O" === _[ee + 3] && "T" === _[ee + 4] && "A" === _[ee + 5] && "T" === _[ee + 6] && "I" === _[ee + 7] && "O" === _[ee + 8] && "N" === _[ee + 9]) return true; else return false; + } + function validateEntityName(_) { + if (ne.isName(_)) return _; else throw new Error(`Invalid entity name ${_}`); + } + ee.exports = function readDocType(_, ee) { + const ne = {}; + if ("O" === _[ee + 3] && "C" === _[ee + 4] && "T" === _[ee + 5] && "Y" === _[ee + 6] && "P" === _[ee + 7] && "E" === _[ee + 8]) { + ee += 9; + let ie = 1, re = false, se = false, oe = ""; + for (;ee < _.length; ee++) if ("<" === _[ee] && !se) { + if (re && isEntity(_, ee)) { + ee += 7; + [entityName, val, ee] = readEntityExp(_, ee + 1); + if (-1 === val.indexOf("&")) ne[validateEntityName(entityName)] = { + regx: RegExp(`&${entityName};`, "g"), + val + }; + } else if (re && isElement(_, ee)) ee += 8; else if (re && isAttlist(_, ee)) ee += 8; else if (re && isNotation(_, ee)) ee += 9; else if (isComment) se = true; else throw new Error("Invalid DOCTYPE"); + ie++; + oe = ""; + } else if (">" === _[ee]) { + if (se) { + if ("-" === _[ee - 1] && "-" === _[ee - 2]) { + se = false; + ie--; + } + } else ie--; + if (0 === ie) break; + } else if ("[" === _[ee]) re = true; else oe += _[ee]; + if (0 !== ie) throw new Error("Unclosed DOCTYPE"); + } else throw new Error("Invalid Tag instead of DOCTYPE"); + return { + entities: ne, + i: ee + }; + }; + } +}), require_strnum = __commonJS({ + "node_modules/strnum/strnum.js"(_, ee) { + var ne = /^[-+]?0x[a-fA-F0-9]+$/, ie = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/; + if (!Number.parseInt && window.parseInt) Number.parseInt = window.parseInt; + if (!Number.parseFloat && window.parseFloat) Number.parseFloat = window.parseFloat; + var re = { + hex: true, + leadingZeros: true, + decimalPoint: ".", + eNotation: true + }; + ee.exports = function toNumber(_, ee = {}) { + ee = Object.assign({}, re, ee); + if (!_ || "string" != typeof _) return _; + let se = _.trim(); + if (void 0 !== ee.skipLike && ee.skipLike.test(se)) return _; else if (ee.hex && ne.test(se)) return Number.parseInt(se, 16); else { + const ne = ie.exec(se); + if (ne) { + const ie = ne[1], re = ne[2]; + let oe = function trimZeros(_) { + if (_ && -1 !== _.indexOf(".")) { + if ("." === (_ = _.replace(/0+$/, ""))) _ = "0"; else if ("." === _[0]) _ = "0" + _; else if ("." === _[_.length - 1]) _ = _.substr(0, _.length - 1); + return _; + } + return _; + }(ne[3]); + const le = ne[4] || ne[6]; + if (!ee.leadingZeros && re.length > 0 && ie && "." !== se[2]) return _; else if (!ee.leadingZeros && re.length > 0 && !ie && "." !== se[1]) return _; else { + const ne = Number(se), ue = "" + ne; + if (-1 !== ue.search(/[eE]/)) if (ee.eNotation) return ne; else return _; else if (le) if (ee.eNotation) return ne; else return _; else if (-1 !== se.indexOf(".")) if ("0" === ue && "" === oe) return ne; else if (ue === oe) return ne; else if (ie && ue === "-" + oe) return ne; else return _; + if (re) if (oe === ue) return ne; else if (ie + oe === ue) return ne; else return _; + if (se === ue) return ne; else if (se === ie + ue) return ne; + return _; + } + } else return _; + } + }; + } +}), require_OrderedObjParser = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js"(_, ee) { + "use strict"; + var ne = require_util(), ie = require_xmlNode(), re = require_DocTypeReader(), se = require_strnum(); + "<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g, ne.nameRegexp); + function addExternalEntities(_) { + const ee = Object.keys(_); + for (let ne = 0; ne < ee.length; ne++) { + const ie = ee[ne]; + this.lastEntities[ie] = { + regex: new RegExp("&" + ie + ";", "g"), + val: _[ie] + }; + } + } + function parseTextData(_, ee, ne, ie, re, se, oe) { + if (void 0 !== _) { + if (this.options.trimValues && !ie) _ = _.trim(); + if (_.length > 0) { + if (!oe) _ = this.replaceEntitiesValue(_); + const ie = this.options.tagValueProcessor(ee, _, ne, re, se); + if (null == ie) return _; else if (typeof ie != typeof _ || ie !== _) return ie; else if (this.options.trimValues) return parseValue(_, this.options.parseTagValue, this.options.numberParseOptions); else if (_.trim() === _) return parseValue(_, this.options.parseTagValue, this.options.numberParseOptions); else return _; + } + } + } + function resolveNameSpace(_) { + if (this.options.removeNSPrefix) { + const ee = _.split(":"), ne = "/" === _.charAt(0) ? "/" : ""; + if ("xmlns" === ee[0]) return ""; + if (2 === ee.length) _ = ne + ee[1]; + } + return _; + } + var oe = new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?", "gm"); + function buildAttributesMap(_, ee, ie) { + if (!this.options.ignoreAttributes && "string" == typeof _) { + const ie = ne.getAllMatches(_, oe), re = ie.length, se = {}; + for (let _ = 0; _ < re; _++) { + const ne = this.resolveNameSpace(ie[_][1]); + let re = ie[_][4], oe = this.options.attributeNamePrefix + ne; + if (ne.length) { + if (this.options.transformAttributeName) oe = this.options.transformAttributeName(oe); + if ("__proto__" === oe) oe = "#__proto__"; + if (void 0 !== re) { + if (this.options.trimValues) re = re.trim(); + re = this.replaceEntitiesValue(re); + const _ = this.options.attributeValueProcessor(ne, re, ee); + if (null == _) se[oe] = re; else if (typeof _ != typeof re || _ !== re) se[oe] = _; else se[oe] = parseValue(re, this.options.parseAttributeValue, this.options.numberParseOptions); + } else if (this.options.allowBooleanAttributes) se[oe] = true; + } + } + if (!Object.keys(se).length) return; + if (this.options.attributesGroupName) { + const _ = {}; + _[this.options.attributesGroupName] = se; + return _; + } + return se; + } + } + var parseXml = function(_) { + _ = _.replace(/\r\n?/g, "\n"); + const ee = new ie("!xml"); + let ne = ee, se = "", oe = ""; + for (let le = 0; le < _.length; le++) if ("<" === _[le]) if ("/" === _[le + 1]) { + const ee = findClosingIndex(_, ">", le, "Closing Tag is not closed."); + let ie = _.substring(le + 2, ee).trim(); + if (this.options.removeNSPrefix) { + const _ = ie.indexOf(":"); + if (-1 !== _) ie = ie.substr(_ + 1); + } + if (this.options.transformTagName) ie = this.options.transformTagName(ie); + if (ne) se = this.saveTextToParentTag(se, ne, oe); + const re = oe.substring(oe.lastIndexOf(".") + 1); + if (ie && -1 !== this.options.unpairedTags.indexOf(ie)) throw new Error(`Unpaired tag can not be used as closing tag: `); + let ue = 0; + if (re && -1 !== this.options.unpairedTags.indexOf(re)) { + ue = oe.lastIndexOf(".", oe.lastIndexOf(".") - 1); + this.tagsNodeStack.pop(); + } else ue = oe.lastIndexOf("."); + oe = oe.substring(0, ue); + ne = this.tagsNodeStack.pop(); + se = ""; + le = ee; + } else if ("?" === _[le + 1]) { + let ee = readTagExp(_, le, false, "?>"); + if (!ee) throw new Error("Pi Tag is not closed."); + se = this.saveTextToParentTag(se, ne, oe); + if (this.options.ignoreDeclaration && "?xml" === ee.tagName || this.options.ignorePiTags) ; else { + const _ = new ie(ee.tagName); + _.add(this.options.textNodeName, ""); + if (ee.tagName !== ee.tagExp && ee.attrExpPresent) _[":@"] = this.buildAttributesMap(ee.tagExp, oe, ee.tagName); + this.addChild(ne, _, oe); + } + le = ee.closeIndex + 1; + } else if ("!--" === _.substr(le + 1, 3)) { + const ee = findClosingIndex(_, "--\x3e", le + 4, "Comment is not closed."); + if (this.options.commentPropName) { + const ie = _.substring(le + 4, ee - 2); + se = this.saveTextToParentTag(se, ne, oe); + ne.add(this.options.commentPropName, [ { + [this.options.textNodeName]: ie + } ]); + } + le = ee; + } else if ("!D" === _.substr(le + 1, 2)) { + const ee = re(_, le); + this.docTypeEntities = ee.entities; + le = ee.i; + } else if ("![" === _.substr(le + 1, 2)) { + const ee = findClosingIndex(_, "]]>", le, "CDATA is not closed.") - 2, ie = _.substring(le + 9, ee); + se = this.saveTextToParentTag(se, ne, oe); + if (this.options.cdataPropName) ne.add(this.options.cdataPropName, [ { + [this.options.textNodeName]: ie + } ]); else { + let _ = this.parseTextData(ie, ne.tagname, oe, true, false, true); + if (null == _) _ = ""; + ne.add(this.options.textNodeName, _); + } + le = ee + 2; + } else { + let re = readTagExp(_, le, this.options.removeNSPrefix), ue = re.tagName, de = re.tagExp, fe = re.attrExpPresent, he = re.closeIndex; + if (this.options.transformTagName) ue = this.options.transformTagName(ue); + if (ne && se) if ("!xml" !== ne.tagname) se = this.saveTextToParentTag(se, ne, oe, false); + const pe = ne; + if (pe && -1 !== this.options.unpairedTags.indexOf(pe.tagname)) { + ne = this.tagsNodeStack.pop(); + oe = oe.substring(0, oe.lastIndexOf(".")); + } + if (ue !== ee.tagname) oe += oe ? "." + ue : ue; + if (this.isItStopNode(this.options.stopNodes, oe, ue)) { + let ee = ""; + if (de.length > 0 && de.lastIndexOf("/") === de.length - 1) le = re.closeIndex; else if (-1 !== this.options.unpairedTags.indexOf(ue)) le = re.closeIndex; else { + const ne = this.readStopNodeData(_, ue, he + 1); + if (!ne) throw new Error(`Unexpected end of ${ue}`); + le = ne.i; + ee = ne.tagContent; + } + const se = new ie(ue); + if (ue !== de && fe) se[":@"] = this.buildAttributesMap(de, oe, ue); + if (ee) ee = this.parseTextData(ee, ue, oe, true, fe, true, true); + oe = oe.substr(0, oe.lastIndexOf(".")); + se.add(this.options.textNodeName, ee); + this.addChild(ne, se, oe); + } else { + if (de.length > 0 && de.lastIndexOf("/") === de.length - 1) { + if ("/" === ue[ue.length - 1]) { + ue = ue.substr(0, ue.length - 1); + de = ue; + } else de = de.substr(0, de.length - 1); + if (this.options.transformTagName) ue = this.options.transformTagName(ue); + const _ = new ie(ue); + if (ue !== de && fe) _[":@"] = this.buildAttributesMap(de, oe, ue); + this.addChild(ne, _, oe); + oe = oe.substr(0, oe.lastIndexOf(".")); + } else { + const _ = new ie(ue); + this.tagsNodeStack.push(ne); + if (ue !== de && fe) _[":@"] = this.buildAttributesMap(de, oe, ue); + this.addChild(ne, _, oe); + ne = _; + } + se = ""; + le = he; + } + } else se += _[le]; + return ee.child; + }; + function addChild(_, ee, ne) { + const ie = this.options.updateTag(ee.tagname, ne, ee[":@"]); + if (false === ie) ; else if ("string" == typeof ie) { + ee.tagname = ie; + _.addChild(ee); + } else _.addChild(ee); + } + var replaceEntitiesValue = function(_) { + if (this.options.processEntities) { + for (let ee in this.docTypeEntities) { + const ne = this.docTypeEntities[ee]; + _ = _.replace(ne.regx, ne.val); + } + for (let ee in this.lastEntities) { + const ne = this.lastEntities[ee]; + _ = _.replace(ne.regex, ne.val); + } + if (this.options.htmlEntities) for (let ee in this.htmlEntities) { + const ne = this.htmlEntities[ee]; + _ = _.replace(ne.regex, ne.val); + } + _ = _.replace(this.ampEntity.regex, this.ampEntity.val); + } + return _; + }; + function saveTextToParentTag(_, ee, ne, ie) { + if (_) { + if (void 0 === ie) ie = 0 === Object.keys(ee.child).length; + if (void 0 !== (_ = this.parseTextData(_, ee.tagname, ne, false, ee[":@"] ? 0 !== Object.keys(ee[":@"]).length : false, ie)) && "" !== _) ee.add(this.options.textNodeName, _); + _ = ""; + } + return _; + } + function isItStopNode(_, ee, ne) { + const ie = "*." + ne; + for (const ne in _) { + const re = _[ne]; + if (ie === re || ee === re) return true; + } + return false; + } + function findClosingIndex(_, ee, ne, ie) { + const re = _.indexOf(ee, ne); + if (-1 === re) throw new Error(ie); else return re + ee.length - 1; + } + function readTagExp(_, ee, ne, ie = ">") { + const re = function tagExpWithClosingIndex(_, ee, ne = ">") { + let ie, re = ""; + for (let se = ee; se < _.length; se++) { + let ee = _[se]; + if (ie) { + if (ee === ie) ie = ""; + } else if ('"' === ee || "'" === ee) ie = ee; else if (ee === ne[0]) if (ne[1]) { + if (_[se + 1] === ne[1]) return { + data: re, + index: se + }; + } else return { + data: re, + index: se + }; else if ("\t" === ee) ee = " "; + re += ee; + } + }(_, ee + 1, ie); + if (!re) return; + let se = re.data; + const oe = re.index, le = se.search(/\s/); + let ue = se, de = true; + if (-1 !== le) { + ue = se.substr(0, le).replace(/\s\s*$/, ""); + se = se.substr(le + 1); + } + if (ne) { + const _ = ue.indexOf(":"); + if (-1 !== _) { + ue = ue.substr(_ + 1); + de = ue !== re.data.substr(_ + 1); + } + } + return { + tagName: ue, + tagExp: se, + closeIndex: oe, + attrExpPresent: de + }; + } + function readStopNodeData(_, ee, ne) { + const ie = ne; + let re = 1; + for (;ne < _.length; ne++) if ("<" === _[ne]) if ("/" === _[ne + 1]) { + const se = findClosingIndex(_, ">", ne, `${ee} is not closed`); + if (_.substring(ne + 2, se).trim() === ee) { + re--; + if (0 === re) return { + tagContent: _.substring(ie, ne), + i: se + }; + } + ne = se; + } else if ("?" === _[ne + 1]) ne = findClosingIndex(_, "?>", ne + 1, "StopNode is not closed."); else if ("!--" === _.substr(ne + 1, 3)) ne = findClosingIndex(_, "--\x3e", ne + 3, "StopNode is not closed."); else if ("![" === _.substr(ne + 1, 2)) ne = findClosingIndex(_, "]]>", ne, "StopNode is not closed.") - 2; else { + const ie = readTagExp(_, ne, ">"); + if (ie) { + if ((ie && ie.tagName) === ee && "/" !== ie.tagExp[ie.tagExp.length - 1]) re++; + ne = ie.closeIndex; + } + } + } + function parseValue(_, ee, ie) { + if (ee && "string" == typeof _) { + const ee = _.trim(); + if ("true" === ee) return true; else if ("false" === ee) return false; else return se(_, ie); + } else if (ne.isExist(_)) return _; else return ""; + } + ee.exports = class { + constructor(_) { + this.options = _; + this.currentNode = null; + this.tagsNodeStack = []; + this.docTypeEntities = {}; + this.lastEntities = { + apos: { + regex: /&(apos|#39|#x27);/g, + val: "'" + }, + gt: { + regex: /&(gt|#62|#x3E);/g, + val: ">" + }, + lt: { + regex: /&(lt|#60|#x3C);/g, + val: "<" + }, + quot: { + regex: /&(quot|#34|#x22);/g, + val: '"' + } + }; + this.ampEntity = { + regex: /&(amp|#38|#x26);/g, + val: "&" + }; + this.htmlEntities = { + space: { + regex: /&(nbsp|#160);/g, + val: " " + }, + cent: { + regex: /&(cent|#162);/g, + val: "¢" + }, + pound: { + regex: /&(pound|#163);/g, + val: "£" + }, + yen: { + regex: /&(yen|#165);/g, + val: "¥" + }, + euro: { + regex: /&(euro|#8364);/g, + val: "€" + }, + copyright: { + regex: /&(copy|#169);/g, + val: "©" + }, + reg: { + regex: /&(reg|#174);/g, + val: "®" + }, + inr: { + regex: /&(inr|#8377);/g, + val: "₹" + } + }; + this.addExternalEntities = addExternalEntities; + this.parseXml = parseXml; + this.parseTextData = parseTextData; + this.resolveNameSpace = resolveNameSpace; + this.buildAttributesMap = buildAttributesMap; + this.isItStopNode = isItStopNode; + this.replaceEntitiesValue = replaceEntitiesValue; + this.readStopNodeData = readStopNodeData; + this.saveTextToParentTag = saveTextToParentTag; + this.addChild = addChild; + } + }; + } +}), require_node2json = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/node2json.js"(_) { + "use strict"; + function compress(_, ee, ne) { + let ie; + const re = {}; + for (let se = 0; se < _.length; se++) { + const oe = _[se], le = propName(oe); + let ue = ""; + if (void 0 === ne) ue = le; else ue = ne + "." + le; + if (le === ee.textNodeName) if (void 0 === ie) ie = oe[le]; else ie += "" + oe[le]; else if (void 0 === le) continue; else if (oe[le]) { + let _ = compress(oe[le], ee, ue); + const ne = isLeafTag(_, ee); + if (oe[":@"]) assignAttributes(_, oe[":@"], ue, ee); else if (1 === Object.keys(_).length && void 0 !== _[ee.textNodeName] && !ee.alwaysCreateTextNode) _ = _[ee.textNodeName]; else if (0 === Object.keys(_).length) if (ee.alwaysCreateTextNode) _[ee.textNodeName] = ""; else _ = ""; + if (void 0 !== re[le] && re.hasOwnProperty(le)) { + if (!Array.isArray(re[le])) re[le] = [ re[le] ]; + re[le].push(_); + } else if (ee.isArray(le, ue, ne)) re[le] = [ _ ]; else re[le] = _; + } + } + if ("string" == typeof ie) { + if (ie.length > 0) re[ee.textNodeName] = ie; + } else if (void 0 !== ie) re[ee.textNodeName] = ie; + return re; + } + function propName(_) { + const ee = Object.keys(_); + for (let _ = 0; _ < ee.length; _++) { + const ne = ee[_]; + if (":@" !== ne) return ne; + } + } + function assignAttributes(_, ee, ne, ie) { + if (ee) { + const re = Object.keys(ee), se = re.length; + for (let oe = 0; oe < se; oe++) { + const se = re[oe]; + if (ie.isArray(se, ne + "." + se, true, true)) _[se] = [ ee[se] ]; else _[se] = ee[se]; + } + } + } + function isLeafTag(_, ee) { + const {textNodeName: ne} = ee, ie = Object.keys(_).length; + if (0 === ie) return true; + if (1 === ie && (_[ne] || "boolean" == typeof _[ne] || 0 === _[ne])) return true; else return false; + } + _.prettify = function prettify(_, ee) { + return compress(_, ee); + }; + } +}), require_XMLParser = __commonJS({ + "node_modules/fast-xml-parser/src/xmlparser/XMLParser.js"(_, ee) { + var {buildOptions: ne} = require_OptionsBuilder(), ie = require_OrderedObjParser(), {prettify: re} = require_node2json(), se = require_validator(); + ee.exports = class { + constructor(_) { + this.externalEntities = {}; + this.options = ne(_); + } + parse(_, ee) { + if ("string" == typeof _) ; else if (_.toString) _ = _.toString(); else throw new Error("XML data is accepted in String or Bytes[] form."); + if (ee) { + if (true === ee) ee = {}; + const ne = se.validate(_, ee); + if (true !== ne) throw Error(`${ne.err.msg}:${ne.err.line}:${ne.err.col}`); + } + const ne = new ie(this.options); + ne.addExternalEntities(this.externalEntities); + const oe = ne.parseXml(_); + if (this.options.preserveOrder || void 0 === oe) return oe; else return re(oe, this.options); + } + addEntity(_, ee) { + if (-1 !== ee.indexOf("&")) throw new Error("Entity value can't have '&'"); else if (-1 !== _.indexOf("&") || -1 !== _.indexOf(";")) throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '"); else if ("&" === ee) throw new Error("An entity with value '&' is not permitted"); else this.externalEntities[_] = ee; + } + }; + } +}), require_orderedJs2Xml = __commonJS({ + "node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js"(_, ee) { + function arrToStr(_, ee, ne, ie) { + let re = "", se = false; + for (let oe = 0; oe < _.length; oe++) { + const le = _[oe], ue = propName(le); + let de = ""; + if (0 === ne.length) de = ue; else de = `${ne}.${ue}`; + if (ue === ee.textNodeName) { + let _ = le[ue]; + if (!isStopNode(de, ee)) { + _ = ee.tagValueProcessor(ue, _); + _ = replaceEntitiesValue(_, ee); + } + if (se) re += ie; + re += _; + se = false; + continue; + } else if (ue === ee.cdataPropName) { + if (se) re += ie; + re += ``; + se = false; + continue; + } else if (ue === ee.commentPropName) { + re += ie + `\x3c!--${le[ue][0][ee.textNodeName]}--\x3e`; + se = true; + continue; + } else if ("?" === ue[0]) { + const _ = attr_to_str(le[":@"], ee), ne = "?xml" === ue ? "" : ie; + let oe = le[ue][0][ee.textNodeName]; + oe = 0 !== oe.length ? " " + oe : ""; + re += ne + `<${ue}${oe}${_}?>`; + se = true; + continue; + } + let fe = ie; + if ("" !== fe) fe += ee.indentBy; + const he = ie + `<${ue}${attr_to_str(le[":@"], ee)}`, pe = arrToStr(le[ue], ee, de, fe); + if (-1 !== ee.unpairedTags.indexOf(ue)) if (ee.suppressUnpairedNode) re += he + ">"; else re += he + "/>"; else if ((!pe || 0 === pe.length) && ee.suppressEmptyNode) re += he + "/>"; else if (pe && pe.endsWith(">")) re += he + `>${pe}${ie}`; else { + re += he + ">"; + if (pe && "" !== ie && (pe.includes("/>") || pe.includes("`; + } + se = true; + } + return re; + } + function propName(_) { + const ee = Object.keys(_); + for (let _ = 0; _ < ee.length; _++) { + const ne = ee[_]; + if (":@" !== ne) return ne; + } + } + function attr_to_str(_, ee) { + let ne = ""; + if (_ && !ee.ignoreAttributes) for (let ie in _) { + let re = ee.attributeValueProcessor(ie, _[ie]); + re = replaceEntitiesValue(re, ee); + if (true === re && ee.suppressBooleanAttributes) ne += ` ${ie.substr(ee.attributeNamePrefix.length)}`; else ne += ` ${ie.substr(ee.attributeNamePrefix.length)}="${re}"`; + } + return ne; + } + function isStopNode(_, ee) { + let ne = (_ = _.substr(0, _.length - ee.textNodeName.length - 1)).substr(_.lastIndexOf(".") + 1); + for (let ie in ee.stopNodes) if (ee.stopNodes[ie] === _ || ee.stopNodes[ie] === "*." + ne) return true; + return false; + } + function replaceEntitiesValue(_, ee) { + if (_ && _.length > 0 && ee.processEntities) for (let ne = 0; ne < ee.entities.length; ne++) { + const ie = ee.entities[ne]; + _ = _.replace(ie.regex, ie.val); + } + return _; + } + ee.exports = function toXml(_, ee) { + let ne = ""; + if (ee.format && ee.indentBy.length > 0) ne = "\n"; + return arrToStr(_, ee, "", ne); + }; + } +}), require_json2xml = __commonJS({ + "node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js"(_, ee) { + "use strict"; + var ne = require_orderedJs2Xml(), ie = { + attributeNamePrefix: "@_", + attributesGroupName: false, + textNodeName: "#text", + ignoreAttributes: true, + cdataPropName: false, + format: false, + indentBy: " ", + suppressEmptyNode: false, + suppressUnpairedNode: true, + suppressBooleanAttributes: true, + tagValueProcessor: function(_, ee) { + return ee; + }, + attributeValueProcessor: function(_, ee) { + return ee; + }, + preserveOrder: false, + commentPropName: false, + unpairedTags: [], + entities: [ { + regex: new RegExp("&", "g"), + val: "&" + }, { + regex: new RegExp(">", "g"), + val: ">" + }, { + regex: new RegExp("<", "g"), + val: "<" + }, { + regex: new RegExp("'", "g"), + val: "'" + }, { + regex: new RegExp('"', "g"), + val: """ + } ], + processEntities: true, + stopNodes: [], + oneListGroup: false + }; + function Builder(_) { + this.options = Object.assign({}, ie, _); + if (this.options.ignoreAttributes || this.options.attributesGroupName) this.isAttribute = function() { + return false; + }; else { + this.attrPrefixLen = this.options.attributeNamePrefix.length; + this.isAttribute = isAttribute; + } + this.processTextOrObjNode = processTextOrObjNode; + if (this.options.format) { + this.indentate = indentate; + this.tagEndChar = ">\n"; + this.newLine = "\n"; + } else { + this.indentate = function() { + return ""; + }; + this.tagEndChar = ">"; + this.newLine = ""; + } + } + Builder.prototype.build = function(_) { + if (this.options.preserveOrder) return ne(_, this.options); else { + if (Array.isArray(_) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) _ = { + [this.options.arrayNodeName]: _ + }; + return this.j2x(_, 0).val; + } + }; + Builder.prototype.j2x = function(_, ee) { + let ne = "", ie = ""; + for (let re in _) if ("undefined" == typeof _[re]) ; else if (null === _[re]) if ("?" === re[0]) ie += this.indentate(ee) + "<" + re + "?" + this.tagEndChar; else ie += this.indentate(ee) + "<" + re + "/" + this.tagEndChar; else if (_[re] instanceof Date) ie += this.buildTextValNode(_[re], re, "", ee); else if ("object" != typeof _[re]) { + const se = this.isAttribute(re); + if (se) ne += this.buildAttrPairStr(se, "" + _[re]); else if (re === this.options.textNodeName) { + let ee = this.options.tagValueProcessor(re, "" + _[re]); + ie += this.replaceEntitiesValue(ee); + } else ie += this.buildTextValNode(_[re], re, "", ee); + } else if (Array.isArray(_[re])) { + const ne = _[re].length; + let se = ""; + for (let oe = 0; oe < ne; oe++) { + const ne = _[re][oe]; + if ("undefined" == typeof ne) ; else if (null === ne) if ("?" === re[0]) ie += this.indentate(ee) + "<" + re + "?" + this.tagEndChar; else ie += this.indentate(ee) + "<" + re + "/" + this.tagEndChar; else if ("object" == typeof ne) if (this.options.oneListGroup) se += this.j2x(ne, ee + 1).val; else se += this.processTextOrObjNode(ne, re, ee); else se += this.buildTextValNode(ne, re, "", ee); + } + if (this.options.oneListGroup) se = this.buildObjectNode(se, re, "", ee); + ie += se; + } else if (this.options.attributesGroupName && re === this.options.attributesGroupName) { + const ee = Object.keys(_[re]), ie = ee.length; + for (let se = 0; se < ie; se++) ne += this.buildAttrPairStr(ee[se], "" + _[re][ee[se]]); + } else ie += this.processTextOrObjNode(_[re], re, ee); + return { + attrStr: ne, + val: ie + }; + }; + Builder.prototype.buildAttrPairStr = function(_, ee) { + ee = this.options.attributeValueProcessor(_, "" + ee); + ee = this.replaceEntitiesValue(ee); + if (this.options.suppressBooleanAttributes && "true" === ee) return " " + _; else return " " + _ + '="' + ee + '"'; + }; + function processTextOrObjNode(_, ee, ne) { + const ie = this.j2x(_, ne + 1); + if (void 0 !== _[this.options.textNodeName] && 1 === Object.keys(_).length) return this.buildTextValNode(_[this.options.textNodeName], ee, ie.attrStr, ne); else return this.buildObjectNode(ie.val, ee, ie.attrStr, ne); + } + Builder.prototype.buildObjectNode = function(_, ee, ne, ie) { + if ("" === _) if ("?" === ee[0]) return this.indentate(ie) + "<" + ee + ne + "?" + this.tagEndChar; else return this.indentate(ie) + "<" + ee + ne + this.closeTag(ee) + this.tagEndChar; else { + let re = "" + _ + re; else if (false !== this.options.commentPropName && ee === this.options.commentPropName && 0 === se.length) return this.indentate(ie) + `\x3c!--${_}--\x3e` + this.newLine; else return this.indentate(ie) + "<" + ee + ne + se + this.tagEndChar + _ + this.indentate(ie) + re; + } + }; + Builder.prototype.closeTag = function(_) { + let ee = ""; + if (-1 !== this.options.unpairedTags.indexOf(_)) { + if (!this.options.suppressUnpairedNode) ee = "/"; + } else if (this.options.suppressEmptyNode) ee = "/"; else ee = `>` + this.newLine; else if (false !== this.options.commentPropName && ee === this.options.commentPropName) return this.indentate(ie) + `\x3c!--${_}--\x3e` + this.newLine; else if ("?" === ee[0]) return this.indentate(ie) + "<" + ee + ne + "?" + this.tagEndChar; else { + let re = this.options.tagValueProcessor(ee, _); + re = this.replaceEntitiesValue(re); + if ("" === re) return this.indentate(ie) + "<" + ee + ne + this.closeTag(ee) + this.tagEndChar; else return this.indentate(ie) + "<" + ee + ne + ">" + re + " 0 && this.options.processEntities) for (let ee = 0; ee < this.options.entities.length; ee++) { + const ne = this.options.entities[ee]; + _ = _.replace(ne.regex, ne.val); + } + return _; + }; + function indentate(_) { + return this.options.indentBy.repeat(_); + } + function isAttribute(_) { + if (_.startsWith(this.options.attributeNamePrefix)) return _.substr(this.attrPrefixLen); else return false; + } + ee.exports = Builder; + } +}), require_fxp = __commonJS({ + "node_modules/fast-xml-parser/src/fxp.js"(_, ee) { + "use strict"; + var ne = require_validator(), ie = require_XMLParser(), re = require_json2xml(); + ee.exports = { + XMLParser: ie, + XMLValidator: ne, + XMLBuilder: re + }; + } +}), require_es5 = __commonJS({ + "node_modules/bowser/es5.js"(_, ee) { + ne = _, ie = function() { + return function(_) { + var ee = {}; + function r2(ne) { + if (ee[ne]) return ee[ne].exports; + var ie = ee[ne] = { + i: ne, + l: false, + exports: {} + }; + return _[ne].call(ie.exports, ie, ie.exports, r2), ie.l = true, ie.exports; + } + return r2.m = _, r2.c = ee, r2.d = function(_, ee, ne) { + r2.o(_, ee) || Object.defineProperty(_, ee, { + enumerable: true, + get: ne + }); + }, r2.r = function(_) { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(_, Symbol.toStringTag, { + value: "Module" + }), Object.defineProperty(_, "__esModule", { + value: true + }); + }, r2.t = function(_, ee) { + if (1 & ee && (_ = r2(_)), 8 & ee) return _; + if (4 & ee && "object" == typeof _ && _ && _.__esModule) return _; + var ne = Object.create(null); + if (r2.r(ne), Object.defineProperty(ne, "default", { + enumerable: true, + value: _ + }), 2 & ee && "string" != typeof _) for (var ie in _) r2.d(ne, ie, (function(ee) { + return _[ee]; + }).bind(null, ie)); + return ne; + }, r2.n = function(_) { + var ee = _ && _.__esModule ? function() { + return _.default; + } : function() { + return _; + }; + return r2.d(ee, "a", ee), ee; + }, r2.o = function(_, ee) { + return Object.prototype.hasOwnProperty.call(_, ee); + }, r2.p = "", r2(r2.s = 90); + }({ + 17: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie = ne(18), re = function() { + function e5() {} + return e5.getFirstMatch = function(_, ee) { + var ne = ee.match(_); + return ne && ne.length > 0 && ne[1] || ""; + }, e5.getSecondMatch = function(_, ee) { + var ne = ee.match(_); + return ne && ne.length > 1 && ne[2] || ""; + }, e5.matchAndReturnConst = function(_, ee, ne) { + if (_.test(ee)) return ne; + }, e5.getWindowsVersionName = function(_) { + switch (_) { + case "NT": + return "NT"; + + case "XP": + return "XP"; + + case "NT 5.0": + return "2000"; + + case "NT 5.1": + return "XP"; + + case "NT 5.2": + return "2003"; + + case "NT 6.0": + return "Vista"; + + case "NT 6.1": + return "7"; + + case "NT 6.2": + return "8"; + + case "NT 6.3": + return "8.1"; + + case "NT 10.0": + return "10"; + + default: + return; + } + }, e5.getMacOSVersionName = function(_) { + var ee = _.split(".").splice(0, 2).map((function(_) { + return parseInt(_, 10) || 0; + })); + if (ee.push(0), 10 === ee[0]) switch (ee[1]) { + case 5: + return "Leopard"; + + case 6: + return "Snow Leopard"; + + case 7: + return "Lion"; + + case 8: + return "Mountain Lion"; + + case 9: + return "Mavericks"; + + case 10: + return "Yosemite"; + + case 11: + return "El Capitan"; + + case 12: + return "Sierra"; + + case 13: + return "High Sierra"; + + case 14: + return "Mojave"; + + case 15: + return "Catalina"; + + default: + return; + } + }, e5.getAndroidVersionName = function(_) { + var ee = _.split(".").splice(0, 2).map((function(_) { + return parseInt(_, 10) || 0; + })); + if (ee.push(0), !(1 === ee[0] && ee[1] < 5)) return 1 === ee[0] && ee[1] < 6 ? "Cupcake" : 1 === ee[0] && ee[1] >= 6 ? "Donut" : 2 === ee[0] && ee[1] < 2 ? "Eclair" : 2 === ee[0] && 2 === ee[1] ? "Froyo" : 2 === ee[0] && ee[1] > 2 ? "Gingerbread" : 3 === ee[0] ? "Honeycomb" : 4 === ee[0] && ee[1] < 1 ? "Ice Cream Sandwich" : 4 === ee[0] && ee[1] < 4 ? "Jelly Bean" : 4 === ee[0] && ee[1] >= 4 ? "KitKat" : 5 === ee[0] ? "Lollipop" : 6 === ee[0] ? "Marshmallow" : 7 === ee[0] ? "Nougat" : 8 === ee[0] ? "Oreo" : 9 === ee[0] ? "Pie" : void 0; + }, e5.getVersionPrecision = function(_) { + return _.split(".").length; + }, e5.compareVersions = function(_, ee, ne) { + void 0 === ne && (ne = false); + var ie = e5.getVersionPrecision(_), re = e5.getVersionPrecision(ee), se = Math.max(ie, re), oe = 0, le = e5.map([ _, ee ], (function(_) { + var ee = se - e5.getVersionPrecision(_), ne = _ + new Array(ee + 1).join(".0"); + return e5.map(ne.split("."), (function(_) { + return new Array(20 - _.length).join("0") + _; + })).reverse(); + })); + for (ne && (oe = se - Math.min(ie, re)), se -= 1; se >= oe; ) { + if (le[0][se] > le[1][se]) return 1; + if (le[0][se] === le[1][se]) { + if (se === oe) return 0; + se -= 1; + } else if (le[0][se] < le[1][se]) return -1; + } + }, e5.map = function(_, ee) { + var ne, ie = []; + if (Array.prototype.map) return Array.prototype.map.call(_, ee); + for (ne = 0; ne < _.length; ne += 1) ie.push(ee(_[ne])); + return ie; + }, e5.find = function(_, ee) { + var ne, ie; + if (Array.prototype.find) return Array.prototype.find.call(_, ee); + for (ne = 0, ie = _.length; ne < ie; ne += 1) { + var re = _[ne]; + if (ee(re, ne)) return re; + } + }, e5.assign = function(_) { + for (var ee, ne, ie = _, re = arguments.length, se = new Array(re > 1 ? re - 1 : 0), oe = 1; oe < re; oe++) se[oe - 1] = arguments[oe]; + if (Object.assign) return Object.assign.apply(Object, [ _ ].concat(se)); + var o2 = function() { + var _ = se[ee]; + "object" == typeof _ && null !== _ && Object.keys(_).forEach((function(ee) { + ie[ee] = _[ee]; + })); + }; + for (ee = 0, ne = se.length; ee < ne; ee += 1) o2(); + return _; + }, e5.getBrowserAlias = function(_) { + return ie.BROWSER_ALIASES_MAP[_]; + }, e5.getBrowserTypeByAlias = function(_) { + return ie.BROWSER_MAP[_] || ""; + }, e5; + }(); + ee.default = re, _.exports = ee.default; + }, + 18: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.ENGINE_MAP = ee.OS_MAP = ee.PLATFORMS_MAP = ee.BROWSER_MAP = ee.BROWSER_ALIASES_MAP = void 0; + ee.BROWSER_ALIASES_MAP = { + "Amazon Silk": "amazon_silk", + "Android Browser": "android", + Bada: "bada", + BlackBerry: "blackberry", + Chrome: "chrome", + Chromium: "chromium", + Electron: "electron", + Epiphany: "epiphany", + Firefox: "firefox", + Focus: "focus", + Generic: "generic", + "Google Search": "google_search", + Googlebot: "googlebot", + "Internet Explorer": "ie", + "K-Meleon": "k_meleon", + Maxthon: "maxthon", + "Microsoft Edge": "edge", + "MZ Browser": "mz", + "NAVER Whale Browser": "naver", + Opera: "opera", + "Opera Coast": "opera_coast", + PhantomJS: "phantomjs", + Puffin: "puffin", + QupZilla: "qupzilla", + QQ: "qq", + QQLite: "qqlite", + Safari: "safari", + Sailfish: "sailfish", + "Samsung Internet for Android": "samsung_internet", + SeaMonkey: "seamonkey", + Sleipnir: "sleipnir", + Swing: "swing", + Tizen: "tizen", + "UC Browser": "uc", + Vivaldi: "vivaldi", + "WebOS Browser": "webos", + WeChat: "wechat", + "Yandex Browser": "yandex", + Roku: "roku" + }; + ee.BROWSER_MAP = { + amazon_silk: "Amazon Silk", + android: "Android Browser", + bada: "Bada", + blackberry: "BlackBerry", + chrome: "Chrome", + chromium: "Chromium", + electron: "Electron", + epiphany: "Epiphany", + firefox: "Firefox", + focus: "Focus", + generic: "Generic", + googlebot: "Googlebot", + google_search: "Google Search", + ie: "Internet Explorer", + k_meleon: "K-Meleon", + maxthon: "Maxthon", + edge: "Microsoft Edge", + mz: "MZ Browser", + naver: "NAVER Whale Browser", + opera: "Opera", + opera_coast: "Opera Coast", + phantomjs: "PhantomJS", + puffin: "Puffin", + qupzilla: "QupZilla", + qq: "QQ Browser", + qqlite: "QQ Browser Lite", + safari: "Safari", + sailfish: "Sailfish", + samsung_internet: "Samsung Internet for Android", + seamonkey: "SeaMonkey", + sleipnir: "Sleipnir", + swing: "Swing", + tizen: "Tizen", + uc: "UC Browser", + vivaldi: "Vivaldi", + webos: "WebOS Browser", + wechat: "WeChat", + yandex: "Yandex Browser" + }; + ee.PLATFORMS_MAP = { + tablet: "tablet", + mobile: "mobile", + desktop: "desktop", + tv: "tv" + }; + ee.OS_MAP = { + WindowsPhone: "Windows Phone", + Windows: "Windows", + MacOS: "macOS", + iOS: "iOS", + Android: "Android", + WebOS: "WebOS", + BlackBerry: "BlackBerry", + Bada: "Bada", + Tizen: "Tizen", + Linux: "Linux", + ChromeOS: "Chrome OS", + PlayStation4: "PlayStation 4", + Roku: "Roku" + }; + ee.ENGINE_MAP = { + EdgeHTML: "EdgeHTML", + Blink: "Blink", + Trident: "Trident", + Presto: "Presto", + Gecko: "Gecko", + WebKit: "WebKit" + }; + }, + 90: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie, re = (ie = ne(91)) && ie.__esModule ? ie : { + default: ie + }, se = ne(18), oe = function() { + function e5() {} + var _; + return e5.getParser = function(_, ee) { + if (void 0 === ee && (ee = false), "string" != typeof _) throw new Error("UserAgent should be a string"); + return new re.default(_, ee); + }, e5.parse = function(_) { + return new re.default(_).getResult(); + }, (_ = [ { + key: "BROWSER_MAP", + get: function() { + return se.BROWSER_MAP; + } + }, { + key: "ENGINE_MAP", + get: function() { + return se.ENGINE_MAP; + } + }, { + key: "OS_MAP", + get: function() { + return se.OS_MAP; + } + }, { + key: "PLATFORMS_MAP", + get: function() { + return se.PLATFORMS_MAP; + } + } ]) && function a2(_, ee) { + for (var ne = 0; ne < ee.length; ne++) { + var ie = ee[ne]; + ie.enumerable = ie.enumerable || false, ie.configurable = true, "value" in ie && (ie.writable = true), + Object.defineProperty(_, ie.key, ie); + } + }(e5, _), e5; + }(); + ee.default = oe, _.exports = ee.default; + }, + 91: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie = u2(ne(92)), re = u2(ne(93)), se = u2(ne(94)), oe = u2(ne(95)), le = u2(ne(17)); + function u2(_) { + return _ && _.__esModule ? _ : { + default: _ + }; + } + var ue = function() { + function e5(_, ee) { + if (void 0 === ee && (ee = false), null == _ || "" === _) throw new Error("UserAgent parameter can't be empty"); + this._ua = _, this.parsedResult = {}, true !== ee && this.parse(); + } + var _ = e5.prototype; + return _.getUA = function() { + return this._ua; + }, _.test = function(_) { + return _.test(this._ua); + }, _.parseBrowser = function() { + var _ = this; + this.parsedResult.browser = {}; + var ee = le.default.find(ie.default, (function(ee) { + if ("function" == typeof ee.test) return ee.test(_); + if (ee.test instanceof Array) return ee.test.some((function(ee) { + return _.test(ee); + })); + throw new Error("Browser's test function is not valid"); + })); + return ee && (this.parsedResult.browser = ee.describe(this.getUA())), this.parsedResult.browser; + }, _.getBrowser = function() { + return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser(); + }, _.getBrowserName = function(_) { + return _ ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || ""; + }, _.getBrowserVersion = function() { + return this.getBrowser().version; + }, _.getOS = function() { + return this.parsedResult.os ? this.parsedResult.os : this.parseOS(); + }, _.parseOS = function() { + var _ = this; + this.parsedResult.os = {}; + var ee = le.default.find(re.default, (function(ee) { + if ("function" == typeof ee.test) return ee.test(_); + if (ee.test instanceof Array) return ee.test.some((function(ee) { + return _.test(ee); + })); + throw new Error("Browser's test function is not valid"); + })); + return ee && (this.parsedResult.os = ee.describe(this.getUA())), this.parsedResult.os; + }, _.getOSName = function(_) { + var ee = this.getOS().name; + return _ ? String(ee).toLowerCase() || "" : ee || ""; + }, _.getOSVersion = function() { + return this.getOS().version; + }, _.getPlatform = function() { + return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform(); + }, _.getPlatformType = function(_) { + void 0 === _ && (_ = false); + var ee = this.getPlatform().type; + return _ ? String(ee).toLowerCase() || "" : ee || ""; + }, _.parsePlatform = function() { + var _ = this; + this.parsedResult.platform = {}; + var ee = le.default.find(se.default, (function(ee) { + if ("function" == typeof ee.test) return ee.test(_); + if (ee.test instanceof Array) return ee.test.some((function(ee) { + return _.test(ee); + })); + throw new Error("Browser's test function is not valid"); + })); + return ee && (this.parsedResult.platform = ee.describe(this.getUA())), this.parsedResult.platform; + }, _.getEngine = function() { + return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine(); + }, _.getEngineName = function(_) { + return _ ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || ""; + }, _.parseEngine = function() { + var _ = this; + this.parsedResult.engine = {}; + var ee = le.default.find(oe.default, (function(ee) { + if ("function" == typeof ee.test) return ee.test(_); + if (ee.test instanceof Array) return ee.test.some((function(ee) { + return _.test(ee); + })); + throw new Error("Browser's test function is not valid"); + })); + return ee && (this.parsedResult.engine = ee.describe(this.getUA())), this.parsedResult.engine; + }, _.parse = function() { + return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), + this; + }, _.getResult = function() { + return le.default.assign({}, this.parsedResult); + }, _.satisfies = function(_) { + var ee = this, ne = {}, ie = 0, re = {}, se = 0; + if (Object.keys(_).forEach((function(ee) { + var oe = _[ee]; + "string" == typeof oe ? (re[ee] = oe, se += 1) : "object" == typeof oe && (ne[ee] = oe, + ie += 1); + })), ie > 0) { + var oe = Object.keys(ne), ue = le.default.find(oe, (function(_) { + return ee.isOS(_); + })); + if (ue) { + var de = this.satisfies(ne[ue]); + if (void 0 !== de) return de; + } + var fe = le.default.find(oe, (function(_) { + return ee.isPlatform(_); + })); + if (fe) { + var he = this.satisfies(ne[fe]); + if (void 0 !== he) return he; + } + } + if (se > 0) { + var pe = Object.keys(re), ge = le.default.find(pe, (function(_) { + return ee.isBrowser(_, true); + })); + if (void 0 !== ge) return this.compareVersion(re[ge]); + } + }, _.isBrowser = function(_, ee) { + void 0 === ee && (ee = false); + var ne = this.getBrowserName().toLowerCase(), ie = _.toLowerCase(), re = le.default.getBrowserTypeByAlias(ie); + return ee && re && (ie = re.toLowerCase()), ie === ne; + }, _.compareVersion = function(_) { + var ee = [ 0 ], ne = _, ie = false, re = this.getBrowserVersion(); + if ("string" == typeof re) return ">" === _[0] || "<" === _[0] ? (ne = _.substr(1), + "=" === _[1] ? (ie = true, ne = _.substr(2)) : ee = [], ">" === _[0] ? ee.push(1) : ee.push(-1)) : "=" === _[0] ? ne = _.substr(1) : "~" === _[0] && (ie = true, + ne = _.substr(1)), ee.indexOf(le.default.compareVersions(re, ne, ie)) > -1; + }, _.isOS = function(_) { + return this.getOSName(true) === String(_).toLowerCase(); + }, _.isPlatform = function(_) { + return this.getPlatformType(true) === String(_).toLowerCase(); + }, _.isEngine = function(_) { + return this.getEngineName(true) === String(_).toLowerCase(); + }, _.is = function(_, ee) { + return void 0 === ee && (ee = false), this.isBrowser(_, ee) || this.isOS(_) || this.isPlatform(_); + }, _.some = function(_) { + var ee = this; + return void 0 === _ && (_ = []), _.some((function(_) { + return ee.is(_); + })); + }, e5; + }(); + ee.default = ue, _.exports = ee.default; + }, + 92: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie, re = (ie = ne(17)) && ie.__esModule ? ie : { + default: ie + }, se = /version\/(\d+(\.?_?\d+)+)/i, oe = [ { + test: [ /googlebot/i ], + describe: function(_) { + var ee = { + name: "Googlebot" + }, ne = re.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /opera/i ], + describe: function(_) { + var ee = { + name: "Opera" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /opr\/|opios/i ], + describe: function(_) { + var ee = { + name: "Opera" + }, ne = re.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /SamsungBrowser/i ], + describe: function(_) { + var ee = { + name: "Samsung Internet for Android" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /Whale/i ], + describe: function(_) { + var ee = { + name: "NAVER Whale Browser" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /MZBrowser/i ], + describe: function(_) { + var ee = { + name: "MZ Browser" + }, ne = re.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /focus/i ], + describe: function(_) { + var ee = { + name: "Focus" + }, ne = re.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /swing/i ], + describe: function(_) { + var ee = { + name: "Swing" + }, ne = re.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /coast/i ], + describe: function(_) { + var ee = { + name: "Opera Coast" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /opt\/\d+(?:.?_?\d+)+/i ], + describe: function(_) { + var ee = { + name: "Opera Touch" + }, ne = re.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /yabrowser/i ], + describe: function(_) { + var ee = { + name: "Yandex Browser" + }, ne = re.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /ucbrowser/i ], + describe: function(_) { + var ee = { + name: "UC Browser" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /Maxthon|mxios/i ], + describe: function(_) { + var ee = { + name: "Maxthon" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /epiphany/i ], + describe: function(_) { + var ee = { + name: "Epiphany" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /puffin/i ], + describe: function(_) { + var ee = { + name: "Puffin" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /sleipnir/i ], + describe: function(_) { + var ee = { + name: "Sleipnir" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /k-meleon/i ], + describe: function(_) { + var ee = { + name: "K-Meleon" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /micromessenger/i ], + describe: function(_) { + var ee = { + name: "WeChat" + }, ne = re.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /qqbrowser/i ], + describe: function(_) { + var ee = { + name: /qqbrowserlite/i.test(_) ? "QQ Browser Lite" : "QQ Browser" + }, ne = re.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /msie|trident/i ], + describe: function(_) { + var ee = { + name: "Internet Explorer" + }, ne = re.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /\sedg\//i ], + describe: function(_) { + var ee = { + name: "Microsoft Edge" + }, ne = re.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /edg([ea]|ios)/i ], + describe: function(_) { + var ee = { + name: "Microsoft Edge" + }, ne = re.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /vivaldi/i ], + describe: function(_) { + var ee = { + name: "Vivaldi" + }, ne = re.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /seamonkey/i ], + describe: function(_) { + var ee = { + name: "SeaMonkey" + }, ne = re.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /sailfish/i ], + describe: function(_) { + var ee = { + name: "Sailfish" + }, ne = re.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /silk/i ], + describe: function(_) { + var ee = { + name: "Amazon Silk" + }, ne = re.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /phantom/i ], + describe: function(_) { + var ee = { + name: "PhantomJS" + }, ne = re.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /slimerjs/i ], + describe: function(_) { + var ee = { + name: "SlimerJS" + }, ne = re.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /blackberry|\bbb\d+/i, /rim\stablet/i ], + describe: function(_) { + var ee = { + name: "BlackBerry" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /(web|hpw)[o0]s/i ], + describe: function(_) { + var ee = { + name: "WebOS Browser" + }, ne = re.default.getFirstMatch(se, _) || re.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /bada/i ], + describe: function(_) { + var ee = { + name: "Bada" + }, ne = re.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /tizen/i ], + describe: function(_) { + var ee = { + name: "Tizen" + }, ne = re.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /qupzilla/i ], + describe: function(_) { + var ee = { + name: "QupZilla" + }, ne = re.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /firefox|iceweasel|fxios/i ], + describe: function(_) { + var ee = { + name: "Firefox" + }, ne = re.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /electron/i ], + describe: function(_) { + var ee = { + name: "Electron" + }, ne = re.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /MiuiBrowser/i ], + describe: function(_) { + var ee = { + name: "Miui" + }, ne = re.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /chromium/i ], + describe: function(_) { + var ee = { + name: "Chromium" + }, ne = re.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, _) || re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /chrome|crios|crmo/i ], + describe: function(_) { + var ee = { + name: "Chrome" + }, ne = re.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /GSA/i ], + describe: function(_) { + var ee = { + name: "Google Search" + }, ne = re.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: function(_) { + var ee = !_.test(/like android/i), ne = _.test(/android/i); + return ee && ne; + }, + describe: function(_) { + var ee = { + name: "Android Browser" + }, ne = re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /playstation 4/i ], + describe: function(_) { + var ee = { + name: "PlayStation 4" + }, ne = re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /safari|applewebkit/i ], + describe: function(_) { + var ee = { + name: "Safari" + }, ne = re.default.getFirstMatch(se, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /.*/i ], + describe: function(_) { + var ee = -1 !== _.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /; + return { + name: re.default.getFirstMatch(ee, _), + version: re.default.getSecondMatch(ee, _) + }; + } + } ]; + ee.default = oe, _.exports = ee.default; + }, + 93: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie, re = (ie = ne(17)) && ie.__esModule ? ie : { + default: ie + }, se = ne(18), oe = [ { + test: [ /Roku\/DVP/ ], + describe: function(_) { + var ee = re.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, _); + return { + name: se.OS_MAP.Roku, + version: ee + }; + } + }, { + test: [ /windows phone/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, _); + return { + name: se.OS_MAP.WindowsPhone, + version: ee + }; + } + }, { + test: [ /windows /i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, _), ne = re.default.getWindowsVersionName(ee); + return { + name: se.OS_MAP.Windows, + version: ee, + versionName: ne + }; + } + }, { + test: [ /Macintosh(.*?) FxiOS(.*?)\// ], + describe: function(_) { + var ee = { + name: se.OS_MAP.iOS + }, ne = re.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /macintosh/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, _).replace(/[_\s]/g, "."), ne = re.default.getMacOSVersionName(ee), ie = { + name: se.OS_MAP.MacOS, + version: ee + }; + return ne && (ie.versionName = ne), ie; + } + }, { + test: [ /(ipod|iphone|ipad)/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, _).replace(/[_\s]/g, "."); + return { + name: se.OS_MAP.iOS, + version: ee + }; + } + }, { + test: function(_) { + var ee = !_.test(/like android/i), ne = _.test(/android/i); + return ee && ne; + }, + describe: function(_) { + var ee = re.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, _), ne = re.default.getAndroidVersionName(ee), ie = { + name: se.OS_MAP.Android, + version: ee + }; + return ne && (ie.versionName = ne), ie; + } + }, { + test: [ /(web|hpw)[o0]s/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, _), ne = { + name: se.OS_MAP.WebOS + }; + return ee && ee.length && (ne.version = ee), ne; + } + }, { + test: [ /blackberry|\bbb\d+/i, /rim\stablet/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, _) || re.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, _) || re.default.getFirstMatch(/\bbb(\d+)/i, _); + return { + name: se.OS_MAP.BlackBerry, + version: ee + }; + } + }, { + test: [ /bada/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, _); + return { + name: se.OS_MAP.Bada, + version: ee + }; + } + }, { + test: [ /tizen/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, _); + return { + name: se.OS_MAP.Tizen, + version: ee + }; + } + }, { + test: [ /linux/i ], + describe: function() { + return { + name: se.OS_MAP.Linux + }; + } + }, { + test: [ /CrOS/ ], + describe: function() { + return { + name: se.OS_MAP.ChromeOS + }; + } + }, { + test: [ /PlayStation 4/ ], + describe: function(_) { + var ee = re.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, _); + return { + name: se.OS_MAP.PlayStation4, + version: ee + }; + } + } ]; + ee.default = oe, _.exports = ee.default; + }, + 94: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie, re = (ie = ne(17)) && ie.__esModule ? ie : { + default: ie + }, se = ne(18), oe = [ { + test: [ /googlebot/i ], + describe: function() { + return { + type: "bot", + vendor: "Google" + }; + } + }, { + test: [ /huawei/i ], + describe: function(_) { + var ee = re.default.getFirstMatch(/(can-l01)/i, _) && "Nova", ne = { + type: se.PLATFORMS_MAP.mobile, + vendor: "Huawei" + }; + return ee && (ne.model = ee), ne; + } + }, { + test: [ /nexus\s*(?:7|8|9|10).*/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet, + vendor: "Nexus" + }; + } + }, { + test: [ /ipad/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet, + vendor: "Apple", + model: "iPad" + }; + } + }, { + test: [ /Macintosh(.*?) FxiOS(.*?)\// ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet, + vendor: "Apple", + model: "iPad" + }; + } + }, { + test: [ /kftt build/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet, + vendor: "Amazon", + model: "Kindle Fire HD 7" + }; + } + }, { + test: [ /silk/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet, + vendor: "Amazon" + }; + } + }, { + test: [ /tablet(?! pc)/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet + }; + } + }, { + test: function(_) { + var ee = _.test(/ipod|iphone/i), ne = _.test(/like (ipod|iphone)/i); + return ee && !ne; + }, + describe: function(_) { + var ee = re.default.getFirstMatch(/(ipod|iphone)/i, _); + return { + type: se.PLATFORMS_MAP.mobile, + vendor: "Apple", + model: ee + }; + } + }, { + test: [ /nexus\s*[0-6].*/i, /galaxy nexus/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile, + vendor: "Nexus" + }; + } + }, { + test: [ /[^-]mobi/i ], + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile + }; + } + }, { + test: function(_) { + return "blackberry" === _.getBrowserName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile, + vendor: "BlackBerry" + }; + } + }, { + test: function(_) { + return "bada" === _.getBrowserName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile + }; + } + }, { + test: function(_) { + return "windows phone" === _.getBrowserName(); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile, + vendor: "Microsoft" + }; + } + }, { + test: function(_) { + var ee = Number(String(_.getOSVersion()).split(".")[0]); + return "android" === _.getOSName(true) && ee >= 3; + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.tablet + }; + } + }, { + test: function(_) { + return "android" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.mobile + }; + } + }, { + test: function(_) { + return "macos" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.desktop, + vendor: "Apple" + }; + } + }, { + test: function(_) { + return "windows" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.desktop + }; + } + }, { + test: function(_) { + return "linux" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.desktop + }; + } + }, { + test: function(_) { + return "playstation 4" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.tv + }; + } + }, { + test: function(_) { + return "roku" === _.getOSName(true); + }, + describe: function() { + return { + type: se.PLATFORMS_MAP.tv + }; + } + } ]; + ee.default = oe, _.exports = ee.default; + }, + 95: function(_, ee, ne) { + "use strict"; + ee.__esModule = true, ee.default = void 0; + var ie, re = (ie = ne(17)) && ie.__esModule ? ie : { + default: ie + }, se = ne(18), oe = [ { + test: function(_) { + return "microsoft edge" === _.getBrowserName(true); + }, + describe: function(_) { + if (/\sedg\//i.test(_)) return { + name: se.ENGINE_MAP.Blink + }; + var ee = re.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, _); + return { + name: se.ENGINE_MAP.EdgeHTML, + version: ee + }; + } + }, { + test: [ /trident/i ], + describe: function(_) { + var ee = { + name: se.ENGINE_MAP.Trident + }, ne = re.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: function(_) { + return _.test(/presto/i); + }, + describe: function(_) { + var ee = { + name: se.ENGINE_MAP.Presto + }, ne = re.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: function(_) { + var ee = _.test(/gecko/i), ne = _.test(/like gecko/i); + return ee && !ne; + }, + describe: function(_) { + var ee = { + name: se.ENGINE_MAP.Gecko + }, ne = re.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + }, { + test: [ /(apple)?webkit\/537\.36/i ], + describe: function() { + return { + name: se.ENGINE_MAP.Blink + }; + } + }, { + test: [ /(apple)?webkit/i ], + describe: function(_) { + var ee = { + name: se.ENGINE_MAP.WebKit + }, ne = re.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, _); + return ne && (ee.version = ne), ee; + } + } ]; + ee.default = oe, _.exports = ee.default; + } + }); + }, "object" == typeof _ && "object" == typeof ee ? ee.exports = ie() : "function" == typeof define && define.amd ? define([], ie) : "object" == typeof _ ? _.bowser = ie() : ne.bowser = ie(); + var ne, ie; + } +}), main_exports = {}; + +__export(main_exports, { + default: () => ObsidianLiveSyncPlugin +}); + +module.exports = __toCommonJS(main_exports); + +var LOG_LEVEL_DEBUG = -1, LOG_LEVEL_VERBOSE = 1, LOG_LEVEL_INFO = 10, LOG_LEVEL_NOTICE = 100, LOG_LEVEL_URGENT = 1e3, LEVEL_INFO = LOG_LEVEL_INFO, defaultLoggerEnv = { + minLogLevel: LOG_LEVEL_INFO +}, defaultLogger = function defaultLogger2(_, ee = LEVEL_INFO, ne) { + if (ee < defaultLoggerEnv.minLogLevel) return; + const ie = (new Date).toLocaleString(), re = "string" == typeof _ ? _ : _ instanceof Error ? `${_.name}:${_.message}` : JSON.stringify(_, null, 2); + if (_ instanceof Error) console.dir(_.stack); + const se = `${ie}\t${ee}\t${re}`; + console.log(se); +}, _logger = defaultLogger; + +function setGlobalLogFunction(_) { + _logger = _; +} + +function Logger(_, ee, ne) { + _logger(_, ee, ne); +} + +var RESULT_TIMED_OUT = Symbol("timed out"), RESULT_NOT_FOUND = Symbol("NotFound"), MAX_DOC_SIZE_BIN = 102400, VER = 10, LEAF_WAIT_TIMEOUT = 9e4, REPLICATION_BUSY_TIMEOUT = 3e6, CANCELLED = Symbol("cancelled"), AUTO_MERGED = Symbol("auto_merged"), NOT_CONFLICTED = Symbol("not_conflicted"), MISSING_OR_ERROR = Symbol("missing_or_error"), LEAVE_TO_SUBSEQUENT = Symbol("leave_to_subsequent_proc"), TIME_ARGUMENT_INFINITY = Symbol("infinity"), VERSIONING_DOCID = "obsydian_livesync_version", MILESTONE_DOCID = "_local/obsydian_livesync_milestone", NODEINFO_DOCID = "_local/obsydian_livesync_nodeinfo", MODE_SELECTIVE = 0, MODE_AUTOMATIC = 1, MODE_PAUSED = 2, MODE_SHINY = 3, REMOTE_COUCHDB = "", REMOTE_MINIO = "MINIO", DEFAULT_SETTINGS = { + remoteType: REMOTE_COUCHDB, + useCustomRequestHandler: false, + couchDB_URI: "", + couchDB_USER: "", + couchDB_PASSWORD: "", + couchDB_DBNAME: "", + liveSync: false, + syncOnSave: false, + syncOnStart: false, + savingDelay: 200, + lessInformationInLog: false, + gcDelay: 300, + versionUpFlash: "", + minimumChunkSize: 20, + longLineThreshold: 250, + showVerboseLog: false, + suspendFileWatching: false, + trashInsteadDelete: true, + periodicReplication: false, + periodicReplicationInterval: 60, + syncOnFileOpen: false, + encrypt: false, + passphrase: "", + usePathObfuscation: false, + doNotDeleteFolder: false, + resolveConflictsByNewerFile: false, + batchSave: false, + batchSaveMinimumDelay: 5, + batchSaveMaximumDelay: 60, + deviceAndVaultName: "", + usePluginSettings: false, + showOwnPlugins: false, + showStatusOnEditor: true, + showStatusOnStatusbar: true, + showOnlyIconsOnEditor: false, + usePluginSync: false, + autoSweepPlugins: false, + autoSweepPluginsPeriodic: false, + notifyPluginOrSettingUpdated: false, + checkIntegrityOnSave: false, + batch_size: 25, + batches_limit: 25, + useHistory: false, + disableRequestURI: false, + skipOlderFilesOnSync: true, + checkConflictOnlyOnOpen: false, + showMergeDialogOnlyOnActive: false, + syncInternalFiles: false, + syncInternalFilesBeforeReplication: false, + syncInternalFilesIgnorePatterns: "\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/", + syncInternalFilesInterval: 60, + additionalSuffixOfDatabaseName: "", + ignoreVersionCheck: false, + lastReadUpdates: 0, + deleteMetadataOfDeletedFiles: false, + syncIgnoreRegEx: "", + syncOnlyRegEx: "", + customChunkSize: 0, + readChunksOnline: true, + watchInternalFileChanges: true, + automaticallyDeleteMetadataOfDeletedFiles: 0, + disableMarkdownAutoMerge: false, + writeDocumentsIfConflicted: false, + useDynamicIterationCount: false, + syncAfterMerge: false, + configPassphraseStore: "", + encryptedPassphrase: "", + encryptedCouchDBConnection: "", + permitEmptyPassphrase: false, + useIndexedDBAdapter: true, + useTimeouts: false, + writeLogToTheFile: false, + doNotPaceReplication: false, + hashCacheMaxCount: 300, + hashCacheMaxAmount: 50, + concurrencyOfReadChunksOnline: 40, + minimumIntervalOfReadChunksOnline: 50, + hashAlg: "xxhash64", + suspendParseReplicationResult: false, + doNotSuspendOnFetching: false, + useIgnoreFiles: false, + ignoreFiles: ".gitignore", + syncOnEditorSave: false, + pluginSyncExtendedSetting: {}, + syncMaxSizeInMB: 50, + settingSyncFile: "", + writeCredentialsForSettingSync: false, + notifyAllSettingSyncFile: false, + isConfigured: void 0, + settingVersion: 0, + enableCompression: false, + accessKey: "", + bucket: "", + endpoint: "", + region: "auto", + secretKey: "", + useEden: false, + maxChunksInEden: 10, + maxTotalLengthInEden: 1024, + maxAgeInEden: 10, + disableCheckingConfigMismatch: false, + displayLanguage: "", + enableChunkSplitterV2: false, + disableWorkerForGeneratingChunks: false, + processSmallFilesInUIThread: false, + notifyThresholdOfRemoteStorageSize: -1, + usePluginSyncV2: false, + usePluginEtc: false +}, PREFERRED_SETTING_CLOUDANT = { + syncMaxSizeInMB: 50, + customChunkSize: 0, + concurrencyOfReadChunksOnline: 100, + minimumIntervalOfReadChunksOnline: 333 +}, PREFERRED_SETTING_SELF_HOSTED = { + ...PREFERRED_SETTING_CLOUDANT, + customChunkSize: 50, + concurrencyOfReadChunksOnline: 30, + minimumIntervalOfReadChunksOnline: 25 +}, PREFERRED_JOURNAL_SYNC = { + ...PREFERRED_SETTING_CLOUDANT, + customChunkSize: 10, + concurrencyOfReadChunksOnline: 30, + minimumIntervalOfReadChunksOnline: 25 +}, TweakValuesShouldMatchedTemplate = { + minimumChunkSize: 20, + longLineThreshold: 250, + encrypt: false, + usePathObfuscation: false, + enableCompression: false, + useEden: false, + customChunkSize: 0, + useDynamicIterationCount: false, + hashAlg: "xxhash64", + enableChunkSplitterV2: true, + maxChunksInEden: 10, + maxTotalLengthInEden: 1024, + maxAgeInEden: 10, + usePluginSyncV2: false +}, TweakValuesRecommendedTemplate = { + useIgnoreFiles: false, + useCustomRequestHandler: false, + batch_size: 25, + batches_limit: 25, + useIndexedDBAdapter: true, + useTimeouts: false, + readChunksOnline: true, + hashCacheMaxCount: 300, + hashCacheMaxAmount: 50, + concurrencyOfReadChunksOnline: 40, + minimumIntervalOfReadChunksOnline: 50, + ignoreFiles: ".gitignore", + syncMaxSizeInMB: 50, + enableChunkSplitterV2: true, + usePluginSyncV2: true +}, TweakValuesDefault = { + usePluginSyncV2: false +}, configurationNames = { + minimumChunkSize: { + name: "Minimum Chunk Size (Not Configurable from the UI Now)." + }, + longLineThreshold: { + name: "Longest chunk line threshold value (Not Configurable from the UI Now)." + }, + encrypt: { + name: "End-to-End Encryption", + desc: "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommend." + }, + usePathObfuscation: { + name: "Path Obfuscation" + }, + enableCompression: { + name: "Data Compression", + status: "EXPERIMENTAL" + }, + useEden: { + name: "Incubate Chunks in Document", + desc: "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.", + status: "BETA" + }, + customChunkSize: { + name: "Enhance chunk size" + }, + useDynamicIterationCount: { + name: "Use dynamic iteration count", + status: "EXPERIMENTAL" + }, + hashAlg: { + name: "The Hash algorithm for chunk IDs", + status: "EXPERIMENTAL" + }, + enableChunkSplitterV2: { + name: "Use splitting-limit-capped chunk splitter", + desc: "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker." + }, + maxChunksInEden: { + name: "Maximum Incubating Chunks", + desc: "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks." + }, + maxTotalLengthInEden: { + name: "Maximum Incubating Chunk Size", + desc: "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks." + }, + maxAgeInEden: { + name: "Maximum Incubation Period", + desc: "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks." + }, + usePluginSyncV2: { + name: "Per-file-saved customization sync", + desc: "If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions." + } +}; + +function statusDisplay(_) { + if (!_) return ""; + if ("EXPERIMENTAL" == _) return " (Experimental)"; + if ("ALPHA" == _) return " (Alpha)"; + if ("BETA" == _) return " (Beta)"; else return ` (${_})`; +} + +function confName(_, ee = "") { + var ne, ie; + if (_ in configurationNames) return `${null == (ne = configurationNames[_]) ? void 0 : ne.name}${statusDisplay(null == (ie = configurationNames[_]) ? void 0 : ie.status)}`; else return `${ee || ""}`; +} + +var _root, _hasMagic, _uflag, _parts, _parent, _parentIndex, _negs, _filledNegs, _options, _toString, _emptyExt, _AST_instances, fillNegs_fn, _AST_static, parseAST_fn, partsToRegExp_fn, parseGlob_fn, TweakValuesTemplate = { + ...TweakValuesRecommendedTemplate, + ...TweakValuesShouldMatchedTemplate +}, DEVICE_ID_PREFERRED = "PREFERRED", PREFIXMD_LOGFILE = "LIVESYNC_LOG_", FLAGMD_REDFLAG = "redflag.md", FLAGMD_REDFLAG2 = "redflag2.md", FLAGMD_REDFLAG2_HR = "flag_rebuild.md", FLAGMD_REDFLAG3 = "redflag3.md", FLAGMD_REDFLAG3_HR = "flag_fetch.md", SYNCINFO_ID = "syncinfo", SALT_OF_PASSPHRASE = "rHGMPtr6oWw7VSa3W3wpa8fT8U", PREFIX_OBFUSCATED = "f:", PREFIX_CHUNK = "h:", PREFIX_ENCRYPTED_CHUNK = "h:+", import_obsidian = require("obsidian"), import_obsidian2 = require("obsidian"), import_diff_match_patch = __toESM(require_diff_match_patch(), 1), normalizePath = import_obsidian2.normalizePath, PERIODIC_PLUGIN_SWEEP = 60, CHeader = "h:", PSCHeader = "ps:", ICHeader = "i:", ICHeaderEnd = "i;", ICHeaderLength = ICHeader.length, ICXHeader = "ix:", configURIBase = "obsidian://setuplivesync?settings=", LRUCache = class { + constructor(_, ee, ne = false) { + Object.defineProperty(this, "cache", { + enumerable: true, + configurable: true, + writable: true, + value: new Map([]) + }); + Object.defineProperty(this, "revCache", { + enumerable: true, + configurable: true, + writable: true, + value: new Map([]) + }); + Object.defineProperty(this, "maxCache", { + enumerable: true, + configurable: true, + writable: true, + value: 200 + }); + Object.defineProperty(this, "maxCachedLength", { + enumerable: true, + configurable: true, + writable: true, + value: 5e7 + }); + Object.defineProperty(this, "cachedLength", { + enumerable: true, + configurable: true, + writable: true, + value: 0 + }); + Object.defineProperty(this, "enableReversed", { + enumerable: true, + configurable: true, + writable: true, + value: true + }); + this.maxCache = _ || 200; + this.maxCachedLength = 1e6 * (ee || 1); + this.enableReversed = !ne; + Logger(`Cache initialized ${this.maxCache} / ${this.maxCachedLength}`, LOG_LEVEL_VERBOSE); + } + clear() { + this.cache.clear(); + this.revCache.clear(); + } + has(_) { + return this.cache.has(_); + } + get(_) { + const ee = this.cache.get(_); + if (ee) { + this.cache.delete(_); + this.cache.set(_, ee); + if (this.enableReversed) { + this.revCache.delete(ee); + this.revCache.set(ee, _); + } + } + return ee; + } + revGet(_) { + const ee = this.revCache.get(_); + if (ee) { + this.cache.delete(ee); + this.revCache.delete(_); + this.cache.set(ee, _); + this.revCache.set(_, ee); + } + return ee; + } + set(_, ee) { + this.cache.set(_, ee); + if (this.enableReversed) this.revCache.set(ee, _); + this.cachedLength += `${ee}`.length; + if (this.cache.size > this.maxCache || this.cachedLength > this.maxCachedLength) for (const [_, ee] of this.cache) { + this.cache.delete(_); + if (this.enableReversed) this.revCache.delete(ee); + this.cachedLength -= `${ee}`.length; + if (this.cache.size <= this.maxCache && this.cachedLength <= this.maxCachedLength) break; + } + } +}, import_brace_expansion = __toESM(require_brace_expansion(), 1), MAX_PATTERN_LENGTH = 65536, assertValidPattern = _ => { + if ("string" != typeof _) throw new TypeError("invalid pattern"); + if (_.length > MAX_PATTERN_LENGTH) throw new TypeError("pattern is too long"); +}, posixClasses = { + "[:alnum:]": [ "\\p{L}\\p{Nl}\\p{Nd}", true ], + "[:alpha:]": [ "\\p{L}\\p{Nl}", true ], + "[:ascii:]": [ "\\x00-\\x7f", false ], + "[:blank:]": [ "\\p{Zs}\\t", true ], + "[:cntrl:]": [ "\\p{Cc}", true ], + "[:digit:]": [ "\\p{Nd}", true ], + "[:graph:]": [ "\\p{Z}\\p{C}", true, true ], + "[:lower:]": [ "\\p{Ll}", true ], + "[:print:]": [ "\\p{C}", true ], + "[:punct:]": [ "\\p{P}", true ], + "[:space:]": [ "\\p{Z}\\t\\r\\n\\v\\f", true ], + "[:upper:]": [ "\\p{Lu}", true ], + "[:word:]": [ "\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true ], + "[:xdigit:]": [ "A-Fa-f0-9", false ] +}, braceEscape = _ => _.replace(/[[\]\\-]/g, "\\$&"), regexpEscape = _ => _.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), rangesToString = _ => _.join(""), parseClass = (_, ee) => { + const ne = ee; + if ("[" !== _.charAt(ne)) throw new Error("not in a brace expression"); + const ie = [], re = []; + let se = ne + 1, oe = false, le = false, ue = false, de = false, fe = ne, he = ""; + e: for (;se < _.length; ) { + const ee = _.charAt(se); + if ("!" !== ee && "^" !== ee || se !== ne + 1) { + if ("]" === ee && oe && !ue) { + fe = se + 1; + break; + } + oe = true; + if ("\\" === ee) if (!ue) { + ue = true; + se++; + continue; + } + if ("[" === ee && !ue) for (const [ee, [oe, ue, de]] of Object.entries(posixClasses)) if (_.startsWith(ee, se)) { + if (he) return [ "$.", false, _.length - ne, true ]; + se += ee.length; + if (de) re.push(oe); else ie.push(oe); + le = le || ue; + continue e; + } + ue = false; + if (!he) if (!_.startsWith("-]", se + 1)) if (!_.startsWith("-", se + 1)) { + ie.push(braceEscape(ee)); + se++; + } else { + he = ee; + se += 2; + } else { + ie.push(braceEscape(ee + "-")); + se += 2; + } else { + if (ee > he) ie.push(braceEscape(he) + "-" + braceEscape(ee)); else if (ee === he) ie.push(braceEscape(ee)); + he = ""; + se++; + } + } else { + de = true; + se++; + } + } + if (fe < se) return [ "", false, 0, false ]; + if (!ie.length && !re.length) return [ "$.", false, _.length - ne, true ]; + if (0 === re.length && 1 === ie.length && /^\\?.$/.test(ie[0]) && !de) { + const _ = 2 === ie[0].length ? ie[0].slice(-1) : ie[0]; + return [ regexpEscape(_), false, fe - ne, false ]; + } + const pe = "[" + (de ? "^" : "") + rangesToString(ie) + "]", ge = "[" + (de ? "" : "^") + rangesToString(re) + "]"; + return [ ie.length && re.length ? "(" + pe + "|" + ge + ")" : ie.length ? pe : ge, le, fe - ne, true ]; +}, unescape2 = (_, {windowsPathsNoEscape: ee = false} = {}) => ee ? _.replace(/\[([^\/\\])\]/g, "$1") : _.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1"), types = new Set([ "!", "?", "+", "*", "@" ]), isExtglobType = _ => types.has(_), startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))", startNoDot = "(?!\\.)", addPatternStart = new Set([ "[", "." ]), justDots = new Set([ "..", "." ]), reSpecials = new Set("().*{}+?[]^$\\!"), regExpEscape = _ => _.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), qmark = "[^/]", star = qmark + "*?", starNoEmpty = qmark + "+?", _AST = class _AST { + constructor(_, ee, ne = {}) { + __privateAdd(this, _AST_instances); + __publicField(this, "type"); + __privateAdd(this, _root); + __privateAdd(this, _hasMagic); + __privateAdd(this, _uflag, false); + __privateAdd(this, _parts, []); + __privateAdd(this, _parent); + __privateAdd(this, _parentIndex); + __privateAdd(this, _negs); + __privateAdd(this, _filledNegs, false); + __privateAdd(this, _options); + __privateAdd(this, _toString); + __privateAdd(this, _emptyExt, false); + this.type = _; + if (_) __privateSet(this, _hasMagic, true); + __privateSet(this, _parent, ee); + __privateSet(this, _root, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _root) : this); + __privateSet(this, _options, __privateGet(this, _root) === this ? ne : __privateGet(__privateGet(this, _root), _options)); + __privateSet(this, _negs, __privateGet(this, _root) === this ? [] : __privateGet(__privateGet(this, _root), _negs)); + if ("!" === _ && !__privateGet(__privateGet(this, _root), _filledNegs)) __privateGet(this, _negs).push(this); + __privateSet(this, _parentIndex, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0); + } + get hasMagic() { + if (void 0 !== __privateGet(this, _hasMagic)) return __privateGet(this, _hasMagic); + for (const _ of __privateGet(this, _parts)) if ("string" != typeof _) if (_.type || _.hasMagic) return __privateSet(this, _hasMagic, true); + return __privateGet(this, _hasMagic); + } + toString() { + if (void 0 !== __privateGet(this, _toString)) return __privateGet(this, _toString); + if (!this.type) return __privateSet(this, _toString, __privateGet(this, _parts).map((_ => String(_))).join("")); else return __privateSet(this, _toString, this.type + "(" + __privateGet(this, _parts).map((_ => String(_))).join("|") + ")"); + } + push(..._) { + for (const ee of _) if ("" !== ee) { + if ("string" != typeof ee && !(ee instanceof _AST && __privateGet(ee, _parent) === this)) throw new Error("invalid part: " + ee); + __privateGet(this, _parts).push(ee); + } + } + toJSON() { + var _; + const ee = null === this.type ? __privateGet(this, _parts).slice().map((_ => "string" == typeof _ ? _ : _.toJSON())) : [ this.type, ...__privateGet(this, _parts).map((_ => _.toJSON())) ]; + if (this.isStart() && !this.type) ee.unshift([]); + if (this.isEnd() && (this === __privateGet(this, _root) || __privateGet(__privateGet(this, _root), _filledNegs) && "!" === (null == (_ = __privateGet(this, _parent)) ? void 0 : _.type))) ee.push({}); + return ee; + } + isStart() { + var _; + if (__privateGet(this, _root) === this) return true; + if (!(null == (_ = __privateGet(this, _parent)) ? void 0 : _.isStart())) return false; + if (0 === __privateGet(this, _parentIndex)) return true; + const ee = __privateGet(this, _parent); + for (let _ = 0; _ < __privateGet(this, _parentIndex); _++) { + const ne = __privateGet(ee, _parts)[_]; + if (!(ne instanceof _AST && "!" === ne.type)) return false; + } + return true; + } + isEnd() { + var _, ee, ne; + if (__privateGet(this, _root) === this) return true; + if ("!" === (null == (_ = __privateGet(this, _parent)) ? void 0 : _.type)) return true; + if (!(null == (ee = __privateGet(this, _parent)) ? void 0 : ee.isEnd())) return false; + if (!this.type) return null == (ne = __privateGet(this, _parent)) ? void 0 : ne.isEnd(); + const ie = __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0; + return __privateGet(this, _parentIndex) === ie - 1; + } + copyIn(_) { + if ("string" == typeof _) this.push(_); else this.push(_.clone(this)); + } + clone(_) { + const ee = new _AST(this.type, _); + for (const _ of __privateGet(this, _parts)) ee.copyIn(_); + return ee; + } + static fromGlob(_, ee = {}) { + var ne; + const ie = new _AST(null, void 0, ee); + __privateMethod(ne = _AST, _AST_static, parseAST_fn).call(ne, _, ie, 0, ee); + return ie; + } + toMMPattern() { + if (this !== __privateGet(this, _root)) return __privateGet(this, _root).toMMPattern(); + const _ = this.toString(), [ee, ne, ie, re] = this.toRegExpSource(); + if (!(ie || __privateGet(this, _hasMagic) || __privateGet(this, _options).nocase && !__privateGet(this, _options).nocaseMagicOnly && _.toUpperCase() !== _.toLowerCase())) return ne; + const se = (__privateGet(this, _options).nocase ? "i" : "") + (re ? "u" : ""); + return Object.assign(new RegExp(`^${ee}$`, se), { + _src: ee, + _glob: _ + }); + } + get options() { + return __privateGet(this, _options); + } + toRegExpSource(_) { + var ee; + const ne = null != _ ? _ : !!__privateGet(this, _options).dot; + if (__privateGet(this, _root) === this) __privateMethod(this, _AST_instances, fillNegs_fn).call(this); + if (!this.type) { + const ie = this.isStart() && this.isEnd(), re = __privateGet(this, _parts).map((ee => { + var ne; + const [re, se, oe, le] = "string" == typeof ee ? __privateMethod(ne = _AST, _AST_static, parseGlob_fn).call(ne, ee, __privateGet(this, _hasMagic), ie) : ee.toRegExpSource(_); + __privateSet(this, _hasMagic, __privateGet(this, _hasMagic) || oe); + __privateSet(this, _uflag, __privateGet(this, _uflag) || le); + return re; + })).join(""); + let se = ""; + if (this.isStart()) if ("string" == typeof __privateGet(this, _parts)[0]) if (!(1 === __privateGet(this, _parts).length && justDots.has(__privateGet(this, _parts)[0]))) { + const ee = addPatternStart, ie = ne && ee.has(re.charAt(0)) || re.startsWith("\\.") && ee.has(re.charAt(2)) || re.startsWith("\\.\\.") && ee.has(re.charAt(4)), oe = !ne && !_ && ee.has(re.charAt(0)); + se = ie ? startNoTraversal : oe ? startNoDot : ""; + } + let oe = ""; + if (this.isEnd() && __privateGet(__privateGet(this, _root), _filledNegs) && "!" === (null == (ee = __privateGet(this, _parent)) ? void 0 : ee.type)) oe = "(?:$|\\/)"; + return [ se + re + oe, unescape2(re), __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), __privateGet(this, _uflag) ]; + } + const ie = "*" === this.type || "+" === this.type, re = "!" === this.type ? "(?:(?!(?:" : "(?:"; + let se = __privateMethod(this, _AST_instances, partsToRegExp_fn).call(this, ne); + if (this.isStart() && this.isEnd() && !se && "!" !== this.type) { + const _ = this.toString(); + __privateSet(this, _parts, [ _ ]); + this.type = null; + __privateSet(this, _hasMagic, void 0); + return [ _, unescape2(this.toString()), false, false ]; + } + let oe = !ie || _ || ne || !startNoDot ? "" : __privateMethod(this, _AST_instances, partsToRegExp_fn).call(this, true); + if (oe === se) oe = ""; + if (oe) se = `(?:${se})(?:${oe})*?`; + let le = ""; + if ("!" === this.type && __privateGet(this, _emptyExt)) le = (this.isStart() && !ne ? startNoDot : "") + starNoEmpty; else le = re + se + ("!" === this.type ? "))" + (this.isStart() && !ne && !_ ? startNoDot : "") + star + ")" : "@" === this.type ? ")" : "?" === this.type ? ")?" : "+" === this.type && oe ? ")" : "*" === this.type && oe ? ")?" : `)${this.type}`); + return [ le, unescape2(se), __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), __privateGet(this, _uflag) ]; + } +}; + +_root = new WeakMap; + +_hasMagic = new WeakMap; + +_uflag = new WeakMap; + +_parts = new WeakMap; + +_parent = new WeakMap; + +_parentIndex = new WeakMap; + +_negs = new WeakMap; + +_filledNegs = new WeakMap; + +_options = new WeakMap; + +_toString = new WeakMap; + +_emptyExt = new WeakMap; + +_AST_instances = new WeakSet; + +fillNegs_fn = function() { + if (this !== __privateGet(this, _root)) throw new Error("should only call on root"); + if (__privateGet(this, _filledNegs)) return this; + this.toString(); + __privateSet(this, _filledNegs, true); + let _; + for (;_ = __privateGet(this, _negs).pop(); ) { + if ("!" !== _.type) continue; + let ee = _, ne = __privateGet(ee, _parent); + for (;ne; ) { + for (let ie = __privateGet(ee, _parentIndex) + 1; !ne.type && ie < __privateGet(ne, _parts).length; ie++) for (const ee of __privateGet(_, _parts)) { + if ("string" == typeof ee) throw new Error("string part in extglob AST??"); + ee.copyIn(__privateGet(ne, _parts)[ie]); + } + ee = ne; + ne = __privateGet(ee, _parent); + } + } + return this; +}; + +_AST_static = new WeakSet; + +parseAST_fn = function(_, ee, ne, ie) { + var re, se; + let oe = false, le = false, ue = -1, de = false; + if (null === ee.type) { + let se = ne, fe = ""; + for (;se < _.length; ) { + const ne = _.charAt(se++); + if (!oe && "\\" !== ne) if (!le) { + if ("[" === ne) { + le = true; + ue = se; + de = false; + fe += ne; + continue; + } + if (ie.noext || !isExtglobType(ne) || "(" !== _.charAt(se)) fe += ne; else { + ee.push(fe); + fe = ""; + const oe = new _AST(ne, ee); + se = __privateMethod(re = _AST, _AST_static, parseAST_fn).call(re, _, oe, se, ie); + ee.push(oe); + } + } else { + if (se === ue + 1) { + if ("^" === ne || "!" === ne) de = true; + } else if ("]" === ne && !(se === ue + 2 && de)) le = false; + fe += ne; + } else { + oe = !oe; + fe += ne; + } + } + ee.push(fe); + return se; + } + let fe = ne + 1, he = new _AST(null, ee); + const pe = []; + let ge = ""; + for (;fe < _.length; ) { + const ne = _.charAt(fe++); + if (!oe && "\\" !== ne) if (!le) { + if ("[" === ne) { + le = true; + ue = fe; + de = false; + ge += ne; + continue; + } + if (!isExtglobType(ne) || "(" !== _.charAt(fe)) if ("|" !== ne) { + if (")" === ne) { + if ("" === ge && 0 === __privateGet(ee, _parts).length) __privateSet(ee, _emptyExt, true); + he.push(ge); + ge = ""; + ee.push(...pe, he); + return fe; + } + ge += ne; + } else { + he.push(ge); + ge = ""; + pe.push(he); + he = new _AST(null, ee); + } else { + he.push(ge); + ge = ""; + const ee = new _AST(ne, he); + he.push(ee); + fe = __privateMethod(se = _AST, _AST_static, parseAST_fn).call(se, _, ee, fe, ie); + } + } else { + if (fe === ue + 1) { + if ("^" === ne || "!" === ne) de = true; + } else if ("]" === ne && !(fe === ue + 2 && de)) le = false; + ge += ne; + } else { + oe = !oe; + ge += ne; + } + } + ee.type = null; + __privateSet(ee, _hasMagic, void 0); + __privateSet(ee, _parts, [ _.substring(ne - 1) ]); + return fe; +}; + +partsToRegExp_fn = function(_) { + return __privateGet(this, _parts).map((ee => { + if ("string" == typeof ee) throw new Error("string type in extglob ast??"); + const [ne, ie, re, se] = ee.toRegExpSource(_); + __privateSet(this, _uflag, __privateGet(this, _uflag) || se); + return ne; + })).filter((_ => !(this.isStart() && this.isEnd() && !_))).join("|"); +}; + +parseGlob_fn = function(_, ee, ne = false) { + let ie = false, re = "", se = false; + for (let oe = 0; oe < _.length; oe++) { + const le = _.charAt(oe); + if (!ie) if ("\\" !== le) { + if ("[" === le) { + const [ne, ie, le, ue] = parseClass(_, oe); + if (le) { + re += ne; + se = se || ie; + oe += le - 1; + ee = ee || ue; + continue; + } + } + if ("*" !== le) if ("?" !== le) re += regExpEscape(le); else { + re += qmark; + ee = true; + } else { + if (ne && "*" === _) re += starNoEmpty; else re += star; + ee = true; + } + } else if (oe === _.length - 1) re += "\\\\"; else ie = true; else { + ie = false; + re += (reSpecials.has(le) ? "\\" : "") + le; + } + } + return [ re, unescape2(_), !!ee, se ]; +}; + +__privateAdd(_AST, _AST_static); + +var AST = _AST, escape = (_, {windowsPathsNoEscape: ee = false} = {}) => ee ? _.replace(/[?*()[\]]/g, "[$&]") : _.replace(/[?*()[\]\\]/g, "\\$&"), minimatch = (_, ee, ne = {}) => { + assertValidPattern(ee); + if (!ne.nocomment && "#" === ee.charAt(0)) return false; else return new Minimatch(ee, ne).match(_); +}, starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/, starDotExtTest = _ => ee => !ee.startsWith(".") && ee.endsWith(_), starDotExtTestDot = _ => ee => ee.endsWith(_), starDotExtTestNocase = _ => { + _ = _.toLowerCase(); + return ee => !ee.startsWith(".") && ee.toLowerCase().endsWith(_); +}, starDotExtTestNocaseDot = _ => { + _ = _.toLowerCase(); + return ee => ee.toLowerCase().endsWith(_); +}, starDotStarRE = /^\*+\.\*+$/, starDotStarTest = _ => !_.startsWith(".") && _.includes("."), starDotStarTestDot = _ => "." !== _ && ".." !== _ && _.includes("."), dotStarRE = /^\.\*+$/, dotStarTest = _ => "." !== _ && ".." !== _ && _.startsWith("."), starRE = /^\*+$/, starTest = _ => 0 !== _.length && !_.startsWith("."), starTestDot = _ => 0 !== _.length && "." !== _ && ".." !== _, qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/, qmarksTestNocase = ([_, ee = ""]) => { + const ne = qmarksTestNoExt([ _ ]); + if (!ee) return ne; + ee = ee.toLowerCase(); + return _ => ne(_) && _.toLowerCase().endsWith(ee); +}, qmarksTestNocaseDot = ([_, ee = ""]) => { + const ne = qmarksTestNoExtDot([ _ ]); + if (!ee) return ne; + ee = ee.toLowerCase(); + return _ => ne(_) && _.toLowerCase().endsWith(ee); +}, qmarksTestDot = ([_, ee = ""]) => { + const ne = qmarksTestNoExtDot([ _ ]); + return !ee ? ne : _ => ne(_) && _.endsWith(ee); +}, qmarksTest = ([_, ee = ""]) => { + const ne = qmarksTestNoExt([ _ ]); + return !ee ? ne : _ => ne(_) && _.endsWith(ee); +}, qmarksTestNoExt = ([_]) => { + const ee = _.length; + return _ => _.length === ee && !_.startsWith("."); +}, qmarksTestNoExtDot = ([_]) => { + const ee = _.length; + return _ => _.length === ee && "." !== _ && ".." !== _; +}, defaultPlatform = "object" == typeof process && process ? "object" == typeof process.env && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix", path = { + win32: { + sep: "\\" + }, + posix: { + sep: "/" + } +}, sep = "win32" === defaultPlatform ? path.win32.sep : path.posix.sep; + +minimatch.sep = sep; + +var GLOBSTAR = Symbol("globstar **"); + +minimatch.GLOBSTAR = GLOBSTAR; + +var qmark2 = "[^/]", star2 = qmark2 + "*?", twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?", twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?", filter = (_, ee = {}) => ne => minimatch(ne, _, ee); + +minimatch.filter = filter; + +var ext = (_, ee = {}) => Object.assign({}, _, ee), defaults = _ => { + if (!_ || "object" != typeof _ || !Object.keys(_).length) return minimatch; + const ee = minimatch; + return Object.assign(((ne, ie, re = {}) => ee(ne, ie, ext(_, re))), { + Minimatch: class Minimatch extends ee.Minimatch { + constructor(ee, ne = {}) { + super(ee, ext(_, ne)); + } + static defaults(ne) { + return ee.defaults(ext(_, ne)).Minimatch; + } + }, + AST: class AST extends ee.AST { + constructor(ee, ne, ie = {}) { + super(ee, ne, ext(_, ie)); + } + static fromGlob(ne, ie = {}) { + return ee.AST.fromGlob(ne, ext(_, ie)); + } + }, + unescape: (ne, ie = {}) => ee.unescape(ne, ext(_, ie)), + escape: (ne, ie = {}) => ee.escape(ne, ext(_, ie)), + filter: (ne, ie = {}) => ee.filter(ne, ext(_, ie)), + defaults: ne => ee.defaults(ext(_, ne)), + makeRe: (ne, ie = {}) => ee.makeRe(ne, ext(_, ie)), + braceExpand: (ne, ie = {}) => ee.braceExpand(ne, ext(_, ie)), + match: (ne, ie, re = {}) => ee.match(ne, ie, ext(_, re)), + sep: ee.sep, + GLOBSTAR + }); +}; + +minimatch.defaults = defaults; + +var braceExpand = (_, ee = {}) => { + assertValidPattern(_); + if (ee.nobrace || !/\{(?:(?!\{).)*\}/.test(_)) return [ _ ]; else return (0, import_brace_expansion.default)(_); +}; + +minimatch.braceExpand = braceExpand; + +var makeRe = (_, ee = {}) => new Minimatch(_, ee).makeRe(); + +minimatch.makeRe = makeRe; + +var match = (_, ee, ne = {}) => { + const ie = new Minimatch(ee, ne); + _ = _.filter((_ => ie.match(_))); + if (ie.options.nonull && !_.length) _.push(ee); + return _; +}; + +minimatch.match = match; + +var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/, regExpEscape2 = _ => _.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), Minimatch = class { + constructor(_, ee = {}) { + __publicField(this, "options"); + __publicField(this, "set"); + __publicField(this, "pattern"); + __publicField(this, "windowsPathsNoEscape"); + __publicField(this, "nonegate"); + __publicField(this, "negate"); + __publicField(this, "comment"); + __publicField(this, "empty"); + __publicField(this, "preserveMultipleSlashes"); + __publicField(this, "partial"); + __publicField(this, "globSet"); + __publicField(this, "globParts"); + __publicField(this, "nocase"); + __publicField(this, "isWindows"); + __publicField(this, "platform"); + __publicField(this, "windowsNoMagicRoot"); + __publicField(this, "regexp"); + assertValidPattern(_); + ee = ee || {}; + this.options = ee; + this.pattern = _; + this.platform = ee.platform || defaultPlatform; + this.isWindows = "win32" === this.platform; + this.windowsPathsNoEscape = !!ee.windowsPathsNoEscape || false === ee.allowWindowsEscape; + if (this.windowsPathsNoEscape) this.pattern = this.pattern.replace(/\\/g, "/"); + this.preserveMultipleSlashes = !!ee.preserveMultipleSlashes; + this.regexp = null; + this.negate = false; + this.nonegate = !!ee.nonegate; + this.comment = false; + this.empty = false; + this.partial = !!ee.partial; + this.nocase = !!this.options.nocase; + this.windowsNoMagicRoot = void 0 !== ee.windowsNoMagicRoot ? ee.windowsNoMagicRoot : !!(this.isWindows && this.nocase); + this.globSet = []; + this.globParts = []; + this.set = []; + this.make(); + } + hasMagic() { + if (this.options.magicalBraces && this.set.length > 1) return true; + for (const _ of this.set) for (const ee of _) if ("string" != typeof ee) return true; + return false; + } + debug(..._) {} + make() { + const _ = this.pattern, ee = this.options; + if (!ee.nocomment && "#" === _.charAt(0)) { + this.comment = true; + return; + } + if (!_) { + this.empty = true; + return; + } + this.parseNegate(); + this.globSet = [ ...new Set(this.braceExpand()) ]; + if (ee.debug) this.debug = (..._) => console.error(..._); + this.debug(this.pattern, this.globSet); + const ne = this.globSet.map((_ => this.slashSplit(_))); + this.globParts = this.preprocess(ne); + this.debug(this.pattern, this.globParts); + let ie = this.globParts.map(((_, ee, ne) => { + if (this.isWindows && this.windowsNoMagicRoot) { + const ee = !("" !== _[0] || "" !== _[1] || "?" !== _[2] && globMagic.test(_[2]) || globMagic.test(_[3])), ne = /^[a-z]:/i.test(_[0]); + if (ee) return [ ..._.slice(0, 4), ..._.slice(4).map((_ => this.parse(_))) ]; else if (ne) return [ _[0], ..._.slice(1).map((_ => this.parse(_))) ]; + } + return _.map((_ => this.parse(_))); + })); + this.debug(this.pattern, ie); + this.set = ie.filter((_ => -1 === _.indexOf(false))); + if (this.isWindows) for (let _ = 0; _ < this.set.length; _++) { + const ee = this.set[_]; + if ("" === ee[0] && "" === ee[1] && "?" === this.globParts[_][2] && "string" == typeof ee[3] && /^[a-z]:$/i.test(ee[3])) ee[2] = "?"; + } + this.debug(this.pattern, this.set); + } + preprocess(_) { + if (this.options.noglobstar) for (let ee = 0; ee < _.length; ee++) for (let ne = 0; ne < _[ee].length; ne++) if ("**" === _[ee][ne]) _[ee][ne] = "*"; + const {optimizationLevel: ee = 1} = this.options; + if (ee >= 2) { + _ = this.firstPhasePreProcess(_); + _ = this.secondPhasePreProcess(_); + } else if (ee >= 1) _ = this.levelOneOptimize(_); else _ = this.adjascentGlobstarOptimize(_); + return _; + } + adjascentGlobstarOptimize(_) { + return _.map((_ => { + let ee = -1; + for (;-1 !== (ee = _.indexOf("**", ee + 1)); ) { + let ne = ee; + for (;"**" === _[ne + 1]; ) ne++; + if (ne !== ee) _.splice(ee, ne - ee); + } + return _; + })); + } + levelOneOptimize(_) { + return _.map((_ => 0 === (_ = _.reduce(((_, ee) => { + const ne = _[_.length - 1]; + if ("**" === ee && "**" === ne) return _; + if (".." === ee) if (ne && ".." !== ne && "." !== ne && "**" !== ne) { + _.pop(); + return _; + } + _.push(ee); + return _; + }), [])).length ? [ "" ] : _)); + } + levelTwoFileOptimize(_) { + if (!Array.isArray(_)) _ = this.slashSplit(_); + let ee = false; + do { + ee = false; + if (!this.preserveMultipleSlashes) { + for (let ne = 1; ne < _.length - 1; ne++) { + const ie = _[ne]; + if (1 !== ne || "" !== ie || "" !== _[0]) if ("." === ie || "" === ie) { + ee = true; + _.splice(ne, 1); + ne--; + } + } + if ("." === _[0] && 2 === _.length && ("." === _[1] || "" === _[1])) { + ee = true; + _.pop(); + } + } + let ne = 0; + for (;-1 !== (ne = _.indexOf("..", ne + 1)); ) { + const ie = _[ne - 1]; + if (ie && "." !== ie && ".." !== ie && "**" !== ie) { + ee = true; + _.splice(ne - 1, 2); + ne -= 2; + } + } + } while (ee); + return 0 === _.length ? [ "" ] : _; + } + firstPhasePreProcess(_) { + let ee = false; + do { + ee = false; + for (let ne of _) { + let ie = -1; + for (;-1 !== (ie = ne.indexOf("**", ie + 1)); ) { + let re = ie; + for (;"**" === ne[re + 1]; ) re++; + if (re > ie) ne.splice(ie + 1, re - ie); + let se = ne[ie + 1]; + const oe = ne[ie + 2], le = ne[ie + 3]; + if (".." !== se) continue; + if (!oe || "." === oe || ".." === oe || !le || "." === le || ".." === le) continue; + ee = true; + ne.splice(ie, 1); + const ue = ne.slice(0); + ue[ie] = "**"; + _.push(ue); + ie--; + } + if (!this.preserveMultipleSlashes) { + for (let _ = 1; _ < ne.length - 1; _++) { + const ie = ne[_]; + if (1 !== _ || "" !== ie || "" !== ne[0]) if ("." === ie || "" === ie) { + ee = true; + ne.splice(_, 1); + _--; + } + } + if ("." === ne[0] && 2 === ne.length && ("." === ne[1] || "" === ne[1])) { + ee = true; + ne.pop(); + } + } + let re = 0; + for (;-1 !== (re = ne.indexOf("..", re + 1)); ) { + const _ = ne[re - 1]; + if (_ && "." !== _ && ".." !== _ && "**" !== _) { + ee = true; + const _ = 1 === re && "**" === ne[re + 1] ? [ "." ] : []; + ne.splice(re - 1, 2, ..._); + if (0 === ne.length) ne.push(""); + re -= 2; + } + } + } + } while (ee); + return _; + } + secondPhasePreProcess(_) { + for (let ee = 0; ee < _.length - 1; ee++) for (let ne = ee + 1; ne < _.length; ne++) { + const ie = this.partsMatch(_[ee], _[ne], !this.preserveMultipleSlashes); + if (ie) { + _[ee] = []; + _[ne] = ie; + break; + } + } + return _.filter((_ => _.length)); + } + partsMatch(_, ee, ne = false) { + let ie = 0, re = 0, se = [], oe = ""; + for (;ie < _.length && re < ee.length; ) if (_[ie] === ee[re]) { + se.push("b" === oe ? ee[re] : _[ie]); + ie++; + re++; + } else if (ne && "**" === _[ie] && ee[re] === _[ie + 1]) { + se.push(_[ie]); + ie++; + } else if (ne && "**" === ee[re] && _[ie] === ee[re + 1]) { + se.push(ee[re]); + re++; + } else if ("*" === _[ie] && ee[re] && (this.options.dot || !ee[re].startsWith(".")) && "**" !== ee[re]) { + if ("b" === oe) return false; + oe = "a"; + se.push(_[ie]); + ie++; + re++; + } else if ("*" === ee[re] && _[ie] && (this.options.dot || !_[ie].startsWith(".")) && "**" !== _[ie]) { + if ("a" === oe) return false; + oe = "b"; + se.push(ee[re]); + ie++; + re++; + } else return false; + return _.length === ee.length && se; + } + parseNegate() { + if (this.nonegate) return; + const _ = this.pattern; + let ee = false, ne = 0; + for (let ie = 0; ie < _.length && "!" === _.charAt(ie); ie++) { + ee = !ee; + ne++; + } + if (ne) this.pattern = _.slice(ne); + this.negate = ee; + } + matchOne(_, ee, ne = false) { + const ie = this.options; + if (this.isWindows) { + const ne = "string" == typeof _[0] && /^[a-z]:$/i.test(_[0]), ie = !ne && "" === _[0] && "" === _[1] && "?" === _[2] && /^[a-z]:$/i.test(_[3]), re = "string" == typeof ee[0] && /^[a-z]:$/i.test(ee[0]), se = ie ? 3 : ne ? 0 : void 0, oe = !re && "" === ee[0] && "" === ee[1] && "?" === ee[2] && "string" == typeof ee[3] && /^[a-z]:$/i.test(ee[3]) ? 3 : re ? 0 : void 0; + if ("number" == typeof se && "number" == typeof oe) { + const [ne, ie] = [ _[se], ee[oe] ]; + if (ne.toLowerCase() === ie.toLowerCase()) { + ee[oe] = ne; + if (oe > se) ee = ee.slice(oe); else if (se > oe) _ = _.slice(se); + } + } + } + const {optimizationLevel: re = 1} = this.options; + if (re >= 2) _ = this.levelTwoFileOptimize(_); + this.debug("matchOne", this, { + file: _, + pattern: ee + }); + this.debug("matchOne", _.length, ee.length); + for (var se = 0, oe = 0, le = _.length, ue = ee.length; se < le && oe < ue; se++, + oe++) { + this.debug("matchOne loop"); + var de = ee[oe], fe = _[se]; + this.debug(ee, de, fe); + if (false === de) return false; + if (de === GLOBSTAR) { + this.debug("GLOBSTAR", [ ee, de, fe ]); + var he = se, pe = oe + 1; + if (pe === ue) { + this.debug("** at the end"); + for (;se < le; se++) if ("." === _[se] || ".." === _[se] || !ie.dot && "." === _[se].charAt(0)) return false; + return true; + } + for (;he < le; ) { + var ge = _[he]; + this.debug("\nglobstar while", _, he, ee, pe, ge); + if (this.matchOne(_.slice(he), ee.slice(pe), ne)) { + this.debug("globstar found match!", he, le, ge); + return true; + } else { + if ("." === ge || ".." === ge || !ie.dot && "." === ge.charAt(0)) { + this.debug("dot detected!", _, he, ee, pe); + break; + } + this.debug("globstar swallow a segment, and continue"); + he++; + } + } + if (ne) { + this.debug("\n>>> no match, partial?", _, he, ee, pe); + if (he === le) return true; + } + return false; + } + let re; + if ("string" == typeof de) { + re = fe === de; + this.debug("string match", de, fe, re); + } else { + re = de.test(fe); + this.debug("pattern match", de, fe, re); + } + if (!re) return false; + } + if (se === le && oe === ue) return true; else if (se === le) return ne; else if (oe === ue) return se === le - 1 && "" === _[se]; else throw new Error("wtf?"); + } + braceExpand() { + return braceExpand(this.pattern, this.options); + } + parse(_) { + assertValidPattern(_); + const ee = this.options; + if ("**" === _) return GLOBSTAR; + if ("" === _) return ""; + let ne, ie = null; + if (ne = _.match(starRE)) ie = ee.dot ? starTestDot : starTest; else if (ne = _.match(starDotExtRE)) ie = (ee.nocase ? ee.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : ee.dot ? starDotExtTestDot : starDotExtTest)(ne[1]); else if (ne = _.match(qmarksRE)) ie = (ee.nocase ? ee.dot ? qmarksTestNocaseDot : qmarksTestNocase : ee.dot ? qmarksTestDot : qmarksTest)(ne); else if (ne = _.match(starDotStarRE)) ie = ee.dot ? starDotStarTestDot : starDotStarTest; else if (ne = _.match(dotStarRE)) ie = dotStarTest; + const re = AST.fromGlob(_, this.options).toMMPattern(); + if (ie && "object" == typeof re) Reflect.defineProperty(re, "test", { + value: ie + }); + return re; + } + makeRe() { + if (this.regexp || false === this.regexp) return this.regexp; + const _ = this.set; + if (!_.length) { + this.regexp = false; + return this.regexp; + } + const ee = this.options, ne = ee.noglobstar ? star2 : ee.dot ? twoStarDot : twoStarNoDot, ie = new Set(ee.nocase ? [ "i" ] : []); + let re = _.map((_ => { + const ee = _.map((_ => { + if (_ instanceof RegExp) for (const ee of _.flags.split("")) ie.add(ee); + return "string" == typeof _ ? regExpEscape2(_) : _ === GLOBSTAR ? GLOBSTAR : _._src; + })); + ee.forEach(((_, ie) => { + const re = ee[ie + 1], se = ee[ie - 1]; + if (_ === GLOBSTAR && se !== GLOBSTAR) if (void 0 === se) if (void 0 !== re && re !== GLOBSTAR) ee[ie + 1] = "(?:\\/|" + ne + "\\/)?" + re; else ee[ie] = ne; else if (void 0 === re) ee[ie - 1] = se + "(?:\\/|" + ne + ")?"; else if (re !== GLOBSTAR) { + ee[ie - 1] = se + "(?:\\/|\\/" + ne + "\\/)" + re; + ee[ie + 1] = GLOBSTAR; + } + })); + return ee.filter((_ => _ !== GLOBSTAR)).join("/"); + })).join("|"); + const [se, oe] = _.length > 1 ? [ "(?:", ")" ] : [ "", "" ]; + re = "^" + se + re + oe + "$"; + if (this.negate) re = "^(?!" + re + ").+$"; + try { + this.regexp = new RegExp(re, [ ...ie ].join("")); + } catch (_) { + this.regexp = false; + } + return this.regexp; + } + slashSplit(_) { + if (this.preserveMultipleSlashes) return _.split("/"); else if (this.isWindows && /^\/\/[^\/]+/.test(_)) return [ "", ..._.split(/\/+/) ]; else return _.split(/\/+/); + } + match(_, ee = this.partial) { + this.debug("match", _, this.pattern); + if (this.comment) return false; + if (this.empty) return "" === _; + if ("/" === _ && ee) return true; + const ne = this.options; + if (this.isWindows) _ = _.split("\\").join("/"); + const ie = this.slashSplit(_); + this.debug(this.pattern, "split", ie); + const re = this.set; + this.debug(this.pattern, "set", re); + let se = ie[ie.length - 1]; + if (!se) for (let _ = ie.length - 2; !se && _ >= 0; _--) se = ie[_]; + for (let _ = 0; _ < re.length; _++) { + const oe = re[_]; + let le = ie; + if (ne.matchBase && 1 === oe.length) le = [ se ]; + if (this.matchOne(le, oe, ee)) if (ne.flipNegate) return true; else return !this.negate; + } + if (ne.flipNegate) return false; else return this.negate; + } + static defaults(_) { + return minimatch.defaults(_).Minimatch; + } +}; + +minimatch.AST = AST; + +minimatch.Minimatch = Minimatch; + +minimatch.escape = escape; + +minimatch.unescape = unescape2; + +var webcrypto, import_crypto = require("crypto"); + +if (globalThis.crypto) webcrypto = globalThis.crypto; else { + const _ = import_crypto.webcrypto; + webcrypto = _; +} + +function base64ToArrayBuffer(_) { + if ("string" == typeof _) return base64ToArrayBufferInternalBrowser(_); + const ee = _.map((_ => base64ToArrayBufferInternalBrowser(_))), ne = ee.reduce(((_, ee) => _ + ee.byteLength), 0), ie = new Uint8Array(ne); + let re = 0; + ee.forEach((_ => { + ie.set(new Uint8Array(_), re); + re += _.byteLength; + })); + return ie.buffer; +} + +function base64ToArrayBufferInternalBrowser(_) { + try { + const ee = globalThis.atob(_), ne = ee.length, ie = new Uint8Array(ne); + for (let _ = 0; _ < ne; _++) ie[_] = ee.charCodeAt(_); + return ie.buffer; + } catch (_) { + Logger("Base64 Decode error", LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + return new ArrayBuffer(0); + } +} + +var encodeChunkSize = 15e7; + +function arrayBufferToBase64internalBrowser(_) { + return new Promise(((ee, ne) => { + const ie = new Blob([ _ ], { + type: "application/octet-binary" + }), re = new FileReader; + re.onload = function(ie) { + var re, se; + const oe = (null == (se = null == (re = ie.target) ? void 0 : re.result) ? void 0 : se.toString()) || ""; + if (0 != _.byteLength && ("" == oe || "data:" == oe)) return ne(new TypeError("Could not parse the encoded string")); + const le = oe.substring(oe.indexOf(",") + 1); + ee(le); + }; + re.readAsDataURL(ie); + })); +} + +async function arrayBufferToBase64Single(_) { + const ee = _ instanceof Uint8Array ? _ : new Uint8Array(_); + if (ee.byteLength < QUANTUM) return btoa(String.fromCharCode.apply(null, [ ...ee ])); else return await arrayBufferToBase64internalBrowser(ee); +} + +async function arrayBufferToBase64(_) { + const ee = _ instanceof Uint8Array ? _ : new Uint8Array(_); + if (ee.byteLength < QUANTUM) return [ btoa(String.fromCharCode.apply(null, [ ...ee ])) ]; + const ne = ee.byteLength, ie = []; + let re = 0; + do { + const _ = re * encodeChunkSize, ne = new DataView(ee.buffer, _, Math.min(encodeChunkSize, ee.byteLength - _)); + ie.push(await arrayBufferToBase64internalBrowser(ne)); + re++; + } while (re * encodeChunkSize < ne); + return ie; +} + +var QUANTUM = 32768; + +function writeString(_) { + const ee = new Uint8Array(4 * _.length), ne = _.length; + let ie = 0, re = 0, se = 0; + for (;se < ne; ) { + re = _.charCodeAt(se++); + if (re < 128) ee[ie++] = re; else if (re < 2048) { + ee[ie++] = 192 | re >>> 6; + ee[ie++] = 128 | 63 & re; + } else if (re < 55296 || re > 57343) { + ee[ie++] = 224 | re >>> 12; + ee[ie++] = 128 | re >>> 6 & 63; + ee[ie++] = 128 | 63 & re; + } else { + re = 65536 + (re - 55296 << 10 | _.charCodeAt(se++) - 56320); + ee[ie++] = 240 | re >>> 18; + ee[ie++] = 128 | re >>> 12 & 63; + ee[ie++] = 128 | re >>> 6 & 63; + ee[ie++] = 128 | 63 & re; + } + } + return ee.slice(0, ie); +} + +function readString(_) { + let ee = 0; + const ne = _.length; + let ie = ""; + for (;ee < ne; ) { + const re = [], se = Math.min(ee + QUANTUM, ne); + for (;ee < se; ) { + const ne = _[ee++]; + if (ne < 128) re.push(ne); else if (192 == (224 & ne)) re.push((31 & ne) << 6 | 63 & _[ee++]); else if (224 == (240 & ne)) re.push((15 & ne) << 12 | (63 & _[ee++]) << 6 | 63 & _[ee++]); else if (240 == (248 & ne)) { + let ie = (7 & ne) << 18 | (63 & _[ee++]) << 12 | (63 & _[ee++]) << 6 | 63 & _[ee++]; + if (ie < 65536) re.push(ie); else { + ie -= 65536; + re.push(55296 + (ie >>> 10), 56320 + (1023 & ie)); + } + } + } + ie += String.fromCharCode(...re); + } + return ie; +} + +function base64ToString(_) { + try { + if ("string" != typeof _) return _.map((_ => base64ToString(_))).join(""); + const ee = atob(_), ne = ee.length, ie = new Uint8Array(ne); + for (let _ = 0; _ < ne; _++) ie[_] = ee.charCodeAt(_); + return readString(ie); + } catch (ee) { + Logger("Base64 To String error", LOG_LEVEL_VERBOSE); + Logger(ee, LOG_LEVEL_VERBOSE); + if ("string" != typeof _) return _.join(""); else return _; + } +} + +var regexpBase64 = /^[A-Za-z0-9+/]+=*$/; + +function tryConvertBase64ToArrayBuffer(_) { + try { + const ee = _.replace(/\r|\n/g, ""); + if (!regexpBase64.test(ee)) return false; + const ne = globalThis.atob(ee); + if (globalThis.btoa(ne) !== ee) return false; + const ie = ne.length, re = new Uint8Array(ie); + for (let _ = 0; _ < ie; _++) re[_] = ne.charCodeAt(_); + return re.buffer; + } catch (_) { + return false; + } +} + +function* arrayToChunkedArray(_, ee) { + const ne = [ ..._ ]; + for (;ne.length; ) { + const _ = ne.splice(0, ee); + yield _; + } +} + +function unique(_) { + return [ ...new Set(_) ]; +} + +function* range(_, ee) { + for (let ne = _; ne <= ee; ne++) yield ne; +} + +var BINARY_CHUNK_MAX = 31457280, table = {}, revTable = {}; + +[ ...range(192, 447) ].forEach(((_, ee) => { + table[ee] = _; + revTable[_] = ee; +})); + +function decodeToArrayBuffer(_) { + if (1 == _.length) return _decodeToArrayBuffer(_[0]); + const ee = _.map((_ => _decodeToArrayBuffer(_))), ne = ee.reduce(((_, ee) => _ + ee.byteLength), 0), ie = new Uint8Array(ne); + let re = 0; + ee.forEach((_ => { + ie.set(new Uint8Array(_), re); + re += _.byteLength; + })); + return ie.buffer; +} + +function _decodeToArrayBuffer(_) { + const ee = new Uint8Array(_.length), ne = _.length; + for (let ie = 0; ie < ne; ie++) { + const ne = _.charCodeAt(ie); + if (ne >= 38 && ne <= 126 && 58 != ne) ee[ie] = ne; else ee[ie] = revTable[ne]; + } + return ee.buffer; +} + +var revMap = {}, numMap = {}; + +for (let _ = 0; _ < 256; _++) { + revMap[`00${_.toString(16)}`.slice(-2)] = _; + numMap[_] = `00${_.toString(16)}`.slice(-2); +} + +function hexStringToUint8Array(_) { + const ee = _.length / 2, ne = new Uint8Array(ee); + for (let ie = 0; ie < ee; ie++) ne[ie] = revMap[_[2 * ie] + _[2 * ie + 1]]; + return ne; +} + +function uint8ArrayToHexString(_) { + return [ ..._ ].map((_ => numMap[_])).join(""); +} + +function concatUInt8Array(_) { + const ee = _.reduce(((_, ee) => _ + ee.length), 0), ne = new Uint8Array(ee); + let ie = 0; + for (const ee of _) { + ne.set(ee, ie); + ie += ee.length; + } + return ne; +} + +function decodeBinary(_) { + if (0 == _.length) return (new Uint8Array).buffer; + if ("string" == typeof _) { + if ("%" === _[0]) return _decodeToArrayBuffer(_.substring(1)); + } else if ("%" === _[0][0]) { + const [ee, ...ne] = _; + return decodeToArrayBuffer([ ee.substring(1), ...ne ]); + } + return base64ToArrayBuffer(_); +} + +function replaceAll(_, ee, ne) { + if ("replaceAll" in String.prototype) return _.replaceAll(ee, ne); else return _.split(ee).join(ne); +} + +function replaceAllPairs(_, ...ee) { + let ne = `${_}`; + for (const [_, ie] of ee) ne = replaceAll(ne, _, ie); + return ne; +} + +function escapeStringToHTML(_) { + if (!_) return ""; else return _.replace(/[<>&"'`]/g, (_ => ({ + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "`": "`" + }[_]))); +} + +function versionNumberString2Number(_) { + return _.split(".").reverse().map(((_, ee) => _ / 1 * 1e3 ** ee)).reduce(((_, ee) => _ + ee), 0); +} + +function isValidFilenameInWidows(_) { + if (/[\u0000-\u001f]|[\\":?<>|*#]/g.test(_)) return false; + if (/(\\|\/)(COM\d|LPT\d|CON|PRN|AUX|NUL|CLOCK$)($|\.)/gi.test(_)) return false; else return true; +} + +function isValidFilenameInDarwin(_) { + return !/[\u0000-\u001f]|[:]/g.test(_); +} + +function isValidFilenameInLinux(_) { + return !/[\u0000-\u001f]|[:]/g.test(_); +} + +function isValidFilenameInAndroid(_) { + return !/[\u0000-\u001f]|[\\":?<>|*#]/g.test(_); +} + +function isFilePath(_) { + if (-1 === _.indexOf(":")) return true; else return false; +} + +function stripAllPrefixes(_) { + if (isFilePath(_)) return _; + const [, ee] = expandFilePathPrefix(_); + return stripAllPrefixes(ee); +} + +function addPrefix(_, ee) { + if (ee && _.startsWith(ee)) return _; else return `${null != ee ? ee : ""}${_}`; +} + +function expandFilePathPrefix(_) { + let [ee, ne] = _.split(":", 2); + if (!ne) { + ne = ee; + ee = ""; + } else ee += ":"; + return [ ee, ne ]; +} + +function expandDocumentIDPrefix(_) { + let [ee, ne] = _.split(":", 2); + if (!ne) { + ne = ee; + ee = ""; + } else ee += ":"; + return [ ee, ne ]; +} + +var hashString = memorizeFuncWithLRUCache((async _ => { + const ee = writeString(_); + let ne = await webcrypto.subtle.digest("SHA-256", ee); + const ie = _.length; + for (let _ = 0; _ < ie; _++) ne = await webcrypto.subtle.digest("SHA-256", ee); + return uint8ArrayToHexString(new Uint8Array(ne)); +})); + +async function path2id_base(_, ee) { + if (_.startsWith(PREFIX_OBFUSCATED)) return _; + let ne = _; + if (ne.startsWith("_")) ne = "/" + ne; + if (!ee) return ne; + const [ie, re] = expandFilePathPrefix(ne); + if (re.startsWith(PREFIX_OBFUSCATED)) return ne; + const se = await hashString(ee), oe = await hashString(`${se}:${_}`); + return ie + PREFIX_OBFUSCATED + oe; +} + +function id2path_base(_, ee) { + if (ee && (null == ee ? void 0 : ee.path)) return id2path_base(ee.path); + if (_.startsWith(PREFIX_OBFUSCATED)) throw new Error("Entry has been obfuscated!"); + const [ne, ie] = expandDocumentIDPrefix(_); + if (ie.startsWith(PREFIX_OBFUSCATED)) throw new Error("Entry has been obfuscated!"); + if (ie.startsWith("/")) return ie.substring(1); else return ne + ie; +} + +function getPath(_) { + return id2path_base(_._id, _); +} + +function stripPrefix(_) { + const [ee, ne] = _.split(":", 2); + if (!ne) return ee; else return ne; +} + +function shouldBeIgnored(_) { + if (_ == FLAGMD_REDFLAG) return true; + if (_ == FLAGMD_REDFLAG2) return true; + if (_ == FLAGMD_REDFLAG2_HR) return true; + if (_ == FLAGMD_REDFLAG3) return true; + if (_ == FLAGMD_REDFLAG3_HR) return true; + if (_.startsWith(PREFIXMD_LOGFILE)) return true; else return false; +} + +function isPlainText(_) { + if (_.endsWith(".md")) return true; + if (_.endsWith(".txt")) return true; + if (_.endsWith(".svg")) return true; + if (_.endsWith(".html")) return true; + if (_.endsWith(".csv")) return true; + if (_.endsWith(".css")) return true; + if (_.endsWith(".js")) return true; + if (_.endsWith(".xml")) return true; + if (_.endsWith(".canvas")) return true; else return false; +} + +function shouldSplitAsPlainText(_) { + if (_.endsWith(".md")) return true; + if (_.endsWith(".txt")) return true; + if (_.endsWith(".canvas")) return true; else return false; +} + +var matchOpts = { + platform: "linux", + dot: true, + flipNegate: true, + nocase: true +}; + +function isAccepted(_, ee) { + if (-1 !== _.indexOf("./") || -1 !== _.indexOf("../")) return false; + const ne = ee.map((_ => _.trim())).filter((_ => _.length > 0 && !_.startsWith("#"))); + let ie; + for (const ee of ne) { + if (ee.endsWith("/")) if (minimatch(_, `${ee}**`, matchOpts)) return false; + const ne = ee.startsWith("!"); + if (minimatch(_, ee, matchOpts) || !ee.endsWith("/") && minimatch(_, ee + "/**", matchOpts)) ie = ne; + } + return ie; +} + +async function isAcceptedAll(_, ee, ne) { + const ie = unique(_.substring(0, _.lastIndexOf("/")).split("/").reduce(((_, ee) => [ ..._, _[_.length - 1] + "/" + ee ]), [ "" ]).map((_ => _.substring(1)))).reverse(); + for (const re of ie) for (const ie of ee) { + const ee = re + "/" + ie, se = await ne(ee); + if (false === se) continue; + const oe = isAccepted(_.substring(re.length ? re.length + 1 : 0), se); + if (void 0 !== oe) return oe; + } + return true; +} + +function makeUniqueString() { + const _ = [ ...Array(30) ].map((() => Math.floor(52 * Math.random()))).map((_ => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[_])).join(""); + return `${Date.now()}-${_}`; +} + +function Semaphore(_, ee) { + let ne = _, ie = 0, re = []; + function execProcess() { + re = re.filter((_ => "DONE" != _.state)); + for (const _ of re) if ("NONE" == _.state) { + if (_.quantity + ie > ne) break; + _.state = "RUNNING"; + ie += _.quantity; + if (null == _ ? void 0 : _.timer) clearTimeout(_.timer); + _.notify(true); + } + } + function release(_) { + const ne = re.find((ee => ee.key == _)); + if (!ne) throw new Error("Missing locked semaphore!"); + if ("RUNNING" == ne.state) ie -= ne.quantity; + ne.state = "DONE"; + if (ee) ee(re.filter((_ => "DONE" != _.state))); + execProcess(); + } + return { + setLimit(_) { + ne = _; + }, + _acquire(_, ee, ie) { + const se = makeUniqueString(); + if (ne < _) throw Error("Too big quantity"); + let notify2 = _ => {}; + const oe = new Promise((_ => { + notify2 = ee => { + if (ee) _((() => { + release(se); + })); else _(false); + }; + })), le = { + key: se, + notify: notify2, + semaphoreStopper: oe, + quantity: _, + memo: ee, + state: "NONE" + }; + if (ie) le.timer = setTimeout((() => { + release(se); + notify2(false); + }), ie); + re.push(le); + execProcess(); + return oe; + }, + acquire(_ = 1, ee) { + return this._acquire(_, null != ee ? ee : "", 0); + }, + tryAcquire(_ = 1, ee = 1, ne) { + return this._acquire(_, null != ne ? ne : "", ee); + }, + peekQueues: () => re + }; +} + +var semiStaticFieldBuffer, KeyBuffs = new Map, decKeyBuffs = new Map, KEY_RECYCLE_COUNT = 100, nonceBuffer = new Uint32Array(1), webcrypto2 = globalThis.crypto; + +async function getKeyForEncrypt(_, ee) { + const ne = `${_}-${ee}`, ie = KeyBuffs.get(ne); + if (ie) { + ie.count--; + if (ie.count > 0) return [ ie.key, ie.salt ]; + ie.count--; + } + const re = 15 - _.length, se = ee ? 1e3 * (re > 0 ? re : 0) + 121 - re : 1e5, oe = (new TextEncoder).encode(_), le = await webcrypto2.subtle.digest({ + name: "SHA-256" + }, oe), ue = await webcrypto2.subtle.importKey("raw", le, { + name: "PBKDF2" + }, false, [ "deriveKey" ]), de = webcrypto2.getRandomValues(new Uint8Array(16)), fe = await webcrypto2.subtle.deriveKey({ + name: "PBKDF2", + salt: de, + iterations: se, + hash: "SHA-256" + }, ue, { + name: "AES-GCM", + length: 256 + }, false, [ "encrypt" ]); + KeyBuffs.set(ne, { + key: fe, + salt: de, + count: KEY_RECYCLE_COUNT + }); + return [ fe, de ]; +} + +var keyGCCount = 5 * KEY_RECYCLE_COUNT, decKeyIdx = 0, decKeyMin = 0; + +async function getKeyForDecryption(_, ee, ne) { + if (--keyGCCount < 0) { + keyGCCount = KEY_RECYCLE_COUNT; + const _ = (decKeyIdx - decKeyMin) / 2; + for (const [ee, ne] of decKeyBuffs) { + if (ne.count < _) decKeyBuffs.delete(ee); + decKeyMin = decKeyIdx; + } + } + decKeyIdx++; + const ie = _ + uint8ArrayToHexString(ee) + ne, re = decKeyBuffs.get(ie); + if (re) { + re.count = decKeyIdx; + return [ re.key, re.salt ]; + } + const se = 15 - _.length, oe = ne ? 1e3 * (se > 0 ? se : 0) + 121 - se : 1e5, le = (new TextEncoder).encode(_), ue = await webcrypto2.subtle.digest({ + name: "SHA-256" + }, le), de = await webcrypto2.subtle.importKey("raw", ue, { + name: "PBKDF2" + }, false, [ "deriveKey" ]), fe = await webcrypto2.subtle.deriveKey({ + name: "PBKDF2", + salt: ee, + iterations: oe, + hash: "SHA-256" + }, de, { + name: "AES-GCM", + length: 256 + }, false, [ "decrypt" ]); + decKeyBuffs.set(ie, { + key: fe, + salt: ee, + count: 0 + }); + return [ fe, ee ]; +} + +function getSemiStaticField(_) { + if (null != semiStaticFieldBuffer && !_) return semiStaticFieldBuffer; else return semiStaticFieldBuffer = webcrypto2.getRandomValues(new Uint8Array(12)); +} + +function getNonce() { + nonceBuffer[0]++; + if (nonceBuffer[0] > 1e4) getSemiStaticField(true); + return nonceBuffer; +} + +async function encrypt(_, ee, ne) { + const [ie, re] = await getKeyForEncrypt(ee, ne), se = getSemiStaticField(), oe = getNonce(), le = new Uint8Array([ ...se, ...new Uint8Array(oe.buffer) ]), ue = writeString(_), de = await webcrypto2.subtle.encrypt({ + name: "AES-GCM", + iv: le + }, ie, ue), fe = "" + await arrayBufferToBase64Single(new Uint8Array(de)); + return `%${uint8ArrayToHexString(le)}${uint8ArrayToHexString(re)}${fe}`; +} + +async function getKeyForObfuscatePath(_, ee, ne) { + const ie = 15 - _.length, re = ne ? 1e3 * (ie > 0 ? ie : 0) + 121 - ie : 1e5, se = (new TextEncoder).encode(_), oe = await webcrypto2.subtle.digest({ + name: "SHA-256" + }, se), le = new Uint8Array(await webcrypto2.subtle.digest({ + name: "SHA-256" + }, new Uint8Array([ ...ee, ...se ]))), ue = le.slice(0, 16), de = le.slice(16, 32), fe = await webcrypto2.subtle.importKey("raw", oe, { + name: "PBKDF2" + }, false, [ "deriveKey" ]); + return [ await webcrypto2.subtle.deriveKey({ + name: "PBKDF2", + salt: ue, + iterations: re, + hash: "SHA-256" + }, fe, { + name: "AES-GCM", + length: 256 + }, false, [ "encrypt" ]), ue, de ]; +} + +async function obfuscatePath(_, ee, ne) { + const ie = writeString(_), [re, se, oe] = await getKeyForObfuscatePath(ee, ie, ne), le = await webcrypto2.subtle.encrypt({ + name: "AES-GCM", + iv: oe + }, re, ie), ue = await arrayBufferToBase64Single(new Uint8Array(le)); + return `%${uint8ArrayToHexString(oe)}${uint8ArrayToHexString(se)}${ue}`; +} + +function isPathProbablyObfuscated(_) { + return _.startsWith("%") && _.length > 64; +} + +async function decryptV2(_, ee, ne) { + try { + const ie = _.substring(1, 33), re = _.substring(33, 65), se = _.substring(65), [oe] = await getKeyForDecryption(ee, hexStringToUint8Array(re), ne), le = hexStringToUint8Array(ie), ue = decodeBinary(se), de = await webcrypto2.subtle.decrypt({ + name: "AES-GCM", + iv: le + }, oe, ue); + return readString(new Uint8Array(de)); + } catch (_) { + Logger("Couldn't decode! You should wrong the passphrases (V2)", LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + throw _; + } +} + +async function decrypt(_, ee, ne) { + try { + if ("%" == _[0]) return decryptV2(_, ee, ne); + if (!_.startsWith("[") || !_.endsWith("]")) throw new Error("Encrypted data corrupted!"); + const ie = _.substring(1, _.length - 1).split(",").map((_ => '"' == _[0] ? _.substring(1, _.length - 1) : _)), [re, se, oe] = ie, [le] = await getKeyForDecryption(ee, hexStringToUint8Array(oe), ne), ue = hexStringToUint8Array(se), de = atob(re), fe = de.length, he = new Uint8Array(fe); + for (let _ = fe; _ >= 0; --_) he[_] = de.charCodeAt(_); + const pe = await webcrypto2.subtle.decrypt({ + name: "AES-GCM", + iv: ue + }, le, he), ge = readString(new Uint8Array(pe)); + return JSON.parse(ge); + } catch (_) { + Logger("Couldn't decode! You should wrong the passphrases", LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + throw _; + } +} + +async function tryDecrypt(_, ee, ne) { + if (!ee) return false; + try { + return await decrypt(_, ee, ne); + } catch (_) { + return false; + } +} + +async function testCrypt() { + const _ = "✨supercalifragilisticexpialidocious✨⛰️", ee = await encrypt(_, "passwordTest", false); + if (_ != await decrypt(ee, "passwordTest", false)) { + Logger("WARNING! Your device would not support encryption.", LOG_LEVEL_VERBOSE); + return false; + } else { + Logger("CRYPT LOGIC OK", LOG_LEVEL_VERBOSE); + const ee = (new TextEncoder).encode(_), ne = await encryptBinary(ee, "passwordTest", false), ie = await decryptBinary(ne, "passwordTest", false); + if (ee.join("-") !== ie.join("-")) { + Logger("WARNING! Your device would not support encryption (Binary).", LOG_LEVEL_VERBOSE); + return false; + } else Logger("CRYPT LOGIC OK (Binary)", LOG_LEVEL_VERBOSE); + return true; + } +} + +async function encryptBinary(_, ee, ne) { + const [ie, re] = await getKeyForEncrypt(ee, ne), se = getSemiStaticField(), oe = getNonce(), le = new Uint8Array([ ...se, ...new Uint8Array(oe.buffer) ]), ue = _, de = new Uint8Array(await webcrypto2.subtle.encrypt({ + name: "AES-GCM", + iv: le + }, ie, ue)), fe = new Uint8Array(de.byteLength + le.byteLength + re.byteLength); + fe.set(le, 0); + fe.set(re, le.byteLength); + fe.set(de, le.byteLength + re.byteLength); + return fe; +} + +async function decryptBinary(_, ee, ne) { + try { + const ie = _.slice(0, 16), re = _.slice(16, 32), se = _.slice(32), [oe] = await getKeyForDecryption(ee, re, ne), le = await webcrypto2.subtle.decrypt({ + name: "AES-GCM", + iv: ie + }, oe, se); + return new Uint8Array(le); + } catch (_) { + Logger("Couldn't decode! You should wrong the passphrases (V2 Bin)", LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + throw _; + } +} + +var delay = (_, ee) => new Promise((ne => { + setTimeout((() => { + ne(ee); + }), _); +})); + +function polyfillPromiseWithResolvers() { + let _, ee; + return { + promise: new Promise(((ne, ie) => { + _ = ne; + ee = ie; + })), + resolve: _, + reject: ee + }; +} + +var promiseWithResolver = polyfillPromiseWithResolvers, noop = () => {}; + +function fireAndForget(_) { + if ("function" == typeof _) return fireAndForget(_()); + _.then(noop).catch(noop); +} + +var queueTails = new Map; + +async function performTask(_) { + if (!_.isRunning) try { + _.isRunning = true; + const ee = await _.task(); + _.resolver(ee); + } catch (ee) { + _.rejector(ee); + } finally { + const ee = _.next; + _.isFinished = true; + if (ee) fireAndForget((() => performTask(ee))); else queueTails.delete(_.key); + } +} + +function _enqueue(_, ee, {swapIfExist: ne, shareResult: ie} = {}) { + const re = promiseWithResolver(), se = { + task: ee, + resolver: re.resolve, + rejector: re.reject, + key: _ + }, oe = queueTails.get(_); + if (void 0 === oe) queueTails.set(_, se); else { + const ee = oe; + queueTails.set(_, se); + ee.next = se; + if (ne) ee.rejector(new Error("Cancelled")); + } + if (!oe || oe.isFinished) fireAndForget((() => performTask(se))); + return re.promise; +} + +function serialized(_, ee) { + return _enqueue(_, ee); +} + +function shareRunningResult(_, ee) { + const ne = queueTails.get(_); + if (!ne) return _enqueue(_, ee); + let ie = ne.resolver, re = ne.rejector; + const se = promiseWithResolver(); + ne.resolver = _ => { + null == ie || ie(_); + se.resolve(_); + }; + ne.rejector = _ => { + null == re || re(_); + se.reject(_); + }; + se.promise.finally((() => { + ie = void 0; + re = void 0; + })); + return se.promise; +} + +function skipIfDuplicated(_, ee) { + if (void 0 !== queueTails.get(_)) return Promise.resolve(null); else return _enqueue(_, ee); +} + +function isLockAcquired(_) { + return void 0 !== queueTails.get(_); +} + +var Notifier = class { + constructor() { + Object.defineProperty(this, "_p", { + enumerable: true, + configurable: true, + writable: true, + value: promiseWithResolver() + }); + Object.defineProperty(this, "isUsed", { + enumerable: true, + configurable: true, + writable: true, + value: false + }); + } + notify() { + if (this.isUsed) { + this.isUsed = false; + this._p.promise.finally(noop); + this._p.resolve(); + this._p = promiseWithResolver(); + } + } + get nextNotify() { + this.isUsed = true; + return this._p.promise; + } +}, processNo = 0, allRunningProcessors = new Set([]), QueueProcessor = class { + get nowProcessing() { + return this.processingEntities; + } + get totalNowProcessing() { + var _; + return this.nowProcessing + ((null == (_ = this._pipeTo) ? void 0 : _.totalNowProcessing) || 0); + } + get remaining() { + return this._queue.length + this.processingEntities + this.waitingEntries; + } + get totalRemaining() { + var _; + return this.remaining + ((null == (_ = this._pipeTo) ? void 0 : _.totalRemaining) || 0); + } + updateStatus(_) { + _(); + this._updateReactiveSource(); + } + suspend() { + this._isSuspended = true; + this._notifier.notify(); + return this; + } + resume() { + this._isSuspended = false; + this._notifier.notify(); + this.requestNextFlush(); + this._run(); + return this; + } + resumePipeLine() { + var _; + null == (_ = this._pipeTo) || _.resumePipeLine(); + this.resume(); + return this; + } + startPipeline() { + this.root.resumePipeLine(); + return this; + } + get root() { + if (void 0 === this._root) return this; else return this._root; + } + constructor(_, ee, ne, ie) { + var re, se, oe, le, ue, de, fe; + Object.defineProperty(this, "_queue", { + enumerable: true, + configurable: true, + writable: true, + value: [] + }); + Object.defineProperty(this, "_processor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_enqueueProcessor", { + enumerable: true, + configurable: true, + writable: true, + value: (_, ee) => (_.push(ee), _) + }); + Object.defineProperty(this, "_isSuspended", { + enumerable: true, + configurable: true, + writable: true, + value: true + }); + Object.defineProperty(this, "_nextProcessNeedsImmediate", { + enumerable: true, + configurable: true, + writable: true, + value: false + }); + Object.defineProperty(this, "_pipeTo", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_waitId", { + enumerable: true, + configurable: true, + writable: true, + value: "" + }); + Object.defineProperty(this, "_root", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_instance", { + enumerable: true, + configurable: true, + writable: true, + value: processNo++ + }); + Object.defineProperty(this, "_remainingReactiveSource", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_totalRemainingReactiveSource", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_processingEntitiesReactiveSource", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_keepResultUntilDownstreamConnected", { + enumerable: true, + configurable: true, + writable: true, + value: false + }); + Object.defineProperty(this, "_keptResult", { + enumerable: true, + configurable: true, + writable: true, + value: [] + }); + Object.defineProperty(this, "_runOnUpdateBatch", { + enumerable: true, + configurable: true, + writable: true, + value: () => {} + }); + Object.defineProperty(this, "concurrentLimit", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(this, "batchSize", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(this, "yieldThreshold", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(this, "delay", { + enumerable: true, + configurable: true, + writable: true, + value: 0 + }); + Object.defineProperty(this, "maintainDelay", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "interval", { + enumerable: true, + configurable: true, + writable: true, + value: 0 + }); + Object.defineProperty(this, "processingEntities", { + enumerable: true, + configurable: true, + writable: true, + value: 0 + }); + Object.defineProperty(this, "waitingEntries", { + enumerable: true, + configurable: true, + writable: true, + value: 0 + }); + Object.defineProperty(this, "_notifier", { + enumerable: true, + configurable: true, + writable: true, + value: new Notifier + }); + Object.defineProperty(this, "_processingBatches", { + enumerable: true, + configurable: true, + writable: true, + value: new Set + }); + Object.defineProperty(this, "addProcessingBatch", { + enumerable: true, + configurable: true, + writable: true, + value: _ => { + const ee = this._processingBatches.add(_); + this._updateBatchProcessStatus(); + return ee; + } + }); + Object.defineProperty(this, "deleteProcessingBatch", { + enumerable: true, + configurable: true, + writable: true, + value: _ => { + const ee = this._processingBatches.delete(_); + this._updateBatchProcessStatus(); + return ee; + } + }); + Object.defineProperty(this, "_processing", { + enumerable: true, + configurable: true, + writable: true, + value: false + }); + this._root = this; + this._processor = _; + this.batchSize = null != (re = null == ee ? void 0 : ee.batchSize) ? re : 1; + this.yieldThreshold = null != (oe = null != (se = null == ee ? void 0 : ee.yieldThreshold) ? se : null == ee ? void 0 : ee.batchSize) ? oe : 0; + this.concurrentLimit = null != (le = null == ee ? void 0 : ee.concurrentLimit) ? le : 1; + this.delay = null != (ue = null == ee ? void 0 : ee.delay) ? ue : 0; + this.maintainDelay = null != (de = null == ee ? void 0 : ee.maintainDelay) ? de : false; + this.interval = null != (fe = null == ee ? void 0 : ee.interval) ? fe : 0; + if (null == ee ? void 0 : ee.keepResultUntilDownstreamConnected) this._keepResultUntilDownstreamConnected = ee.keepResultUntilDownstreamConnected; + if (null == ee ? void 0 : ee.remainingReactiveSource) this._remainingReactiveSource = null == ee ? void 0 : ee.remainingReactiveSource; + if (null == ee ? void 0 : ee.totalRemainingReactiveSource) this._totalRemainingReactiveSource = null == ee ? void 0 : ee.totalRemainingReactiveSource; + if (null == ee ? void 0 : ee.processingEntitiesReactiveSource) this._processingEntitiesReactiveSource = null == ee ? void 0 : ee.processingEntitiesReactiveSource; + if (void 0 !== (null == ee ? void 0 : ee.suspended)) this._isSuspended = null == ee ? void 0 : ee.suspended; + if (ie) this.replaceEnqueueProcessor(ie); + if (void 0 !== (null == ee ? void 0 : ee.pipeTo)) this.pipeTo(ee.pipeTo); + if (ne) this.enqueueAll(ne); + allRunningProcessors.add(this); + this._run(); + } + replaceEnqueueProcessor(_) { + this._enqueueProcessor = _; + return this; + } + modifyQueue(_) { + this._queue = _(this._queue); + this._notifier.notify(); + } + clearQueue() { + this._queue = []; + this._notifier.notify(); + } + onUpdateProgress(_) { + this._runOnUpdateBatch = _; + return this; + } + pipeTo(_) { + this._pipeTo = _; + this._pipeTo._root = this.root; + if (this._keptResult.length > 0) { + const _ = [ ...this._keptResult ]; + this._keptResult = []; + this._pipeTo.enqueueAll(_); + } + return _; + } + isIdle() { + return this._isIdle() && (!this._pipeTo ? true : this._pipeTo.isIdle()); + } + _isIdle() { + return 0 == this.totalRemaining; + } + async _idleDetector() { + if (this._isSuspended) return Promise.resolve(); + if (this._isIdle()) return Promise.resolve(); + do { + await Promise.race([ delay(3e3), this._notifier.nextNotify ]); + } while (!this._isIdle()); + return Promise.resolve(); + } + idleDetectors() { + const _ = this._idleDetector(); + if (this._pipeTo) return [ _, ...this._pipeTo.idleDetectors() ]; else return [ _ ]; + } + get isSuspended() { + var _; + return this._isSuspended || (null == (_ = this._pipeTo) ? void 0 : _.isSuspended) || false; + } + _updateReactiveSource() { + this.root.updateReactiveSource(); + } + updateReactiveSource() { + if (this._pipeTo) this._pipeTo.updateReactiveSource(); + if (this._remainingReactiveSource) this._remainingReactiveSource.value = this.remaining; + if (this._totalRemainingReactiveSource) this._totalRemainingReactiveSource.value = this.totalRemaining; + if (this._processingEntitiesReactiveSource) this._processingEntitiesReactiveSource.value = this.nowProcessing; + } + _updateBatchProcessStatus() { + this._updateReactiveSource(); + this._runOnUpdateBatch(); + } + _collectBatch() { + return this._queue.splice(0, this.batchSize); + } + _canCollectBatch() { + return 0 !== this._queue.length; + } + enqueue(_) { + this._queue = this._enqueueProcessor(this._queue, _); + this._updateBatchProcessStatus(); + this._notifier.notify(); + return this; + } + enqueueAll(_) { + let ee = this._queue; + for (const ne of _) ee = this._enqueueProcessor(ee, ne); + this._queue = ee; + this._updateBatchProcessStatus(); + this._notifier.notify(); + return this; + } + requestNextFlush() { + if (this._canCollectBatch()) { + this._nextProcessNeedsImmediate = true; + this._notifier.notify(); + } + } + flush() { + if (!this._isSuspended) { + this.requestNextFlush(); + return this.waitForAllDownstream(); + } + } + async waitForAllDownstream(_) { + const ee = []; + if (_) ee.push(delay(_, RESULT_TIMED_OUT)); + do { + const _ = this.idleDetectors(), ne = [ ...ee, Promise.all(_) ]; + if (await Promise.race(ne) === RESULT_TIMED_OUT) return false; + } while (!this.isIdle()); + return true; + } + waitForAllProcessed(_) { + this.root.startPipeline(); + return this.root.waitForAllDownstream(_); + } + async waitForAllDoneAndTerminate(_) { + this.root.startPipeline(); + const ee = await this.root.waitForAllDownstream(_); + this.terminateAll(); + return ee; + } + async _runProcessor(_) { + const ee = await this._processor(_); + if (ee) if (this._pipeTo) this._pipeTo.enqueueAll(ee); else if (this._keepResultUntilDownstreamConnected) this._keptResult.push(...ee); + } + async* pump() { + let _, ee = true; + do { + if (this._canCollectBatch()) { + if (ee) await this.delayUntilRequested(this.delay); + _ = this._collectBatch(); + if (0 != _.length) { + yield _; + if (this._canCollectBatch()) ee = false; + } + } else { + ee = true; + await Promise.race([ this._notifier.nextNotify, delay(3e3) ]); + } + } while (this._canCollectBatch() && !this._isSuspended); + } + async delayUntilRequested(_) { + if (this._nextProcessNeedsImmediate) { + this._nextProcessNeedsImmediate = false; + return; + } + const ee = delay(_, RESULT_TIMED_OUT); + let ne; + do { + ne = await Promise.race([ this._notifier.nextNotify, ee ]); + } while (ne !== RESULT_TIMED_OUT && false === this._nextProcessNeedsImmediate && this.yieldThreshold >= this._queue.length); + this._nextProcessNeedsImmediate = false; + } + async _process() { + if (this._processing && this._isSuspended) return; + let _ = 0; + try { + this._processing = true; + do { + const ee = this.pump(); + for await (const ne of ee) { + const ee = ne.length; + this.updateStatus((() => { + this.waitingEntries += ee; + })); + for (;this._processingBatches.size >= this.concurrentLimit; ) await this._notifier.nextNotify; + const ie = Date.now() + Math.random(), batchTask = async () => { + this.updateStatus((() => { + this.processingEntities += ee; + this.waitingEntries -= ee; + })); + this.addProcessingBatch(ie); + try { + if (this.interval && _) { + const ee = Date.now() - _; + if (ee < this.interval) { + const _ = this.interval - ee; + await delay(_); + } + } + _ = Date.now(); + await this._runProcessor(ne); + } catch (_) { + Logger("Processor error!"); + Logger(_, LOG_LEVEL_VERBOSE); + } finally { + this.deleteProcessingBatch(ie); + this.updateStatus((() => { + this.processingEntities -= ee; + })); + this._notifier.notify(); + } + }; + this._notifier.notify(); + fireAndForget((() => batchTask())); + } + await this._notifier.nextNotify; + } while (!this._isSuspended); + } finally { + this._processing = false; + } + } + _run() { + if (!this._isSuspended) if (!this._processing) fireAndForget((() => this._process())); + } + terminateAll() { + this.root.terminate(); + } + terminate() { + if (this._pipeTo) { + this._pipeTo.terminate(); + this._pipeTo = void 0; + } + this._isSuspended = true; + this._enqueueProcessor = () => []; + this._processor = () => Promise.resolve([]); + this.clearQueue(); + this._notifier.notify(); + this._notifier.notify(); + this._notifier.notify(); + this._queue.length = 0; + allRunningProcessors.delete(this); + } +}; + +function stopAllRunningProcessors() { + const _ = [ ...allRunningProcessors ]; + for (const ee of _) ee.terminate(); +} + +var ch2 = {}, wk = function(_, ee, ne, ie, re) { + var se = new Worker(ch2[ee] || (ch2[ee] = URL.createObjectURL(new Blob([ _ + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})' ], { + type: "text/javascript" + })))); + se.onmessage = function(_) { + var ee = _.data, ne = ee.$e$; + if (ne) { + var ie = new Error(ne[0]); + ie["code"] = ne[1]; + ie.stack = ne[2]; + re(ie, null); + } else re(null, ee); + }; + se.postMessage(ne, ie); + return se; +}, u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array, fleb = new u8([ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0 ]), fdeb = new u8([ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0 ]), clim = new u8([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]), freb = function(_, ee) { + for (var ne = new u16(31), ie = 0; ie < 31; ++ie) ne[ie] = ee += 1 << _[ie - 1]; + var re = new i32(ne[30]); + for (ie = 1; ie < 30; ++ie) for (var se = ne[ie]; se < ne[ie + 1]; ++se) re[se] = se - ne[ie] << 5 | ie; + return { + b: ne, + r: re + }; +}, _a = freb(fleb, 2), fl = _a.b, revfl = _a.r; + +fl[28] = 258, revfl[258] = 28; + +var x2, _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r, rev = new u16(32768); + +for (i2 = 0; i2 < 32768; ++i2) { + x2 = (61680 & (x2 = (52428 & (x2 = (43690 & i2) >> 1 | (21845 & i2) << 1)) >> 2 | (13107 & x2) << 2)) >> 4 | (3855 & x2) << 4; + rev[i2] = ((65280 & x2) >> 8 | (255 & x2) << 8) >> 1; +} + +var hMap = function(_, ee, ne) { + for (var ie = _.length, re = 0, se = new u16(ee); re < ie; ++re) if (_[re]) ++se[_[re] - 1]; + var oe, le = new u16(ee); + for (re = 1; re < ee; ++re) le[re] = le[re - 1] + se[re - 1] << 1; + if (ne) { + oe = new u16(1 << ee); + var ue = 15 - ee; + for (re = 0; re < ie; ++re) if (_[re]) for (var de = re << 4 | _[re], fe = ee - _[re], he = le[_[re] - 1]++ << fe, pe = he | (1 << fe) - 1; he <= pe; ++he) oe[rev[he] >> ue] = de; + } else { + oe = new u16(ie); + for (re = 0; re < ie; ++re) if (_[re]) oe[re] = rev[le[_[re] - 1]++] >> 15 - _[re]; + } + return oe; +}, flt = new u8(288); + +for (i2 = 0; i2 < 144; ++i2) flt[i2] = 8; + +for (i2 = 144; i2 < 256; ++i2) flt[i2] = 9; + +for (i2 = 256; i2 < 280; ++i2) flt[i2] = 7; + +for (i2 = 280; i2 < 288; ++i2) flt[i2] = 8; + +var fdt = new u8(32); + +for (i2 = 0; i2 < 32; ++i2) fdt[i2] = 5; + +var flm = hMap(flt, 9, 0), flrm = hMap(flt, 9, 1), fdm = hMap(fdt, 5, 0), fdrm = hMap(fdt, 5, 1), max = function(_) { + for (var ee = _[0], ne = 1; ne < _.length; ++ne) if (_[ne] > ee) ee = _[ne]; + return ee; +}, bits = function(_, ee, ne) { + var ie = ee / 8 | 0; + return (_[ie] | _[ie + 1] << 8) >> (7 & ee) & ne; +}, bits16 = function(_, ee) { + var ne = ee / 8 | 0; + return (_[ne] | _[ne + 1] << 8 | _[ne + 2] << 16) >> (7 & ee); +}, shft = function(_) { + return (_ + 7) / 8 | 0; +}, slc = function(_, ee, ne) { + if (null == ee || ee < 0) ee = 0; + if (null == ne || ne > _.length) ne = _.length; + return new u8(_.subarray(ee, ne)); +}, ec = [ "unexpected EOF", "invalid block type", "invalid length/literal", "invalid distance", "stream finished", "no stream handler", , "no callback", "invalid UTF-8 data", "extra field too long", "date not in range 1980-2099", "filename too long", "stream finishing", "invalid zip data" ], err = function(_, ee, ne) { + var ie = new Error(ee || ec[_]); + ie.code = _; + if (Error.captureStackTrace) Error.captureStackTrace(ie, err); + if (!ne) throw ie; + return ie; +}, inflt = function(_, ee, ne, ie) { + var re = _.length, se = ie ? ie.length : 0; + if (!re || ee.f && !ee.l) return ne || new u8(0); + var oe = !ne, le = oe || 2 != ee.i, ue = ee.i; + if (oe) ne = new u8(3 * re); + var cbuf = function(_) { + var ee = ne.length; + if (_ > ee) { + var ie = new u8(Math.max(2 * ee, _)); + ie.set(ne); + ne = ie; + } + }, de = ee.f || 0, fe = ee.p || 0, he = ee.b || 0, pe = ee.l, ge = ee.d, me = ee.m, ye = ee.n, Se = 8 * re; + do { + if (!pe) { + de = bits(_, fe, 1); + var Ee = bits(_, fe + 1, 3); + fe += 3; + if (!Ee) { + var ve = _[(Ie = shft(fe) + 4) - 4] | _[Ie - 3] << 8, Ce = Ie + ve; + if (Ce > re) { + if (ue) err(0); + break; + } + if (le) cbuf(he + ve); + ne.set(_.subarray(Ie, Ce), he); + ee.b = he += ve, ee.p = fe = 8 * Ce, ee.f = de; + continue; + } else if (1 == Ee) pe = flrm, ge = fdrm, me = 9, ye = 5; else if (2 == Ee) { + var we = bits(_, fe, 31) + 257, Le = bits(_, fe + 10, 15) + 4, Oe = we + bits(_, fe + 5, 31) + 1; + fe += 14; + for (var ke = new u8(Oe), Ae = new u8(19), xe = 0; xe < Le; ++xe) Ae[clim[xe]] = bits(_, fe + 3 * xe, 7); + fe += 3 * Le; + var Re = max(Ae), Te = (1 << Re) - 1, Pe = hMap(Ae, Re, 1); + for (xe = 0; xe < Oe; ) { + var Ie, De = Pe[bits(_, fe, Te)]; + fe += 15 & De; + if ((Ie = De >> 4) < 16) ke[xe++] = Ie; else { + var Be = 0, Ne = 0; + if (16 == Ie) Ne = 3 + bits(_, fe, 3), fe += 2, Be = ke[xe - 1]; else if (17 == Ie) Ne = 3 + bits(_, fe, 7), + fe += 3; else if (18 == Ie) Ne = 11 + bits(_, fe, 127), fe += 7; + for (;Ne--; ) ke[xe++] = Be; + } + } + var Me = ke.subarray(0, we), Fe = ke.subarray(we); + me = max(Me); + ye = max(Fe); + pe = hMap(Me, me, 1); + ge = hMap(Fe, ye, 1); + } else err(1); + if (fe > Se) { + if (ue) err(0); + break; + } + } + if (le) cbuf(he + 131072); + for (var Ve = (1 << me) - 1, $e = (1 << ye) - 1, Ge = fe; ;Ge = fe) { + var Ue = (Be = pe[bits16(_, fe) & Ve]) >> 4; + if ((fe += 15 & Be) > Se) { + if (ue) err(0); + break; + } + if (!Be) err(2); + if (Ue < 256) ne[he++] = Ue; else if (256 == Ue) { + Ge = fe, pe = null; + break; + } else { + var je = Ue - 254; + if (Ue > 264) { + var ze = fleb[xe = Ue - 257]; + je = bits(_, fe, (1 << ze) - 1) + fl[xe]; + fe += ze; + } + var qe = ge[bits16(_, fe) & $e], He = qe >> 4; + if (!qe) err(3); + fe += 15 & qe; + Fe = fd[He]; + if (He > 3) { + ze = fdeb[He]; + Fe += bits16(_, fe) & (1 << ze) - 1, fe += ze; + } + if (fe > Se) { + if (ue) err(0); + break; + } + if (le) cbuf(he + 131072); + var Ke = he + je; + if (he < Fe) { + var We = se - Fe, Xe = Math.min(Fe, Ke); + if (We + he < 0) err(3); + for (;he < Xe; ++he) ne[he] = ie[We + he]; + } + for (;he < Ke; ++he) ne[he] = ne[he - Fe]; + } + } + ee.l = pe, ee.p = Ge, ee.b = he, ee.f = de; + if (pe) de = 1, ee.m = me, ee.d = ge, ee.n = ye; + } while (!de); + return he != ne.length && oe ? slc(ne, 0, he) : ne.subarray(0, he); +}, wbits = function(_, ee, ne) { + ne <<= 7 & ee; + var ie = ee / 8 | 0; + _[ie] |= ne; + _[ie + 1] |= ne >> 8; +}, wbits16 = function(_, ee, ne) { + ne <<= 7 & ee; + var ie = ee / 8 | 0; + _[ie] |= ne; + _[ie + 1] |= ne >> 8; + _[ie + 2] |= ne >> 16; +}, hTree = function(_, ee) { + for (var ne = [], ie = 0; ie < _.length; ++ie) if (_[ie]) ne.push({ + s: ie, + f: _[ie] + }); + var re = ne.length, se = ne.slice(); + if (!re) return { + t: et, + l: 0 + }; + if (1 == re) { + var oe = new u8(ne[0].s + 1); + oe[ne[0].s] = 1; + return { + t: oe, + l: 1 + }; + } + ne.sort((function(_, ee) { + return _.f - ee.f; + })); + ne.push({ + s: -1, + f: 25001 + }); + var le = ne[0], ue = ne[1], de = 0, fe = 1, he = 2; + ne[0] = { + s: -1, + f: le.f + ue.f, + l: le, + r: ue + }; + for (;fe != re - 1; ) { + le = ne[ne[de].f < ne[he].f ? de++ : he++]; + ue = ne[de != fe && ne[de].f < ne[he].f ? de++ : he++]; + ne[fe++] = { + s: -1, + f: le.f + ue.f, + l: le, + r: ue + }; + } + var pe = se[0].s; + for (ie = 1; ie < re; ++ie) if (se[ie].s > pe) pe = se[ie].s; + var ge = new u16(pe + 1), me = ln(ne[fe - 1], ge, 0); + if (me > ee) { + ie = 0; + var ye = 0, Se = me - ee, Ee = 1 << Se; + se.sort((function(_, ee) { + return ge[ee.s] - ge[_.s] || _.f - ee.f; + })); + for (;ie < re; ++ie) { + var ve = se[ie].s; + if (ge[ve] > ee) { + ye += Ee - (1 << me - ge[ve]); + ge[ve] = ee; + } else break; + } + ye >>= Se; + for (;ye > 0; ) { + var Ce = se[ie].s; + if (ge[Ce] < ee) ye -= 1 << ee - ge[Ce]++ - 1; else ++ie; + } + for (;ie >= 0 && ye; --ie) { + var we = se[ie].s; + if (ge[we] == ee) { + --ge[we]; + ++ye; + } + } + me = ee; + } + return { + t: new u8(ge), + l: me + }; +}, ln = function(_, ee, ne) { + return -1 == _.s ? Math.max(ln(_.l, ee, ne + 1), ln(_.r, ee, ne + 1)) : ee[_.s] = ne; +}, lc = function(_) { + for (var ee = _.length; ee && !_[--ee]; ) ; + for (var ne = new u16(++ee), ie = 0, re = _[0], se = 1, w2 = function(_) { + ne[ie++] = _; + }, oe = 1; oe <= ee; ++oe) if (_[oe] == re && oe != ee) ++se; else { + if (!re && se > 2) { + for (;se > 138; se -= 138) w2(32754); + if (se > 2) { + w2(se > 10 ? se - 11 << 5 | 28690 : se - 3 << 5 | 12305); + se = 0; + } + } else if (se > 3) { + w2(re), --se; + for (;se > 6; se -= 6) w2(8304); + if (se > 2) w2(se - 3 << 5 | 8208), se = 0; + } + for (;se--; ) w2(re); + se = 1; + re = _[oe]; + } + return { + c: ne.subarray(0, ie), + n: ee + }; +}, clen = function(_, ee) { + for (var ne = 0, ie = 0; ie < ee.length; ++ie) ne += _[ie] * ee[ie]; + return ne; +}, wfblk = function(_, ee, ne) { + var ie = ne.length, re = shft(ee + 2); + _[re] = 255 & ie; + _[re + 1] = ie >> 8; + _[re + 2] = 255 ^ _[re]; + _[re + 3] = 255 ^ _[re + 1]; + for (var se = 0; se < ie; ++se) _[re + se + 4] = ne[se]; + return 8 * (re + 4 + ie); +}, wblk = function(_, ee, ne, ie, re, se, oe, le, ue, de, fe) { + wbits(ee, fe++, ne); + ++re[256]; + for (var he = hTree(re, 15), pe = he.t, ge = he.l, me = hTree(se, 15), ye = me.t, Se = me.l, Ee = lc(pe), ve = Ee.c, Ce = Ee.n, we = lc(ye), Le = we.c, Oe = we.n, ke = new u16(19), Ae = 0; Ae < ve.length; ++Ae) ++ke[31 & ve[Ae]]; + for (Ae = 0; Ae < Le.length; ++Ae) ++ke[31 & Le[Ae]]; + for (var xe = hTree(ke, 7), Re = xe.t, Te = xe.l, Pe = 19; Pe > 4 && !Re[clim[Pe - 1]]; --Pe) ; + var Ie, De, Be, Ne, Me = de + 5 << 3, Fe = clen(re, flt) + clen(se, fdt) + oe, Ve = clen(re, pe) + clen(se, ye) + oe + 14 + 3 * Pe + clen(ke, Re) + 2 * ke[16] + 3 * ke[17] + 7 * ke[18]; + if (ue >= 0 && Me <= Fe && Me <= Ve) return wfblk(ee, fe, _.subarray(ue, ue + de)); + wbits(ee, fe, 1 + (Ve < Fe)), fe += 2; + if (Ve < Fe) { + Ie = hMap(pe, ge, 0), De = pe, Be = hMap(ye, Se, 0), Ne = ye; + var $e = hMap(Re, Te, 0); + wbits(ee, fe, Ce - 257); + wbits(ee, fe + 5, Oe - 1); + wbits(ee, fe + 10, Pe - 4); + fe += 14; + for (Ae = 0; Ae < Pe; ++Ae) wbits(ee, fe + 3 * Ae, Re[clim[Ae]]); + fe += 3 * Pe; + for (var Ge = [ ve, Le ], Ue = 0; Ue < 2; ++Ue) { + var je = Ge[Ue]; + for (Ae = 0; Ae < je.length; ++Ae) { + var ze = 31 & je[Ae]; + wbits(ee, fe, $e[ze]), fe += Re[ze]; + if (ze > 15) wbits(ee, fe, je[Ae] >> 5 & 127), fe += je[Ae] >> 12; + } + } + } else Ie = flm, De = flt, Be = fdm, Ne = fdt; + for (Ae = 0; Ae < le; ++Ae) { + var qe = ie[Ae]; + if (qe > 255) { + wbits16(ee, fe, Ie[257 + (ze = qe >> 18 & 31)]), fe += De[ze + 257]; + if (ze > 7) wbits(ee, fe, qe >> 23 & 31), fe += fleb[ze]; + var He = 31 & qe; + wbits16(ee, fe, Be[He]), fe += Ne[He]; + if (He > 3) wbits16(ee, fe, qe >> 5 & 8191), fe += fdeb[He]; + } else wbits16(ee, fe, Ie[qe]), fe += De[qe]; + } + wbits16(ee, fe, Ie[256]); + return fe + De[256]; +}, deo = new i32([ 65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632 ]), et = new u8(0), dflt = function(_, ee, ne, ie, re, se) { + var oe = se.z || _.length, le = new u8(ie + oe + 5 * (1 + Math.ceil(oe / 7e3)) + re), ue = le.subarray(ie, le.length - re), de = se.l, fe = 7 & (se.r || 0); + if (ee) { + if (fe) ue[0] = se.r >> 3; + for (var he = deo[ee - 1], pe = he >> 13, ge = 8191 & he, me = (1 << ne) - 1, ye = se.p || new u16(32768), Se = se.h || new u16(me + 1), Ee = Math.ceil(ne / 3), ve = 2 * Ee, hsh = function(ee) { + return (_[ee] ^ _[ee + 1] << Ee ^ _[ee + 2] << ve) & me; + }, Ce = new i32(25e3), we = new u16(288), Le = new u16(32), Oe = 0, ke = 0, Ae = se.i || 0, xe = 0, Re = se.w || 0, Te = 0; Ae + 2 < oe; ++Ae) { + var Pe = hsh(Ae), Ie = 32767 & Ae, De = Se[Pe]; + ye[Ie] = De; + Se[Pe] = Ie; + if (Re <= Ae) { + var Be = oe - Ae; + if ((Oe > 7e3 || xe > 24576) && (Be > 423 || !de)) { + fe = wblk(_, ue, 0, Ce, we, Le, ke, xe, Te, Ae - Te, fe); + xe = Oe = ke = 0, Te = Ae; + for (var Ne = 0; Ne < 286; ++Ne) we[Ne] = 0; + for (Ne = 0; Ne < 30; ++Ne) Le[Ne] = 0; + } + var Me = 2, Fe = 0, Ve = ge, $e = Ie - De & 32767; + if (Be > 2 && Pe == hsh(Ae - $e)) for (var Ge = Math.min(pe, Be) - 1, Ue = Math.min(32767, Ae), je = Math.min(258, Be); $e <= Ue && --Ve && Ie != De; ) { + if (_[Ae + Me] == _[Ae + Me - $e]) { + for (var ze = 0; ze < je && _[Ae + ze] == _[Ae + ze - $e]; ++ze) ; + if (ze > Me) { + Me = ze, Fe = $e; + if (ze > Ge) break; + var qe = Math.min($e, ze - 2), He = 0; + for (Ne = 0; Ne < qe; ++Ne) { + var Ke = Ae - $e + Ne & 32767, We = Ke - ye[Ke] & 32767; + if (We > He) He = We, De = Ke; + } + } + } + $e += (Ie = De) - (De = ye[Ie]) & 32767; + } + if (Fe) { + Ce[xe++] = 268435456 | revfl[Me] << 18 | revfd[Fe]; + var Xe = 31 & revfl[Me], Ye = 31 & revfd[Fe]; + ke += fleb[Xe] + fdeb[Ye]; + ++we[257 + Xe]; + ++Le[Ye]; + Re = Ae + Me; + ++Oe; + } else { + Ce[xe++] = _[Ae]; + ++we[_[Ae]]; + } + } + } + for (Ae = Math.max(Ae, Re); Ae < oe; ++Ae) { + Ce[xe++] = _[Ae]; + ++we[_[Ae]]; + } + fe = wblk(_, ue, de, Ce, we, Le, ke, xe, Te, Ae - Te, fe); + if (!de) { + se.r = 7 & fe | ue[fe / 8 | 0] << 3; + fe -= 7; + se.h = Se, se.p = ye, se.i = Ae, se.w = Re; + } + } else { + for (Ae = se.w || 0; Ae < oe + de; Ae += 65535) { + var Qe = Ae + 65535; + if (Qe >= oe) { + ue[fe / 8 | 0] = de; + Qe = oe; + } + fe = wfblk(ue, fe + 1, _.subarray(Ae, Qe)); + } + se.i = oe; + } + return slc(le, 0, ie + shft(fe) + re); +}, dopt = function(_, ee, ne, ie, re) { + if (!re) { + re = { + l: 1 + }; + if (ee.dictionary) { + var se = ee.dictionary.subarray(-32768), oe = new u8(se.length + _.length); + oe.set(se); + oe.set(_, se.length); + _ = oe; + re.w = se.length; + } + } + return dflt(_, null == ee.level ? 6 : ee.level, null == ee.mem ? re.l ? Math.ceil(1.5 * Math.max(8, Math.min(13, Math.log(_.length)))) : 20 : 12 + ee.mem, ne, ie, re); +}, mrg = function(_, ee) { + var ne = {}; + for (var ie in _) ne[ie] = _[ie]; + for (var ie in ee) ne[ie] = ee[ie]; + return ne; +}, wcln = function(_, ee, ne) { + for (var ie = _(), re = _.toString(), se = re.slice(re.indexOf("[") + 1, re.lastIndexOf("]")).replace(/\s+/g, "").split(","), oe = 0; oe < ie.length; ++oe) { + var le = ie[oe], ue = se[oe]; + if ("function" == typeof le) { + ee += ";" + ue + "="; + var de = le.toString(); + if (le.prototype) if (-1 != de.indexOf("[native code]")) { + var fe = de.indexOf(" ", 8) + 1; + ee += de.slice(fe, de.indexOf("(", fe)); + } else { + ee += de; + for (var he in le.prototype) ee += ";" + ue + ".prototype." + he + "=" + le.prototype[he].toString(); + } else ee += de; + } else ne[ue] = le; + } + return ee; +}, ch = [], cbfs = function(_) { + var ee = []; + for (var ne in _) if (_[ne].buffer) ee.push((_[ne] = new _[ne].constructor(_[ne])).buffer); + return ee; +}, wrkr = function(_, ee, ne, ie) { + if (!ch[ne]) { + for (var re = "", se = {}, oe = _.length - 1, le = 0; le < oe; ++le) re = wcln(_[le], re, se); + ch[ne] = { + c: wcln(_[oe], re, se), + e: se + }; + } + var ue = mrg({}, ch[ne].e); + return wk(ch[ne].c + ";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=" + ee.toString() + "}", ne, ue, cbfs(ue), ie); +}, bInflt = function() { + return [ u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt ]; +}, bDflt = function() { + return [ u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf ]; +}, pbf = function(_) { + return postMessage(_, [ _.buffer ]); +}, gopt = function(_) { + return _ && { + out: _.size && new u8(_.size), + dictionary: _.dictionary + }; +}, cbify = function(_, ee, ne, ie, re, se) { + var oe = wrkr(ne, ie, re, (function(_, ee) { + oe.terminate(); + se(_, ee); + })); + oe.postMessage([ _, ee ], ee.consume ? [ _.buffer ] : []); + return function() { + oe.terminate(); + }; +}; + +function deflate(_, ee, ne) { + if (!ne) ne = ee, ee = {}; + if ("function" != typeof ne) err(7); + return cbify(_, ee, [ bDflt ], (function(_) { + return pbf(deflateSync(_.data[0], _.data[1])); + }), 0, ne); +} + +function deflateSync(_, ee) { + return dopt(_, ee || {}, 0, 0); +} + +function inflate(_, ee, ne) { + if (!ne) ne = ee, ee = {}; + if ("function" != typeof ne) err(7); + return cbify(_, ee, [ bInflt ], (function(_) { + return pbf(inflateSync(_.data[0], gopt(_.data[1]))); + }), 1, ne); +} + +function inflateSync(_, ee) { + return inflt(_, { + i: 2 + }, ee && ee.out, ee && ee.dictionary); +} + +var td = "undefined" != typeof TextDecoder && new TextDecoder, tds = 0; + +try { + td.decode(et, { + stream: true + }); + tds = 1; +} catch (_) {} + +var isValidRemoteCouchDBURI = _ => { + if (_.startsWith("https://")) return true; + if (_.startsWith("http://")) return true; else return false; +}; + +function isCloudantURI(_) { + if (-1 !== _.indexOf(".cloudantnosqldb.") || -1 !== _.indexOf(".cloudant.com")) return true; else return false; +} + +var checkRemoteVersion = async (_, ee, ne = VER) => { + try { + const ie = await _.get(VERSIONING_DOCID); + if ("versioninfo" != ie.type) return false; + const re = ie.version; + if (re < ne) if (await ee(re, ne)) { + await bumpRemoteVersion(_); + return true; + } + if (re == ne) return true; else return false; + } catch (ee) { + if (isErrorOfMissingDoc(ee)) if (await bumpRemoteVersion(_)) return true; else return false; + throw ee; + } +}, bumpRemoteVersion = async (_, ee = VER) => { + const ne = { + _id: VERSIONING_DOCID, + version: ee, + type: "versioninfo" + }, ie = await resolveWithIgnoreKnownError(_.get(VERSIONING_DOCID), ne); + if ("versioninfo" != ie.type) return false; + ne._rev = ie._rev; + await _.put(ne); + return true; +}, checkSyncInfo = async _ => { + try { + const ee = await _.get(SYNCINFO_ID); + console.log(ee); + return true; + } catch (ee) { + if (isErrorOfMissingDoc(ee)) { + const ee = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", ne = [ ...Array(30) ].map((_ => Math.floor(Math.random() * ee.length))).map((_ => ee[_])).join(""), ie = { + _id: SYNCINFO_ID, + type: "syncinfo", + data: ne + }; + if (await _.put(ie)) return true; else return false; + } else { + console.dir(ee); + return false; + } + } +}, MARK_SHIFT = "L", MARK_SHIFT_COMPRESSED = `${MARK_SHIFT}Z`; + +function wrapFflateFunc(_) { + return (ee, ne) => new Promise(((ie, re) => { + _(ee, ne, ((_, ee) => { + if (_) re(_); else ie(ee); + })); + })); +} + +var wrappedInflate = wrapFflateFunc(inflate), wrappedDeflate = wrapFflateFunc(deflate); + +async function _compressText(_) { + const ee = tryConvertBase64ToArrayBuffer(_), ne = new Uint8Array(ee || await new Blob([ _ ], { + type: "application/octet-stream" + }).arrayBuffer()); + if (0 == ne.buffer.byteLength) return ""; + const ie = await wrappedDeflate(new Uint8Array(ne), { + consume: true, + level: 8 + }); + return (ee ? "~" : "") + await arrayBufferToBase64Single(ie); +} + +async function _decompressText(_, ee = false) { + if (0 == _.length) return ""; + const ne = "~" == _[0], ie = _.substring(ne ? 1 : 0); + if (0 == ie.length) return ""; + const re = new Uint8Array(base64ToArrayBuffer(ie)); + if (0 == re.length) return ""; + const se = await wrappedInflate(new Uint8Array(re), { + consume: true + }); + if (ne) return await arrayBufferToBase64Single(se); + const oe = new Blob([ se ]); + return await oe.text(); +} + +async function compressDoc(_) { + if (!("data" in _)) return _; + if ("string" != typeof _.data) return _; + if (_.data.startsWith(MARK_SHIFT_COMPRESSED)) return _; + const ee = _.data, ne = await _compressText(ee), ie = MARK_SHIFT_COMPRESSED + ne; + if (_.data.length > ie.length) _.data = ie; + return _; +} + +async function decompressDoc(_) { + if (!("data" in _)) return _; + if ("string" != typeof _.data) return _; + if (_.data.startsWith(MARK_SHIFT_COMPRESSED)) _.data = await _decompressText(_.data.substring(MARK_SHIFT_COMPRESSED.length)); + return _; +} + +var enableCompression = (_, ee) => { + _.transform({ + async incoming(_) { + if (!ee) return _; else return await compressDoc(_); + }, + outgoing: async _ => await decompressDoc(_) + }); +}, EDEN_ENCRYPTED_KEY = "h:++encrypted"; + +function shouldEncryptEden(_) { + if ("eden" in _ && !(EDEN_ENCRYPTED_KEY in _.eden)) return true; else return false; +} + +function shouldDecryptEden(_) { + if ("eden" in _ && EDEN_ENCRYPTED_KEY in _.eden) return true; else return false; +} + +var enableEncryption = (_, ee, ne, ie) => { + const re = new Map; + _.transform({ + incoming: async _ => { + const ie = { + ..._ + }; + if (isEncryptedChunkEntry(ie) || isSyncInfoEntry(ie)) try { + ie.data = await encrypt(ie.data, ee, ne); + } catch (_) { + Logger("Encryption failed.", LOG_LEVEL_NOTICE); + Logger(_); + throw _; + } + if (shouldEncryptEden(ie)) ie.eden = { + [EDEN_ENCRYPTED_KEY]: { + data: await encrypt(JSON.stringify(ie.eden), ee, ne), + epoch: 999999 + } + }; + if (isObfuscatedEntry(ie)) try { + const _ = getPath(ie); + if (!isPathProbablyObfuscated(_)) ie.path = await obfuscatePath(_, ee, ne); + } catch (_) { + Logger("Encryption failed.", LOG_LEVEL_NOTICE); + Logger(_); + throw _; + } + return ie; + }, + outgoing: async _ => { + var se, oe; + const le = { + ..._ + }, ue = isEncryptedChunkEntry(le) || isSyncInfoEntry(le), de = isObfuscatedEntry(le), fe = shouldDecryptEden(le); + if (ue || de || fe) { + if (ie && re.has(le._id)) return le; + try { + if (ue) le.data = await decrypt(le.data, ee, ne); + if (de) { + const _ = getPath(le); + if (isPathProbablyObfuscated(_)) le.path = await decrypt(_, ee, ne); + } + if (fe) le.eden = JSON.parse(await decrypt(le.eden[EDEN_ENCRYPTED_KEY].data, ee, ne)); + if (ie) re.set(le._id, true); + } catch (_) { + if (ne) try { + if (ue) le.data = await decrypt(le.data, ee, false); + if (de) { + const _ = getPath(le); + if (isPathProbablyObfuscated(_)) le.path = await decrypt(_, ee, false); + } + if (fe) le.eden = JSON.parse(await decrypt(le.eden[EDEN_ENCRYPTED_KEY].data, ee, false)); + if (ie) re.set(le._id, true); + } catch (_) { + if (ie && "SyntaxError" == _.name) return le; + Logger("Decryption failed.", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + Logger(`id:${le._id}-${null == (se = le._rev) ? void 0 : se.substring(0, 10)}`, LOG_LEVEL_VERBOSE); + throw _; + } else { + Logger("Decryption failed.", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + Logger(`id:${le._id}-${null == (oe = le._rev) ? void 0 : oe.substring(0, 10)}`, LOG_LEVEL_VERBOSE); + throw _; + } + } + } + return le; + } + }); +}; + +function isErrorOfMissingDoc(_) { + return 404 == (_ && (null == _ ? void 0 : _.status)); +} + +async function prepareChunkDesignDoc(_) { + var ee; + const ne = { + _id: "_design/chunks", + _rev: void 0, + ver: 2, + views: { + collectDangling: { + map: (function(_) { + if (_._id.startsWith("h:")) emit([ _._id ], 0); else if ("children" in _) _.children.forEach((_ => emit([ _ ], 1))); + }).toString(), + reduce: "_sum" + } + } + }; + let ie = false; + try { + const re = await _.get(ne._id); + if (null != (ee = null == re ? void 0 : re.ver) ? ee : 0 < ne.ver) { + ne._rev = re._rev; + ie = true; + } + } catch (_) { + if (404 == _.status) ie = true; else { + Logger("Failed to make design document for operating chunks"); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + } + try { + if (ie) await _.put(ne); + } catch (_) { + Logger("Failed to make design document for operating chunks"); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + return true; +} + +async function collectChunksUsage(_) { + if (!await prepareChunkDesignDoc(_)) { + Logger("Could not prepare design document for operating chunks"); + return []; + } + return (await _.query("chunks/collectDangling", { + reduce: true, + group: true + })).rows; +} + +function collectUnreferencedChunks(_) { + return collectChunks(_, "DANGLING"); +} + +async function collectChunks(_, ee) { + const ne = await collectChunksUsage(_), ie = ("ALL" == ee ? ne : ne.filter((_ => "DANGLING" == ee ? 0 == _.value : 0 != _.value))).flatMap((_ => _.key)); + return (await _.allDocs({ + keys: ie + })).rows.filter((_ => !("error" in _))).map((_ => ({ + id: _.id, + rev: _.value.rev + }))); +} + +async function collectUnbalancedChunkIDs(_, ee) { + const ne = await collectChunks(_, "INUSE"), ie = await collectChunks(ee, "INUSE"); + return { + onlyOnLocal: ne.filter((_ => !ie.some((ee => ee.id == _.id)))), + onlyOnRemote: ie.filter((_ => !ne.some((ee => ee.id == _.id)))) + }; +} + +async function purgeChunksLocal(_, ee) { + await serialized("purge-local", (async () => { + try { + Logger(`Purging unused ${ee.length} chunks `, LOG_LEVEL_NOTICE, "purge-local-backup"); + const ne = arrayToChunkedArray(ee, 100); + let ie = { + ok: 0, + exist: 0, + error: 0 + }; + for (const ee of ne) { + const ne = (await _.allDocs({ + keys: ee.map((_ => _.id)), + include_docs: true + })).rows.filter((_ => "doc" in _)).map((_ => { + const ee = { + ..._.doc + }; + delete ee._rev; + ee._id = `_local/${ee._id}`; + return ee; + })), re = await _.bulkDocs(ne); + ie = re.map((_ => ({ + ok: "ok" in _ ? 1 : 0, + exist: "status" in _ && 409 == _.status ? 1 : 0, + error: "status" in _ && 409 != _.status ? 1 : 0 + }))).reduce(((_, ee) => ({ + ok: _.ok + ee.ok, + exist: _.exist + ee.exist, + error: _.error + ee.error + })), ie); + Logger(`Local chunk backed up: new:${ie.ok} ,exist:${ie.exist}, error:${ie.error}`, LOG_LEVEL_NOTICE, "purge-local-backup"); + const se = re.filter((_ => "error" in _ && 409 != _.status)); + for (const _ of se) Logger(`Failed to back up: ${_.id} / ${_.rev}`, LOG_LEVEL_VERBOSE); + } + } catch (_) { + Logger("Could not back up chunks"); + Logger(_, LOG_LEVEL_VERBOSE); + } + Logger(`Purging unused ${ee.length} chunks... `, LOG_LEVEL_NOTICE, "purge-local"); + const ne = arrayToChunkedArray(ee, 100); + let ie = 0; + for (const re of ne) { + const ne = await _.purgeMulti(re.map((_ => [ _.id, _.rev ]))); + ie += Object.values(ne).filter((_ => "ok" in _)).length; + Logger(`Purging: ${ie} / ${ee.length}`, LOG_LEVEL_NOTICE, "purge-local"); + } + Logger(`Purging unused chunks done!: ${ie} chunks has been deleted.`, LOG_LEVEL_NOTICE, "purge-local"); + })); +} + +var _requestToCouchDBFetch = async (_, ee, ne, ie, re, se) => { + const oe = String.fromCharCode.apply(null, [ ...writeString(`${ee}:${ne}`) ]), le = window.btoa(oe), ue = `${_}/${ie}`, de = { + url: ue, + method: se || (re ? "PUT" : "GET"), + headers: new Headers({ + authorization: "Basic " + le, + "content-type": "application/json" + }), + contentType: "application/json", + body: JSON.stringify(re) + }; + return await fetch(ue, de); +}; + +async function purgeChunksRemote(_, ee) { + await serialized("purge-remote", (async () => { + const ne = function makeChunkedArrayFromArray(_) { + const ee = []; + for (let ne = 0; ne < _.length; ne += 100) ee.push(_.slice(ne, ne + 100)); + return ee; + }(ee); + for (const ee of ne) { + const ne = await _requestToCouchDBFetch(`${_.couchDB_URI}/${_.couchDB_DBNAME}`, _.couchDB_USER, _.couchDB_PASSWORD, "_purge", Object.fromEntries(ee.map((_ => [ _.id, [ _.rev ] ]))), "POST"); + Logger(JSON.stringify(await ne.json()), LOG_LEVEL_VERBOSE); + } + })); +} + +function sizeToHumanReadable(_) { + if (!_) return "-"; + const ee = Math.floor(Math.log(_) / Math.log(1024)); + return Number.parseInt((_ / Math.pow(1024, ee)).toFixed(2)) + " " + [ "B", "kB", "MB", "GB", "TB" ][ee]; +} + +async function purgeUnreferencedChunks(_, ee, ne, ie = false) { + const re = await _.info(); + let se = 0; + const getSize = function(_, ee) { + var ne, ie; + return Number.parseInt(null != (ie = null == (ne = null == _ ? void 0 : _.sizes) ? void 0 : ne[ee]) ? ie : 0); + }, oe = ne ? "-remote" : "-local"; + Logger(`${ee ? "Counting" : "Cleaning"} ${ne ? "remote" : "local"} database`, LOG_LEVEL_NOTICE); + if (ne) Logger(`Database active-size: ${sizeToHumanReadable(getSize(re, "active"))}, external-size:${sizeToHumanReadable(getSize(re, "external"))}, file-size: ${sizeToHumanReadable(getSize(re, "file"))}`, LOG_LEVEL_NOTICE); + Logger(`Collecting unreferenced chunks on ${re.db_name}`, LOG_LEVEL_NOTICE, "gc-count-chunk" + oe); + const le = await collectUnreferencedChunks(_); + se = le.length; + if (0 == le.length) Logger(`No unreferenced chunks! ${re.db_name}`, LOG_LEVEL_NOTICE, "gc-count-chunk" + oe); else { + Logger(`Number of unreferenced chunks on ${re.db_name}: ${le.length}`, LOG_LEVEL_NOTICE, "gc-count-chunk" + oe); + if (ee) { + Logger(`DryRun of cleaning ${ne ? "remote" : "local"} database up: Done`, LOG_LEVEL_NOTICE); + return se; + } + if (ne) { + Logger("Cleaning unreferenced chunks on remote", LOG_LEVEL_NOTICE, "gc-purge" + oe); + await purgeChunksRemote(ne, le); + } else { + Logger("Cleaning unreferenced chunks on local", LOG_LEVEL_NOTICE, "gc-purge" + oe); + await purgeChunksLocal(_, le); + } + Logger("Cleaning unreferenced chunks done!", LOG_LEVEL_NOTICE, "gc-purge" + oe); + } + if (ie) { + Logger("Compacting database...", LOG_LEVEL_NOTICE, "gc-compact" + oe); + await _.compact(); + Logger("Compacting database done", LOG_LEVEL_NOTICE, "gc-compact" + oe); + } + if (ne) { + const ee = await _.info(); + Logger(`Processed database active-size: ${sizeToHumanReadable(getSize(ee, "active"))}, external-size:${sizeToHumanReadable(getSize(ee, "external"))}, file-size: ${sizeToHumanReadable(getSize(ee, "file"))}`, LOG_LEVEL_NOTICE); + Logger(`Reduced sizes: active-size: ${sizeToHumanReadable(getSize(re, "active") - getSize(ee, "active"))}, external-size:${sizeToHumanReadable(getSize(re, "external") - getSize(ee, "external"))}, file-size: ${sizeToHumanReadable(getSize(re, "file") - getSize(ee, "file"))}`, LOG_LEVEL_NOTICE); + } + Logger(`Cleaning ${ne ? "remote" : "local"} database up: Done`, LOG_LEVEL_NOTICE); + return se; +} + +function transferChunks(_, ee, ne, ie, re) { + let se = 0; + const oe = re.length; + return new QueueProcessor((async _ => { + const ee = _.map((_ => _.id)); + return (await ie.allDocs({ + keys: ee + })).rows.filter((_ => "error" in _ && "not_found" == _.error)).map((_ => _.key)); + }), { + batchSize: 50, + concurrentLimit: 5, + suspended: true, + delay: 100 + }, re).pipeTo(new QueueProcessor((async _ => (await ne.allDocs({ + keys: _, + include_docs: true + })).rows.filter((_ => !("error" in _))).map((_ => _.doc))), { + batchSize: 25, + concurrentLimit: 1, + suspended: true, + delay: 100 + })).pipeTo(new QueueProcessor((async ne => { + try { + await ie.bulkDocs(ne, { + new_edits: false + }); + } catch (_) { + Logger(`${ee}: Something went wrong on balancing`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } finally { + se += ne.length; + Logger(`${ee}: ${se} / ${oe}`, LOG_LEVEL_NOTICE, "balance-" + _); + } + }), { + batchSize: 100, + delay: 100, + concurrentLimit: 2, + suspended: false + })).startPipeline().waitForAllDoneAndTerminate(); +} + +async function balanceChunkPurgedDBs(_, ee) { + Logger("Complement missing chunks between databases", LOG_LEVEL_NOTICE); + try { + const {onlyOnLocal: ne, onlyOnRemote: ie} = await collectUnbalancedChunkIDs(_, ee), re = transferChunks("l2r", "local -> remote", _, ee, ne), se = transferChunks("r2l", "remote -> local", ee, _, ie); + await Promise.all([ re, se ]); + Logger("local -> remote: Done", LOG_LEVEL_NOTICE, "balance-l2r"); + Logger("remote -> local: Done", LOG_LEVEL_NOTICE, "balance-r2l"); + } catch (_) { + Logger("Something went wrong on balancing!", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + Logger("Complement completed!", LOG_LEVEL_NOTICE); +} + +async function fetchAllUsedChunks(_, ee) { + try { + const ne = await collectChunks(ee, "INUSE"); + await transferChunks("r2l", "remote -> local", ee, _, ne); + Logger("remote -> local: Done", LOG_LEVEL_NOTICE, "balance-r2l"); + } catch (_) { + Logger("Something went wrong on balancing!", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } +} + +function extractObject(_, ee) { + const ne = { + ..._ + }; + for (const _ in ne) ne[_] = ee[_]; + return ne; +} + +function isObjectDifferent(_, ee, ne = false) { + if (typeof _ != typeof ee) return true; + if ("object" == typeof _) { + if (null === _ || null === ee) return _ !== ee; + const ie = [ ...new Set([ ...Object.keys(_), ...Object.keys(ee) ]) ]; + if (ne) return ie.map((ne => void 0 !== (null == _ ? void 0 : _[ne]) && void 0 !== (null == ee ? void 0 : ee[ne]) && isObjectDifferent(null == _ ? void 0 : _[ne], null == ee ? void 0 : ee[ne]))).some((_ => true == _)); else return ie.map((ne => isObjectDifferent(null == _ ? void 0 : _[ne], null == ee ? void 0 : ee[ne]))).some((_ => true == _)); + } else return _ !== ee; +} + +var traps = {}; + +async function waitForSignal(_, ee) { + return await waitForValue(_, ee) !== RESULT_TIMED_OUT; +} + +function waitForValue(_, ee) { + let ne, ie; + const re = ee ? setTimeout((() => { + if (_ in traps) traps[_] = traps[_].filter((_ => _ != ie)); + if (ne) ne(RESULT_TIMED_OUT); + ne = void 0; + }), ee) : false; + return new Promise((ee => { + if (!(_ in traps)) traps[_] = []; + ne = ee; + ie = _ => { + if (re) clearTimeout(re); + ee(_); + }; + traps[_].push(ie); + })); +} + +function sendSignal(_) { + sendValue(_, true); +} + +function sendValue(_, ee) { + if (!(_ in traps)) return; + const ne = traps[_]; + delete traps[_]; + for (const _ of ne) _(ee); +} + +var _a2, throttle = (_, ee) => { + let ne, ie = 0; + return (...re) => { + if (!ie) { + _(...re); + ie = Date.now(); + } else { + clearTimeout(ne); + const se = ee - (Date.now() - ie); + ne = setTimeout((() => { + _(...re); + ie = Date.now(); + }), se); + } + }; +}; + +function sizeToHumanReadable2(_) { + const ee = [ "B", "KB", "MB", "GB", "TB" ]; + let ne = 0; + for (;_ >= 1024 && ne < ee.length; ) { + _ /= 1024; + ne++; + } + return _.toFixed(2) + ee[ne]; +} + +function resolveWithIgnoreKnownError(_, ee) { + return new Promise(((ne, ie) => { + _.then(ne).catch((_ => isErrorOfMissingDoc(_) ? ne(ee) : ie(_))); + })); +} + +function getDocData(_) { + return "string" == typeof _ ? _ : _.join(""); +} + +function getDocDataAsArray(_) { + return "string" == typeof _ ? [ _ ] : _; +} + +function isTextBlob(_) { + return "text/plain" === _.type; +} + +function createTextBlob(_) { + const ee = Array.isArray(_) ? _ : [ _ ]; + return new Blob(ee, { + endings: "transparent", + type: "text/plain" + }); +} + +function createBinaryBlob(_) { + return new Blob([ _ ], { + endings: "transparent", + type: "application/octet-stream" + }); +} + +function createBlob(_) { + if (_ instanceof Blob) return _; + if (_ instanceof Uint8Array || _ instanceof ArrayBuffer) return createBinaryBlob(_); else return createTextBlob(_); +} + +function isTextDocument(_) { + if ("plain" == _.type) return true; + if ("plain" == _.datatype) return true; + if (isPlainText(_.path)) return true; else return false; +} + +function readAsBlob(_) { + if (isTextDocument(_)) return createTextBlob(_.data); else return createBinaryBlob(decodeBinary(_.data)); +} + +function readContent(_) { + if (isTextDocument(_)) return getDocData(_.data); else return decodeBinary(_.data); +} + +var isIndexDBCmpExist = "undefined" != typeof (null == (_a2 = null == window ? void 0 : window.indexedDB) ? void 0 : _a2.cmp); + +async function isDocContentSame(_, ee) { + const ne = createBlob(_), ie = createBlob(ee); + if (ne.size != ie.size) return false; + if (isIndexDBCmpExist) return 0 === window.indexedDB.cmp(await ne.arrayBuffer(), await ie.arrayBuffer()); + const re = 1e4, se = ne.size; + let oe = 0; + for (;oe < se; ) { + const _ = await ne.slice(oe, oe + re).arrayBuffer(), ee = await ie.slice(oe, oe + re).arrayBuffer(); + oe += re; + if (await arrayBufferToBase64Single(_) != await arrayBufferToBase64Single(ee)) return false; + } + return true; +} + +function isObfuscatedEntry(_) { + if (_._id.startsWith(PREFIX_OBFUSCATED)) return true; else return false; +} + +function isEncryptedChunkEntry(_) { + if (_._id.startsWith(PREFIX_ENCRYPTED_CHUNK)) return true; else return false; +} + +function isSyncInfoEntry(_) { + if (_._id == SYNCINFO_ID) return true; else return false; +} + +function memorizeFuncWithLRUCache(_) { + const ee = new LRUCache(100, 1e5, true); + return ne => { + if (ee.has(ne)) return ee.get(ne); + const ie = _(ne); + ee.set(ne, ie); + return ie; + }; +} + +function onlyNot(_) { + return function _onlyNot(ee) { + if (ee === _) return false; else return true; + }; +} + +var globalConcurrencyController = Semaphore(50); + +function determineTypeFromBlob(_) { + return isTextBlob(_) ? "plain" : "newnote"; +} + +function determineType(_, ee) { + if (ee instanceof Blob) return determineTypeFromBlob(ee); + if (isPlainText(_)) return "plain"; + if (ee instanceof Uint8Array) return "newnote"; + if (ee instanceof ArrayBuffer) return "newnote"; else return "plain"; +} + +function isAnyNote(_) { + return "type" in _ && ("newnote" == _.type || "plain" == _.type); +} + +function isLoadedEntry(_) { + return "type" in _ && ("newnote" == _.type || "plain" == _.type) && "data" in _; +} + +function createSavingEntryFromLoadedEntry(_) { + const ee = readAsBlob(_), ne = determineType(_.path, ee); + return { + ..._, + data: ee, + datatype: ne, + type: ne, + children: [] + }; +} + +function setAllItems(_, ee) { + ee.forEach((ee => _.add(ee))); + return _; +} + +function escapeNewLineFromString(_) { + if (_.indexOf("\n") < 0) return _; else return "\\f" + replaceAll(replaceAll(_, "\\", "\\\\"), "\n", "\\n"); +} + +function unescapeNewLineFromString(_) { + if (!_.startsWith("\\f")) return _; else return replaceAll(replaceAll(_.substring(2), "\\\\", "\\"), "\\n", "\n"); +} + +function escapeMarkdownValue(_) { + if ("string" == typeof _) return replaceAllPairs(_, [ "|", "\\|" ], [ "`", "\\`" ]); else return _; +} + +function timeDeltaToHumanReadable(_) { + const ee = _ / 1e3; + if (ee < 60) return `${ee.toFixed(2)}s`; + const ne = ee / 60; + if (ne < 60) return `${ne.toFixed(2)}m`; + const ie = ne / 60; + if (ie < 24) return `${ie.toFixed(2)}h`; + const re = ie / 24; + if (re < 365) return `${re.toFixed(2)}d`; else return `${(re / 365).toFixed(2)}y`; +} + +var PouchError = class extends Error { + constructor(_, ee, ne) { + super(); + this.status = _; + this.name = ee; + this.message = ne; + this.error = true; + } + toString() { + return JSON.stringify({ + status: this.status, + name: this.name, + message: this.message, + reason: this.reason + }); + } +}, UNAUTHORIZED = new PouchError(401, "unauthorized", "Name or password is incorrect."), MISSING_BULK_DOCS = new PouchError(400, "bad_request", "Missing JSON list of 'docs'"), MISSING_DOC = new PouchError(404, "not_found", "missing"), REV_CONFLICT = new PouchError(409, "conflict", "Document update conflict"), INVALID_ID = new PouchError(400, "bad_request", "_id field must contain a string"), MISSING_ID = new PouchError(412, "missing_id", "_id is required for puts"), RESERVED_ID = new PouchError(400, "bad_request", "Only reserved document ids may start with underscore."), NOT_OPEN = new PouchError(412, "precondition_failed", "Database not open"), UNKNOWN_ERROR = new PouchError(500, "unknown_error", "Database encountered an unknown error"), BAD_ARG = new PouchError(500, "badarg", "Some query argument is invalid"), INVALID_REQUEST = new PouchError(400, "invalid_request", "Request was invalid"), QUERY_PARSE_ERROR = new PouchError(400, "query_parse_error", "Some query parameter is invalid"), DOC_VALIDATION = new PouchError(500, "doc_validation", "Bad special document member"), BAD_REQUEST = new PouchError(400, "bad_request", "Something wrong with the request"), NOT_AN_OBJECT = new PouchError(400, "bad_request", "Document must be a JSON object"), DB_MISSING = new PouchError(404, "not_found", "Database not found"), IDB_ERROR = new PouchError(500, "indexed_db_went_bad", "unknown"), WSQ_ERROR = new PouchError(500, "web_sql_went_bad", "unknown"), LDB_ERROR = new PouchError(500, "levelDB_went_went_bad", "unknown"), FORBIDDEN = new PouchError(403, "forbidden", "Forbidden by design doc validate_doc_update function"), INVALID_REV = new PouchError(400, "bad_request", "Invalid rev format"), FILE_EXISTS = new PouchError(412, "file_exists", "The database could not be created, the file already exists."), MISSING_STUB = new PouchError(412, "missing_stub", "A pre-existing attachment stub wasn't found"), INVALID_URL = new PouchError(413, "invalid_url", "Provided URL is invalid"); + +function createError(_, ee) { + function CustomPouchError(ee) { + for (var ne = Object.getOwnPropertyNames(_), ie = 0, re = ne.length; ie < re; ie++) if ("function" != typeof _[ne[ie]]) this[ne[ie]] = _[ne[ie]]; + if (void 0 === this.stack) this.stack = (new Error).stack; + if (void 0 !== ee) this.reason = ee; + } + CustomPouchError.prototype = PouchError.prototype; + return new CustomPouchError(ee); +} + +function generateErrorFromResponse(_) { + if ("object" != typeof _) { + var ee = _; + (_ = UNKNOWN_ERROR).data = ee; + } + if ("error" in _ && "conflict" === _.error) { + _.name = "conflict"; + _.status = 409; + } + if (!("name" in _)) _.name = _.error || "unknown"; + if (!("status" in _)) _.status = 500; + if (!("message" in _)) _.message = _.message || _.reason; + if (!("stack" in _)) _.stack = (new Error).stack; + return _; +} + +var getRandomValues, import_events = __toESM(require_events()), rnds8 = new Uint8Array(16); + +function rng() { + if (!getRandomValues) if (!(getRandomValues = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto))) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); + return getRandomValues(rnds8); +} + +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; + +function validate(_) { + return "string" == typeof _ && regex_default.test(_); +} + +var i2, validate_default = validate, byteToHex = []; + +for (i2 = 0; i2 < 256; ++i2) byteToHex.push((i2 + 256).toString(16).substr(1)); + +function stringify(_) { + var ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, ne = (byteToHex[_[ee + 0]] + byteToHex[_[ee + 1]] + byteToHex[_[ee + 2]] + byteToHex[_[ee + 3]] + "-" + byteToHex[_[ee + 4]] + byteToHex[_[ee + 5]] + "-" + byteToHex[_[ee + 6]] + byteToHex[_[ee + 7]] + "-" + byteToHex[_[ee + 8]] + byteToHex[_[ee + 9]] + "-" + byteToHex[_[ee + 10]] + byteToHex[_[ee + 11]] + byteToHex[_[ee + 12]] + byteToHex[_[ee + 13]] + byteToHex[_[ee + 14]] + byteToHex[_[ee + 15]]).toLowerCase(); + if (!validate_default(ne)) throw TypeError("Stringified UUID is invalid"); + return ne; +} + +var stringify_default = stringify; + +function v4(_, ee, ne) { + var ie = (_ = _ || {}).random || (_.rng || rng)(); + ie[6] = 15 & ie[6] | 64; + ie[8] = 63 & ie[8] | 128; + if (ee) { + ne = ne || 0; + for (var re = 0; re < 16; ++re) ee[ne + re] = ie[re]; + return ee; + } + return stringify_default(ie); +} + +var v4_default = v4, thisAtob = function(_) { + return atob(_); +}, thisBtoa = function(_) { + return btoa(_); +}; + +function createBlob2(_, ee) { + _ = _ || []; + ee = ee || {}; + try { + return new Blob(_, ee); + } catch (re) { + if ("TypeError" !== re.name) throw re; + for (var ne = new ("undefined" != typeof BlobBuilder ? BlobBuilder : "undefined" != typeof MSBlobBuilder ? MSBlobBuilder : "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : WebKitBlobBuilder), ie = 0; ie < _.length; ie += 1) ne.append(_[ie]); + return ne.getBlob(ee.type); + } +} + +function binaryStringToArrayBuffer(_) { + for (var ee = _.length, ne = new ArrayBuffer(ee), ie = new Uint8Array(ne), re = 0; re < ee; re++) ie[re] = _.charCodeAt(re); + return ne; +} + +function binStringToBluffer(_, ee) { + return createBlob2([ binaryStringToArrayBuffer(_) ], { + type: ee + }); +} + +function b64ToBluffer(_, ee) { + return binStringToBluffer(thisAtob(_), ee); +} + +function arrayBufferToBinaryString(_) { + for (var ee = "", ne = new Uint8Array(_), ie = ne.byteLength, re = 0; re < ie; re++) ee += String.fromCharCode(ne[re]); + return ee; +} + +function readAsBinaryString(_, ee) { + var ne = new FileReader, ie = "function" == typeof ne.readAsBinaryString; + ne.onloadend = function(_) { + var ne = _.target.result || ""; + if (ie) return ee(ne); + ee(arrayBufferToBinaryString(ne)); + }; + if (ie) ne.readAsBinaryString(_); else ne.readAsArrayBuffer(_); +} + +function blobToBinaryString(_, ee) { + readAsBinaryString(_, (function(_) { + ee(_); + })); +} + +function blobToBase64(_, ee) { + blobToBinaryString(_, (function(_) { + ee(thisBtoa(_)); + })); +} + +function readAsArrayBuffer(_, ee) { + var ne = new FileReader; + ne.onloadend = function(_) { + var ne = _.target.result || new ArrayBuffer(0); + ee(ne); + }; + ne.readAsArrayBuffer(_); +} + +var import_spark_md5 = __toESM(require_spark_md5()), setImmediateShim = self.setImmediate || self.setTimeout; + +function stringMd5(_) { + return import_spark_md5.default.hash(_); +} + +function isBinaryObject(_) { + return "undefined" != typeof ArrayBuffer && _ instanceof ArrayBuffer || "undefined" != typeof Blob && _ instanceof Blob; +} + +function cloneBinaryObject(_) { + return _ instanceof ArrayBuffer ? _.slice(0) : _.slice(0, _.size, _.type); +} + +var funcToString = Function.prototype.toString, objectCtorString = funcToString.call(Object); + +function isPlainObject(_) { + var ee = Object.getPrototypeOf(_); + if (null === ee) return true; + var ne = ee.constructor; + return "function" == typeof ne && ne instanceof ne && funcToString.call(ne) == objectCtorString; +} + +function clone(_) { + var ee, ne, ie; + if (!_ || "object" != typeof _) return _; + if (Array.isArray(_)) { + ee = []; + for (ne = 0, ie = _.length; ne < ie; ne++) ee[ne] = clone(_[ne]); + return ee; + } + if (_ instanceof Date && isFinite(_)) return _.toISOString(); + if (isBinaryObject(_)) return cloneBinaryObject(_); + if (!isPlainObject(_)) return _; + ee = {}; + for (ne in _) if (Object.prototype.hasOwnProperty.call(_, ne)) { + var re = clone(_[ne]); + if ("undefined" != typeof re) ee[ne] = re; + } + return ee; +} + +function once(_) { + var ee = false; + return function(...ne) { + if (ee) throw new Error("once called more than once"); else { + ee = true; + _.apply(this, ne); + } + }; +} + +function toPromise(_) { + return function(...ee) { + ee = clone(ee); + var ne = this, ie = "function" == typeof ee[ee.length - 1] ? ee.pop() : false, re = new Promise((function(ie, re) { + var se; + try { + var oe = once((function(_, ee) { + if (_) re(_); else ie(ee); + })); + ee.push(oe); + if ((se = _.apply(ne, ee)) && "function" == typeof se.then) ie(se); + } catch (_) { + re(_); + } + })); + if (ie) re.then((function(_) { + ie(null, _); + }), ie); + return re; + }; +} + +function logApiCall(_, ee, ne) { + if (_.constructor.listeners("debug").length) { + for (var ie = [ "api", _.name, ee ], re = 0; re < ne.length - 1; re++) ie.push(ne[re]); + _.constructor.emit("debug", ie); + var se = ne[ne.length - 1]; + ne[ne.length - 1] = function(ne, ie) { + var re = [ "api", _.name, ee ]; + re = re.concat(ne ? [ "error", ne ] : [ "success", ie ]); + _.constructor.emit("debug", re); + se(ne, ie); + }; + } +} + +function adapterFun(_, ee) { + return toPromise((function(...ne) { + if (this._closed) return Promise.reject(new Error("database is closed")); + if (this._destroyed) return Promise.reject(new Error("database is destroyed")); + var ie = this; + logApiCall(ie, _, ne); + if (!this.taskqueue.isReady) return new Promise((function(ee, re) { + ie.taskqueue.addTask((function(se) { + if (se) re(se); else ee(ie[_].apply(ie, ne)); + })); + })); else return ee.apply(this, ne); + })); +} + +function pick(_, ee) { + for (var ne = {}, ie = 0, re = ee.length; ie < re; ie++) { + var se = ee[ie]; + if (se in _) ne[se] = _[se]; + } + return ne; +} + +var hasLocal, MAX_NUM_CONCURRENT_REQUESTS = 6; + +function identityFunction(_) { + return _; +} + +function formatResultForOpenRevsGet(_) { + return [ { + ok: _ + } ]; +} + +function bulkGet(_, ee, ne) { + var ie = ee.docs, re = new Map; + ie.forEach((function(_) { + if (re.has(_.id)) re.get(_.id).push(_); else re.set(_.id, [ _ ]); + })); + var se = re.size, oe = 0, le = new Array(se), ue = []; + re.forEach((function(_, ee) { + ue.push(ee); + })); + var de = 0; + (function nextBatch() { + if (!(de >= ue.length)) { + var ie = Math.min(de + MAX_NUM_CONCURRENT_REQUESTS, ue.length), fe = ue.slice(de, ie); + (function processBatch(ie, ue) { + ie.forEach((function(ie, de) { + var fe = ue + de, he = re.get(ie), pe = pick(he[0], [ "atts_since", "attachments" ]); + pe.open_revs = he.map((function(_) { + return _.rev; + })); + pe.open_revs = pe.open_revs.filter(identityFunction); + var ge = identityFunction; + if (0 === pe.open_revs.length) { + delete pe.open_revs; + ge = formatResultForOpenRevsGet; + } + [ "revs", "attachments", "binary", "ajax", "latest" ].forEach((function(_) { + if (_ in ee) pe[_] = ee[_]; + })); + _.get(ie, pe, (function(_, ee) { + var re; + if (_) re = [ { + error: _ + } ]; else re = ge(ee); + (function gotResult(_, ee, ie) { + le[_] = { + id: ee, + docs: ie + }; + (function checkDone() { + if (++oe === se) (function collapseResultsAndFinish() { + var _ = []; + le.forEach((function(ee) { + ee.docs.forEach((function(ne) { + _.push({ + id: ee.id, + docs: [ ne ] + }); + })); + })); + ne(null, { + results: _ + }); + })(); + })(); + })(fe, ie, re); + nextBatch(); + })); + })); + })(fe, de); + de += fe.length; + } + })(); +} + +try { + localStorage.setItem("_pouch_check_localstorage", 1); + hasLocal = !!localStorage.getItem("_pouch_check_localstorage"); +} catch (_) { + hasLocal = false; +} + +function hasLocalStorage() { + return hasLocal; +} + +var nextTick = "function" == typeof queueMicrotask ? queueMicrotask : function nextTick2(_) { + Promise.resolve().then(_); +}, Changes = class extends import_events.default { + constructor() { + super(); + this._listeners = {}; + if (hasLocalStorage()) addEventListener("storage", (_ => { + this.emit(_.key); + })); + } + addListener(_, ee, ne, ie) { + if (!this._listeners[ee]) { + var re = false, se = this; + this._listeners[ee] = eventFunction; + this.on(_, eventFunction); + } + function eventFunction() { + if (se._listeners[ee]) if (!re) { + re = true; + var _ = pick(ie, [ "style", "include_docs", "attachments", "conflicts", "filter", "doc_ids", "view", "since", "query_params", "binary", "return_docs" ]); + ne.changes(_).on("change", (function(_) { + if (_.seq > ie.since && !ie.cancelled) { + ie.since = _.seq; + ie.onChange(_); + } + })).on("complete", (function() { + if ("waiting" === re) nextTick(eventFunction); + re = false; + })).on("error", (function onError() { + re = false; + })); + } else re = "waiting"; + } + } + removeListener(_, ee) { + if (ee in this._listeners) { + super.removeListener(_, this._listeners[ee]); + delete this._listeners[ee]; + } + } + notifyLocalWindows(_) { + if (hasLocalStorage()) localStorage[_] = "a" === localStorage[_] ? "b" : "a"; + } + notify(_) { + this.emit(_); + this.notifyLocalWindows(_); + } +}; + +function guardedConsole(_) { + if ("undefined" != typeof console && "function" == typeof console[_]) { + var ee = Array.prototype.slice.call(arguments, 1); + console[_].apply(console, ee); + } +} + +function randomNumber(_, ee) { + var ne = 6e5; + _ = parseInt(_, 10) || 0; + if ((ee = parseInt(ee, 10)) != ee || ee <= _) ee = (_ || 1) << 1; else ee += 1; + if (ee > ne) { + _ = 3e5; + ee = ne; + } + return ~~((ee - _) * Math.random() + _); +} + +function defaultBackOff(_) { + var ee = 0; + if (!_) ee = 2e3; + return randomNumber(_, ee); +} + +function explainError(_, ee) { + guardedConsole("info", "The above " + _ + " is totally normal. " + ee); +} + +function tryFilter(_, ee, ne) { + try { + return !_(ee, ne); + } catch (_) { + var ie = "Filter function threw: " + _.toString(); + return createError(BAD_REQUEST, ie); + } +} + +function filterChange(_) { + var ee = {}, ne = _.filter && "function" == typeof _.filter; + ee.query = _.query_params; + return function filter3(ie) { + if (!ie.doc) ie.doc = {}; + var re = ne && tryFilter(_.filter, ie.doc, ee); + if ("object" == typeof re) return re; + if (re) return false; + if (!_.include_docs) delete ie.doc; else if (!_.attachments) for (var se in ie.doc._attachments) if (Object.prototype.hasOwnProperty.call(ie.doc._attachments, se)) ie.doc._attachments[se].stub = true; + return true; + }; +} + +function f() {} + +var res, hasName = f.name; + +if (hasName) res = function(_) { + return _.name; +}; else res = function(_) { + var ee = _.toString().match(/^\s*function\s*(?:(\S+)\s*)?\(/); + if (ee && ee[1]) return ee[1]; else return ""; +}; + +function invalidIdError(_) { + var ee; + if (!_) ee = createError(MISSING_ID); else if ("string" != typeof _) ee = createError(INVALID_ID); else if (/^_/.test(_) && !/^_(design|local)/.test(_)) ee = createError(RESERVED_ID); + if (ee) throw ee; +} + +function isRemote(_) { + if ("boolean" == typeof _._remote) return _._remote; + if ("function" == typeof _.type) { + guardedConsole("warn", "db.type() is deprecated and will be removed in a future version of PouchDB"); + return "http" === _.type(); + } + return false; +} + +function listenerCount(_, ee) { + return "listenerCount" in _ ? _.listenerCount(ee) : import_events.default.listenerCount(_, ee); +} + +function parseDesignDocFunctionName(_) { + if (!_) return null; + var ee = _.split("/"); + if (2 === ee.length) return ee; + if (1 === ee.length) return [ _, _ ]; else return null; +} + +function normalizeDesignDocFunctionName(_) { + var ee = parseDesignDocFunctionName(_); + return ee ? ee.join("/") : null; +} + +var keys = [ "source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ], qName = "queryKey", qParser = /(?:^|&)([^&=]*)=?([^&]*)/g, parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + +function parseUri(_) { + for (var ee = parser.exec(_), ne = {}, ie = 14; ie--; ) { + var re = keys[ie], se = ee[ie] || "", oe = -1 !== [ "user", "password" ].indexOf(re); + ne[re] = oe ? decodeURIComponent(se) : se; + } + ne[qName] = {}; + ne[keys[12]].replace(qParser, (function(_, ee, ie) { + if (ee) ne[qName][ee] = ie; + })); + return ne; +} + +function scopeEval(_, ee) { + var ne = [], ie = []; + for (var re in ee) if (Object.prototype.hasOwnProperty.call(ee, re)) { + ne.push(re); + ie.push(ee[re]); + } + ne.push(_); + return Function.apply(null, ne).apply(null, ie); +} + +function upsert(_, ee, ne) { + return _.get(ee).catch((function(_) { + if (404 !== _.status) throw _; + return {}; + })).then((function(ie) { + var re = ie._rev, se = ne(ie); + if (!se) return { + updated: false, + rev: re + }; + se._id = ee; + se._rev = re; + return tryAndPut(_, se, ne); + })); +} + +function tryAndPut(_, ee, ne) { + return _.put(ee).then((function(_) { + return { + updated: true, + rev: _.rev + }; + }), (function(ie) { + if (409 !== ie.status) throw ie; + return upsert(_, ee._id, ne); + })); +} + +function rev2(_, ee) { + if (!ee) return v4_default().replace(/-/g, "").toLowerCase(); + var ne = Object.assign({}, _); + delete ne._rev_tree; + return stringMd5(JSON.stringify(ne)); +} + +var uuid = v4_default; + +function winningRev(_) { + for (var ee, ne, ie, re, se = _.rev_tree.slice(); re = se.pop(); ) { + var oe = re.ids, le = oe[2], ue = re.pos; + if (!le.length) { + var de = !!oe[1].deleted, fe = oe[0]; + if (!ee || (ie !== de ? ie : ne !== ue ? ne < ue : ee < fe)) { + ee = fe; + ne = ue; + ie = de; + } + } else for (var he = 0, pe = le.length; he < pe; he++) se.push({ + pos: ue + 1, + ids: le[he] + }); + } + return ne + "-" + ee; +} + +function traverseRevTree(_, ee) { + for (var ne, ie = _.slice(); ne = ie.pop(); ) for (var re = ne.pos, se = ne.ids, oe = se[2], le = ee(0 === oe.length, re, se[0], ne.ctx, se[1]), ue = 0, de = oe.length; ue < de; ue++) ie.push({ + pos: re + 1, + ids: oe[ue], + ctx: le + }); +} + +function sortByPos(_, ee) { + return _.pos - ee.pos; +} + +function collectLeaves(_) { + var ee = []; + traverseRevTree(_, (function(_, ne, ie, re, se) { + if (_) ee.push({ + rev: ne + "-" + ie, + pos: ne, + opts: se + }); + })); + ee.sort(sortByPos).reverse(); + for (var ne = 0, ie = ee.length; ne < ie; ne++) delete ee[ne].pos; + return ee; +} + +function collectConflicts(_) { + for (var ee = winningRev(_), ne = collectLeaves(_.rev_tree), ie = [], re = 0, se = ne.length; re < se; re++) { + var oe = ne[re]; + if (oe.rev !== ee && !oe.opts.deleted) ie.push(oe.rev); + } + return ie; +} + +function compactTree(_) { + var ee = []; + traverseRevTree(_.rev_tree, (function(_, ne, ie, re, se) { + if ("available" === se.status && !_) { + ee.push(ne + "-" + ie); + se.status = "missing"; + } + })); + return ee; +} + +function findPathToLeaf(_, ee) { + let ne = []; + const ie = _.slice(); + let re; + for (;re = ie.pop(); ) { + const {pos: _, ids: se} = re, oe = `${_}-${se[0]}`, le = se[2]; + ne.push(oe); + if (oe === ee) { + if (0 !== le.length) throw new Error("The requested revision is not a leaf"); + return ne.reverse(); + } + if (0 === le.length || le.length > 1) ne = []; + for (let ee = 0, ne = le.length; ee < ne; ee++) ie.push({ + pos: _ + 1, + ids: le[ee] + }); + } + if (0 === ne.length) throw new Error("The requested revision does not exist"); + return ne.reverse(); +} + +function rootToLeaf(_) { + for (var ee, ne = [], ie = _.slice(); ee = ie.pop(); ) { + var re = ee.pos, se = ee.ids, oe = se[0], le = se[1], ue = se[2], de = 0 === ue.length, fe = ee.history ? ee.history.slice() : []; + fe.push({ + id: oe, + opts: le + }); + if (de) ne.push({ + pos: re + 1 - fe.length, + ids: fe + }); + for (var he = 0, pe = ue.length; he < pe; he++) ie.push({ + pos: re + 1, + ids: ue[he], + history: fe + }); + } + return ne.reverse(); +} + +function sortByPos$1(_, ee) { + return _.pos - ee.pos; +} + +function binarySearch(_, ee, ne) { + for (var ie, re = 0, se = _.length; re < se; ) if (ne(_[ie = re + se >>> 1], ee) < 0) re = ie + 1; else se = ie; + return re; +} + +function insertSorted(_, ee, ne) { + var ie = binarySearch(_, ee, ne); + _.splice(ie, 0, ee); +} + +function pathToTree(_, ee) { + for (var ne, ie, re = ee, se = _.length; re < se; re++) { + var oe = _[re], le = [ oe.id, oe.opts, [] ]; + if (ie) { + ie[2].push(le); + ie = le; + } else ne = ie = le; + } + return ne; +} + +function compareTree(_, ee) { + return _[0] < ee[0] ? -1 : 1; +} + +function mergeTree(_, ee) { + for (var ne = [ { + tree1: _, + tree2: ee + } ], ie = false; ne.length > 0; ) { + var re = ne.pop(), se = re.tree1, oe = re.tree2; + if (se[1].status || oe[1].status) se[1].status = "available" === se[1].status || "available" === oe[1].status ? "available" : "missing"; + for (var le = 0; le < oe[2].length; le++) if (se[2][0]) { + for (var ue = false, de = 0; de < se[2].length; de++) if (se[2][de][0] === oe[2][le][0]) { + ne.push({ + tree1: se[2][de], + tree2: oe[2][le] + }); + ue = true; + } + if (!ue) { + ie = "new_branch"; + insertSorted(se[2], oe[2][le], compareTree); + } + } else { + ie = "new_leaf"; + se[2][0] = oe[2][le]; + } + } + return { + conflicts: ie, + tree: _ + }; +} + +function doMerge(_, ee, ne) { + var ie, re = [], se = false, oe = false; + if (!_.length) return { + tree: [ ee ], + conflicts: "new_leaf" + }; + for (var le = 0, ue = _.length; le < ue; le++) { + var de = _[le]; + if (de.pos === ee.pos && de.ids[0] === ee.ids[0]) { + ie = mergeTree(de.ids, ee.ids); + re.push({ + pos: de.pos, + ids: ie.tree + }); + se = se || ie.conflicts; + oe = true; + } else if (true !== ne) { + var fe = de.pos < ee.pos ? de : ee, he = de.pos < ee.pos ? ee : de, pe = he.pos - fe.pos, ge = [], me = []; + me.push({ + ids: fe.ids, + diff: pe, + parent: null, + parentIdx: null + }); + for (;me.length > 0; ) { + var ye = me.pop(); + if (0 !== ye.diff) for (var Se = ye.ids[2], Ee = 0, ve = Se.length; Ee < ve; Ee++) me.push({ + ids: Se[Ee], + diff: ye.diff - 1, + parent: ye.ids, + parentIdx: Ee + }); else if (ye.ids[0] === he.ids[0]) ge.push(ye); + } + var Ce = ge[0]; + if (!Ce) re.push(de); else { + ie = mergeTree(Ce.ids, he.ids); + Ce.parent[2][Ce.parentIdx] = ie.tree; + re.push({ + pos: fe.pos, + ids: fe.ids + }); + se = se || ie.conflicts; + oe = true; + } + } else re.push(de); + } + if (!oe) re.push(ee); + re.sort(sortByPos$1); + return { + tree: re, + conflicts: se || "internal_node" + }; +} + +function stem(_, ee) { + for (var ne, ie, re = rootToLeaf(_), se = 0, oe = re.length; se < oe; se++) { + var le, ue = re[se], de = ue.ids; + if (de.length > ee) { + if (!ne) ne = {}; + var fe = de.length - ee; + le = { + pos: ue.pos + fe, + ids: pathToTree(de, fe) + }; + for (var he = 0; he < fe; he++) { + var pe = ue.pos + he + "-" + de[he].id; + ne[pe] = true; + } + } else le = { + pos: ue.pos, + ids: pathToTree(de, 0) + }; + if (ie) ie = doMerge(ie, le, true).tree; else ie = [ le ]; + } + if (ne) traverseRevTree(ie, (function(_, ee, ie) { + delete ne[ee + "-" + ie]; + })); + return { + tree: ie, + revs: ne ? Object.keys(ne) : [] + }; +} + +function merge(_, ee, ne) { + var ie = doMerge(_, ee), re = stem(ie.tree, ne); + return { + tree: re.tree, + stemmedRevs: re.revs, + conflicts: ie.conflicts + }; +} + +function removeLeafFromRevTree(_, ee) { + return _.flatMap((_ => (_ = removeLeafFromPath(_, ee)) ? [ _ ] : [])); +} + +function removeLeafFromPath(_, ee) { + const ne = clone(_), ie = [ ne ]; + let re; + for (;re = ie.pop(); ) { + const {pos: _, ids: [se, , oe], parent: le} = re; + if (0 === oe.length && `${_}-${se}` === ee) { + if (!le) return null; + le.ids[2] = le.ids[2].filter((function(_) { + return _[0] !== se; + })); + return ne; + } + for (let ee = 0, ne = oe.length; ee < ne; ee++) ie.push({ + pos: _ + 1, + ids: oe[ee], + parent: re + }); + } + return ne; +} + +function revExists(_, ee) { + for (var ne, ie = _.slice(), re = ee.split("-"), se = parseInt(re[0], 10), oe = re[1]; ne = ie.pop(); ) { + if (ne.pos === se && ne.ids[0] === oe) return true; + for (var le = ne.ids[2], ue = 0, de = le.length; ue < de; ue++) ie.push({ + pos: ne.pos + 1, + ids: le[ue] + }); + } + return false; +} + +function getTrees(_) { + return _.ids; +} + +function isDeleted(_, ee) { + if (!ee) ee = winningRev(_); + for (var ne, ie = ee.substring(ee.indexOf("-") + 1), re = _.rev_tree.map(getTrees); ne = re.pop(); ) { + if (ne[0] === ie) return !!ne[1].deleted; + re = re.concat(ne[2]); + } +} + +function isLocalId(_) { + return "string" == typeof _ && _.startsWith("_local/"); +} + +function latest(_, ee) { + for (var ne, ie = ee.rev_tree.slice(); ne = ie.pop(); ) { + var re = ne.pos, se = ne.ids, oe = se[0], le = se[1], ue = se[2], de = 0 === ue.length, fe = ne.history ? ne.history.slice() : []; + fe.push({ + id: oe, + pos: re, + opts: le + }); + if (de) for (var he = 0, pe = fe.length; he < pe; he++) { + var ge = fe[he]; + if (ge.pos + "-" + ge.id === _) return re + "-" + oe; + } + for (var me = 0, ye = ue.length; me < ye; me++) ie.push({ + pos: re + 1, + ids: ue[me], + history: fe + }); + } + throw new Error("Unable to resolve latest revision for id " + ee.id + ", rev " + _); +} + +var import_events2 = __toESM(require_events()), f2 = fetch, h = Headers; + +function pad(_, ee, ne) { + for (var ie = "", re = ne - _.length; ie.length < re; ) ie += ee; + return ie; +} + +function padLeft(_, ee, ne) { + return pad(_, ee, ne) + _; +} + +var MIN_MAGNITUDE = -324, MAGNITUDE_DIGITS = 3, SEP = ""; + +function collate(_, ee) { + if (_ === ee) return 0; + _ = normalizeKey(_); + ee = normalizeKey(ee); + var ne = collationIndex(_), ie = collationIndex(ee); + if (ne - ie != 0) return ne - ie; + switch (typeof _) { + case "number": + return _ - ee; + + case "boolean": + return _ < ee ? -1 : 1; + + case "string": + return stringCollate(_, ee); + } + return Array.isArray(_) ? arrayCollate(_, ee) : objectCollate(_, ee); +} + +function normalizeKey(_) { + switch (typeof _) { + case "undefined": + return null; + + case "number": + if (_ === 1 / 0 || _ === -1 / 0 || isNaN(_)) return null; else return _; + + case "object": + var ee = _; + if (Array.isArray(_)) { + var ne = _.length; + _ = new Array(ne); + for (var ie = 0; ie < ne; ie++) _[ie] = normalizeKey(ee[ie]); + } else if (_ instanceof Date) return _.toJSON(); else if (null !== _) { + _ = {}; + for (var re in ee) if (Object.prototype.hasOwnProperty.call(ee, re)) { + var se = ee[re]; + if ("undefined" != typeof se) _[re] = normalizeKey(se); + } + } + } + return _; +} + +function indexify(_) { + if (null !== _) switch (typeof _) { + case "boolean": + return _ ? 1 : 0; + + case "number": + return numToIndexableString(_); + + case "string": + return _.replace(/\u0002/g, "").replace(/\u0001/g, "").replace(/\u0000/g, ""); + + case "object": + var ee = Array.isArray(_), ne = ee ? _ : Object.keys(_), ie = -1, re = ne.length, se = ""; + if (ee) for (;++ie < re; ) se += toIndexableString(ne[ie]); else for (;++ie < re; ) { + var oe = ne[ie]; + se += toIndexableString(oe) + toIndexableString(_[oe]); + } + return se; + } + return ""; +} + +function toIndexableString(_) { + return collationIndex(_ = normalizeKey(_)) + SEP + indexify(_) + "\0"; +} + +function parseNumber(_, ee) { + var ne, ie = ee; + if ("1" === _[ee]) { + ne = 0; + ee++; + } else { + var re = "0" === _[ee]; + ee++; + var se = "", oe = _.substring(ee, ee + MAGNITUDE_DIGITS), le = parseInt(oe, 10) + MIN_MAGNITUDE; + if (re) le = -le; + ee += MAGNITUDE_DIGITS; + for (;;) { + var ue = _[ee]; + if ("\0" === ue) break; else se += ue; + ee++; + } + if (1 === (se = se.split(".")).length) ne = parseInt(se, 10); else ne = parseFloat(se[0] + "." + se[1]); + if (re) ne -= 10; + if (0 !== le) ne = parseFloat(ne + "e" + le); + } + return { + num: ne, + length: ee - ie + }; +} + +function pop(_, ee) { + var ne = _.pop(); + if (ee.length) { + var ie = ee[ee.length - 1]; + if (ne === ie.element) { + ee.pop(); + ie = ee[ee.length - 1]; + } + var re = ie.element, se = ie.index; + if (Array.isArray(re)) re.push(ne); else if (se === _.length - 2) re[_.pop()] = ne; else _.push(ne); + } +} + +function parseIndexableString(_) { + for (var ee = [], ne = [], ie = 0; ;) { + var re = _[ie++]; + if ("\0" === re) if (1 === ee.length) return ee.pop(); else { + pop(ee, ne); + continue; + } + switch (re) { + case "1": + ee.push(null); + break; + + case "2": + ee.push("1" === _[ie]); + ie++; + break; + + case "3": + var se = parseNumber(_, ie); + ee.push(se.num); + ie += se.length; + break; + + case "4": + for (var oe = ""; ;) { + var le = _[ie]; + if ("\0" === le) break; + oe += le; + ie++; + } + oe = oe.replace(/\u0001\u0001/g, "\0").replace(/\u0001\u0002/g, "").replace(/\u0002\u0002/g, ""); + ee.push(oe); + break; + + case "5": + var ue = { + element: [], + index: ee.length + }; + ee.push(ue.element); + ne.push(ue); + break; + + case "6": + var de = { + element: {}, + index: ee.length + }; + ee.push(de.element); + ne.push(de); + break; + + default: + throw new Error("bad collationIndex or unexpectedly reached end of input: " + re); + } + } +} + +function arrayCollate(_, ee) { + for (var ne = Math.min(_.length, ee.length), ie = 0; ie < ne; ie++) { + var re = collate(_[ie], ee[ie]); + if (0 !== re) return re; + } + return _.length === ee.length ? 0 : _.length > ee.length ? 1 : -1; +} + +function stringCollate(_, ee) { + return _ === ee ? 0 : _ > ee ? 1 : -1; +} + +function objectCollate(_, ee) { + for (var ne = Object.keys(_), ie = Object.keys(ee), re = Math.min(ne.length, ie.length), se = 0; se < re; se++) { + var oe = collate(ne[se], ie[se]); + if (0 !== oe) return oe; + if (0 !== (oe = collate(_[ne[se]], ee[ie[se]]))) return oe; + } + return ne.length === ie.length ? 0 : ne.length > ie.length ? 1 : -1; +} + +function collationIndex(_) { + var ee = [ "boolean", "number", "string", "object" ].indexOf(typeof _); + if (~ee) { + if (null === _) return 1; + if (Array.isArray(_)) return 5; else return ee < 3 ? ee + 2 : ee + 3; + } + if (Array.isArray(_)) return 5; +} + +function numToIndexableString(_) { + if (0 === _) return "1"; + var ee = _.toExponential().split(/e\+?/), ne = parseInt(ee[1], 10), ie = _ < 0, re = ie ? "0" : "2", se = padLeft(((ie ? -ne : ne) - MIN_MAGNITUDE).toString(), "0", MAGNITUDE_DIGITS); + re += SEP + se; + var oe = Math.abs(parseFloat(ee[0])); + if (ie) oe = 10 - oe; + var le = oe.toFixed(20); + le = le.replace(/\.?0+$/, ""); + return re += SEP + le; +} + +function getFieldFromDoc(_, ee) { + for (var ne = _, ie = 0, re = ee.length; ie < re && (ne = ne[ee[ie]]); ie++) ; + return ne; +} + +function setFieldInDoc(_, ee, ne) { + for (var ie = 0, re = ee.length; ie < re - 1; ie++) { + var se = ee[ie]; + _ = _[se] = _[se] || {}; + } + _[ee[re - 1]] = ne; +} + +function compare(_, ee) { + return _ < ee ? -1 : _ > ee ? 1 : 0; +} + +function parseField(_) { + for (var ee = [], ne = "", ie = 0, re = _.length; ie < re; ie++) { + var se = _[ie]; + if (ie > 0 && "\\" === _[ie - 1] && ("$" === se || "." === se)) ne = ne.substring(0, ne.length - 1) + se; else if ("." === se) { + ee.push(ne); + ne = ""; + } else ne += se; + } + ee.push(ne); + return ee; +} + +var combinationFields = [ "$or", "$nor", "$not" ]; + +function isCombinationalField(_) { + return combinationFields.indexOf(_) > -1; +} + +function getKey(_) { + return Object.keys(_)[0]; +} + +function getValue(_) { + return _[getKey(_)]; +} + +function mergeAndedSelectors(_) { + var ee = {}, ne = { + $or: true, + $nor: true + }; + _.forEach((function(_) { + Object.keys(_).forEach((function(ie) { + var re = _[ie]; + if ("object" != typeof re) re = { + $eq: re + }; + if (isCombinationalField(ie)) if (re instanceof Array) { + if (ne[ie]) { + ne[ie] = false; + ee[ie] = re; + return; + } + var se = []; + ee[ie].forEach((function(_) { + Object.keys(re).forEach((function(ee) { + var ne = re[ee], ie = Math.max(Object.keys(_).length, Object.keys(ne).length), oe = mergeAndedSelectors([ _, ne ]); + if (!(Object.keys(oe).length <= ie)) se.push(oe); + })); + })); + ee[ie] = se; + } else ee[ie] = mergeAndedSelectors([ re ]); else { + var oe = ee[ie] = ee[ie] || {}; + Object.keys(re).forEach((function(_) { + var ee = re[_]; + if ("$gt" === _ || "$gte" === _) return mergeGtGte(_, ee, oe); else if ("$lt" === _ || "$lte" === _) return mergeLtLte(_, ee, oe); else if ("$ne" === _) return mergeNe(ee, oe); else if ("$eq" === _) return mergeEq(ee, oe); else if ("$regex" === _) return mergeRegex(ee, oe); + oe[_] = ee; + })); + } + })); + })); + return ee; +} + +function mergeGtGte(_, ee, ne) { + if ("undefined" == typeof ne.$eq) if ("undefined" != typeof ne.$gte) { + if ("$gte" === _) { + if (ee > ne.$gte) ne.$gte = ee; + } else if (ee >= ne.$gte) { + delete ne.$gte; + ne.$gt = ee; + } + } else if ("undefined" != typeof ne.$gt) { + if ("$gte" === _) { + if (ee > ne.$gt) { + delete ne.$gt; + ne.$gte = ee; + } + } else if (ee > ne.$gt) ne.$gt = ee; + } else ne[_] = ee; +} + +function mergeLtLte(_, ee, ne) { + if ("undefined" == typeof ne.$eq) if ("undefined" != typeof ne.$lte) { + if ("$lte" === _) { + if (ee < ne.$lte) ne.$lte = ee; + } else if (ee <= ne.$lte) { + delete ne.$lte; + ne.$lt = ee; + } + } else if ("undefined" != typeof ne.$lt) { + if ("$lte" === _) { + if (ee < ne.$lt) { + delete ne.$lt; + ne.$lte = ee; + } + } else if (ee < ne.$lt) ne.$lt = ee; + } else ne[_] = ee; +} + +function mergeNe(_, ee) { + if ("$ne" in ee) ee.$ne.push(_); else ee.$ne = [ _ ]; +} + +function mergeEq(_, ee) { + delete ee.$gt; + delete ee.$gte; + delete ee.$lt; + delete ee.$lte; + delete ee.$ne; + ee.$eq = _; +} + +function mergeRegex(_, ee) { + if ("$regex" in ee) ee.$regex.push(_); else ee.$regex = [ _ ]; +} + +function mergeAndedSelectorsNested(_) { + for (var ee in _) { + if (Array.isArray(_)) for (var ne in _) if (_[ne]["$and"]) _[ne] = mergeAndedSelectors(_[ne]["$and"]); + var ie = _[ee]; + if ("object" == typeof ie) mergeAndedSelectorsNested(ie); + } + return _; +} + +function isAndInSelector(_, ee) { + for (var ne in _) { + if ("$and" === ne) ee = true; + var ie = _[ne]; + if ("object" == typeof ie) ee = isAndInSelector(ie, ee); + } + return ee; +} + +function massageSelector(_) { + var ee = clone(_); + if (isAndInSelector(ee, false)) if ("$and" in (ee = mergeAndedSelectorsNested(ee))) ee = mergeAndedSelectors(ee["$and"]); + [ "$or", "$nor" ].forEach((function(_) { + if (_ in ee) ee[_].forEach((function(_) { + for (var ee = Object.keys(_), ne = 0; ne < ee.length; ne++) { + var ie = ee[ne], re = _[ie]; + if ("object" != typeof re || null === re) _[ie] = { + $eq: re + }; + } + })); + })); + if ("$not" in ee) ee["$not"] = mergeAndedSelectors([ ee["$not"] ]); + for (var ne = Object.keys(ee), ie = 0; ie < ne.length; ie++) { + var re = ne[ie], se = ee[re]; + if ("object" != typeof se || null === se) se = { + $eq: se + }; + ee[re] = se; + } + normalizeArrayOperators(ee); + return ee; +} + +function normalizeArrayOperators(_) { + Object.keys(_).forEach((function(ee) { + var ne = _[ee]; + if (Array.isArray(ne)) ne.forEach((function(_) { + if (_ && "object" == typeof _) normalizeArrayOperators(_); + })); else if ("$ne" === ee) _.$ne = [ ne ]; else if ("$regex" === ee) _.$regex = [ ne ]; else if (ne && "object" == typeof ne) normalizeArrayOperators(ne); + })); +} + +function createFieldSorter(_) { + function getFieldValuesAsArray(ee) { + return _.map((function(_) { + var ne = parseField(getKey(_)); + return getFieldFromDoc(ee, ne); + })); + } + return function(_, ee) { + var ne = collate(getFieldValuesAsArray(_.doc), getFieldValuesAsArray(ee.doc)); + if (0 !== ne) return ne; else return compare(_.doc._id, ee.doc._id); + }; +} + +function filterInMemoryFields(_, ee, ne) { + _ = _.filter((function(_) { + return rowFilter(_.doc, ee.selector, ne); + })); + if (ee.sort) { + var ie = createFieldSorter(ee.sort); + _ = _.sort(ie); + if ("string" != typeof ee.sort[0] && "desc" === getValue(ee.sort[0])) _ = _.reverse(); + } + if ("limit" in ee || "skip" in ee) { + var re = ee.skip || 0, se = ("limit" in ee ? ee.limit : _.length) + re; + _ = _.slice(re, se); + } + return _; +} + +function rowFilter(_, ee, ne) { + return ne.every((function(ne) { + var ie = ee[ne], re = parseField(ne), se = getFieldFromDoc(_, re); + if (isCombinationalField(ne)) return matchCominationalSelector(ne, ie, _); else return matchSelector(ie, _, re, se); + })); +} + +function matchSelector(_, ee, ne, ie) { + if (!_) return true; + if ("object" == typeof _) return Object.keys(_).every((function(re) { + var se = _[re]; + if (0 === re.indexOf("$")) return match2(re, ee, se, ne, ie); else { + var oe = parseField(re); + if (void 0 === ie && "object" != typeof se && oe.length > 0) return false; + var le = getFieldFromDoc(ie, oe); + if ("object" == typeof se) return matchSelector(se, ee, ne, le); else return match2("$eq", ee, se, oe, le); + } + })); else return _ === ie; +} + +function matchCominationalSelector(_, ee, ne) { + if ("$or" === _) return ee.some((function(_) { + return rowFilter(ne, _, Object.keys(_)); + })); + if ("$not" === _) return !rowFilter(ne, ee, Object.keys(ee)); else return !ee.find((function(_) { + return rowFilter(ne, _, Object.keys(_)); + })); +} + +function match2(_, ee, ne, ie, re) { + if (!matchers[_]) throw new Error('unknown operator "' + _ + '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all'); + return matchers[_](ee, ne, ie, re); +} + +function fieldExists(_) { + return "undefined" != typeof _ && null !== _; +} + +function fieldIsNotUndefined(_) { + return "undefined" != typeof _; +} + +function modField(_, ee) { + if ("number" != typeof _ || parseInt(_, 10) !== _) return false; else return _ % ee[0] === ee[1]; +} + +function arrayContainsValue(_, ee) { + return ee.some((function(ee) { + if (_ instanceof Array) return _.some((function(_) { + return 0 === collate(ee, _); + })); else return 0 === collate(ee, _); + })); +} + +function arrayContainsAllValues(_, ee) { + return ee.every((function(ee) { + return _.some((function(_) { + return 0 === collate(ee, _); + })); + })); +} + +function arraySize(_, ee) { + return _.length === ee; +} + +function regexMatch(_, ee) { + return new RegExp(ee).test(_); +} + +function typeMatch(_, ee) { + switch (ee) { + case "null": + return null === _; + + case "boolean": + return "boolean" == typeof _; + + case "number": + return "number" == typeof _; + + case "string": + return "string" == typeof _; + + case "array": + return _ instanceof Array; + + case "object": + return "[object Object]" === {}.toString.call(_); + } +} + +var matchers = { + $elemMatch: function(_, ee, ne, ie) { + if (!Array.isArray(ie)) return false; + if (0 === ie.length) return false; + if ("object" == typeof ie[0] && null !== ie[0]) return ie.some((function(_) { + return rowFilter(_, ee, Object.keys(ee)); + })); else return ie.some((function(ie) { + return matchSelector(ee, _, ne, ie); + })); + }, + $allMatch: function(_, ee, ne, ie) { + if (!Array.isArray(ie)) return false; + if (0 === ie.length) return false; + if ("object" == typeof ie[0] && null !== ie[0]) return ie.every((function(_) { + return rowFilter(_, ee, Object.keys(ee)); + })); else return ie.every((function(ie) { + return matchSelector(ee, _, ne, ie); + })); + }, + $eq: function(_, ee, ne, ie) { + return fieldIsNotUndefined(ie) && 0 === collate(ie, ee); + }, + $gte: function(_, ee, ne, ie) { + return fieldIsNotUndefined(ie) && collate(ie, ee) >= 0; + }, + $gt: function(_, ee, ne, ie) { + return fieldIsNotUndefined(ie) && collate(ie, ee) > 0; + }, + $lte: function(_, ee, ne, ie) { + return fieldIsNotUndefined(ie) && collate(ie, ee) <= 0; + }, + $lt: function(_, ee, ne, ie) { + return fieldIsNotUndefined(ie) && collate(ie, ee) < 0; + }, + $exists: function(_, ee, ne, ie) { + if (ee) return fieldIsNotUndefined(ie); else return !fieldIsNotUndefined(ie); + }, + $mod: function(_, ee, ne, ie) { + return fieldExists(ie) && modField(ie, ee); + }, + $ne: function(_, ee, ne, ie) { + return ee.every((function(_) { + return 0 !== collate(ie, _); + })); + }, + $in: function(_, ee, ne, ie) { + return fieldExists(ie) && arrayContainsValue(ie, ee); + }, + $nin: function(_, ee, ne, ie) { + return fieldExists(ie) && !arrayContainsValue(ie, ee); + }, + $size: function(_, ee, ne, ie) { + return fieldExists(ie) && Array.isArray(ie) && arraySize(ie, ee); + }, + $all: function(_, ee, ne, ie) { + return Array.isArray(ie) && arrayContainsAllValues(ie, ee); + }, + $regex: function(_, ee, ne, ie) { + return fieldExists(ie) && "string" == typeof ie && ee.every((function(_) { + return regexMatch(ie, _); + })); + }, + $type: function(_, ee, ne, ie) { + return typeMatch(ie, ee); + } +}; + +function matchesSelector(_, ee) { + if ("object" != typeof ee) throw new Error("Selector error: expected a JSON object"); + var ne = filterInMemoryFields([ { + doc: _ + } ], { + selector: ee = massageSelector(ee) + }, Object.keys(ee)); + return ne && 1 === ne.length; +} + +function evalFilter(_) { + return scopeEval('"use strict";\nreturn ' + _ + ";", {}); +} + +function evalView(_) { + return scopeEval([ "return function(doc) {", ' "use strict";', " var emitted = false;", " var emit = function (a, b) {", " emitted = true;", " };", " var view = " + _ + ";", " view(doc);", " if (emitted) {", " return true;", " }", "};" ].join("\n"), {}); +} + +function validate2(_, ee) { + if (_.selector) if (_.filter && "_selector" !== _.filter) { + var ne = "string" == typeof _.filter ? _.filter : "function"; + return ee(new Error('selector invalid for filter "' + ne + '"')); + } + ee(); +} + +function normalize(_) { + if (_.view && !_.filter) _.filter = "_view"; + if (_.selector && !_.filter) _.filter = "_selector"; + if (_.filter && "string" == typeof _.filter) if ("_view" === _.filter) _.view = normalizeDesignDocFunctionName(_.view); else _.filter = normalizeDesignDocFunctionName(_.filter); +} + +function shouldFilter(_, ee) { + return ee.filter && "string" == typeof ee.filter && !ee.doc_ids && !isRemote(_.db); +} + +function filter2(_, ee) { + var ne = ee.complete; + if ("_view" === ee.filter) { + if (!ee.view || "string" != typeof ee.view) { + var ie = createError(BAD_REQUEST, "`view` filter parameter not found or invalid."); + return ne(ie); + } + var re = parseDesignDocFunctionName(ee.view); + _.db.get("_design/" + re[0], (function(ie, se) { + if (_.isCancelled) return ne(null, { + status: "cancelled" + }); + if (ie) return ne(generateErrorFromResponse(ie)); + var oe = se && se.views && se.views[re[1]] && se.views[re[1]].map; + if (!oe) return ne(createError(MISSING_DOC, se.views ? "missing json key: " + re[1] : "missing json key: views")); + ee.filter = evalView(oe); + _.doChanges(ee); + })); + } else if (ee.selector) { + ee.filter = function(_) { + return matchesSelector(_, ee.selector); + }; + _.doChanges(ee); + } else { + var se = parseDesignDocFunctionName(ee.filter); + _.db.get("_design/" + se[0], (function(ie, re) { + if (_.isCancelled) return ne(null, { + status: "cancelled" + }); + if (ie) return ne(generateErrorFromResponse(ie)); + var oe = re && re.filters && re.filters[se[1]]; + if (!oe) return ne(createError(MISSING_DOC, re && re.filters ? "missing json key: " + se[1] : "missing json key: filters")); + ee.filter = evalFilter(oe); + _.doChanges(ee); + })); + } +} + +function applyChangesFilterPlugin(_) { + _._changesFilterPlugin = { + validate: validate2, + normalize, + shouldFilter, + filter: filter2 + }; +} + +var index_browser_es_default = applyChangesFilterPlugin; + +function tryCatchInChangeListener(_, ee, ne, ie) { + try { + _.emit("change", ee, ne, ie); + } catch (_) { + guardedConsole("error", 'Error in .on("change", function):', _); + } +} + +function processChange(_, ee, ne) { + var ie = [ { + rev: _._rev + } ]; + if ("all_docs" === ne.style) ie = collectLeaves(ee.rev_tree).map((function(_) { + return { + rev: _.rev + }; + })); + var re = { + id: ee.id, + changes: ie, + doc: _ + }; + if (isDeleted(ee, _._rev)) re.deleted = true; + if (ne.conflicts) { + re.doc._conflicts = collectConflicts(ee); + if (!re.doc._conflicts.length) delete re.doc._conflicts; + } + return re; +} + +var Changes2 = class extends import_events2.default { + constructor(_, ee, ne) { + super(); + this.db = _; + var ie = (ee = ee ? clone(ee) : {}).complete = once(((ee, ne) => { + if (ee) { + if (listenerCount(this, "error") > 0) this.emit("error", ee); + } else this.emit("complete", ne); + this.removeAllListeners(); + _.removeListener("destroyed", onDestroy2); + })); + if (ne) { + this.on("complete", (function(_) { + ne(null, _); + })); + this.on("error", ne); + } + const onDestroy2 = () => { + this.cancel(); + }; + _.once("destroyed", onDestroy2); + ee.onChange = (_, ee, ne) => { + if (!this.isCancelled) tryCatchInChangeListener(this, _, ee, ne); + }; + var re = new Promise((function(_, ne) { + ee.complete = function(ee, ie) { + if (ee) ne(ee); else _(ie); + }; + })); + this.once("cancel", (function() { + _.removeListener("destroyed", onDestroy2); + ee.complete(null, { + status: "cancelled" + }); + })); + this.then = re.then.bind(re); + this["catch"] = re["catch"].bind(re); + this.then((function(_) { + ie(null, _); + }), ie); + if (!_.taskqueue.isReady) _.taskqueue.addTask((_ => { + if (_) ee.complete(_); else if (this.isCancelled) this.emit("cancel"); else this.validateChanges(ee); + })); else this.validateChanges(ee); + } + cancel() { + this.isCancelled = true; + if (this.db.taskqueue.isReady) this.emit("cancel"); + } + validateChanges(_) { + var ee = _.complete; + if (PouchDB._changesFilterPlugin) PouchDB._changesFilterPlugin.validate(_, (ne => { + if (ne) return ee(ne); + this.doChanges(_); + })); else this.doChanges(_); + } + doChanges(_) { + var ee = _.complete; + if ("live" in (_ = clone(_)) && !("continuous" in _)) _.continuous = _.live; + _.processChange = processChange; + if ("latest" === _.since) _.since = "now"; + if (!_.since) _.since = 0; + if ("now" !== _.since) { + if (PouchDB._changesFilterPlugin) { + PouchDB._changesFilterPlugin.normalize(_); + if (PouchDB._changesFilterPlugin.shouldFilter(this, _)) return PouchDB._changesFilterPlugin.filter(this, _); + } else [ "doc_ids", "filter", "selector", "view" ].forEach((function(ee) { + if (ee in _) guardedConsole("warn", 'The "' + ee + '" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.'); + })); + if (!("descending" in _)) _.descending = false; + _.limit = 0 === _.limit ? 1 : _.limit; + _.complete = ee; + var ne = this.db._changes(_); + if (ne && "function" == typeof ne.cancel) { + const _ = this.cancel; + this.cancel = (...ee) => { + ne.cancel(); + _.apply(this, ee); + }; + } + } else this.db.info().then((ne => { + if (!this.isCancelled) { + _.since = ne.update_seq; + this.doChanges(_); + } else ee(null, { + status: "cancelled" + }); + }), ee); + } +}; + +function yankError(_, ee) { + return function(ne, ie) { + if (ne || ie[0] && ie[0].error) { + (ne = ne || ie[0]).docId = ee; + _(ne); + } else _(null, ie.length ? ie[0] : ie); + }; +} + +function cleanDocs(_) { + for (var ee = 0; ee < _.length; ee++) { + var ne = _[ee]; + if (ne._deleted) delete ne._attachments; else if (ne._attachments) for (var ie = Object.keys(ne._attachments), re = 0; re < ie.length; re++) { + var se = ie[re]; + ne._attachments[se] = pick(ne._attachments[se], [ "data", "digest", "content_type", "length", "revpos", "stub" ]); + } + } +} + +function compareByIdThenRev(_, ee) { + if (_._id === ee._id) return (_._revisions ? _._revisions.start : 0) - (ee._revisions ? ee._revisions.start : 0); else return _._id < ee._id ? -1 : 1; +} + +function computeHeight(_) { + var ee = {}, ne = []; + traverseRevTree(_, (function(_, ie, re, se) { + var oe = ie + "-" + re; + if (_) ee[oe] = 0; + if (void 0 !== se) ne.push({ + from: se, + to: oe + }); + return oe; + })); + ne.reverse(); + ne.forEach((function(_) { + if (void 0 === ee[_.from]) ee[_.from] = 1 + ee[_.to]; else ee[_.from] = Math.min(ee[_.from], 1 + ee[_.to]); + })); + return ee; +} + +function allDocsKeysParse(_) { + var ee = "limit" in _ ? _.keys.slice(_.skip, _.limit + _.skip) : _.skip > 0 ? _.keys.slice(_.skip) : _.keys; + _.keys = ee; + _.skip = 0; + delete _.limit; + if (_.descending) { + ee.reverse(); + _.descending = false; + } +} + +function doNextCompaction(_) { + var ee = _._compactionQueue[0], ne = ee.opts, ie = ee.callback; + _.get("_local/compaction").catch((function() { + return false; + })).then((function(ee) { + if (ee && ee.last_seq) ne.last_seq = ee.last_seq; + _._compact(ne, (function(ee, ne) { + if (ee) ie(ee); else ie(null, ne); + nextTick((function() { + _._compactionQueue.shift(); + if (_._compactionQueue.length) doNextCompaction(_); + })); + })); + })); +} + +function appendPurgeSeq(_, ee, ne) { + return _.get("_local/purges").then((function(_) { + const ie = _.purgeSeq + 1; + _.purges.push({ + docId: ee, + rev: ne, + purgeSeq: ie + }); + if (_.purges.length > self.purged_infos_limit) _.purges.splice(0, _.purges.length - self.purged_infos_limit); + _.purgeSeq = ie; + return _; + })).catch((function(_) { + if (404 !== _.status) throw _; + return { + _id: "_local/purges", + purges: [ { + docId: ee, + rev: ne, + purgeSeq: 0 + } ], + purgeSeq: 0 + }; + })).then((function(ee) { + return _.put(ee); + })); +} + +function attachmentNameError(_) { + if ("_" === _.charAt(0)) return _ + " is not a valid attachment name, attachment names cannot start with '_'"; else return false; +} + +function isNotSingleDoc(_) { + return null === _ || "object" != typeof _ || Array.isArray(_); +} + +var validRevRegex = /^\d+-[^-]*$/; + +function isValidRev(_) { + return "string" == typeof _ && validRevRegex.test(_); +} + +var AbstractPouchDB = class extends import_events2.default { + _setup() { + this.post = adapterFun("post", (function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + if (isNotSingleDoc(_)) return ne(createError(NOT_AN_OBJECT)); + this.bulkDocs({ + docs: [ _ ] + }, ee, yankError(ne, _._id)); + })).bind(this); + this.put = adapterFun("put", (function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + if (isNotSingleDoc(_)) return ne(createError(NOT_AN_OBJECT)); + invalidIdError(_._id); + if ("_rev" in _ && !isValidRev(_._rev)) return ne(createError(INVALID_REV)); + if (isLocalId(_._id) && "function" == typeof this._putLocal) if (_._deleted) return this._removeLocal(_, ne); else return this._putLocal(_, ne); + const putDoc = ne => { + if ("function" == typeof this._put && false !== ee.new_edits) this._put(_, ee, ne); else this.bulkDocs({ + docs: [ _ ] + }, ee, yankError(ne, _._id)); + }; + if (ee.force && _._rev) { + (function transformForceOptionToNewEditsOption() { + var ne = _._rev.split("-"), ie = ne[1], re = parseInt(ne[0], 10) + 1, se = rev2(); + _._revisions = { + start: re, + ids: [ se, ie ] + }; + _._rev = re + "-" + se; + ee.new_edits = false; + })(); + putDoc((function(ee) { + var ie = ee ? null : { + ok: true, + id: _._id, + rev: _._rev + }; + ne(ee, ie); + })); + } else putDoc(ne); + })).bind(this); + this.putAttachment = adapterFun("putAttachment", (function(_, ee, ne, ie, re) { + var se = this; + if ("function" == typeof re) { + re = ie; + ie = ne; + ne = null; + } + if ("undefined" == typeof re) { + re = ie; + ie = ne; + ne = null; + } + if (!re) guardedConsole("warn", "Attachment", ee, "on document", _, "is missing content_type"); + function createAttachment(_) { + var ne = "_rev" in _ ? parseInt(_._rev, 10) : 0; + _._attachments = _._attachments || {}; + _._attachments[ee] = { + content_type: re, + data: ie, + revpos: ++ne + }; + return se.put(_); + } + return se.get(_).then((function(_) { + if (_._rev !== ne) throw createError(REV_CONFLICT); + return createAttachment(_); + }), (function(ee) { + if (ee.reason === MISSING_DOC.message) return createAttachment({ + _id: _ + }); else throw ee; + })); + })).bind(this); + this.removeAttachment = adapterFun("removeAttachment", (function(_, ee, ne, ie) { + this.get(_, ((_, re) => { + if (!_) if (re._rev === ne) { + if (!re._attachments) return ie(); + delete re._attachments[ee]; + if (0 === Object.keys(re._attachments).length) delete re._attachments; + this.put(re, ie); + } else ie(createError(REV_CONFLICT)); else ie(_); + })); + })).bind(this); + this.remove = adapterFun("remove", (function(_, ee, ne, ie) { + var re; + if ("string" == typeof ee) { + re = { + _id: _, + _rev: ee + }; + if ("function" == typeof ne) { + ie = ne; + ne = {}; + } + } else { + re = _; + if ("function" == typeof ee) { + ie = ee; + ne = {}; + } else { + ie = ne; + ne = ee; + } + } + (ne = ne || {}).was_delete = true; + var se = { + _id: re._id, + _rev: re._rev || ne.rev, + _deleted: true + }; + if (isLocalId(se._id) && "function" == typeof this._removeLocal) return this._removeLocal(re, ie); + this.bulkDocs({ + docs: [ se ] + }, ne, yankError(ie, se._id)); + })).bind(this); + this.revsDiff = adapterFun("revsDiff", (function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + var ie = Object.keys(_); + if (!ie.length) return ne(null, {}); + var re = 0, se = new Map; + function addToMissing(_, ee) { + if (!se.has(_)) se.set(_, { + missing: [] + }); + se.get(_).missing.push(ee); + } + ie.forEach((function(ee) { + this._getRevisionTree(ee, (function(oe, le) { + if (oe && 404 === oe.status && "missing" === oe.message) se.set(ee, { + missing: _[ee] + }); else if (oe) return ne(oe); else (function processDoc(ee, ne) { + var ie = _[ee].slice(0); + traverseRevTree(ne, (function(_, ne, re, se, oe) { + var le = ne + "-" + re, ue = ie.indexOf(le); + if (-1 !== ue) { + ie.splice(ue, 1); + if ("available" !== oe.status) addToMissing(ee, le); + } + })); + ie.forEach((function(_) { + addToMissing(ee, _); + })); + })(ee, le); + if (++re === ie.length) { + var ue = {}; + se.forEach((function(_, ee) { + ue[ee] = _; + })); + return ne(null, ue); + } + })); + }), this); + })).bind(this); + this.bulkGet = adapterFun("bulkGet", (function(_, ee) { + bulkGet(this, _, ee); + })).bind(this); + this.compactDocument = adapterFun("compactDocument", (function(_, ee, ne) { + this._getRevisionTree(_, ((ie, re) => { + if (ie) return ne(ie); + var se = computeHeight(re), oe = [], le = []; + Object.keys(se).forEach((function(_) { + if (se[_] > ee) oe.push(_); + })); + traverseRevTree(re, (function(_, ee, ne, ie, re) { + var se = ee + "-" + ne; + if ("available" === re.status && -1 !== oe.indexOf(se)) le.push(se); + })); + this._doCompaction(_, le, ne); + })); + })).bind(this); + this.compact = adapterFun("compact", (function(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + _ = _ || {}; + this._compactionQueue = this._compactionQueue || []; + this._compactionQueue.push({ + opts: _, + callback: ee + }); + if (1 === this._compactionQueue.length) doNextCompaction(this); + })).bind(this); + this.get = adapterFun("get", (function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + ee = ee || {}; + if ("string" != typeof _) return ne(createError(INVALID_ID)); + if (isLocalId(_) && "function" == typeof this._getLocal) return this._getLocal(_, ne); + var ie = []; + const finishOpenRevs = () => { + var re = [], se = ie.length; + if (!se) return ne(null, re); + ie.forEach((ie => { + this.get(_, { + rev: ie, + revs: ee.revs, + latest: ee.latest, + attachments: ee.attachments, + binary: ee.binary + }, (function(_, ee) { + if (!_) { + for (var oe, le = 0, ue = re.length; le < ue; le++) if (re[le].ok && re[le].ok._rev === ee._rev) { + oe = true; + break; + } + if (!oe) re.push({ + ok: ee + }); + } else re.push({ + missing: ie + }); + if (! --se) ne(null, re); + })); + })); + }; + if (!ee.open_revs) return this._get(_, ee, ((ie, re) => { + if (ie) { + ie.docId = _; + return ne(ie); + } + var se = re.doc, oe = re.metadata, le = re.ctx; + if (ee.conflicts) { + var ue = collectConflicts(oe); + if (ue.length) se._conflicts = ue; + } + if (isDeleted(oe, se._rev)) se._deleted = true; + if (ee.revs || ee.revs_info) { + for (var de = se._rev.split("-"), fe = parseInt(de[0], 10), he = de[1], pe = rootToLeaf(oe.rev_tree), ge = null, me = 0; me < pe.length; me++) { + var ye = pe[me]; + const _ = ye.ids.findIndex((_ => _.id === he)); + if (_ === fe - 1 || !ge && -1 !== _) ge = ye; + } + if (!ge) { + (ie = new Error("invalid rev tree")).docId = _; + return ne(ie); + } + const re = se._rev.split("-")[1], le = ge.ids.findIndex((_ => _.id === re)) + 1; + var Se = ge.ids.length - le; + ge.ids.splice(le, Se); + ge.ids.reverse(); + if (ee.revs) se._revisions = { + start: ge.pos + ge.ids.length - 1, + ids: ge.ids.map((function(_) { + return _.id; + })) + }; + if (ee.revs_info) { + var Ee = ge.pos + ge.ids.length; + se._revs_info = ge.ids.map((function(_) { + return { + rev: --Ee + "-" + _.id, + status: _.opts.status + }; + })); + } + } + if (ee.attachments && se._attachments) { + var ve = se._attachments, Ce = Object.keys(ve).length; + if (0 === Ce) return ne(null, se); + Object.keys(ve).forEach((_ => { + this._getAttachment(se._id, _, ve[_], { + binary: ee.binary, + metadata: oe, + ctx: le + }, (function(ee, ie) { + var re = se._attachments[_]; + re.data = ie; + delete re.stub; + delete re.length; + if (! --Ce) ne(null, se); + })); + })); + } else { + if (se._attachments) for (var we in se._attachments) if (Object.prototype.hasOwnProperty.call(se._attachments, we)) se._attachments[we].stub = true; + ne(null, se); + } + })); else if ("all" === ee.open_revs) this._getRevisionTree(_, (function(_, ee) { + if (_) return ne(_); + ie = collectLeaves(ee).map((function(_) { + return _.rev; + })); + finishOpenRevs(); + })); else if (Array.isArray(ee.open_revs)) { + ie = ee.open_revs; + for (var re = 0; re < ie.length; re++) if (!isValidRev(ie[re])) return ne(createError(INVALID_REV)); + finishOpenRevs(); + } else return ne(createError(UNKNOWN_ERROR, "function_clause")); + })).bind(this); + this.getAttachment = adapterFun("getAttachment", (function(_, ee, ne, ie) { + if (ne instanceof Function) { + ie = ne; + ne = {}; + } + this._get(_, ne, ((re, se) => { + if (re) return ie(re); + if (se.doc._attachments && se.doc._attachments[ee]) { + ne.ctx = se.ctx; + ne.binary = true; + ne.metadata = se.metadata; + this._getAttachment(_, ee, se.doc._attachments[ee], ne, ie); + } else return ie(createError(MISSING_DOC)); + })); + })).bind(this); + this.allDocs = adapterFun("allDocs", (function(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + _.skip = "undefined" != typeof _.skip ? _.skip : 0; + if (_.start_key) _.startkey = _.start_key; + if (_.end_key) _.endkey = _.end_key; + if ("keys" in _) { + if (!Array.isArray(_.keys)) return ee(new TypeError("options.keys must be an array")); + var ne = [ "startkey", "endkey", "key" ].filter((function(ee) { + return ee in _; + }))[0]; + if (ne) { + ee(createError(QUERY_PARSE_ERROR, "Query parameter `" + ne + "` is not compatible with multi-get")); + return; + } + if (!isRemote(this)) { + allDocsKeysParse(_); + if (0 === _.keys.length) return this._allDocs({ + limit: 0 + }, ee); + } + } + return this._allDocs(_, ee); + })).bind(this); + this.close = adapterFun("close", (function(_) { + this._closed = true; + this.emit("closed"); + return this._close(_); + })).bind(this); + this.info = adapterFun("info", (function(_) { + this._info(((ee, ne) => { + if (ee) return _(ee); + ne.db_name = ne.db_name || this.name; + ne.auto_compaction = !!(this.auto_compaction && !isRemote(this)); + ne.adapter = this.adapter; + _(null, ne); + })); + })).bind(this); + this.id = adapterFun("id", (function(_) { + return this._id(_); + })).bind(this); + this.bulkDocs = adapterFun("bulkDocs", (function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + ee = ee || {}; + if (Array.isArray(_)) _ = { + docs: _ + }; + if (!_ || !_.docs || !Array.isArray(_.docs)) return ne(createError(MISSING_BULK_DOCS)); + for (var ie = 0; ie < _.docs.length; ++ie) { + const ee = _.docs[ie]; + if (isNotSingleDoc(ee)) return ne(createError(NOT_AN_OBJECT)); + if ("_rev" in ee && !isValidRev(ee._rev)) return ne(createError(INVALID_REV)); + } + var re; + _.docs.forEach((function(_) { + if (_._attachments) Object.keys(_._attachments).forEach((function(ee) { + re = re || attachmentNameError(ee); + if (!_._attachments[ee].content_type) guardedConsole("warn", "Attachment", ee, "on document", _._id, "is missing content_type"); + })); + })); + if (re) return ne(createError(BAD_REQUEST, re)); + if (!("new_edits" in ee)) if ("new_edits" in _) ee.new_edits = _.new_edits; else ee.new_edits = true; + var se = this; + if (!ee.new_edits && !isRemote(se)) _.docs.sort(compareByIdThenRev); + cleanDocs(_.docs); + var oe = _.docs.map((function(_) { + return _._id; + })); + this._bulkDocs(_, ee, (function(_, ie) { + if (_) return ne(_); + if (!ee.new_edits) ie = ie.filter((function(_) { + return _.error; + })); + if (!isRemote(se)) for (var re = 0, le = ie.length; re < le; re++) ie[re].id = ie[re].id || oe[re]; + ne(null, ie); + })); + })).bind(this); + this.registerDependentDatabase = adapterFun("registerDependentDatabase", (function(_, ee) { + var ne = clone(this.__opts); + if (this.__opts.view_adapter) ne.adapter = this.__opts.view_adapter; + var ie = new this.constructor(_, ne); + upsert(this, "_local/_pouch_dependentDbs", (function diffFun(ee) { + ee.dependentDbs = ee.dependentDbs || {}; + if (ee.dependentDbs[_]) return false; + ee.dependentDbs[_] = true; + return ee; + })).then((function() { + ee(null, { + db: ie + }); + })).catch(ee); + })).bind(this); + this.destroy = adapterFun("destroy", (function(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + var ne = "use_prefix" in this ? this.use_prefix : true; + const destroyDb = () => { + this._destroy(_, ((_, ne) => { + if (_) return ee(_); + this._destroyed = true; + this.emit("destroyed"); + ee(null, ne || { + ok: true + }); + })); + }; + if (isRemote(this)) return destroyDb(); + this.get("_local/_pouch_dependentDbs", ((_, ie) => { + if (_) if (404 !== _.status) return ee(_); else return destroyDb(); + var re = ie.dependentDbs, se = this.constructor, oe = Object.keys(re).map((_ => { + var ee = ne ? _.replace(new RegExp("^" + se.prefix), "") : _; + return new se(ee, this.__opts).destroy(); + })); + Promise.all(oe).then(destroyDb, ee); + })); + })).bind(this); + } + _compact(_, ee) { + var ne, ie = { + return_docs: false, + last_seq: _.last_seq || 0, + since: _.last_seq || 0 + }, re = [], se = 0; + const onChange = _ => { + this.activeTasks.update(ne, { + completed_items: ++se + }); + re.push(this.compactDocument(_.id, 0)); + }, onError = _ => { + this.activeTasks.remove(ne, _); + ee(_); + }, onComplete = _ => { + var ie = _.last_seq; + Promise.all(re).then((() => upsert(this, "_local/compaction", (_ => { + if (!_.last_seq || _.last_seq < ie) { + _.last_seq = ie; + return _; + } + return false; + })))).then((() => { + this.activeTasks.remove(ne); + ee(null, { + ok: true + }); + })).catch(onError); + }; + this.info().then((_ => { + ne = this.activeTasks.add({ + name: "database_compaction", + total_items: _.update_seq - ie.last_seq + }); + this.changes(ie).on("change", onChange).on("complete", onComplete).on("error", onError); + })); + } + changes(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + (_ = _ || {}).return_docs = "return_docs" in _ ? _.return_docs : !_.live; + return new Changes2(this, _, ee); + } + type() { + return "function" == typeof this._type ? this._type() : this.adapter; + } +}; + +AbstractPouchDB.prototype.purge = adapterFun("_purge", (function(_, ee, ne) { + if ("undefined" == typeof this._purge) return ne(createError(UNKNOWN_ERROR, "Purge is not implemented in the " + this.adapter + " adapter.")); + var ie = this; + ie._getRevisionTree(_, ((re, se) => { + if (re) return ne(re); + if (!se) return ne(createError(MISSING_DOC)); + let oe; + try { + oe = findPathToLeaf(se, ee); + } catch (_) { + return ne(_.message || _); + } + ie._purge(_, oe, ((re, se) => { + if (re) return ne(re); else appendPurgeSeq(ie, _, ee).then((function() { + return ne(null, se); + })); + })); + })); +})); + +var TaskQueue = class { + constructor() { + this.isReady = false; + this.failed = false; + this.queue = []; + } + execute() { + var _; + if (this.failed) for (;_ = this.queue.shift(); ) _(this.failed); else for (;_ = this.queue.shift(); ) _(); + } + fail(_) { + this.failed = _; + this.execute(); + } + ready(_) { + this.isReady = true; + this.db = _; + this.execute(); + } + addTask(_) { + this.queue.push(_); + if (this.failed) this.execute(); + } +}; + +function parseAdapter(_, ee) { + var ne = _.match(/([a-z-]*):\/\/(.*)/); + if (ne) return { + name: /https?/.test(ne[1]) ? ne[1] + "://" + ne[2] : ne[2], + adapter: ne[1] + }; + var ie = PouchDB.adapters, re = PouchDB.preferredAdapters, se = PouchDB.prefix, oe = ee.adapter; + if (!oe) for (var le = 0; le < re.length && "idb" === (oe = re[le]) && "websql" in ie && hasLocalStorage() && localStorage["_pouch__websqldb_" + se + _]; ++le) guardedConsole("log", 'PouchDB is downgrading "' + _ + '" to WebSQL to avoid data loss, because it was already opened with WebSQL.'); + var ue = ie[oe]; + return { + name: (ue && "use_prefix" in ue ? ue.use_prefix : true) ? se + _ : _, + adapter: oe + }; +} + +function inherits(_, ee) { + _.prototype = Object.create(ee.prototype, { + constructor: { + value: _ + } + }); +} + +function createClass(_, ee) { + let klass = function(..._) { + if (!(this instanceof klass)) return new klass(..._); + ee.apply(this, _); + }; + inherits(klass, _); + return klass; +} + +function prepareForDestruction(_) { + function onDestroyed(ee) { + _.removeListener("closed", onClosed); + if (!ee) _.constructor.emit("destroyed", _.name); + } + function onClosed() { + _.removeListener("destroyed", onDestroyed); + _.constructor.emit("unref", _); + } + _.once("destroyed", onDestroyed); + _.once("closed", onClosed); + _.constructor.emit("ref", _); +} + +var PouchInternal = class extends AbstractPouchDB { + constructor(_, ee) { + super(); + this._setup(_, ee); + } + _setup(_, ee) { + super._setup(); + ee = ee || {}; + if (_ && "object" == typeof _) { + _ = (ee = _).name; + delete ee.name; + } + if (void 0 === ee.deterministic_revs) ee.deterministic_revs = true; + this.__opts = ee = clone(ee); + this.auto_compaction = ee.auto_compaction; + this.purged_infos_limit = ee.purged_infos_limit || 1e3; + this.prefix = PouchDB.prefix; + if ("string" != typeof _) throw new Error("Missing/invalid DB name"); + var ne = parseAdapter((ee.prefix || "") + _, ee); + ee.name = ne.name; + ee.adapter = ee.adapter || ne.adapter; + this.name = _; + this._adapter = ee.adapter; + PouchDB.emit("debug", [ "adapter", "Picked adapter: ", ee.adapter ]); + if (!PouchDB.adapters[ee.adapter] || !PouchDB.adapters[ee.adapter].valid()) throw new Error("Invalid Adapter: " + ee.adapter); + if (ee.view_adapter) if (!PouchDB.adapters[ee.view_adapter] || !PouchDB.adapters[ee.view_adapter].valid()) throw new Error("Invalid View Adapter: " + ee.view_adapter); + this.taskqueue = new TaskQueue; + this.adapter = ee.adapter; + PouchDB.adapters[ee.adapter].call(this, ee, (_ => { + if (_) return this.taskqueue.fail(_); + prepareForDestruction(this); + this.emit("created", this); + PouchDB.emit("created", this.name); + this.taskqueue.ready(this); + })); + } +}, PouchDB = createClass(PouchInternal, (function(_, ee) { + PouchInternal.prototype._setup.call(this, _, ee); +})), ActiveTasks = class { + constructor() { + this.tasks = {}; + } + list() { + return Object.values(this.tasks); + } + add(_) { + const ee = v4_default(); + this.tasks[ee] = { + id: ee, + name: _.name, + total_items: _.total_items, + created_at: (new Date).toJSON() + }; + return ee; + } + get(_) { + return this.tasks[_]; + } + remove(_, ee) { + delete this.tasks[_]; + return this.tasks; + } + update(_, ee) { + const ne = this.tasks[_]; + if ("undefined" != typeof ne) { + const ie = { + id: ne.id, + name: ne.name, + created_at: ne.created_at, + total_items: ee.total_items || ne.total_items, + completed_items: ee.completed_items || ne.completed_items, + updated_at: (new Date).toJSON() + }; + this.tasks[_] = ie; + } + return this.tasks; + } +}; + +PouchDB.adapters = {}; + +PouchDB.preferredAdapters = []; + +PouchDB.prefix = "_pouch_"; + +var eventEmitter = new import_events2.default; + +function setUpEventEmitter(_) { + Object.keys(import_events2.default.prototype).forEach((function(ee) { + if ("function" == typeof import_events2.default.prototype[ee]) _[ee] = eventEmitter[ee].bind(eventEmitter); + })); + var ee = _._destructionListeners = new Map; + _.on("ref", (function onConstructorRef(_) { + if (!ee.has(_.name)) ee.set(_.name, []); + ee.get(_.name).push(_); + })); + _.on("unref", (function onConstructorUnref(_) { + if (ee.has(_.name)) { + var ne = ee.get(_.name), ie = ne.indexOf(_); + if (!(ie < 0)) { + ne.splice(ie, 1); + if (ne.length > 1) ee.set(_.name, ne); else ee.delete(_.name); + } + } + })); + _.on("destroyed", (function onConstructorDestroyed(_) { + if (ee.has(_)) { + var ne = ee.get(_); + ee.delete(_); + ne.forEach((function(_) { + _.emit("destroyed", true); + })); + } + })); +} + +setUpEventEmitter(PouchDB); + +PouchDB.adapter = function(_, ee, ne) { + if (ee.valid()) { + PouchDB.adapters[_] = ee; + if (ne) PouchDB.preferredAdapters.push(_); + } +}; + +PouchDB.plugin = function(_) { + if ("function" == typeof _) _(PouchDB); else if ("object" != typeof _ || 0 === Object.keys(_).length) throw new Error('Invalid plugin: got "' + _ + '", expected an object or a function'); else Object.keys(_).forEach((function(ee) { + PouchDB.prototype[ee] = _[ee]; + })); + if (this.__defaults) PouchDB.__defaults = Object.assign({}, this.__defaults); + return PouchDB; +}; + +PouchDB.defaults = function(_) { + let ee = createClass(PouchDB, (function(_, ne) { + ne = ne || {}; + if (_ && "object" == typeof _) { + _ = (ne = _).name; + delete ne.name; + } + ne = Object.assign({}, ee.__defaults, ne); + PouchDB.call(this, _, ne); + })); + ee.preferredAdapters = PouchDB.preferredAdapters.slice(); + Object.keys(PouchDB).forEach((function(_) { + if (!(_ in ee)) ee[_] = PouchDB[_]; + })); + ee.__defaults = Object.assign({}, this.__defaults, _); + return ee; +}; + +PouchDB.fetch = function(_, ee) { + return f2(_, ee); +}; + +PouchDB.prototype.activeTasks = PouchDB.activeTasks = new ActiveTasks; + +var version = "9.0.0"; + +PouchDB.plugin(index_browser_es_default); + +PouchDB.version = version; + +var index_es_default = PouchDB, import_vuvuzela = __toESM(require_vuvuzela()); + +function safeJsonParse(_) { + try { + return JSON.parse(_); + } catch (ee) { + return import_vuvuzela.default.parse(_); + } +} + +function safeJsonStringify(_) { + try { + return JSON.stringify(_); + } catch (ee) { + return import_vuvuzela.default.stringify(_); + } +} + +var import_spark_md52 = __toESM(require_spark_md5()), setImmediateShim2 = self.setImmediate || self.setTimeout, MD5_CHUNK_SIZE = 32768; + +function rawToBase64(_) { + return thisBtoa(_); +} + +function appendBlob(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.size) ee = ee.slice(ne, ie); + readAsArrayBuffer(ee, (function(ee) { + _.append(ee); + re(); + })); +} + +function appendString(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.length) ee = ee.substring(ne, ie); + _.appendBinary(ee); + re(); +} + +function binaryMd5(_, ee) { + var ne = "string" == typeof _, ie = ne ? _.length : _.size, re = Math.min(MD5_CHUNK_SIZE, ie), se = Math.ceil(ie / re), oe = 0, le = ne ? new import_spark_md52.default : new import_spark_md52.default.ArrayBuffer, ue = ne ? appendString : appendBlob; + function next() { + setImmediateShim2(loadNextChunk); + } + function done() { + var _ = rawToBase64(le.end(true)); + ee(_); + le.destroy(); + } + function loadNextChunk() { + var ee = oe * re, ne = ee + re; + if (++oe < se) ue(le, _, ee, ne, next); else ue(le, _, ee, ne, done); + } + loadNextChunk(); +} + +function checkBlobSupport(_, ee, ne) { + return new Promise((function(ie) { + var re = createBlob2([ "" ]); + let se; + if ("function" == typeof ne) { + const ie = ne(re); + se = _.objectStore(ee).put(ie); + } else { + const ie = ne; + se = _.objectStore(ee).put(re, ie); + } + se.onsuccess = function() { + var _ = navigator.userAgent.match(/Chrome\/(\d+)/), ee = navigator.userAgent.match(/Edge\//); + ie(ee || !_ || parseInt(_[1], 10) >= 43); + }; + se.onerror = _.onabort = function(_) { + _.preventDefault(); + _.stopPropagation(); + ie(false); + }; + })).catch((function() { + return false; + })); +} + +function toObject(_) { + return _.reduce((function(_, ee) { + _[ee] = true; + return _; + }), {}); +} + +var reservedWords = toObject([ "_id", "_rev", "_access", "_attachments", "_deleted", "_revisions", "_revs_info", "_conflicts", "_deleted_conflicts", "_local_seq", "_rev_tree", "_replication_id", "_replication_state", "_replication_state_time", "_replication_state_reason", "_replication_stats", "_removed" ]), dataWords = toObject([ "_access", "_attachments", "_replication_id", "_replication_state", "_replication_state_time", "_replication_state_reason", "_replication_stats" ]); + +function parseRevisionInfo(_) { + if (!/^\d+-/.test(_)) return createError(INVALID_REV); + var ee = _.indexOf("-"), ne = _.substring(0, ee), ie = _.substring(ee + 1); + return { + prefix: parseInt(ne, 10), + id: ie + }; +} + +function makeRevTreeFromRevisions(_, ee) { + for (var ne = _.start - _.ids.length + 1, ie = _.ids, re = [ ie[0], ee, [] ], se = 1, oe = ie.length; se < oe; se++) re = [ ie[se], { + status: "missing" + }, [ re ] ]; + return [ { + pos: ne, + ids: re + } ]; +} + +function parseDoc(_, ee, ne) { + if (!ne) ne = { + deterministic_revs: true + }; + var ie, re, se, oe = { + status: "available" + }; + if (_._deleted) oe.deleted = true; + if (ee) { + if (!_._id) _._id = uuid(); + re = rev2(_, ne.deterministic_revs); + if (_._rev) { + if ((se = parseRevisionInfo(_._rev)).error) return se; + _._rev_tree = [ { + pos: se.prefix, + ids: [ se.id, { + status: "missing" + }, [ [ re, oe, [] ] ] ] + } ]; + ie = se.prefix + 1; + } else { + _._rev_tree = [ { + pos: 1, + ids: [ re, oe, [] ] + } ]; + ie = 1; + } + } else { + if (_._revisions) { + _._rev_tree = makeRevTreeFromRevisions(_._revisions, oe); + ie = _._revisions.start; + re = _._revisions.ids[0]; + } + if (!_._rev_tree) { + if ((se = parseRevisionInfo(_._rev)).error) return se; + ie = se.prefix; + re = se.id; + _._rev_tree = [ { + pos: ie, + ids: [ re, oe, [] ] + } ]; + } + } + invalidIdError(_._id); + _._rev = ie + "-" + re; + var le = { + metadata: {}, + data: {} + }; + for (var ue in _) if (Object.prototype.hasOwnProperty.call(_, ue)) { + var de = "_" === ue[0]; + if (de && !reservedWords[ue]) { + var fe = createError(DOC_VALIDATION, ue); + fe.message = DOC_VALIDATION.message + ": " + ue; + throw fe; + } else if (de && !dataWords[ue]) le.metadata[ue.slice(1)] = _[ue]; else le.data[ue] = _[ue]; + } + return le; +} + +function parseBase64(_) { + try { + return thisAtob(_); + } catch (_) { + return { + error: createError(BAD_ARG, "Attachment is not a valid base64 string") + }; + } +} + +function preprocessString(_, ee, ne) { + var ie = parseBase64(_.data); + if (ie.error) return ne(ie.error); + _.length = ie.length; + if ("blob" === ee) _.data = binStringToBluffer(ie, _.content_type); else if ("base64" === ee) _.data = thisBtoa(ie); else _.data = ie; + binaryMd5(ie, (function(ee) { + _.digest = "md5-" + ee; + ne(); + })); +} + +function preprocessBlob(_, ee, ne) { + binaryMd5(_.data, (function(ie) { + _.digest = "md5-" + ie; + _.length = _.data.size || _.data.length || 0; + if ("binary" === ee) blobToBinaryString(_.data, (function(ee) { + _.data = ee; + ne(); + })); else if ("base64" === ee) blobToBase64(_.data, (function(ee) { + _.data = ee; + ne(); + })); else ne(); + })); +} + +function preprocessAttachment(_, ee, ne) { + if (_.stub) return ne(); + if ("string" == typeof _.data) preprocessString(_, ee, ne); else preprocessBlob(_, ee, ne); +} + +function preprocessAttachments(_, ee, ne) { + if (!_.length) return ne(); + var ie, re = 0; + _.forEach((function(_) { + var ne = _.data && _.data._attachments ? Object.keys(_.data._attachments) : [], re = 0; + if (!ne.length) return done(); + function processedAttachment(_) { + ie = _; + if (++re === ne.length) done(); + } + for (var se in _.data._attachments) if (Object.prototype.hasOwnProperty.call(_.data._attachments, se)) preprocessAttachment(_.data._attachments[se], ee, processedAttachment); + })); + function done() { + re++; + if (_.length === re) if (ie) ne(ie); else ne(); + } +} + +function updateDoc(_, ee, ne, ie, re, se, oe, le) { + if (revExists(ee.rev_tree, ne.metadata.rev) && !le) { + ie[re] = ne; + return se(); + } + var ue = ee.winningRev || winningRev(ee), de = "deleted" in ee ? ee.deleted : isDeleted(ee, ue), fe = "deleted" in ne.metadata ? ne.metadata.deleted : isDeleted(ne.metadata), he = /^1-/.test(ne.metadata.rev); + if (de && !fe && le && he) { + var pe = ne.data; + pe._rev = ue; + pe._id = ne.metadata.id; + ne = parseDoc(pe, le); + } + var ge = merge(ee.rev_tree, ne.metadata.rev_tree[0], _); + if (le && (de && fe && "new_leaf" !== ge.conflicts || !de && "new_leaf" !== ge.conflicts || de && !fe && "new_branch" === ge.conflicts)) { + var me = createError(REV_CONFLICT); + ie[re] = me; + return se(); + } + var ye = ne.metadata.rev; + ne.metadata.rev_tree = ge.tree; + ne.stemmedRevs = ge.stemmedRevs || []; + if (ee.rev_map) ne.metadata.rev_map = ee.rev_map; + var Se, Ee = winningRev(ne.metadata), ve = isDeleted(ne.metadata, Ee), Ce = de === ve ? 0 : de < ve ? -1 : 1; + if (ye === Ee) Se = ve; else Se = isDeleted(ne.metadata, ye); + oe(ne, Ee, ve, Se, true, Ce, re, se); +} + +function rootIsMissing(_) { + return "missing" === _.metadata.rev_tree[0].ids[1].status; +} + +function processDocs(_, ee, ne, ie, re, se, oe, le, ue) { + _ = _ || 1e3; + var de = le.new_edits, fe = new Map, he = 0, pe = ee.length; + function checkAllDocsDone() { + if (++he === pe && ue) ue(); + } + ee.forEach((function(_, ee) { + if (!_._id || !isLocalId(_._id)) { + var ie = _.metadata.id; + if (fe.has(ie)) { + pe--; + fe.get(ie).push([ _, ee ]); + } else fe.set(ie, [ [ _, ee ] ]); + } else { + var oe = _._deleted ? "_removeLocal" : "_putLocal"; + ne[oe](_, { + ctx: re + }, (function(_, ne) { + se[ee] = _ || ne; + checkAllDocsDone(); + })); + } + })); + fe.forEach((function(ee, ne) { + var re = 0; + function docWritten() { + if (++re < ee.length) nextDoc(); else checkAllDocsDone(); + } + function nextDoc() { + var ue = ee[re], fe = ue[0], he = ue[1]; + if (ie.has(ne)) updateDoc(_, ie.get(ne), fe, se, he, docWritten, oe, de); else { + var pe = merge([], fe.metadata.rev_tree[0], _); + fe.metadata.rev_tree = pe.tree; + fe.stemmedRevs = pe.stemmedRevs || []; + (function insertDoc(_, ee, ne) { + var ie = winningRev(_.metadata), re = isDeleted(_.metadata, ie); + if ("was_delete" in le && re) { + se[ee] = createError(MISSING_DOC, "deleted"); + return ne(); + } + if (de && rootIsMissing(_)) { + var ue = createError(REV_CONFLICT); + se[ee] = ue; + return ne(); + } + oe(_, ie, re, re, false, re ? 0 : 1, ee, ne); + })(fe, he, docWritten); + } + } + nextDoc(); + })); +} + +var ADAPTER_VERSION = 5, DOC_STORE = "document-store", BY_SEQ_STORE = "by-sequence", ATTACH_STORE = "attach-store", ATTACH_AND_SEQ_STORE = "attach-seq-store", META_STORE = "meta-store", LOCAL_STORE = "local-store", DETECT_BLOB_SUPPORT_STORE = "detect-blob-support"; + +function idbError(_) { + return function(ee) { + var ne = "unknown_error"; + if (ee.target && ee.target.error) ne = ee.target.error.name || ee.target.error.message; + _(createError(IDB_ERROR, ne, ee.type)); + }; +} + +function encodeMetadata(_, ee, ne) { + return { + data: safeJsonStringify(_), + winningRev: ee, + deletedOrLocal: ne ? "1" : "0", + seq: _.seq, + id: _.id + }; +} + +function decodeMetadata(_) { + if (!_) return null; + var ee = safeJsonParse(_.data); + ee.winningRev = _.winningRev; + ee.deleted = "1" === _.deletedOrLocal; + ee.seq = _.seq; + return ee; +} + +function decodeDoc(_) { + if (!_) return _; + var ee = _._doc_id_rev.lastIndexOf(":"); + _._id = _._doc_id_rev.substring(0, ee - 1); + _._rev = _._doc_id_rev.substring(ee + 1); + delete _._doc_id_rev; + return _; +} + +function readBlobData(_, ee, ne, ie) { + if (ne) if (!_) ie(createBlob2([ "" ], { + type: ee + })); else if ("string" != typeof _) ie(_); else ie(b64ToBluffer(_, ee)); else if (!_) ie(""); else if ("string" != typeof _) readAsBinaryString(_, (function(_) { + ie(thisBtoa(_)); + })); else ie(_); +} + +function fetchAttachmentsIfNecessary(_, ee, ne, ie) { + var re = Object.keys(_._attachments || {}); + if (!re.length) return ie && ie(); + var se = 0; + function checkDone() { + if (++se === re.length && ie) ie(); + } + re.forEach((function(ie) { + if (ee.attachments && ee.include_docs) (function fetchAttachment(_, ee) { + var ie = _._attachments[ee], re = ie.digest; + ne.objectStore(ATTACH_STORE).get(re).onsuccess = function(_) { + ie.body = _.target.result.body; + checkDone(); + }; + })(_, ie); else { + _._attachments[ie].stub = true; + checkDone(); + } + })); +} + +function postProcessAttachments(_, ee) { + return Promise.all(_.map((function(_) { + if (_.doc && _.doc._attachments) { + var ne = Object.keys(_.doc._attachments); + return Promise.all(ne.map((function(ne) { + var ie = _.doc._attachments[ne]; + if ("body" in ie) { + var re = ie.body, se = ie.content_type; + return new Promise((function(oe) { + readBlobData(re, se, ee, (function(ee) { + _.doc._attachments[ne] = Object.assign(pick(ie, [ "digest", "content_type" ]), { + data: ee + }); + oe(); + })); + })); + } + }))); + } + }))); +} + +function compactRevs(_, ee, ne) { + var ie = [], re = ne.objectStore(BY_SEQ_STORE), se = ne.objectStore(ATTACH_STORE), oe = ne.objectStore(ATTACH_AND_SEQ_STORE), le = _.length; + function checkDone() { + if (! --le) (function deleteOrphanedAttachments() { + if (ie.length) ie.forEach((function(_) { + oe.index("digestSeq").count(IDBKeyRange.bound(_ + "::", _ + "::￿", false, false)).onsuccess = function(ee) { + if (!ee.target.result) se.delete(_); + }; + })); + })(); + } + _.forEach((function(_) { + var ne = re.index("_doc_id_rev"), se = ee + "::" + _; + ne.getKey(se).onsuccess = function(_) { + var ee = _.target.result; + if ("number" != typeof ee) return checkDone(); + re.delete(ee); + oe.index("seq").openCursor(IDBKeyRange.only(ee)).onsuccess = function(_) { + var ee = _.target.result; + if (ee) { + var ne = ee.value.digestSeq.split("::")[0]; + ie.push(ne); + oe.delete(ee.primaryKey); + ee.continue(); + } else checkDone(); + }; + }; + })); +} + +function openTransactionSafely(_, ee, ne) { + try { + return { + txn: _.transaction(ee, ne) + }; + } catch (_) { + return { + error: _ + }; + } +} + +var changesHandler$1 = new Changes; + +function idbBulkDocs(_, ee, ne, ie, re, se) { + for (var oe, le, ue, de, fe, he, pe, ge, me = ee.docs, ye = 0, Se = me.length; ye < Se; ye++) { + var Ee = me[ye]; + if (!Ee._id || !isLocalId(Ee._id)) if ((Ee = me[ye] = parseDoc(Ee, ne.new_edits, _)).error && !pe) pe = Ee; + } + if (pe) return se(pe); + var ve = false, Ce = 0, we = new Array(me.length), Le = new Map, Oe = false, ke = ie._meta.blobSupport ? "blob" : "base64"; + preprocessAttachments(me, ke, (function(ee) { + if (ee) return se(ee); + (function startTransaction() { + var ee = openTransactionSafely(re, [ DOC_STORE, BY_SEQ_STORE, ATTACH_STORE, LOCAL_STORE, ATTACH_AND_SEQ_STORE, META_STORE ], "readwrite"); + if (ee.error) return se(ee.error); + (oe = ee.txn).onabort = idbError(se); + oe.ontimeout = idbError(se); + oe.oncomplete = complete; + le = oe.objectStore(DOC_STORE); + ue = oe.objectStore(BY_SEQ_STORE); + de = oe.objectStore(ATTACH_STORE); + fe = oe.objectStore(ATTACH_AND_SEQ_STORE); + (he = oe.objectStore(META_STORE)).get(META_STORE).onsuccess = function(_) { + ge = _.target.result; + updateDocCountIfReady(); + }; + (function verifyAttachments(_) { + var ee = []; + me.forEach((function(_) { + if (_.data && _.data._attachments) Object.keys(_.data._attachments).forEach((function(ne) { + var ie = _.data._attachments[ne]; + if (ie.stub) ee.push(ie.digest); + })); + })); + if (!ee.length) return _(); + var ne, ie = 0; + ee.forEach((function(re) { + (function verifyAttachment(_, ee) { + de.get(_).onsuccess = function(ne) { + if (!ne.target.result) { + var ie = createError(MISSING_STUB, "unknown stub attachment with digest " + _); + ie.status = 412; + ee(ie); + } else ee(); + }; + })(re, (function(re) { + if (re && !ne) ne = re; + (function checkDone() { + if (++ie === ee.length) _(ne); + })(); + })); + })); + })((function(ee) { + if (ee) { + Oe = true; + return se(ee); + } + (function fetchExistingDocs() { + if (me.length) for (var ee = 0, re = 0, se = me.length; re < se; re++) { + var ue = me[re]; + if (!ue._id || !isLocalId(ue._id)) le.get(ue.metadata.id).onsuccess = readMetadata; else checkDone(); + } + function checkDone() { + if (++ee === me.length) (function idbProcessDocs() { + processDocs(_.revs_limit, me, ie, Le, oe, we, writeDoc, ne, onAllDocsProcessed); + })(); + } + function readMetadata(_) { + var ee = decodeMetadata(_.target.result); + if (ee) Le.set(ee.id, ee); + checkDone(); + } + })(); + })); + })(); + })); + function onAllDocsProcessed() { + ve = true; + updateDocCountIfReady(); + } + function updateDocCountIfReady() { + if (ge && ve) { + ge.docCount += Ce; + he.put(ge); + } + } + function complete() { + if (!Oe) { + changesHandler$1.notify(ie._meta.name); + se(null, we); + } + } + function writeDoc(_, ee, ne, ie, re, se, oe, le) { + _.metadata.winningRev = ee; + _.metadata.deleted = ne; + var ue = _.data; + ue._id = _.metadata.id; + ue._rev = _.metadata.rev; + if (ie) ue._deleted = true; + if (ue._attachments && Object.keys(ue._attachments).length) return function writeAttachments(_, ee, ne, ie, re, se) { + var oe = _.data, le = 0, ue = Object.keys(oe._attachments); + function collectResults() { + if (le === ue.length) finishDoc(_, ee, ne, ie, re, se); + } + function attachmentSaved() { + le++; + collectResults(); + } + ue.forEach((function(ne) { + var ie = _.data._attachments[ne]; + if (!ie.stub) { + var re = ie.data; + delete ie.data; + ie.revpos = parseInt(ee, 10); + (function saveAttachment(_, ee, ne) { + de.count(_).onsuccess = function(ie) { + if (ie.target.result) return ne(); + var re = { + digest: _, + body: ee + }; + de.put(re).onsuccess = ne; + }; + })(ie.digest, re, attachmentSaved); + } else { + le++; + collectResults(); + } + })); + }(_, ee, ne, re, oe, le); + Ce += se; + updateDocCountIfReady(); + finishDoc(_, ee, ne, re, oe, le); + } + function finishDoc(_, ee, ne, re, se, de) { + var he = _.data, pe = _.metadata; + he._doc_id_rev = pe.id + "::" + pe.rev; + delete he._id; + delete he._rev; + function afterPutDoc(se) { + var ue = _.stemmedRevs || []; + if (re && ie.auto_compaction) ue = ue.concat(compactTree(_.metadata)); + if (ue && ue.length) compactRevs(ue, _.metadata.id, oe); + pe.seq = se.target.result; + var de = encodeMetadata(pe, ee, ne); + le.put(de).onsuccess = afterPutMetadata; + } + function afterPutMetadata() { + we[se] = { + ok: true, + id: pe.id, + rev: pe.rev + }; + Le.set(_.metadata.id, _.metadata); + (function insertAttachmentMappings(_, ee, ne) { + var ie = 0, re = Object.keys(_.data._attachments || {}); + if (!re.length) return ne(); + function checkDone() { + if (++ie === re.length) ne(); + } + function add(ne) { + var ie = _.data._attachments[ne].digest, re = fe.put({ + seq: ee, + digestSeq: ie + "::" + ee + }); + re.onsuccess = checkDone; + re.onerror = function(_) { + _.preventDefault(); + _.stopPropagation(); + checkDone(); + }; + } + for (var se = 0; se < re.length; se++) add(re[se]); + })(_, pe.seq, de); + } + var ge = ue.put(he); + ge.onsuccess = afterPutDoc; + ge.onerror = function afterPutDocError(_) { + _.preventDefault(); + _.stopPropagation(); + ue.index("_doc_id_rev").getKey(he._doc_id_rev).onsuccess = function(_) { + ue.put(he, _.target.result).onsuccess = afterPutDoc; + }; + }; + } +} + +function runBatchedCursor(_, ee, ne, ie, re) { + if (-1 === ie) ie = 1e3; + var se, oe, le; + function onGetAll(_) { + oe = _.target.result; + if (se) re(se, oe, le); + } + function onGetAllKeys(_) { + se = _.target.result; + if (oe) re(se, oe, le); + } + function onCursor(_) { + var ee = _.target.result; + if (!ee) return re(); + re([ ee.key ], [ ee.value ], ee); + } + if ("function" == typeof _.getAll && "function" == typeof _.getAllKeys && ie > 1 && !ne) { + le = { + continue: function continuePseudoCursor() { + if (!se.length) return re(); + var ne, le = se[se.length - 1]; + if (ee && ee.upper) try { + ne = IDBKeyRange.bound(le, ee.upper, true, ee.upperOpen); + } catch (_) { + if ("DataError" === _.name && 0 === _.code) return re(); + } else ne = IDBKeyRange.lowerBound(le, true); + ee = ne; + se = null; + oe = null; + _.getAll(ee, ie).onsuccess = onGetAll; + _.getAllKeys(ee, ie).onsuccess = onGetAllKeys; + } + }; + _.getAll(ee, ie).onsuccess = onGetAll; + _.getAllKeys(ee, ie).onsuccess = onGetAllKeys; + } else if (ne) _.openCursor(ee, "prev").onsuccess = onCursor; else _.openCursor(ee).onsuccess = onCursor; +} + +function getAll(_, ee, ne) { + if ("function" != typeof _.getAll) { + var ie = []; + _.openCursor(ee).onsuccess = function onCursor(_) { + var ee = _.target.result; + if (ee) { + ie.push(ee.value); + ee.continue(); + } else ne({ + target: { + result: ie + } + }); + }; + } else _.getAll(ee).onsuccess = ne; +} + +function allDocsKeys(_, ee, ne) { + var ie = new Array(_.length), re = 0; + _.forEach((function(se, oe) { + ee.get(se).onsuccess = function(ee) { + if (ee.target.result) ie[oe] = ee.target.result; else ie[oe] = { + key: se, + error: "not_found" + }; + if (++re === _.length) ne(_, ie, {}); + }; + })); +} + +function createKeyRange(_, ee, ne, ie, re) { + try { + if (_ && ee) if (re) return IDBKeyRange.bound(ee, _, !ne, false); else return IDBKeyRange.bound(_, ee, false, !ne); else if (_) if (re) return IDBKeyRange.upperBound(_); else return IDBKeyRange.lowerBound(_); else if (ee) if (re) return IDBKeyRange.lowerBound(ee, !ne); else return IDBKeyRange.upperBound(ee, !ne); else if (ie) return IDBKeyRange.only(ie); + } catch (_) { + return { + error: _ + }; + } + return null; +} + +function idbAllDocs(_, ee, ne) { + var ie, re, se = "startkey" in _ ? _.startkey : false, oe = "endkey" in _ ? _.endkey : false, le = "key" in _ ? _.key : false, ue = "keys" in _ ? _.keys : false, de = _.skip || 0, fe = "number" == typeof _.limit ? _.limit : -1, he = false !== _.inclusive_end; + if (!ue) if ((re = (ie = createKeyRange(se, oe, he, le, _.descending)) && ie.error) && !("DataError" === re.name && 0 === re.code)) return ne(createError(IDB_ERROR, re.name, re.message)); + var pe = [ DOC_STORE, BY_SEQ_STORE, META_STORE ]; + if (_.attachments) pe.push(ATTACH_STORE); + var ge = openTransactionSafely(ee, pe, "readonly"); + if (ge.error) return ne(ge.error); + var me = ge.txn; + me.oncomplete = function onTxnComplete() { + if (_.attachments) postProcessAttachments(Le, _.binary).then(onResultsReady); else onResultsReady(); + }; + me.onabort = idbError(ne); + var ye, Se, Ee = me.objectStore(DOC_STORE), ve = me.objectStore(BY_SEQ_STORE), Ce = me.objectStore(META_STORE), we = ve.index("_doc_id_rev"), Le = []; + Ce.get(META_STORE).onsuccess = function(_) { + ye = _.target.result.docCount; + }; + if (_.update_seq) ve.openKeyCursor(null, "prev").onsuccess = _ => { + var ee = _.target.result; + if (ee && ee.key) Se = ee.key; + }; + function allDocsInner(ee, ne) { + var ie = { + id: ne.id, + key: ne.id, + value: { + rev: ee + } + }; + if (ne.deleted) { + if (ue) { + Le.push(ie); + ie.value.deleted = true; + ie.doc = null; + } + } else if (de-- <= 0) { + Le.push(ie); + if (_.include_docs) (function fetchDocAsynchronously(ee, ne, ie) { + var re = ee.id + "::" + ie; + we.get(re).onsuccess = function onGetDoc(ie) { + ne.doc = decodeDoc(ie.target.result) || {}; + if (_.conflicts) { + var re = collectConflicts(ee); + if (re.length) ne.doc._conflicts = re; + } + fetchAttachmentsIfNecessary(ne.doc, _, me); + }; + })(ne, ie, ee); + } + } + function processBatch(_) { + for (var ee = 0, ne = _.length; ee < ne && Le.length !== fe; ee++) { + var ie = _[ee]; + if (!ie.error || !ue) { + var re = decodeMetadata(ie); + allDocsInner(re.winningRev, re); + } else Le.push(ie); + } + } + function onBatch(_, ee, ne) { + if (ne) { + processBatch(ee); + if (Le.length < fe) ne.continue(); + } + } + function onResultsReady() { + var ee = { + total_rows: ye, + offset: _.skip, + rows: Le + }; + if (_.update_seq && void 0 !== Se) ee.update_seq = Se; + ne(null, ee); + } + if (!re && 0 !== fe) { + if (ue) return allDocsKeys(ue, Ee, onBatch); + if (-1 === fe) return getAll(Ee, ie, (function onGetAll(ee) { + var ne = ee.target.result; + if (_.descending) ne = ne.reverse(); + processBatch(ne); + })); + runBatchedCursor(Ee, ie, _.descending, fe + de, onBatch); + } +} + +function countDocs(_, ee) { + _.objectStore(DOC_STORE).index("deletedOrLocal").count(IDBKeyRange.only("0")).onsuccess = function(_) { + ee(_.target.result); + }; +} + +var running = false, queue = []; + +function tryCode(_, ee, ne, ie) { + try { + _(ee, ne); + } catch (_) { + ie.emit("error", _); + } +} + +function applyNext() { + if (!running && queue.length) { + running = true; + queue.shift()(); + } +} + +function enqueueTask(_, ee, ne) { + queue.push((function runAction() { + _((function runCallback(_, ie) { + tryCode(ee, _, ie, ne); + running = false; + nextTick((function runNext() { + applyNext(ne); + })); + })); + })); + applyNext(); +} + +function changes(_, ee, ne, ie) { + if ((_ = clone(_)).continuous) { + var re = ne + ":" + uuid(); + changesHandler$1.addListener(ne, re, ee, _); + changesHandler$1.notify(ne); + return { + cancel: function() { + changesHandler$1.removeListener(ne, re); + } + }; + } + var se = _.doc_ids && new Set(_.doc_ids); + _.since = _.since || 0; + var oe = _.since, le = "limit" in _ ? _.limit : -1; + if (0 === le) le = 1; + var ue, de, fe, he, pe = [], ge = 0, me = filterChange(_), ye = new Map; + function onGetMetadata(_, ee, ne, ie) { + if (ne.seq !== ee) return ie(); + if (ne.winningRev === _._rev) return ie(ne, _); + var re = _._id + "::" + ne.winningRev; + he.get(re).onsuccess = function(_) { + ie(ne, decodeDoc(_.target.result)); + }; + } + function finish() { + _.complete(null, { + results: pe, + last_seq: oe + }); + } + var Se = [ DOC_STORE, BY_SEQ_STORE ]; + if (_.attachments) Se.push(ATTACH_STORE); + var Ee = openTransactionSafely(ie, Se, "readonly"); + if (Ee.error) return _.complete(Ee.error); + (ue = Ee.txn).onabort = idbError(_.complete); + ue.oncomplete = function onTxnComplete() { + if (!_.continuous && _.attachments) postProcessAttachments(pe).then(finish); else finish(); + }; + de = ue.objectStore(BY_SEQ_STORE); + fe = ue.objectStore(DOC_STORE); + he = de.index("_doc_id_rev"); + runBatchedCursor(de, _.since && !_.descending ? IDBKeyRange.lowerBound(_.since, true) : null, _.descending, le, (function onBatch(ee, ne, ie) { + if (ie && ee.length) { + var re = new Array(ee.length), de = new Array(ee.length), he = 0; + ne.forEach((function(ne, oe) { + (function fetchWinningDocAndMetadata(_, ee, ne) { + if (se && !se.has(_._id)) return ne(); + var ie = ye.get(_._id); + if (ie) return onGetMetadata(_, ee, ie, ne); + fe.get(_._id).onsuccess = function(re) { + ie = decodeMetadata(re.target.result); + ye.set(_._id, ie); + onGetMetadata(_, ee, ie, ne); + }; + })(decodeDoc(ne), ee[oe], (function(ne, se) { + de[oe] = ne; + re[oe] = se; + if (++he === ee.length) (function onBatchDone() { + for (var ee = [], ne = 0, se = re.length; ne < se && ge !== le; ne++) { + var oe = re[ne]; + if (oe) { + var ue = de[ne]; + ee.push(processMetadataAndWinningDoc(ue, oe)); + } + } + Promise.all(ee).then((function(ee) { + for (var ne = 0, ie = ee.length; ne < ie; ne++) if (ee[ne]) _.onChange(ee[ne]); + })).catch(_.complete); + if (ge !== le) ie.continue(); + })(); + })); + })); + } + function processMetadataAndWinningDoc(ee, ne) { + var ie = _.processChange(ne, ee, _); + oe = ie.seq = ee.seq; + var re = me(ie); + if ("object" == typeof re) return Promise.reject(re); + if (!re) return Promise.resolve(); + ge++; + if (_.return_docs) pe.push(ie); + if (_.attachments && _.include_docs) return new Promise((function(ee) { + fetchAttachmentsIfNecessary(ne, _, ue, (function() { + postProcessAttachments([ ie ], _.binary).then((function() { + ee(ie); + })); + })); + })); else return Promise.resolve(ie); + } + })); +} + +var blobSupportPromise, cachedDBs = new Map, openReqList = new Map; + +function IdbPouch(_, ee) { + var ne = this; + enqueueTask((function(ee) { + init(ne, _, ee); + }), ee, ne.constructor); +} + +function init(_, ee, ne) { + var ie = ee.name, re = null, se = null; + _._meta = null; + function enrichCallbackError(_) { + return function(ee, ne) { + if (ee && ee instanceof Error && !ee.reason) if (se) ee.reason = se; + _(ee, ne); + }; + } + function addDeletedOrLocalIndex(_, ee) { + var ne = _.objectStore(DOC_STORE); + ne.createIndex("deletedOrLocal", "deletedOrLocal", { + unique: false + }); + ne.openCursor().onsuccess = function(_) { + var ie = _.target.result; + if (ie) { + var re = ie.value, se = isDeleted(re); + re.deletedOrLocal = se ? "1" : "0"; + ne.put(re); + ie.continue(); + } else ee(); + }; + } + function migrateLocalStore(_, ee) { + var ne = _.objectStore(LOCAL_STORE), ie = _.objectStore(DOC_STORE), re = _.objectStore(BY_SEQ_STORE); + ie.openCursor().onsuccess = function(_) { + var se = _.target.result; + if (se) { + var oe = se.value, le = oe.id, ue = isLocalId(le), de = winningRev(oe); + if (ue) { + var fe = le + "::" + de, he = le + "::", pe = le + "::~", ge = re.index("_doc_id_rev"), me = IDBKeyRange.bound(he, pe, false, false), ye = ge.openCursor(me); + ye.onsuccess = function(_) { + if (!(ye = _.target.result)) { + ie.delete(se.primaryKey); + se.continue(); + } else { + var ee = ye.value; + if (ee._doc_id_rev === fe) ne.put(ee); + re.delete(ye.primaryKey); + ye.continue(); + } + }; + } else se.continue(); + } else if (ee) ee(); + }; + } + function migrateAttsAndSeqs(_, ee) { + var ne = _.objectStore(BY_SEQ_STORE), ie = _.objectStore(ATTACH_STORE), re = _.objectStore(ATTACH_AND_SEQ_STORE); + ie.count().onsuccess = function(_) { + if (!_.target.result) return ee(); + ne.openCursor().onsuccess = function(_) { + var ne = _.target.result; + if (!ne) return ee(); + for (var ie = ne.value, se = ne.primaryKey, oe = Object.keys(ie._attachments || {}), le = {}, ue = 0; ue < oe.length; ue++) le[ie._attachments[oe[ue]].digest] = true; + var de = Object.keys(le); + for (ue = 0; ue < de.length; ue++) { + var fe = de[ue]; + re.put({ + seq: se, + digestSeq: fe + "::" + se + }); + } + ne.continue(); + }; + }; + } + function migrateMetadata(_) { + var ee = _.objectStore(BY_SEQ_STORE), ne = _.objectStore(DOC_STORE); + ne.openCursor().onsuccess = function(_) { + var ie = _.target.result; + if (ie) { + var re = function decodeMetadataCompat(_) { + if (!_.data) { + _.deleted = "1" === _.deletedOrLocal; + return _; + } + return decodeMetadata(_); + }(ie.value); + re.winningRev = re.winningRev || winningRev(re); + if (re.seq) return onGetMetadataSeq(); + (function fetchMetadataSeq() { + var _ = re.id + "::", ne = re.id + "::￿", ie = ee.index("_doc_id_rev").openCursor(IDBKeyRange.bound(_, ne)), se = 0; + ie.onsuccess = function(_) { + var ee = _.target.result; + if (!ee) { + re.seq = se; + return onGetMetadataSeq(); + } + var ne = ee.primaryKey; + if (ne > se) se = ne; + ee.continue(); + }; + })(); + } + function onGetMetadataSeq() { + var _ = encodeMetadata(re, re.winningRev, re.deleted); + ne.put(_).onsuccess = function() { + ie.continue(); + }; + } + }; + } + _._remote = false; + _.type = function() { + return "idb"; + }; + _._id = toPromise((function(ee) { + ee(null, _._meta.instanceId); + })); + _._bulkDocs = function idb_bulkDocs(ne, ie, se) { + idbBulkDocs(ee, ne, ie, _, re, enrichCallbackError(se)); + }; + _._get = function idb_get(_, ee, ne) { + var ie, se, oe, le = ee.ctx; + if (!le) { + var ue = openTransactionSafely(re, [ DOC_STORE, BY_SEQ_STORE, ATTACH_STORE ], "readonly"); + if (ue.error) return ne(ue.error); + le = ue.txn; + } + function finish() { + ne(oe, { + doc: ie, + metadata: se, + ctx: le + }); + } + le.objectStore(DOC_STORE).get(_).onsuccess = function(_) { + if (!(se = decodeMetadata(_.target.result))) { + oe = createError(MISSING_DOC, "missing"); + return finish(); + } + var ne; + if (!ee.rev) { + ne = se.winningRev; + if (isDeleted(se)) { + oe = createError(MISSING_DOC, "deleted"); + return finish(); + } + } else ne = ee.latest ? latest(ee.rev, se) : ee.rev; + var re = le.objectStore(BY_SEQ_STORE), ue = se.id + "::" + ne; + re.index("_doc_id_rev").get(ue).onsuccess = function(_) { + if (ie = _.target.result) ie = decodeDoc(ie); + if (!ie) { + oe = createError(MISSING_DOC, "missing"); + return finish(); + } + finish(); + }; + }; + }; + _._getAttachment = function(_, ee, ne, ie, se) { + var oe; + if (ie.ctx) oe = ie.ctx; else { + var le = openTransactionSafely(re, [ DOC_STORE, BY_SEQ_STORE, ATTACH_STORE ], "readonly"); + if (le.error) return se(le.error); + oe = le.txn; + } + var ue = ne.digest, de = ne.content_type; + oe.objectStore(ATTACH_STORE).get(ue).onsuccess = function(_) { + readBlobData(_.target.result.body, de, ie.binary, (function(_) { + se(null, _); + })); + }; + }; + _._info = function idb_info(ee) { + var ne, ie, se = openTransactionSafely(re, [ META_STORE, BY_SEQ_STORE ], "readonly"); + if (se.error) return ee(se.error); + var oe = se.txn; + oe.objectStore(META_STORE).get(META_STORE).onsuccess = function(_) { + ie = _.target.result.docCount; + }; + oe.objectStore(BY_SEQ_STORE).openKeyCursor(null, "prev").onsuccess = function(_) { + var ee = _.target.result; + ne = ee ? ee.key : 0; + }; + oe.oncomplete = function() { + ee(null, { + doc_count: ie, + update_seq: ne, + idb_attachment_format: _._meta.blobSupport ? "binary" : "base64" + }); + }; + }; + _._allDocs = function idb_allDocs(_, ee) { + idbAllDocs(_, re, enrichCallbackError(ee)); + }; + _._changes = function idbChanges2(ee) { + return changes(ee, _, ie, re); + }; + _._close = function(_) { + re.close(); + cachedDBs.delete(ie); + _(); + }; + _._getRevisionTree = function(_, ee) { + var ne = openTransactionSafely(re, [ DOC_STORE ], "readonly"); + if (ne.error) return ee(ne.error); + ne.txn.objectStore(DOC_STORE).get(_).onsuccess = function(_) { + var ne = decodeMetadata(_.target.result); + if (!ne) ee(createError(MISSING_DOC)); else ee(null, ne.rev_tree); + }; + }; + _._doCompaction = function(_, ee, ne) { + var ie = openTransactionSafely(re, [ DOC_STORE, BY_SEQ_STORE, ATTACH_STORE, ATTACH_AND_SEQ_STORE ], "readwrite"); + if (ie.error) return ne(ie.error); + var se = ie.txn; + se.objectStore(DOC_STORE).get(_).onsuccess = function(ne) { + var ie = decodeMetadata(ne.target.result); + traverseRevTree(ie.rev_tree, (function(_, ne, ie, re, se) { + var oe = ne + "-" + ie; + if (-1 !== ee.indexOf(oe)) se.status = "missing"; + })); + compactRevs(ee, _, se); + var re = ie.winningRev, oe = ie.deleted; + se.objectStore(DOC_STORE).put(encodeMetadata(ie, re, oe)); + }; + se.onabort = idbError(ne); + se.oncomplete = function() { + ne(); + }; + }; + _._getLocal = function(_, ee) { + var ne = openTransactionSafely(re, [ LOCAL_STORE ], "readonly"); + if (ne.error) return ee(ne.error); + var ie = ne.txn.objectStore(LOCAL_STORE).get(_); + ie.onerror = idbError(ee); + ie.onsuccess = function(_) { + var ne = _.target.result; + if (!ne) ee(createError(MISSING_DOC)); else { + delete ne["_doc_id_rev"]; + ee(null, ne); + } + }; + }; + _._putLocal = function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + delete _._revisions; + var ie = _._rev, se = _._id; + if (!ie) _._rev = "0-1"; else _._rev = "0-" + (parseInt(ie.split("-")[1], 10) + 1); + var oe, le = ee.ctx; + if (!le) { + var ue = openTransactionSafely(re, [ LOCAL_STORE ], "readwrite"); + if (ue.error) return ne(ue.error); + (le = ue.txn).onerror = idbError(ne); + le.oncomplete = function() { + if (oe) ne(null, oe); + }; + } + var de, fe = le.objectStore(LOCAL_STORE); + if (ie) (de = fe.get(se)).onsuccess = function(re) { + var se = re.target.result; + if (!se || se._rev !== ie) ne(createError(REV_CONFLICT)); else fe.put(_).onsuccess = function() { + oe = { + ok: true, + id: _._id, + rev: _._rev + }; + if (ee.ctx) ne(null, oe); + }; + }; else { + (de = fe.add(_)).onerror = function(_) { + ne(createError(REV_CONFLICT)); + _.preventDefault(); + _.stopPropagation(); + }; + de.onsuccess = function() { + oe = { + ok: true, + id: _._id, + rev: _._rev + }; + if (ee.ctx) ne(null, oe); + }; + } + }; + _._removeLocal = function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + var ie, se = ee.ctx; + if (!se) { + var oe = openTransactionSafely(re, [ LOCAL_STORE ], "readwrite"); + if (oe.error) return ne(oe.error); + (se = oe.txn).oncomplete = function() { + if (ie) ne(null, ie); + }; + } + var le = _._id, ue = se.objectStore(LOCAL_STORE), de = ue.get(le); + de.onerror = idbError(ne); + de.onsuccess = function(re) { + var se = re.target.result; + if (!se || se._rev !== _._rev) ne(createError(MISSING_DOC)); else { + ue.delete(le); + ie = { + ok: true, + id: le, + rev: "0-0" + }; + if (ee.ctx) ne(null, ie); + } + }; + }; + _._destroy = function(_, ee) { + changesHandler$1.removeAllListeners(ie); + var ne = openReqList.get(ie); + if (ne && ne.result) { + ne.result.close(); + cachedDBs.delete(ie); + } + var re = indexedDB.deleteDatabase(ie); + re.onsuccess = function() { + openReqList.delete(ie); + if (hasLocalStorage() && ie in localStorage) delete localStorage[ie]; + ee(null, { + ok: true + }); + }; + re.onerror = idbError(ee); + }; + var oe = cachedDBs.get(ie); + if (oe) { + re = oe.idb; + _._meta = oe.global; + return nextTick((function() { + ne(null, _); + })); + } + var le = indexedDB.open(ie, ADAPTER_VERSION); + openReqList.set(ie, le); + le.onupgradeneeded = function(_) { + var ee = _.target.result; + if (_.oldVersion < 1) return function createSchema(_) { + var ee = _.createObjectStore(DOC_STORE, { + keyPath: "id" + }); + _.createObjectStore(BY_SEQ_STORE, { + autoIncrement: true + }).createIndex("_doc_id_rev", "_doc_id_rev", { + unique: true + }); + _.createObjectStore(ATTACH_STORE, { + keyPath: "digest" + }); + _.createObjectStore(META_STORE, { + keyPath: "id", + autoIncrement: false + }); + _.createObjectStore(DETECT_BLOB_SUPPORT_STORE); + ee.createIndex("deletedOrLocal", "deletedOrLocal", { + unique: false + }); + _.createObjectStore(LOCAL_STORE, { + keyPath: "_id" + }); + var ne = _.createObjectStore(ATTACH_AND_SEQ_STORE, { + autoIncrement: true + }); + ne.createIndex("seq", "seq"); + ne.createIndex("digestSeq", "digestSeq", { + unique: true + }); + }(ee); + var ne = _.currentTarget.transaction; + if (_.oldVersion < 3) (function createLocalStoreSchema(_) { + _.createObjectStore(LOCAL_STORE, { + keyPath: "_id" + }).createIndex("_doc_id_rev", "_doc_id_rev", { + unique: true + }); + })(ee); + if (_.oldVersion < 4) (function addAttachAndSeqStore(_) { + var ee = _.createObjectStore(ATTACH_AND_SEQ_STORE, { + autoIncrement: true + }); + ee.createIndex("seq", "seq"); + ee.createIndex("digestSeq", "digestSeq", { + unique: true + }); + })(ee); + var ie = [ addDeletedOrLocalIndex, migrateLocalStore, migrateAttsAndSeqs, migrateMetadata ], re = _.oldVersion; + (function next() { + var _ = ie[re - 1]; + re++; + if (_) _(ne, next); + })(); + }; + le.onsuccess = function(ee) { + (re = ee.target.result).onversionchange = function() { + re.close(); + cachedDBs.delete(ie); + }; + re.onabort = function(_) { + guardedConsole("error", "Database has a global failure", _.target.error); + se = _.target.error; + re.close(); + cachedDBs.delete(ie); + }; + var oe, le, ue, de, fe = re.transaction([ META_STORE, DETECT_BLOB_SUPPORT_STORE, DOC_STORE ], "readwrite"), he = false; + function completeSetup() { + if ("undefined" != typeof ue && he) { + _._meta = { + name: ie, + instanceId: de, + blobSupport: ue + }; + cachedDBs.set(ie, { + idb: re, + global: _._meta + }); + ne(null, _); + } + } + function storeMetaDocIfReady() { + if ("undefined" != typeof le && "undefined" != typeof oe) { + var _ = ie + "_id"; + if (_ in oe) de = oe[_]; else oe[_] = de = uuid(); + oe.docCount = le; + fe.objectStore(META_STORE).put(oe); + } + } + fe.objectStore(META_STORE).get(META_STORE).onsuccess = function(_) { + oe = _.target.result || { + id: META_STORE + }; + storeMetaDocIfReady(); + }; + countDocs(fe, (function(_) { + le = _; + storeMetaDocIfReady(); + })); + if (!blobSupportPromise) blobSupportPromise = checkBlobSupport(fe, DETECT_BLOB_SUPPORT_STORE, "key"); + blobSupportPromise.then((function(_) { + ue = _; + completeSetup(); + })); + fe.oncomplete = function() { + he = true; + completeSetup(); + }; + fe.onabort = idbError(ne); + }; + le.onerror = function(_) { + var ee = _.target.error && _.target.error.message; + if (!ee) ee = "Failed to open indexedDB, are you in private browsing mode?"; else if (-1 !== ee.indexOf("stored database is a higher version")) ee = new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter'); + guardedConsole("error", ee); + ne(createError(IDB_ERROR, ee)); + }; +} + +IdbPouch.valid = function() { + try { + return "undefined" != typeof indexedDB && "undefined" != typeof IDBKeyRange; + } catch (_) { + return false; + } +}; + +function index(_) { + _.adapter("idb", IdbPouch, true); +} + +var index_es_default2 = index, import_spark_md53 = __toESM(require_spark_md5()), setImmediateShim3 = self.setImmediate || self.setTimeout, MD5_CHUNK_SIZE2 = 32768; + +function rawToBase642(_) { + return thisBtoa(_); +} + +function appendBlob2(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.size) ee = ee.slice(ne, ie); + readAsArrayBuffer(ee, (function(ee) { + _.append(ee); + re(); + })); +} + +function appendString2(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.length) ee = ee.substring(ne, ie); + _.appendBinary(ee); + re(); +} + +function binaryMd52(_, ee) { + var ne = "string" == typeof _, ie = ne ? _.length : _.size, re = Math.min(MD5_CHUNK_SIZE2, ie), se = Math.ceil(ie / re), oe = 0, le = ne ? new import_spark_md53.default : new import_spark_md53.default.ArrayBuffer, ue = ne ? appendString2 : appendBlob2; + function next() { + setImmediateShim3(loadNextChunk); + } + function done() { + var _ = rawToBase642(le.end(true)); + ee(_); + le.destroy(); + } + function loadNextChunk() { + var ee = oe * re, ne = ee + re; + if (++oe < se) ue(le, _, ee, ne, next); else ue(le, _, ee, ne, done); + } + loadNextChunk(); +} + +var IDB_NULL = Number.MIN_SAFE_INTEGER, IDB_FALSE = Number.MIN_SAFE_INTEGER + 1, IDB_TRUE = Number.MIN_SAFE_INTEGER + 2, TEST_KEY_INVALID = /^[^a-zA-Z$]|[^a-zA-Z0-9$]+/, TEST_PATH_INVALID = /\\.|(^|\.)[^a-zA-Z$]|[^a-zA-Z0-9$.]+/; + +function needsSanitise(_, ee) { + if (ee) return TEST_PATH_INVALID.test(_); else return TEST_KEY_INVALID.test(_); +} + +var KEY_INVALID = new RegExp(TEST_KEY_INVALID.source, "g"), PATH_INVALID = new RegExp(TEST_PATH_INVALID.source, "g"), SLASH = "\\".charCodeAt(0), IS_DOT = ".".charCodeAt(0); + +function sanitise(_, ee) { + const correctCharacters = function(_) { + let ne = ""; + for (let ie = 0; ie < _.length; ie++) { + const re = _.charCodeAt(ie); + if (re === IS_DOT && ee && 0 === ie) ne += "."; else if (re === SLASH && ee) continue; else ne += "_c" + re + "_"; + } + return ne; + }; + if (ee) return _.replace(PATH_INVALID, correctCharacters); else return _.replace(KEY_INVALID, correctCharacters); +} + +function needsRewrite(_) { + for (const ee of Object.keys(_)) if (needsSanitise(ee)) return true; else if (null === _[ee] || "boolean" == typeof _[ee]) return true; else if ("object" == typeof _[ee]) return needsRewrite(_[ee]); +} + +function rewrite(_) { + if (!needsRewrite(_)) return false; + const ee = Array.isArray(_), ne = ee ? [] : {}; + Object.keys(_).forEach((function(ie) { + const re = ee ? ie : sanitise(ie); + if (null === _[ie]) ne[re] = IDB_NULL; else if ("boolean" == typeof _[ie]) ne[re] = _[ie] ? IDB_TRUE : IDB_FALSE; else if ("object" == typeof _[ie]) ne[re] = rewrite(_[ie]); else ne[re] = _[ie]; + })); + return ne; +} + +var DOC_STORE2 = "docs", META_LOCAL_STORE = "meta"; + +function idbError2(_) { + return function(ee) { + let ne = "unknown_error"; + if (ee.target && ee.target.error) ne = ee.target.error.name || ee.target.error.message; + _(createError(IDB_ERROR, ne, ee.type)); + }; +} + +function processAttachment(_, ee, ne, ie, re) { + delete ne._attachments[_].stub; + if ("base64" === re) { + if (ie) { + const ie = ee.attachments[ne._attachments[_].digest]; + ne._attachments[_].data = b64ToBluffer(ie.data, ie.content_type); + } else ne._attachments[_].data = ee.attachments[ne._attachments[_].digest].data; + delete ne._attachments[_].length; + return Promise.resolve(); + } + if (ie) { + ne._attachments[_].data = ee.attachments[ne._attachments[_].digest].data; + return Promise.resolve(); + } + return new Promise((function(ie) { + readAsBinaryString(ee.attachments[ne._attachments[_].digest].data, (function(ee) { + ne._attachments[_].data = thisBtoa(ee); + delete ne._attachments[_].length; + ie(); + })); + })); +} + +function rawIndexFields(_, ee) { + return (_.views[ee].options && _.views[ee].options.def && _.views[ee].options.def.fields || []).map((function(_) { + if ("string" == typeof _) return _; else return Object.keys(_)[0]; + })); +} + +function isPartialFilterView(_, ee) { + return ee in _.views && _.views[ee].options && _.views[ee].options.def && _.views[ee].options.def.partial_filter_selector; +} + +function naturalIndexName(_) { + return "_find_idx/" + _.join("/"); +} + +function correctIndexFields(_) { + return [ "deleted" ].concat(_.map((function(_) { + if ([ "_id", "_rev", "_deleted", "_attachments" ].includes(_)) return _.substr(1); else return "data." + sanitise(_, true); + }))); +} + +var POUCHDB_IDB_VERSION = 2, versionMultiplier = Math.pow(10, 13); + +function createIdbVersion() { + return versionMultiplier * POUCHDB_IDB_VERSION + (new Date).getTime(); +} + +function getPouchDbVersion(_) { + return Math.floor(_ / versionMultiplier); +} + +function maintainNativeIndexes(_, ee) { + const ne = _.transaction.objectStore(DOC_STORE2); + ne.getAll(IDBKeyRange.bound("_design/", "_design/￿")).onsuccess = function(_) { + const ie = _.target.result, re = Array.from(ne.indexNames), se = ie.filter((function(_) { + return 0 === _.deleted && _.revs[_.rev].data.views; + })).map((function(_) { + return _.revs[_.rev].data; + })).reduce((function(_, ee) { + return Object.keys(ee.views).reduce((function(_, ne) { + const ie = rawIndexFields(ee, ne); + if (ie && ie.length > 0) _[naturalIndexName(ie)] = correctIndexFields(ie); + return _; + }), _); + }), {}), oe = Object.keys(se), le = [ "seq", "deleted,id" ]; + re.forEach((function(_) { + if (-1 === le.indexOf(_) && -1 === oe.indexOf(_)) ne.deleteIndex(_); + })); + const ue = oe.filter((function(_) { + return -1 === re.indexOf(_); + })); + try { + ue.forEach((function(_) { + ne.createIndex(_, se[_]); + })); + } catch (_) { + ee(_); + } + }; +} + +function upgradePouchDbSchema(_, ee, ne, ie) { + if (ie < 1) { + ee.createObjectStore(DOC_STORE2, { + keyPath: "id" + }).createIndex("seq", "seq", { + unique: true + }); + ee.createObjectStore(META_LOCAL_STORE, { + keyPath: "id" + }); + } + if (ie < 2) { + const ee = ne.objectStore(DOC_STORE2); + ee.createIndex("deleted,id", [ "deleted", "id" ], { + unique: true + }); + if (_.includes("-mrview-")) ee.deleteIndex("seq"); + } +} + +function openDatabase(_, ee, ne, ie, re) { + const se = ne.versionChangedWhileOpen ? indexedDB.open(ne.name) : indexedDB.open(ne.name, createIdbVersion()); + se.onupgradeneeded = function(_) { + if (_.oldVersion > 0 && _.oldVersion < versionMultiplier) throw new Error('Incorrect adapter: you should specify the "idb" adapter to open this DB'); else if (0 === _.oldVersion && _.newVersion < versionMultiplier) { + indexedDB.deleteDatabase(ne.name); + throw new Error("Database was deleted while open"); + } + const ee = _.target.transaction, ie = _.target.result, oe = getPouchDbVersion(_.oldVersion); + upgradePouchDbSchema(ne.name, ie, ee, oe); + maintainNativeIndexes(se, re); + if (oe < 2) { + const _ = se.transaction.objectStore(DOC_STORE2), ee = se.transaction.objectStore(META_LOCAL_STORE); + _.openCursor().onsuccess = _ => { + const ne = _.target.result; + if (!ne) return; + const ie = ne.value; + if (!isLocalId(ie.id)) return ne.continue(); + ee.put(ie).onsuccess = () => { + ne.delete(ie).onsuccess = () => { + ne.continue(); + }; + }; + }; + } + }; + se.onblocked = function(_) { + console.error("onblocked, this should never happen", _); + }; + se.onsuccess = function(re) { + const se = re.target.result; + se.onabort = function(ee) { + console.error("Database has a global failure", ee.target.error); + delete _[ne.name]; + se.close(); + }; + se.onversionchange = function() { + console.log("Database was made stale, closing handle"); + _[ne.name].versionChangedWhileOpen = true; + se.close(); + }; + se.onclose = function() { + console.log("Database was made stale, closing handle"); + if (ne.name in _) _[ne.name].versionChangedWhileOpen = true; + }; + let oe = { + id: META_LOCAL_STORE + }; + const le = se.transaction([ META_LOCAL_STORE ], "readwrite"); + le.oncomplete = function() { + ie({ + idb: se, + metadata: oe + }); + }; + const ue = le.objectStore(META_LOCAL_STORE); + ue.get(META_LOCAL_STORE).onsuccess = function(_) { + oe = _.target.result || oe; + let ne = false; + if (!("doc_count" in oe)) { + ne = true; + oe.doc_count = 0; + } + if (!("seq" in oe)) { + ne = true; + oe.seq = 0; + } + if (!("db_uuid" in oe)) { + ne = true; + oe.db_uuid = uuid(); + } + if (!("idb_attachment_format" in oe)) checkBlobSupport(le, META_LOCAL_STORE, (_ => ({ + id: "blob-support", + blob: _ + }))).then((_ => { + ee.blobSupport = oe.idb_attachment_format = _ ? "binary" : "base64"; + ue.put(oe); + })); else if (ne) { + ee.blobSupport = oe.idb_attachment_format; + ue.put(oe); + } + }; + }; + se.onerror = function(_) { + re(_.target.error); + }; +} + +function setup(_, ee, ne) { + if (!_[ne.name] || _[ne.name].versionChangedWhileOpen) { + ne.versionChangedWhileOpen = _[ne.name] && _[ne.name].versionChangedWhileOpen; + _[ne.name] = new Promise((function(ie, re) { + openDatabase(_, ee, ne, ie, re); + })); + } + return _[ne.name]; +} + +function info(_, ee) { + ee(null, { + doc_count: _.doc_count, + update_seq: _.seq + }); +} + +function get(_, ee, ne, ie) { + if (_.error) return ie(_.error); + _.txn.objectStore(DOC_STORE2).get(ee).onsuccess = function(ee) { + const re = ee.target.result; + let se; + if (!ne.rev) se = re && re.rev; else se = ne.latest ? latest(ne.rev, re) : ne.rev; + if (!re || re.deleted && !ne.rev || !(se in re.revs)) { + ie(createError(MISSING_DOC, "missing")); + return; + } + const oe = re.revs[se].data; + oe._id = re.id; + oe._rev = se; + ie(null, { + doc: oe, + metadata: re, + ctx: _ + }); + }; +} + +var BINARY_ATTACHMENTS = false; + +function getLocal(_, ee, ne, ie) { + if (_.error) return ie(_.error); + _.txn.objectStore(META_LOCAL_STORE).get(ee).onsuccess = function(_) { + const ee = _.target.result; + if (!ee) { + ie(createError(MISSING_DOC, "missing")); + return; + } + const re = ee.revs[ee.rev].data; + re._id = ee.id; + re._rev = ee.rev; + if (re._attachments) { + const _ = []; + for (const ie in re._attachments) _.push(processAttachment(ie, ee, re, BINARY_ATTACHMENTS, ne.blobSupport)); + Promise.all(_).then((() => ie(null, re))).catch(ie); + } else ie(null, re); + }; +} + +function getAttachment(_, ee, ne, ie, re) { + if (isLocalId(_)) { + re(createError(MISSING_DOC, "missing")); + return; + } + const se = ie.metadata.attachments[ne.digest].data; + if ("string" != typeof se) if (ie.binary) return re(null, se); else readAsBinaryString(se, (function(_) { + re(null, thisBtoa(_)); + })); else if (ie.binary) re(null, b64ToBluffer(se, ne.content_type)); else re(null, se); +} + +function bulkDocs(_, ee, ne, ie, re, se, oe) { + let le, ue; + const de = [], fe = []; + let he; + const pe = re.revs_limit || 1e3, ge = -1 === re.name.indexOf("-mrview-"), me = re.auto_compaction; + function docsRevsLimit(_) { + return isLocalId(_.id) ? 1 : pe; + } + function revHasAttachment(_, ee, ne) { + return _.revs[ee] && _.revs[ee].data._attachments && Object.values(_.revs[ee].data._attachments).find((function(_) { + return _.digest === ne; + })); + } + function convertDocFormat(_) { + const ee = { + id: _.metadata.id, + rev: _.metadata.rev, + rev_tree: _.metadata.rev_tree, + revs: _.metadata.revs || {} + }; + ee.revs[ee.rev] = { + data: _.data, + deleted: _.metadata.deleted + }; + return ee; + } + function updateSeq(_) { + if (_ === he) le.objectStore(META_LOCAL_STORE).put(ie); + } + for (let _ = 0, ie = ee.docs.length; _ < ie; _++) { + let ie; + try { + ie = parseDoc(ee.docs[_], ne.new_edits, re); + } catch (_) { + ie = _; + } + if (ie.error) return oe(ie); + fe.push(convertDocFormat(ie)); + } + (function preProcessAttachments() { + const _ = fe.map((function(_) { + const ee = _.revs[_.rev].data; + if (!ee._attachments) return Promise.resolve(ee); + const ne = Object.keys(ee._attachments).map((function(_) { + ee._attachments[_].name = _; + return function preProcessAttachment(_) { + if (_.stub) return Promise.resolve(_); + let ee; + if ("string" == typeof _.data) { + try { + ee = thisAtob(_.data); + } catch (_) { + return Promise.reject(createError(BAD_ARG, "Attachment is not a valid base64 string")); + } + if ("binary" === ie.idb_attachment_format) _.data = binStringToBluffer(ee, _.content_type); + } else { + ee = _.data; + if ("base64" === ie.idb_attachment_format) return new Promise((ne => { + blobToBase64(_.data, (function(ie) { + _.data = ie; + binaryMd52(ee, (function(ie) { + _.digest = "md5-" + ie; + _.length = ee.size || ee.length || 0; + ne(_); + })); + })); + })); + } + return new Promise((function(ne) { + binaryMd52(ee, (function(ie) { + _.digest = "md5-" + ie; + _.length = ee.size || ee.length || 0; + ne(_); + })); + })); + }(ee._attachments[_]); + })); + return Promise.all(ne).then((function(_) { + const ne = {}; + _.forEach((function(_) { + ne[_.name] = _; + delete _.name; + })); + ee._attachments = ne; + return ee; + })); + })); + return Promise.all(_); + })().then((function() { + _._openTransactionSafely([ DOC_STORE2, META_LOCAL_STORE ], "readwrite", (function(_, ee) { + if (_) return oe(_); + le = ee; + le.onabort = function() { + oe(ue || createError(UNKNOWN_ERROR, "transaction was aborted")); + }; + le.ontimeout = idbError2(oe); + le.oncomplete = function() { + se.notify(re.name); + oe(null, de); + }; + (function fetchExistingDocs(_, ee) { + let se = 0; + const oe = {}; + function readDone(le) { + if (le.target.result) oe[le.target.result.id] = le.target.result; + if (++se === ee.length) (function processDocs2(_, ee, se) { + ee.forEach((function(ee, oe) { + let le; + if ("was_delete" in ne && !Object.prototype.hasOwnProperty.call(se, ee.id)) le = createError(MISSING_DOC, "deleted"); else if (ne.new_edits && !Object.prototype.hasOwnProperty.call(se, ee.id) && function rootIsMissing2(_) { + return "missing" === _.rev_tree[0].ids[1].status; + }(ee)) le = createError(REV_CONFLICT); else if (Object.prototype.hasOwnProperty.call(se, ee.id)) { + le = function update2(_, ee, ie) { + if (ee.rev in ie.revs && !ne.new_edits) return false; + const se = /^1-/.test(ee.rev); + if (ie.deleted && !ee.deleted && ne.new_edits && se) { + const _ = ee.revs[ee.rev].data; + _._rev = ie.rev; + _._id = ie.id; + ee = convertDocFormat(parseDoc(_, ne.new_edits, re)); + } + const oe = merge(ie.rev_tree, ee.rev_tree[0], docsRevsLimit(ee)); + ee.stemmedRevs = oe.stemmedRevs; + ee.rev_tree = oe.tree; + const le = ie.revs; + le[ee.rev] = ee.revs[ee.rev]; + ee.revs = le; + ee.attachments = ie.attachments; + if (ne.new_edits && (ie.deleted && ee.deleted || !ie.deleted && "new_leaf" !== oe.conflicts || ie.deleted && !ee.deleted && "new_branch" === oe.conflicts || ie.rev === ee.rev)) return createError(REV_CONFLICT); + ee.wasDeleted = ie.deleted; + return ee; + }(0, ee, se[ee.id]); + if (false == le) return; + } else { + const _ = merge([], ee.rev_tree[0], docsRevsLimit(ee)); + ee.rev_tree = _.tree; + ee.stemmedRevs = _.stemmedRevs; + le = ee; + le.isNewDoc = true; + le.wasDeleted = ee.revs[ee.rev].deleted ? 1 : 0; + } + if (le.error) de[oe] = le; else { + se[le.id] = le; + he = oe; + (function write(_, ee, ne) { + const re = winningRev(ee), se = ee.rev, oe = isLocalId(ee.id), le = ee.revs[re].data, fe = ee.isNewDoc; + if (ge) { + const _ = rewrite(le); + if (_) { + ee.data = _; + delete ee.data._attachments; + } else ee.data = le; + } else ee.data = le; + ee.rev = re; + ee.deleted = ee.revs[re].deleted ? 1 : 0; + if (!oe) { + ee.seq = ++ie.seq; + let _ = 0; + if (ee.isNewDoc) _ = ee.deleted ? 0 : 1; else if (ee.wasDeleted !== ee.deleted) _ = ee.deleted ? -1 : 1; + ie.doc_count += _; + } + delete ee.isNewDoc; + delete ee.wasDeleted; + let he = ee.stemmedRevs || []; + if (me && !fe) { + const _ = compactTree(ee); + if (_.length) he = he.concat(_); + } + if (he.length) he.forEach((function(_) { + delete ee.revs[_]; + })); + delete ee.stemmedRevs; + if (!("attachments" in ee)) ee.attachments = {}; + if (le._attachments) for (const ne in le._attachments) { + const ie = le._attachments[ne]; + if (ie.stub) { + if (!(ie.digest in ee.attachments)) { + ue = createError(MISSING_STUB); + _.abort(); + return; + } + if (revHasAttachment(ee, se, ie.digest)) ee.attachments[ie.digest].revs[se] = true; + } else { + ee.attachments[ie.digest] = ie; + ee.attachments[ie.digest].revs = {}; + ee.attachments[ie.digest].revs[se] = true; + le._attachments[ne] = { + stub: true, + digest: ie.digest, + content_type: ie.content_type, + length: ie.length, + revpos: parseInt(se, 10) + }; + } + } + if (oe && ee.deleted) { + _.objectStore(META_LOCAL_STORE).delete(ee.id).onsuccess = function() { + de[ne] = { + ok: true, + id: ee.id, + rev: "0-0" + }; + }; + updateSeq(ne); + return; + } + const pe = oe ? META_LOCAL_STORE : DOC_STORE2; + _.objectStore(pe).put(ee).onsuccess = function() { + de[ne] = { + ok: true, + id: ee.id, + rev: se + }; + updateSeq(ne); + }; + })(_, le, oe); + } + })); + })(_, ee, oe); + } + ee.forEach((function(ee) { + const ne = isLocalId(ee.id) ? META_LOCAL_STORE : DOC_STORE2; + _.objectStore(ne).get(ee.id).onsuccess = readDone; + })); + })(le, fe); + })); + })).catch((function(_) { + oe(_); + })); +} + +function allDocsKeys2(_, ee, ne) { + const ie = new Array(_.length); + let re = 0; + _.forEach((function(se, oe) { + ee.get(se).onsuccess = function(ee) { + if (ee.target.result) ie[oe] = ee.target.result; else ie[oe] = { + key: se, + error: "not_found" + }; + re++; + if (re === _.length) ie.forEach((function(_) { + ne(_); + })); + }; + })); +} + +function createKeyRange2(_, ee, ne, ie, re, se) { + try { + if (re) return IDBKeyRange.only([ 0, re ]); else if (se) return IDBKeyRange.bound(ee, _, !ie, !ne); else return IDBKeyRange.bound(_, ee, !ne, !ie); + } catch (_) { + return { + error: _ + }; + } +} + +function handleKeyRangeError(_, ee, ne, ie) { + if ("DataError" === ne.name && 0 === ne.code) { + const ne = { + total_rows: ee.doc_count, + offset: _.skip, + rows: [] + }; + if (_.update_seq) ne.update_seq = ee.seq; + return ie(null, ne); + } + ie(createError(IDB_ERROR, ne.name, ne.message)); +} + +function allDocs(_, ee, ne, ie) { + if (_.error) return ie(_.error); + if (0 === ne.limit) { + const _ = { + total_rows: ee.doc_count, + offset: ne.skip, + rows: [] + }; + if (ne.update_seq) _.update_seq = ee.seq; + return ie(null, _); + } + const re = [], se = [], oe = "key" in ne ? ne.key : false, le = "keys" in ne ? ne.keys : false; + let ue = ne.skip || 0, de = "number" == typeof ne.limit ? ne.limit : void 0; + const fe = false !== ne.inclusive_end, he = "descending" in ne && ne.descending ? "prev" : null, pe = "startkey" in ne ? ne.startkey : he ? "￿" : "", ge = "endkey" in ne ? ne.endkey : he ? "" : "￿", me = _.txn.objectStore(DOC_STORE2); + if (le) { + _.txn.oncomplete = onTxnComplete; + return allDocsKeys2(le, me, (_ => { + if (_.error) return re.push(_); + const ee = { + id: _.id, + key: _.id, + value: { + rev: _.rev + } + }; + if (_.deleted) { + ee.value.deleted = true; + ee.doc = null; + } else if (ne.include_docs) include_doc(ee, _); + re.push(ee); + })); + } + let ye = createKeyRange2([ 0, pe ], [ 0, ge ], true, fe, oe, he); + if (ye.error) return handleKeyRangeError(ne, ee, ye.error, ie); + _.txn.oncomplete = onTxnComplete; + function include_doc(_, ie) { + const re = ie.revs[ie.rev].data; + _.doc = re; + _.doc._id = ie.id; + _.doc._rev = ie.rev; + if (ne.conflicts) { + const ee = collectConflicts(ie); + if (ee.length) _.doc._conflicts = ee; + } + if (ne.attachments && re._attachments) for (const oe in re._attachments) se.push(processAttachment(oe, ie, _.doc, ne.binary, ee.idb_attachment_format)); + } + function onTxnComplete() { + const _ = { + total_rows: ee.doc_count, + offset: 0, + rows: re + }; + if (ne.update_seq) _.update_seq = ee.seq; + if (se.length) Promise.all(se).then((function() { + ie(null, _); + })); else ie(null, _); + } + const Se = me.index("deleted,id"); + if (!ue && !de) fetchResults(); else { + let re, se = de > 0; + Se.openKeyCursor(ye, he || "next").onsuccess = le => { + const pe = le.target.result; + if (!ue) { + if (void 0 === re) { + re = pe && pe.key; + if (!re) return _.txn.commit(); + } + if (de) { + if (de > 1 && pe) { + pe.advance(de - 1); + de = void 0; + return; + } + de = void 0; + } + if (se) se = pe && pe.key; + if (!se) se = he ? ye.lower : ye.upper; + ye = createKeyRange2(re, se, true, fe, oe, he); + if (ye.error) { + _.txn.abort(); + return handleKeyRangeError(ne, ee, ye.error, ie); + } + fetchResults(); + } else { + if (!pe) return _.txn.commit(); + pe.advance(ue); + ue = 0; + } + }; + } + async function fetchResults() { + let ee = ye; + do { + ee = await fetchNextBatch(ee); + } while (ee); + if (he) re.reverse(); + return _.txn.commit(); + function fetchNextBatch(_) { + return new Promise((ee => { + Se.getAll(_, 100).onsuccess = ie => { + const se = ie.target.result; + for (let _ = 0; _ < se.length; ++_) { + const ee = se[_], ie = { + id: ee.id, + key: ee.id, + value: { + rev: ee.rev + } + }; + if (ne.include_docs) include_doc(ie, ee); + re.push(ie); + } + if (se.length >= 100) { + const ne = [ 0, se[se.length - 1].id ], ie = he ? _.upper : ne, re = he ? ne : _.upper; + if (ie[1] !== re[1]) return ee(createKeyRange2(ie, re, he ? true : false, he ? false : fe, oe, he)); + } + return ee(); + }; + })); + } + } +} + +function changes2(_, ee, ne, ie, re) { + if (_.error) return re.complete(_.error); + if (re.continuous) { + const _ = ie.name + ":" + uuid(); + ee.addListener(ie.name, _, ne, re); + ee.notify(ie.name); + return { + cancel: function() { + ee.removeListener(ie.name, _); + } + }; + } + let se = "limit" in re ? re.limit : -1; + if (0 === se) se = 1; + const oe = _.txn.objectStore(DOC_STORE2).index("seq"), le = filterChange(re); + let ue = 0, de = re.since || 0; + const fe = [], he = []; + let pe; + if (re.descending) pe = oe.openCursor(null, "prev"); else pe = oe.openCursor(IDBKeyRange.lowerBound(re.since, true)); + _.txn.oncomplete = function onTxnComplete() { + Promise.all(he).then((function() { + re.complete(null, { + results: fe, + last_seq: de + }); + })); + }; + pe.onsuccess = function onReqSuccess(_) { + if (!_.target.result) return; + const ee = _.target.result, ie = ee.value; + ie.data = ie.revs[ie.rev].data; + ie.data._id = ie.id; + ie.data._rev = ie.rev; + if (ie.deleted) ie.data._deleted = true; + if (re.doc_ids && -1 === re.doc_ids.indexOf(ie.id)) return ee.continue(); + const oe = re.processChange(ie.data, ie, re); + oe.seq = ie.seq; + de = ie.seq; + const pe = le(oe); + if ("object" == typeof pe) return re.complete(pe); + if (pe) { + ue++; + if (re.return_docs) fe.push(oe); + if (re.include_docs && re.attachments && ie.data._attachments) { + const _ = []; + for (const ee in ie.data._attachments) { + const se = processAttachment(ee, ie, oe.doc, re.binary, ne.blobSupport); + _.push(se); + he.push(se); + } + Promise.all(_).then((function() { + re.onChange(oe); + })); + } else re.onChange(oe); + } + if (ue !== se) ee.continue(); + }; +} + +function getRevisionTree(_, ee, ne) { + if (_.error) return ne(_.error); + _.txn.objectStore(DOC_STORE2).get(ee).onsuccess = function(_) { + if (!_.target.result) ne(createError(MISSING_DOC)); else ne(null, _.target.result.rev_tree); + }; +} + +function doCompaction(_, ee, ne, ie) { + if (_.error) return ie(_.error); + const re = _.txn.objectStore(DOC_STORE2); + re.get(ee).onsuccess = function(_) { + const ee = _.target.result; + traverseRevTree(ee.rev_tree, (function(_, ee, ie, re, se) { + const oe = ee + "-" + ie; + if (-1 !== ne.indexOf(oe)) se.status = "missing"; + })); + const ie = []; + ne.forEach((function(_) { + if (_ in ee.revs) { + if (ee.revs[_].data._attachments) for (const ne in ee.revs[_].data._attachments) ie.push(ee.revs[_].data._attachments[ne].digest); + delete ee.revs[_]; + } + })); + ie.forEach((function(_) { + ne.forEach((function(ne) { + delete ee.attachments[_].revs[ne]; + })); + if (!Object.keys(ee.attachments[_].revs).length) delete ee.attachments[_]; + })); + re.put(ee); + }; + _.txn.oncomplete = function() { + ie(); + }; +} + +function destroy(_, ee, ne, ie) { + ne.removeAllListeners(_.name); + function doDestroy() { + indexedDB.deleteDatabase(_.name).onsuccess = function() { + delete ee[_.name]; + ie(null, { + ok: true + }); + }; + } + if (_.name in ee) ee[_.name].then((function(_) { + _.idb.close(); + doDestroy(); + })); else doDestroy(); +} + +var COUCH_COLLATE_LO = null, COUCH_COLLATE_HI = "￿", IDB_COLLATE_LO = Number.NEGATIVE_INFINITY, IDB_COLLATE_HI = [ [ [ [ [ [ [ [ [ [ [ [] ] ] ] ] ] ] ] ] ] ] ]; + +function externaliseRecord(_) { + const ee = _.revs[_.rev].data; + ee._id = _.id; + ee._rev = _.rev; + if (_.deleted) ee._deleted = true; + return ee; +} + +function generateKeyRange(_) { + function defined(_, ee) { + return void 0 !== _[ee]; + } + function convert(_, ee) { + return [ 0 ].concat(_).map((function(_) { + if (null === _ && ee) return IDB_NULL; else if (true === _) return IDB_TRUE; else if (false === _) return IDB_FALSE; + if (!ee) if (_ === COUCH_COLLATE_LO) return IDB_COLLATE_LO; else if (Object.prototype.hasOwnProperty.call(_, COUCH_COLLATE_HI)) return IDB_COLLATE_HI; + return _; + })); + } + if (!defined(_, "inclusive_end")) _.inclusive_end = true; + if (!defined(_, "inclusive_start")) _.inclusive_start = true; + if (_.descending) { + const ee = _.startkey, ne = _.inclusive_start; + _.startkey = _.endkey; + _.endkey = ee; + _.inclusive_start = _.inclusive_end; + _.inclusive_end = ne; + } + try { + if (defined(_, "key")) return IDBKeyRange.only(convert(_.key, true)); + if (defined(_, "startkey") && !defined(_, "endkey")) return IDBKeyRange.bound(convert(_.startkey), [ 1 ], !_.inclusive_start, true); + if (!defined(_, "startkey") && defined(_, "endkey")) return IDBKeyRange.upperBound(convert(_.endkey), !_.inclusive_end); + if (defined(_, "startkey") && defined(_, "endkey")) return IDBKeyRange.bound(convert(_.startkey), convert(_.endkey), !_.inclusive_start, !_.inclusive_end); else return IDBKeyRange.only([ 0 ]); + } catch (ee) { + console.error("Could not generate keyRange", ee, _); + throw Error("Could not generate key range with " + JSON.stringify(_)); + } +} + +function getIndexHandle(_, ee, ne) { + const ie = naturalIndexName(ee); + return new Promise((function(re) { + _._openTransactionSafely([ DOC_STORE2 ], "readonly", (function(se, oe) { + if (se) return idbError2(ne)(se); + oe.onabort = idbError2(ne); + oe.ontimeout = idbError2(ne); + if (-1 === Array.from(oe.objectStore(DOC_STORE2).indexNames).indexOf(ie)) _._freshen().then((function() { + return getIndexHandle(_, ee, ne); + })).then(re); else re(oe.objectStore(DOC_STORE2).index(ie)); + })); + })); +} + +function query(_, ee, ne, ie) { + const re = this, se = ee.split("/"); + return new Promise((function(_, oe) { + re.get("_design/" + se[0]).then((function(le) { + if (isPartialFilterView(le, se[1])) return ie(ee, ne).then(_, oe); + const ue = rawIndexFields(le, se[1]); + if (!ue) throw new Error("ddoc " + le._id + " with view " + se[1] + " does not have map.options.def.fields defined."); + let de = ne.skip, fe = Number.isInteger(ne.limit) && ne.limit; + return getIndexHandle(re, ue, oe).then((function(ee) { + const ie = generateKeyRange(ne), re = ee.openCursor(ie, ne.descending ? "prev" : "next"), se = []; + re.onerror = idbError2(oe); + re.onsuccess = function(ee) { + const ne = ee.target.result; + if (!ne || 0 === fe) return _({ + rows: se + }); + if (!de) { + if (fe) fe -= 1; + se.push({ + doc: externaliseRecord(ne.value) + }); + ne.continue(); + } else { + ne.advance(de); + de = false; + } + }; + })); + })).catch(oe); + })); +} + +function viewCleanup(_, ee) { + return ee(); +} + +function purgeAttachments(_, ee) { + if (!_.attachments) return {}; + for (let ne in _.attachments) { + const ie = _.attachments[ne]; + for (let _ of ee) if (ie.revs[_]) delete ie.revs[_]; + if (0 === Object.keys(ie.revs).length) delete _.attachments[ne]; + } + return _.attachments; +} + +function purge(_, ee, ne, ie) { + if (_.error) return ie(_.error); + const re = _.txn.objectStore(DOC_STORE2), se = []; + let oe = false; + re.get(ee).onsuccess = _ => { + const ee = _.target.result; + for (const _ of ne) { + ee.rev_tree = removeLeafFromRevTree(ee.rev_tree, _); + delete ee.revs[_]; + se.push(_); + } + if (0 !== ee.rev_tree.length) { + ee.rev = winningRev(ee); + ee.data = ee.revs[ee.rev].data; + ee.attachments = purgeAttachments(ee, ne); + re.put(ee); + } else { + re.delete(ee.id); + oe = true; + } + }; + _.txn.oncomplete = function() { + ie(null, { + ok: true, + deletedRevs: se, + documentWasRemovedCompletely: oe + }); + }; +} + +var ADAPTER_NAME = "indexeddb", idbChanges = new Changes, openDatabases = {}; + +function IndexeddbPouch(_, ee) { + if (_.view_adapter) console.log("Please note that the indexeddb adapter manages _find indexes itself, therefore it is not using your specified view_adapter"); + const ne = this; + let ie = {}; + const $ = function(ee) { + return function() { + const re = Array.prototype.slice.call(arguments); + setup(openDatabases, ne, _).then((function(_) { + ie = _.metadata; + re.unshift(_.idb); + ee.apply(ne, re); + })).catch((function(_) { + const ee = re.pop(); + if ("function" == typeof ee) ee(_); else console.error(_); + })); + }; + }, $p = function(ee) { + return function() { + const re = Array.prototype.slice.call(arguments); + return setup(openDatabases, ne, _).then((function(_) { + ie = _.metadata; + re.unshift(_.idb); + return ee.apply(ne, re); + })); + }; + }, $t2 = function(ee, re, se) { + se = se || "readonly"; + return function() { + const oe = Array.prototype.slice.call(arguments), le = {}; + setup(openDatabases, ne, _).then((function(_) { + ie = _.metadata; + le.txn = _.idb.transaction(re, se); + })).catch((function(_) { + console.error("Failed to establish transaction safely"); + console.error(_); + le.error = _; + })).then((function() { + oe.unshift(le); + ee.apply(ne, oe); + })); + }; + }; + ne._openTransactionSafely = function(_, ee, ne) { + $t2((function(_, ee) { + ee(_.error, _.txn); + }), _, ee)(ne); + }; + ne._remote = false; + ne.type = function() { + return ADAPTER_NAME; + }; + ne._id = $((function(_, ee) { + ee(null, ie.db_uuid); + })); + ne._info = $((function(_, ee) { + return info(ie, ee); + })); + ne._get = $t2(get, [ DOC_STORE2 ]); + ne._getLocal = $t2((function(_, ee, ie) { + return getLocal(_, ee, ne, ie); + }), [ META_LOCAL_STORE ]); + ne._bulkDocs = $((function(ee, re, se, oe) { + bulkDocs(ne, re, se, ie, _, idbChanges, oe); + })); + ne._allDocs = $t2((function(_, ee, ne) { + allDocs(_, ie, ee, ne); + }), [ DOC_STORE2 ]); + ne._getAttachment = getAttachment; + ne._changes = $t2((function(ee, ie) { + changes2(ee, idbChanges, ne, _, ie); + }), [ DOC_STORE2 ]); + ne._getRevisionTree = $t2(getRevisionTree, [ DOC_STORE2 ]); + ne._doCompaction = $t2(doCompaction, [ DOC_STORE2 ], "readwrite"); + ne._customFindAbstractMapper = { + query: $p(query), + viewCleanup: $p(viewCleanup) + }; + ne._destroy = function(ee, ne) { + return destroy(_, openDatabases, idbChanges, ne); + }; + ne._close = $((function(ee, ne) { + delete openDatabases[_.name]; + ee.close(); + ne(); + })); + ne._freshen = function() { + return new Promise((function(_) { + ne._close((function() { + $(_)(); + })); + })); + }; + ne._purge = $t2(purge, [ DOC_STORE2 ], "readwrite"); + setTimeout((function() { + ee(null, ne); + })); +} + +IndexeddbPouch.valid = function() { + return true; +}; + +function index2(_) { + _.adapter(ADAPTER_NAME, IndexeddbPouch, true); +} + +var index_es_default3 = index2; + +function pool(_, ee) { + return new Promise((function(ne, ie) { + var re, se = 0, oe = 0, le = 0, ue = _.length; + function runNext() { + se++; + _[oe++]().then(onSuccess, onError); + } + function doNext() { + if (++le === ue) if (re) ie(re); else ne(); else runNextBatch(); + } + function onSuccess() { + se--; + doNext(); + } + function onError(_) { + se--; + re = re || _; + doNext(); + } + function runNextBatch() { + for (;se < ee && oe < ue; ) runNext(); + } + runNextBatch(); + })); +} + +var CHANGES_BATCH_SIZE = 25, MAX_SIMULTANEOUS_REVS = 50, CHANGES_TIMEOUT_BUFFER = 5e3, DEFAULT_HEARTBEAT = 1e4, supportsBulkGetMap = {}; + +function readAttachmentsAsBlobOrBuffer(_) { + const ee = _.doc || _.ok, ne = ee && ee._attachments; + if (ne) Object.keys(ne).forEach((function(_) { + const ee = ne[_]; + ee.data = b64ToBluffer(ee.data, ee.content_type); + })); +} + +function encodeDocId(_) { + if (/^_design/.test(_)) return "_design/" + encodeURIComponent(_.slice(8)); + if (_.startsWith("_local/")) return "_local/" + encodeURIComponent(_.slice(7)); else return encodeURIComponent(_); +} + +function preprocessAttachments2(_) { + if (!_._attachments || !Object.keys(_._attachments)) return Promise.resolve(); else return Promise.all(Object.keys(_._attachments).map((function(ee) { + const ne = _._attachments[ee]; + if (ne.data && "string" != typeof ne.data) return new Promise((function(_) { + blobToBase64(ne.data, _); + })).then((function(_) { + ne.data = _; + })); + }))); +} + +function hasUrlPrefix(_) { + if (!_.prefix) return false; + const ee = parseUri(_.prefix).protocol; + return "http" === ee || "https" === ee; +} + +function getHost(_, ee) { + if (hasUrlPrefix(ee)) { + const ne = ee.name.substr(ee.prefix.length); + _ = ee.prefix.replace(/\/?$/, "/") + encodeURIComponent(ne); + } + const ne = parseUri(_); + if (ne.user || ne.password) ne.auth = { + username: ne.user, + password: ne.password + }; + const ie = ne.path.replace(/(^\/|\/$)/g, "").split("/"); + ne.db = ie.pop(); + if (-1 === ne.db.indexOf("%")) ne.db = encodeURIComponent(ne.db); + ne.path = ie.join("/"); + return ne; +} + +function genDBUrl(_, ee) { + return genUrl(_, _.db + "/" + ee); +} + +function genUrl(_, ee) { + const ne = !_.path ? "" : "/"; + return _.protocol + "://" + _.host + (_.port ? ":" + _.port : "") + "/" + _.path + ne + ee; +} + +function paramsToStr(_) { + const ee = Object.keys(_); + if (0 === ee.length) return ""; else return "?" + ee.map((ee => ee + "=" + encodeURIComponent(_[ee]))).join("&"); +} + +function shouldCacheBust(_) { + const ee = "undefined" != typeof navigator && navigator.userAgent ? navigator.userAgent.toLowerCase() : "", ne = -1 !== ee.indexOf("msie"), ie = -1 !== ee.indexOf("trident"), re = -1 !== ee.indexOf("edge"), se = !("method" in _) || "GET" === _.method; + return (ne || ie || re) && se; +} + +function HttpPouch(_, ee) { + const ne = this, ie = getHost(_.name, _), re = genDBUrl(ie, ""); + _ = clone(_); + const ourFetch = async function(ee, ne) { + (ne = ne || {}).headers = ne.headers || new h; + ne.credentials = "include"; + if (_.auth || ie.auth) { + const ee = _.auth || ie.auth, re = ee.username + ":" + ee.password, se = thisBtoa(unescape(encodeURIComponent(re))); + ne.headers.set("Authorization", "Basic " + se); + } + const re = _.headers || {}; + Object.keys(re).forEach((function(_) { + ne.headers.append(_, re[_]); + })); + if (shouldCacheBust(ne)) ee += (-1 === ee.indexOf("?") ? "?" : "&") + "_nonce=" + Date.now(); + const se = _.fetch || f2; + return await se(ee, ne); + }; + function adapterFun$$1(_, ee) { + return adapterFun(_, (function(..._) { + setup2().then((function() { + return ee.apply(this, _); + })).catch((function(ee) { + _.pop()(ee); + })); + })).bind(ne); + } + async function fetchJSON(_, ee) { + const ne = {}; + (ee = ee || {}).headers = ee.headers || new h; + if (!ee.headers.get("Content-Type")) ee.headers.set("Content-Type", "application/json"); + if (!ee.headers.get("Accept")) ee.headers.set("Accept", "application/json"); + const ie = await ourFetch(_, ee); + ne.ok = ie.ok; + ne.status = ie.status; + const re = await ie.json(); + ne.data = re; + if (!ne.ok) { + ne.data.status = ne.status; + throw generateErrorFromResponse(ne.data); + } + if (Array.isArray(ne.data)) ne.data = ne.data.map((function(_) { + if (_.error || _.missing) return generateErrorFromResponse(_); else return _; + })); + return ne; + } + let se; + async function setup2() { + if (_.skip_setup) return Promise.resolve(); + if (se) return se; + se = fetchJSON(re).catch((function(_) { + if (_ && _.status && 404 === _.status) { + explainError(404, "PouchDB is just detecting if the remote exists."); + return fetchJSON(re, { + method: "PUT" + }); + } else return Promise.reject(_); + })).catch((function(_) { + if (_ && _.status && 412 === _.status) return true; else return Promise.reject(_); + })); + se.catch((function() { + se = null; + })); + return se; + } + nextTick((function() { + ee(null, ne); + })); + ne._remote = true; + ne.type = function() { + return "http"; + }; + ne.id = adapterFun$$1("id", (async function(_) { + let ee; + try { + const _ = await ourFetch(genUrl(ie, "")); + ee = await _.json(); + } catch (_) { + ee = {}; + } + _(null, ee && ee.uuid ? ee.uuid + ie.db : genDBUrl(ie, "")); + })); + ne.compact = adapterFun$$1("compact", (async function(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + _ = clone(_); + await fetchJSON(genDBUrl(ie, "_compact"), { + method: "POST" + }); + (function ping() { + ne.info((function(ne, ie) { + if (ie && !ie.compact_running) ee(null, { + ok: true + }); else setTimeout(ping, _.interval || 200); + })); + })(); + })); + ne.bulkGet = adapterFun("bulkGet", (function(_, ee) { + const ne = this; + async function doBulkGet(ee) { + const ne = {}; + if (_.revs) ne.revs = true; + if (_.attachments) ne.attachments = true; + if (_.latest) ne.latest = true; + try { + const re = await fetchJSON(genDBUrl(ie, "_bulk_get" + paramsToStr(ne)), { + method: "POST", + body: JSON.stringify({ + docs: _.docs + }) + }); + if (_.attachments && _.binary) re.data.results.forEach((function(_) { + _.docs.forEach(readAttachmentsAsBlobOrBuffer); + })); + ee(null, re.data); + } catch (_) { + ee(_); + } + } + function doBulkGetShim() { + const ie = MAX_SIMULTANEOUS_REVS, re = Math.ceil(_.docs.length / ie); + let se = 0; + const oe = new Array(re); + function onResult(_) { + return function(ne, ie) { + oe[_] = ie.results; + if (++se === re) ee(null, { + results: oe.flat() + }); + }; + } + for (let ee = 0; ee < re; ee++) { + const re = pick(_, [ "revs", "attachments", "binary", "latest" ]); + re.docs = _.docs.slice(ee * ie, Math.min(_.docs.length, (ee + 1) * ie)); + bulkGet(ne, re, onResult(ee)); + } + } + const re = genUrl(ie, ""), se = supportsBulkGetMap[re]; + if ("boolean" != typeof se) doBulkGet((function(_, ne) { + if (_) { + supportsBulkGetMap[re] = false; + explainError(_.status, "PouchDB is just detecting if the remote supports the _bulk_get API."); + doBulkGetShim(); + } else { + supportsBulkGetMap[re] = true; + ee(null, ne); + } + })); else if (se) doBulkGet(ee); else doBulkGetShim(); + })); + ne._info = async function(_) { + try { + await setup2(); + const ee = await ourFetch(genDBUrl(ie, "")), ne = await ee.json(); + ne.host = genDBUrl(ie, ""); + _(null, ne); + } catch (ee) { + _(ee); + } + }; + ne.fetch = async function(_, ee) { + await setup2(); + const ne = "/" === _.substring(0, 1) ? genUrl(ie, _.substring(1)) : genDBUrl(ie, _); + return ourFetch(ne, ee); + }; + ne.get = adapterFun$$1("get", (async function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + const re = {}; + if ((ee = clone(ee)).revs) re.revs = true; + if (ee.revs_info) re.revs_info = true; + if (ee.latest) re.latest = true; + if (ee.open_revs) { + if ("all" !== ee.open_revs) ee.open_revs = JSON.stringify(ee.open_revs); + re.open_revs = ee.open_revs; + } + if (ee.rev) re.rev = ee.rev; + if (ee.conflicts) re.conflicts = ee.conflicts; + if (ee.update_seq) re.update_seq = ee.update_seq; + _ = encodeDocId(_); + function fetchAttachments(_) { + const ne = _._attachments, re = ne && Object.keys(ne); + if (ne && re.length) return pool(re.map((function(re) { + return function() { + return async function fetchData(re) { + const se = ne[re], oe = encodeDocId(_._id) + "/" + encodeAttachmentId(re) + "?rev=" + _._rev, le = await ourFetch(genDBUrl(ie, oe)); + let ue, de; + if ("buffer" in le) ue = await le.buffer(); else ue = await le.blob(); + if (ee.binary) { + const _ = Object.getOwnPropertyDescriptor(ue.__proto__, "type"); + if (!_ || _.set) ue.type = se.content_type; + de = ue; + } else de = await new Promise((function(_) { + blobToBase64(ue, _); + })); + delete se.stub; + delete se.length; + se.data = de; + }(re); + }; + })), 5); + } + const se = genDBUrl(ie, _ + paramsToStr(re)); + try { + const _ = await fetchJSON(se); + if (ee.attachments) await function fetchAllAttachments(_) { + if (Array.isArray(_)) return Promise.all(_.map((function(_) { + if (_.ok) return fetchAttachments(_.ok); + }))); else return fetchAttachments(_); + }(_.data); + ne(null, _.data); + } catch (ee) { + ee.docId = _; + ne(ee); + } + })); + ne.remove = adapterFun$$1("remove", (async function(_, ee, ne, re) { + let se; + if ("string" == typeof ee) { + se = { + _id: _, + _rev: ee + }; + if ("function" == typeof ne) { + re = ne; + ne = {}; + } + } else { + se = _; + if ("function" == typeof ee) { + re = ee; + ne = {}; + } else { + re = ne; + ne = ee; + } + } + const oe = se._rev || ne.rev, le = genDBUrl(ie, encodeDocId(se._id)) + "?rev=" + oe; + try { + re(null, (await fetchJSON(le, { + method: "DELETE" + })).data); + } catch (_) { + re(_); + } + })); + function encodeAttachmentId(_) { + return _.split("/").map(encodeURIComponent).join("/"); + } + ne.getAttachment = adapterFun$$1("getAttachment", (async function(_, ee, ne, re) { + if ("function" == typeof ne) { + re = ne; + ne = {}; + } + const se = ne.rev ? "?rev=" + ne.rev : "", oe = genDBUrl(ie, encodeDocId(_)) + "/" + encodeAttachmentId(ee) + se; + let le; + try { + const _ = await ourFetch(oe, { + method: "GET" + }); + if (!_.ok) throw _; + le = _.headers.get("content-type"); + let ee; + if ("undefined" != typeof process && !process.browser && "function" == typeof _.buffer) ee = await _.buffer(); else ee = await _.blob(); + if ("undefined" != typeof process && !process.browser) { + const _ = Object.getOwnPropertyDescriptor(ee.__proto__, "type"); + if (!_ || _.set) ee.type = le; + } + re(null, ee); + } catch (_) { + re(_); + } + })); + ne.removeAttachment = adapterFun$$1("removeAttachment", (async function(_, ee, ne, re) { + const se = genDBUrl(ie, encodeDocId(_) + "/" + encodeAttachmentId(ee)) + "?rev=" + ne; + try { + re(null, (await fetchJSON(se, { + method: "DELETE" + })).data); + } catch (_) { + re(_); + } + })); + ne.putAttachment = adapterFun$$1("putAttachment", (async function(_, ee, ne, re, se, oe) { + if ("function" == typeof se) { + oe = se; + se = re; + re = ne; + ne = null; + } + const le = encodeDocId(_) + "/" + encodeAttachmentId(ee); + let ue = genDBUrl(ie, le); + if (ne) ue += "?rev=" + ne; + if ("string" == typeof re) { + let _; + try { + _ = thisAtob(re); + } catch (_) { + return oe(createError(BAD_ARG, "Attachment is not a valid base64 string")); + } + re = _ ? binStringToBluffer(_, se) : ""; + } + try { + oe(null, (await fetchJSON(ue, { + headers: new h({ + "Content-Type": se + }), + method: "PUT", + body: re + })).data); + } catch (_) { + oe(_); + } + })); + ne._bulkDocs = async function(_, ee, ne) { + _.new_edits = ee.new_edits; + try { + await setup2(); + await Promise.all(_.docs.map(preprocessAttachments2)); + ne(null, (await fetchJSON(genDBUrl(ie, "_bulk_docs"), { + method: "POST", + body: JSON.stringify(_) + })).data); + } catch (_) { + ne(_); + } + }; + ne._put = async function(_, ee, ne) { + try { + await setup2(); + await preprocessAttachments2(_); + ne(null, (await fetchJSON(genDBUrl(ie, encodeDocId(_._id)), { + method: "PUT", + body: JSON.stringify(_) + })).data); + } catch (ee) { + ee.docId = _ && _._id; + ne(ee); + } + }; + ne.allDocs = adapterFun$$1("allDocs", (async function(_, ee) { + if ("function" == typeof _) { + ee = _; + _ = {}; + } + const ne = {}; + let re, se = "GET"; + if ((_ = clone(_)).conflicts) ne.conflicts = true; + if (_.update_seq) ne.update_seq = true; + if (_.descending) ne.descending = true; + if (_.include_docs) ne.include_docs = true; + if (_.attachments) ne.attachments = true; + if (_.key) ne.key = JSON.stringify(_.key); + if (_.start_key) _.startkey = _.start_key; + if (_.startkey) ne.startkey = JSON.stringify(_.startkey); + if (_.end_key) _.endkey = _.end_key; + if (_.endkey) ne.endkey = JSON.stringify(_.endkey); + if ("undefined" != typeof _.inclusive_end) ne.inclusive_end = !!_.inclusive_end; + if ("undefined" != typeof _.limit) ne.limit = _.limit; + if ("undefined" != typeof _.skip) ne.skip = _.skip; + const oe = paramsToStr(ne); + if ("undefined" != typeof _.keys) { + se = "POST"; + re = { + keys: _.keys + }; + } + try { + const ne = await fetchJSON(genDBUrl(ie, "_all_docs" + oe), { + method: se, + body: JSON.stringify(re) + }); + if (_.include_docs && _.attachments && _.binary) ne.data.rows.forEach(readAttachmentsAsBlobOrBuffer); + ee(null, ne.data); + } catch (_) { + ee(_); + } + })); + ne._changes = function(_) { + const ee = "batch_size" in _ ? _.batch_size : CHANGES_BATCH_SIZE; + if ((_ = clone(_)).continuous && !("heartbeat" in _)) _.heartbeat = DEFAULT_HEARTBEAT; + let ne = "timeout" in _ ? _.timeout : 3e4; + if ("timeout" in _ && _.timeout && ne - _.timeout < CHANGES_TIMEOUT_BUFFER) ne = _.timeout + CHANGES_TIMEOUT_BUFFER; + if ("heartbeat" in _ && _.heartbeat && ne - _.heartbeat < CHANGES_TIMEOUT_BUFFER) ne = _.heartbeat + CHANGES_TIMEOUT_BUFFER; + const re = {}; + if ("timeout" in _ && _.timeout) re.timeout = _.timeout; + const se = "undefined" != typeof _.limit ? _.limit : false; + let oe = se; + if (_.style) re.style = _.style; + if (_.include_docs || _.filter && "function" == typeof _.filter) re.include_docs = true; + if (_.attachments) re.attachments = true; + if (_.continuous) re.feed = "longpoll"; + if (_.seq_interval) re.seq_interval = _.seq_interval; + if (_.conflicts) re.conflicts = true; + if (_.descending) re.descending = true; + if (_.update_seq) re.update_seq = true; + if ("heartbeat" in _) if (_.heartbeat) re.heartbeat = _.heartbeat; + if (_.filter && "string" == typeof _.filter) re.filter = _.filter; + if (_.view && "string" == typeof _.view) { + re.filter = "_view"; + re.view = _.view; + } + if (_.query_params && "object" == typeof _.query_params) for (const ee in _.query_params) if (Object.prototype.hasOwnProperty.call(_.query_params, ee)) re[ee] = _.query_params[ee]; + let le, ue = "GET"; + if (_.doc_ids) { + re.filter = "_doc_ids"; + ue = "POST"; + le = { + doc_ids: _.doc_ids + }; + } else if (_.selector) { + re.filter = "_selector"; + ue = "POST"; + le = { + selector: _.selector + }; + } + const de = new AbortController; + let fe; + const fetchData = async function(ne, he) { + if (_.aborted) return; + re.since = ne; + if ("object" == typeof re.since) re.since = JSON.stringify(re.since); + if (_.descending) { + if (se) re.limit = oe; + } else re.limit = !se || oe > ee ? ee : oe; + const pe = genDBUrl(ie, "_changes" + paramsToStr(re)), ge = { + signal: de.signal, + method: ue, + body: JSON.stringify(le) + }; + fe = ne; + if (!_.aborted) try { + await setup2(); + he(null, (await fetchJSON(pe, ge)).data); + } catch (_) { + he(_); + } + }, he = { + results: [] + }, fetched = function(ne, ie) { + if (_.aborted) return; + let re = 0; + if (ie && ie.results) { + re = ie.results.length; + he.last_seq = ie.last_seq; + let ee = null, ne = null; + if ("number" == typeof ie.pending) ee = ie.pending; + if ("string" == typeof he.last_seq || "number" == typeof he.last_seq) ne = he.last_seq; + ({}).query = _.query_params; + ie.results = ie.results.filter((function(ie) { + oe--; + const re = filterChange(_)(ie); + if (re) { + if (_.include_docs && _.attachments && _.binary) readAttachmentsAsBlobOrBuffer(ie); + if (_.return_docs) he.results.push(ie); + _.onChange(ie, ee, ne); + } + return re; + })); + } else if (ne) { + _.aborted = true; + _.complete(ne); + return; + } + if (ie && ie.last_seq) fe = ie.last_seq; + const le = se && oe <= 0 || ie && re < ee || _.descending; + if (_.continuous && !(se && oe <= 0) || !le) nextTick((function() { + fetchData(fe, fetched); + })); else _.complete(null, he); + }; + fetchData(_.since || 0, fetched); + return { + cancel: function() { + _.aborted = true; + de.abort(); + } + }; + }; + ne.revsDiff = adapterFun$$1("revsDiff", (async function(_, ee, ne) { + if ("function" == typeof ee) { + ne = ee; + ee = {}; + } + try { + ne(null, (await fetchJSON(genDBUrl(ie, "_revs_diff"), { + method: "POST", + body: JSON.stringify(_) + })).data); + } catch (_) { + ne(_); + } + })); + ne._close = function(_) { + _(); + }; + ne._destroy = async function(_, ee) { + try { + ee(null, await fetchJSON(genDBUrl(ie, ""), { + method: "DELETE" + })); + } catch (_) { + if (404 === _.status) ee(null, { + ok: true + }); else ee(_); + } + }; +} + +HttpPouch.valid = function() { + return true; +}; + +function index3(_) { + _.adapter("http", HttpPouch, false); + _.adapter("https", HttpPouch, false); +} + +var index_es_default4 = index3, QueryParseError = class _QueryParseError extends Error { + constructor(_) { + super(); + this.status = 400; + this.name = "query_parse_error"; + this.message = _; + this.error = true; + try { + Error.captureStackTrace(this, _QueryParseError); + } catch (_) {} + } +}, NotFoundError = class _NotFoundError extends Error { + constructor(_) { + super(); + this.status = 404; + this.name = "not_found"; + this.message = _; + this.error = true; + try { + Error.captureStackTrace(this, _NotFoundError); + } catch (_) {} + } +}, BuiltInError = class _BuiltInError extends Error { + constructor(_) { + super(); + this.status = 500; + this.name = "invalid_value"; + this.message = _; + this.error = true; + try { + Error.captureStackTrace(this, _BuiltInError); + } catch (_) {} + } +}; + +function promisedCallback(_, ee) { + if (ee) _.then((function(_) { + nextTick((function() { + ee(null, _); + })); + }), (function(_) { + nextTick((function() { + ee(_); + })); + })); + return _; +} + +function callbackify(_) { + return function(...ee) { + var ne = ee.pop(), ie = _.apply(this, ee); + if ("function" == typeof ne) promisedCallback(ie, ne); + return ie; + }; +} + +function fin(_, ee) { + return _.then((function(_) { + return ee().then((function() { + return _; + })); + }), (function(_) { + return ee().then((function() { + throw _; + })); + })); +} + +function sequentialize(_, ee) { + return function() { + var ne = arguments, ie = this; + return _.add((function() { + return ee.apply(ie, ne); + })); + }; +} + +function uniq(_) { + var ee = new Set(_), ne = new Array(ee.size), ie = -1; + ee.forEach((function(_) { + ne[++ie] = _; + })); + return ne; +} + +function mapToKeysArray(_) { + var ee = new Array(_.size), ne = -1; + _.forEach((function(_, ie) { + ee[++ne] = ie; + })); + return ee; +} + +var import_spark_md54 = __toESM(require_spark_md5()), setImmediateShim4 = self.setImmediate || self.setTimeout; + +function stringMd52(_) { + return import_spark_md54.default.hash(_); +} + +var TaskQueue2 = class { + constructor() { + this.promise = Promise.resolve(); + } + add(_) { + this.promise = this.promise.catch((() => {})).then((() => _())); + return this.promise; + } + finish() { + return this.promise; + } +}; + +function stringify2(_) { + if (!_) return "undefined"; + switch (typeof _) { + case "function": + return _.toString(); + + case "string": + return _.toString(); + + default: + return JSON.stringify(_); + } +} + +function createViewSignature(_, ee) { + return stringify2(_) + stringify2(ee) + "undefined"; +} + +async function createView(_, ee, ne, ie, re, se) { + const oe = createViewSignature(ne, ie); + let le; + if (!re) { + le = _._cachedViews = _._cachedViews || {}; + if (le[oe]) return le[oe]; + } + const ue = _.info().then((async function(ue) { + const de = ue.db_name + "-mrview-" + (re ? "temp" : stringMd52(oe)); + await upsert(_, "_local/" + se, (function diffFunction(_) { + _.views = _.views || {}; + let ne = ee; + if (-1 === ne.indexOf("/")) ne = ee + "/" + ee; + const ie = _.views[ne] = _.views[ne] || {}; + if (!ie[de]) { + ie[de] = true; + return _; + } + })); + const fe = (await _.registerDependentDatabase(de)).db; + fe.auto_compaction = true; + const he = { + name: de, + db: fe, + sourceDB: _, + adapter: _.adapter, + mapFun: ne, + reduceFun: ie + }; + let pe; + try { + pe = await he.db.get("_local/lastSeq"); + } catch (_) { + if (404 !== _.status) throw _; + } + he.seq = pe ? pe.seq : 0; + if (le) he.db.once("destroyed", (function() { + delete le[oe]; + })); + return he; + })); + if (le) le[oe] = ue; + return ue; +} + +var persistentQueues = {}, tempViewQueue = new TaskQueue2, CHANGES_BATCH_SIZE2 = 50; + +function parseViewName(_) { + return -1 === _.indexOf("/") ? [ _, _ ] : _.split("/"); +} + +function isGenOne(_) { + return 1 === _.length && /^1-/.test(_[0].rev); +} + +function emitError(_, ee, ne) { + try { + _.emit("error", ee); + } catch (_) { + guardedConsole("error", "The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."); + guardedConsole("error", ee, ne); + } +} + +function createAbstractMapReduce(_, ee, ne, ie) { + function tryMap(_, ee, ne) { + try { + ee(ne); + } catch (ie) { + emitError(_, ie, { + fun: ee, + doc: ne + }); + } + } + function tryReduce(_, ee, ne, ie, re) { + try { + return { + output: ee(ne, ie, re) + }; + } catch (se) { + emitError(_, se, { + fun: ee, + keys: ne, + values: ie, + rereduce: re + }); + return { + error: se + }; + } + } + function sortByKeyThenValue(_, ee) { + const ne = collate(_.key, ee.key); + return 0 !== ne ? ne : collate(_.value, ee.value); + } + function sliceResults(_, ee, ne) { + ne = ne || 0; + if ("number" == typeof ee) return _.slice(ne, ee + ne); else if (ne > 0) return _.slice(ne); + return _; + } + function rowToDocId(_) { + const ee = _.value; + return ee && "object" == typeof ee && ee._id || _.id; + } + function postprocessAttachments(_) { + return function(ee) { + if (_.include_docs && _.attachments && _.binary) (function readAttachmentsAsBlobOrBuffer2(_) { + for (const ee of _.rows) { + const _ = ee.doc && ee.doc._attachments; + if (_) for (const ee of Object.keys(_)) { + const ne = _[ee]; + _[ee].data = b64ToBluffer(ne.data, ne.content_type); + } + } + })(ee); + return ee; + }; + } + function addHttpParam(_, ee, ne, ie) { + let re = ee[_]; + if ("undefined" != typeof re) { + if (ie) re = encodeURIComponent(JSON.stringify(re)); + ne.push(_ + "=" + re); + } + } + function coerceInteger(_) { + if ("undefined" != typeof _) { + const ee = Number(_); + if (!isNaN(ee) && ee === parseInt(_, 10)) return ee; else return _; + } + } + function checkPositiveInteger(_) { + if (_) { + if ("number" != typeof _) return new QueryParseError(`Invalid value for integer: "${_}"`); + if (_ < 0) return new QueryParseError(`Invalid value for positive integer: "${_}"`); + } + } + function checkQueryParseError(_, ee) { + const ne = _.descending ? "endkey" : "startkey", ie = _.descending ? "startkey" : "endkey"; + if ("undefined" != typeof _[ne] && "undefined" != typeof _[ie] && collate(_[ne], _[ie]) > 0) throw new QueryParseError("No rows can match your key range, reverse your start_key and end_key or set {descending : true}"); else if (ee.reduce && false !== _.reduce) if (_.include_docs) throw new QueryParseError("{include_docs:true} is invalid for reduce"); else if (_.keys && _.keys.length > 1 && !_.group && !_.group_level) throw new QueryParseError("Multi-key fetches for reduce views must use {group: true}"); + for (const ee of [ "group_level", "limit", "skip" ]) { + const ne = checkPositiveInteger(_[ee]); + if (ne) throw ne; + } + } + function defaultsTo(_) { + return function(ee) { + if (404 === ee.status) return _; else throw ee; + }; + } + function getQueue(_) { + const ee = "string" == typeof _ ? _ : _.name; + let ne = persistentQueues[ee]; + if (!ne) ne = persistentQueues[ee] = new TaskQueue2; + return ne; + } + async function updateView(_, ne) { + return sequentialize(getQueue(_), (function() { + return async function updateViewInQueue(_, ne) { + let ie, re, se; + const oe = ee(_.mapFun, (function emit2(_, ee) { + const ne = { + id: re._id, + key: normalizeKey(_) + }; + if ("undefined" != typeof ee && null !== ee) ne.value = normalizeKey(ee); + ie.push(ne); + })); + let le = _.seq || 0, ue = 0; + const de = { + view: _.name, + indexed_docs: ue + }; + _.sourceDB.emit("indexing", de); + const fe = new TaskQueue2; + function createIndexableKeysToKeyValues(_) { + const ee = new Map; + let ne; + for (let ie = 0, re = _.length; ie < re; ie++) { + const re = _[ie], se = [ re.key, re.id ]; + if (ie > 0 && 0 === collate(re.key, ne)) se.push(ie); + ee.set(toIndexableString(se), re); + ne = re.key; + } + return ee; + } + try { + await function createTask() { + return _.sourceDB.info().then((function(ee) { + se = _.sourceDB.activeTasks.add({ + name: "view_indexing", + total_items: ee.update_seq - le + }); + })); + }(); + await async function processNextBatch() { + return function processBatch(ee, de) { + const he = ee.results; + if (!he.length && !de.length) return; + for (const _ of de) if (he.findIndex((function(ee) { + return ee.id === _.docId; + })) < 0) { + const ee = { + _id: _.docId, + doc: { + _id: _.docId, + _deleted: 1 + }, + changes: [] + }; + if (_.doc) { + ee.doc = _.doc; + ee.changes.push({ + rev: _.doc._rev + }); + } + he.push(ee); + } + const pe = function createDocIdsToChangesAndEmits(ee) { + const ne = new Map; + for (const se of ee) { + if ("_" !== se.doc._id[0]) { + ie = []; + re = se.doc; + if (!re._deleted) tryMap(_.sourceDB, oe, re); + ie.sort(sortByKeyThenValue); + const ee = createIndexableKeysToKeyValues(ie); + ne.set(se.doc._id, [ ee, se.changes ]); + } + le = se.seq; + } + return ne; + }(he); + fe.add(function processChange2(ee, ne) { + return function() { + return function saveKeyValues(_, ee, ne) { + var ie = "_local/lastSeq"; + return _.db.get(ie).catch(defaultsTo({ + _id: ie, + seq: 0 + })).then((function(ie) { + var re = mapToKeysArray(ee); + return Promise.all(re.map((function(ne) { + return async function getDocsToPersist(_, ee, ne) { + const ie = "_local/doc_" + _, re = { + _id: ie, + keys: [] + }, se = ne.get(_), oe = se[0], le = se[1], ue = await function getMetaDoc() { + if (isGenOne(le)) return Promise.resolve(re); else return ee.db.get(ie).catch(defaultsTo(re)); + }(); + return function processKeyValueDocs(_, ee) { + const ne = [], ie = new Set; + for (const _ of ee.rows) { + const ee = _.doc; + if (ee) { + ne.push(ee); + ie.add(ee._id); + ee._deleted = !oe.has(ee._id); + if (!ee._deleted) { + const _ = oe.get(ee._id); + if ("value" in _) ee.value = _.value; + } + } + } + const re = mapToKeysArray(oe); + for (const _ of re) if (!ie.has(_)) { + const ee = { + _id: _ + }, ie = oe.get(_); + if ("value" in ie) ee.value = ie.value; + ne.push(ee); + } + _.keys = uniq(re.concat(_.keys)); + ne.push(_); + return ne; + }(ue, await function getKeyValueDocs(_) { + if (!_.keys.length) return Promise.resolve({ + rows: [] + }); else return ee.db.allDocs({ + keys: _.keys, + include_docs: true + }); + }(ue)); + }(ne, _, ee); + }))).then((function(ee) { + var re = ee.flat(); + ie.seq = ne; + re.push(ie); + return _.db.bulkDocs({ + docs: re + }); + })).then((() => function updatePurgeSeq(_) { + return _.sourceDB.get("_local/purges").then((function(ee) { + const ne = ee.purgeSeq; + return _.db.get("_local/purgeSeq").then((function(_) { + return _._rev; + })).catch(defaultsTo(void 0)).then((function(ee) { + return _.db.put({ + _id: "_local/purgeSeq", + _rev: ee, + purgeSeq: ne + }); + })); + })).catch((function(_) { + if (404 !== _.status) throw _; + })); + }(_))); + })); + }(_, ee, ne); + }; + }(pe, le)); + ue += he.length; + const ge = { + view: _.name, + last_seq: ee.last_seq, + results_count: he.length, + indexed_docs: ue + }; + _.sourceDB.emit("indexing", ge); + _.sourceDB.activeTasks.update(se, { + completed_items: ue + }); + if (!(he.length < ne.changes_batch_size)) return processNextBatch(); else return; + }(await _.sourceDB.changes({ + return_docs: true, + conflicts: true, + include_docs: true, + style: "all_docs", + since: le, + limit: ne.changes_batch_size + }), await function getRecentPurges() { + return _.db.get("_local/purgeSeq").then((function(_) { + return _.purgeSeq; + })).catch(defaultsTo(-1)).then((function(ee) { + return _.sourceDB.get("_local/purges").then((function(ne) { + const ie = ne.purges.filter((function(_, ne) { + return ne > ee; + })).map((_ => _.docId)), re = ie.filter((function(_, ee) { + return ie.indexOf(_) === ee; + })); + return Promise.all(re.map((function(ee) { + return _.sourceDB.get(ee).then((function(_) { + return { + docId: ee, + doc: _ + }; + })).catch(defaultsTo({ + docId: ee + })); + }))); + })).catch(defaultsTo([])); + })); + }()); + }(); + await fe.finish(); + _.seq = le; + _.sourceDB.activeTasks.remove(se); + } catch (ee) { + _.sourceDB.activeTasks.remove(se, ee); + } + }(_, ne); + }))(); + } + function queryView(_, ee) { + return sequentialize(getQueue(_), (function() { + return async function queryViewInQueue(_, ee) { + let ie; + const re = _.reduceFun && false !== ee.reduce, se = ee.skip || 0; + if ("undefined" != typeof ee.keys && !ee.keys.length) { + ee.limit = 0; + delete ee.keys; + } + async function fetchFromView(ee) { + ee.include_docs = true; + const ne = await _.db.allDocs(ee); + ie = ne.total_rows; + return ne.rows.map((function(_) { + if ("value" in _.doc && "object" == typeof _.doc.value && null !== _.doc.value) { + const ee = Object.keys(_.doc.value).sort(), ne = [ "id", "key", "value" ]; + if (!(ee < ne || ee > ne)) return _.doc.value; + } + const ee = parseIndexableString(_.doc._id); + return { + key: ee[0], + id: ee[1], + value: "value" in _.doc ? _.doc.value : null + }; + })); + } + async function onMapResultsReady(oe) { + let le; + if (re) le = function reduceView(_, ee, ie) { + if (0 === ie.group_level) delete ie.group_level; + const re = ie.group || ie.group_level, se = ne(_.reduceFun), oe = [], le = isNaN(ie.group_level) ? Number.POSITIVE_INFINITY : ie.group_level; + for (const _ of ee) { + const ee = oe[oe.length - 1]; + let ne = re ? _.key : null; + if (re && Array.isArray(ne)) ne = ne.slice(0, le); + if (!ee || 0 !== collate(ee.groupKey, ne)) oe.push({ + keys: [ [ _.key, _.id ] ], + values: [ _.value ], + groupKey: ne + }); else { + ee.keys.push([ _.key, _.id ]); + ee.values.push(_.value); + } + } + ee = []; + for (const ne of oe) { + const ie = tryReduce(_.sourceDB, se, ne.keys, ne.values, false); + if (ie.error && ie.error instanceof BuiltInError) throw ie.error; + ee.push({ + value: ie.error ? null : ie.output, + key: ne.groupKey + }); + } + return { + rows: sliceResults(ee, ie.limit, ie.skip) + }; + }(_, oe, ee); else if ("undefined" == typeof ee.keys) le = { + total_rows: ie, + offset: se, + rows: oe + }; else le = { + total_rows: ie, + offset: se, + rows: sliceResults(oe, ee.limit, ee.skip) + }; + if (ee.update_seq) le.update_seq = _.seq; + if (ee.include_docs) { + const ne = uniq(oe.map(rowToDocId)), ie = await _.sourceDB.allDocs({ + keys: ne, + include_docs: true, + conflicts: ee.conflicts, + attachments: ee.attachments, + binary: ee.binary + }), re = new Map; + for (const _ of ie.rows) re.set(_.id, _.doc); + for (const _ of oe) { + const ee = rowToDocId(_), ne = re.get(ee); + if (ne) _.doc = ne; + } + } + return le; + } + if ("undefined" != typeof ee.keys) { + const _ = ee.keys.map((function(_) { + const ne = { + startkey: toIndexableString([ _ ]), + endkey: toIndexableString([ _, {} ]) + }; + if (ee.update_seq) ne.update_seq = true; + return fetchFromView(ne); + })); + return onMapResultsReady((await Promise.all(_)).flat()); + } else { + const _ = { + descending: ee.descending + }; + if (ee.update_seq) _.update_seq = true; + let ne, ie; + if ("start_key" in ee) ne = ee.start_key; + if ("startkey" in ee) ne = ee.startkey; + if ("end_key" in ee) ie = ee.end_key; + if ("endkey" in ee) ie = ee.endkey; + if ("undefined" != typeof ne) _.startkey = ee.descending ? toIndexableString([ ne, {} ]) : toIndexableString([ ne ]); + if ("undefined" != typeof ie) { + let ne = false !== ee.inclusive_end; + if (ee.descending) ne = !ne; + _.endkey = toIndexableString(ne ? [ ie, {} ] : [ ie ]); + } + if ("undefined" != typeof ee.key) { + const ne = toIndexableString([ ee.key ]), ie = toIndexableString([ ee.key, {} ]); + if (_.descending) { + _.endkey = ne; + _.startkey = ie; + } else { + _.startkey = ne; + _.endkey = ie; + } + } + if (!re) { + if ("number" == typeof ee.limit) _.limit = ee.limit; + _.skip = se; + } + return onMapResultsReady(await fetchFromView(_)); + } + }(_, ee); + }))(); + } + return { + query: function abstractQuery(ee, ne, re) { + const se = this; + if ("function" == typeof ne) { + re = ne; + ne = {}; + } + ne = ne ? function coerceOptions(_) { + _.group_level = coerceInteger(_.group_level); + _.limit = coerceInteger(_.limit); + _.skip = coerceInteger(_.skip); + return _; + }(ne) : {}; + if ("function" == typeof ee) ee = { + map: ee + }; + const oe = Promise.resolve().then((function() { + return async function queryPromised(ee, ne, re) { + if ("function" == typeof ee._query) return function customQuery(_, ee, ne) { + return new Promise((function(ie, re) { + _._query(ee, ne, (function(_, ee) { + if (_) return re(_); + ie(ee); + })); + })); + }(ee, ne, re); + if (isRemote(ee)) return async function httpQuery(_, ee, ne) { + let ie, re, se = [], oe = "GET"; + addHttpParam("reduce", ne, se); + addHttpParam("include_docs", ne, se); + addHttpParam("attachments", ne, se); + addHttpParam("limit", ne, se); + addHttpParam("descending", ne, se); + addHttpParam("group", ne, se); + addHttpParam("group_level", ne, se); + addHttpParam("skip", ne, se); + addHttpParam("stale", ne, se); + addHttpParam("conflicts", ne, se); + addHttpParam("startkey", ne, se, true); + addHttpParam("start_key", ne, se, true); + addHttpParam("endkey", ne, se, true); + addHttpParam("end_key", ne, se, true); + addHttpParam("inclusive_end", ne, se); + addHttpParam("key", ne, se, true); + addHttpParam("update_seq", ne, se); + se = se.join("&"); + se = "" === se ? "" : "?" + se; + if ("undefined" != typeof ne.keys) { + const _ = 2e3, re = `keys=${encodeURIComponent(JSON.stringify(ne.keys))}`; + if (re.length + se.length + 1 <= _) se += ("?" === se[0] ? "&" : "?") + re; else { + oe = "POST"; + if ("string" == typeof ee) ie = { + keys: ne.keys + }; else ee.keys = ne.keys; + } + } + if ("string" == typeof ee) { + const le = parseViewName(ee), ue = await _.fetch("_design/" + le[0] + "/_view/" + le[1] + se, { + headers: new h({ + "Content-Type": "application/json" + }), + method: oe, + body: JSON.stringify(ie) + }); + re = ue.ok; + const de = await ue.json(); + if (!re) { + de.status = ue.status; + throw generateErrorFromResponse(de); + } + for (const _ of de.rows) if (_.value && _.value.error && "builtin_reduce_error" === _.value.error) throw new Error(_.reason); + return new Promise((function(_) { + _(de); + })).then(postprocessAttachments(ne)); + } + ie = ie || {}; + for (const _ of Object.keys(ee)) if (Array.isArray(ee[_])) ie[_] = ee[_]; else ie[_] = ee[_].toString(); + const le = await _.fetch("_temp_view" + se, { + headers: new h({ + "Content-Type": "application/json" + }), + method: "POST", + body: JSON.stringify(ie) + }); + re = le.ok; + const ue = await le.json(); + if (!re) { + ue.status = le.status; + throw generateErrorFromResponse(ue); + } + return new Promise((function(_) { + _(ue); + })).then(postprocessAttachments(ne)); + }(ee, ne, re); + const se = { + changes_batch_size: ee.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE2 + }; + if ("string" != typeof ne) { + checkQueryParseError(re, ne); + tempViewQueue.add((async function() { + const ie = await createView(ee, "temp_view/temp_view", ne.map, ne.reduce, true, _); + return fin(updateView(ie, se).then((function() { + return queryView(ie, re); + })), (function() { + return ie.db.destroy(); + })); + })); + return tempViewQueue.finish(); + } else { + const oe = ne, le = parseViewName(oe), ue = le[0], de = le[1], fe = await ee.get("_design/" + ue); + if (!(ne = fe.views && fe.views[de])) throw new NotFoundError(`ddoc ${fe._id} has no view named ${de}`); + ie(fe, de); + checkQueryParseError(re, ne); + const he = await createView(ee, oe, ne.map, ne.reduce, false, _); + if ("ok" === re.stale || "update_after" === re.stale) { + if ("update_after" === re.stale) nextTick((function() { + updateView(he, se); + })); + return queryView(he, re); + } else { + await updateView(he, se); + return queryView(he, re); + } + } + }(se, ee, ne); + })); + promisedCallback(oe, re); + return oe; + }, + viewCleanup: callbackify((function() { + const ee = this; + if ("function" == typeof ee._viewCleanup) return function customViewCleanup(_) { + return new Promise((function(ee, ne) { + _._viewCleanup((function(_, ie) { + if (_) return ne(_); + ee(ie); + })); + })); + }(ee); + if (isRemote(ee)) return async function httpViewCleanup(_) { + return (await _.fetch("_view_cleanup", { + headers: new h({ + "Content-Type": "application/json" + }), + method: "POST" + })).json(); + }(ee); else return async function localViewCleanup(ee) { + try { + const ne = await ee.get("_local/" + _), ie = new Map; + for (const _ of Object.keys(ne.views)) { + const ee = parseViewName(_), ne = "_design/" + ee[0], re = ee[1]; + let se = ie.get(ne); + if (!se) { + se = new Set; + ie.set(ne, se); + } + se.add(re); + } + const re = { + keys: mapToKeysArray(ie), + include_docs: true + }, se = await ee.allDocs(re), oe = {}; + for (const _ of se.rows) { + const ee = _.key.substring(8); + for (const re of ie.get(_.key)) { + let ie = ee + "/" + re; + if (!ne.views[ie]) ie = re; + const se = Object.keys(ne.views[ie]), le = _.doc && _.doc.views && _.doc.views[re]; + for (const _ of se) oe[_] = oe[_] || le; + } + } + const le = Object.keys(oe).filter((function(_) { + return !oe[_]; + })).map((function(_) { + return sequentialize(getQueue(_), (function() { + return new ee.constructor(_, ee.__opts).destroy(); + }))(); + })); + return Promise.all(le).then((function() { + return { + ok: true + }; + })); + } catch (_) { + if (404 === _.status) return { + ok: true + }; else throw _; + } + }(ee); + })) + }; +} + +var index_es_default5 = createAbstractMapReduce; + +function createBuiltInError(_) { + return new BuiltInError("builtin " + _ + " function requires map values to be numbers or number arrays"); +} + +function sum(_) { + for (var ee = 0, ne = 0, ie = _.length; ne < ie; ne++) { + var re = _[ne]; + if ("number" != typeof re) if (Array.isArray(re)) { + ee = "number" == typeof ee ? [ ee ] : ee; + for (var se = 0, oe = re.length; se < oe; se++) { + var le = re[se]; + if ("number" != typeof le) throw createBuiltInError("_sum"); else if ("undefined" == typeof ee[se]) ee.push(le); else ee[se] += le; + } + } else throw createBuiltInError("_sum"); else if ("number" == typeof ee) ee += re; else ee[0] += re; + } + return ee; +} + +var log = guardedConsole.bind(null, "log"), isArray = Array.isArray, toJSON = JSON.parse; + +function evalFunctionWithEval(_, ee) { + return scopeEval("return (" + _.replace(/;\s*$/, "") + ");", { + emit: ee, + sum, + log, + isArray, + toJSON + }); +} + +var builtInReduce = { + _sum: function(_, ee) { + return sum(ee); + }, + _count: function(_, ee) { + return ee.length; + }, + _stats: function(_, ee) { + return { + sum: sum(ee), + min: Math.min.apply(null, ee), + max: Math.max.apply(null, ee), + count: ee.length, + sumsqr: function sumsqr(_) { + for (var ee = 0, ne = 0, ie = _.length; ne < ie; ne++) { + var re = _[ne]; + ee += re * re; + } + return ee; + }(ee) + }; + } +}; + +function getBuiltIn(_) { + if (/^_sum/.test(_)) return builtInReduce._sum; else if (/^_count/.test(_)) return builtInReduce._count; else if (/^_stats/.test(_)) return builtInReduce._stats; else if (/^_/.test(_)) throw new Error(_ + " is not a supported reduce function."); +} + +function mapper(_, ee) { + if ("function" == typeof _ && 2 === _.length) { + var ne = _; + return function(_) { + return ne(_, ee); + }; + } else return evalFunctionWithEval(_.toString(), ee); +} + +function reducer(_) { + var ee = _.toString(), ne = getBuiltIn(ee); + if (ne) return ne; else return evalFunctionWithEval(ee); +} + +function ddocValidator(_, ee) { + var ne = _.views && _.views[ee]; + if ("string" != typeof ne.map) throw new NotFoundError("ddoc " + _._id + " has no string view named " + ee + ", instead found object of type: " + typeof ne.map); +} + +var localDocName = "mrviews", abstract = index_es_default5(localDocName, mapper, reducer, ddocValidator); + +function query2(_, ee, ne) { + return abstract.query.call(this, _, ee, ne); +} + +function viewCleanup2(_) { + return abstract.viewCleanup.call(this, _); +} + +var index4 = { + query: query2, + viewCleanup: viewCleanup2 +}, index_browser_es_default2 = index4, CHECKPOINT_VERSION = 1, REPLICATOR = "pouchdb", CHECKPOINT_HISTORY_SIZE = 5, LOWEST_SEQ = 0; + +function updateCheckpoint(_, ee, ne, ie, re) { + return _.get(ee).catch((function(ne) { + if (404 === ne.status) { + if ("http" === _.adapter || "https" === _.adapter) explainError(404, "PouchDB is just checking if a remote checkpoint exists."); + return { + session_id: ie, + _id: ee, + history: [], + replicator: REPLICATOR, + version: CHECKPOINT_VERSION + }; + } + throw ne; + })).then((function(se) { + if (!re.cancelled) if (se.last_seq !== ne) { + se.history = (se.history || []).filter((function(_) { + return _.session_id !== ie; + })); + se.history.unshift({ + last_seq: ne, + session_id: ie + }); + se.history = se.history.slice(0, CHECKPOINT_HISTORY_SIZE); + se.version = CHECKPOINT_VERSION; + se.replicator = REPLICATOR; + se.session_id = ie; + se.last_seq = ne; + return _.put(se).catch((function(se) { + if (409 === se.status) return updateCheckpoint(_, ee, ne, ie, re); + throw se; + })); + } + })); +} + +var CheckpointerInternal = class { + constructor(_, ee, ne, ie, re = { + writeSourceCheckpoint: true, + writeTargetCheckpoint: true + }) { + this.src = _; + this.target = ee; + this.id = ne; + this.returnValue = ie; + this.opts = re; + if ("undefined" == typeof re.writeSourceCheckpoint) re.writeSourceCheckpoint = true; + if ("undefined" == typeof re.writeTargetCheckpoint) re.writeTargetCheckpoint = true; + } + writeCheckpoint(_, ee) { + var ne = this; + return this.updateTarget(_, ee).then((function() { + return ne.updateSource(_, ee); + })); + } + updateTarget(_, ee) { + if (this.opts.writeTargetCheckpoint) return updateCheckpoint(this.target, this.id, _, ee, this.returnValue); else return Promise.resolve(true); + } + updateSource(_, ee) { + if (this.opts.writeSourceCheckpoint) { + var ne = this; + return updateCheckpoint(this.src, this.id, _, ee, this.returnValue).catch((function(_) { + if (isForbiddenError(_)) { + ne.opts.writeSourceCheckpoint = false; + return true; + } + throw _; + })); + } else return Promise.resolve(true); + } + getCheckpoint() { + var _ = this; + if (!_.opts.writeSourceCheckpoint && !_.opts.writeTargetCheckpoint) return Promise.resolve(LOWEST_SEQ); + if (_.opts && _.opts.writeSourceCheckpoint && !_.opts.writeTargetCheckpoint) return _.src.get(_.id).then((function(_) { + return _.last_seq || LOWEST_SEQ; + })).catch((function(_) { + if (404 !== _.status) throw _; + return LOWEST_SEQ; + })); else return _.target.get(_.id).then((function(ee) { + if (_.opts && _.opts.writeTargetCheckpoint && !_.opts.writeSourceCheckpoint) return ee.last_seq || LOWEST_SEQ; else return _.src.get(_.id).then((function(_) { + if (ee.version !== _.version) return LOWEST_SEQ; + var ne; + if (ee.version) ne = ee.version.toString(); else ne = "undefined"; + if (ne in comparisons) return comparisons[ne](ee, _); else return LOWEST_SEQ; + }), (function(ne) { + if (404 === ne.status && ee.last_seq) return _.src.put({ + _id: _.id, + last_seq: LOWEST_SEQ + }).then((function() { + return LOWEST_SEQ; + }), (function(ne) { + if (isForbiddenError(ne)) { + _.opts.writeSourceCheckpoint = false; + return ee.last_seq; + } + return LOWEST_SEQ; + })); + throw ne; + })); + })).catch((function(_) { + if (404 !== _.status) throw _; + return LOWEST_SEQ; + })); + } +}, comparisons = { + undefined: function(_, ee) { + if (0 === collate(_.last_seq, ee.last_seq)) return ee.last_seq; else return 0; + }, + 1: function(_, ee) { + return compareReplicationLogs(ee, _).last_seq; + } +}; + +function compareReplicationLogs(_, ee) { + if (_.session_id === ee.session_id) return { + last_seq: _.last_seq, + history: _.history + }; else return compareReplicationHistory(_.history, ee.history); +} + +function compareReplicationHistory(_, ee) { + var ne = _[0], ie = _.slice(1), re = ee[0], se = ee.slice(1); + if (!ne || 0 === ee.length) return { + last_seq: LOWEST_SEQ, + history: [] + }; + if (hasSessionId(ne.session_id, ee)) return { + last_seq: ne.last_seq, + history: _ + }; + if (hasSessionId(re.session_id, ie)) return { + last_seq: re.last_seq, + history: se + }; else return compareReplicationHistory(ie, se); +} + +function hasSessionId(_, ee) { + var ne = ee[0], ie = ee.slice(1); + if (!_ || 0 === ee.length) return false; + if (_ === ne.session_id) return true; else return hasSessionId(_, ie); +} + +function isForbiddenError(_) { + return "number" == typeof _.status && 4 === Math.floor(_.status / 100); +} + +function Checkpointer(_, ee, ne, ie, re) { + if (!(this instanceof CheckpointerInternal)) return new CheckpointerInternal(_, ee, ne, ie, re); else return Checkpointer; +} + +var index_es_default6 = Checkpointer, import_spark_md55 = __toESM(require_spark_md5()), setImmediateShim5 = self.setImmediate || self.setTimeout, MD5_CHUNK_SIZE3 = 32768; + +function rawToBase643(_) { + return thisBtoa(_); +} + +function appendBlob3(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.size) ee = ee.slice(ne, ie); + readAsArrayBuffer(ee, (function(ee) { + _.append(ee); + re(); + })); +} + +function appendString3(_, ee, ne, ie, re) { + if (ne > 0 || ie < ee.length) ee = ee.substring(ne, ie); + _.appendBinary(ee); + re(); +} + +function binaryMd53(_, ee) { + var ne = "string" == typeof _, ie = ne ? _.length : _.size, re = Math.min(MD5_CHUNK_SIZE3, ie), se = Math.ceil(ie / re), oe = 0, le = ne ? new import_spark_md55.default : new import_spark_md55.default.ArrayBuffer, ue = ne ? appendString3 : appendBlob3; + function next() { + setImmediateShim5(loadNextChunk); + } + function done() { + var _ = rawToBase643(le.end(true)); + ee(_); + le.destroy(); + } + function loadNextChunk() { + var ee = oe * re, ne = ee + re; + if (++oe < se) ue(le, _, ee, ne, next); else ue(le, _, ee, ne, done); + } + loadNextChunk(); +} + +function sortObjectPropertiesByKey(_) { + return Object.keys(_).sort(collate).reduce((function(ee, ne) { + ee[ne] = _[ne]; + return ee; + }), {}); +} + +function generateReplicationId(_, ee, ne) { + var ie = ne.doc_ids ? ne.doc_ids.sort(collate) : "", re = ne.filter ? ne.filter.toString() : "", se = "", oe = "", le = ""; + if (ne.selector) le = JSON.stringify(ne.selector); + if (ne.filter && ne.query_params) se = JSON.stringify(sortObjectPropertiesByKey(ne.query_params)); + if (ne.filter && "_view" === ne.filter) oe = ne.view.toString(); + return Promise.all([ _.id(), ee.id() ]).then((function(_) { + var ee = _[0] + _[1] + re + oe + se + ie + le; + return new Promise((function(_) { + binaryMd53(ee, _); + })); + })).then((function(_) { + return "_local/" + (_ = _.replace(/\//g, ".").replace(/\+/g, "_")); + })); +} + +var index_es_default7 = generateReplicationId, import_events3 = __toESM(require_events()); + +function fileHasChanged(_, ee, ne) { + return !_._attachments || !_._attachments[ne] || _._attachments[ne].digest !== ee._attachments[ne].digest; +} + +function getDocAttachments(_, ee) { + var ne = Object.keys(ee._attachments); + return Promise.all(ne.map((function(ne) { + return _.getAttachment(ee._id, ne, { + rev: ee._rev + }); + }))); +} + +function getDocAttachmentsFromTargetOrSource(_, ee, ne) { + var ie = isRemote(ee) && !isRemote(_), re = Object.keys(ne._attachments); + if (!ie) return getDocAttachments(ee, ne); else return _.get(ne._id).then((function(ie) { + return Promise.all(re.map((function(re) { + if (fileHasChanged(ie, ne, re)) return ee.getAttachment(ne._id, re); else return _.getAttachment(ie._id, re); + }))); + })).catch((function(_) { + if (404 !== _.status) throw _; + return getDocAttachments(ee, ne); + })); +} + +function createBulkGetOpts(_) { + var ee = []; + Object.keys(_).forEach((function(ne) { + _[ne].missing.forEach((function(_) { + ee.push({ + id: ne, + rev: _ + }); + })); + })); + return { + docs: ee, + revs: true, + latest: true + }; +} + +function getDocs(_, ee, ne, ie) { + ne = clone(ne); + var re = [], se = true; + return Promise.resolve().then((function getAllDocs() { + var oe = createBulkGetOpts(ne); + if (oe.docs.length) return _.bulkGet(oe).then((function(ne) { + if (ie.cancelled) throw new Error("cancelled"); + return Promise.all(ne.results.map((function(ne) { + return Promise.all(ne.docs.map((function(ne) { + var ie = ne.ok; + if (ne.error) se = false; + if (!ie || !ie._attachments) return ie; else return getDocAttachmentsFromTargetOrSource(ee, _, ie).then((_ => { + var ee = Object.keys(ie._attachments); + _.forEach((function(_, ne) { + var re = ie._attachments[ee[ne]]; + delete re.stub; + delete re.length; + re.data = _; + })); + return ie; + })); + }))); + }))).then((function(_) { + re = re.concat(_.flat().filter(Boolean)); + })); + })); + })).then((function returnResult() { + return { + ok: se, + docs: re + }; + })); +} + +var STARTING_BACK_OFF = 0; + +function backOff(_, ee, ne, ie) { + if (false !== _.retry) { + if ("function" != typeof _.back_off_function) _.back_off_function = defaultBackOff; + ee.emit("requestError", ne); + if ("active" === ee.state || "pending" === ee.state) { + ee.emit("paused", ne); + ee.state = "stopped"; + var re = function backoffTimeSet() { + _.current_back_off = STARTING_BACK_OFF; + }; + ee.once("paused", (function removeBackOffTimeSet() { + ee.removeListener("active", re); + })); + ee.once("active", re); + } + _.current_back_off = _.current_back_off || STARTING_BACK_OFF; + _.current_back_off = _.back_off_function(_.current_back_off); + setTimeout(ie, _.current_back_off); + } else { + ee.emit("error", ne); + ee.removeAllListeners(); + } +} + +function replicate(_, ee, ne, ie, re) { + var se, oe, le, ue, de = [], fe = { + seq: 0, + changes: [], + docs: [] + }, he = false, pe = false, ge = false, me = 0, ye = 0, Se = ne.continuous || ne.live || false, Ee = ne.batch_size || 100, ve = ne.batches_limit || 10, Ce = ne.style || "all_docs", we = false, Le = ne.doc_ids, Oe = ne.selector, ke = [], Ae = uuid(); + re = re || { + ok: true, + start_time: (new Date).toISOString(), + docs_read: 0, + docs_written: 0, + doc_write_failures: 0, + errors: [] + }; + var xe = {}; + ie.ready(_, ee); + function initCheckpointer() { + if (le) return Promise.resolve(); else return index_es_default7(_, ee, ne).then((function(re) { + oe = re; + var se = {}; + if (false === ne.checkpoint) se = { + writeSourceCheckpoint: false, + writeTargetCheckpoint: false + }; else if ("source" === ne.checkpoint) se = { + writeSourceCheckpoint: true, + writeTargetCheckpoint: false + }; else if ("target" === ne.checkpoint) se = { + writeSourceCheckpoint: false, + writeTargetCheckpoint: true + }; else se = { + writeSourceCheckpoint: true, + writeTargetCheckpoint: true + }; + le = new index_es_default6(_, ee, oe, ie, se); + })); + } + function writeDocs() { + ke = []; + if (0 !== se.docs.length) { + var _ = se.docs, oe = { + timeout: ne.timeout + }; + return ee.bulkDocs({ + docs: _, + new_edits: false + }, oe).then((function(ee) { + if (ie.cancelled) { + completeReplication(); + throw new Error("cancelled"); + } + var ne = Object.create(null); + ee.forEach((function(_) { + if (_.error) ne[_.id] = _; + })); + var se = Object.keys(ne).length; + re.doc_write_failures += se; + re.docs_written += _.length - se; + _.forEach((function(_) { + var ee = ne[_._id]; + if (ee) { + re.errors.push(ee); + var se = (ee.name || "").toLowerCase(); + if ("unauthorized" === se || "forbidden" === se) ie.emit("denied", clone(ee)); else throw ee; + } else ke.push(_); + })); + }), (function(ee) { + re.doc_write_failures += _.length; + throw ee; + })); + } + } + function finishBatch() { + if (se.error) throw new Error("There was a problem getting docs."); + re.last_seq = ye = se.seq; + var ee = clone(re); + if (ke.length) { + ee.docs = ke; + if ("number" == typeof se.pending) { + ee.pending = se.pending; + delete se.pending; + } + ie.emit("change", ee); + } + he = true; + _.info().then((function(ee) { + var ne = _.activeTasks.get(ue); + if (se && ne) { + var ie = ne.completed_items || 0, re = parseInt(ee.update_seq, 10) - parseInt(me, 10); + _.activeTasks.update(ue, { + completed_items: ie + se.changes.length, + total_items: re + }); + } + })); + return le.writeCheckpoint(se.seq, Ae).then((function() { + ie.emit("checkpoint", { + checkpoint: se.seq + }); + he = false; + if (ie.cancelled) { + completeReplication(); + throw new Error("cancelled"); + } + se = void 0; + getChanges(); + })).catch((function(_) { + onCheckpointError(_); + throw _; + })); + } + function getBatchDocs() { + return getDocs(_, ee, se.diffs, ie).then((function(_) { + se.error = !_.ok; + _.docs.forEach((function(_) { + delete se.diffs[_._id]; + re.docs_read++; + se.docs.push(_); + })); + })); + } + function startNextBatch() { + if (!ie.cancelled && !se) if (0 !== de.length) { + se = de.shift(); + ie.emit("checkpoint", { + start_next_batch: se.seq + }); + (function getDiffs() { + var _ = {}; + se.changes.forEach((function(ee) { + ie.emit("checkpoint", { + revs_diff: ee + }); + if ("_user/" !== ee.id) _[ee.id] = ee.changes.map((function(_) { + return _.rev; + })); + })); + return ee.revsDiff(_).then((function(_) { + if (ie.cancelled) { + completeReplication(); + throw new Error("cancelled"); + } + se.diffs = _; + })); + })().then(getBatchDocs).then(writeDocs).then(finishBatch).then(startNextBatch).catch((function(_) { + abortReplication("batch processing terminated with error", _); + })); + } else processPendingBatch(true); + } + function processPendingBatch(_) { + if (0 !== fe.changes.length) { + if (_ || pe || fe.changes.length >= Ee) { + de.push(fe); + fe = { + seq: 0, + changes: [], + docs: [] + }; + if ("pending" === ie.state || "stopped" === ie.state) { + ie.state = "active"; + ie.emit("active"); + } + startNextBatch(); + } + } else if (0 === de.length && !se) { + if (Se && xe.live || pe) { + ie.state = "pending"; + ie.emit("paused"); + } + if (pe) completeReplication(); + } + } + function abortReplication(_, ee) { + if (!ge) { + if (!ee.message) ee.message = _; + re.ok = false; + re.status = "aborting"; + de = []; + fe = { + seq: 0, + changes: [], + docs: [] + }; + completeReplication(ee); + } + } + function completeReplication(se) { + if (!ge) { + if (ie.cancelled) { + re.status = "cancelled"; + if (he) return; + } + re.status = re.status || "complete"; + re.end_time = (new Date).toISOString(); + re.last_seq = ye; + ge = true; + _.activeTasks.remove(ue, se); + if (se) { + (se = createError(se)).result = re; + var oe = (se.name || "").toLowerCase(); + if ("unauthorized" === oe || "forbidden" === oe) { + ie.emit("error", se); + ie.removeAllListeners(); + } else backOff(ne, ie, se, (function() { + replicate(_, ee, ne, ie); + })); + } else { + ie.emit("complete", re); + ie.removeAllListeners(); + } + } + } + function onChange(ee, re, se) { + if (ie.cancelled) return completeReplication(); + if ("number" == typeof re) fe.pending = re; + if (filterChange(ne)(ee)) { + fe.seq = ee.seq || se; + fe.changes.push(ee); + ie.emit("checkpoint", { + pending_batch: fe.seq + }); + nextTick((function() { + processPendingBatch(0 === de.length && xe.live); + })); + } else { + var oe = _.activeTasks.get(ue); + if (oe) { + var le = oe.completed_items || 0; + _.activeTasks.update(ue, { + completed_items: ++le + }); + } + } + } + function onChangesComplete(_) { + we = false; + if (ie.cancelled) return completeReplication(); + if (_.results.length > 0) { + xe.since = _.results[_.results.length - 1].seq; + getChanges(); + processPendingBatch(true); + } else { + var complete = function() { + if (Se) { + xe.live = true; + getChanges(); + } else pe = true; + processPendingBatch(true); + }; + if (!se && 0 === _.results.length) { + he = true; + le.writeCheckpoint(_.last_seq, Ae).then((function() { + he = false; + re.last_seq = ye = _.last_seq; + if (ie.cancelled) { + completeReplication(); + throw new Error("cancelled"); + } else complete(); + })).catch(onCheckpointError); + } else complete(); + } + } + function onChangesError(_) { + we = false; + if (ie.cancelled) return completeReplication(); + abortReplication("changes rejected", _); + } + function getChanges() { + if (!we && !pe && de.length < ve) { + we = true; + if (ie._changes) { + ie.removeListener("cancel", ie._abortChanges); + ie._changes.cancel(); + } + ie.once("cancel", abortChanges); + var ee = _.changes(xe).on("change", onChange); + ee.then(removeListener, removeListener); + ee.then(onChangesComplete).catch(onChangesError); + if (ne.retry) { + ie._changes = ee; + ie._abortChanges = abortChanges; + } + } + function abortChanges() { + ee.cancel(); + } + function removeListener() { + ie.removeListener("cancel", abortChanges); + } + } + function createTask(ee) { + return _.info().then((function(ie) { + var re = "undefined" == typeof ne.since ? parseInt(ie.update_seq, 10) - parseInt(ee, 10) : parseInt(ie.update_seq, 10); + ue = _.activeTasks.add({ + name: `${Se ? "continuous " : ""}replication from ${ie.db_name}`, + total_items: re + }); + return ee; + })); + } + function startChanges() { + initCheckpointer().then((function() { + if (!ie.cancelled) return le.getCheckpoint().then(createTask).then((function(_) { + me = _; + xe = { + since: ye = _, + limit: Ee, + batch_size: Ee, + style: Ce, + doc_ids: Le, + selector: Oe, + return_docs: true + }; + if (ne.filter) if ("string" != typeof ne.filter) xe.include_docs = true; else xe.filter = ne.filter; + if ("heartbeat" in ne) xe.heartbeat = ne.heartbeat; + if ("timeout" in ne) xe.timeout = ne.timeout; + if (ne.query_params) xe.query_params = ne.query_params; + if (ne.view) xe.view = ne.view; + getChanges(); + })); else completeReplication(); + })).catch((function(_) { + abortReplication("getCheckpoint rejected with ", _); + })); + } + function onCheckpointError(_) { + he = false; + abortReplication("writeCheckpoint completed with error", _); + } + if (!ie.cancelled) { + if (!ie._addedListeners) { + ie.once("cancel", completeReplication); + if ("function" == typeof ne.complete) { + ie.once("error", ne.complete); + ie.once("complete", (function(_) { + ne.complete(null, _); + })); + } + ie._addedListeners = true; + } + if ("undefined" == typeof ne.since) startChanges(); else initCheckpointer().then((function() { + he = true; + return le.writeCheckpoint(ne.since, Ae); + })).then((function() { + he = false; + if (!ie.cancelled) { + ye = ne.since; + startChanges(); + } else completeReplication(); + })).catch(onCheckpointError); + } else completeReplication(); +} + +var Replication = class extends import_events3.default { + constructor() { + super(); + this.cancelled = false; + this.state = "pending"; + const _ = new Promise(((_, ee) => { + this.once("complete", _); + this.once("error", ee); + })); + this.then = function(ee, ne) { + return _.then(ee, ne); + }; + this.catch = function(ee) { + return _.catch(ee); + }; + this.catch((function() {})); + } + cancel() { + this.cancelled = true; + this.state = "cancelled"; + this.emit("cancel"); + } + ready(_, ee) { + if (this._readyCalled) return; + this._readyCalled = true; + const onDestroy2 = () => { + this.cancel(); + }; + _.once("destroyed", onDestroy2); + ee.once("destroyed", onDestroy2); + function cleanup() { + _.removeListener("destroyed", onDestroy2); + ee.removeListener("destroyed", onDestroy2); + } + this.once("complete", cleanup); + this.once("error", cleanup); + } +}; + +function toPouch(_, ee) { + var ne = ee.PouchConstructor; + if ("string" == typeof _) return new ne(_, ee); else return _; +} + +function replicateWrapper(_, ee, ne, ie) { + if ("function" == typeof ne) { + ie = ne; + ne = {}; + } + if ("undefined" == typeof ne) ne = {}; + if (ne.doc_ids && !Array.isArray(ne.doc_ids)) throw createError(BAD_REQUEST, "`doc_ids` filter parameter is not a list."); + ne.complete = ie; + (ne = clone(ne)).continuous = ne.continuous || ne.live; + ne.retry = "retry" in ne ? ne.retry : false; + ne.PouchConstructor = ne.PouchConstructor || this; + var re = new Replication(ne); + replicate(toPouch(_, ne), toPouch(ee, ne), ne, re); + return re; +} + +function sync(_, ee, ne, ie) { + if ("function" == typeof ne) { + ie = ne; + ne = {}; + } + if ("undefined" == typeof ne) ne = {}; + (ne = clone(ne)).PouchConstructor = ne.PouchConstructor || this; + _ = toPouch(_, ne); + ee = toPouch(ee, ne); + return new Sync(_, ee, ne, ie); +} + +var Sync = class extends import_events3.default { + constructor(_, ee, ne, ie) { + super(); + this.canceled = false; + const re = ne.push ? Object.assign({}, ne, ne.push) : ne, se = ne.pull ? Object.assign({}, ne, ne.pull) : ne; + this.push = replicateWrapper(_, ee, re); + this.pull = replicateWrapper(ee, _, se); + this.pushPaused = true; + this.pullPaused = true; + const pullChange = _ => { + this.emit("change", { + direction: "pull", + change: _ + }); + }, pushChange = _ => { + this.emit("change", { + direction: "push", + change: _ + }); + }, pushDenied = _ => { + this.emit("denied", { + direction: "push", + doc: _ + }); + }, pullDenied = _ => { + this.emit("denied", { + direction: "pull", + doc: _ + }); + }, pushPaused = () => { + this.pushPaused = true; + if (this.pullPaused) this.emit("paused"); + }, pullPaused = () => { + this.pullPaused = true; + if (this.pushPaused) this.emit("paused"); + }, pushActive = () => { + this.pushPaused = false; + if (this.pullPaused) this.emit("active", { + direction: "push" + }); + }, pullActive = () => { + this.pullPaused = false; + if (this.pushPaused) this.emit("active", { + direction: "pull" + }); + }; + let oe = {}; + const removeAll = _ => (ee, ne) => { + if ("change" === ee && (ne === pullChange || ne === pushChange) || "denied" === ee && (ne === pullDenied || ne === pushDenied) || "paused" === ee && (ne === pullPaused || ne === pushPaused) || "active" === ee && (ne === pullActive || ne === pushActive)) { + if (!(ee in oe)) oe[ee] = {}; + oe[ee][_] = true; + if (2 === Object.keys(oe[ee]).length) this.removeAllListeners(ee); + } + }; + if (ne.live) { + this.push.on("complete", this.pull.cancel.bind(this.pull)); + this.pull.on("complete", this.push.cancel.bind(this.push)); + } + function addOneListener(_, ee, ne) { + if (-1 == _.listeners(ee).indexOf(ne)) _.on(ee, ne); + } + this.on("newListener", (function(_) { + if ("change" === _) { + addOneListener(this.pull, "change", pullChange); + addOneListener(this.push, "change", pushChange); + } else if ("denied" === _) { + addOneListener(this.pull, "denied", pullDenied); + addOneListener(this.push, "denied", pushDenied); + } else if ("active" === _) { + addOneListener(this.pull, "active", pullActive); + addOneListener(this.push, "active", pushActive); + } else if ("paused" === _) { + addOneListener(this.pull, "paused", pullPaused); + addOneListener(this.push, "paused", pushPaused); + } + })); + this.on("removeListener", (function(_) { + if ("change" === _) { + this.pull.removeListener("change", pullChange); + this.push.removeListener("change", pushChange); + } else if ("denied" === _) { + this.pull.removeListener("denied", pullDenied); + this.push.removeListener("denied", pushDenied); + } else if ("active" === _) { + this.pull.removeListener("active", pullActive); + this.push.removeListener("active", pushActive); + } else if ("paused" === _) { + this.pull.removeListener("paused", pullPaused); + this.push.removeListener("paused", pushPaused); + } + })); + this.pull.on("removeListener", removeAll("pull")); + this.push.on("removeListener", removeAll("push")); + const le = Promise.all([ this.push, this.pull ]).then((_ => { + const ee = { + push: _[0], + pull: _[1] + }; + this.emit("complete", ee); + if (ie) ie(null, ee); + this.removeAllListeners(); + return ee; + }), (_ => { + this.cancel(); + if (ie) ie(_); else this.emit("error", _); + this.removeAllListeners(); + if (ie) throw _; + })); + this.then = function(_, ee) { + return le.then(_, ee); + }; + this.catch = function(_) { + return le.catch(_); + }; + } + cancel() { + if (!this.canceled) { + this.canceled = true; + this.push.cancel(); + this.pull.cancel(); + } + } +}; + +function replication(_) { + _.replicate = replicateWrapper; + _.sync = sync; + Object.defineProperty(_.prototype, "replicate", { + get: function() { + var _ = this; + if ("undefined" == typeof this.replicateMethods) this.replicateMethods = { + from: function(ee, ne, ie) { + return _.constructor.replicate(ee, _, ne, ie); + }, + to: function(ee, ne, ie) { + return _.constructor.replicate(_, ee, ne, ie); + } + }; + return this.replicateMethods; + } + }); + _.prototype.sync = function(_, ee, ne) { + return this.constructor.sync(this, _, ee, ne); + }; +} + +var index_es_default8 = replication, import_spark_md56 = __toESM(require_spark_md5()), setImmediateShim6 = self.setImmediate || self.setTimeout; + +function stringMd53(_) { + return import_spark_md56.default.hash(_); +} + +var nativeFlat = (..._) => _.flat(1 / 0), polyFlat = (..._) => { + let ee = []; + for (const ne of _) if (Array.isArray(ne)) ee = ee.concat(polyFlat(...ne)); else ee.push(ne); + return ee; +}, flatten = "function" == typeof Array.prototype.flat ? nativeFlat : polyFlat; + +function mergeObjects(_) { + const ee = {}; + for (const ne of _) Object.assign(ee, ne); + return ee; +} + +function pick2(_, ee) { + const ne = {}; + for (const ie of ee) { + const ee = parseField(ie), re = getFieldFromDoc(_, ee); + if ("undefined" != typeof re) setFieldInDoc(ne, ee, re); + } + return ne; +} + +function oneArrayIsSubArrayOfOther(_, ee) { + for (let ne = 0, ie = Math.min(_.length, ee.length); ne < ie; ne++) if (_[ne] !== ee[ne]) return false; + return true; +} + +function oneArrayIsStrictSubArrayOfOther(_, ee) { + if (_.length > ee.length) return false; else return oneArrayIsSubArrayOfOther(_, ee); +} + +function oneSetIsSubArrayOfOther(_, ee) { + _ = _.slice(); + for (const ne of ee) { + if (!_.length) break; + const ee = _.indexOf(ne); + if (-1 === ee) return false; else _.splice(ee, 1); + } + return true; +} + +function arrayToObject(_) { + const ee = {}; + for (const ne of _) ee[ne] = true; + return ee; +} + +function max2(_, ee) { + let ne = null, ie = -1; + for (const re of _) { + const _ = ee(re); + if (_ > ie) { + ie = _; + ne = re; + } + } + return ne; +} + +function arrayEquals(_, ee) { + if (_.length !== ee.length) return false; + for (let ne = 0, ie = _.length; ne < ie; ne++) if (_[ne] !== ee[ne]) return false; + return true; +} + +function uniq2(_) { + return Array.from(new Set(_)); +} + +function resolveToCallback(_) { + return function(...ee) { + const ne = ee[ee.length - 1]; + if ("function" == typeof ne) { + const ie = ne.bind(null, null), re = ne.bind(null); + _.apply(this, ee.slice(0, -1)).then(ie, re); + } else return _.apply(this, ee); + }; +} + +function massageCreateIndexRequest(_) { + if (!(_ = clone(_)).index) _.index = {}; + for (const ee of [ "type", "name", "ddoc" ]) if (_.index[ee]) { + _[ee] = _.index[ee]; + delete _.index[ee]; + } + if (_.fields) { + _.index.fields = _.fields; + delete _.fields; + } + if (!_.type) _.type = "json"; + return _; +} + +function isNonNullObject(_) { + return "object" == typeof _ && null !== _; +} + +function checkFieldValueType(_, ee, ne) { + let ie = "", re = ee, se = true; + if (-1 !== [ "$in", "$nin", "$or", "$and", "$mod", "$nor", "$all" ].indexOf(_)) if (!Array.isArray(ee)) ie = "Query operator " + _ + " must be an array."; + if (-1 !== [ "$not", "$elemMatch", "$allMatch" ].indexOf(_)) if (!(!Array.isArray(ee) && isNonNullObject(ee))) ie = "Query operator " + _ + " must be an object."; + if ("$mod" === _ && Array.isArray(ee)) if (2 !== ee.length) ie = "Query operator $mod must be in the format [divisor, remainder], where divisor and remainder are both integers."; else { + const _ = ee[0], ne = ee[1]; + if (0 === _) { + ie = "Query operator $mod's divisor cannot be 0, cannot divide by zero."; + se = false; + } + if ("number" != typeof _ || parseInt(_, 10) !== _) { + ie = "Query operator $mod's divisor is not an integer."; + re = _; + } + if (parseInt(ne, 10) !== ne) { + ie = "Query operator $mod's remainder is not an integer."; + re = ne; + } + } + if ("$exists" === _) if ("boolean" != typeof ee) ie = "Query operator $exists must be a boolean."; + if ("$type" === _) { + const _ = [ "null", "boolean", "number", "string", "array", "object" ], ne = '"' + _.slice(0, _.length - 1).join('", "') + '", or "' + _[_.length - 1] + '"'; + if ("string" != typeof ee) ie = "Query operator $type must be a string. Supported values: " + ne + "."; else if (-1 == _.indexOf(ee)) ie = "Query operator $type must be a string. Supported values: " + ne + "."; + } + if ("$size" === _) if (parseInt(ee, 10) !== ee) ie = "Query operator $size must be a integer."; + if ("$regex" === _) if ("string" != typeof ee) if (ne) ie = "Query operator $regex must be a string."; else if (!(ee instanceof RegExp)) ie = "Query operator $regex must be a string or an instance of a javascript regular expression."; + if (ie) { + if (se) ie += " Received" + (null === re ? " " : Array.isArray(re) ? " array" : " " + typeof re) + ": " + (isNonNullObject(re) ? JSON.stringify(re, null, "\t") : re); + throw new Error(ie); + } +} + +var requireValidation = [ "$all", "$allMatch", "$and", "$elemMatch", "$exists", "$in", "$mod", "$nin", "$nor", "$not", "$or", "$regex", "$size", "$type" ], arrayTypeComparisonOperators = [ "$in", "$nin", "$mod", "$all" ], equalityOperators = [ "$eq", "$gt", "$gte", "$lt", "$lte" ]; + +function validateSelector(_, ee) { + if (Array.isArray(_)) { + for (const ne of _) if (isNonNullObject(ne)) validateSelector(ne, ee); + } else for (const [ne, ie] of Object.entries(_)) { + if (-1 !== requireValidation.indexOf(ne)) checkFieldValueType(ne, ie, ee); + if (-1 === equalityOperators.indexOf(ne)) if (-1 === arrayTypeComparisonOperators.indexOf(ne)) if (isNonNullObject(ie)) validateSelector(ie, ee); + } +} + +async function dbFetch(_, ee, ne) { + if (ne.body) { + ne.body = JSON.stringify(ne.body); + ne.headers = new h({ + "Content-type": "application/json" + }); + } + const ie = await _.fetch(ee, ne), re = await ie.json(); + if (!ie.ok) { + re.status = ie.status; + throw generateErrorFromResponse(createError(re)); + } + return re; +} + +async function createIndex(_, ee) { + return await dbFetch(_, "_index", { + method: "POST", + body: massageCreateIndexRequest(ee) + }); +} + +async function find(_, ee) { + validateSelector(ee.selector, true); + return await dbFetch(_, "_find", { + method: "POST", + body: ee + }); +} + +async function explain(_, ee) { + return await dbFetch(_, "_explain", { + method: "POST", + body: ee + }); +} + +async function getIndexes(_) { + return await dbFetch(_, "_index", { + method: "GET" + }); +} + +async function deleteIndex(_, ee) { + const ne = ee.ddoc, ie = ee.type || "json", re = ee.name; + if (!ne) throw new Error("you must provide an index's ddoc"); + if (!re) throw new Error("you must provide an index's name"); + const se = "_index/" + [ ne, ie, re ].map(encodeURIComponent).join("/"); + return await dbFetch(_, se, { + method: "DELETE" + }); +} + +function getDeepValue(_, ee) { + for (const ne of ee) if (void 0 === (_ = _[ne])) return; + return _; +} + +function createDeepMultiMapper(_, ee, ne) { + return function(ie) { + if (ne && !matchesSelector(ie, ne)) return; + const re = []; + for (const ee of _) { + const _ = getDeepValue(ie, parseField(ee)); + if (void 0 === _) return; + re.push(_); + } + ee(re); + }; +} + +function createDeepSingleMapper(_, ee, ne) { + const ie = parseField(_); + return function(_) { + if (ne && !matchesSelector(_, ne)) return; + const re = getDeepValue(_, ie); + if (void 0 !== re) ee(re); + }; +} + +function createShallowSingleMapper(_, ee, ne) { + return function(ie) { + if (!ne || matchesSelector(ie, ne)) ee(ie[_]); + }; +} + +function createShallowMultiMapper(_, ee, ne) { + return function(ie) { + if (ne && !matchesSelector(ie, ne)) return; + const re = _.map((_ => ie[_])); + ee(re); + }; +} + +function checkShallow(_) { + return _.every((_ => -1 === _.indexOf("."))); +} + +function createMapper(_, ee, ne) { + const ie = checkShallow(_), re = 1 === _.length; + if (ie) if (re) return createShallowSingleMapper(_[0], ee, ne); else return createShallowMultiMapper(_, ee, ne); else if (re) return createDeepSingleMapper(_[0], ee, ne); else return createDeepMultiMapper(_, ee, ne); +} + +function mapper2(_, ee) { + return createMapper(Object.keys(_.fields), ee, _.partial_filter_selector); +} + +function reducer2() { + throw new Error("reduce not supported"); +} + +function ddocValidator2(_, ee) { + const ne = _.views[ee]; + if (!ne.map || !ne.map.fields) throw new Error("ddoc " + _._id + " with view " + ee + " doesn't have map.fields defined. maybe it wasn't created by this plugin?"); +} + +var abstractMapper = index_es_default5("indexes", mapper2, reducer2, ddocValidator2); + +function abstractMapper$1(_) { + if (_._customFindAbstractMapper) return { + query: function addQueryFallback(ee, ne) { + const ie = abstractMapper.query.bind(this); + return _._customFindAbstractMapper.query.call(this, ee, ne, ie); + }, + viewCleanup: function addViewCleanupFallback() { + const ee = abstractMapper.viewCleanup.bind(this); + return _._customFindAbstractMapper.viewCleanup.call(this, ee); + } + }; else return abstractMapper; +} + +function massageSort(_) { + if (!Array.isArray(_)) throw new Error("invalid sort json - should be an array"); + return _.map((function(_) { + if ("string" == typeof _) { + const ee = {}; + ee[_] = "asc"; + return ee; + } else return _; + })); +} + +var ddocIdPrefix = /^_design\//; + +function massageUseIndex(_) { + let ee = []; + if ("string" == typeof _) ee.push(_); else ee = _; + return ee.map((function(_) { + return _.replace(ddocIdPrefix, ""); + })); +} + +function massageIndexDef(_) { + _.fields = _.fields.map((function(_) { + if ("string" == typeof _) { + const ee = {}; + ee[_] = "asc"; + return ee; + } + return _; + })); + if (_.partial_filter_selector) _.partial_filter_selector = massageSelector(_.partial_filter_selector); + return _; +} + +function getKeyFromDoc(_, ee) { + return ee.def.fields.map((ee => { + const ne = getKey(ee); + return getFieldFromDoc(_, parseField(ne)); + })); +} + +function filterInclusiveStart(_, ee, ne) { + const ie = ne.def.fields; + let re = 0; + for (const se of _) { + let _ = getKeyFromDoc(se.doc, ne); + if (1 === ie.length) _ = _[0]; else for (;_.length > ee.length; ) _.pop(); + if (Math.abs(collate(_, ee)) > 0) break; + ++re; + } + return re > 0 ? _.slice(re) : _; +} + +function reverseOptions(_) { + const ee = clone(_); + delete ee.startkey; + delete ee.endkey; + delete ee.inclusive_start; + delete ee.inclusive_end; + if ("endkey" in _) ee.startkey = _.endkey; + if ("startkey" in _) ee.endkey = _.startkey; + if ("inclusive_start" in _) ee.inclusive_end = _.inclusive_start; + if ("inclusive_end" in _) ee.inclusive_start = _.inclusive_end; + return ee; +} + +function validateIndex(_) { + const ee = _.fields.filter((function(_) { + return "asc" === getValue(_); + })); + if (0 !== ee.length && ee.length !== _.fields.length) throw new Error("unsupported mixed sorting"); +} + +function validateSort(_, ee) { + if (ee.defaultUsed && _.sort) { + const ee = _.sort.filter((function(_) { + return "_id" !== Object.keys(_)[0]; + })).map((function(_) { + return Object.keys(_)[0]; + })); + if (ee.length > 0) throw new Error('Cannot sort on field(s) "' + ee.join(",") + '" when using the default index'); + } + if (!ee.defaultUsed) ; +} + +function validateFindRequest(_) { + if ("object" != typeof _.selector) throw new Error("you must provide a selector when you find()"); +} + +function getUserFields(_, ee) { + const ne = Object.keys(_), ie = ee ? ee.map(getKey) : []; + let re; + if (ne.length >= ie.length) re = ne; else re = ie; + if (0 === ie.length) return { + fields: re + }; + re = re.sort((function(_, ee) { + let ne = ie.indexOf(_); + if (-1 === ne) ne = Number.MAX_VALUE; + let re = ie.indexOf(ee); + if (-1 === re) re = Number.MAX_VALUE; + return ne < re ? -1 : ne > re ? 1 : 0; + })); + return { + fields: re, + sortOrder: ee.map(getKey) + }; +} + +async function createIndex$1(_, ee) { + const ne = clone((ee = massageCreateIndexRequest(ee)).index); + ee.index = massageIndexDef(ee.index); + validateIndex(ee.index); + let ie; + function getMd5() { + return ie || (ie = stringMd53(JSON.stringify(ee))); + } + const re = ee.name || "idx-" + getMd5(), se = ee.ddoc || "idx-" + getMd5(), oe = "_design/" + se; + let le = false, ue = false; + _.constructor.emit("debug", [ "find", "creating index", oe ]); + await upsert(_, oe, (function updateDdoc(_) { + if (_._rev && "query" !== _.language) le = true; + _.language = "query"; + _.views = _.views || {}; + ue = !!_.views[re]; + if (ue) return false; + _.views[re] = { + map: { + fields: mergeObjects(ee.index.fields), + partial_filter_selector: ee.index.partial_filter_selector + }, + reduce: "_count", + options: { + def: ne + } + }; + return _; + })); + if (le) throw new Error('invalid language for ddoc with id "' + oe + '" (should be "query")'); + const de = se + "/" + re; + await abstractMapper$1(_).query.call(_, de, { + limit: 0, + reduce: false + }); + return { + id: oe, + name: re, + result: ue ? "exists" : "created" + }; +} + +async function getIndexes$1(_) { + const ee = await _.allDocs({ + startkey: "_design/", + endkey: "_design/￿", + include_docs: true + }), ne = { + indexes: [ { + ddoc: null, + name: "_all_docs", + type: "special", + def: { + fields: [ { + _id: "asc" + } ] + } + } ] + }; + ne.indexes = flatten(ne.indexes, ee.rows.filter((function(_) { + return "query" === _.doc.language; + })).map((function(_) { + return (void 0 !== _.doc.views ? Object.keys(_.doc.views) : []).map((function(ee) { + const ne = _.doc.views[ee]; + return { + ddoc: _.id, + name: ee, + type: "json", + def: massageIndexDef(ne.options.def) + }; + })); + }))); + ne.indexes.sort((function(_, ee) { + return compare(_.name, ee.name); + })); + ne.total_rows = ne.indexes.length; + return ne; +} + +var COLLATE_LO = null, COLLATE_HI = { + "￿": {} +}, SHORT_CIRCUIT_QUERY = { + queryOpts: { + limit: 0, + startkey: COLLATE_HI, + endkey: COLLATE_LO + }, + inMemoryFields: [] +}; + +function checkFieldInIndex(_, ee) { + return _.def.fields.some((_ => getKey(_) === ee)); +} + +function userOperatorLosesPrecision(_, ee) { + return "$eq" !== getKey(_[ee]); +} + +function sortFieldsByIndex(_, ee) { + const ne = ee.def.fields.map(getKey); + return _.slice().sort((function(_, ee) { + let ie = ne.indexOf(_), re = ne.indexOf(ee); + if (-1 === ie) ie = Number.MAX_VALUE; + if (-1 === re) re = Number.MAX_VALUE; + return compare(ie, re); + })); +} + +function getBasicInMemoryFields(_, ee, ne) { + let ie = false; + for (let re = 0, se = (ne = sortFieldsByIndex(ne, _)).length; re < se; re++) { + const oe = ne[re]; + if (ie || !checkFieldInIndex(_, oe)) return ne.slice(re); + if (re < se - 1 && userOperatorLosesPrecision(ee, oe)) ie = true; + } + return []; +} + +function getInMemoryFieldsFromNe(_) { + const ee = []; + for (const [ne, ie] of Object.entries(_)) for (const _ of Object.keys(ie)) if ("$ne" === _) ee.push(ne); + return ee; +} + +function getInMemoryFields(_, ee, ne, ie) { + return sortFieldsByIndex(uniq2(flatten(_, getBasicInMemoryFields(ee, ne, ie), getInMemoryFieldsFromNe(ne))), ee); +} + +function checkIndexFieldsMatch(_, ee, ne) { + if (ee) { + const ie = oneArrayIsStrictSubArrayOfOther(ee, _), re = oneArrayIsSubArrayOfOther(ne, _); + return ie && re; + } + return oneSetIsSubArrayOfOther(ne, _); +} + +var logicalMatchers = [ "$eq", "$gt", "$gte", "$lt", "$lte" ]; + +function isNonLogicalMatcher(_) { + return -1 === logicalMatchers.indexOf(_); +} + +function checkFieldsLogicallySound(_, ee) { + const ne = ee[_[0]]; + if ("undefined" == typeof ne) return true; else return !(1 === Object.keys(ne).length && "$ne" === getKey(ne)); +} + +function checkIndexMatches(_, ee, ne, ie) { + const re = _.def.fields.map(getKey); + if (!checkIndexFieldsMatch(re, ee, ne)) return false; else return checkFieldsLogicallySound(re, ie); +} + +function findMatchingIndexes(_, ee, ne, ie) { + return ie.filter((function(ie) { + return checkIndexMatches(ie, ne, ee, _); + })); +} + +function findBestMatchingIndex(_, ee, ne, ie, re) { + const se = findMatchingIndexes(_, ee, ne, ie); + if (0 === se.length) { + if (re) throw { + error: "no_usable_index", + message: "There is no index available for this selector." + }; + const _ = ie[0]; + _.defaultUsed = true; + return _; + } + if (1 === se.length && !re) return se[0]; + const oe = arrayToObject(ee); + if (re) { + const _ = "_design/" + re[0], ee = 2 === re.length ? re[1] : false, ne = se.find((function(ne) { + if (ee && ne.ddoc === _ && ee === ne.name) return true; + if (ne.ddoc === _) return true; else return false; + })); + if (!ne) throw { + error: "unknown_error", + message: "Could not find that index or could not use that index for the query" + }; + return ne; + } + return max2(se, (function scoreIndex(_) { + const ee = _.def.fields.map(getKey); + let ne = 0; + for (const _ of ee) if (oe[_]) ne++; + return ne; + })); +} + +function getSingleFieldQueryOptsFor(_, ee) { + switch (_) { + case "$eq": + return { + key: ee + }; + + case "$lte": + return { + endkey: ee + }; + + case "$gte": + return { + startkey: ee + }; + + case "$lt": + return { + endkey: ee, + inclusive_end: false + }; + + case "$gt": + return { + startkey: ee, + inclusive_start: false + }; + } + return { + startkey: COLLATE_LO + }; +} + +function getSingleFieldCoreQueryPlan(_, ee) { + const ne = getKey(ee.def.fields[0]), ie = _[ne] || {}, re = [], se = Object.keys(ie); + let oe; + for (const _ of se) { + if (isNonLogicalMatcher(_)) re.push(ne); + const ee = getSingleFieldQueryOptsFor(_, ie[_]); + if (oe) oe = mergeObjects([ oe, ee ]); else oe = ee; + } + return { + queryOpts: oe, + inMemoryFields: re + }; +} + +function getMultiFieldCoreQueryPlan(_, ee) { + switch (_) { + case "$eq": + return { + startkey: ee, + endkey: ee + }; + + case "$lte": + return { + endkey: ee + }; + + case "$gte": + return { + startkey: ee + }; + + case "$lt": + return { + endkey: ee, + inclusive_end: false + }; + + case "$gt": + return { + startkey: ee, + inclusive_start: false + }; + } +} + +function getMultiFieldQueryOpts(_, ee) { + const ne = ee.def.fields.map(getKey); + let ie = []; + const re = [], se = []; + let oe, le; + function finish(_) { + if (false !== oe) re.push(COLLATE_LO); + if (false !== le) se.push(COLLATE_HI); + ie = ne.slice(_); + } + for (let ee = 0, ie = ne.length; ee < ie; ee++) { + const ie = _[ne[ee]]; + if (!ie || !Object.keys(ie).length) { + finish(ee); + break; + } else if (Object.keys(ie).some(isNonLogicalMatcher)) { + finish(ee); + break; + } else if (ee > 0) { + const re = "$gt" in ie || "$gte" in ie || "$lt" in ie || "$lte" in ie, se = Object.keys(_[ne[ee - 1]]), oe = arrayEquals(se, [ "$eq" ]), le = arrayEquals(se, Object.keys(ie)); + if (re && !oe && !le) { + finish(ee); + break; + } + } + const ue = Object.keys(ie); + let de = null; + for (const _ of ue) { + const ee = getMultiFieldCoreQueryPlan(_, ie[_]); + if (de) de = mergeObjects([ de, ee ]); else de = ee; + } + re.push("startkey" in de ? de.startkey : COLLATE_LO); + se.push("endkey" in de ? de.endkey : COLLATE_HI); + if ("inclusive_start" in de) oe = de.inclusive_start; + if ("inclusive_end" in de) le = de.inclusive_end; + } + const ue = { + startkey: re, + endkey: se + }; + if ("undefined" != typeof oe) ue.inclusive_start = oe; + if ("undefined" != typeof le) ue.inclusive_end = le; + return { + queryOpts: ue, + inMemoryFields: ie + }; +} + +function shouldShortCircuit(_) { + return Object.keys(_).map((function(ee) { + return _[ee]; + })).some((function(_) { + return "object" == typeof _ && 0 === Object.keys(_).length; + })); +} + +function getDefaultQueryPlan(_) { + return { + queryOpts: { + startkey: null + }, + inMemoryFields: [ Object.keys(_) ] + }; +} + +function getCoreQueryPlan(_, ee) { + if (ee.defaultUsed) return getDefaultQueryPlan(_, ee); + if (1 === ee.def.fields.length) return getSingleFieldCoreQueryPlan(_, ee); else return getMultiFieldQueryOpts(_, ee); +} + +function planQuery(_, ee) { + const ne = _.selector, ie = _.sort; + if (shouldShortCircuit(ne)) return Object.assign({}, SHORT_CIRCUIT_QUERY, { + index: ee[0] + }); + const re = getUserFields(ne, ie), se = re.fields, oe = findBestMatchingIndex(ne, se, re.sortOrder, ee, _.use_index), le = getCoreQueryPlan(ne, oe); + return { + queryOpts: le.queryOpts, + index: oe, + inMemoryFields: getInMemoryFields(le.inMemoryFields, oe, ne, se) + }; +} + +function indexToSignature(_) { + return _.ddoc.substring(8) + "/" + _.name; +} + +async function doAllDocs(_, ee) { + const ne = clone(ee); + if (ne.descending) { + if ("endkey" in ne && "string" != typeof ne.endkey) ne.endkey = ""; + if ("startkey" in ne && "string" != typeof ne.startkey) ne.limit = 0; + } else { + if ("startkey" in ne && "string" != typeof ne.startkey) ne.startkey = ""; + if ("endkey" in ne && "string" != typeof ne.endkey) ne.limit = 0; + } + if ("key" in ne && "string" != typeof ne.key) ne.limit = 0; + if (ne.limit > 0 && ne.indexes_count) { + ne.original_limit = ne.limit; + ne.limit += ne.indexes_count; + } + const ie = await _.allDocs(ne); + ie.rows = ie.rows.filter((function(_) { + return !/^_design\//.test(_.id); + })); + if (ne.original_limit) ne.limit = ne.original_limit; + ie.rows = ie.rows.slice(0, ne.limit); + return ie; +} + +async function queryAllOrIndex(_, ee, ne) { + if ("_all_docs" === ne.name) return doAllDocs(_, ee); else return abstractMapper$1(_).query.call(_, indexToSignature(ne), ee); +} + +async function find$1(_, ee, ne) { + if (ee.selector) { + validateSelector(ee.selector, false); + ee.selector = massageSelector(ee.selector); + } + if (ee.sort) ee.sort = massageSort(ee.sort); + if (ee.use_index) ee.use_index = massageUseIndex(ee.use_index); + if (!("limit" in ee)) ee.limit = 25; + validateFindRequest(ee); + const ie = await getIndexes$1(_); + _.constructor.emit("debug", [ "find", "planning query", ee ]); + const re = planQuery(ee, ie.indexes); + _.constructor.emit("debug", [ "find", "query plan", re ]); + const se = re.index; + validateSort(ee, se); + let oe = Object.assign({ + include_docs: true, + reduce: false, + indexes_count: ie.total_rows + }, re.queryOpts); + if ("startkey" in oe && "endkey" in oe && collate(oe.startkey, oe.endkey) > 0) return { + docs: [] + }; + if (ee.sort && "string" != typeof ee.sort[0] && "desc" === getValue(ee.sort[0])) { + oe.descending = true; + oe = reverseOptions(oe); + } + if (!re.inMemoryFields.length) { + oe.limit = ee.limit; + if ("skip" in ee) oe.skip = ee.skip; + } + if (ne) return Promise.resolve(re, oe); + const le = await queryAllOrIndex(_, oe, se); + if (false === oe.inclusive_start) le.rows = filterInclusiveStart(le.rows, oe.startkey, se); + if (re.inMemoryFields.length) le.rows = filterInMemoryFields(le.rows, ee, re.inMemoryFields); + const ue = { + docs: le.rows.map((function(_) { + const ne = _.doc; + if (ee.fields) return pick2(ne, ee.fields); else return ne; + })) + }; + if (se.defaultUsed) ue.warning = "No matching index found, create an index to optimize query time."; + return ue; +} + +async function explain$1(_, ee) { + const ne = await find$1(_, ee, true); + return { + dbname: _.name, + index: ne.index, + selector: ee.selector, + range: { + start_key: ne.queryOpts.startkey, + end_key: ne.queryOpts.endkey + }, + opts: { + use_index: ee.use_index || [], + bookmark: "nil", + limit: ee.limit, + skip: ee.skip, + sort: ee.sort || {}, + fields: ee.fields, + conflicts: false, + r: [ 49 ] + }, + limit: ee.limit, + skip: ee.skip || 0, + fields: ee.fields + }; +} + +async function deleteIndex$1(_, ee) { + if (!ee.ddoc) throw new Error("you must supply an index.ddoc when deleting"); + if (!ee.name) throw new Error("you must supply an index.name when deleting"); + const ne = ee.ddoc, ie = ee.name; + await upsert(_, ne, (function deltaFun(_) { + if (1 === Object.keys(_.views).length && _.views[ie]) return { + _id: ne, + _deleted: true + }; + delete _.views[ie]; + return _; + })); + await abstractMapper$1(_).viewCleanup.apply(_); + return { + ok: true + }; +} + +var plugin = {}; + +plugin.createIndex = resolveToCallback((async function(_) { + if ("object" != typeof _) throw new Error("you must provide an index to create"); + return (isRemote(this) ? createIndex : createIndex$1)(this, _); +})); + +plugin.find = resolveToCallback((async function(_) { + if ("object" != typeof _) throw new Error("you must provide search parameters to find()"); + return (isRemote(this) ? find : find$1)(this, _); +})); + +plugin.explain = resolveToCallback((async function(_) { + if ("object" != typeof _) throw new Error("you must provide search parameters to explain()"); + return (isRemote(this) ? explain : explain$1)(this, _); +})); + +plugin.getIndexes = resolveToCallback((async function() { + return (isRemote(this) ? getIndexes : getIndexes$1)(this); +})); + +plugin.deleteIndex = resolveToCallback((async function(_) { + if ("object" != typeof _) throw new Error("you must provide an index to delete"); + return (isRemote(this) ? deleteIndex : deleteIndex$1)(this, _); +})); + +var index_browser_es_default3 = plugin, import_transform_pouch = __toESM(require_transform_pouch(), 1); + +function unwrapTaskResult(_) { + if ("ok" in _) return _.ok; + if ("err" in _) return _.err; + throw new Error("Argument Exception: Could not unwrap"); +} + +function isTaskWaiting(_) { + if (_ instanceof Promise) return false; + if (_ instanceof Function) return true; + throw new Error("Invalid state"); +} + +async function wrapEachProcess(_, ee) { + try { + return { + key: _, + ok: await ee + }; + } catch (ee) { + return { + key: _, + err: ee instanceof Error ? ee : new Error(`${ee}`) + }; + } +} + +async function* processAllTasksWithConcurrencyLimit(_, ee) { + const ne = new Map; + let ie = 0; + const re = ee.reverse(); + for (;re.length > 0 || ne.size > 0; ) { + e: for (;ne.size < _ && re.length > 0; ) { + const _ = re.pop(); + if (void 0 === _) break e; + ie++; + const ee = wrapEachProcess(ie, isTaskWaiting(_) ? _() : _); + ne.set(ie, ee); + } + const ee = await Promise.race(ne.values()); + ne.delete(ee.key); + yield ee; + } +} + +async function mapAllTasksWithConcurrencyLimit(_, ee) { + const ne = new Map; + for await (const ie of processAllTasksWithConcurrencyLimit(_, ee)) ne.set(ie.key, ie); + return [ ...ne.entries() ].sort(((_, ee) => _[0] - ee[0])).map((_ => _[1])); +} + +var tasks = {}; + +function scheduleTask(_, ee, ne, ie) { + if (!ie || !(_ in tasks)) { + cancelTask(_); + tasks[_] = setTimeout((async () => { + delete tasks[_]; + await ne(); + }), ee); + } +} + +function cancelTask(_) { + if (_ in tasks) { + clearTimeout(tasks[_]); + delete tasks[_]; + } +} + +function cancelAllTasks() { + for (const _ in tasks) { + clearTimeout(tasks[_]); + delete tasks[_]; + } +} + +var intervals = {}; + +function cancelAllPeriodicTask() { + for (const _ in intervals) { + clearInterval(intervals[_]); + delete intervals[_]; + } +} + +var waitingItems = new Map; + +function waitForTimeout(_, ee) { + if (waitingItems.has(_)) return waitingItems.get(_).timeoutPromise.promise; + const ne = promiseWithResolver(), ie = setTimeout((() => { + finishWaitingForTimeout(_, true); + }), ee); + waitingItems.set(_, { + waitFrom: Date.now(), + timeout: ee, + timeoutPromise: ne, + timer: ie + }); + return ne.promise; +} + +function finishWaitingForTimeout(_, ee = false) { + const ne = waitingItems.get(_); + if (ne) { + if (ne.timer) clearTimeout(ne.timer); + ne.timeoutPromise.resolve(ee); + waitingItems.delete(_); + return true; + } + return false; +} + +function finishAllWaitingForTimeout(_, ee) { + for (const [ne, ie] of waitingItems) if (ne.startsWith(_)) finishWaitingForTimeout(ne, ee); +} + +function isWaitingForTimeout(_) { + return waitingItems.has(_); +} + +index_es_default.plugin(index_es_default2).plugin(index_es_default3).plugin(index_es_default4).plugin(index_browser_es_default2).plugin(index_es_default8).plugin(index_browser_es_default3).plugin(import_transform_pouch.default); + +function appendPurgeSeqs(_, ee) { + return _.get("_local/purges").then((function(ne) { + for (const [ie, re] of ee) { + const ee = ne.purgeSeq + 1; + ne.purges.push({ + docId: ie, + rev: re, + purgeSeq: ee + }); + if (ne.purges.length > _.purged_infos_limit) ne.purges.splice(0, ne.purges.length - _.purged_infos_limit); + ne.purgeSeq = ee; + } + return ne; + })).catch((function(_) { + if (404 !== _.status) throw _; + return { + _id: "_local/purges", + purges: ee.map((([_, ee], ne) => ({ + docId: _, + rev: ee, + purgeSeq: ne + }))), + purgeSeq: ee.length + }; + })).then((function(ee) { + return _.put(ee); + })); +} + +index_es_default.prototype.purgeMulti = adapterFun("_purgeMulti", (function(_, ee) { + if ("undefined" == typeof this._purge) return ee(createError(UNKNOWN_ERROR, "Purge is not implemented in the " + this.adapter + " adapter.")); + const ne = this, ie = _.map((_ => () => new Promise(((ee, ie) => { + const [re, se] = _; + ne._getRevisionTree(re, ((ie, oe) => { + if (ie) return ee([ _, ie ]); + if (!oe) return ee([ _, createError(MISSING_DOC) ]); + let le; + try { + le = findPathToLeaf(oe, se); + } catch (ne) { + return ee([ _, ne.message || ne ]); + } + ne._purge(re, le, ((ne, ie) => { + if (ne) return ee([ _, ne ]); else return ee([ _, ie ]); + })); + })); + })))); + (async () => { + const _ = (await mapAllTasksWithConcurrencyLimit(1, ie)).map((_ => unwrapTaskResult(_))); + await appendPurgeSeqs(ne, _.filter((_ => "ok" in _[1])).map((_ => _[0]))); + return Object.fromEntries(_.map((_ => [ _[0][0], _[1] ]))); + })().then((_ => ee(void 0, _))).catch((_ => ee(_))); +})); + +var import_diff_match_patch2 = __toESM(require_diff_match_patch(), 1), ConflictResolveModal = class extends import_obsidian.Modal { + constructor(_, ee, ne, ie, re) { + super(_); + this.response = CANCELLED; + this.isClosed = false; + this.consumed = false; + this.title = "Conflicting changes"; + this.pluginPickMode = false; + this.localName = "Keep A"; + this.remoteName = "Keep B"; + this.result = ne; + this.filename = ee; + this.pluginPickMode = ie || false; + if (this.pluginPickMode) { + this.title = "Pick a version"; + this.remoteName = `Use ${re || "Remote"}`; + this.localName = "Use Local"; + } + sendValue("cancel-resolve-conflict:" + this.filename, true); + } + onOpen() { + const {contentEl: _} = this; + sendValue("cancel-resolve-conflict:" + this.filename, true); + setTimeout((async () => { + if (await waitForValue("cancel-resolve-conflict:" + this.filename)) this.sendResponse(CANCELLED); + }), 10); + this.titleEl.setText(this.title); + _.empty(); + _.createEl("span", { + text: this.filename + }); + const ee = _.createDiv(""); + ee.addClass("op-scrollable"); + let ne = ""; + for (const _ of this.result.diff) { + const ee = _[0], ie = _[1]; + if (ee == import_diff_match_patch2.DIFF_DELETE) ne += "" + escapeStringToHTML(ie).replace(/\n/g, "\n") + ""; else if (ee == import_diff_match_patch2.DIFF_EQUAL) ne += "" + escapeStringToHTML(ie).replace(/\n/g, "\n") + ""; else if (ee == import_diff_match_patch2.DIFF_INSERT) ne += "" + escapeStringToHTML(ie).replace(/\n/g, "\n") + ""; + } + ne = ne.replace(/\n/g, "
    "); + ee.innerHTML = ne; + const ie = _.createDiv(""), re = new Date(this.result.left.mtime).toLocaleString() + (this.result.left.deleted ? " (Deleted)" : ""), se = new Date(this.result.right.mtime).toLocaleString() + (this.result.right.deleted ? " (Deleted)" : ""); + ie.innerHTML = `\nA:${re}
    B:${se}
    \n `; + _.createEl("button", { + text: this.localName + }, (_ => _.addEventListener("click", (() => this.sendResponse(this.result.right.rev))))).style.marginRight = "4px"; + _.createEl("button", { + text: this.remoteName + }, (_ => _.addEventListener("click", (() => this.sendResponse(this.result.left.rev))))).style.marginRight = "4px"; + if (!this.pluginPickMode) _.createEl("button", { + text: "Concat both" + }, (_ => _.addEventListener("click", (() => this.sendResponse(LEAVE_TO_SUBSEQUENT))))).style.marginRight = "4px"; + _.createEl("button", { + text: !this.pluginPickMode ? "Not now" : "Cancel" + }, (_ => _.addEventListener("click", (() => this.sendResponse(CANCELLED))))).style.marginRight = "4px"; + } + sendResponse(_) { + this.response = _; + this.close(); + } + onClose() { + const {contentEl: _} = this; + _.empty(); + if (!this.consumed) { + this.consumed = true; + sendValue("close-resolve-conflict:" + this.filename, this.response); + sendValue("cancel-resolve-conflict:" + this.filename, false); + } + } + async waitForResult() { + await delay(100); + const _ = await waitForValue("close-resolve-conflict:" + this.filename); + if (_ === RESULT_TIMED_OUT) return CANCELLED; else return _; + } +}, import_obsidian5 = require("obsidian"); + +function noop2() {} + +function assign(_, ee) { + for (const ne in ee) _[ne] = ee[ne]; + return _; +} + +function run(_) { + return _(); +} + +function blank_object() { + return Object.create(null); +} + +function run_all(_) { + _.forEach(run); +} + +function is_function(_) { + return "function" == typeof _; +} + +function safe_not_equal(_, ee) { + return _ != _ ? ee == ee : _ !== ee || _ && "object" == typeof _ || "function" == typeof _; +} + +function is_empty(_) { + return 0 === Object.keys(_).length; +} + +function subscribe(_, ...ee) { + if (null == _) { + for (const _ of ee) _(void 0); + return noop2; + } + const ne = _.subscribe(...ee); + return ne.unsubscribe ? () => ne.unsubscribe() : ne; +} + +function component_subscribe(_, ee, ne) { + _.$$.on_destroy.push(subscribe(ee, ne)); +} + +function null_to_empty(_) { + return null == _ ? "" : _; +} + +var globals = "undefined" != typeof window ? window : "undefined" != typeof globalThis ? globalThis : window, ResizeObserverSingleton = class _ResizeObserverSingleton { + constructor(_) { + __publicField(this, "_listeners", "WeakMap" in globals ? new WeakMap : void 0); + __publicField(this, "_observer"); + __publicField(this, "options"); + this.options = _; + } + observe(_, ee) { + this._listeners.set(_, ee); + this._getObserver().observe(_, this.options); + return () => { + this._listeners.delete(_); + this._observer.unobserve(_); + }; + } + _getObserver() { + var _; + return null != (_ = this._observer) ? _ : this._observer = new ResizeObserver((_ => { + var ee; + for (const ne of _) { + _ResizeObserverSingleton.entries.set(ne.target, ne); + null == (ee = this._listeners.get(ne.target)) || ee(ne); + } + })); + } +}; + +ResizeObserverSingleton.entries = "WeakMap" in globals ? new WeakMap : void 0; + +var current_component, is_hydrating = false; + +function start_hydrating() { + is_hydrating = true; +} + +function end_hydrating() { + is_hydrating = false; +} + +function append(_, ee) { + _.appendChild(ee); +} + +function append_styles(_, ee, ne) { + const ie = get_root_for_style(_); + if (!ie.getElementById(ee)) { + const _ = element("style"); + _.id = ee; + _.textContent = ne; + append_stylesheet(ie, _); + } +} + +function get_root_for_style(_) { + if (!_) return document; + const ee = _.getRootNode ? _.getRootNode() : _.ownerDocument; + if (ee && ee.host) return ee; else return _.ownerDocument; +} + +function append_stylesheet(_, ee) { + append(_.head || _, ee); + return ee.sheet; +} + +function insert(_, ee, ne) { + _.insertBefore(ee, ne || null); +} + +function detach(_) { + if (_.parentNode) _.parentNode.removeChild(_); +} + +function destroy_each(_, ee) { + for (let ne = 0; ne < _.length; ne += 1) if (_[ne]) _[ne].d(ee); +} + +function element(_) { + return document.createElement(_); +} + +function text(_) { + return document.createTextNode(_); +} + +function space() { + return text(" "); +} + +function empty() { + return text(""); +} + +function listen(_, ee, ne, ie) { + _.addEventListener(ee, ne, ie); + return () => _.removeEventListener(ee, ne, ie); +} + +function attr(_, ee, ne) { + if (null == ne) _.removeAttribute(ee); else if (_.getAttribute(ee) !== ne) _.setAttribute(ee, ne); +} + +function init_binding_group(_) { + let ee; + return { + p(...ne) { + ee = ne; + ee.forEach((ee => _.push(ee))); + }, + r() { + ee.forEach((ee => _.splice(_.indexOf(ee), 1))); + } + }; +} + +function children(_) { + return Array.from(_.childNodes); +} + +function set_data(_, ee) { + ee = "" + ee; + if (_.data !== ee) _.data = ee; +} + +function set_input_value(_, ee) { + _.value = null == ee ? "" : ee; +} + +function select_option(_, ee, ne) { + for (let ne = 0; ne < _.options.length; ne += 1) { + const ie = _.options[ne]; + if (ie.__value === ee) { + ie.selected = true; + return; + } + } + if (!ne || void 0 !== ee) _.selectedIndex = -1; +} + +function select_value(_) { + const ee = _.querySelector(":checked"); + return ee && ee.__value; +} + +function toggle_class(_, ee, ne) { + _.classList.toggle(ee, !!ne); +} + +function get_custom_elements_slots(_) { + const ee = {}; + _.childNodes.forEach((_ => { + ee[_.slot || "default"] = true; + })); + return ee; +} + +function set_current_component(_) { + current_component = _; +} + +function get_current_component() { + if (!current_component) throw new Error("Function called outside component initialization"); + return current_component; +} + +function onMount(_) { + get_current_component().$$.on_mount.push(_); +} + +function onDestroy(_) { + get_current_component().$$.on_destroy.push(_); +} + +var dirty_components = [], binding_callbacks = [], render_callbacks = [], flush_callbacks = [], resolved_promise = Promise.resolve(), update_scheduled = false; + +function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } +} + +function add_render_callback(_) { + render_callbacks.push(_); +} + +var seen_callbacks = new Set, flushidx = 0; + +function flush() { + if (0 !== flushidx) return; + const _ = current_component; + do { + try { + for (;flushidx < dirty_components.length; ) { + const _ = dirty_components[flushidx]; + flushidx++; + set_current_component(_); + update(_.$$); + } + } catch (_) { + dirty_components.length = 0; + flushidx = 0; + throw _; + } + set_current_component(null); + dirty_components.length = 0; + flushidx = 0; + for (;binding_callbacks.length; ) binding_callbacks.pop()(); + for (let _ = 0; _ < render_callbacks.length; _ += 1) { + const ee = render_callbacks[_]; + if (!seen_callbacks.has(ee)) { + seen_callbacks.add(ee); + ee(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + for (;flush_callbacks.length; ) flush_callbacks.pop()(); + update_scheduled = false; + seen_callbacks.clear(); + set_current_component(_); +} + +function update(_) { + if (null !== _.fragment) { + _.update(); + run_all(_.before_update); + const ee = _.dirty; + _.dirty = [ -1 ]; + _.fragment && _.fragment.p(_.ctx, ee); + _.after_update.forEach(add_render_callback); + } +} + +function flush_render_callbacks(_) { + const ee = [], ne = []; + render_callbacks.forEach((ie => -1 === _.indexOf(ie) ? ee.push(ie) : ne.push(ie))); + ne.forEach((_ => _())); + render_callbacks = ee; +} + +var outros, outroing = new Set; + +function group_outros() { + outros = { + r: 0, + c: [], + p: outros + }; +} + +function check_outros() { + if (!outros.r) run_all(outros.c); + outros = outros.p; +} + +function transition_in(_, ee) { + if (_ && _.i) { + outroing.delete(_); + _.i(ee); + } +} + +function transition_out(_, ee, ne, ie) { + if (_ && _.o) { + if (outroing.has(_)) return; + outroing.add(_); + outros.c.push((() => { + outroing.delete(_); + if (ie) { + if (ne) _.d(1); + ie(); + } + })); + _.o(ee); + } else if (ie) ie(); +} + +function ensure_array_like(_) { + return void 0 !== (null == _ ? void 0 : _.length) ? _ : Array.from(_); +} + +function get_spread_update(_, ee) { + const ne = {}, ie = {}, re = { + $$scope: 1 + }; + let se = _.length; + for (;se--; ) { + const oe = _[se], le = ee[se]; + if (le) { + for (const _ in oe) if (!(_ in le)) ie[_] = 1; + for (const _ in le) if (!re[_]) { + ne[_] = le[_]; + re[_] = 1; + } + _[se] = le; + } else for (const _ in oe) re[_] = 1; + } + for (const _ in ie) if (!(_ in ne)) ne[_] = void 0; + return ne; +} + +function get_spread_object(_) { + return "object" == typeof _ && null !== _ ? _ : {}; +} + +var SvelteElement, _boolean_attributes = [ "allowfullscreen", "allowpaymentrequest", "async", "autofocus", "autoplay", "checked", "controls", "default", "defer", "disabled", "formnovalidate", "hidden", "inert", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "selected" ], boolean_attributes = new Set([ ..._boolean_attributes ]); + +function create_component(_) { + _ && _.c(); +} + +function mount_component(_, ee, ne) { + const {fragment: ie, after_update: re} = _.$$; + ie && ie.m(ee, ne); + add_render_callback((() => { + const ee = _.$$.on_mount.map(run).filter(is_function); + if (_.$$.on_destroy) _.$$.on_destroy.push(...ee); else run_all(ee); + _.$$.on_mount = []; + })); + re.forEach(add_render_callback); +} + +function destroy_component(_, ee) { + const ne = _.$$; + if (null !== ne.fragment) { + flush_render_callbacks(ne.after_update); + run_all(ne.on_destroy); + ne.fragment && ne.fragment.d(ee); + ne.on_destroy = ne.fragment = null; + ne.ctx = []; + } +} + +function make_dirty(_, ee) { + if (-1 === _.$$.dirty[0]) { + dirty_components.push(_); + schedule_update(); + _.$$.dirty.fill(0); + } + _.$$.dirty[ee / 31 | 0] |= 1 << ee % 31; +} + +function init2(_, ee, ne, ie, re, se, oe = null, le = [ -1 ]) { + const ue = current_component; + set_current_component(_); + const de = _.$$ = { + fragment: null, + ctx: [], + props: se, + update: noop2, + not_equal: re, + bound: blank_object(), + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(ee.context || (ue ? ue.$$.context : [])), + callbacks: blank_object(), + dirty: le, + skip_bound: false, + root: ee.target || ue.$$.root + }; + oe && oe(de.root); + let fe = false; + de.ctx = ne ? ne(_, ee.props || {}, ((ee, ne, ...ie) => { + const se = ie.length ? ie[0] : ne; + if (de.ctx && re(de.ctx[ee], de.ctx[ee] = se)) { + if (!de.skip_bound && de.bound[ee]) de.bound[ee](se); + if (fe) make_dirty(_, ee); + } + return ne; + })) : []; + de.update(); + fe = true; + run_all(de.before_update); + de.fragment = ie ? ie(de.ctx) : false; + if (ee.target) { + if (ee.hydrate) { + start_hydrating(); + const _ = children(ee.target); + de.fragment && de.fragment.l(_); + _.forEach(detach); + } else de.fragment && de.fragment.c(); + if (ee.intro) transition_in(_.$$.fragment); + mount_component(_, ee.target, ee.anchor); + end_hydrating(); + flush(); + } + set_current_component(ue); +} + +if ("function" == typeof HTMLElement) SvelteElement = class extends HTMLElement { + constructor(_, ee, ne) { + super(); + __publicField(this, "$$ctor"); + __publicField(this, "$$s"); + __publicField(this, "$$c"); + __publicField(this, "$$cn", false); + __publicField(this, "$$d", {}); + __publicField(this, "$$r", false); + __publicField(this, "$$p_d", {}); + __publicField(this, "$$l", {}); + __publicField(this, "$$l_u", new Map); + this.$$ctor = _; + this.$$s = ee; + if (ne) this.attachShadow({ + mode: "open" + }); + } + addEventListener(_, ee, ne) { + this.$$l[_] = this.$$l[_] || []; + this.$$l[_].push(ee); + if (this.$$c) { + const ne = this.$$c.$on(_, ee); + this.$$l_u.set(ee, ne); + } + super.addEventListener(_, ee, ne); + } + removeEventListener(_, ee, ne) { + super.removeEventListener(_, ee, ne); + if (this.$$c) { + const _ = this.$$l_u.get(ee); + if (_) { + _(); + this.$$l_u.delete(ee); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(_) { + return () => { + let ee; + return { + c: function create() { + ee = element("slot"); + if ("default" !== _) attr(ee, "name", _); + }, + m: function mount(_, ne) { + insert(_, ee, ne); + }, + d: function destroy2(_) { + if (_) detach(ee); + } + }; + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) return; + const _ = {}, ee = get_custom_elements_slots(this); + for (const ne of this.$$s) if (ne in ee) _[ne] = [ create_slot(ne) ]; + for (const _ of this.attributes) { + const ee = this.$$g_p(_.name); + if (!(ee in this.$$d)) this.$$d[ee] = get_custom_element_value(ee, _.value, this.$$p_d, "toProp"); + } + for (const _ in this.$$p_d) if (!(_ in this.$$d) && void 0 !== this[_]) { + this.$$d[_] = this[_]; + delete this[_]; + } + this.$$c = new this.$$ctor({ + target: this.shadowRoot || this, + props: { + ...this.$$d, + $$slots: _, + $$scope: { + ctx: [] + } + } + }); + const reflect_attributes = () => { + this.$$r = true; + for (const _ in this.$$p_d) { + this.$$d[_] = this.$$c.$$.ctx[this.$$c.$$.props[_]]; + if (this.$$p_d[_].reflect) { + const ee = get_custom_element_value(_, this.$$d[_], this.$$p_d, "toAttribute"); + if (null == ee) this.removeAttribute(this.$$p_d[_].attribute || _); else this.setAttribute(this.$$p_d[_].attribute || _, ee); + } + } + this.$$r = false; + }; + this.$$c.$$.after_update.push(reflect_attributes); + reflect_attributes(); + for (const _ in this.$$l) for (const ee of this.$$l[_]) { + const ne = this.$$c.$on(_, ee); + this.$$l_u.set(ee, ne); + } + this.$$l = {}; + } + } + attributeChangedCallback(_, ee, ne) { + var ie; + if (!this.$$r) { + _ = this.$$g_p(_); + this.$$d[_] = get_custom_element_value(_, ne, this.$$p_d, "toProp"); + null == (ie = this.$$c) || ie.$set({ + [_]: this.$$d[_] + }); + } + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then((() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$c = void 0; + } + })); + } + $$g_p(_) { + return Object.keys(this.$$p_d).find((ee => this.$$p_d[ee].attribute === _ || !this.$$p_d[ee].attribute && ee.toLowerCase() === _)) || _; + } +}; + +function get_custom_element_value(_, ee, ne, ie) { + var re; + const se = null == (re = ne[_]) ? void 0 : re.type; + ee = "Boolean" === se && "boolean" != typeof ee ? null != ee : ee; + if (!ie || !ne[_]) return ee; else if ("toAttribute" === ie) switch (se) { + case "Object": + case "Array": + return null == ee ? null : JSON.stringify(ee); + + case "Boolean": + return ee ? "" : null; + + case "Number": + return null == ee ? null : ee; + + default: + return ee; + } else switch (se) { + case "Object": + case "Array": + return ee && JSON.parse(ee); + + case "Boolean": + return ee; + + case "Number": + return null != ee ? +ee : ee; + + default: + return ee; + } +} + +var SvelteComponent = class { + constructor() { + __publicField(this, "$$"); + __publicField(this, "$$set"); + } + $destroy() { + destroy_component(this, 1); + this.$destroy = noop2; + } + $on(_, ee) { + if (!is_function(ee)) return noop2; + const ne = this.$$.callbacks[_] || (this.$$.callbacks[_] = []); + ne.push(ee); + return () => { + const _ = ne.indexOf(ee); + if (-1 !== _) ne.splice(_, 1); + }; + } + $set(_) { + if (this.$$set && !is_empty(_)) { + this.$$.skip_bound = true; + this.$$set(_); + this.$$.skip_bound = false; + } + } +}, PUBLIC_VERSION = "4"; + +if ("undefined" != typeof window) (window.__svelte || (window.__svelte = { + v: new Set +})).v.add(PUBLIC_VERSION); + +var subscriber_queue = []; + +function writable(_, ee = noop2) { + let ne; + const ie = new Set; + function set(ee) { + if (safe_not_equal(_, ee)) { + _ = ee; + if (ne) { + const ee = !subscriber_queue.length; + for (const ee of ie) { + ee[1](); + subscriber_queue.push(ee, _); + } + if (ee) { + for (let _ = 0; _ < subscriber_queue.length; _ += 2) subscriber_queue[_][0](subscriber_queue[_ + 1]); + subscriber_queue.length = 0; + } + } + } + } + function update2(ee) { + set(ee(_)); + } + return { + set, + update: update2, + subscribe: function subscribe2(re, se = noop2) { + const oe = [ re, se ]; + ie.add(oe); + if (1 === ie.size) ne = ee(set, update2) || noop2; + re(_); + return () => { + ie.delete(oe); + if (0 === ie.size && ne) { + ne(); + ne = null; + } + }; + } + }; +} + +var e, t = new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 2, 127, 127, 0, 96, 3, 127, 127, 127, 1, 127, 3, 3, 2, 1, 0, 5, 3, 1, 0, 1, 7, 23, 3, 3, 109, 101, 109, 2, 0, 5, 120, 120, 104, 51, 50, 0, 0, 5, 120, 120, 104, 54, 52, 0, 1, 10, 152, 9, 2, 242, 2, 1, 4, 127, 32, 0, 32, 1, 106, 33, 3, 32, 1, 32, 1, 65, 16, 79, 4, 127, 32, 3, 65, 16, 107, 33, 6, 32, 2, 65, 168, 136, 141, 161, 2, 106, 33, 1, 32, 2, 65, 137, 235, 208, 208, 7, 107, 33, 4, 32, 2, 65, 207, 140, 162, 142, 6, 106, 33, 5, 3, 64, 32, 1, 32, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 1, 32, 4, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 2, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 5, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 5, 32, 6, 32, 0, 65, 4, 106, 34, 0, 79, 13, 0, 11, 32, 2, 65, 12, 119, 32, 5, 65, 18, 119, 106, 32, 4, 65, 7, 119, 106, 32, 1, 65, 1, 119, 106, 5, 32, 2, 65, 177, 207, 217, 178, 1, 106, 11, 106, 33, 2, 3, 64, 32, 3, 32, 0, 65, 4, 106, 79, 4, 64, 32, 2, 32, 0, 40, 2, 0, 65, 189, 220, 202, 149, 124, 108, 106, 65, 17, 119, 65, 175, 214, 211, 190, 2, 108, 33, 2, 32, 0, 65, 4, 106, 33, 0, 12, 1, 11, 11, 3, 64, 32, 0, 32, 3, 73, 4, 64, 32, 2, 32, 0, 45, 0, 0, 65, 177, 207, 217, 178, 1, 108, 106, 65, 11, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 0, 65, 1, 106, 33, 0, 12, 1, 11, 11, 32, 2, 32, 2, 65, 15, 118, 115, 65, 247, 148, 175, 175, 120, 108, 34, 0, 65, 13, 118, 32, 0, 115, 65, 189, 220, 202, 149, 124, 108, 34, 0, 65, 16, 118, 32, 0, 115, 11, 161, 6, 2, 4, 126, 3, 127, 32, 0, 65, 4, 106, 53, 2, 0, 32, 0, 53, 2, 0, 66, 32, 134, 132, 33, 2, 32, 1, 32, 0, 65, 8, 106, 34, 6, 106, 33, 7, 32, 1, 65, 32, 79, 4, 126, 32, 7, 65, 32, 107, 33, 8, 32, 2, 66, 214, 235, 130, 238, 234, 253, 137, 245, 224, 0, 124, 33, 3, 32, 2, 66, 177, 169, 172, 193, 173, 184, 212, 166, 61, 125, 33, 4, 32, 2, 66, 249, 234, 208, 208, 231, 201, 161, 228, 225, 0, 124, 33, 5, 3, 64, 32, 3, 32, 6, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 3, 32, 4, 32, 6, 65, 8, 106, 34, 6, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 4, 32, 2, 32, 6, 65, 8, 106, 34, 6, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 2, 32, 5, 32, 6, 65, 8, 106, 34, 6, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 5, 32, 8, 32, 6, 65, 8, 106, 34, 6, 79, 13, 0, 11, 32, 2, 66, 12, 137, 32, 5, 66, 18, 137, 124, 32, 4, 66, 7, 137, 124, 32, 3, 66, 1, 137, 124, 32, 3, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 4, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 2, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 5, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 5, 32, 2, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 124, 11, 32, 1, 173, 124, 33, 2, 3, 64, 32, 7, 32, 6, 65, 8, 106, 79, 4, 64, 32, 2, 32, 6, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 27, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 33, 2, 32, 6, 65, 8, 106, 33, 6, 12, 1, 11, 11, 32, 6, 65, 4, 106, 32, 7, 77, 4, 64, 32, 2, 32, 6, 53, 2, 0, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 23, 137, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 124, 33, 2, 32, 6, 65, 4, 106, 33, 6, 11, 3, 64, 32, 6, 32, 7, 73, 4, 64, 32, 2, 32, 6, 49, 0, 0, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 126, 133, 66, 11, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 2, 32, 6, 65, 1, 106, 33, 6, 12, 1, 11, 11, 32, 0, 32, 2, 32, 2, 66, 33, 136, 133, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 34, 2, 66, 29, 136, 32, 2, 133, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 126, 34, 2, 66, 32, 136, 32, 2, 133, 34, 2, 66, 32, 136, 62, 2, 0, 32, 0, 65, 4, 106, 32, 2, 62, 2, 0, 11 ]); + +function n(_, ee, ne) { + if (ee.buffer.byteLength < _.byteLength + ne) { + const ie = Math.ceil((_.byteLength + ne - ee.buffer.byteLength) / 65536); + ee.grow(ie); + } + new Uint8Array(ee.buffer, ne).set(_); +} + +async function xxhash_wasm_default() { + const {instance: {exports: {mem: _, xxh32: ee, xxh64: ne}}} = await WebAssembly.instantiate(t); + function h3(ne) { + let ie = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + return n(ne, _, 0), ee(0, ne.byteLength, ie) >>> 0; + } + function c2(ee) { + let ie = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, re = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0; + n(ee, _, 8); + const se = new DataView(_.buffer); + return se.setUint32(0, ie, true), se.setUint32(4, re, true), ne(0, ee.byteLength), + se; + } + return { + h32: function(_) { + let ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + e || (e = new TextEncoder); + return h3(e.encode(_), ee).toString(16); + }, + h32Raw: h3, + h64: function(_) { + let ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, ne = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0; + e || (e = new TextEncoder); + const ie = c2(e.encode(_), ee, ne); + return ie.getUint32(0, true).toString(16) + ie.getUint32(4, true).toString(16); + }, + h64Raw: function(_) { + let ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, ne = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0; + return new Uint8Array(c2(_, ee, ne).buffer, 0, 8); + } + }; +} + +var hashFunc, t2 = new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 48, 8, 96, 3, 127, 127, 127, 0, 96, 3, 127, 127, 127, 1, 127, 96, 2, 127, 127, 0, 96, 2, 127, 126, 0, 96, 1, 127, 1, 127, 96, 1, 127, 1, 126, 96, 3, 127, 127, 126, 1, 126, 96, 3, 126, 127, 127, 1, 126, 3, 11, 10, 1, 1, 2, 0, 4, 6, 7, 3, 0, 5, 5, 3, 1, 0, 1, 7, 85, 9, 3, 109, 101, 109, 2, 0, 5, 120, 120, 104, 51, 50, 0, 0, 6, 105, 110, 105, 116, 51, 50, 0, 2, 8, 117, 112, 100, 97, 116, 101, 51, 50, 0, 3, 8, 100, 105, 103, 101, 115, 116, 51, 50, 0, 4, 5, 120, 120, 104, 54, 52, 0, 5, 6, 105, 110, 105, 116, 54, 52, 0, 7, 8, 117, 112, 100, 97, 116, 101, 54, 52, 0, 8, 8, 100, 105, 103, 101, 115, 116, 54, 52, 0, 9, 10, 211, 23, 10, 242, 1, 1, 4, 127, 32, 0, 32, 1, 106, 33, 3, 32, 1, 65, 16, 79, 4, 127, 32, 3, 65, 16, 107, 33, 6, 32, 2, 65, 168, 136, 141, 161, 2, 106, 33, 3, 32, 2, 65, 247, 148, 175, 175, 120, 106, 33, 4, 32, 2, 65, 177, 243, 221, 241, 121, 107, 33, 5, 3, 64, 32, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 3, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 3, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 4, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 2, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 5, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 5, 32, 0, 65, 4, 106, 34, 0, 32, 6, 77, 13, 0, 11, 32, 2, 65, 12, 119, 32, 5, 65, 18, 119, 106, 32, 4, 65, 7, 119, 106, 32, 3, 65, 1, 119, 106, 5, 32, 2, 65, 177, 207, 217, 178, 1, 106, 11, 32, 1, 106, 32, 0, 32, 1, 65, 15, 113, 16, 1, 11, 146, 1, 0, 32, 1, 32, 2, 106, 33, 2, 3, 64, 32, 1, 65, 4, 106, 32, 2, 75, 69, 4, 64, 32, 1, 40, 2, 0, 65, 189, 220, 202, 149, 124, 108, 32, 0, 106, 65, 17, 119, 65, 175, 214, 211, 190, 2, 108, 33, 0, 32, 1, 65, 4, 106, 33, 1, 12, 1, 11, 11, 3, 64, 32, 1, 32, 2, 79, 69, 4, 64, 32, 1, 45, 0, 0, 65, 177, 207, 217, 178, 1, 108, 32, 0, 106, 65, 11, 119, 65, 177, 243, 221, 241, 121, 108, 33, 0, 32, 1, 65, 1, 106, 33, 1, 12, 1, 11, 11, 32, 0, 65, 15, 118, 32, 0, 115, 65, 247, 148, 175, 175, 120, 108, 34, 0, 32, 0, 65, 13, 118, 115, 65, 189, 220, 202, 149, 124, 108, 34, 0, 32, 0, 65, 16, 118, 115, 11, 63, 0, 32, 0, 65, 8, 106, 32, 1, 65, 168, 136, 141, 161, 2, 106, 54, 2, 0, 32, 0, 65, 12, 106, 32, 1, 65, 247, 148, 175, 175, 120, 106, 54, 2, 0, 32, 0, 65, 16, 106, 32, 1, 54, 2, 0, 32, 0, 65, 20, 106, 32, 1, 65, 177, 243, 221, 241, 121, 107, 54, 2, 0, 11, 211, 4, 1, 6, 127, 32, 1, 32, 2, 106, 33, 6, 32, 0, 65, 24, 106, 33, 5, 32, 0, 65, 40, 106, 40, 2, 0, 33, 3, 32, 0, 32, 0, 40, 2, 0, 32, 2, 106, 54, 2, 0, 32, 0, 65, 4, 106, 34, 4, 32, 4, 40, 2, 0, 32, 2, 65, 16, 79, 32, 0, 40, 2, 0, 65, 16, 79, 114, 114, 54, 2, 0, 32, 2, 32, 3, 106, 65, 16, 73, 4, 64, 32, 3, 32, 5, 106, 32, 1, 32, 2, 252, 10, 0, 0, 32, 0, 65, 40, 106, 32, 2, 32, 3, 106, 54, 2, 0, 15, 11, 32, 3, 4, 64, 32, 3, 32, 5, 106, 32, 1, 65, 16, 32, 3, 107, 34, 2, 252, 10, 0, 0, 32, 0, 65, 8, 106, 34, 3, 40, 2, 0, 32, 5, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 3, 32, 4, 54, 2, 0, 32, 0, 65, 12, 106, 34, 3, 40, 2, 0, 32, 5, 65, 4, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 3, 32, 4, 54, 2, 0, 32, 0, 65, 16, 106, 34, 3, 40, 2, 0, 32, 5, 65, 8, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 3, 32, 4, 54, 2, 0, 32, 0, 65, 20, 106, 34, 3, 40, 2, 0, 32, 5, 65, 12, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 3, 32, 4, 54, 2, 0, 32, 0, 65, 40, 106, 65, 0, 54, 2, 0, 32, 1, 32, 2, 106, 33, 1, 11, 32, 1, 32, 6, 65, 16, 107, 77, 4, 64, 32, 6, 65, 16, 107, 33, 8, 32, 0, 65, 8, 106, 40, 2, 0, 33, 2, 32, 0, 65, 12, 106, 40, 2, 0, 33, 3, 32, 0, 65, 16, 106, 40, 2, 0, 33, 4, 32, 0, 65, 20, 106, 40, 2, 0, 33, 7, 3, 64, 32, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 2, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 3, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 3, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 4, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 32, 7, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 7, 32, 1, 65, 4, 106, 34, 1, 32, 8, 77, 13, 0, 11, 32, 0, 65, 8, 106, 32, 2, 54, 2, 0, 32, 0, 65, 12, 106, 32, 3, 54, 2, 0, 32, 0, 65, 16, 106, 32, 4, 54, 2, 0, 32, 0, 65, 20, 106, 32, 7, 54, 2, 0, 11, 32, 1, 32, 6, 73, 4, 64, 32, 5, 32, 1, 32, 6, 32, 1, 107, 34, 1, 252, 10, 0, 0, 32, 0, 65, 40, 106, 32, 1, 54, 2, 0, 11, 11, 97, 1, 1, 127, 32, 0, 65, 16, 106, 40, 2, 0, 33, 1, 32, 0, 65, 4, 106, 40, 2, 0, 4, 127, 32, 1, 65, 12, 119, 32, 0, 65, 20, 106, 40, 2, 0, 65, 18, 119, 106, 32, 0, 65, 12, 106, 40, 2, 0, 65, 7, 119, 106, 32, 0, 65, 8, 106, 40, 2, 0, 65, 1, 119, 106, 5, 32, 1, 65, 177, 207, 217, 178, 1, 106, 11, 32, 0, 40, 2, 0, 106, 32, 0, 65, 24, 106, 32, 0, 65, 40, 106, 40, 2, 0, 16, 1, 11, 157, 4, 2, 1, 127, 3, 126, 32, 0, 32, 1, 106, 33, 3, 32, 1, 65, 32, 79, 4, 126, 32, 3, 65, 32, 107, 33, 3, 32, 2, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 124, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 124, 33, 4, 32, 2, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 124, 33, 5, 32, 2, 66, 0, 124, 33, 6, 32, 2, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 125, 33, 2, 3, 64, 32, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 4, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 4, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 5, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 5, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 6, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 2, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 2, 32, 0, 65, 8, 106, 34, 0, 32, 3, 77, 13, 0, 11, 32, 6, 66, 12, 137, 32, 2, 66, 18, 137, 124, 32, 5, 66, 7, 137, 124, 32, 4, 66, 1, 137, 124, 32, 4, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 5, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 6, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 2, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 5, 32, 2, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 124, 11, 32, 1, 173, 124, 32, 0, 32, 1, 65, 31, 113, 16, 6, 11, 137, 2, 0, 32, 1, 32, 2, 106, 33, 2, 3, 64, 32, 1, 65, 8, 106, 32, 2, 77, 4, 64, 32, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 32, 0, 133, 66, 27, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 33, 0, 32, 1, 65, 8, 106, 33, 1, 12, 1, 11, 11, 32, 1, 65, 4, 106, 32, 2, 77, 4, 64, 32, 1, 53, 2, 0, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 32, 0, 133, 66, 23, 137, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 124, 33, 0, 32, 1, 65, 4, 106, 33, 1, 11, 3, 64, 32, 1, 32, 2, 73, 4, 64, 32, 1, 49, 0, 0, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 126, 32, 0, 133, 66, 11, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 0, 32, 1, 65, 1, 106, 33, 1, 12, 1, 11, 11, 32, 0, 66, 33, 136, 32, 0, 133, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 34, 0, 32, 0, 66, 29, 136, 133, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 126, 34, 0, 32, 0, 66, 32, 136, 133, 11, 88, 0, 32, 0, 65, 8, 106, 32, 1, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 124, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 124, 55, 3, 0, 32, 0, 65, 16, 106, 32, 1, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 124, 55, 3, 0, 32, 0, 65, 24, 106, 32, 1, 55, 3, 0, 32, 0, 65, 32, 106, 32, 1, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 125, 55, 3, 0, 11, 132, 5, 2, 3, 127, 4, 126, 32, 1, 32, 2, 106, 33, 5, 32, 0, 65, 40, 106, 33, 4, 32, 0, 65, 200, 0, 106, 40, 2, 0, 33, 3, 32, 0, 32, 0, 41, 3, 0, 32, 2, 173, 124, 55, 3, 0, 32, 2, 32, 3, 106, 65, 32, 73, 4, 64, 32, 3, 32, 4, 106, 32, 1, 32, 2, 252, 10, 0, 0, 32, 0, 65, 200, 0, 106, 32, 2, 32, 3, 106, 54, 2, 0, 15, 11, 32, 3, 4, 64, 32, 3, 32, 4, 106, 32, 1, 65, 32, 32, 3, 107, 34, 2, 252, 10, 0, 0, 32, 0, 65, 8, 106, 34, 3, 41, 3, 0, 32, 4, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 3, 32, 6, 55, 3, 0, 32, 0, 65, 16, 106, 34, 3, 41, 3, 0, 32, 4, 65, 8, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 3, 32, 6, 55, 3, 0, 32, 0, 65, 24, 106, 34, 3, 41, 3, 0, 32, 4, 65, 16, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 3, 32, 6, 55, 3, 0, 32, 0, 65, 32, 106, 34, 3, 41, 3, 0, 32, 4, 65, 24, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 3, 32, 6, 55, 3, 0, 32, 0, 65, 200, 0, 106, 65, 0, 54, 2, 0, 32, 1, 32, 2, 106, 33, 1, 11, 32, 1, 65, 32, 106, 32, 5, 77, 4, 64, 32, 5, 65, 32, 107, 33, 2, 32, 0, 65, 8, 106, 41, 3, 0, 33, 6, 32, 0, 65, 16, 106, 41, 3, 0, 33, 7, 32, 0, 65, 24, 106, 41, 3, 0, 33, 8, 32, 0, 65, 32, 106, 41, 3, 0, 33, 9, 3, 64, 32, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 6, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 7, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 7, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 8, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 8, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 32, 9, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 9, 32, 1, 65, 8, 106, 34, 1, 32, 2, 77, 13, 0, 11, 32, 0, 65, 8, 106, 32, 6, 55, 3, 0, 32, 0, 65, 16, 106, 32, 7, 55, 3, 0, 32, 0, 65, 24, 106, 32, 8, 55, 3, 0, 32, 0, 65, 32, 106, 32, 9, 55, 3, 0, 11, 32, 1, 32, 5, 73, 4, 64, 32, 4, 32, 1, 32, 5, 32, 1, 107, 34, 1, 252, 10, 0, 0, 32, 0, 65, 200, 0, 106, 32, 1, 54, 2, 0, 11, 11, 200, 2, 1, 5, 126, 32, 0, 65, 24, 106, 41, 3, 0, 33, 1, 32, 0, 41, 3, 0, 34, 2, 66, 32, 90, 4, 126, 32, 0, 65, 8, 106, 41, 3, 0, 34, 3, 66, 1, 137, 32, 0, 65, 16, 106, 41, 3, 0, 34, 4, 66, 7, 137, 124, 32, 1, 66, 12, 137, 32, 0, 65, 32, 106, 41, 3, 0, 34, 5, 66, 18, 137, 124, 124, 32, 3, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 4, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 1, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 32, 5, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 0, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 227, 220, 202, 149, 252, 206, 242, 245, 133, 127, 124, 5, 32, 1, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 124, 11, 32, 2, 124, 32, 0, 65, 40, 106, 32, 2, 66, 31, 131, 167, 16, 6, 11 ]); + +async function e2() { + const {instance: {exports: {mem: _, xxh32: ee, xxh64: ne, init32: ie, update32: re, digest32: se, init64: oe, update64: le, digest64: ue}}} = await WebAssembly.instantiate(t2); + let de = new Uint8Array(_.buffer); + function c2(ee, ne) { + if (_.buffer.byteLength < ee + ne) { + const ie = Math.ceil((ee + ne - _.buffer.byteLength) / 65536); + _.grow(ie), de = new Uint8Array(_.buffer); + } + } + function l2(_, ee, ne, ie, re, se) { + c2(_); + const oe = new Uint8Array(_); + return de.set(oe), ne(0, ee), oe.set(de.slice(0, _)), { + update(ee) { + let ne; + return de.set(oe), "string" == typeof ee ? (c2(3 * ee.length, _), ne = he.encodeInto(ee, de.subarray(_)).written) : (c2(ee.byteLength, _), + de.set(ee, _), ne = ee.byteLength), ie(0, _, ne), oe.set(de.slice(0, _)), this; + }, + digest: () => (de.set(oe), se(re(0))) + }; + } + function d4(_) { + return _ >>> 0; + } + const fe = BigInt(2) ** BigInt(64) - BigInt(1); + function y2(_) { + return _ & fe; + } + const he = new TextEncoder, pe = BigInt(0); + function p2(_) { + let ne = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + return c2(3 * _.length, 0), d4(ee(0, he.encodeInto(_, de).written, ne)); + } + function v2(_) { + let ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : pe; + return c2(3 * _.length, 0), y2(ne(0, he.encodeInto(_, de).written, ee)); + } + return { + h32: p2, + h32ToString(_) { + return p2(_, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0).toString(16).padStart(8, "0"); + }, + h32Raw(_) { + let ne = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + return c2(_.byteLength, 0), de.set(_), d4(ee(0, _.byteLength, ne)); + }, + create32() { + return l2(48, arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, ie, re, se, d4); + }, + h64: v2, + h64ToString(_) { + return v2(_, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : pe).toString(16).padStart(16, "0"); + }, + h64Raw(_) { + let ee = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : pe; + return c2(_.byteLength, 0), de.set(_), y2(ne(0, _.byteLength, ee)); + }, + create64() { + return l2(88, arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : pe, oe, le, ue, y2); + } + }; +} + +async function initHashFunc() { + try { + const {h32ToString: _} = await e2(); + hashFunc = _; + Logger("xxhash for plugin initialised", LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Could not initialise xxhash. fallback...", LOG_LEVEL_VERBOSE); + Logger(_); + try { + const {h32: _} = await xxhash_wasm_default(); + hashFunc = ee => _(ee); + } catch (_) { + Logger("Could not initialise old xxhash for plugin: use sha1", LOG_LEVEL_VERBOSE); + Logger(_); + hashFunc = _ => _; + } + } + return hashFunc; +} + +initHashFunc(); + +async function sha1(_) { + const ee = writeString(_), ne = await globalThis.crypto.subtle.digest({ + name: "SHA-1" + }, ee); + return await arrayBufferToBase64Single(ne); +} + +function digestHash(_) { + let ee = ""; + for (const ne of _) ee = hashFunc(ee + ne); + if ("" == ee) return hashFunc("**"); else return ee; +} + +var LiveSyncCommands = class { + get app() { + return this.plugin.app; + } + get settings() { + return this.plugin.settings; + } + get localDatabase() { + return this.plugin.localDatabase; + } + get vaultAccess() { + return this.plugin.vaultAccess; + } + id2path(_, ee, ne) { + return this.plugin.id2path(_, ee, ne); + } + async path2id(_, ee) { + return await this.plugin.path2id(_, ee); + } + getPath(_) { + return this.plugin.getPath(_); + } + constructor(_) { + this.plugin = _; + } +}; + +function add_css(_) { + append_styles(_, "svelte-10t8oe0", ".spacer.svelte-10t8oe0{flex-grow:1}.infos.svelte-10t8oe0{display:flex;justify-content:space-between;margin:4px 0.5em}.deleted.svelte-10t8oe0{text-decoration:line-through}.svelte-10t8oe0{box-sizing:border-box}.scroller.svelte-10t8oe0{display:flex;flex-direction:column;overflow-y:scroll;max-height:60vh;user-select:text}.json-source.svelte-10t8oe0{white-space:pre;height:auto;overflow:auto;min-height:var(--font-ui-medium);flex-grow:1}"); +} + +function get_each_context(_, ee, ne) { + const ie = _.slice(); + ie[28] = ee[ne]; + return ie; +} + +function get_each_context_1(_, ee, ne) { + const ie = _.slice(); + ie[31] = ee[ne]; + return ie; +} + +function create_else_block(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce, we, Le, Oe, ke, Ae, xe, Re, Te, Pe, Ie, De, Be, Ne, Me, Fe, Ve = new Date(_[4].mtime).toLocaleString() + "", $e = _[6].length + "", Ge = new Date(_[5].mtime).toLocaleString() + "", Ue = _[7].length + "", je = ensure_array_like(_[12]), ze = []; + for (let ee = 0; ee < je.length; ee += 1) ze[ee] = create_each_block_1(get_each_context_1(_, je, ee)); + function select_block_type_1(_, ee) { + if (false != _[9]) return create_if_block_4; else return create_else_block_1; + } + let qe = select_block_type_1(_), He = qe(_), Ke = _[4]._id == _[5]._id && create_if_block_3(_), We = _[4]._id == _[5]._id && create_if_block_2(_), Xe = _[3] && create_if_block_1(_); + return { + c() { + ee = element("div"); + for (let _ = 0; _ < ze.length; _ += 1) ze[_].c(); + ne = space(); + He.c(); + ie = space(); + re = element("div"); + se = element("table"); + oe = element("tr"); + le = element("th"); + ue = text(_[1]); + de = space(); + fe = element("td"); + if (Ke) Ke.c(); + he = space(); + pe = text(Ve); + ge = space(); + me = element("td"); + ye = text($e); + Se = text(" letters"); + Ee = space(); + ve = element("tr"); + Ce = element("th"); + we = text(_[2]); + Le = space(); + Oe = element("td"); + if (We) We.c(); + ke = space(); + Ae = text(Ge); + xe = space(); + Re = element("td"); + Te = text(Ue); + Pe = text(" letters"); + Ie = space(); + De = element("div"); + if (Xe) Xe.c(); + Be = space(); + Ne = element("button"); + Ne.textContent = "Apply"; + attr(ee, "class", "options svelte-10t8oe0"); + attr(le, "class", "svelte-10t8oe0"); + attr(fe, "class", "svelte-10t8oe0"); + attr(me, "class", "svelte-10t8oe0"); + attr(oe, "class", "svelte-10t8oe0"); + attr(Ce, "class", "svelte-10t8oe0"); + attr(Oe, "class", "svelte-10t8oe0"); + attr(Re, "class", "svelte-10t8oe0"); + attr(ve, "class", "svelte-10t8oe0"); + attr(se, "class", "svelte-10t8oe0"); + attr(re, "class", "infos svelte-10t8oe0"); + attr(Ne, "class", "svelte-10t8oe0"); + attr(De, "class", "buttons svelte-10t8oe0"); + }, + m(Ve, $e) { + insert(Ve, ee, $e); + for (let _ = 0; _ < ze.length; _ += 1) if (ze[_]) ze[_].m(ee, null); + insert(Ve, ne, $e); + He.m(Ve, $e); + insert(Ve, ie, $e); + insert(Ve, re, $e); + append(re, se); + append(se, oe); + append(oe, le); + append(le, ue); + append(oe, de); + append(oe, fe); + if (Ke) Ke.m(fe, null); + append(fe, he); + append(fe, pe); + append(oe, ge); + append(oe, me); + append(me, ye); + append(me, Se); + append(se, Ee); + append(se, ve); + append(ve, Ce); + append(Ce, we); + append(ve, Le); + append(ve, Oe); + if (We) We.m(Oe, null); + append(Oe, ke); + append(Oe, Ae); + append(ve, xe); + append(ve, Re); + append(Re, Te); + append(Re, Pe); + insert(Ve, Ie, $e); + insert(Ve, De, $e); + if (Xe) Xe.m(De, null); + append(De, Be); + append(De, Ne); + if (!Me) { + Fe = listen(Ne, "click", _[13]); + Me = true; + } + }, + p(_, ne) { + if (5376 & ne[0]) { + je = ensure_array_like(_[12]); + let ie; + for (ie = 0; ie < je.length; ie += 1) { + const re = get_each_context_1(_, je, ie); + if (ze[ie]) ze[ie].p(re, ne); else { + ze[ie] = create_each_block_1(re); + ze[ie].c(); + ze[ie].m(ee, null); + } + } + for (;ie < ze.length; ie += 1) ze[ie].d(1); + ze.length = je.length; + } + if (qe === (qe = select_block_type_1(_)) && He) He.p(_, ne); else { + He.d(1); + He = qe(_); + if (He) { + He.c(); + He.m(ie.parentNode, ie); + } + } + if (2 & ne[0]) set_data(ue, _[1]); + if (_[4]._id == _[5]._id) if (Ke) Ke.p(_, ne); else { + Ke = create_if_block_3(_); + Ke.c(); + Ke.m(fe, he); + } else if (Ke) { + Ke.d(1); + Ke = null; + } + if (16 & ne[0] && Ve !== (Ve = new Date(_[4].mtime).toLocaleString() + "")) set_data(pe, Ve); + if (64 & ne[0] && $e !== ($e = _[6].length + "")) set_data(ye, $e); + if (4 & ne[0]) set_data(we, _[2]); + if (_[4]._id == _[5]._id) if (We) We.p(_, ne); else { + We = create_if_block_2(_); + We.c(); + We.m(Oe, ke); + } else if (We) { + We.d(1); + We = null; + } + if (32 & ne[0] && Ge !== (Ge = new Date(_[5].mtime).toLocaleString() + "")) set_data(Ae, Ge); + if (128 & ne[0] && Ue !== (Ue = _[7].length + "")) set_data(Te, Ue); + if (_[3]) if (Xe) Xe.p(_, ne); else { + Xe = create_if_block_1(_); + Xe.c(); + Xe.m(De, Be); + } else if (Xe) { + Xe.d(1); + Xe = null; + } + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + detach(ie); + detach(re); + detach(Ie); + detach(De); + } + destroy_each(ze, _); + He.d(_); + if (Ke) Ke.d(); + if (We) We.d(); + if (Xe) Xe.d(); + Me = false; + Fe(); + } + }; +} + +function create_if_block(_) { + let ee, ne, ie, re, se, oe; + return { + c() { + ee = element("div"); + ee.textContent = "Just for a minute, please!"; + ne = space(); + ie = element("div"); + re = element("button"); + re.textContent = "Dismiss"; + attr(ee, "class", "message svelte-10t8oe0"); + attr(re, "class", "svelte-10t8oe0"); + attr(ie, "class", "buttons svelte-10t8oe0"); + }, + m(le, ue) { + insert(le, ee, ue); + insert(le, ne, ue); + insert(le, ie, ue); + append(ie, re); + if (!se) { + oe = listen(re, "click", _[13]); + se = true; + } + }, + p: noop2, + d(_) { + if (_) { + detach(ee); + detach(ne); + detach(ie); + } + se = false; + oe(); + } + }; +} + +function create_if_block_5(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he = false, pe = _[31][1] + ""; + ue = init_binding_group(_[24][0]); + return { + c() { + ee = element("label"); + ne = element("input"); + re = space(); + se = element("div"); + oe = text(pe); + attr(ne, "type", "radio"); + attr(ne, "name", "disp"); + ne.__value = ie = _[31][0]; + set_input_value(ne, ne.__value); + attr(ne, "class", "sls-setting-tab svelte-10t8oe0"); + attr(se, "class", "sls-setting-menu-btn svelte-10t8oe0"); + attr(ee, "class", le = null_to_empty("sls-setting-label " + (_[31][0] == _[8] ? "selected" : "")) + " svelte-10t8oe0"); + ue.p(ne); + }, + m(ie, le) { + insert(ie, ee, le); + append(ee, ne); + ne.checked = ne.__value === _[8]; + append(ee, re); + append(ee, se); + append(se, oe); + if (!de) { + fe = listen(ne, "change", _[23]); + de = true; + } + }, + p(_, re) { + if (4096 & re[0] && ie !== (ie = _[31][0])) { + ne.__value = ie; + set_input_value(ne, ne.__value); + he = true; + } + if (he || 4352 & re[0]) ne.checked = ne.__value === _[8]; + if (4096 & re[0] && pe !== (pe = _[31][1] + "")) set_data(oe, pe); + if (4352 & re[0] && le !== (le = null_to_empty("sls-setting-label " + (_[31][0] == _[8] ? "selected" : "")) + " svelte-10t8oe0")) attr(ee, "class", le); + }, + d(_) { + if (_) detach(ee); + ue.r(); + de = false; + fe(); + } + }; +} + +function create_each_block_1(_) { + let ee, ne = ("" == _[31][0] || false != _[10][_[31][0]]) && create_if_block_5(_); + return { + c() { + if (ne) ne.c(); + ee = empty(); + }, + m(_, ie) { + if (ne) ne.m(_, ie); + insert(_, ee, ie); + }, + p(_, ie) { + if ("" == _[31][0] || false != _[10][_[31][0]]) if (ne) ne.p(_, ie); else { + ne = create_if_block_5(_); + ne.c(); + ne.m(ee.parentNode, ee); + } else if (ne) { + ne.d(1); + ne = null; + } + }, + d(_) { + if (_) detach(ee); + if (ne) ne.d(_); + } + }; +} + +function create_else_block_1(_) { + let ee; + return { + c() { + ee = text("NO PREVIEW"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_4(_) { + let ee, ne = ensure_array_like(_[11]), ie = []; + for (let ee = 0; ee < ne.length; ee += 1) ie[ee] = create_each_block(get_each_context(_, ne, ee)); + return { + c() { + ee = element("div"); + for (let _ = 0; _ < ie.length; _ += 1) ie[_].c(); + attr(ee, "class", "op-scrollable json-source svelte-10t8oe0"); + }, + m(_, ne) { + insert(_, ee, ne); + for (let _ = 0; _ < ie.length; _ += 1) if (ie[_]) ie[_].m(ee, null); + }, + p(_, re) { + if (2048 & re[0]) { + ne = ensure_array_like(_[11]); + let se; + for (se = 0; se < ne.length; se += 1) { + const oe = get_each_context(_, ne, se); + if (ie[se]) ie[se].p(oe, re); else { + ie[se] = create_each_block(oe); + ie[se].c(); + ie[se].m(ee, null); + } + } + for (;se < ie.length; se += 1) ie[se].d(1); + ie.length = ne.length; + } + }, + d(_) { + if (_) detach(ee); + destroy_each(ie, _); + } + }; +} + +function create_each_block(_) { + let ee, ne, ie, re = _[28][1] + ""; + return { + c() { + ee = element("span"); + ne = text(re); + attr(ee, "class", ie = null_to_empty(_[28][0] == import_diff_match_patch.DIFF_DELETE ? "deleted" : _[28][0] == import_diff_match_patch.DIFF_INSERT ? "added" : "normal") + " svelte-10t8oe0"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, se) { + if (2048 & se[0] && re !== (re = _[28][1] + "")) set_data(ne, re); + if (2048 & se[0] && ie !== (ie = null_to_empty(_[28][0] == import_diff_match_patch.DIFF_DELETE ? "deleted" : _[28][0] == import_diff_match_patch.DIFF_INSERT ? "added" : "normal") + " svelte-10t8oe0")) attr(ee, "class", ie); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_3(_) { + let ee, ne, ie = revStringToRevNumber(_[4]._rev) + ""; + return { + c() { + ee = text("Rev:"); + ne = text(ie); + }, + m(_, ie) { + insert(_, ee, ie); + insert(_, ne, ie); + }, + p(_, ee) { + if (16 & ee[0] && ie !== (ie = revStringToRevNumber(_[4]._rev) + "")) set_data(ne, ie); + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + } + } + }; +} + +function create_if_block_2(_) { + let ee, ne, ie = revStringToRevNumber(_[5]._rev) + ""; + return { + c() { + ee = text("Rev:"); + ne = text(ie); + }, + m(_, ie) { + insert(_, ee, ie); + insert(_, ne, ie); + }, + p(_, ee) { + if (32 & ee[0] && ie !== (ie = revStringToRevNumber(_[5]._rev) + "")) set_data(ne, ie); + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + } + } + }; +} + +function create_if_block_1(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "Cancel"; + attr(ee, "class", "svelte-10t8oe0"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[14]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_fragment(_) { + let ee, ne, ie, re; + function select_block_type(_, ee) { + if (!_[4] || !_[5]) return create_if_block; else return create_else_block; + } + let se = select_block_type(_), oe = se(_); + return { + c() { + ee = element("h2"); + ne = text(_[0]); + ie = space(); + oe.c(); + re = empty(); + attr(ee, "class", "svelte-10t8oe0"); + }, + m(_, se) { + insert(_, ee, se); + append(ee, ne); + insert(_, ie, se); + oe.m(_, se); + insert(_, re, se); + }, + p(_, ee) { + if (1 & ee[0]) set_data(ne, _[0]); + if (se === (se = select_block_type(_)) && oe) oe.p(_, ee); else { + oe.d(1); + oe = se(_); + if (oe) { + oe.c(); + oe.m(re.parentNode, re); + } + } + }, + i: noop2, + o: noop2, + d(_) { + if (_) { + detach(ee); + detach(ie); + detach(re); + } + oe.d(_); + } + }; +} + +function revStringToRevNumber(_) { + if (!_) return ""; else return _.split("-")[0]; +} + +function instance(_, ee, ne) { + let ie, re, se, oe, le, {docs: ue = []} = ee, {callback: de = async (_, ee) => { + Promise.resolve(); + }} = ee, {filename: fe = ""} = ee, {nameA: he = "A"} = ee, {nameB: pe = "B"} = ee, {defaultSelect: ge = ""} = ee, {keepOrder: me = false} = ee, {hideLocal: ye = false} = ee, Se = "", Ee = "", ve = {}, Ce = {}, we = {}, Le = {}, Oe = ge; + function docToString(_) { + return "plain" == _.datatype ? getDocData(_.data) : readString(new Uint8Array(decodeBinary(_.data))); + } + let ke = []; + _.$$set = _ => { + if ("docs" in _) ne(15, ue = _.docs); + if ("callback" in _) ne(16, de = _.callback); + if ("filename" in _) ne(0, fe = _.filename); + if ("nameA" in _) ne(1, he = _.nameA); + if ("nameB" in _) ne(2, pe = _.nameB); + if ("defaultSelect" in _) ne(17, ge = _.defaultSelect); + if ("keepOrder" in _) ne(18, me = _.keepOrder); + if ("hideLocal" in _) ne(3, ye = _.hideLocal); + }; + _.$$.update = () => { + if (8159472 & _.$$.dirty[0]) if (ue && ue.length >= 1) { + if (me || ue[0].mtime < ue[1].mtime) { + ne(4, se = ue[0]); + ne(5, oe = ue[1]); + } else { + ne(4, se = ue[1]); + ne(5, oe = ue[0]); + } + ne(6, Se = docToString(se)); + ne(7, Ee = docToString(oe)); + try { + ne(19, ve = false); + ne(20, Ce = false); + ne(19, ve = JSON.parse(Se)); + ne(20, Ce = JSON.parse(Ee)); + ne(21, we = mergeObject(ve, Ce)); + ne(22, Le = mergeObject(Ce, ve)); + if (JSON.stringify(we) == JSON.stringify(Le)) ne(22, Le = false); + } catch (_) { + ne(22, Le = false); + ne(21, we = false); + } + } + if (7864320 & _.$$.dirty[0]) ne(10, ie = { + "": false, + A: ve, + B: Ce, + AB: we, + BA: Le + }); + if (1280 & _.$$.dirty[0]) ne(9, re = Oe in ie ? ie[Oe] : {}); + if (524800 & _.$$.dirty[0]) ne(11, le = function getJsonDiff(_, ee) { + return function getDiff(_, ee) { + const ne = new import_diff_match_patch.diff_match_patch, ie = ne.diff_linesToChars_(_, ee), re = ne.diff_main(ie.chars1, ie.chars2, false); + ne.diff_charsToLines_(re, ie.lineArray); + return re; + }(JSON.stringify(_, null, 2), JSON.stringify(ee, null, 2)); + }(ve, re)); + if (14 & _.$$.dirty[0]) { + let _ = []; + if (!ye) { + _.push([ "", "Not now" ]); + _.push([ "A", he || "A" ]); + } + _.push([ "B", pe || "B" ]); + _.push([ "AB", `${he || "A"} + ${pe || "B"}` ]); + _.push([ "BA", `${pe || "B"} + ${he || "A"}` ]); + ne(12, ke = _); + } + }; + return [ fe, he, pe, ye, se, oe, Se, Ee, Oe, re, ie, le, ke, function apply() { + if (se._id == oe._id) { + if ("A" == Oe) return de(se._rev, void 0); + if ("B" == Oe) return de(oe._rev, void 0); + } else { + if ("A" == Oe) return de(void 0, docToString(se)); + if ("B" == Oe) return de(void 0, docToString(oe)); + } + if ("BA" == Oe) return de(void 0, JSON.stringify(Le, null, 2)); + if ("AB" == Oe) return de(void 0, JSON.stringify(we, null, 2)); + de(void 0, void 0); + }, function cancel() { + de(void 0, void 0); + }, ue, de, ge, me, ve, Ce, we, Le, function input_change_handler() { + Oe = this.__value; + ne(8, Oe); + }, [ [] ] ]; +} + +var context, JsonResolvePane = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance, create_fragment, safe_not_equal, { + docs: 15, + callback: 16, + filename: 0, + nameA: 1, + nameB: 2, + defaultSelect: 17, + keepOrder: 18, + hideLocal: 3 + }, add_css, [ -1, -1 ]); + } +}, JsonResolvePane_default = JsonResolvePane, JsonResolveModal = class extends import_obsidian.Modal { + constructor(_, ee, ne, ie, re, se, oe, le, ue, de = "Conflicted Setting") { + super(_); + this.title = "Conflicted Setting"; + this.callback = ie; + this.filename = ee; + this.docs = ne; + this.nameA = re || ""; + this.nameB = se || ""; + this.keepOrder = le || false; + this.defaultSelect = oe || ""; + this.title = de; + this.hideLocal = null != ue ? ue : false; + waitForSignal(`cancel-internal-conflict:${ee}`).then((() => this.close())); + } + async UICallback(_, ee) { + var ne; + this.close(); + await (null == (ne = this.callback) ? void 0 : ne.call(this, _, ee)); + this.callback = void 0; + } + onOpen() { + const {contentEl: _} = this; + this.titleEl.setText(this.title); + _.empty(); + if (null == this.component) this.component = new JsonResolvePane_default({ + target: _, + props: { + docs: this.docs, + filename: this.filename, + nameA: this.nameA, + nameB: this.nameB, + defaultSelect: this.defaultSelect, + keepOrder: this.keepOrder, + hideLocal: this.hideLocal, + callback: (_, ee) => this.UICallback(_, ee) + } + }); + } + onClose() { + const {contentEl: _} = this; + _.empty(); + if (null != this.callback) this.callback(void 0); + if (null != this.component) { + this.component.$destroy(); + this.component = void 0; + } + } +}; + +function reactiveSource(_) { + return _reactive({ + initialValue: _ + }); +} + +function reactive(_, ee) { + return _reactive({ + expression: _, + initialValue: ee + }); +} + +function _reactive({expression: _, initialValue: ee}) { + let ne, ie = false; + const re = new Set, se = { + myContext: new Set, + markDirty() { + ie = true; + se.markDependedDirty(); + }, + rippleChanged() { + re.forEach((_ => _(se))); + se.myContext.forEach((_ => _.rippleChanged())); + }, + markClean() { + ie = false; + }, + markDependedDirty() { + se.myContext.forEach((_ => _.markDirty())); + }, + get isDirty() { + return ie; + }, + get value() { + if (context) se.myContext.add(context); + if (!_) return ne; + if (ie) { + const ee = ne, ie = _(); + if (isObjectDifferent(ee, ie)) { + ne = ie; + se.markClean(); + se.markDependedDirty(); + } + } + return ne; + }, + set value(_) { + if (isObjectDifferent(ne, _)) { + ne = _; + se.markDirty(); + se.rippleChanged(); + } + }, + onChanged(_) { + re.add(_); + se.markDirty(); + }, + offChanged(_) { + re.delete(_); + } + }; + ne = function initialize() { + const ne = context; + context = se; + const ie = _ ? _(ee) : ee; + context = ne; + return ie; + }(); + return se; +} + +function computed(_) { + const ee = reactive(_); + return () => ee.value; +} + +var lockStats = reactiveSource({ + pending: [], + running: [], + count: 0 +}), collectingChunks = reactiveSource(0), pluginScanningCount = reactiveSource(0), hiddenFilesProcessingCount = reactiveSource(0), hiddenFilesEventCount = reactiveSource(0), logStore = new QueueProcessor((_ => _), { + batchSize: 1, + suspended: false, + keepResultUntilDownstreamConnected: true +}), logMessages = reactiveSource([]), d = "​", d2 = "\n"; + +function serialize(_) { + var ee, ne, ie, re, se; + let oe = ""; + oe += ":"; + oe += _.category + d + _.name + d + _.term + d2; + oe += (null != (ee = _.version) ? ee : "") + d2; + oe += _.mtime + d2; + for (const ee of _.files) { + oe += ee.filename + d + (null != (ne = ee.displayName) ? ne : "") + d + (null != (ie = ee.version) ? ie : "") + d2; + const _ = digestHash(null != (re = ee.data) ? re : []); + oe += ee.mtime + d + ee.size + d + _ + d2; + for (const _ of null != (se = ee.data) ? se : []) oe += _ + d; + oe += d2; + } + return oe; +} + +var DUMMY_HEAD = serialize({ + category: "CONFIG", + name: "migrated", + files: [], + mtime: 0, + term: "-", + displayName: "MIRAGED" +}), DUMMY_END = d + d2 + "‌"; + +function splitWithDelimiters(_) { + const ee = []; + for (const ne of _) { + let _ = 0; + const ie = ne.length; + let re, se, oe = -1; + do { + re = ne.indexOf(d, _); + se = ne.indexOf(d2, _); + if (-1 == re && -1 == se) break; + if (-1 == re) oe = se; else if (-1 == se) oe = re; else oe = re < se ? re : se; + ee.push(ne.slice(_, oe + 1)); + _ = oe + 1; + } while (oe < ie); + if (_ < ie) ee.push(ne.slice(_)); + } + if ("" == _[_.length - 1]) ee.push(""); + return ee; +} + +function getTokenizer(_) { + const ee = splitWithDelimiters(_); + ee[0] = ee[0].substring(1); + let ne = 0, ie = false; + return { + next() { + if (ie) return ""; + if (ne >= ee.length) return ""; + const _ = ee[ne]; + if (!_.endsWith(d2)) ne++; else ie = true; + if (_.endsWith(d) || _.endsWith(d2)) return _.substring(0, _.length - 1); else return _ + this.next(); + }, + nextLine() { + if (ie) ne++; else { + for (;!ee[ne].endsWith(d2); ) { + ne++; + if (ne >= ee.length) break; + } + ne++; + } + ie = false; + } + }; +} + +function deserialize2(_) { + const ee = getTokenizer(_), ne = ee.next(), ie = ee.next(), re = ee.next(); + ee.nextLine(); + const se = ee.next(); + ee.nextLine(); + const oe = Number(ee.next()); + ee.nextLine(); + const le = Object.assign({}, { + category: ne, + name: ie, + term: re, + version: se, + mtime: oe, + files: [] + }); + let ue = ""; + do { + ue = ee.next(); + if (!ue) break; + const _ = ee.next(), ne = ee.next(); + ee.nextLine(); + const ie = Number(ee.next()), re = Number(ee.next()), se = ee.next(); + ee.nextLine(); + const oe = []; + let de = ""; + do { + de = ee.next(); + if ("" == de) break; + oe.push(de); + } while ("" != de); + le.files.push({ + filename: ue, + displayName: _, + version: ne, + mtime: ie, + size: re, + data: oe, + hash: se + }); + ee.nextLine(); + } while (ue); + return le; +} + +function deserialize(_, ee) { + try { + if (":" == _[0][0]) return deserialize2(_); else return JSON.parse(_.join("")); + } catch (ne) { + try { + return (0, import_obsidian.parseYaml)(_.join("")); + } catch (_) { + return ee; + } + } +} + +var pluginList = writable([]), pluginIsEnumerating = writable(false), pluginV2Progress = writable(0); + +function categoryToFolder(_, ee = "") { + switch (_) { + case "CONFIG": + return `${ee}/`; + + case "THEME": + return `${ee}/themes/`; + + case "SNIPPET": + return `${ee}/snippets/`; + + case "PLUGIN_MAIN": + return `${ee}/plugins/`; + + case "PLUGIN_DATA": + return `${ee}/plugins/`; + + case "PLUGIN_ETC": + return `${ee}/plugins/`; + + default: + return ""; + } +} + +var pluginManifests = new Map, pluginManifestStore = writable(pluginManifests); + +function setManifest(_, ee) { + const ne = pluginManifests.get(_); + if (!ne || isObjectDifferent(ee, ne)) { + pluginManifests.set(_, ee); + pluginManifestStore.set(pluginManifests); + } +} + +var PluginDataExDisplayV2 = class { + constructor(_) { + this.files = []; + this.documentPath = `${_.documentPath}`; + this.category = `${_.category}`; + this.name = `${_.name}`; + this.term = `${_.term}`; + this.files = [ ..._.files ]; + this.confKey = `${categoryToFolder(this.category, this.term)}${this.name}`; + this.applyLoadedManifest(); + } + async setFile(_) { + const ee = this.files.find((ee => ee.filename == _.filename)); + if (ee) { + if (ee.mtime == _.mtime && await isDocContentSame(ee.data, _.data)) return; + this.files = this.files.filter((ee => ee.filename != _.filename)); + } + this.files.push(_); + if ("manifest.json" == _.filename) this.applyLoadedManifest(); + } + deleteFile(_) { + this.files = this.files.filter((ee => ee.filename != _)); + } + applyLoadedManifest() { + const _ = pluginManifests.get(this.confKey); + if (_) { + this._displayName = _.name; + if ("PLUGIN_MAIN" == this.category || "THEME" == this.category) this._version = null == _ ? void 0 : _.version; + } + } + get displayName() { + return this._displayName || this.name; + } + get version() { + return this._version; + } + get mtime() { + return ~~this.files.reduce(((_, ee) => _ + ee.mtime), 0) / this.files.length; + } +}, ConfigSync = class extends LiveSyncCommands { + constructor(_) { + super(_); + this.pluginDialog = void 0; + this.periodicPluginSweepProcessor = new PeriodicProcessor(this.plugin, (async () => await this.scanAllConfigFiles(false))); + this.pluginList = []; + this.pluginScanProcessor = new QueueProcessor((async _ => { + const ee = _[0]; + if (this.useV2) { + await this.migrateV1ToV2(false, ee); + return []; + } + const ne = ee.path || this.getPath(ee), ie = this.pluginList.find((_ => _.documentPath == ne)); + if (ie && ie.mtime == ee.mtime) return []; + try { + const _ = await this.loadPluginData(ne); + if (_) { + let ee = [ ...this.pluginList ]; + ee = ee.filter((ee => ee.documentPath != _.documentPath)); + ee.push(_); + this.pluginList = ee; + pluginList.set(ee); + } + return []; + } catch (_) { + Logger(`Something happened at enumerating customization :${ne}`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + return []; + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 10, + delay: 100, + yieldThreshold: 10, + maintainDelay: false, + totalRemainingReactiveSource: pluginScanningCount + }).startPipeline(); + this.pluginScanProcessorV2 = new QueueProcessor((async _ => { + const ee = _[0], ne = ee.path || this.getPath(ee), ie = this.pluginList.find((_ => _.documentPath == ne)); + if (ie && ie.mtime == ee.mtime) return []; + try { + const _ = await this.loadPluginData(ne); + if (_) { + let ee = [ ...this.pluginList ]; + ee = ee.filter((ee => ee.documentPath != _.documentPath)); + ee.push(_); + this.pluginList = ee; + pluginList.set(ee); + } + return []; + } catch (_) { + Logger(`Something happened at enumerating customization :${ne}`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + return []; + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 10, + delay: 100, + yieldThreshold: 10, + maintainDelay: false, + totalRemainingReactiveSource: pluginScanningCount + }).startPipeline(); + this.loadedManifest_mTime = new Map; + this.updatingV2Count = 0; + this.recentProcessedInternalFiles = []; + pluginScanningCount.onChanged((_ => { + const ee = _.value; + pluginIsEnumerating.set(0 != ee); + })); + } + get kvDB() { + return this.plugin.kvDB; + } + get useV2() { + return this.plugin.settings.usePluginSyncV2; + } + get useSyncPluginEtc() { + return this.plugin.settings.usePluginEtc; + } + showPluginSyncModal() { + if (this.settings.usePluginSync) if (this.pluginDialog) this.pluginDialog.open(); else { + this.pluginDialog = new PluginDialogModal(this.app, this.plugin); + this.pluginDialog.open(); + } + } + hidePluginSyncModal() { + if (null != this.pluginDialog) { + this.pluginDialog.close(); + this.pluginDialog = void 0; + } + } + onunload() { + var _; + this.hidePluginSyncModal(); + null == (_ = this.periodicPluginSweepProcessor) || _.disable(); + } + onload() { + this.plugin.addCommand({ + id: "livesync-plugin-dialog-ex", + name: "Show customization sync dialog", + callback: () => { + this.showPluginSyncModal(); + } + }); + } + getFileCategory(_) { + if (2 == _.split("/").length && _.endsWith(".json")) return "CONFIG"; + if (4 == _.split("/").length && _.startsWith(`${this.app.vault.configDir}/themes/`)) return "THEME"; + if (_.startsWith(`${this.app.vault.configDir}/snippets/`) && _.endsWith(".css")) return "SNIPPET"; + if (_.startsWith(`${this.app.vault.configDir}/plugins/`)) if (_.endsWith("/styles.css") || _.endsWith("/manifest.json") || _.endsWith("/main.js")) return "PLUGIN_MAIN"; else if (_.endsWith("/data.json")) return "PLUGIN_DATA"; else return this.useV2 && this.useSyncPluginEtc ? "PLUGIN_ETC" : ""; + return ""; + } + isTargetPath(_) { + if (!_.startsWith(this.app.vault.configDir)) return false; else return "" != this.getFileCategory(_); + } + async onInitializeDatabase(_) { + if (this.settings.usePluginSync) try { + Logger("Scanning customizations..."); + await this.scanAllConfigFiles(_); + Logger("Scanning customizations : done"); + } catch (_) { + Logger("Scanning customizations : failed"); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + async beforeReplicate(_) { + if (this.settings.autoSweepPlugins && this.settings.usePluginSync) await this.scanAllConfigFiles(_); + } + async onResume() { + if (!this.plugin.suspended) { + if (this.settings.autoSweepPlugins && this.settings.usePluginSync) await this.scanAllConfigFiles(false); + this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic && !this.settings.watchInternalFileChanges ? 1e3 * PERIODIC_PLUGIN_SWEEP : 0); + } + } + async reloadPluginList(_) { + this.pluginList = []; + this.loadedManifest_mTime.clear(); + pluginList.set(this.pluginList); + await this.updatePluginList(_); + } + async loadPluginData(_) { + const ee = await this.localDatabase.getDBEntry(_, void 0, false, false); + if (ee) { + const ne = deserialize(getDocDataAsArray(ee.data), {}), ie = []; + let re = false; + for (const _ of ne.files) { + const ee = { + ..._, + data: [] + }; + if (!_.hash) { + const ne = digestHash(getDocDataAsArray(ee.data)); + _.hash = ne; + re = true; + } + ee.data = [ _.hash ]; + ie.push(ee); + } + if (re) { + Logger(`Digest created for ${_} to improve checking`, LOG_LEVEL_VERBOSE); + ee.data = serialize(ne); + fireAndForget((() => this.localDatabase.putDBEntry(createSavingEntryFromLoadedEntry(ee)))); + } + return { + ...ne, + documentPath: this.getPath(ee), + files: ie + }; + } + return false; + } + filenameToUnifiedKey(_, ee) { + const ne = ee || this.plugin.deviceAndVaultName, ie = this.getFileCategory(_), re = "CONFIG" == ie || "SNIPPET" == ie ? _.split("/").slice(-1)[0] : "PLUGIN_ETC" == ie ? _.split("/").slice(-2).join("/") : _.split("/").slice(-2)[0]; + return `${ICXHeader}${ne}/${ie}/${re}.md`; + } + filenameWithUnifiedKey(_, ee) { + const ne = ee || this.plugin.deviceAndVaultName, ie = this.getFileCategory(_), re = "CONFIG" == ie || "SNIPPET" == ie ? _.split("/").slice(-1)[0] : _.split("/").slice(-2)[0], se = "CONFIG" == ie || "SNIPPET" == ie ? re : _.split("/").slice(3).join("/"); + return `${ICXHeader}${ne}/${ie}/${re}%${se}`; + } + unifiedKeyPrefixOfTerminal(_) { + const ee = _ || this.plugin.deviceAndVaultName; + return `${ICXHeader}${ee}/`; + } + parseUnifiedPath(_) { + const [ee, ne, ...ie] = stripAllPrefixes(_).split("/"), re = ie.join("/"), [se, oe] = re.split("%"); + return { + device: ee, + category: ne, + key: se, + filename: oe, + pathV1: _.split("%")[0] + ".md" + }; + } + async createPluginDataExFileV2(_, ee) { + const {category: ne, key: ie, filename: re, device: se} = this.parseUnifiedPath(_); + if (!ee) { + const ne = await this.localDatabase.getDBEntry(_); + if (!ne) { + Logger(`The file ${_} is not found`, LOG_LEVEL_VERBOSE); + return false; + } + if (!isLoadedEntry(ne)) { + Logger(`The file ${_} is not a note`, LOG_LEVEL_VERBOSE); + return false; + } + ee = ne; + } + const oe = `${categoryToFolder(ne, se)}${ie}`, le = `${categoryToFolder(ne, "")}${"CONFIG" == ne || "SNIPPET" == ne ? "" : ie + "/"}${re}`.substring(1), ue = getDocData(ee.data), de = ue.indexOf(DUMMY_END), fe = ue.substring(de + DUMMY_END.length), he = { + ...ee, + hash: "", + data: [ base64ToString(fe) ], + filename: le, + displayName: re + }; + if ("manifest.json" == re) if (this.loadedManifest_mTime.get(oe) != he.mtime && null == pluginManifests.get(oe)) { + try { + const _ = JSON.parse(base64ToString(fe)); + setManifest(oe, _); + this.pluginList.filter((_ => _ instanceof PluginDataExDisplayV2 && _.confKey == oe)).forEach((_ => _.applyLoadedManifest())); + pluginList.set(this.pluginList); + } catch (_) { + Logger(`The file ${ee.path} seems to manifest, but could not be decoded as JSON`, LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + } + this.loadedManifest_mTime.set(oe, he.mtime); + } else { + this.pluginList.filter((_ => _ instanceof PluginDataExDisplayV2 && _.confKey == oe)).forEach((_ => _.applyLoadedManifest())); + pluginList.set(this.pluginList); + } + return he; + } + createPluginDataFromV2(_) { + const {category: ee, device: ne, key: ie, pathV1: re} = this.parseUnifiedPath(_); + if ("" != ee) return new PluginDataExDisplayV2({ + documentPath: re, + category: ee, + name: ie, + term: `${ne}`, + files: [], + mtime: 0 + }); + } + async updatePluginListV2(_, ee) { + try { + this.updatingV2Count++; + pluginV2Progress.set(this.updatingV2Count); + const {pathV1: _} = this.parseUnifiedPath(ee), ne = this.pluginList.find((ee => ee.documentPath == _)); + let ie; + if (!(ne && ne instanceof PluginDataExDisplayV2)) { + const _ = this.createPluginDataFromV2(ee); + if (_) ie = _; + } else if (ne instanceof PluginDataExDisplayV2) ie = ne; + if (!ie) return; + const re = await this.createPluginDataExFileV2(ee); + if (re) await ie.setFile(re); else { + ie.deleteFile(ee); + if (0 == ie.files.length) this.pluginList = this.pluginList.filter((ee => ee.documentPath != _)); + } + const se = this.pluginList.filter((_ => _.documentPath != ie.documentPath)); + se.push(ie); + this.pluginList = se; + scheduleTask("updatePluginListV2", 100, (() => { + pluginList.set(this.pluginList); + })); + } finally { + this.updatingV2Count--; + pluginV2Progress.set(this.updatingV2Count); + } + } + async migrateV1ToV2(_, ee) { + var ne; + const ie = ee.path; + Logger(`Migrating ${ee.path} to V2`, _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + if (ee.deleted) { + Logger(`The entry ${ie} is already deleted`, LOG_LEVEL_VERBOSE); + return; + } + if (!ie.endsWith(".md") && !ie.startsWith(ICXHeader)) { + Logger(`The entry ${ie} is not a customisation sync binder`, LOG_LEVEL_VERBOSE); + return; + } + if (-1 !== ie.indexOf("%")) { + Logger(`The entry ${ie} is already migrated`, LOG_LEVEL_VERBOSE); + return; + } + const re = await this.localDatabase.getDBEntry(ie); + if (!re) { + Logger(`The entry ${ie} is not found`, LOG_LEVEL_VERBOSE); + return; + } + const se = deserialize(getDocDataAsArray(re.data), {}), oe = ie.slice(0, -3) + "%", le = se.category; + for (const _ of se.files) { + const ee = { + CONFIG: 0, + THEME: 2, + SNIPPET: 1, + PLUGIN_MAIN: 2, + PLUGIN_DATA: 2, + PLUGIN_ETC: 2 + }, se = null != (ne = null == ee ? void 0 : ee[le]) ? ne : 1, ue = _.filename.split("/").slice(se).join("/"), de = oe + ue; + Logger(`Migrating ${ie} / ${ue} to ${de}`, LOG_LEVEL_VERBOSE); + const fe = await this.plugin.path2id(de), he = createBlob([ DUMMY_HEAD, DUMMY_END, ...getDocDataAsArray(_.data) ]), pe = { + ...re, + _rev: void 0, + _id: fe, + path: de, + data: he, + datatype: "plain", + type: "plain", + children: [], + eden: {} + }, ge = await this.plugin.localDatabase.putDBEntry(pe); + if (ge && ge.ok) { + Logger(`Migrated ${ie} / ${_.filename} to ${de}`, LOG_LEVEL_INFO); + if (await this.deleteConfigOnDatabase(ie)) Logger(`Deleted ${ie} successfully`, LOG_LEVEL_INFO); else Logger(`Failed to delete ${ie}`, LOG_LEVEL_NOTICE); + } + } + } + async updatePluginList(_, ee) { + if (this.settings.usePluginSync) { + try { + this.updatingV2Count++; + pluginV2Progress.set(this.updatingV2Count); + const ne = ee ? await this.path2id(ee) : "", ie = ee ? this.localDatabase.findEntries(ne, ne + "􏿿", { + include_docs: true, + key: ne, + limit: 1 + }) : this.localDatabase.findEntries(ICXHeader + "", `${ICXHeader}􏿿`, { + include_docs: true + }); + for await (const ne of ie) { + if (ne.deleted || ne._deleted) continue; + if (-1 !== ne.path.indexOf("%")) { + fireAndForget((() => this.updatePluginListV2(_, ne.path))); + continue; + } + const ie = ne.path || this.getPath(ne); + if (!ee || ee == ie) this.pluginScanProcessor.enqueue(ne); + } + } finally { + pluginIsEnumerating.set(false); + this.updatingV2Count--; + pluginV2Progress.set(this.updatingV2Count); + } + pluginIsEnumerating.set(false); + } else { + this.pluginScanProcessor.clearQueue(); + this.pluginList = []; + pluginList.set(this.pluginList); + } + } + async compareUsingDisplayData(_, ee, ne = false) { + const loadFile = async _ => { + if (_ instanceof PluginDataExDisplayV2 || ne) return _.files[0]; + const ee = await this.localDatabase.getDBEntry(_.documentPath); + if (!ee) return false; + const ie = deserialize(getDocDataAsArray(ee.data), {}); + ie.documentPath = _.documentPath; + const re = ie.files[0]; + return { + ...ee, + ...re, + datatype: "newnote" + }; + }, ie = await loadFile(_), re = await loadFile(ee); + Logger(`Comparing: ${_.documentPath} <-> ${ee.documentPath}`, LOG_LEVEL_VERBOSE); + if (!ie || !re) { + Logger(`Could not load ${_.name} for comparison: ${!ie ? _.term : ""}${!re ? ee.term : ""}`, LOG_LEVEL_NOTICE); + return false; + } + let se = stripAllPrefixes(ie.path.split("/").slice(-1).join("/")); + if (-1 !== se.indexOf("%")) se = se.split("%")[1]; + if (ie.path.endsWith(".json")) return serialized("config:merge-data", (() => new Promise((ne => { + Logger("Opening data-merging dialog", LOG_LEVEL_VERBOSE); + new JsonResolveModal(this.app, se, [ ie, re ], (async (ee, ie) => { + if (null == ie) return ne(false); + try { + ne(await this.applyData(_, ie)); + } catch (_) { + Logger("Could not apply merged file"); + Logger(_, LOG_LEVEL_VERBOSE); + ne(false); + } + }), "Local", `${ee.term}`, "B", true, true, "Difference between local and remote").open(); + })))); else { + const ne = new import_diff_match_patch.diff_match_patch; + let oe = getDocData(ie.data), le = getDocData(re.data); + if ("plain" != (null == ie ? void 0 : ie.datatype)) oe = base64ToString(oe); + if ("plain" != (null == re ? void 0 : re.datatype)) le = base64ToString(le); + const ue = ne.diff_linesToChars_(oe, le), de = ne.diff_main(ue.chars1, ue.chars2, false); + ne.diff_charsToLines_(de, ue.lineArray); + ne.diff_cleanupSemantic(de); + const fe = { + left: { + rev: "A", + ...ie, + data: oe + }, + right: { + rev: "B", + ...re, + data: le + }, + diff: de + }; + console.dir(fe); + const he = new ConflictResolveModal(this.app, se, fe, true, ee.term); + he.open(); + const pe = await he.waitForResult(); + if (pe === CANCELLED) return false; + if (pe === LEAVE_TO_SUBSEQUENT) return false; + const ge = "A" == pe ? oe : "B" == pe ? le : void 0; + if (ge) return await this.applyData(_, ge); else return false; + } + } + async applyDataV2(_, ee) { + const ne = this.app.vault.configDir; + try { + if (ee) { + const ie = _.files[0].filename; + Logger(`Applying ${ie} of ${_.displayName || _.name}..`); + const re = `${ne}/${ie}`; + await this.vaultAccess.ensureDirectory(re); + await this.vaultAccess.adapterWrite(re, ee); + await this.storeCustomisationFileV2(re, this.plugin.deviceAndVaultName); + } else { + const ee = _.files; + for (const ie of ee) { + const ee = { + mtime: ie.mtime, + ctime: ie.ctime + }, re = `${ne}/${ie.filename}`; + Logger(`Applying ${ie.filename} of ${_.displayName || _.name}..`); + this.vaultAccess.ensureDirectory(re); + if ("newnote" == ie.datatype) { + let _; + try { + _ = await this.vaultAccess.adapterReadBinary(re); + } catch (ee) { + _ = new ArrayBuffer(0); + } + const ne = base64ToArrayBuffer(ie.data); + if (await isDocContentSame(_, ne)) { + Logger(`The file ${ie.filename} is already up-to-date`, LOG_LEVEL_VERBOSE); + continue; + } + await this.vaultAccess.adapterWrite(re, ne, ee); + } else { + let _; + try { + _ = await this.vaultAccess.adapterRead(re); + } catch (ee) { + _ = ""; + } + const ne = getDocData(ie.data); + if (await isDocContentSame(_, ne)) { + Logger(`The file ${ie.filename} is already up-to-date`, LOG_LEVEL_VERBOSE); + continue; + } + await this.vaultAccess.adapterWrite(re, ne, ee); + } + Logger(`Applied ${ie.filename} of ${_.displayName || _.name}..`); + await this.storeCustomisationFileV2(re, this.plugin.deviceAndVaultName); + } + } + } catch (ee) { + Logger(`Applying ${_.displayName || _.name}.. Failed`, LOG_LEVEL_NOTICE); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + return true; + } + async applyData(_, ee) { + Logger(`Applying ${_.displayName || _.name}..`); + if (_ instanceof PluginDataExDisplayV2) return this.applyDataV2(_, ee); + const ne = this.app.vault.configDir; + try { + if (!_.documentPath) throw "InternalError: Document path not exist"; + const ie = await this.localDatabase.getDBEntry(_.documentPath); + if (false == ie) throw "Not found on database"; + const re = deserialize(getDocDataAsArray(ie.data), {}); + for (const ie of re.files) { + Logger(`Applying ${ie.filename} of ${_.displayName || _.name}..`); + try { + const re = `${ne}/${ie.filename}`; + await this.vaultAccess.ensureDirectory(re); + if (!ee) { + const _ = decodeBinary(ie.data); + await this.vaultAccess.adapterWrite(re, _); + } else await this.vaultAccess.adapterWrite(re, ee); + Logger(`Applying ${ie.filename} of ${_.displayName || _.name}.. Done`); + } catch (ee) { + Logger(`Applying ${ie.filename} of ${_.displayName || _.name}.. Failed`); + Logger(ee, LOG_LEVEL_VERBOSE); + } + } + const se = `${ne}/${re.files[0].filename}`; + await this.storeCustomizationFiles(se); + await this.updatePluginList(true, se); + await delay(100); + Logger(`Config ${_.displayName || _.name} has been applied`, LOG_LEVEL_NOTICE); + if ("PLUGIN_DATA" == _.category || "PLUGIN_MAIN" == _.category) { + const ee = Object.values(this.app.plugins.manifests), ie = this.app.plugins.enabledPlugins, re = ee.find((ee => ie.has(ee.id) && ee.dir == `${ne}/plugins/${_.name}`)); + if (re) { + Logger(`Unloading plugin: ${re.name}`, LOG_LEVEL_NOTICE, "plugin-reload-" + re.id); + await this.app.plugins.unloadPlugin(re.id); + await this.app.plugins.loadPlugin(re.id); + Logger(`Plugin reloaded: ${re.name}`, LOG_LEVEL_NOTICE, "plugin-reload-" + re.id); + } + } else if ("CONFIG" == _.category) this.plugin.askReload(); + return true; + } catch (ee) { + Logger(`Applying ${_.displayName || _.name}.. Failed`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + } + async deleteData(_) { + try { + if (_.documentPath) { + const ee = []; + if (this.useV2) { + const ne = this.pluginList.filter((ee => ee.documentPath == _.documentPath)).filter((_ => _ instanceof PluginDataExDisplayV2)).map((_ => _.files)).flat(); + for (const _ of ne) ee.push(_.path); + } + ee.push(_.documentPath); + const ne = ee.map((async _ => { + await this.deleteConfigOnDatabase(_); + await this.updatePluginList(false, _); + })); + await Promise.allSettled(ne); + Logger(`Deleted: ${_.category}/${_.name} of ${_.category} (${ee.length} items)`, LOG_LEVEL_NOTICE); + } + return true; + } catch (ee) { + Logger(`Failed to delete: ${_.documentPath}`, LOG_LEVEL_NOTICE); + return false; + } + } + async parseReplicationResultItem(_) { + if (_._id.startsWith(ICXHeader)) { + if (this.plugin.settings.usePluginSync) await this.updatePluginList(false, _.path ? _.path : this.getPath(_)); + if (this.plugin.settings.usePluginSync && this.plugin.settings.notifyPluginOrSettingUpdated) if (!this.pluginDialog || this.pluginDialog && !this.pluginDialog.isOpened()) { + const _ = createFragment((_ => { + _.createEl("span", void 0, (_ => { + _.appendText("Some configuration has been arrived, Press "); + _.appendChild(_.createEl("a", void 0, (_ => { + _.text = "HERE"; + _.addEventListener("click", (() => { + this.showPluginSyncModal(); + })); + }))); + _.appendText(" to open the config sync dialog , or press elsewhere to dismiss this message."); + })); + })), ee = "popupUpdated-plugins"; + scheduleTask(ee, 1e3, (async () => { + var ne; + const ie = await memoIfNotExist(ee, (() => new import_obsidian.Notice(_, 0))); + if (!(null == (ne = null == ie ? void 0 : ie.noticeEl) ? void 0 : ne.isShown())) memoObject(ee, new import_obsidian.Notice(_, 0)); + scheduleTask(ee + "-close", 2e4, (() => { + var _; + const ne = retrieveMemoObject(ee); + if (ne) { + if (null == (_ = null == ne ? void 0 : ne.noticeEl) ? void 0 : _.isShown()) ne.hide(); + disposeMemoObject(ee); + } + })); + })); + } + return true; + } + return false; + } + async realizeSettingSyncMode() { + var _; + null == (_ = this.periodicPluginSweepProcessor) || _.disable(); + if (!this.plugin.suspended) if (this.settings.usePluginSync) { + if (this.settings.autoSweepPlugins) await this.scanAllConfigFiles(false); + this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic && !this.settings.watchInternalFileChanges ? 1e3 * PERIODIC_PLUGIN_SWEEP : 0); + } + } + async makeEntryFromFile(_) { + const ee = await this.vaultAccess.adapterStat(_); + let ne, ie; + if (!ee) return false; + const re = await this.vaultAccess.adapterReadBinary(_); + let se; + try { + se = await arrayBufferToBase64(re); + if (_.toLowerCase().endsWith("/manifest.json")) { + const ee = readString(new Uint8Array(re)); + try { + const _ = JSON.parse(ee); + if ("version" in _) ne = `${_.version}`; + if ("name" in _) ie = `${_.name}`; + } catch (ee) { + Logger(`Configuration sync data: ${_} looks like manifest, but could not read the version`, LOG_LEVEL_INFO); + } + } + } catch (ee) { + Logger(`The file ${_} could not be encoded`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + const oe = ee.mtime; + return { + filename: _.substring(this.app.vault.configDir.length + 1), + data: se, + mtime: oe, + size: ee.size, + version: ne, + displayName: ie + }; + } + async storeCustomisationFileV2(_, ee, ne = false) { + const ie = this.filenameWithUnifiedKey(_, ee); + return await serialized(`plugin-${ie}`, (async () => { + const ee = ie, ne = await this.path2id(ee), re = await this.vaultAccess.adapterStat(_); + if (!re) return false; + const se = re.mtime, oe = await this.vaultAccess.adapterReadBinary(_), le = createBlob([ DUMMY_HEAD, DUMMY_END, ...await arrayBufferToBase64(oe) ]); + try { + const ie = await this.localDatabase.getDBEntryMeta(ee, void 0, false); + let re; + if (false === ie) re = { + _id: ne, + path: ee, + data: le, + mtime: se, + ctime: se, + datatype: "plain", + size: le.size, + children: [], + deleted: false, + type: "plain", + eden: {} + }; else { + if (isMarkedAsSameChanges(ee, [ ie.mtime, se + 1 ]) == EVEN) { + Logger(`STORAGE --\x3e DB:${ee}: (config) Skipped (Already checked the same)`, LOG_LEVEL_DEBUG); + return; + } + const _ = await this.localDatabase.getDBEntryFromMeta(ie, {}, false, false); + if (false == _) throw "Could not load the document"; + const ne = getDocData(_.data), ue = ne.indexOf(DUMMY_END), de = base64ToArrayBuffer(ne.substring(ue + DUMMY_END.length)); + if (await isDocContentSame(de, oe)) { + Logger(`STORAGE --\x3e DB:${ee}: (config) Skipped (the same content)`, LOG_LEVEL_VERBOSE); + markChangesAreSame(ee, ie.mtime, se + 1); + return true; + } + re = { + ...ie, + data: le, + mtime: se, + size: le.size, + datatype: "plain", + children: [], + deleted: false, + type: "plain" + }; + } + const ue = await this.localDatabase.putDBEntry(re); + Logger(`STORAGE --\x3e DB:${ee}: (config) Done`); + fireAndForget((() => this.updatePluginListV2(false, this.filenameWithUnifiedKey(_)))); + return ue; + } catch (_) { + Logger(`STORAGE --\x3e DB:${ee}: (config) Failed`); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + })); + } + async storeCustomizationFiles(_, ee) { + const ne = ee || this.plugin.deviceAndVaultName; + if ("" == ne) { + Logger("We have to configure the device name", LOG_LEVEL_NOTICE); + return; + } + if (this.useV2) return await this.storeCustomisationFileV2(_, ne); + const ie = this.filenameToUnifiedKey(_, ne); + return await serialized(`plugin-${ie}`, (async () => { + const ee = this.getFileCategory(_); + let ie = 0, re = []; + const se = "CONFIG" == ee || "SNIPPET" == ee ? _.split("/").reverse()[0] : _.split("/").reverse()[1], oe = _.split("/").slice(0, -1).join("/"), le = this.filenameToUnifiedKey(_, ne), ue = await this.path2id(le), de = { + category: ee, + files: [], + name: se, + mtime: 0, + term: ne + }; + if ("CONFIG" == ee || "SNIPPET" == ee || "PLUGIN_ETC" == ee || "PLUGIN_DATA" == ee) { + re = [ _ ]; + if ("PLUGIN_ETC" == ee) de.displayName = _.split("/").slice(-1).join("/"); + } else if ("PLUGIN_MAIN" == ee) re = [ "manifest.json", "main.js", "styles.css" ].map((_ => `${oe}/${_}`)); else if ("THEME" == ee) re = [ "manifest.json", "theme.css" ].map((_ => `${oe}/${_}`)); + for (const _ of re) { + const ee = await this.makeEntryFromFile(_); + if (false != ee) { + if (ee.version) de.version = ee.version; + if (ee.displayName) de.displayName = ee.displayName; + ie = 0 == ie ? ee.mtime : (ee.mtime + ie) / 2; + de.files.push(ee); + } else Logger(`Config: skipped (Possibly is not exist): ${_} `, LOG_LEVEL_VERBOSE); + } + de.mtime = ie; + if (0 == de.files.length) { + Logger(`Nothing left: deleting.. ${_}`); + await this.deleteConfigOnDatabase(le); + await this.updatePluginList(false, le); + return; + } + const fe = createTextBlob(serialize(de)); + try { + const _ = await this.localDatabase.getDBEntryMeta(le, void 0, false); + let ee; + if (false === _) ee = { + _id: ue, + path: le, + data: fe, + mtime: ie, + ctime: ie, + datatype: "newnote", + size: fe.size, + children: [], + deleted: false, + type: "newnote", + eden: {} + }; else { + if (_.mtime == ie) return true; + const ne = await this.localDatabase.getDBEntryFromMeta(_, {}, false, false); + if (ne) { + const _ = await deserialize(getDocDataAsArray(ne.data), {}); + if (_.files.length == de.files.length) { + const ee = _.files.map((_ => ({ + prev: _, + curr: de.files.find((ee => ee.filename == _.filename)) + }))).map((async _ => { + var ee, ne; + try { + return await isDocContentSame(null != (ne = null == (ee = _.curr) ? void 0 : ee.data) ? ne : [], _.prev.data); + } catch (_) { + return false; + } + })); + if ((await Promise.all(ee)).every((_ => true == _))) { + Logger(`STORAGE --\x3e DB:${le}: (config) Skipped (Same content)`, LOG_LEVEL_VERBOSE); + return true; + } + } + } + ee = { + ..._, + data: fe, + mtime: ie, + size: fe.size, + datatype: "newnote", + children: [], + deleted: false, + type: "newnote" + }; + } + const ne = await this.localDatabase.putDBEntry(ee); + await this.updatePluginList(false, ee.path); + Logger(`STORAGE --\x3e DB:${le}: (config) Done`); + return ne; + } catch (_) { + Logger(`STORAGE --\x3e DB:${le}: (config) Failed`); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + })); + } + async watchVaultRawEventsAsync(_) { + if (!this.settings.usePluginSync) return false; + if (!this.isTargetPath(_)) return false; + const ee = await this.vaultAccess.adapterStat(_); + if (ee && "file" != ee.type) return false; + const ne = normalizePath(this.app.vault.configDir); + if (Object.values(this.settings.pluginSyncExtendedSetting).filter((_ => _.mode != MODE_SELECTIVE && _.mode != MODE_SHINY)).map((_ => _.files)).flat().map((_ => `${ne}/${_}`.toLowerCase())).some((ee => ee.startsWith(_.toLowerCase())))) { + Logger(`Customization file skipped: ${_}`, LOG_LEVEL_VERBOSE); + return; + } + const ie = ~~((ee && ee.mtime || 0) / 1e3), re = `${_}-${ie}`; + if (this.recentProcessedInternalFiles.contains(re)) return true; + this.recentProcessedInternalFiles = [ re, ...this.recentProcessedInternalFiles ].slice(0, 100); + scheduleTask(this.filenameToUnifiedKey(_), 100, (async () => { + await this.storeCustomizationFiles(_); + })); + } + async scanAllConfigFiles(_) { + await shareRunningResult("scanAllConfigFiles", (async () => { + var ee; + Logger("Scanning customizing files.", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "scan-all-config"); + const ne = this.plugin.deviceAndVaultName; + if ("" == ne) { + Logger("We have to configure the device name", LOG_LEVEL_NOTICE); + return; + } + const ie = await this.scanInternalFiles(); + if (this.useV2) { + const _ = ie.filter((_ => this.isTargetPath(_))).map((_ => [ this.filenameWithUnifiedKey(_, ne), _ ])), ee = new Map(_.map((_ => [ _[0], _[1] ]))), re = this.unifiedKeyPrefixOfTerminal(ne), se = this.localDatabase.findEntries(re + "", `${re}􏿿`, { + include_docs: true + }), oe = [], le = Semaphore(10); + for await (const _ of se) if (-1 === _.path.indexOf("%")) oe.push((async () => { + const ie = await le.acquire(); + try { + const ie = `${_._id}`, re = ee.get(ie); + if (re) { + await this.storeCustomisationFileV2(re, ne); + ee.delete(ie); + } else await this.deleteConfigOnDatabase(ie); + } catch (ee) { + Logger(`scanAllConfigFiles - Error: ${_._id}`, LOG_LEVEL_VERBOSE); + Logger(ee, LOG_LEVEL_VERBOSE); + } finally { + ie(); + } + })); + await Promise.all(oe.map((_ => _()))); + const ue = []; + for (const [, _] of ee) ue.push((async () => { + const ee = await le.acquire(); + try { + await this.storeCustomisationFileV2(_, ne); + } catch (ee) { + Logger(`scanAllConfigFiles - Error: ${_}`, LOG_LEVEL_VERBOSE); + Logger(ee, LOG_LEVEL_VERBOSE); + } finally { + ee(); + } + })); + await Promise.all(ue.map((_ => _()))); + this.updatePluginList(false).then(); + } else { + const _ = ie.filter((_ => this.isTargetPath(_))).map((_ => ({ + key: this.filenameToUnifiedKey(_), + file: _ + }))), re = [ ...new Set(_.map((_ => _.key))) ]; + let se = (await this.localDatabase.allDocsRaw({ + startkey: ICXHeader + "", + endkey: `${ICXHeader}􏿿`, + include_docs: true + })).rows.map((_ => _.doc)).filter((_ => !_.deleted)).map((_ => this.getPath(_))).filter((_ => _.startsWith(`${ICXHeader}${ne}/`))); + for (const ne of re) { + const ie = null == (ee = _.find((_ => _.key == ne))) ? void 0 : ee.file; + if (ie) { + await this.storeCustomizationFiles(ie); + se = se.filter((_ => _ != ne)); + } else Logger(`scanAllConfigFiles - File not found: ${ne}`, LOG_LEVEL_VERBOSE); + } + for (const _ of se) await this.deleteConfigOnDatabase(_); + this.updatePluginList(false).then(); + } + })); + } + async deleteConfigOnDatabase(_, ee = false) { + const ne = (new Date).getTime(); + return await serialized("file-x-" + _, (async () => { + try { + const ee = await this.localDatabase.getDBEntryMeta(_, void 0, false); + let ie; + if (false === ee) { + Logger(`STORAGE -x> DB:${_}: (config) already deleted (Not found on database)`); + return true; + } else { + if (ee.deleted) { + Logger(`STORAGE -x> DB:${_}: (config) already deleted`); + return true; + } + ie = { + ...ee, + mtime: ne, + size: 0, + children: [], + deleted: true, + type: "newnote" + }; + } + await this.localDatabase.putRaw(ie); + await this.updatePluginList(false, _); + Logger(`STORAGE -x> DB:${_}: (config) Done`); + return true; + } catch (ee) { + Logger(`STORAGE -x> DB:${_}: (config) Failed`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + })); + } + async scanInternalFiles() { + return (await this.getFiles(this.app.vault.configDir, 2)).filter((_ => _.startsWith("."))).filter((_ => !_.startsWith(".trash"))); + } + async getFiles(_, ee) { + if (-1 == ee) return []; + let ne; + try { + ne = await this.app.vault.adapter.list(_); + } catch (ee) { + Logger(`Could not traverse(ConfigSync):${_}`, LOG_LEVEL_INFO); + Logger(ee, LOG_LEVEL_VERBOSE); + return []; + } + let ie = [ ...ne.files ]; + for (const _ of ne.folders) ie = ie.concat(await this.getFiles(_, ee - 1)); + return ie; + } +}, import_obsidian3 = require("obsidian"); + +function add_css2(_) { + append_styles(_, "svelte-21bw70", '.spacer.svelte-21bw70{min-width:1px;flex-grow:1}button.svelte-21bw70{margin:2px 4px;min-width:3em;max-width:4em}button.svelte-21bw70:disabled{border:none;box-shadow:none;background-color:transparent;visibility:collapse}button.svelte-21bw70:disabled:hover{border:none;box-shadow:none;background-color:transparent;visibility:collapse}span.message.svelte-21bw70{color:var(--text-muted);font-size:var(--font-ui-smaller);padding:0 1em;line-height:var(--line-height-tight)}.is-mobile .spacer.svelte-21bw70{margin-left:auto}.chip-wrap.svelte-21bw70{display:flex;gap:2px;flex-direction:column;justify-content:center;align-items:flex-start}.chip.svelte-21bw70{display:inline-block;border-radius:2px;font-size:0.8em;padding:0 4px;margin:0 2px;border-color:var(--tag-border-color);background-color:var(--tag-background);color:var(--tag-color)}.chip.svelte-21bw70:empty{display:none}.chip.svelte-21bw70:not(:empty)::before{min-width:1.8em;display:inline-block}.chip.content.svelte-21bw70:not(:empty)::before{content:"📄: "}.chip.version.svelte-21bw70:not(:empty)::before{content:"🏷️: "}.chip.modified.svelte-21bw70:not(:empty)::before{content:"📅: "}'); +} + +function get_each_context2(_, ee, ne) { + const ie = _.slice(); + ie[35] = ee[ne]; + return ie; +} + +function create_else_block_4(_) { + let ee, ne, ie, re, se, oe, le; + return { + c() { + ee = element("span"); + ne = space(); + ie = element("span"); + ie.textContent = "All the same or non-existent"; + re = space(); + se = element("button"); + oe = space(); + le = element("button"); + attr(ee, "class", "spacer svelte-21bw70"); + attr(ie, "class", "message even svelte-21bw70"); + se.disabled = true; + attr(se, "class", "svelte-21bw70"); + le.disabled = true; + attr(le, "class", "svelte-21bw70"); + }, + m(_, ue) { + insert(_, ee, ue); + insert(_, ne, ue); + insert(_, ie, ue); + insert(_, re, ue); + insert(_, se, ue); + insert(_, oe, ue); + insert(_, le, ue); + }, + p: noop2, + d(_) { + if (_) { + detach(ee); + detach(ne); + detach(ie); + detach(re); + detach(se); + detach(oe); + detach(le); + } + } + }; +} + +function create_if_block2(_) { + let ee, ne, ie, re = !_[1] && create_if_block_12(_); + return { + c() { + ee = element("span"); + ne = space(); + if (re) re.c(); + ie = empty(); + attr(ee, "class", "spacer svelte-21bw70"); + }, + m(_, se) { + insert(_, ee, se); + insert(_, ne, se); + if (re) re.m(_, se); + insert(_, ie, se); + }, + p(_, ee) { + if (!_[1]) if (re) re.p(_, ee); else { + re = create_if_block_12(_); + re.c(); + re.m(ie.parentNode, ie); + } else if (re) { + re.d(1); + re = null; + } + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + detach(ie); + } + if (re) re.d(_); + } + }; +} + +function create_if_block_12(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce = ensure_array_like(_[9]), we = []; + for (let ee = 0; ee < Ce.length; ee += 1) we[ee] = create_each_block2(get_each_context2(_, Ce, ee)); + function select_block_type_1(_, ee) { + if (_[6] || _[2] && "" != _[0]) return create_if_block_42; else return create_else_block_3; + } + let Le = select_block_type_1(_), Oe = Le(_), ke = _[2] && create_if_block_22(_); + return { + c() { + ee = element("span"); + ne = element("span"); + ie = text(_[3]); + re = space(); + se = element("span"); + oe = text(_[4]); + le = space(); + ue = element("span"); + de = text(_[5]); + fe = space(); + he = element("select"); + pe = element("option"); + pe.textContent = "-"; + for (let _ = 0; _ < we.length; _ += 1) we[_].c(); + me = space(); + Oe.c(); + ye = space(); + if (ke) ke.c(); + Se = empty(); + attr(ne, "class", "chip modified svelte-21bw70"); + attr(se, "class", "chip content svelte-21bw70"); + attr(ue, "class", "chip version svelte-21bw70"); + attr(ee, "class", "chip-wrap svelte-21bw70"); + pe.__value = ge = ""; + set_input_value(pe, pe.__value); + if (void 0 === _[0]) add_render_callback((() => _[28].call(he))); + }, + m(ge, Ce) { + insert(ge, ee, Ce); + append(ee, ne); + append(ne, ie); + append(ee, re); + append(ee, se); + append(se, oe); + append(ee, le); + append(ee, ue); + append(ue, de); + insert(ge, fe, Ce); + insert(ge, he, Ce); + append(he, pe); + for (let _ = 0; _ < we.length; _ += 1) if (we[_]) we[_].m(he, null); + select_option(he, _[0], true); + insert(ge, me, Ce); + Oe.m(ge, Ce); + insert(ge, ye, Ce); + if (ke) ke.m(ge, Ce); + insert(ge, Se, Ce); + if (!Ee) { + ve = listen(he, "change", _[28]); + Ee = true; + } + }, + p(_, ee) { + if (8 & ee[0]) set_data(ie, _[3]); + if (16 & ee[0]) set_data(oe, _[4]); + if (32 & ee[0]) set_data(de, _[5]); + if (512 & ee[0]) { + Ce = ensure_array_like(_[9]); + let ne; + for (ne = 0; ne < Ce.length; ne += 1) { + const ie = get_each_context2(_, Ce, ne); + if (we[ne]) we[ne].p(ie, ee); else { + we[ne] = create_each_block2(ie); + we[ne].c(); + we[ne].m(he, null); + } + } + for (;ne < we.length; ne += 1) we[ne].d(1); + we.length = Ce.length; + } + if (513 & ee[0]) select_option(he, _[0]); + if (Le === (Le = select_block_type_1(_)) && Oe) Oe.p(_, ee); else { + Oe.d(1); + Oe = Le(_); + if (Oe) { + Oe.c(); + Oe.m(ye.parentNode, ye); + } + } + if (_[2]) if (ke) ke.p(_, ee); else { + ke = create_if_block_22(_); + ke.c(); + ke.m(Se.parentNode, Se); + } else if (ke) { + ke.d(1); + ke = null; + } + }, + d(_) { + if (_) { + detach(ee); + detach(fe); + detach(he); + detach(me); + detach(ye); + detach(Se); + } + destroy_each(we, _); + Oe.d(_); + if (ke) ke.d(_); + Ee = false; + ve(); + } + }; +} + +function create_each_block2(_) { + let ee, ne, ie, re = _[35] + ""; + return { + c() { + ee = element("option"); + ne = text(re); + ee.__value = ie = _[35]; + set_input_value(ee, ee.__value); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, se) { + if (512 & se[0] && re !== (re = _[35] + "")) set_data(ne, re); + if (512 & se[0] && ie !== (ie = _[35])) { + ee.__value = ie; + set_input_value(ee, ee.__value); + } + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_else_block_3(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ne = space(); + ie = element("button"); + ee.disabled = true; + attr(ee, "class", "svelte-21bw70"); + ie.disabled = true; + attr(ie, "class", "svelte-21bw70"); + }, + m(_, re) { + insert(_, ee, re); + insert(_, ne, re); + insert(_, ie, re); + }, + p: noop2, + d(_) { + if (_) { + detach(ee); + detach(ne); + detach(ie); + } + } + }; +} + +function create_if_block_42(_) { + let ee, ne, ie, re; + function select_block_type_2(_, ee) { + if (_[7]) return create_if_block_52; else return create_else_block_2; + } + let se = select_block_type_2(_), oe = se(_); + return { + c() { + oe.c(); + ee = space(); + ne = element("button"); + ne.textContent = "✓"; + attr(ne, "class", "svelte-21bw70"); + }, + m(se, le) { + oe.m(se, le); + insert(se, ee, le); + insert(se, ne, le); + if (!ie) { + re = listen(ne, "click", _[10]); + ie = true; + } + }, + p(_, ne) { + if (se === (se = select_block_type_2(_)) && oe) oe.p(_, ne); else { + oe.d(1); + oe = se(_); + if (oe) { + oe.c(); + oe.m(ee.parentNode, ee); + } + } + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + } + oe.d(_); + ie = false; + re(); + } + }; +} + +function create_else_block_2(_) { + let ee; + return { + c() { + ee = element("button"); + ee.disabled = true; + attr(ee, "class", "svelte-21bw70"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_52(_) { + let ee; + function select_block_type_3(_, ee) { + if (_[8]) return create_if_block_6; else return create_else_block_12; + } + let ne = select_block_type_3(_), ie = ne(_); + return { + c() { + ie.c(); + ee = empty(); + }, + m(_, ne) { + ie.m(_, ne); + insert(_, ee, ne); + }, + p(_, re) { + if (ne === (ne = select_block_type_3(_)) && ie) ie.p(_, re); else { + ie.d(1); + ie = ne(_); + if (ie) { + ie.c(); + ie.m(ee.parentNode, ee); + } + } + }, + d(_) { + if (_) detach(ee); + ie.d(_); + } + }; +} + +function create_else_block_12(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "⮂"; + attr(ee, "class", "svelte-21bw70"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[11]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_if_block_6(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "🗃️"; + attr(ee, "class", "svelte-21bw70"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[12]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_if_block_22(_) { + let ee; + function select_block_type_4(_, ee) { + if ("" != _[0]) return create_if_block_32; else return create_else_block2; + } + let ne = select_block_type_4(_), ie = ne(_); + return { + c() { + ie.c(); + ee = empty(); + }, + m(_, ne) { + ie.m(_, ne); + insert(_, ee, ne); + }, + p(_, re) { + if (ne === (ne = select_block_type_4(_)) && ie) ie.p(_, re); else { + ie.d(1); + ie = ne(_); + if (ie) { + ie.c(); + ie.m(ee.parentNode, ee); + } + } + }, + d(_) { + if (_) detach(ee); + ie.d(_); + } + }; +} + +function create_else_block2(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "📑"; + attr(ee, "class", "svelte-21bw70"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[14]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_if_block_32(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "🗑️"; + attr(ee, "class", "svelte-21bw70"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[13]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_fragment2(_) { + let ee; + function select_block_type(_, ee) { + if (_[9].length > 0) return create_if_block2; else return create_else_block_4; + } + let ne = select_block_type(_), ie = ne(_); + return { + c() { + ie.c(); + ee = empty(); + }, + m(_, ne) { + ie.m(_, ne); + insert(_, ee, ne); + }, + p(_, re) { + if (ne === (ne = select_block_type(_)) && ie) ie.p(_, re); else { + ie.d(1); + ie = ne(_); + if (ie) { + ie.c(); + ie.m(ee.parentNode, ee); + } + } + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + ie.d(_); + } + }; +} + +function instance2(_, ee, ne) { + let {list: ie = []} = ee, {thisTerm: re = ""} = ee, {hideNotApplicable: se = false} = ee, {selectNewest: oe = 0} = ee, {selectNewestStyle: le = 0} = ee, {applyAllPluse: ue = 0} = ee, {applyData: de} = ee, {compareData: fe} = ee, {deleteData: he} = ee, {hidden: pe} = ee, {plugin: ge} = ee, {isMaintenanceMode: me = false} = ee, {isFlagged: ye = false} = ee; + const Se = ge.addOnConfigSync; + let {selected: Ee = ""} = ee, ve = "", Ce = "", we = "", Le = false, Oe = false, ke = false, Ae = 0, xe = 0, Re = []; + async function comparePlugin(_, ee) { + var ne, ie; + let re = "", se = "", oe = false, le = false; + if (!_ && !ee) re = ""; else if (_ && !ee) re = "Local only"; else if (ee && !_) { + re = "Remote only"; + le = true; + } else { + const se = (null !== (ne = null == _ ? void 0 : _.mtime) && void 0 !== ne ? ne : 0) - (null !== (ie = null == ee ? void 0 : ee.mtime) && void 0 !== ie ? ie : 0), ue = timeDeltaToHumanReadable(Math.abs(se)); + if (se / 1e3 < -10) { + re = `Newer (${ue})`; + le = true; + oe = true; + } else if (se / 1e3 > 10) { + re = `Older (${ue})`; + le = true; + oe = true; + } else { + re = "Same"; + le = false; + oe = true; + } + } + const ue = (null == _ ? void 0 : _.version) || "0.0.0", de = (null == ee ? void 0 : ee.version) || "0.0.0"; + if ((null == _ ? void 0 : _.version) || (null == ee ? void 0 : ee.version)) { + const _ = `${ue}`.localeCompare(de, void 0, { + numeric: true + }); + if (0 == _) se = "Same"; else if (_ < 0) se = `Lower (${ue} < ${de})`; else if (_ > 0) se = `Higher (${ue} > ${de})`; + } + if (oe) if (_ && ee) { + const {canApply: ne, equivalency: ie, canCompare: oe} = await async function checkEquivalency(_, ee) { + let ne = "", ie = false, re = false; + const se = [ ...new Set([ ..._.files.map((_ => _.filename)), ...ee.files.map((_ => _.filename)) ]) ].map((ne => { + const ie = _.files.find((_ => _.filename == ne)), re = ee.files.find((_ => _.filename == ne)); + if (!ie && !re) return 0; else if (ie && !re) return 2; else if (!ie && re) return 8; else if (ie && re) if (getDocData(ie.data) == getDocData(re.data)) return 4; else return 16; else return 16; + })).reduce(((_, ee) => _ | ee), 0); + if (4 == se) { + ne = "Same"; + ie = false; + } else if (se <= 4) { + ne = "Same or local only"; + ie = false; + } else if (16 == se) { + ie = true; + re = true; + ne = "Different"; + } else { + ie = true; + re = true; + ne = "Mixed"; + } + return { + equivalency: ne, + canApply: ie, + canCompare: re + }; + }(_, ee); + return { + canApply: ne, + freshness: re, + equivalency: ie, + version: se, + canCompare: oe + }; + } + return { + canApply: le, + freshness: re, + equivalency: "", + version: se, + canCompare: false + }; + } + async function applySelected() { + const _ = ie.find((_ => _.term == re)), ee = ie.find((_ => _.term == Ee)); + if (ee && await de(ee)) Se.updatePluginList(true, null == _ ? void 0 : _.documentPath); + } + async function compareItems(_, ee, ne) { + if (!_ || !ee) { + if (!ee && !_) Logger("Could not find both remote and local item", LOG_LEVEL_INFO); else if (!ee) Logger("Could not find remote item", LOG_LEVEL_INFO); else if (!_) Logger("Could not locally item", LOG_LEVEL_INFO); + } else if (!ne) { + if (await fe(_, ee)) Se.updatePluginList(true, _.documentPath); + return; + } else { + const ie = _ instanceof PluginDataExDisplayV2 ? new PluginDataExDisplayV2(_) : { + ..._ + }, re = ee instanceof PluginDataExDisplayV2 ? new PluginDataExDisplayV2(ee) : { + ...ee + }; + ie.files = ie.files.filter((_ => _.filename == ne)); + re.files = re.files.filter((_ => _.filename == ne)); + if (await fe(ie, re, true)) Se.updatePluginList(true, _.documentPath); + } + } + _.$$set = _ => { + if ("list" in _) ne(15, ie = _.list); + if ("thisTerm" in _) ne(16, re = _.thisTerm); + if ("hideNotApplicable" in _) ne(17, se = _.hideNotApplicable); + if ("selectNewest" in _) ne(18, oe = _.selectNewest); + if ("selectNewestStyle" in _) ne(19, le = _.selectNewestStyle); + if ("applyAllPluse" in _) ne(20, ue = _.applyAllPluse); + if ("applyData" in _) ne(21, de = _.applyData); + if ("compareData" in _) ne(22, fe = _.compareData); + if ("deleteData" in _) ne(23, he = _.deleteData); + if ("hidden" in _) ne(1, pe = _.hidden); + if ("plugin" in _) ne(24, ge = _.plugin); + if ("isMaintenanceMode" in _) ne(2, me = _.isMaintenanceMode); + if ("isFlagged" in _) ne(25, ye = _.isFlagged); + if ("selected" in _) ne(0, Ee = _.selected); + }; + _.$$.update = () => { + if (101482500 & _.$$.dirty[0]) { + let _ = false; + if (oe != Ae) if (1 == le) _ = true; else if (2 == le) _ = ye; else if (3 == le) ne(0, Ee = ""); + (async function updateTerms(_, ee, ie) { + const oe = _.find((_ => _.term == re)); + if (ie) ne(9, Re = [ ...new Set(_.map((_ => _.term))) ]); else if (se) { + const ee = [], ie = [ ...new Set(_.map((_ => _.term))) ]; + for (const ne of ie) { + const ie = _.find((_ => _.term == ne)); + if ((await comparePlugin(oe, ie)).canApply) ee.push(ne); + } + ne(9, Re = [ ...ee ]); + } else ne(9, Re = [ ...new Set(_.map((_ => _.term))) ].filter((_ => _ != re))); + let le = oe; + if (ee) { + for (const ee of Re) { + const ne = _.find((_ => _.term == ee)); + if (ne && ne.mtime && ((null == le ? void 0 : le.mtime) || 0) < ne.mtime) le = ne; + } + if (le && le.term != re) ne(0, Ee = le.term); + } + if (Re.indexOf(Ee) < 0) ne(0, Ee = ""); + })(ie, _, me); + ne(26, Ae = oe); + } + if (135266307 & _.$$.dirty[0]) { + const _ = ue != xe; + ne(27, xe = ue); + if (_ && Ee) if (!pe) applySelected(); + } + if (98305 & _.$$.dirty[0]) { + ne(3, ve = ""); + ne(4, Ce = ""); + ne(5, we = ""); + ne(6, Le = false); + if ("" == Ee) ; else if (Ee == re) { + ne(3, ve = "This device"); + ne(6, Le = false); + } else (async function performCompare(_, ee) { + const ie = await comparePlugin(_, ee); + ne(6, Le = ie.canApply); + ne(3, ve = ie.freshness); + ne(4, Ce = ie.equivalency); + ne(5, we = ie.version); + ne(7, Oe = ie.canCompare); + ne(8, ke = false); + if (Oe) if ((null == _ ? void 0 : _.files.length) == (null == ee ? void 0 : ee.files.length) && 1 == (null == _ ? void 0 : _.files.length) && (null == _ ? void 0 : _.files[0].filename) == (null == ee ? void 0 : ee.files[0].filename)) ne(8, ke = false); else ne(8, ke = true); + })(ie.find((_ => _.term == re)), ie.find((_ => _.term == Ee))); + } + }; + return [ Ee, pe, me, ve, Ce, we, Le, Oe, ke, Re, applySelected, async function compareSelected() { + const _ = ie.find((_ => _.term == re)), ee = ie.find((_ => _.term == Ee)); + await compareItems(_, ee); + }, async function pickCompareItem(_) { + const ee = ie.find((_ => _.term == re)), ne = ie.find((_ => _.term == Ee)); + if (!ee) return; + if (!ne) return; + const se = new import_obsidian3.Menu; + se.addItem((_ => _.setTitle("Compare file").setIsLabel(true))); + se.addSeparator(); + const oe = unique(ee.files.map((_ => _.filename)).concat(ne.files.map((_ => _.filename)))); + for (const _ of oe) se.addItem((ie => { + ie.setTitle(_).onClick((ie => compareItems(ee, ne, _))); + })); + se.showAtMouseEvent(_); + }, async function deleteSelected() { + const _ = ie.find((_ => _.term == Ee)); + if (_ && await he(_)) Se.reloadPluginList(true); + }, async function duplicateItem() { + const _ = ie.find((_ => _.term == re)); + if (!_) { + Logger("Could not find local item", LOG_LEVEL_VERBOSE); + return; + } + const ee = await askString(ge.app, "Duplicate", "device name", ""); + if (ee) { + if (ee.contains("/")) { + Logger('We can not use "/" to the device name', LOG_LEVEL_NOTICE); + return; + } + const ne = `${ge.app.vault.configDir}/${_.files[0].filename}`; + await Se.storeCustomizationFiles(ne, ee); + await Se.updatePluginList(false, Se.filenameToUnifiedKey(ne, ee)); + } + }, ie, re, se, oe, le, ue, de, fe, he, ge, ye, Ae, xe, function select_change_handler() { + Ee = select_value(this); + ne(0, Ee), ne(18, oe), ne(26, Ae), ne(19, le), ne(25, ye), ne(15, ie), ne(2, me); + ne(9, Re); + } ]; +} + +var PluginCombo = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance2, create_fragment2, safe_not_equal, { + list: 15, + thisTerm: 16, + hideNotApplicable: 17, + selectNewest: 18, + selectNewestStyle: 19, + applyAllPluse: 20, + applyData: 21, + compareData: 22, + deleteData: 23, + hidden: 1, + plugin: 24, + isMaintenanceMode: 2, + isFlagged: 25, + selected: 0 + }, add_css2, [ -1, -1 ]); + } +}, PluginCombo_default = PluginCombo, import_obsidian4 = require("obsidian"); + +function add_css3(_) { + append_styles(_, "svelte-if2qsj", ".buttonsWrap.svelte-if2qsj.svelte-if2qsj{padding-bottom:4px}h3.svelte-if2qsj.svelte-if2qsj{position:sticky;top:0;background-color:var(--modal-background)}.labelrow.svelte-if2qsj.svelte-if2qsj{margin-left:0.4em;display:flex;justify-content:flex-start;align-items:center;border-top:1px solid var(--background-modifier-border);padding:4px;flex-wrap:wrap}.filerow.svelte-if2qsj.svelte-if2qsj{margin-left:1.25em;display:flex;justify-content:flex-start;align-items:center;padding-right:4px;flex-wrap:wrap}.filerow.hideeven.svelte-if2qsj.svelte-if2qsj:has(.even),.labelrow.hideeven.svelte-if2qsj.svelte-if2qsj:has(.even){display:none}.noterow.svelte-if2qsj.svelte-if2qsj{min-height:2em;display:flex}button.status.svelte-if2qsj.svelte-if2qsj{flex-grow:0;margin:2px 4px;min-width:3em;max-width:4em}.statusnote.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:flex-end;padding-right:var(--size-4-12);align-items:center;min-width:10em;flex-grow:1}.list.svelte-if2qsj.svelte-if2qsj{overflow-y:auto}.title.svelte-if2qsj.svelte-if2qsj{color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto}.body.svelte-if2qsj.svelte-if2qsj{margin-left:auto;display:flex;justify-content:flex-start;align-items:center}.filetitle.svelte-if2qsj.svelte-if2qsj{color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto}.buttons.svelte-if2qsj.svelte-if2qsj{display:flex;flex-direction:row;justify-content:flex-end;margin-top:8px;flex-wrap:wrap}.buttons.svelte-if2qsj>button.svelte-if2qsj{margin-left:4px;width:auto}label.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:center;align-items:center}label.svelte-if2qsj>span.svelte-if2qsj{margin-right:0.25em}.is-mobile .title.svelte-if2qsj.svelte-if2qsj,.is-mobile .filetitle.svelte-if2qsj.svelte-if2qsj{width:100%}.center.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:center;align-items:center;min-height:3em}.maintenancerow.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:flex-end;align-items:center}.maintenancerow.svelte-if2qsj label.svelte-if2qsj{margin-right:0.5em;margin-left:0.5em}.loading.svelte-if2qsj.svelte-if2qsj{transition:height 0.25s ease-in-out;transition-delay:4ms;overflow-y:hidden;flex-shrink:0;display:flex;justify-content:flex-start;align-items:center}.loading.svelte-if2qsj.svelte-if2qsj:empty{height:0px;transition:height 0.25s ease-in-out;transition-delay:1s}.loading.svelte-if2qsj.svelte-if2qsj:not(:empty){height:2em;transition:height 0.25s ease-in-out;transition-delay:0}"); +} + +function get_each_context3(_, ee, ne) { + const ie = _.slice(); + ie[66] = ee[ne]; + return ie; +} + +function get_each_context_12(_, ee, ne) { + var ie, re, se, oe; + const le = _.slice(); + le[69] = ee[ne][0]; + le[70] = ee[ne][1]; + const ue = `${PREFIX_PLUGIN_ALL}/${le[69]}`; + le[71] = ue; + const de = null != (ie = le[6].get(le[71])) ? ie : MODE_SELECTIVE; + le[72] = de; + const fe = `${PREFIX_PLUGIN_MAIN}/${le[69]}`; + le[73] = fe; + const he = null != (re = le[6].get(le[73])) ? re : MODE_SELECTIVE; + le[74] = he; + const pe = `${PREFIX_PLUGIN_DATA}/${le[69]}`; + le[75] = pe; + const ge = null != (se = le[6].get(le[75])) ? se : MODE_SELECTIVE; + le[76] = ge; + const me = `${PREFIX_PLUGIN_ETC}/${le[69]}`; + le[77] = me; + const ye = null != (oe = le[6].get(le[77])) ? oe : MODE_SELECTIVE; + le[78] = ye; + return le; +} + +function get_each_context_2(_, ee, ne) { + const ie = _.slice(); + ie[81] = ee[ne][0]; + ie[82] = ee[ne][1]; + return ie; +} + +function get_each_context_3(_, ee, ne) { + var ie; + const re = _.slice(); + re[69] = ee[ne]; + const se = `${re[81]}/${re[69]}`; + re[85] = se; + const oe = null != (ie = re[6].get(re[85])) ? ie : MODE_SELECTIVE; + re[86] = oe; + return re; +} + +function create_if_block_10(_) { + let ee, ne, ie; + return { + c() { + ee = element("button"); + ee.textContent = "Reload"; + attr(ee, "class", "svelte-if2qsj"); + }, + m(re, se) { + insert(re, ee, se); + if (!ne) { + ie = listen(ee, "click", _[36]); + ne = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ne = false; + ie(); + } + }; +} + +function create_if_block_9(_) { + let ee, ne, ie, re = 0 == _[12] ? "" : ` (${_[12]})`; + return { + c() { + ee = element("span"); + ne = text("Updating list..."); + ie = text(re); + }, + m(_, re) { + insert(_, ee, re); + append(ee, ne); + append(ee, ie); + }, + p(_, ee) { + if (4096 & ee[0] && re !== (re = 0 == _[12] ? "" : ` (${_[12]})`)) set_data(ie, re); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_else_block3(_) { + let ee, ne, ie, re, se, oe = ensure_array_like(_[9]), le = []; + for (let ee = 0; ee < oe.length; ee += 1) le[ee] = create_each_block_2(get_each_context_2(_, oe, ee)); + const out = _ => transition_out(le[_], 1, 1, (() => { + le[_] = null; + })); + let ue = ensure_array_like(_[10]), de = []; + for (let ee = 0; ee < ue.length; ee += 1) de[ee] = create_each_block_12(get_each_context_12(_, ue, ee)); + const out_1 = _ => transition_out(de[_], 1, 1, (() => { + de[_] = null; + })); + return { + c() { + for (let _ = 0; _ < le.length; _ += 1) le[_].c(); + ee = space(); + ne = element("div"); + ie = element("h3"); + ie.textContent = "Plugins"; + re = space(); + for (let _ = 0; _ < de.length; _ += 1) de[_].c(); + attr(ie, "class", "svelte-if2qsj"); + }, + m(_, oe) { + for (let ee = 0; ee < le.length; ee += 1) if (le[ee]) le[ee].m(_, oe); + insert(_, ee, oe); + insert(_, ne, oe); + append(ne, ie); + append(ne, re); + for (let _ = 0; _ < de.length; _ += 1) if (de[_]) de[_].m(ne, null); + se = true; + }, + p(_, ie) { + if (13634381 & ie[0]) { + oe = ensure_array_like(_[9]); + let ne; + for (ne = 0; ne < oe.length; ne += 1) { + const re = get_each_context_2(_, oe, ne); + if (le[ne]) { + le[ne].p(re, ie); + transition_in(le[ne], 1); + } else { + le[ne] = create_each_block_2(re); + le[ne].c(); + transition_in(le[ne], 1); + le[ne].m(ee.parentNode, ee); + } + } + group_outros(); + for (ne = oe.length; ne < le.length; ne += 1) out(ne); + check_outros(); + } + if (47189320 & ie[0]) { + ue = ensure_array_like(_[10]); + let ee; + for (ee = 0; ee < ue.length; ee += 1) { + const re = get_each_context_12(_, ue, ee); + if (de[ee]) { + de[ee].p(re, ie); + transition_in(de[ee], 1); + } else { + de[ee] = create_each_block_12(re); + de[ee].c(); + transition_in(de[ee], 1); + de[ee].m(ne, null); + } + } + group_outros(); + for (ee = ue.length; ee < de.length; ee += 1) out_1(ee); + check_outros(); + } + }, + i(_) { + if (!se) { + for (let _ = 0; _ < oe.length; _ += 1) transition_in(le[_]); + for (let _ = 0; _ < ue.length; _ += 1) transition_in(de[_]); + se = true; + } + }, + o(_) { + le = le.filter(Boolean); + for (let _ = 0; _ < le.length; _ += 1) transition_out(le[_]); + de = de.filter(Boolean); + for (let _ = 0; _ < de.length; _ += 1) transition_out(de[_]); + se = false; + }, + d(_) { + if (_) { + detach(ee); + detach(ne); + } + destroy_each(le, _); + destroy_each(de, _); + } + }; +} + +function create_if_block_13(_) { + let ee; + return { + c() { + ee = element("div"); + ee.textContent = "No Items."; + attr(ee, "class", "center svelte-if2qsj"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p: noop2, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_else_block_5(_) { + let ee, ne, ie = _[22][_[86]] + ""; + return { + c() { + ee = element("div"); + ne = text(ie); + attr(ee, "class", "statusnote svelte-if2qsj"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, ee) { + if (580 & ee[0] && ie !== (ie = _[22][_[86]] + "")) set_data(ne, ie); + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_8(_) { + let ee, ne; + function func(...ee) { + return _[42](_[81], _[69], ...ee); + } + const ie = [ _[11], { + isFlagged: _[86] == MODE_SHINY + }, { + list: _[0].filter(func) + }, { + hidden: false + } ]; + let re = {}; + for (let _ = 0; _ < ie.length; _ += 1) re = assign(re, ie[_]); + ee = new PluginCombo_default({ + props: re + }); + return { + c() { + create_component(ee.$$.fragment); + }, + m(_, ie) { + mount_component(ee, _, ie); + ne = true; + }, + p(ne, re) { + _ = ne; + const se = 2629 & re[0] ? get_spread_update(ie, [ 2048 & re[0] && get_spread_object(_[11]), 580 & re[0] && { + isFlagged: _[86] == MODE_SHINY + }, 517 & re[0] && { + list: _[0].filter(func) + }, ie[3] ]) : {}; + ee.$set(se); + }, + i(_) { + if (!ne) { + transition_in(ee.$$.fragment, _); + ne = true; + } + }, + o(_) { + transition_out(ee.$$.fragment, _); + ne = false; + }, + d(_) { + destroy_component(ee, _); + } + }; +} + +function create_each_block_3(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se = _[23](_[86]) + "", Ee = ("THEME" == _[81] && _[8].get(`themes/${_[69]}`) || _[69]) + ""; + function click_handler_8(...ee) { + return _[41](_[81], _[69], _[85], ...ee); + } + const ve = [ create_if_block_8, create_else_block_5 ], Ce = []; + function select_block_type_1(_, ee) { + if (_[86] == MODE_SELECTIVE || _[86] == MODE_SHINY) return 0; else return 1; + } + fe = select_block_type_1(_); + he = Ce[fe] = ve[fe](_); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("button"); + re = text(Se); + se = space(); + oe = element("span"); + le = text(Ee); + ue = space(); + de = element("div"); + he.c(); + attr(ie, "class", "status svelte-if2qsj"); + attr(oe, "class", "name"); + attr(ne, "class", "title svelte-if2qsj"); + attr(de, "class", "body svelte-if2qsj"); + attr(ee, "class", pe = "labelrow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj"); + }, + m(_, he) { + insert(_, ee, he); + append(ee, ne); + append(ne, ie); + append(ie, re); + append(ne, se); + append(ne, oe); + append(oe, le); + append(ee, ue); + append(ee, de); + Ce[fe].m(de, null); + ge = true; + if (!me) { + ye = listen(ie, "click", click_handler_8); + me = true; + } + }, + p(ne, ie) { + _ = ne; + if ((!ge || 580 & ie[0]) && Se !== (Se = _[23](_[86]) + "")) set_data(re, Se); + if ((!ge || 772 & ie[0]) && Ee !== (Ee = ("THEME" == _[81] && _[8].get(`themes/${_[69]}`) || _[69]) + "")) set_data(le, Ee); + let se = fe; + fe = select_block_type_1(_); + if (fe === se) Ce[fe].p(_, ie); else { + group_outros(); + transition_out(Ce[se], 1, 1, (() => { + Ce[se] = null; + })); + check_outros(); + he = Ce[fe]; + if (!he) { + he = Ce[fe] = ve[fe](_); + he.c(); + } else he.p(_, ie); + transition_in(he, 1); + he.m(de, null); + } + if (!ge || 8 & ie[0] && pe !== (pe = "labelrow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj")) attr(ee, "class", pe); + }, + i(_) { + if (!ge) { + transition_in(he); + ge = true; + } + }, + o(_) { + transition_out(he); + ge = false; + }, + d(_) { + if (_) detach(ee); + Ce[fe].d(); + me = false; + ye(); + } + }; +} + +function create_each_block_2(_) { + let ee, ne, ie, re, se, oe = _[82] + "", le = ensure_array_like(_[2][_[81]]), ue = []; + for (let ee = 0; ee < le.length; ee += 1) ue[ee] = create_each_block_3(get_each_context_3(_, le, ee)); + const out = _ => transition_out(ue[_], 1, 1, (() => { + ue[_] = null; + })); + return { + c() { + ee = element("div"); + ne = element("h3"); + ie = text(oe); + re = space(); + for (let _ = 0; _ < ue.length; _ += 1) ue[_].c(); + attr(ne, "class", "svelte-if2qsj"); + }, + m(_, oe) { + insert(_, ee, oe); + append(ee, ne); + append(ne, ie); + append(ee, re); + for (let _ = 0; _ < ue.length; _ += 1) if (ue[_]) ue[_].m(ee, null); + se = true; + }, + p(_, ne) { + if ((!se || 512 & ne[0]) && oe !== (oe = _[82] + "")) set_data(ie, oe); + if (13634381 & ne[0]) { + le = ensure_array_like(_[2][_[81]]); + let ie; + for (ie = 0; ie < le.length; ie += 1) { + const re = get_each_context_3(_, le, ie); + if (ue[ie]) { + ue[ie].p(re, ne); + transition_in(ue[ie], 1); + } else { + ue[ie] = create_each_block_3(re); + ue[ie].c(); + transition_in(ue[ie], 1); + ue[ie].m(ee, null); + } + } + group_outros(); + for (ie = le.length; ie < ue.length; ie += 1) out(ie); + check_outros(); + } + }, + i(_) { + if (!se) { + for (let _ = 0; _ < le.length; _ += 1) transition_in(ue[_]); + se = true; + } + }, + o(_) { + ue = ue.filter(Boolean); + for (let _ = 0; _ < ue.length; _ += 1) transition_out(ue[_]); + se = false; + }, + d(_) { + if (_) detach(ee); + destroy_each(ue, _); + } + }; +} + +function create_if_block_7(_) { + let ee, ne; + const ie = [ _[11], { + isFlagged: _[72] == MODE_SHINY + }, { + list: _[70] + }, { + hidden: true + } ]; + let re = {}; + for (let _ = 0; _ < ie.length; _ += 1) re = assign(re, ie[_]); + ee = new PluginCombo_default({ + props: re + }); + return { + c() { + create_component(ee.$$.fragment); + }, + m(_, ie) { + mount_component(ee, _, ie); + ne = true; + }, + p(_, ne) { + const re = 3136 & ne[0] ? get_spread_update(ie, [ 2048 & ne[0] && get_spread_object(_[11]), 1088 & ne[0] && { + isFlagged: _[72] == MODE_SHINY + }, 1024 & ne[0] && { + list: _[70] + }, ie[3] ]) : {}; + ee.$set(re); + }, + i(_) { + if (!ne) { + transition_in(ee.$$.fragment, _); + ne = true; + } + }, + o(_) { + transition_out(ee.$$.fragment, _); + ne = false; + }, + d(_) { + destroy_component(ee, _); + } + }; +} + +function create_else_block_42(_) { + let ee, ne, ie, re, se = _[22][_[72]] + ""; + return { + c() { + ee = element("div"); + ne = element("div"); + ie = text(se); + re = space(); + attr(ne, "class", "statusnote svelte-if2qsj"); + attr(ee, "class", "noterow svelte-if2qsj"); + }, + m(_, se) { + insert(_, ee, se); + append(ee, ne); + append(ne, ie); + append(ee, re); + }, + p(_, ee) { + if (1088 & ee[0] && se !== (se = _[22][_[72]] + "")) set_data(ie, se); + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_23(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce, we, Le, Oe, ke, Ae, xe, Re, Te, Pe, Ie = _[23](_[74]) + "", De = _[23](_[76]) + ""; + function click_handler_10(...ee) { + return _[44](_[69], _[73], ...ee); + } + const Be = [ create_if_block_62, create_else_block_32 ], Ne = []; + function select_block_type_3(_, ee) { + if (_[74] == MODE_SELECTIVE || _[74] == MODE_SHINY) return 0; else return 1; + } + de = select_block_type_3(_); + fe = Ne[de] = Be[de](_); + function click_handler_11(...ee) { + return _[45](_[69], _[75], ...ee); + } + const Me = [ create_if_block_53, create_else_block_22 ], Fe = []; + function select_block_type_4(_, ee) { + if (_[76] == MODE_SELECTIVE || _[76] == MODE_SHINY) return 0; else return 1; + } + Le = select_block_type_4(_); + Oe = Fe[Le] = Me[Le](_); + let Ve = _[25] && create_if_block_33(_); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("button"); + re = text(Ie); + se = space(); + oe = element("span"); + oe.textContent = "MAIN"; + le = space(); + ue = element("div"); + fe.c(); + pe = space(); + ge = element("div"); + me = element("div"); + ye = element("button"); + Se = text(De); + Ee = space(); + ve = element("span"); + ve.textContent = "DATA"; + Ce = space(); + we = element("div"); + Oe.c(); + Ae = space(); + if (Ve) Ve.c(); + xe = empty(); + attr(ie, "class", "status svelte-if2qsj"); + attr(oe, "class", "name"); + attr(ne, "class", "filetitle svelte-if2qsj"); + attr(ue, "class", "body svelte-if2qsj"); + attr(ee, "class", he = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj"); + attr(ye, "class", "status svelte-if2qsj"); + attr(ve, "class", "name"); + attr(me, "class", "filetitle svelte-if2qsj"); + attr(we, "class", "body svelte-if2qsj"); + attr(ge, "class", ke = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj"); + }, + m(_, fe) { + insert(_, ee, fe); + append(ee, ne); + append(ne, ie); + append(ie, re); + append(ne, se); + append(ne, oe); + append(ee, le); + append(ee, ue); + Ne[de].m(ue, null); + insert(_, pe, fe); + insert(_, ge, fe); + append(ge, me); + append(me, ye); + append(ye, Se); + append(me, Ee); + append(me, ve); + append(ge, Ce); + append(ge, we); + Fe[Le].m(we, null); + insert(_, Ae, fe); + if (Ve) Ve.m(_, fe); + insert(_, xe, fe); + Re = true; + if (!Te) { + Pe = [ listen(ie, "click", click_handler_10), listen(ye, "click", click_handler_11) ]; + Te = true; + } + }, + p(ne, ie) { + _ = ne; + if ((!Re || 1088 & ie[0]) && Ie !== (Ie = _[23](_[74]) + "")) set_data(re, Ie); + let se = de; + de = select_block_type_3(_); + if (de === se) Ne[de].p(_, ie); else { + group_outros(); + transition_out(Ne[se], 1, 1, (() => { + Ne[se] = null; + })); + check_outros(); + fe = Ne[de]; + if (!fe) { + fe = Ne[de] = Be[de](_); + fe.c(); + } else fe.p(_, ie); + transition_in(fe, 1); + fe.m(ue, null); + } + if (!Re || 8 & ie[0] && he !== (he = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj")) attr(ee, "class", he); + if ((!Re || 1088 & ie[0]) && De !== (De = _[23](_[76]) + "")) set_data(Se, De); + let oe = Le; + Le = select_block_type_4(_); + if (Le === oe) Fe[Le].p(_, ie); else { + group_outros(); + transition_out(Fe[oe], 1, 1, (() => { + Fe[oe] = null; + })); + check_outros(); + Oe = Fe[Le]; + if (!Oe) { + Oe = Fe[Le] = Me[Le](_); + Oe.c(); + } else Oe.p(_, ie); + transition_in(Oe, 1); + Oe.m(we, null); + } + if (!Re || 8 & ie[0] && ke !== (ke = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj")) attr(ge, "class", ke); + if (_[25]) Ve.p(_, ie); + }, + i(_) { + if (!Re) { + transition_in(fe); + transition_in(Oe); + transition_in(Ve); + Re = true; + } + }, + o(_) { + transition_out(fe); + transition_out(Oe); + transition_out(Ve); + Re = false; + }, + d(_) { + if (_) { + detach(ee); + detach(pe); + detach(ge); + detach(Ae); + detach(xe); + } + Ne[de].d(); + Fe[Le].d(); + if (Ve) Ve.d(_); + Te = false; + run_all(Pe); + } + }; +} + +function create_else_block_32(_) { + let ee, ne, ie = _[22][_[74]] + ""; + return { + c() { + ee = element("div"); + ne = text(ie); + attr(ee, "class", "statusnote svelte-if2qsj"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, ee) { + if (1088 & ee[0] && ie !== (ie = _[22][_[74]] + "")) set_data(ne, ie); + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_62(_) { + let ee, ne; + const ie = [ _[11], { + isFlagged: _[74] == MODE_SHINY + }, { + list: filterList(_[70], [ "PLUGIN_MAIN" ]) + }, { + hidden: false + } ]; + let re = {}; + for (let _ = 0; _ < ie.length; _ += 1) re = assign(re, ie[_]); + ee = new PluginCombo_default({ + props: re + }); + return { + c() { + create_component(ee.$$.fragment); + }, + m(_, ie) { + mount_component(ee, _, ie); + ne = true; + }, + p(_, ne) { + const re = 3136 & ne[0] ? get_spread_update(ie, [ 2048 & ne[0] && get_spread_object(_[11]), 1088 & ne[0] && { + isFlagged: _[74] == MODE_SHINY + }, 1024 & ne[0] && { + list: filterList(_[70], [ "PLUGIN_MAIN" ]) + }, ie[3] ]) : {}; + ee.$set(re); + }, + i(_) { + if (!ne) { + transition_in(ee.$$.fragment, _); + ne = true; + } + }, + o(_) { + transition_out(ee.$$.fragment, _); + ne = false; + }, + d(_) { + destroy_component(ee, _); + } + }; +} + +function create_else_block_22(_) { + let ee, ne, ie = _[22][_[76]] + ""; + return { + c() { + ee = element("div"); + ne = text(ie); + attr(ee, "class", "statusnote svelte-if2qsj"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, ee) { + if (1088 & ee[0] && ie !== (ie = _[22][_[76]] + "")) set_data(ne, ie); + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_53(_) { + let ee, ne; + const ie = [ _[11], { + isFlagged: _[76] == MODE_SHINY + }, { + list: filterList(_[70], [ "PLUGIN_DATA" ]) + }, { + hidden: false + } ]; + let re = {}; + for (let _ = 0; _ < ie.length; _ += 1) re = assign(re, ie[_]); + ee = new PluginCombo_default({ + props: re + }); + return { + c() { + create_component(ee.$$.fragment); + }, + m(_, ie) { + mount_component(ee, _, ie); + ne = true; + }, + p(_, ne) { + const re = 3136 & ne[0] ? get_spread_update(ie, [ 2048 & ne[0] && get_spread_object(_[11]), 1088 & ne[0] && { + isFlagged: _[76] == MODE_SHINY + }, 1024 & ne[0] && { + list: filterList(_[70], [ "PLUGIN_DATA" ]) + }, ie[3] ]) : {}; + ee.$set(re); + }, + i(_) { + if (!ne) { + transition_in(ee.$$.fragment, _); + ne = true; + } + }, + o(_) { + transition_out(ee.$$.fragment, _); + ne = false; + }, + d(_) { + destroy_component(ee, _); + } + }; +} + +function create_if_block_33(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se = _[23](_[78]) + ""; + function click_handler_12(...ee) { + return _[46](_[69], _[77], ...ee); + } + const Ee = [ create_if_block_43, create_else_block_13 ], ve = []; + function select_block_type_5(_, ee) { + if (_[78] == MODE_SELECTIVE || _[78] == MODE_SHINY) return 0; else return 1; + } + de = select_block_type_5(_); + fe = ve[de] = Ee[de](_); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("button"); + re = text(Se); + se = space(); + oe = element("span"); + oe.textContent = "Other files"; + le = space(); + ue = element("div"); + fe.c(); + he = space(); + attr(ie, "class", "status svelte-if2qsj"); + attr(oe, "class", "name"); + attr(ne, "class", "filetitle svelte-if2qsj"); + attr(ue, "class", "body svelte-if2qsj"); + attr(ee, "class", pe = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj"); + }, + m(_, fe) { + insert(_, ee, fe); + append(ee, ne); + append(ne, ie); + append(ie, re); + append(ne, se); + append(ne, oe); + append(ee, le); + append(ee, ue); + ve[de].m(ue, null); + append(ee, he); + ge = true; + if (!me) { + ye = listen(ie, "click", click_handler_12); + me = true; + } + }, + p(ne, ie) { + _ = ne; + if ((!ge || 1088 & ie[0]) && Se !== (Se = _[23](_[78]) + "")) set_data(re, Se); + let se = de; + de = select_block_type_5(_); + if (de === se) ve[de].p(_, ie); else { + group_outros(); + transition_out(ve[se], 1, 1, (() => { + ve[se] = null; + })); + check_outros(); + fe = ve[de]; + if (!fe) { + fe = ve[de] = Ee[de](_); + fe.c(); + } else fe.p(_, ie); + transition_in(fe, 1); + fe.m(ue, null); + } + if (!ge || 8 & ie[0] && pe !== (pe = "filerow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj")) attr(ee, "class", pe); + }, + i(_) { + if (!ge) { + transition_in(fe); + ge = true; + } + }, + o(_) { + transition_out(fe); + ge = false; + }, + d(_) { + if (_) detach(ee); + ve[de].d(); + me = false; + ye(); + } + }; +} + +function create_else_block_13(_) { + let ee, ne, ie = _[22][_[78]] + ""; + return { + c() { + ee = element("div"); + ne = text(ie); + attr(ee, "class", "statusnote svelte-if2qsj"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, ee) { + if (1088 & ee[0] && ie !== (ie = _[22][_[78]] + "")) set_data(ne, ie); + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_43(_) { + let ee, ne; + const ie = [ _[11], { + isFlagged: _[78] == MODE_SHINY + }, { + list: filterList(_[70], [ "PLUGIN_ETC" ]) + }, { + hidden: false + } ]; + let re = {}; + for (let _ = 0; _ < ie.length; _ += 1) re = assign(re, ie[_]); + ee = new PluginCombo_default({ + props: re + }); + return { + c() { + create_component(ee.$$.fragment); + }, + m(_, ie) { + mount_component(ee, _, ie); + ne = true; + }, + p(_, ne) { + const re = 3136 & ne[0] ? get_spread_update(ie, [ 2048 & ne[0] && get_spread_object(_[11]), 1088 & ne[0] && { + isFlagged: _[78] == MODE_SHINY + }, 1024 & ne[0] && { + list: filterList(_[70], [ "PLUGIN_ETC" ]) + }, ie[3] ]) : {}; + ee.$set(re); + }, + i(_) { + if (!ne) { + transition_in(ee.$$.fragment, _); + ne = true; + } + }, + o(_) { + transition_out(ee.$$.fragment, _); + ne = false; + }, + d(_) { + destroy_component(ee, _); + } + }; +} + +function create_each_block_12(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve = _[23](_[72]) + "", Ce = (_[8].get(`plugins/${_[69]}`) || _[69]) + ""; + function click_handler_9(...ee) { + return _[43](_[69], _[71], ...ee); + } + let we = (_[72] == MODE_SELECTIVE || _[72] == MODE_SHINY) && create_if_block_7(_); + const Le = [ create_if_block_23, create_else_block_42 ], Oe = []; + function select_block_type_2(_, ee) { + if (_[72] == MODE_SELECTIVE || _[72] == MODE_SHINY) return 0; else return 1; + } + pe = select_block_type_2(_); + ge = Oe[pe] = Le[pe](_); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("button"); + re = text(ve); + se = space(); + oe = element("span"); + le = text(Ce); + ue = space(); + de = element("div"); + if (we) we.c(); + he = space(); + ge.c(); + me = empty(); + attr(ie, "class", "status svelte-if2qsj"); + attr(oe, "class", "name"); + attr(ne, "class", "title svelte-if2qsj"); + attr(de, "class", "body svelte-if2qsj"); + attr(ee, "class", fe = "labelrow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj"); + }, + m(_, fe) { + insert(_, ee, fe); + append(ee, ne); + append(ne, ie); + append(ie, re); + append(ne, se); + append(ne, oe); + append(oe, le); + append(ee, ue); + append(ee, de); + if (we) we.m(de, null); + insert(_, he, fe); + Oe[pe].m(_, fe); + insert(_, me, fe); + ye = true; + if (!Se) { + Ee = listen(ie, "click", click_handler_9); + Se = true; + } + }, + p(ne, ie) { + _ = ne; + if ((!ye || 1088 & ie[0]) && ve !== (ve = _[23](_[72]) + "")) set_data(re, ve); + if ((!ye || 1280 & ie[0]) && Ce !== (Ce = (_[8].get(`plugins/${_[69]}`) || _[69]) + "")) set_data(le, Ce); + if (_[72] == MODE_SELECTIVE || _[72] == MODE_SHINY) if (we) { + we.p(_, ie); + if (1088 & ie[0]) transition_in(we, 1); + } else { + we = create_if_block_7(_); + we.c(); + transition_in(we, 1); + we.m(de, null); + } else if (we) { + group_outros(); + transition_out(we, 1, 1, (() => { + we = null; + })); + check_outros(); + } + if (!ye || 8 & ie[0] && fe !== (fe = "labelrow " + (_[3] ? "hideeven" : "") + " svelte-if2qsj")) attr(ee, "class", fe); + let se = pe; + pe = select_block_type_2(_); + if (pe === se) Oe[pe].p(_, ie); else { + group_outros(); + transition_out(Oe[se], 1, 1, (() => { + Oe[se] = null; + })); + check_outros(); + ge = Oe[pe]; + if (!ge) { + ge = Oe[pe] = Le[pe](_); + ge.c(); + } else ge.p(_, ie); + transition_in(ge, 1); + ge.m(me.parentNode, me); + } + }, + i(_) { + if (!ye) { + transition_in(we); + transition_in(ge); + ye = true; + } + }, + o(_) { + transition_out(we); + transition_out(ge); + ye = false; + }, + d(_) { + if (_) { + detach(ee); + detach(he); + detach(me); + } + if (we) we.d(); + Oe[pe].d(_); + Se = false; + Ee(); + } + }; +} + +function create_if_block3(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge = ensure_array_like(_[5]), me = []; + for (let ee = 0; ee < ge.length; ee += 1) me[ee] = create_each_block3(get_each_context3(_, ge, ee)); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("h3"); + ie.textContent = "Maintenance Commands"; + re = space(); + se = element("div"); + oe = element("label"); + oe.textContent = "Delete All of"; + le = space(); + ue = element("select"); + for (let _ = 0; _ < me.length; _ += 1) me[_].c(); + de = space(); + fe = element("button"); + fe.textContent = "🗑️"; + attr(ie, "class", "svelte-if2qsj"); + attr(oe, "for", ""); + attr(oe, "class", "svelte-if2qsj"); + if (void 0 === _[7]) add_render_callback((() => _[47].call(ue))); + attr(fe, "class", "status svelte-if2qsj"); + attr(se, "class", "maintenancerow svelte-if2qsj"); + attr(ee, "class", "buttons svelte-if2qsj"); + }, + m(ge, ye) { + insert(ge, ee, ye); + append(ee, ne); + append(ne, ie); + append(ne, re); + append(ne, se); + append(se, oe); + append(se, le); + append(se, ue); + for (let _ = 0; _ < me.length; _ += 1) if (me[_]) me[_].m(ue, null); + select_option(ue, _[7], true); + append(se, de); + append(se, fe); + if (!he) { + pe = [ listen(ue, "change", _[47]), listen(fe, "click", _[48]) ]; + he = true; + } + }, + p(_, ee) { + if (32 & ee[0]) { + ge = ensure_array_like(_[5]); + let ne; + for (ne = 0; ne < ge.length; ne += 1) { + const ie = get_each_context3(_, ge, ne); + if (me[ne]) me[ne].p(ie, ee); else { + me[ne] = create_each_block3(ie); + me[ne].c(); + me[ne].m(ue, null); + } + } + for (;ne < me.length; ne += 1) me[ne].d(1); + me.length = ge.length; + } + if (160 & ee[0]) select_option(ue, _[7]); + }, + d(_) { + if (_) detach(ee); + destroy_each(me, _); + he = false; + run_all(pe); + } + }; +} + +function create_each_block3(_) { + let ee, ne, ie, re = _[66] + ""; + return { + c() { + ee = element("option"); + ne = text(re); + ee.__value = ie = _[66]; + set_input_value(ee, ee.__value); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, se) { + if (32 & se[0] && re !== (re = _[66] + "")) set_data(ne, re); + if (32 & se[0] && ie !== (ie = _[66])) { + ee.__value = ie; + set_input_value(ee, ee.__value); + } + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_fragment3(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce, we, Le, Oe, ke, Ae, xe, Re, Te, Pe, Ie, De, Be, Ne, Me, Fe, Ve, $e, Ge, Ue = _[1] && create_if_block_10(_), je = (_[4] || 0 !== _[12]) && create_if_block_9(_); + const ze = [ create_if_block_13, create_else_block3 ], qe = []; + function select_block_type(_, ee) { + if (0 == _[0].length) return 0; else return 1; + } + Oe = select_block_type(_); + ke = qe[Oe] = ze[Oe](_); + let He = _[1] && create_if_block3(_); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("button"); + ie.textContent = "Scan changes"; + re = space(); + se = element("button"); + se.textContent = "Sync once"; + oe = space(); + le = element("button"); + le.textContent = "Refresh"; + ue = space(); + if (Ue) Ue.c(); + de = space(); + fe = element("div"); + he = element("button"); + he.textContent = "Select All Shiny"; + pe = space(); + ge = element("button"); + ge.textContent = `${_[21]} Select Flagged Shiny`; + me = space(); + ye = element("button"); + ye.textContent = "Deselect all"; + Se = space(); + Ee = element("button"); + Ee.textContent = "Apply All Selected"; + ve = space(); + Ce = element("div"); + if (je) je.c(); + we = space(); + Le = element("div"); + ke.c(); + Ae = space(); + if (He) He.c(); + xe = space(); + Re = element("div"); + Te = element("label"); + Pe = element("span"); + Pe.textContent = "Hide not applicable items"; + Ie = element("input"); + De = space(); + Be = element("div"); + Ne = element("label"); + Me = element("span"); + Me.textContent = "Maintenance mode"; + Fe = element("input"); + attr(ie, "class", "svelte-if2qsj"); + attr(se, "class", "svelte-if2qsj"); + attr(le, "class", "svelte-if2qsj"); + attr(ne, "class", "buttons svelte-if2qsj"); + attr(he, "class", "svelte-if2qsj"); + attr(ge, "class", "svelte-if2qsj"); + attr(ye, "class", "svelte-if2qsj"); + attr(Ee, "class", "mod-cta svelte-if2qsj"); + attr(fe, "class", "buttons svelte-if2qsj"); + attr(ee, "class", "buttonsWrap svelte-if2qsj"); + attr(Ce, "class", "loading svelte-if2qsj"); + attr(Le, "class", "list svelte-if2qsj"); + attr(Pe, "class", "svelte-if2qsj"); + attr(Ie, "type", "checkbox"); + attr(Te, "class", "svelte-if2qsj"); + attr(Re, "class", "buttons svelte-if2qsj"); + attr(Me, "class", "svelte-if2qsj"); + attr(Fe, "type", "checkbox"); + attr(Ne, "class", "svelte-if2qsj"); + attr(Be, "class", "buttons svelte-if2qsj"); + }, + m(ke, ze) { + insert(ke, ee, ze); + append(ee, ne); + append(ne, ie); + append(ne, re); + append(ne, se); + append(ne, oe); + append(ne, le); + append(ne, ue); + if (Ue) Ue.m(ne, null); + append(ee, de); + append(ee, fe); + append(fe, he); + append(fe, pe); + append(fe, ge); + append(fe, me); + append(fe, ye); + append(fe, Se); + append(fe, Ee); + insert(ke, ve, ze); + insert(ke, Ce, ze); + if (je) je.m(Ce, null); + insert(ke, we, ze); + insert(ke, Le, ze); + qe[Oe].m(Le, null); + insert(ke, Ae, ze); + if (He) He.m(ke, ze); + insert(ke, xe, ze); + insert(ke, Re, ze); + append(Re, Te); + append(Te, Pe); + append(Te, Ie); + Ie.checked = _[3]; + insert(ke, De, ze); + insert(ke, Be, ze); + append(Be, Ne); + append(Ne, Me); + append(Ne, Fe); + Fe.checked = _[1]; + Ve = true; + if (!$e) { + Ge = [ listen(ie, "click", _[33]), listen(se, "click", _[34]), listen(le, "click", _[35]), listen(he, "click", _[37]), listen(ge, "click", _[38]), listen(ye, "click", _[39]), listen(Ee, "click", _[40]), listen(Ie, "change", _[49]), listen(Fe, "change", _[50]) ]; + $e = true; + } + }, + p(_, ee) { + if (_[1]) if (Ue) Ue.p(_, ee); else { + Ue = create_if_block_10(_); + Ue.c(); + Ue.m(ne, null); + } else if (Ue) { + Ue.d(1); + Ue = null; + } + if (_[4] || 0 !== _[12]) if (je) je.p(_, ee); else { + je = create_if_block_9(_); + je.c(); + je.m(Ce, null); + } else if (je) { + je.d(1); + je = null; + } + let ie = Oe; + Oe = select_block_type(_); + if (Oe === ie) qe[Oe].p(_, ee); else { + group_outros(); + transition_out(qe[ie], 1, 1, (() => { + qe[ie] = null; + })); + check_outros(); + ke = qe[Oe]; + if (!ke) { + ke = qe[Oe] = ze[Oe](_); + ke.c(); + } else ke.p(_, ee); + transition_in(ke, 1); + ke.m(Le, null); + } + if (_[1]) if (He) He.p(_, ee); else { + He = create_if_block3(_); + He.c(); + He.m(xe.parentNode, xe); + } else if (He) { + He.d(1); + He = null; + } + if (8 & ee[0]) Ie.checked = _[3]; + if (2 & ee[0]) Fe.checked = _[1]; + }, + i(_) { + if (!Ve) { + transition_in(ke); + Ve = true; + } + }, + o(_) { + transition_out(ke); + Ve = false; + }, + d(_) { + if (_) { + detach(ee); + detach(ve); + detach(Ce); + detach(we); + detach(Le); + detach(Ae); + detach(xe); + detach(Re); + detach(De); + detach(Be); + } + if (Ue) Ue.d(); + if (je) je.d(); + qe[Oe].d(); + if (He) He.d(_); + $e = false; + run_all(Ge); + } + }; +} + +var PREFIX_PLUGIN_ALL = "PLUGIN_ALL", PREFIX_PLUGIN_DATA = "PLUGIN_DATA", PREFIX_PLUGIN_MAIN = "PLUGIN_MAIN", PREFIX_PLUGIN_ETC = "PLUGIN_ETC"; + +function filterList(_, ee) { + return _.filter((_ => -1 !== ee.indexOf(_.category))).sort(((_, ee) => `${_.category}-${_.name}`.localeCompare(`${ee.category}-${ee.name}`))); +} + +function groupBy(_, ee) { + let ne = {}; + for (const ie of _) { + const _ = ee in ie ? ie[ee] : ""; + ne[_] = ne[_] || []; + ne[_].push(ie); + } + for (const _ in ne) ne[_] = ne[_].sort(((_, ee) => `${_.category}-${_.name}`.localeCompare(`${ee.category}-${ee.name}`))); + return Object.entries(ne).sort((([_], [ee]) => `${_}`.localeCompare(`${ee}`))); +} + +function instance3(_, ee, ne) { + let ie, re, se, oe, le; + component_subscribe(_, pluginManifestStore, (_ => ne(32, oe = _))); + component_subscribe(_, pluginV2Progress, (_ => ne(12, le = _))); + let {plugin: ue} = ee; + const de = ue.addOnConfigSync; + let fe = [], he = 0, pe = 0, ge = false, me = false, ye = 0, Se = false; + async function requestUpdate() { + await de.updatePluginList(true); + } + async function requestReload() { + await de.reloadPluginList(true); + } + let Ee = []; + pluginList.subscribe((_ => { + ne(0, fe = _); + ne(5, Ee = unique(fe.map((_ => _.term)))); + })); + pluginIsEnumerating.subscribe((_ => { + ne(4, me = _); + })); + onMount((async () => { + requestUpdate(); + })); + const ve = { + CONFIG: "Configuration", + THEME: "Themes", + SNIPPET: "Snippets" + }; + async function scanAgain() { + await de.scanAllConfigFiles(true); + await requestUpdate(); + } + async function replicate2() { + await ue.replicate(true); + } + function selectAllNewest(_) { + ne(27, he++, he); + ne(28, pe = _ ? 1 : 2); + } + function resetSelectNewest() { + ne(27, he++, he); + ne(28, pe = 3); + } + function applyAll() { + ne(29, ye++, ye); + } + async function applyData(_) { + return await de.applyData(_); + } + async function compareData(_, ee, ne = false) { + return await de.compareUsingDisplayData(_, ee, ne); + } + async function deleteData(_) { + return await de.deleteData(_); + } + function askMode(_, ee, ne) { + var ie; + const re = new import_obsidian4.Menu; + re.addItem((_ => _.setTitle(ee).setIsLabel(true))); + re.addSeparator(); + const se = null !== (ie = Le.get(ne)) && void 0 !== ie ? ie : MODE_SELECTIVE; + for (const ee of [ MODE_SELECTIVE, MODE_AUTOMATIC, MODE_PAUSED, MODE_SHINY ]) re.addItem((ie => { + ie.setTitle(`${getIcon(ee)}:${we[ee]}`).onClick((ie => { + if (ee === MODE_AUTOMATIC) askOverwriteModeForAutomatic(_, ne); else setMode(ne, ee); + })).setChecked(se == ee).setDisabled(se == ee); + })); + re.showAtMouseEvent(_); + } + function applyAutomaticSync(_, ee) { + var ne, ie; + setMode(_, MODE_AUTOMATIC); + const re = normalizePath(ue.app.vault.configDir), se = (null !== (ie = null === (ne = ue.settings.pluginSyncExtendedSetting[_]) || void 0 === ne ? void 0 : ne.files) && void 0 !== ie ? ie : []).map((_ => `${re}/${_}`)); + ue.addOnHiddenFileSync.syncInternalFilesAndDatabase(ee, true, false, se); + } + function askOverwriteModeForAutomatic(_, ee) { + const ne = new import_obsidian4.Menu; + ne.addItem((_ => _.setTitle("Initial Action").setIsLabel(true))); + ne.addSeparator(); + ne.addItem((_ => { + _.setTitle("↑: Overwrite Remote").onClick((_ => { + applyAutomaticSync(ee, "pushForce"); + })); + })).addItem((_ => { + _.setTitle("↓: Overwrite Local").onClick((_ => { + applyAutomaticSync(ee, "pullForce"); + })); + })).addItem((_ => { + _.setTitle("⇅: Use newer").onClick((_ => { + applyAutomaticSync(ee, "safe"); + })); + })); + ne.showAtMouseEvent(_); + } + const Ce = { + [MODE_SELECTIVE]: "🔀", + [MODE_PAUSED]: "⛔", + [MODE_AUTOMATIC]: "✨", + [MODE_SHINY]: "🚩" + }, we = { + [MODE_SELECTIVE]: "Selective", + [MODE_PAUSED]: "Ignore", + [MODE_AUTOMATIC]: "Automatic", + [MODE_SHINY]: "Flagged Selective" + }; + function setMode(_, ee) { + if (_.startsWith(PREFIX_PLUGIN_ALL + "/")) { + setMode(PREFIX_PLUGIN_DATA + _.substring(PREFIX_PLUGIN_ALL.length), ee); + setMode(PREFIX_PLUGIN_MAIN + _.substring(PREFIX_PLUGIN_ALL.length), ee); + return; + } + const ie = unique(fe.filter((ee => `${ee.category}/${ee.name}` == _)).map((_ => _.files)).flat().map((_ => _.filename))); + if (ee == MODE_SELECTIVE) { + Le.delete(_); + delete ue.settings.pluginSyncExtendedSetting[_]; + ne(6, Oe = Le); + } else { + Le.set(_, ee); + ne(6, Oe = Le); + if (!(_ in ue.settings.pluginSyncExtendedSetting)) ne(26, ue.settings.pluginSyncExtendedSetting[_] = { + key: _, + mode: ee, + files: [] + }, ue); + ne(26, ue.settings.pluginSyncExtendedSetting[_].files = ie, ue); + ne(26, ue.settings.pluginSyncExtendedSetting[_].mode = ee, ue); + } + ue.saveSettingData(); + } + function getIcon(_) { + if (_ in Ce) return Ce[_]; + } + let Le = new Map, Oe = new Map; + for (const {key: _, mode: ee} of Object.values(ue.settings.pluginSyncExtendedSetting)) Le.set(_, ee); + Oe = Le; + let ke = {}, Ae = ""; + async function deleteAllItems(_) { + const ee = fe.filter((ee => ee.term == _)); + for (const _ of ee) await deleteData(_); + de.reloadPluginList(true); + } + let xe = new Map, Re = [], Te = [], Pe = ue.settings.usePluginEtc; + _.$$set = _ => { + if ("plugin" in _) ne(26, ue = _.plugin); + }; + _.$$.update = () => { + if (67108864 & _.$$.dirty[0]) ne(31, re = ue.deviceAndVaultName); + if (2080374786 & _.$$.dirty[0] | 1 & _.$$.dirty[1]) ne(11, se = { + thisTerm: re, + hideNotApplicable: ie, + selectNewest: he, + selectNewestStyle: pe, + applyAllPluse: ye, + applyData, + compareData, + deleteData, + plugin: ue, + isMaintenanceMode: Se + }); + if (1 & _.$$.dirty[0]) ne(2, ke = function computeDisplayKeys(_) { + return [ ..._, ...Object.keys(ue.settings.pluginSyncExtendedSetting).map((_ => `${_}///`.split("/"))).filter((_ => _[0] && _[1])).map((_ => ({ + category: _[0], + name: _[1], + displayName: _[1] + }))) ].sort(((_, ee) => { + var ne, ie; + return (null !== (ne = _.displayName) && void 0 !== ne ? ne : _.name).localeCompare(null !== (ie = ee.displayName) && void 0 !== ie ? ie : ee.name); + })).reduce(((_, ee) => { + var ne, ie; + return { + ..._, + [ee.category]: unique(ee.category in _ ? [ ..._[ee.category], null !== (ne = ee.displayName) && void 0 !== ne ? ne : ee.name ] : [ null !== (ie = ee.displayName) && void 0 !== ie ? ie : ee.name ]) + }; + }), {}); + }(fe)); + if (2 & _.$$.dirty[1]) (function updateNameMap(_) { + const ee = [ ..._.entries() ].map((([_, ee]) => [ _.split("/").slice(-2).join("/"), ee.name ])), ie = new Map(ee); + if (ie.size == xe.size) { + let _ = false; + for (const [ee, ne] of ie) if (xe.get(ee) != ne) { + _ = true; + break; + } + if (!_) return; + } + ne(8, xe = ie); + })(oe); + if (4 & _.$$.dirty[0]) ne(9, Re = Object.entries(ve).filter((([_, ee]) => _ in ke))); + if (1 & _.$$.dirty[0]) ne(10, Te = groupBy(filterList(fe, [ "PLUGIN_MAIN", "PLUGIN_DATA", "PLUGIN_ETC" ]), "name")); + }; + ne(30, ie = false); + return [ fe, Se, ke, ge, me, Ee, Oe, Ae, xe, Re, Te, se, le, requestUpdate, requestReload, scanAgain, replicate2, selectAllNewest, resetSelectNewest, applyAll, askMode, "🚩", we, getIcon, deleteAllItems, Pe, ue, he, pe, ye, ie, re, oe, () => scanAgain(), () => replicate2(), () => requestUpdate(), () => requestReload(), () => selectAllNewest(true), () => selectAllNewest(false), () => resetSelectNewest(), () => applyAll(), (_, ee, ne, ie) => askMode(ie, `${_}/${ee}`, ne), (_, ee, ne) => ne.category == _ && ne.name == ee, (_, ee, ne) => askMode(ne, `${PREFIX_PLUGIN_ALL}/${_}`, ee), (_, ee, ne) => askMode(ne, `${PREFIX_PLUGIN_MAIN}/${_}/MAIN`, ee), (_, ee, ne) => askMode(ne, `${PREFIX_PLUGIN_DATA}/${_}`, ee), (_, ee, ne) => askMode(ne, `${PREFIX_PLUGIN_ETC}/${_}`, ee), function select_change_handler() { + Ae = select_value(this); + ne(7, Ae); + ne(5, Ee); + }, _ => { + deleteAllItems(Ae); + }, function input0_change_handler() { + ge = this.checked; + ne(3, ge); + }, function input1_change_handler() { + Se = this.checked; + ne(1, Se); + } ]; +} + +var PluginPane = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance3, create_fragment3, safe_not_equal, { + plugin: 26 + }, add_css3, [ -1, -1, -1 ]); + } +}, PluginPane_default = PluginPane, PluginDialogModal = class extends import_obsidian.Modal { + isOpened() { + return null != this.component; + } + constructor(_, ee) { + super(_); + this.plugin = ee; + } + onOpen() { + const {contentEl: _} = this; + this.contentEl.style.overflow = "auto"; + this.contentEl.style.display = "flex"; + this.contentEl.style.flexDirection = "column"; + this.titleEl.setText("Customization Sync (Beta3)"); + if (!this.component) this.component = new PluginPane_default({ + target: _, + props: { + plugin: this.plugin + } + }); + } + onClose() { + if (this.component) { + this.component.$destroy(); + this.component = void 0; + } + } +}, InputStringDialog = class extends import_obsidian.Modal { + constructor(_, ee, ne, ie, re, se) { + super(_); + this.result = false; + this.isManuallyClosed = false; + this.isPassword = false; + this.onSubmit = se; + this.title = ee; + this.placeholder = ie; + this.key = ne; + this.isPassword = re; + } + onOpen() { + const {contentEl: _} = this; + this.titleEl.setText(this.title); + const ee = _.createDiv(); + new import_obsidian.Setting(ee).setName(this.key).setClass(this.isPassword ? "password-input" : "normal-input").addText((_ => _.onChange((_ => { + this.result = _; + })))); + new import_obsidian.Setting(ee).addButton((_ => _.setButtonText("Ok").setCta().onClick((() => { + this.isManuallyClosed = true; + this.close(); + })))).addButton((_ => _.setButtonText("Cancel").setCta().onClick((() => { + this.close(); + })))); + } + onClose() { + const {contentEl: _} = this; + _.empty(); + if (this.isManuallyClosed) this.onSubmit(this.result); else this.onSubmit(false); + } +}, PopoverSelectString = class extends import_obsidian.FuzzySuggestModal { + constructor(_, ee, ne, ie, re) { + super(_); + this.callback = () => {}; + this.getItemsFun = () => [ "yes", "no" ]; + this.app = _; + this.setPlaceholder((null != ne ? ne : "y/n) ") + ee); + if (ie) this.getItemsFun = ie; + this.callback = re; + } + getItems() { + return this.getItemsFun(); + } + getItemText(_) { + return _; + } + onChooseItem(_, ee) { + var ne; + null == (ne = this.callback) || ne.call(this, _); + this.callback = void 0; + } + onClose() { + setTimeout((() => { + if (this.callback) { + this.callback(""); + this.callback = void 0; + } + }), 100); + } +}, MessageBox = class extends import_obsidian.Modal { + constructor(_, ee, ne, ie, re, se, oe) { + super(_.app); + this.result = false; + this.isManuallyClosed = false; + this.timer = void 0; + this.plugin = _; + this.title = ee; + this.contentMd = ne; + this.buttons = ie; + this.onSubmit = oe; + this.defaultAction = re; + this.timeout = se; + if (this.timeout) this.timer = setInterval((() => { + var _; + if (void 0 !== this.timeout) { + this.timeout--; + if (this.timeout < 0) { + if (this.timer) { + clearInterval(this.timer); + this.timer = void 0; + } + this.result = re; + this.isManuallyClosed = true; + this.close(); + } else null == (_ = this.defaultButtonComponent) || _.setButtonText(`( ${this.timeout} ) ${re}`); + } + }), 1e3); + } + onOpen() { + const {contentEl: _} = this; + this.titleEl.setText(this.title); + _.addEventListener("click", (() => { + if (this.timer) { + clearInterval(this.timer); + this.timer = void 0; + } + })); + const ee = _.createDiv(); + import_obsidian.MarkdownRenderer.render(this.plugin.app, this.contentMd, ee, "/", this.plugin); + const ne = new import_obsidian.Setting(_); + ne.controlEl.style.flexWrap = "wrap"; + for (const _ of this.buttons) ne.addButton((ee => { + ee.setButtonText(_).onClick((() => { + this.isManuallyClosed = true; + this.result = _; + if (this.timer) { + clearInterval(this.timer); + this.timer = void 0; + } + this.close(); + })); + if (_ == this.defaultAction) this.defaultButtonComponent = ee; + return ee; + })); + } + onClose() { + const {contentEl: _} = this; + _.empty(); + if (this.timer) { + clearInterval(this.timer); + this.timer = void 0; + } + if (this.isManuallyClosed) this.onSubmit(this.result); else this.onSubmit(false); + } +}; + +function confirmWithMessage(_, ee, ne, ie, re, se) { + return new Promise((oe => { + new MessageBox(_, ee, ne, ie, re, se, (_ => oe(_))).open(); + })); +} + +var sameChangePairs, YieldOperationNumbers = 100, PersistentMap = class { + flush() { + this._save(); + } + _save() { + localStorage.setItem(this._key, JSON.stringify([ ...this._map.entries() ])); + } + _load(_ = []) { + var ee; + try { + const ne = null != (ee = localStorage.getItem(this._key)) ? ee : "", ie = "" === ne ? "[]" : ne, re = JSON.parse(ie); + this._map = new Map([ ...re, ..._ ]); + } catch (ee) { + console.log(`Map read error : ${this._key}`); + console.dir(ee); + this._map = new Map([ ..._ ]); + } + return Promise.resolve(); + } + _queueSave() { + this._setCount--; + if (this._setCount < 0) { + this._setCount = YieldOperationNumbers; + scheduleTask(`save-map-${this._key}`, 0, (() => this._save())); + } + scheduleTask(`save-map-${this._key}`, 150, (() => this._save())); + } + delete(_) { + const ee = this._map.delete(_); + this._queueSave(); + return ee; + } + has(_) { + return this._map.has(_); + } + set(_, ee) { + this._map.set(_, ee); + this._queueSave(); + return this; + } + clear() { + this._map = new Map; + this._save(); + } + get(_, ee) { + const ne = this._map.get(_); + if (void 0 === ne) return ee; else return ne; + } + constructor(_, ee) { + Object.defineProperty(this, "_setCount", { + enumerable: true, + configurable: true, + writable: true, + value: YieldOperationNumbers + }); + Object.defineProperty(this, "_map", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_key", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + this._key = _; + this._map = new Map(null != ee ? ee : []); + this._load(ee); + } +}; + +function initializeStores(_) { + sameChangePairs = new PersistentMap(`ls-persist-same-changes-${_}`); +} + +async function path2id(_, ee) { + const ne = _.split(":"), ie = ne.pop(), re = normalizePath(ie); + ne.push(re); + const se = ne.join(":"); + return await path2id_base(se, ee); +} + +function id2path(_, ee) { + const ne = id2path_base(_, ee).split(":"), ie = ne.pop(), re = normalizePath(ie); + ne.push(re); + return ne.join(":"); +} + +function getPath2(_) { + return id2path(_._id, _); +} + +function getPathWithoutPrefix(_) { + return stripAllPrefixes(getPath2(_)); +} + +function getPathFromTFile(_) { + return _.path; +} + +var memos = {}; + +function memoObject(_, ee) { + memos[_] = ee; + return memos[_]; +} + +async function memoIfNotExist(_, ee) { + if (!(_ in memos)) { + const ne = ee(), ie = ne instanceof Promise ? await ne : ne; + memos[_] = ie; + } + return memos[_]; +} + +function retrieveMemoObject(_) { + if (_ in memos) return memos[_]; else return false; +} + +function disposeMemoObject(_) { + delete memos[_]; +} + +function isSensibleMargeApplicable(_) { + if (_.endsWith(".md")) return true; else return false; +} + +function isObjectMargeApplicable(_) { + if (_.endsWith(".canvas")) return true; + if (_.endsWith(".json")) return true; else return false; +} + +function tryParseJSON(_, ee) { + try { + return JSON.parse(_); + } catch (_) { + return ee; + } +} + +var MARK_OPERATOR = "", MARK_DELETED = `${MARK_OPERATOR}__DELETED`, MARK_ISARRAY = `${MARK_OPERATOR}__ARRAY`, MARK_SWAPPED = `${MARK_OPERATOR}__SWAP`; + +function unorderedArrayToObject(_) { + return _.map((_ => ({ + [_.id]: _ + }))).reduce(((_, ee) => ({ + ..._, + ...ee + })), {}); +} + +function objectToUnorderedArray(_) { + const ee = Object.entries(_); + if (ee.some((_ => { + var ee; + return _[0] != (null == (ee = _[1]) ? void 0 : ee.id); + }))) throw new Error("Item looks like not unordered array"); + return ee.map((_ => _[1])); +} + +function generatePatchUnorderedArray(_, ee) { + if (_.every((_ => "object" == typeof _ && "id" in _)) && ee.every((_ => "object" == typeof _ && "id" in _))) { + const ne = generatePatchObj(unorderedArrayToObject(_), unorderedArrayToObject(ee)); + if (Object.keys(ne).length > 0) return { + [MARK_ISARRAY]: ne + }; else return {}; + } + return { + [MARK_SWAPPED]: ee + }; +} + +function generatePatchObj(_, ee) { + const ne = Object.entries(_), ie = new Map(ne), re = {}, se = Object.entries(ee); + for (const [_, ee] of se) if (!ie.has(_)) { + re[_] = ee; + ie.delete(_); + } else { + const ne = ie.get(_); + if (typeof ne != typeof ee || Array.isArray(ne) !== Array.isArray(ee)) re[_] = { + [MARK_SWAPPED]: ee + }; else if ("object" == typeof ne && "object" == typeof ee && !Array.isArray(ne) && !Array.isArray(ee)) { + const ie = generatePatchObj(ne, ee); + if (Object.keys(ie).length > 0) re[_] = ie; + } else if ("object" == typeof ne && "object" == typeof ee && Array.isArray(ne) && Array.isArray(ee)) { + const ie = generatePatchUnorderedArray(ne, ee); + if (Object.keys(ie).length > 0) re[_] = ie; + } else if ("object" != typeof ne && "object" != typeof ee) { + if (JSON.stringify(ie.get(_)) !== JSON.stringify(ee)) re[_] = ee; + } else if (JSON.stringify(ie.get(_)) !== JSON.stringify(ee)) re[_] = { + [MARK_SWAPPED]: ee + }; + ie.delete(_); + } + for (const [_] of ie) re[_] = MARK_DELETED; + return re; +} + +function applyPatch(_, ee) { + const ne = _, ie = Object.entries(ee); + for (const [_, ee] of ie) if (ee != MARK_DELETED) if ("object" == typeof ee) { + if (MARK_SWAPPED in ee) { + ne[_] = ee[MARK_SWAPPED]; + continue; + } + if (MARK_ISARRAY in ee) { + if (!(_ in ne)) ne[_] = []; + if (!Array.isArray(ne[_])) throw new Error("Patch target type is mismatched (array to something)"); + const ie = objectToUnorderedArray(applyPatch(unorderedArrayToObject(ne[_]), ee[MARK_ISARRAY])); + ne[_] = [ ...ie ]; + } else { + if (!(_ in ne)) { + ne[_] = ee; + continue; + } + ne[_] = applyPatch(ne[_], ee); + } + } else ne[_] = ee; else delete ne[_]; + return ne; +} + +function mergeObject(_, ee) { + const ne = Object.entries(ee), ie = { + ..._ + }; + if (typeof _ != typeof ee || Array.isArray(_) !== Array.isArray(ee)) return ee; + for (const [_, ee] of ne) if (_ in ie) { + const ne = ie[_]; + if (typeof ee != typeof ne || Array.isArray(ee) !== Array.isArray(ne)) ie[_] = ee; else if ("object" == typeof ee && "object" == typeof ne && !Array.isArray(ee) && !Array.isArray(ne)) ie[_] = mergeObject(ee, ne); else if ("object" == typeof ee && "object" == typeof ne && Array.isArray(ee) && Array.isArray(ne)) ie[_] = [ ...new Set([ ...ee, ...ne ]) ]; else ie[_] = ee; + } else ie[_] = ee; + const re = Object.fromEntries(Object.entries(ie).sort(((_, ee) => _[0] < ee[0] ? -1 : _[0] > ee[0] ? 1 : 0))); + if (Array.isArray(_) && Array.isArray(ee)) return Object.values(re); else return re; +} + +function flattenObject(_, ee = []) { + if ("object" != typeof _) return [ [ ee.join("."), _ ] ]; + if (Array.isArray(_)) return [ [ ee.join("."), JSON.stringify(_) ] ]; + const ne = Object.entries(_), ie = []; + for (const [_, re] of ne) { + const ne = flattenObject(re, [ ...ee, _ ]); + ie.push(...ne); + } + return ie; +} + +function isValidPath(_) { + if (import_obsidian.Platform.isDesktop) { + if ("darwin" == process.platform) return isValidFilenameInDarwin(_); + if ("linux" == process.platform) return isValidFilenameInLinux(_); else return isValidFilenameInWidows(_); + } + if (import_obsidian.Platform.isAndroidApp) return isValidFilenameInAndroid(_); + if (import_obsidian.Platform.isIosApp) return isValidFilenameInDarwin(_); + Logger("Could not determine platform for checking filename", LOG_LEVEL_VERBOSE); + return isValidFilenameInWidows(_); +} + +function isInternalMetadata(_) { + return _.startsWith(ICHeader); +} + +function stripInternalMetadataPrefix(_) { + return _.substring(ICHeaderLength); +} + +function isChunk(_) { + return _.startsWith(CHeader); +} + +function isPluginMetadata(_) { + return _.startsWith(PSCHeader); +} + +function isCustomisationSyncMetadata(_) { + return _.startsWith(ICXHeader); +} + +var askYesNo = (_, ee) => new Promise((ne => { + new PopoverSelectString(_, ee, void 0, void 0, (_ => ne(_))).open(); +})), askSelectString = (_, ee, ne) => { + const getItemsFun = () => ne; + return new Promise((ne => { + new PopoverSelectString(_, ee, "", getItemsFun, (_ => ne(_))).open(); + })); +}, askString = (_, ee, ne, ie, re = false) => new Promise((se => { + new InputStringDialog(_, ee, ne, ie, re, (_ => se(_))).open(); +})), PeriodicProcessor = class { + constructor(_, ee) { + this._plugin = _; + this._process = ee; + } + async process() { + try { + await this._process(); + } catch (_) { + Logger(_); + } + } + enable(_) { + this.disable(); + if (0 != _) { + this._timer = window.setInterval((() => fireAndForget((async () => { + await this.process(); + if (this._plugin._unloaded) this.disable(); + }))), _); + this._plugin.registerInterval(this._timer); + } + } + disable() { + if (void 0 !== this._timer) { + window.clearInterval(this._timer); + this._timer = void 0; + } + } +}, _requestToCouchDB = async (_, ee, ne, ie, re, se, oe) => { + const le = String.fromCharCode.apply(null, [ ...writeString(`${ee}:${ne}`) ]), ue = { + url: `${_}/${re}`, + method: oe || (se ? "PUT" : "GET"), + headers: { + authorization: "Basic " + window.btoa(le), + origin: ie + }, + contentType: "application/json", + body: se ? JSON.stringify(se) : void 0 + }; + return await (0, import_obsidian.requestUrl)(ue); +}, requestToCouchDB = async (_, ee, ne, ie = "", re, se, oe) => { + const le = "_node/_local/_config" + (re ? "/" + re : ""); + return await _requestToCouchDB(_, ee, ne, ie, le, se, oe); +}; + +async function performRebuildDB(_, ee) { + if ("localOnly" == ee) await _.addOnSetup.fetchLocal(); + if ("localOnlyWithChunks" == ee) await _.addOnSetup.fetchLocal(true); + if ("remoteOnly" == ee) await _.addOnSetup.rebuildRemote(); + if ("rebuildBothByThisDevice" == ee) await _.addOnSetup.rebuildEverything(); +} + +var BASE_IS_NEW = Symbol("base"), TARGET_IS_NEW = Symbol("target"), EVEN = Symbol("even"), resolution = 2e3; + +function compareMTime(_, ee) { + const ne = ~~(_ / resolution) * resolution, ie = ~~(ee / resolution) * resolution; + if (ne == ie) return EVEN; + if (ne > ie) return BASE_IS_NEW; + if (ne < ie) return TARGET_IS_NEW; + throw new Error("Unexpected error"); +} + +function markChangesAreSame(_, ee, ne) { + var ie; + if (ee === ne) return true; + const re = "string" == typeof _ ? _ : _ instanceof import_obsidian.TFile ? _.path : null != (ie = _.path) ? ie : _._id, se = sameChangePairs.get(re, []) || []; + if (se.some((_ => _ == ee || _ == ne))) sameChangePairs.set(re, [ ...new Set([ ...se, ee, ne ]) ]); else sameChangePairs.set(re, [ ee, ne ]); +} + +function isMarkedAsSameChanges(_, ee) { + var ne; + const ie = "string" == typeof _ ? _ : _ instanceof import_obsidian.TFile ? _.path : null != (ne = _.path) ? ne : _._id, re = sameChangePairs.get(ie, []) || []; + if (ee.every((_ => -1 !== re.indexOf(_)))) return EVEN; +} + +function compareFileFreshness(_, ee) { + var ne, ie, re, se, oe, le; + if (void 0 === _ && null == ee) return EVEN; + if (null == _) return TARGET_IS_NEW; + if (null == ee) return BASE_IS_NEW; + const ue = _ instanceof import_obsidian.TFile ? null != (ie = null == (ne = null == _ ? void 0 : _.stat) ? void 0 : ne.mtime) ? ie : 0 : null != (re = null == _ ? void 0 : _.mtime) ? re : 0, de = ee instanceof import_obsidian.TFile ? null != (oe = null == (se = null == ee ? void 0 : ee.stat) ? void 0 : se.mtime) ? oe : 0 : null != (le = null == ee ? void 0 : ee.mtime) ? le : 0; + if (ue && de && isMarkedAsSameChanges(_, [ ue, de ])) return EVEN; else return compareMTime(ue, de); +} + +var import_obsidian6 = require("obsidian"); + +function add_css4(_) { + append_styles(_, "svelte-zh5x8", "label.svelte-zh5x8.svelte-zh5x8{min-width:4em;width:4em;display:inline-flex;flex-direction:row;justify-content:flex-end}ul.svelte-zh5x8.svelte-zh5x8{flex-grow:1;display:inline-flex;flex-direction:column;list-style-type:none;margin-block-start:0;margin-block-end:0;margin-inline-start:0px;margin-inline-end:0px;padding-inline-start:0}li.svelte-zh5x8.svelte-zh5x8{padding:var(--size-2-1) var(--size-4-1);display:inline-flex;flex-grow:1;align-items:center;justify-content:flex-end;gap:var(--size-4-2)}li.svelte-zh5x8 input.svelte-zh5x8{min-width:10em}button.iconbutton.svelte-zh5x8.svelte-zh5x8{max-width:4em}"); +} + +function get_each_context4(_, ee, ne) { + const ie = _.slice(); + ie[15] = ee[ne]; + ie[16] = ee; + ie[17] = ne; + return ie; +} + +function create_each_block4(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe = _[2][_[17]] + "", he = _[3][_[17]] + ""; + function input_input_handler() { + _[8].call(se, _[16], _[17]); + } + function click_handler() { + return _[9](_[17]); + } + return { + c() { + ee = element("li"); + ne = element("label"); + ie = text(fe); + re = text(he); + se = element("input"); + le = element("button"); + le.textContent = "🗑"; + attr(ne, "class", "svelte-zh5x8"); + attr(se, "type", "text"); + attr(se, "class", oe = null_to_empty(_[2][_[17]]) + " svelte-zh5x8"); + attr(le, "class", "iconbutton svelte-zh5x8"); + attr(ee, "class", "svelte-zh5x8"); + }, + m(oe, fe) { + insert(oe, ee, fe); + append(ee, ne); + append(ne, ie); + append(ne, re); + append(ee, se); + set_input_value(se, _[15]); + append(ee, le); + if (!ue) { + de = [ listen(se, "input", input_input_handler), listen(le, "click", click_handler) ]; + ue = true; + } + }, + p(ee, ne) { + _ = ee; + if (4 & ne && fe !== (fe = _[2][_[17]] + "")) set_data(ie, fe); + if (8 & ne && he !== (he = _[3][_[17]] + "")) set_data(re, he); + if (4 & ne && oe !== (oe = null_to_empty(_[2][_[17]]) + " svelte-zh5x8")) attr(se, "class", oe); + if (1 & ne && se.value !== _[15]) set_input_value(se, _[15]); + }, + d(_) { + if (_) detach(ee); + ue = false; + run_all(de); + } + }; +} + +function create_fragment4(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee = ensure_array_like(_[0]), ve = []; + for (let ee = 0; ee < Ee.length; ee += 1) ve[ee] = create_each_block4(get_each_context4(_, Ee, ee)); + return { + c() { + ee = element("ul"); + for (let _ = 0; _ < ve.length; _ += 1) ve[_].c(); + ne = space(); + ie = element("li"); + re = element("label"); + se = element("button"); + se.textContent = "Add"; + oe = space(); + le = element("li"); + ue = element("button"); + de = text("Apply"); + he = space(); + pe = element("button"); + ge = text("Revert"); + attr(re, "class", "svelte-zh5x8"); + attr(ie, "class", "svelte-zh5x8"); + ue.disabled = fe = _[3].some(_[11]) || _[2].every(func_1); + pe.disabled = me = _[3].some(_[13]) || _[2].every(func_3); + attr(le, "class", "buttons svelte-zh5x8"); + attr(ee, "class", "svelte-zh5x8"); + }, + m(fe, me) { + insert(fe, ee, me); + for (let _ = 0; _ < ve.length; _ += 1) if (ve[_]) ve[_].m(ee, null); + append(ee, ne); + append(ee, ie); + append(ie, re); + append(re, se); + append(ee, oe); + append(ee, le); + append(le, ue); + append(ue, de); + append(le, he); + append(le, pe); + append(pe, ge); + if (!ye) { + Se = [ listen(se, "click", _[10]), listen(ue, "click", _[12]), listen(pe, "click", _[14]) ]; + ye = true; + } + }, + p(_, [ie]) { + if (45 & ie) { + Ee = ensure_array_like(_[0]); + let re; + for (re = 0; re < Ee.length; re += 1) { + const se = get_each_context4(_, Ee, re); + if (ve[re]) ve[re].p(se, ie); else { + ve[re] = create_each_block4(se); + ve[re].c(); + ve[re].m(ee, ne); + } + } + for (;re < ve.length; re += 1) ve[re].d(1); + ve.length = Ee.length; + } + if (12 & ie && fe !== (fe = _[3].some(_[11]) || _[2].every(func_1))) ue.disabled = fe; + if (12 & ie && me !== (me = _[3].some(_[13]) || _[2].every(func_3))) pe.disabled = me; + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + destroy_each(ve, _); + ye = false; + run_all(Se); + } + }; +} + +var CHECK_OK = "✔", CHECK_NG = "⚠", MARK_MODIFIED = "✏ "; + +function checkRegExp(_) { + if ("" == _.trim()) return ""; + try { + new RegExp(_); + return CHECK_OK; + } catch (_) { + return CHECK_NG; + } +} + +var func_1 = _ => "" == _, func_3 = _ => "" == _; + +function instance4(_, ee, ne) { + let ie, re, {patterns: se = []} = ee, {originals: oe = []} = ee, {apply: le = _ => Promise.resolve()} = ee; + function revert() { + ne(0, se = [ ...oe ]); + } + function remove(_) { + ne(0, se[_] = "", se); + } + function add() { + ne(0, se = [ ...se, "" ]); + } + _.$$set = _ => { + if ("patterns" in _) ne(0, se = _.patterns); + if ("originals" in _) ne(7, oe = _.originals); + if ("apply" in _) ne(1, le = _.apply); + }; + _.$$.update = () => { + if (1 & _.$$.dirty) ne(3, ie = se.map((_ => checkRegExp(_)))); + if (129 & _.$$.dirty) ne(2, re = se.map(((_, ee) => { + var ne; + return (null !== (ne = _ != (null == oe ? void 0 : oe[ee])) && void 0 !== ne ? ne : "") ? MARK_MODIFIED : ""; + }))); + }; + return [ se, le, re, ie, revert, remove, add, oe, function input_input_handler(_, ee) { + _[ee] = this.value; + ne(0, se); + }, _ => remove(_), () => add(), _ => _ == CHECK_NG, () => le(se), _ => _ == CHECK_NG, () => revert() ]; +} + +var MultipleRegExpControl = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance4, create_fragment4, safe_not_equal, { + patterns: 0, + originals: 7, + apply: 1 + }, add_css4); + } +}, MultipleRegExpControl_default = MultipleRegExpControl; + +function inlineWorker(_) { + let ee = new Blob([ _ ], { + type: "text/javascript" + }), ne = URL.createObjectURL(ee), ie = new Worker(ne); + URL.revokeObjectURL(ne); + return ie; +} + +function Worker2() { + return inlineWorker('var A=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),O=e=>{throw TypeError(e)};var w=function(e,t){this[0]=e,this[1]=t},m=(e,t,n)=>{var r=(c,s,l,a)=>{try{var u=n[c](s),y=(s=u.value)instanceof w,x=u.done;Promise.resolve(y?s[0]:s).then(f=>y?r(c==="return"?c:"next",s[1]?{done:f.done,value:f.value}:f,l,a):l({value:f,done:x})).catch(f=>r("throw",f,l,a))}catch(f){a(f)}},o=c=>i[c]=s=>new Promise((l,a)=>r(c,s,l,a)),i={};return n=n.apply(e,t),i[A("asyncIterator")]=()=>i,o("next"),o("throw"),o("return"),i},E=e=>{var t=e[A("asyncIterator")],n=!1,r,o={};return t==null?(t=e[A("iterator")](),r=i=>o[i]=c=>t[i](c)):(t=t.call(e),r=i=>o[i]=c=>{if(n){if(n=!1,i==="throw")throw c;return c}return n=!0,{done:!1,value:new w(new Promise(s=>{var l=t[i](c);l instanceof Object||O("Object expected"),s(l)}),1)}}),o[A("iterator")]=()=>o,r("next"),"throw"in t?r("throw"):o.throw=i=>{throw i},"return"in t&&r("return"),o},B=(e,t,n)=>(t=e[A("asyncIterator")])?t.call(e):(e=e[A("iterator")](),t={},n=(r,o)=>(o=e[r])&&(t[r]=i=>new Promise((c,s,l)=>(i=o.call(e,i),l=i.done,Promise.resolve(i.value).then(a=>c({value:a,done:l}),s)))),n("next"),n("return"),t);var ie=3*5e7;function M(e){return new Promise((t,n)=>{let r=new Blob([e],{type:"application/octet-binary"}),o=new FileReader;o.onload=function(i){var l,a;let c=((a=(l=i.target)==null?void 0:l.result)==null?void 0:a.toString())||"";if(e.byteLength!=0&&(c==""||c=="data:"))return n(new TypeError("Could not parse the encoded string"));let s=c.substring(c.indexOf(",")+1);t(s)},o.readAsDataURL(r)})}async function L(e){let t=e instanceof Uint8Array?e:new Uint8Array(e);return t.byteLength{V[t]=e,k[e]=t});var I={},v={};for(let e=0;e<256;e++)I[`00${e.toString(16)}`.slice(-2)]=e,v[e]=`00${e.toString(16)}`.slice(-2);function _(e){return e.type==="text/plain"}function*X(e,t){let n="";e:do{let r=e.shift();if(typeof r=="undefined"){yield n;break e}if(r.startsWith("```")||r.startsWith(" ```")||r.startsWith(" ```")||r.startsWith(" ```")){yield n,n=r+(e.length!=0?`\n`:"");t:do{let s=e.shift();if(typeof s=="undefined")break t;n+=s+(e.length!=0?`\n`:"")}while(e.length>0&&!(e[0].startsWith("```")||e[0].startsWith(" ```")||e[0].startsWith(" ```")||e[0].startsWith(" ```")));let o=n.endsWith("="),i=n.length>2048,c=e.shift();if(typeof c!="undefined"&&(n+=c,n+=e.length!=0?`\n`:""),!o&&!i){let s=/(.*?[;,:<])/g,l=n.split(s).filter(a=>a!="");for(let a of l)yield a}else yield n;n=""}else n+=r+(e.length!=0?`\n`:""),(n.length>=t||e.length==0||e[0]=="#"||n[0]=="#")&&(yield n,n="")}while(e.length>0)}var G=10;function J(e,t,n,r){let o=typeof e=="string"?[e]:e;return function*(){for(let c of o)if(n){let s=c.split(`\n`),l=X(s,r);for(let a of l){let u=a;do{let y=t;u.charCodeAt(y-1)!=u.codePointAt(y-1)&&y++,yield u.substring(0,y),u=u.substring(y)}while(u!="")}}else{let s=c;do{let l=t,a=s.substring(0,l);s=s.substring(l),yield a}while(s!="")}}}function*K(e,t,n=25,r){let o="",i=!1,c=t.length;for(let s of e){let l=s.length;if(r&&l>r){yield o+s,i=!1,o="";continue}let a=-1,u=0;e:do{if(a=s.indexOf(t,u),a==-1)break e;o+=s.slice(u,a)+t,o.length>n?(yield o,o="",i=!1):i=!0,u=a+c}while(at){let r=0;do{let o=r+t;if(o>n){yield e.substring(r);break}for(;e.charCodeAt(o-1)!=e.codePointAt(o-1);)o++;yield e.substring(r,o),r=o}while(rZ;)f+=r;let g=Y([y]),h=K(g,`\n`,f),d=Q(h,t);return function*(){yield*E(d)}}let i=0;o&&o.endsWith(".pdf")&&(i=47);let l=Math.max(1e5,Math.min(1e8,e.size)),a=1,u=l;for(;u>10;)u/=12.5,a++;return r=Math.floor(10**(a-1)),function(){return m(this,null,function*(){let x=e.size,f=0,g=new Uint8Array(yield new w(e.arrayBuffer()));do{let h=f+r,d=f+t,p,b=g.indexOf(i,h);b==-1&&(b=g.indexOf(G,h)),b==-1?p=d:p=b10;)u/=12.5,a++;return r=Math.floor(10**(a-1)),function(){return m(this,null,function*(){let x=e.size,f=0;do{let g=t,h=new Uint8Array(yield new w(e.slice(f,f+t).arrayBuffer())),d=h.indexOf(i,r);g=d==-1?t:Math.min(t,d),d==-1&&(d=h.indexOf(G,r));let p=h.slice(0,g);f+=p.length,yield yield new w(L(p))}while(f{let t=e.data.data,n=t.key,r=t.dataSrc,o=t.pieceSize,i=t.plainSplit,c=t.minimumChunkSize,s=t.filename,a=await(t.useV2?U:F)(r,o,i,c,s);try{for(var u=B(a()),y,x,f;y=!(x=await u.next()).done;y=!1){let g=x.value;self.postMessage([n,g])}}catch(x){f=[x]}finally{try{y&&(x=u.return)&&await x.call(u)}finally{if(f)throw f[0]}}self.postMessage([n,void 0])};\n'); +} + +var key = 0, buffers = new Map, notify = new Notifier, worker = Worker2(), isTerminated = false; + +worker.onmessage = ({data: _}) => { + const [ee, ne] = _; + if (!buffers.has(ee)) buffers.set(ee, []); + buffers.set(ee, buffers.get(ee).concat(ne)); + notify.notify(); +}; + +worker.onerror = () => { + worker.terminate(); + isTerminated = true; +}; + +function terminateWorker() { + worker.terminate(); + isTerminated = true; +} + +function splitPieces2Worker(_, ee, ne, ie, re) { + return _splitPieces2Worker(_, ee, ne, ie, re, false); +} + +function splitPieces2WorkerV2(_, ee, ne, ie, re) { + return _splitPieces2Worker(_, ee, ne, ie, re, true); +} + +function _splitPieces2Worker(_, ee, ne, ie, re, se) { + key++; + worker.postMessage({ + data: { + key, + dataSrc: _, + pieceSize: ee, + plainSplit: ne, + minimumChunkSize: ie, + filename: re, + useV2: se + } + }); + buffers.set(key, []); + return async function* pieces() { + const _ = key; + do { + const ee = buffers.get(_); + if (ee.length > 0) { + const ne = ee.shift(); + buffers.set(_, ee); + if (void 0 === ne) { + buffers.delete(_); + return; + } + yield ne; + } else await notify.nextNotify; + } while (!isTerminated); + }; +} + +function isTextBlob2(_) { + return "text/plain" === _.type; +} + +function* pickPiece(_, ee) { + let ne = ""; + e: do { + const ie = _.shift(); + if ("undefined" == typeof ie) { + yield ne; + break e; + } + if (ie.startsWith("```") || ie.startsWith(" ```") || ie.startsWith(" ```") || ie.startsWith(" ```")) { + yield ne; + ne = ie + (0 != _.length ? "\n" : ""); + t: do { + const ee = _.shift(); + if ("undefined" == typeof ee) break t; + ne += ee + (0 != _.length ? "\n" : ""); + } while (_.length > 0 && !(_[0].startsWith("```") || _[0].startsWith(" ```") || _[0].startsWith(" ```") || _[0].startsWith(" ```"))); + const ee = ne.endsWith("="), re = ne.length > 2048, se = _.shift(); + if ("undefined" != typeof se) { + ne += se; + ne += 0 != _.length ? "\n" : ""; + } + if (!ee && !re) { + const _ = /(.*?[;,:<])/g, ee = ne.split(_).filter((_ => "" != _)); + for (const _ of ee) yield _; + } else yield ne; + ne = ""; + } else { + ne += ie + (0 != _.length ? "\n" : ""); + if (ne.length >= ee || 0 == _.length || "#" == _[0] || "#" == ne[0]) { + yield ne; + ne = ""; + } + } + } while (_.length > 0); +} + +var charNewLine = "\n".charCodeAt(0); + +function splitPiecesText(_, ee, ne, ie) { + const re = "string" == typeof _ ? [ _ ] : _; + return function* pieces() { + for (const _ of re) if (ne) { + const ne = pickPiece(_.split("\n"), ie); + for (const _ of ne) { + let ne = _; + do { + let _ = ee; + if (ne.charCodeAt(_ - 1) != ne.codePointAt(_ - 1)) _++; + yield ne.substring(0, _); + ne = ne.substring(_); + } while ("" != ne); + } + } else { + let ne = _; + do { + const _ = ee, ie = ne.substring(0, _); + ne = ne.substring(_); + yield ie; + } while ("" != ne); + } + }; +} + +function* splitByDelimiterWithMinLength(_, ee, ne = 25, ie) { + let re = "", se = false; + const oe = ee.length; + for (const le of _) { + const _ = le.length; + if (ie && _ > ie) { + yield re + le; + se = false; + re = ""; + continue; + } + let ue = -1, de = 0; + e: do { + ue = le.indexOf(ee, de); + if (-1 == ue) break e; + re += le.slice(de, ue) + ee; + if (re.length > ne) { + yield re; + re = ""; + se = false; + } else se = true; + de = ue + oe; + } while (ue < _); + if (de != ue || -1 == de && -1 == ue) { + re += le.slice(de); + se = true; + } + } + if (se) yield re; +} + +function* chunkStringGenerator(_, ee) { + const ne = _.length; + if (ne > ee) { + let ie = 0; + do { + let re = ie + ee; + if (re > ne) { + yield _.substring(ie); + break; + } + for (;_.charCodeAt(re - 1) != _.codePointAt(re - 1); ) re++; + yield _.substring(ie, re); + ie = re; + } while (ie < ne); + } else yield _; +} + +function* chunkStringGeneratorFromGenerator(_, ee) { + for (const ne of _) yield* chunkStringGenerator(ne, ee); +} + +function* stringGenerator(_) { + for (const ee of _) yield ee; +} + +var MAX_ITEMS = 100; + +async function splitPieces2V2(_, ee, ne, ie, re) { + if (0 == _.size) return function* noItems() {}; + if (isTextBlob2(_)) { + const re = await _.text(); + if (!ne) { + const _ = chunkStringGenerator(re, ee); + return function* pieces() { + yield* _; + }; + } + const se = re.length; + let oe = ie; + for (;se / oe > MAX_ITEMS; ) oe += ie; + const le = chunkStringGeneratorFromGenerator(splitByDelimiterWithMinLength(stringGenerator([ re ]), "\n", oe), ee); + return function* pieces() { + yield* le; + }; + } + let se = 0; + if (re && re.endsWith(".pdf")) se = "/".charCodeAt(0); + let oe = 1, le = Math.max(1e5, Math.min(1e8, _.size)); + for (;le > 10; ) { + le /= 12.5; + oe++; + } + ie = Math.floor(10 ** (oe - 1)); + return async function* piecesBlob() { + const ne = _.size; + let re = 0; + const oe = new Uint8Array(await _.arrayBuffer()); + do { + const _ = re + ie, ne = re + ee; + let le, ue = oe.indexOf(se, _); + if (-1 == ue) ue = oe.indexOf(charNewLine, _); + if (-1 == ue) le = ne; else le = ue < ne ? ue : ne; + yield await arrayBufferToBase64Single(oe.slice(re, le)); + re = le; + } while (re < ne); + }; +} + +async function splitPieces2(_, ee, ne, ie, re) { + if (isTextBlob2(_)) return splitPiecesText(await _.text(), ee, ne, ie); + let se = 0; + if (re && re.endsWith(".pdf")) se = "/".charCodeAt(0); + let oe = 1, le = Math.max(1e5, Math.min(1e8, _.size)); + for (;le > 10; ) { + le /= 12.5; + oe++; + } + ie = Math.floor(10 ** (oe - 1)); + return async function* piecesBlob() { + const ne = _.size; + let re = 0; + do { + let ne = ee; + const oe = new Uint8Array(await _.slice(re, re + ee).arrayBuffer()); + let le = oe.indexOf(se, ie); + ne = -1 == le ? ee : Math.min(ee, le); + if (-1 == le) le = oe.indexOf(charNewLine, ie); + const ue = oe.slice(0, ne); + re += ue.length; + yield await arrayBufferToBase64Single(ue); + } while (re < ne); + }; +} + +async function getChunk(_, ee, ne) { + const ie = _.hashCaches.revGet(ee); + if (void 0 !== ie) return { + isNew: false, + id: ie, + piece: ee + }; + const re = PREFIX_CHUNK + await generateHashedChunk(_, ee); + if (re in ne.eden) return { + isNew: false, + id: re, + piece: ee + }; + const se = _.hashCaches.get(re); + if (se && se != ee) { + Logger(`Hash collided! If possible, please report the following string:${re}=>\nA:--${se}--\nB:--${ee}--`, LOG_LEVEL_NOTICE); + return false; + } + _.hashCaches.set(re, ee); + return { + isNew: true, + id: re, + piece: ee + }; +} + +async function generateHashedChunk(_, ee) { + const ne = _.settings.passphrase; + if ("sha1" == _.settings.hashAlg) if (_.settings.encrypt) return "+" + await sha1(`${ee}-${ne}-${ee.length}`); else return await sha1(`${ee}-${ee.length}`); else if ("" === _.settings.hashAlg) if (_.settings.encrypt) { + const ie = _.h32Raw((new TextEncoder).encode(ne)); + return "+" + (_.h32Raw((new TextEncoder).encode(ee)) ^ ie ^ ee.length).toString(36); + } else return (_.h32Raw((new TextEncoder).encode(ee)) ^ ee.length).toString(36); else if ("xxhash64" == _.settings.hashAlg && _.xxhash64) if (_.settings.encrypt) return "+" + _.xxhash64(`${ee}-${ne}-${ee.length}`).toString(36); else return _.xxhash64(`${ee}-${ee.length}`).toString(36); else if (_.settings.encrypt) return "+" + _.xxhash32(`${ee}-${ne}-${ee.length}`).toString(36); else return _.xxhash32(`${ee}-${ee.length}`).toString(36); +} + +function getNoFromRev(_) { + if (!_) return 0; else return parseInt(_.split("-")[0]); +} + +async function putDBEntry(_, ee) { + var ne; + const ie = _.id2path(ee._id, ee), re = stripAllPrefixes(ie); + if (!ee.eden) ee.eden = {}; + if (!_.isTargetFile(ie)) { + Logger(`File skipped:${re}`, LOG_LEVEL_VERBOSE); + return false; + } + let se = 0; + const oe = Math.floor(MAX_DOC_SIZE_BIN * (1 * (_.settings.customChunkSize || 0) + 1)); + let le = false; + const ue = _.settings.minimumChunkSize; + if (Date.now() - ee.mtime > 2592e6) le = false; else if (shouldSplitAsPlainText(ie)) le = true; + const de = ee.data instanceof Blob ? ee.data : createTextBlob(ee.data); + ee.type = isTextBlob(de) ? "plain" : "newnote"; + ee.datatype = ee.type; + const fe = _.settings.enableChunkSplitterV2 ? splitPieces2V2 : splitPieces2, he = _.settings.enableChunkSplitterV2 ? splitPieces2WorkerV2 : splitPieces2Worker, pe = _.settings.disableWorkerForGeneratingChunks ? fe : _.settings.processSmallFilesInUIThread && ee.data.size < 1024 ? fe : he, ge = await pe(de, oe, le, ue, ie), me = []; + for await (const ne of ge()) { + se++; + me.push(getChunk(_, ne, ee)); + } + const ye = await Promise.all(me); + if (ye.some((_ => false === _))) { + Logger(`This document could not be saved:${re}`, LOG_LEVEL_NOTICE); + return false; + } + let Se = {}, Ee = 0; + if ("eden" in ee) Se = ee.eden; + let ve = []; + if (_.settings.useEden) { + try { + const ne = await _.localDatabase.get(ee._id); + Ee = getNoFromRev(ne._rev); + Se = { + ..."eden" in ne ? ne.eden : {}, + ...Se + }; + } catch (_) { + if (isErrorOfMissingDoc(_)) ; else throw _; + } + const ne = Object.keys(Se).length; + let ie = 0; + const se = Object.keys(Se).filter((_ => ye.every((ee => ee.id !== _)))); + for (const _ of se) { + ie++; + delete Se[_]; + } + let oe = 0, le = 0; + for (const _ of ye) if (_.id in Se) le++; else { + oe++; + Se[_.id] = { + epoch: Ee + 1, + data: _.piece + }; + } + const ue = Object.entries(Se).sort(((_, ee) => ee[1].epoch - _[1].epoch)); + let de = 0, fe = 0; + const he = Object.keys(Se); + let pe = 0, ge = 0; + const me = (await _.localDatabase.allDocs({ + keys: he + })).rows.reduce(((_, ee) => ({ + ..._, + [ee.key]: ee + })), {}); + for (const [ee, ne] of ue) { + fe++; + let ie = false; + if (!(ee in me) || me[ee].error) { + if (ne.data.length > 1024) ie = true; else if (ne.epoch + _.settings.maxAgeInEden < Ee) ie = true; + if (de > _.settings.maxTotalLengthInEden) ie = true; + if (fe > _.settings.maxChunksInEden) ie = true; + if (ie) { + fe--; + ge++; + ve.push({ + _id: ee, + data: ne.data, + type: "leaf" + }); + delete Se[ee]; + } else de += ne.data.length; + } else { + fe--; + delete Se[ee]; + pe++; + } + } + Logger(`Progress on Eden: doc: ${re} : ${ne}->${Object.keys(Se).length} (removed: ${ie}, new: ${oe}, exist: ${le}, alreadyIndependent:${pe}, independent:${ge})`, LOG_LEVEL_VERBOSE); + } else ve = ye.filter((_ => _.isNew)).map((_ => ({ + _id: _.id, + data: _.piece, + type: "leaf" + }))); + const Ce = se - ve.length; + if (ve.length) { + const ee = (await _.localDatabase.bulkDocs(ve)).reduce(((_, ee) => { + if ("ok" in ee) { + _.ok.push(ee); + return _; + } + if ("error" in ee) if (409 == ee.status) { + _.skip.push(ee); + return _; + } + _.failed.push(ee); + return _; + }), { + ok: [], + skip: [], + failed: [] + }); + if (ee.failed.length) { + Logger(`Save failed.: ${re} :${ee.failed.map((_ => { + var ee; + return null != (ee = null == _ ? void 0 : _.id) ? ee : _.toString(); + })).join(",")}`, LOG_LEVEL_VERBOSE); + Logger(`This document could not be saved:${re}`, LOG_LEVEL_NOTICE); + return false; + } + Logger(`Chunks saved: doc: ${re} ,chunks: ${se} (new:${ee.ok.length}, recycled:${ee.skip.length}, cached:${Ce})`); + } + const we = { + children: ye.map((_ => _.id)), + _id: ee._id, + path: ee.path, + ctime: ee.ctime, + mtime: ee.mtime, + size: ee.size, + type: ee.datatype, + eden: Se + }; + return null != (ne = await serialized("file:" + ie, (async () => { + try { + const ee = await _.localDatabase.get(we._id); + we._rev = ee._rev; + } catch (_) { + if (isErrorOfMissingDoc(_)) ; else throw _; + } + const ee = await _.localDatabase.put(we, { + force: true + }); + if (ee.ok) return ee; else return false; + }))) ? ne : false; +} + +async function getDBEntryMeta(_, ee, ne, ie = false) { + var re, se; + if (!_.isTargetFile(ee)) return false; + const oe = await _.path2id(ee); + try { + let le = null; + if (ne) le = await _.localDatabase.get(oe, ne); else le = await _.localDatabase.get(oe); + const ue = null != (se = null != (re = null == le ? void 0 : le.deleted) ? re : le._deleted) ? se : void 0; + if (!ie && ue) return false; + if (le.type && "leaf" == le.type) return false; + if (!le.type || le.type && "notes" == le.type || "newnote" == le.type || "plain" == le.type) { + const _ = le; + let ne = [], ie = "plain"; + if ("newnote" == le.type || "plain" == le.type) { + ne = le.children; + ie = le.type; + } + return { + data: "", + _id: _._id, + path: ee, + ctime: _.ctime, + mtime: _.mtime, + size: _.size, + _rev: le._rev, + _conflicts: le._conflicts, + children: ne, + datatype: ie, + deleted: ue, + type: ie, + eden: "eden" in le ? le.eden : {} + }; + } + } catch (_) { + if (isErrorOfMissingDoc(_)) return false; + throw _; + } + return false; +} + +async function getDBEntryFromMeta(_, ee, ne, ie = false, re = true, se = false) { + var oe, le, ue; + const de = _.id2path(ee._id, ee); + if (!_.isTargetFile(de)) return false; + const fe = stripAllPrefixes(de), he = null != (le = null != (oe = ee.deleted) ? oe : ee._deleted) ? le : void 0; + if (!ee.type || ee.type && "notes" == ee.type) { + const _ = ee, ne = { + data: _.data, + path: _.path, + _id: _._id, + ctime: _.ctime, + mtime: _.mtime, + size: _.size, + _rev: ee._rev, + _conflicts: ee._conflicts, + children: [], + datatype: "newnote", + deleted: he, + type: "newnote", + eden: "eden" in ee ? ee.eden : {} + }; + if (ie) { + Logger("--Old fashioned document--"); + Logger(ne); + } + return ne; + } + if ("newnote" == ee.type || "plain" == ee.type) { + if (ie) { + const ne = await _.localDatabase.get(ee._id, { + conflicts: true, + revs_info: true + }); + Logger("-- Conflicts --"); + Logger(null != (ue = ne._conflicts) ? ue : "No conflicts"); + Logger("-- Revs info -- "); + Logger(ne._revs_info); + } + try { + if (ie) { + Logger("--Bare document--"); + Logger(ee); + } + const ne = [ ...ee.children ], se = new Map; + if (ee.eden) Object.entries(ee.eden).forEach((([_, ee]) => se.set(_, ee.data))); + const oe = unique(ne).filter((_ => !se.has(_))); + if (0 != oe.length) if (_.isOnDemandChunkEnabled) { + const ne = await _.collectChunks(oe, false, re); + if (false === ne || ne.some((_ => "leaf" != _.type))) { + Logger(`Chunks of ${fe} (${ee._id.substring(0, 8)}) are not valid.`, LOG_LEVEL_NOTICE); + if (ne) Logger(`Missing chunks: ${ne.map((_ => _._id)).join(",")}`, LOG_LEVEL_VERBOSE); + return false; + } + ne.forEach((_ => se.set(_._id, _.data))); + } else try { + if (re) (await Promise.all(oe.map((ee => _.getDBLeaf(ee, re))))).forEach(((_, ee) => se.set(oe[ee], _))); else { + const ne = await _.localDatabase.allDocs({ + keys: oe, + include_docs: true + }); + if (ne.rows.some((_ => "error" in _))) { + const _ = ne.rows.filter((_ => "error" in _)).map((_ => _.key)).join(", "); + Logger(`Chunks of ${fe} (${ee._id.substring(0, 8)}) are not valid.`, LOG_LEVEL_NOTICE); + Logger(`Missing chunks: ${_}`, LOG_LEVEL_VERBOSE); + return false; + } + if (ne.rows.some((_ => _.doc && "leaf" != _.doc.type))) { + const _ = ne.rows.filter((_ => _.doc && "leaf" != _.doc.type)).map((_ => _.id)).join(", "); + Logger(`Chunks of ${fe} (${ee._id.substring(0, 8)}) are not valid.`, LOG_LEVEL_NOTICE); + Logger(`Corrupted chunks: ${_}`, LOG_LEVEL_VERBOSE); + return false; + } + ne.rows.forEach(((_, ee) => "doc" in _ && se.set(_.doc._id, _.doc.data))); + } + } catch (_) { + Logger(`Something went wrong on reading chunks of ${fe}(${ee._id.substring(0, 8)}) from database, see verbose info for detail.`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + const le = ne.map((_ => se.get(_))); + if (le.some((_ => void 0 === _))) throw new Error("Load failed"); + const ue = { + data: le, + path: ee.path, + _id: ee._id, + ctime: ee.ctime, + mtime: ee.mtime, + size: ee.size, + _rev: ee._rev, + children: ee.children, + datatype: ee.type, + _conflicts: ee._conflicts, + eden: ee.eden, + deleted: he, + type: ee.type + }; + if (ie) { + Logger("--Loaded Document--"); + Logger(ue); + } + return ue; + } catch (_) { + if (isErrorOfMissingDoc(_)) { + Logger(`Missing document content!, could not read ${fe}(${ee._id.substring(0, 8)}) from database.`, LOG_LEVEL_NOTICE); + return false; + } + Logger(`Something went wrong on reading ${fe}(${ee._id.substring(0, 8)}) from database:`, LOG_LEVEL_NOTICE); + Logger(_); + } + } + return false; +} + +async function getDBEntry(_, ee, ne, ie = false, re = true, se = false) { + const oe = await getDBEntryMeta(_, ee, ne, se); + if (oe) return await getDBEntryFromMeta(_, oe, ne, ie, re, se); else return false; +} + +async function deleteDBEntry(_, ee, ne) { + var ie; + if (!_.isTargetFile(ee)) return false; + const re = await _.path2id(ee); + try { + return null != (ie = await serialized("file:" + ee, (async () => { + let ie = null; + if (ne) ie = await _.localDatabase.get(re, ne); else ie = await _.localDatabase.get(re); + const se = ne && "" != ("rev" in ne ? ne.rev : ""); + if (ie.type && "leaf" == ie.type) return false; + if (!ie.type || ie.type && "notes" == ie.type) { + ie._deleted = true; + const ne = await _.localDatabase.put(ie, { + force: !se + }); + Logger(`Entry removed:${ee} (${ie._id.substring(0, 8)}-${ne.rev})`); + return true; + } + if ("newnote" == ie.type || "plain" == ie.type) { + if (se) ie._deleted = true; else { + ie.deleted = true; + ie.mtime = Date.now(); + if (_.settings.deleteMetadataOfDeletedFiles) ie._deleted = true; + } + const ne = await _.localDatabase.put(ie, { + force: !se + }); + Logger(`Entry removed:${ee} (${ie._id.substring(0, 8)}-${ne.rev})`); + return true; + } else return false; + }))) ? ie : false; + } catch (_) { + if (isErrorOfMissingDoc(_)) return false; + throw _; + } +} + +async function deleteDBEntryPrefix(_, ee) { + let ne = 0, ie = 0; + const re = []; + do { + const se = await _.localDatabase.allDocs({ + include_docs: false, + skip: ne, + limit: 100, + conflicts: true + }); + ie = se.rows.length; + if (ie > 0) for (const ne of se.rows) { + const ie = _.id2path(ne.id, ne.doc); + if (ie.startsWith(ee)) { + if (_.isTargetFile(ie)) re.push(ne.id); + } else if (!ne.id.startsWith("h:")) ; + } + ne += ie; + } while (0 != ie); + let se = 0, oe = 0; + for (const ee of re) try { + await serialized("file:" + ee, (async () => { + const ne = await _.localDatabase.get(ee); + if ("newnote" == ne.type || "plain" == ne.type) { + ne.deleted = true; + if (_.settings.deleteMetadataOfDeletedFiles) ne._deleted = true; + ne.mtime = Date.now(); + } else ne._deleted = true; + await _.localDatabase.put(ne, { + force: true + }); + })); + se++; + } catch (_) { + if (isErrorOfMissingDoc(_)) oe++; else throw _; + } + Logger(`deleteDBEntryPrefix:deleted ${se} items, skipped ${oe}`); + return true; +} + +async function ensureRemoteIsCompatible(_, ee, ne, ie, re) { + var se, oe, le, ue; + const de = { + _id: MILESTONE_DOCID, + type: "milestoneinfo", + created: new Date / 1, + locked: false, + accepted_nodes: [ ne ], + node_chunk_info: { + [ne]: ie + }, + tweak_values: {} + }; + let fe = _; + if (!fe) fe = de; + const he = extractObject(TweakValuesTemplate, ee); + fe.node_chunk_info = { + ...de.node_chunk_info, + ...fe.node_chunk_info + }; + if (fe.node_chunk_info[ne].min != ie.min || fe.node_chunk_info[ne].max != ie.max || isObjectDifferent(null == (se = fe.tweak_values) ? void 0 : se[ne], he) || "undefined" == typeof fe._rev || !(DEVICE_ID_PREFERRED in fe.tweak_values)) { + fe.node_chunk_info[ne].min = ie.min; + fe.node_chunk_info[ne].max = ie.max; + fe.tweak_values = { + ...null != (oe = fe.tweak_values) ? oe : {}, + [ne]: he + }; + if (!(DEVICE_ID_PREFERRED in fe.tweak_values)) fe.tweak_values[DEVICE_ID_PREFERRED] = he; + await re(fe); + } + let pe = ie.min, ge = ie.max; + for (const _ of fe.accepted_nodes) if (_ != ne) if (_ in fe.node_chunk_info) { + const ee = fe.node_chunk_info[_]; + pe = Math.max(ee.min, pe); + ge = Math.min(ee.max, ge); + } else { + pe = 0; + ge = 0; + } + if (ge < pe) if (!ee.ignoreVersionCheck) return "INCOMPATIBLE"; + if (!ee.disableCheckingConfigMismatch) { + const _ = null != (ue = null == (le = fe.tweak_values) ? void 0 : le[DEVICE_ID_PREFERRED]) ? ue : he, ee = he; + if (isObjectDifferent(extractObject(TweakValuesShouldMatchedTemplate, { + ...TweakValuesDefault, + ..._ + }), extractObject(TweakValuesShouldMatchedTemplate, { + ...TweakValuesDefault, + ...ee + }), true)) return [ "MISMATCHED", _ ]; + } + if (fe.locked) { + if (-1 == fe.accepted_nodes.indexOf(ne)) if (fe.cleaned) return "NODE_CLEANED"; else return "NODE_LOCKED"; + return "LOCKED"; + } + return "OK"; +} + +async function ensureDatabaseIsCompatible(_, ee, ne, ie) { + const re = await resolveWithIgnoreKnownError(_.get(MILESTONE_DOCID), false); + return await ensureRemoteIsCompatible(re, ee, ne, ie, (async ee => { + await _.put(ee); + })); +} + +var LiveSyncAbstractReplicator = class { + constructor(_) { + this.syncStatus = "NOT_CONNECTED"; + this.docArrived = 0; + this.docSent = 0; + this.lastSyncPullSeq = 0; + this.maxPullSeq = 0; + this.lastSyncPushSeq = 0; + this.maxPushSeq = 0; + this.nodeid = ""; + this.remoteLocked = false; + this.remoteCleaned = false; + this.remoteLockedAndDeviceNotAccepted = false; + this.tweakSettingsMismatched = false; + this.updateInfo = () => { + this.env.replicationStat.value = { + sent: this.docSent, + arrived: this.docArrived, + maxPullSeq: this.maxPullSeq, + maxPushSeq: this.maxPushSeq, + lastSyncPullSeq: this.lastSyncPullSeq, + lastSyncPushSeq: this.lastSyncPushSeq, + syncStatus: this.syncStatus + }; + }; + this.env = _; + } + async initializeDatabaseForReplication() { + const _ = this.env.getDatabase(); + try { + const ee = await resolveWithIgnoreKnownError(_.get(NODEINFO_DOCID), { + _id: NODEINFO_DOCID, + type: "nodeinfo", + nodeid: "", + v20220607: true + }); + if ("" == ee.nodeid) { + ee.nodeid = Math.random().toString(36).slice(-10); + await _.put(ee); + } + this.nodeid = ee.nodeid; + return true; + } catch (_) { + Logger(_); + } + return false; + } +}, currentVersionRange = { + min: 0, + max: 2, + current: 2 +}, selectorOnDemandPull = { + selector: { + type: { + $ne: "leaf" + } + } +}, selectorOnDemandPush = {}; + +async function* genReplication(_, ee) { + const ne = []; + let locker = () => Promise.resolve(), unlock = () => { + locker = () => new Promise((_ => unlock = _)); + }; + unlock(); + const push = function(_) { + ne.push(_); + unlock(); + }; + _.on("complete", (_ => push([ "complete", _ ]))); + _.on("change", (_ => push([ "change", _ ]))); + _.on("active", (() => push([ "active" ]))); + _.on("denied", (_ => push([ "denied", _ ]))); + _.on("error", (_ => push([ "error", _ ]))); + _.on("paused", (_ => push([ "paused", _ ]))); + _.then((() => push([ "finally" ]))).catch((() => push([ "finally" ]))); + try { + e: for (;;) { + const _ = ne.shift(); + if (!_) { + const dx = async () => { + await locker(); + return true; + }; + for (;;) { + const timeout = async () => { + await delay(100); + return false; + }; + if (await Promise.race([ dx(), timeout() ])) continue e; + if (ee.aborted) break e; + } + } else { + yield _; + if ("finally" == _[0]) break; + } + } + } finally { + _.cancel(); + } +} + +var LiveSyncCouchDBReplicator = class extends LiveSyncAbstractReplicator { + constructor(_) { + super(_); + this.syncStatus = "NOT_CONNECTED"; + this.docArrived = 0; + this.docSent = 0; + this.lastSyncPullSeq = 0; + this.maxPullSeq = 0; + this.lastSyncPushSeq = 0; + this.maxPushSeq = 0; + this.nodeid = ""; + this.remoteLocked = false; + this.remoteCleaned = false; + this.remoteLockedAndDeviceNotAccepted = false; + this.updateInfo = () => { + this.env.replicationStat.value = { + sent: this.docSent, + arrived: this.docArrived, + maxPullSeq: this.maxPullSeq, + maxPushSeq: this.maxPushSeq, + lastSyncPullSeq: this.lastSyncPullSeq, + lastSyncPushSeq: this.lastSyncPushSeq, + syncStatus: this.syncStatus + }; + }; + this.env = _; + this.initializeDatabaseForReplication(); + this.env.getDatabase().on("close", (() => { + this.closeReplication(); + })); + } + async migrate(_, ee) { + Logger(`Database updated from ${_} to ${ee}`, LOG_LEVEL_NOTICE); + return true; + } + terminateSync() { + if (this.controller) { + this.controller.abort(); + this.controller = void 0; + } + } + async openReplication(_, ee, ne, ie) { + await this.initializeDatabaseForReplication(); + if (ee) this.openContinuousReplication(_, ne, false); else return this.openOneShotReplication(_, ne, false, "sync", ie); + } + replicationActivated(_) { + this.syncStatus = "CONNECTED"; + this.updateInfo(); + Logger("Replication activated", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "sync"); + } + async replicationChangeDetected(_, ee, ne, ie) { + try { + if ("pull" == _.direction) { + await this.env.processReplication(_.change.docs); + this.docArrived += _.change.docs.length; + } else this.docSent += _.change.docs.length; + if (ee) { + const _ = this.maxPullSeq, ee = this.maxPushSeq, re = this.lastSyncPullSeq, se = this.lastSyncPushSeq, oe = 0 == se ? "" : se >= ee ? " (LIVE)" : ` (${ee - se})`, le = 0 == re ? "" : re >= _ ? " (LIVE)" : ` (${_ - re})`; + Logger(`↑${this.docSent - ne}${oe} ↓${this.docArrived - ie}${le}`, LOG_LEVEL_NOTICE, "sync"); + } + this.updateInfo(); + } catch (_) { + Logger("Replication callback error", LOG_LEVEL_NOTICE, "sync"); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + replicationCompleted(_) { + this.syncStatus = "COMPLETED"; + this.updateInfo(); + Logger("Replication completed", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, _ ? "sync" : ""); + this.terminateSync(); + } + replicationDenied(_) { + this.syncStatus = "ERRORED"; + this.updateInfo(); + this.terminateSync(); + Logger("Replication denied", LOG_LEVEL_NOTICE, "sync"); + Logger(_, LOG_LEVEL_VERBOSE); + } + replicationErrored(_) { + this.syncStatus = "ERRORED"; + this.terminateSync(); + this.updateInfo(); + Logger("Replication error", LOG_LEVEL_NOTICE, "sync"); + Logger(_, LOG_LEVEL_VERBOSE); + } + replicationPaused() { + this.syncStatus = "PAUSED"; + this.updateInfo(); + Logger("Replication paused", LOG_LEVEL_VERBOSE, "sync"); + } + async processSync(_, ee, ne, ie, re, se, oe = true) { + const le = new AbortController; + if (this.controller) this.controller.abort(); + this.controller = le; + const ue = genReplication(_, le.signal); + try { + for await (const [_, oe] of ue) { + const le = await globalConcurrencyController.tryAcquire(1, REPLICATION_BUSY_TIMEOUT); + if (false === le) { + Logger("Replication stopped for busy.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "sync"); + return "FAILED"; + } + le(); + switch (_) { + case "change": + if ("direction" in oe) { + if ("pull" == oe.direction) this.lastSyncPullSeq = Number(`${oe.change.last_seq}`.split("-")[0]); else this.lastSyncPushSeq = Number(`${oe.change.last_seq}`.split("-")[0]); + await this.replicationChangeDetected(oe, ee, ne, ie); + } else if ("pullOnly" == re) { + this.lastSyncPullSeq = Number(`${oe.last_seq}`.split("-")[0]); + await this.replicationChangeDetected({ + direction: "pull", + change: oe + }, ee, ne, ie); + } else if ("pushOnly" == re) { + this.lastSyncPushSeq = Number(`${oe.last_seq}`.split("-")[0]); + this.updateInfo(); + await this.replicationChangeDetected({ + direction: "push", + change: oe + }, ee, ne, ie); + } + if (se) if (this.docSent - ne + (this.docArrived - ie) > 2 * this.originalSetting.batch_size) return "NEED_RESURRECT"; + break; + + case "complete": + this.replicationCompleted(ee); + return "DONE"; + + case "active": + this.replicationActivated(ee); + break; + + case "denied": + this.replicationDenied(oe); + return "FAILED"; + + case "error": + this.replicationErrored(oe); + Logger("Replication stopped.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "sync"); + if (this.env.getLastPostFailedBySize()) { + if (oe && 413 == (null == oe ? void 0 : oe.status)) { + Logger("Something went wrong during synchronisation. Please check the log!", LOG_LEVEL_NOTICE); + return "FAILED"; + } + return "NEED_RETRY"; + } else { + Logger("Replication error", LOG_LEVEL_NOTICE, "sync"); + Logger(oe); + } + return "FAILED"; + + case "paused": + this.replicationPaused(); + break; + + case "finally": + break; + + default: + Logger(`Unexpected synchronization status:${JSON.stringify(oe)}`); + } + } + if (oe) return "DONE"; else return "CANCELLED"; + } catch (_) { + Logger("Unexpected synchronization exception"); + Logger(_, LOG_LEVEL_VERBOSE); + return "FAILED"; + } finally { + this.terminateSync(); + this.controller = void 0; + } + } + async openOneShotReplication(_, ee, ne, ie, re = false) { + const se = await shareRunningResult("oneShotReplication", (async () => { + if (this.controller) { + Logger("Replication is already in progress.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "sync"); + return false; + } + const se = this.env.getDatabase(); + Logger(`OneShot Sync begin... (${ie})`); + const oe = await this.checkReplicationConnectivity(_, false, ne, ee, re); + if (false === oe) { + Logger("Could not connect to server.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "sync"); + return false; + } + this.maxPullSeq = Number(`${oe.info.update_seq}`.split("-")[0]); + this.maxPushSeq = Number(`${(await se.info()).update_seq}`.split("-")[0]); + if (ee) Logger("Looking for the point last synchronized point.", LOG_LEVEL_NOTICE, "sync"); + const {db: le, syncOptionBase: ue} = oe; + this.syncStatus = "STARTED"; + this.updateInfo(); + const de = this.docArrived, fe = this.docSent; + if (!ne) this.originalSetting = _; + this.terminateSync(); + const he = "sync" == ie ? se.sync(le, { + ...ue + }) : "pullOnly" == ie ? se.replicate.from(le, { + ...ue, + ..._.readChunksOnline ? selectorOnDemandPull : {} + }) : "pushOnly" == ie ? se.replicate.to(le, { + ...ue, + ..._.readChunksOnline ? selectorOnDemandPush : {} + }) : void 0, pe = await this.processSync(he, ee, fe, de, ie, ne, false); + if ("DONE" == pe) return true; + if ("CANCELLED" == pe) return false; + if ("FAILED" == pe) return false; + if ("NEED_RESURRECT" == pe) { + this.terminateSync(); + return async () => await this.openOneShotReplication(this.originalSetting, ee, false, ie, re); + } + if ("NEED_RETRY" == pe) { + const ne = JSON.parse(JSON.stringify(_)); + ne.batch_size = Math.ceil(ne.batch_size / 2) + 2; + ne.batches_limit = Math.ceil(ne.batches_limit / 2) + 2; + if (ne.batch_size <= 5 && ne.batches_limit <= 5) { + Logger("We can't replicate more lower value.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return false; + } else { + Logger(`Retry with lower batch size:${ne.batch_size}/${ne.batches_limit}`, ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return async () => await this.openOneShotReplication(ne, ee, true, ie, re); + } + } + return false; + })); + if ("boolean" == typeof se) return se; else return await se(); + } + replicateAllToServer(_, ee) { + return this.openOneShotReplication(_, null != ee ? ee : false, false, "pushOnly"); + } + replicateAllFromServer(_, ee) { + return this.openOneShotReplication(_, null != ee ? ee : false, false, "pullOnly"); + } + async checkReplicationConnectivity(_, ee, ne, ie, re = false) { + if ("" != _.versionUpFlash) { + Logger("Open settings and check message, please.", LOG_LEVEL_NOTICE); + return false; + } + const se = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME); + if (this.controller) { + Logger("Another replication running."); + return false; + } + const oe = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof oe) { + Logger(`Could not connect to ${se}: ${oe}`, ie ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return false; + } + if (!ne) { + if (!await checkRemoteVersion(oe.db, this.migrate.bind(this), VER)) { + Logger("Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", LOG_LEVEL_NOTICE); + return false; + } + this.remoteCleaned = false; + this.remoteLocked = false; + this.remoteLockedAndDeviceNotAccepted = false; + this.tweakSettingsMismatched = false; + this.preferredTweakValue = void 0; + const ee = await ensureDatabaseIsCompatible(oe.db, _, this.nodeid, currentVersionRange); + if ("INCOMPATIBLE" == ee) { + Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.", LOG_LEVEL_NOTICE); + return false; + } else if ("NODE_LOCKED" == ee) { + Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.", LOG_LEVEL_NOTICE); + this.remoteLockedAndDeviceNotAccepted = true; + this.remoteLocked = true; + return false; + } else if ("LOCKED" == ee) this.remoteLocked = true; else if ("NODE_CLEANED" == ee) if (re) this.remoteLocked = true; else { + Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.", LOG_LEVEL_NOTICE); + this.remoteLockedAndDeviceNotAccepted = true; + this.remoteLocked = true; + this.remoteCleaned = true; + return false; + } else if ("OK" == ee) ; else if ("MISMATCHED" == ee[0]) { + Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified.", LOG_LEVEL_NOTICE); + this.tweakSettingsMismatched = true; + this.preferredTweakValue = ee[1]; + return false; + } + } + const le = { + batches_limit: _.batches_limit, + batch_size: _.batch_size + }; + if (_.readChunksOnline) { + le.push = { + ...selectorOnDemandPush + }; + le.pull = { + ...selectorOnDemandPull + }; + } + const ue = ee ? { + live: true, + retry: true, + heartbeat: _.useTimeouts ? false : 3e4, + ...le + } : { + ...le + }; + return { + db: oe.db, + info: oe.info, + syncOptionBase: le, + syncOption: ue + }; + } + async openContinuousReplication(_, ee, ne) { + const ie = await shareRunningResult("continuousReplication", (async () => { + if (this.controller) { + Logger("Replication is already in progress.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return false; + } + const ie = this.env.getDatabase(); + Logger("Before LiveSync, start OneShot once..."); + if (await this.openOneShotReplication(_, ee, false, "pullOnly")) { + Logger("LiveSync begin..."); + const re = await this.checkReplicationConnectivity(_, true, true, ee); + if (false === re) { + Logger("Could not connect to server.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return false; + } + if (ee) Logger("Looking for the point last synchronized point.", LOG_LEVEL_NOTICE, "sync"); + const {db: se, syncOption: oe} = re; + this.syncStatus = "STARTED"; + this.maxPullSeq = Number(`${re.info.update_seq}`.split("-")[0]); + this.maxPushSeq = Number(`${(await ie.info()).update_seq}`.split("-")[0]); + this.updateInfo(); + const le = this.docArrived, ue = this.docSent; + if (!ne) this.originalSetting = _; + this.terminateSync(); + const de = ie.sync(se, { + ...oe + }), fe = "sync", he = await this.processSync(de, ee, ue, le, fe, ne); + if ("DONE" == he) return true; + if ("FAILED" == he) return false; + if ("NEED_RESURRECT" == he) { + this.terminateSync(); + return async () => await this.openContinuousReplication(this.originalSetting, ee, false); + } + if ("NEED_RETRY" == he) { + const ne = JSON.parse(JSON.stringify(_)); + ne.batch_size = Math.ceil(ne.batch_size / 2) + 2; + ne.batches_limit = Math.ceil(ne.batches_limit / 2) + 2; + if (ne.batch_size <= 5 && ne.batches_limit <= 5) { + Logger("We can't replicate more lower value.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return false; + } else { + Logger(`Retry with lower batch size:${ne.batch_size}/${ne.batches_limit}`, ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + return async () => await this.openContinuousReplication(ne, ee, true); + } + } + } + return false; + })); + if ("boolean" == typeof ie) return ie; else return await ie(); + } + closeReplication() { + if (this.controller) { + this.controller.abort(); + this.controller = void 0; + this.syncStatus = "CLOSED"; + Logger("Replication closed"); + this.updateInfo(); + } + } + async tryResetRemoteDatabase(_) { + this.closeReplication(); + const ee = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" != typeof ee) try { + await ee.db.destroy(); + Logger("Remote Database Destroyed", LOG_LEVEL_NOTICE); + await this.tryCreateRemoteDatabase(_); + } catch (_) { + Logger("Something happened on Remote Database Destroy:", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_NOTICE); + } + } + async tryCreateRemoteDatabase(_) { + this.closeReplication(); + if ("string" != typeof await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true)) Logger("Remote Database Created or Connected", LOG_LEVEL_NOTICE); + } + async markRemoteLocked(_, ee, ne) { + const ie = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), re = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof re) { + Logger(`could not connect to ${ie}:${re}`, LOG_LEVEL_NOTICE); + return; + } + if (!await checkRemoteVersion(re.db, this.migrate.bind(this), VER)) { + Logger("Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", LOG_LEVEL_NOTICE); + return; + } + const se = { + _id: MILESTONE_DOCID, + type: "milestoneinfo", + created: new Date / 1, + locked: ee, + cleaned: ne, + accepted_nodes: [ this.nodeid ], + node_chunk_info: { + [this.nodeid]: currentVersionRange + }, + tweak_values: {} + }, oe = { + ...se, + ...await resolveWithIgnoreKnownError(re.db.get(MILESTONE_DOCID), se) + }; + oe.node_chunk_info = { + ...se.node_chunk_info, + ...oe.node_chunk_info + }; + oe.accepted_nodes = [ this.nodeid ]; + oe.locked = ee; + oe.cleaned = oe.cleaned || ne; + if (ee) Logger("Lock remote database to prevent data corruption", LOG_LEVEL_NOTICE); else Logger("Unlock remote database to prevent data corruption", LOG_LEVEL_NOTICE); + await re.db.put(oe); + } + async markRemoteResolved(_) { + const ee = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof ne) { + Logger(`could not connect to ${ee}:${ne}`, LOG_LEVEL_NOTICE); + return; + } + if (!await checkRemoteVersion(ne.db, this.migrate.bind(this), VER)) { + Logger("Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", LOG_LEVEL_NOTICE); + return; + } + const ie = { + _id: MILESTONE_DOCID, + type: "milestoneinfo", + created: new Date / 1, + locked: false, + accepted_nodes: [ this.nodeid ], + node_chunk_info: { + [this.nodeid]: currentVersionRange + }, + tweak_values: {} + }, re = { + ...ie, + ...await resolveWithIgnoreKnownError(ne.db.get(MILESTONE_DOCID), ie) + }; + re.node_chunk_info = { + ...ie.node_chunk_info, + ...re.node_chunk_info + }; + re.accepted_nodes = Array.from(new Set([ ...re.accepted_nodes, this.nodeid ])); + Logger("Mark this device as 'resolved'.", LOG_LEVEL_NOTICE); + await ne.db.put(re); + } + connectRemoteCouchDBWithSetting(_, ee, ne = false, ie = false) { + if (_.encrypt && "" == _.passphrase && !_.permitEmptyPassphrase) return "Empty passphrases cannot be used without explicit permission"; else return this.env.connectRemoteCouchDB(_.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), { + username: _.couchDB_USER, + password: _.couchDB_PASSWORD + }, _.disableRequestURI || ee, _.encrypt ? _.passphrase : _.encrypt, _.useDynamicIterationCount, ne, ie, _.enableCompression); + } + async fetchRemoteChunks(_, ee) { + const ne = await this.connectRemoteCouchDBWithSetting(this.env.getSettings(), this.env.getIsMobile(), false, true); + if ("string" == typeof ne) { + Logger(`Could not connect to server.${ne} `, ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "fetch"); + return false; + } + const ie = await ne.db.allDocs({ + keys: _, + include_docs: true + }); + if (ie.rows.some((_ => "error" in _))) { + Logger("Some chunks are not exists both on remote and local database.", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "fetch"); + return false; + } + return ie.rows.map((_ => _.doc)); + } + async tryConnectRemote(_, ee = true) { + const ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof ne) { + Logger(`ERROR!: could not connect to ${_.couchDB_URI} : ${_.couchDB_DBNAME} \n(${ne})`, LOG_LEVEL_NOTICE); + return false; + } + Logger(`Connected to ${ne.info.db_name} successfully`, LOG_LEVEL_NOTICE); + return true; + } + async resetRemoteTweakSettings(_) { + const ee = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" != typeof ne) if (await checkRemoteVersion(ne.db, this.migrate.bind(this), VER)) try { + const _ = await ne.db.get(MILESTONE_DOCID); + _.tweak_values = {}; + await ne.db.put(_); + Logger("tweak values on the remote database have been cleared", LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Could not retrieve remote milestone", LOG_LEVEL_NOTICE); + throw _; + } else Logger("Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", LOG_LEVEL_NOTICE); else Logger(`could not connect to ${ee}:${ne}`, LOG_LEVEL_NOTICE); + } + async setPreferredRemoteTweakSettings(_) { + const ee = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" != typeof ne) if (await checkRemoteVersion(ne.db, this.migrate.bind(this), VER)) try { + const ee = await ne.db.get(MILESTONE_DOCID); + ee.tweak_values[DEVICE_ID_PREFERRED] = extractObject(TweakValuesTemplate, { + ..._ + }); + await ne.db.put(ee); + Logger("Preferred tweak values has been registered", LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Could not retrieve remote milestone", LOG_LEVEL_NOTICE); + throw _; + } else Logger("Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", LOG_LEVEL_NOTICE); else Logger(`could not connect to ${ee}:${ne}`, LOG_LEVEL_NOTICE); + } + async compactRemote(_) { + const ee = _.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME), ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof ne) { + Logger(`could not connect to ${ee}:${ne}`, LOG_LEVEL_NOTICE); + return false; + } + return (await ne.db.compact({ + interval: 1e3 + })).ok; + } + async getRemoteStatus(_) { + var ee; + const ne = await this.connectRemoteCouchDBWithSetting(_, this.env.getIsMobile(), true); + if ("string" == typeof ne) { + Logger(`could not connect to ${_.couchDB_URI + ("" == _.couchDB_DBNAME ? "" : "/" + _.couchDB_DBNAME)}:${ne}`, LOG_LEVEL_NOTICE); + return false; + } + const ie = await ne.db.info(); + return { + ...ie, + estimatedSize: (null == (ee = null == ie ? void 0 : ie.sizes) ? void 0 : ee.file) || 0 + }; + } +}, LANG_DE = "de", LANG_JA = "ja", LANG_RU = "ru", LANG_ZH = "zh", LANG_ZH_TW = "zh-tw", SUPPORTED_I18N_LANGS = [ LANG_DE, LANG_JA, LANG_RU, LANG_ZH, LANG_ZH_TW ], allMessages = { + "Self-hosted LiveSync has undergone a major upgrade. Please open the setting dialog, and check the information pane.": { + ja: "Self-hosted LiveSyncにメジャーバージョンアップがありました。設定を開き、Information paneを確認してください", + zh: "Self-hosted LiveSync 已经进行了重大升级。请打开设置对话框,检查信息面板。" + }, + "lang-de": { + def: "Deutsche" + }, + "lang-ja": { + def: "日本語" + }, + "lang-ru": { + def: "Русский" + }, + "lang-zh": { + def: "简体中文" + }, + "lang-zh-tw": { + def: "繁體中文" + }, + "Self-hosted LiveSync": { + zh: "自托管 LiveSync" + }, + "Remote Type": { + zh: "远程类型" + }, + "Remote server type": { + zh: "远程服务器类型" + }, + "Endpoint URL": { + zh: "终端节点网址" + }, + "Access Key": { + zh: "访问密钥ID" + }, + "Secret Key": { + zh: "访问密钥密码" + }, + Region: { + zh: "地域" + }, + "Bucket Name": { + zh: "存储桶名称" + }, + "Use Custom HTTP Handler": { + zh: "使用自定义HTTP处理程序" + }, + "If your Object Storage could not configured accepting CORS, enable this.": { + zh: "如果您的对象存储无法配置接受CORS,请启用此功能。" + }, + URI: { + zh: "URI" + }, + Username: { + zh: "用户名" + }, + username: { + zh: "用户名" + }, + Password: { + zh: "密码" + }, + password: { + zh: "密码" + }, + "Database name": { + zh: "数据库名称" + }, + "Incubate Chunks in Document": { + zh: "在文档中孵化块" + }, + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": { + zh: "如果启用,新创建的数据块将暂时保留在文档中,并在稳定后成为独立数据块。" + }, + "Maximum Incubating Chunks": { + zh: "最大孵化块数" + }, + "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": { + zh: "文档中可以孵化的数据块的最大数量。超过此数量的数据块将立即成为独立数据块。" + }, + "Maximum Incubating Chunk Size": { + zh: "最大孵化块大小" + }, + "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": { + zh: "文档中可以孵化的数据块的最大尺寸。超过此大小的数据块将立即成为独立数据块。" + }, + "Maximum Incubation Period": { + zh: "最大孵化期限" + }, + "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": { + zh: "文档中可以孵化的数据块的最大持续时间。超过此时间的数据块将成为独立数据块。" + }, + "Data Compression": { + zh: "数据压缩" + }, + "End-to-End Encryption": { + zh: "端到端加密" + }, + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommend.": { + zh: "加密远程数据库中的内容。如果您使用插件的同步功能,则建议启用此功能。" + }, + Passphrase: { + zh: "口令" + }, + "Encrypting passphrase. If you change the passphrase of an existing database, overwriting the remote database is strongly recommended.": { + zh: "加密口令。如果更改现有数据库的口令,则强烈建议覆盖远程数据库。" + }, + "Path Obfuscation": { + zh: "路径混淆" + }, + "Use dynamic iteration count": { + zh: "使用动态迭代次数" + }, + "Display Language": { + zh: "显示语言" + }, + 'Not all messages have been translated. And, please revert to "Default" when reporting errors.': { + ja: 'すべてのメッセージが翻訳されているわけではありません。また、Issue報告の際にはいったん"Default"に戻してください', + zh: '并非所有消息都已翻译。请在报告错误时恢复为"Default"' + }, + "Show status inside the editor": { + zh: "在编辑器内显示状态" + }, + "Reflected after reboot": { + zh: "重启后生效" + }, + "Show status as icons only": { + zh: "仅以图标显示状态" + }, + "Show status on the status bar": { + zh: "在状态栏上显示状态" + }, + "Reflected after reboot.": { + zh: "重启后生效" + }, + "Show only notifications": { + zh: "仅显示通知" + }, + "Prevent logging and show only notification": { + zh: "阻止记录日志并仅显示通知" + }, + "Verbose Log": { + zh: "详细日志" + }, + "Show verbose log": { + zh: "显示详细日志" + }, + "Memory cache size (by total items)": { + zh: "内存缓存大小(按总项目数)" + }, + "Memory cache size (by total characters)": { + zh: "内存缓存大小(按总字符数)" + }, + "(Mega chars)": { + zh: "(百万字符)" + }, + Filename: { + zh: "文件名" + }, + "If you set this, all settings are saved in a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": { + zh: "如果设置了此项,所有设置都将保存在一个Markdown文件中。当新设置到达时,您将收到通知。您可以根据平台设置不同的文件。" + }, + "Write credentials in the file": { + zh: "将凭据写入文件" + }, + "(Not recommended) If set, credentials will be stored in the file.": { + zh: "(不建议)如果设置,凭据将存储在文件中。" + }, + "Notify all setting files": { + zh: "通知所有设置文件" + }, + "Encrypting sensitive configuration items": { + zh: "加密敏感配置项" + }, + "Passphrase of sensitive configuration items": { + zh: "敏感配置项的口令" + }, + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": { + zh: "此口令不会复制到另一台设备。在您再次配置之前,它将设置为`Default`。" + }, + Presets: { + zh: "预设" + }, + "Apply preset configuration": { + zh: "应用预设配置" + }, + "Sync Mode": { + zh: "同步模式" + }, + "Periodic Sync interval": { + zh: "定期同步间隔" + }, + "Interval (sec)": { + zh: "间隔(秒)" + }, + "Sync on Save": { + zh: "保存时同步" + }, + "When you save a file, sync automatically": { + zh: "保存文件时,自动同步" + }, + "Sync on Editor Save": { + zh: "编辑器保存时同步" + }, + "When you save a file in the editor, sync automatically": { + zh: "在编辑器中保存文件时,自动同步" + }, + "Sync on File Open": { + zh: "打开文件时同步" + }, + "When you open a file, sync automatically": { + zh: "打开文件时,自动同步" + }, + "Sync on Start": { + zh: "启动时同步" + }, + "Start synchronization after launching Obsidian.": { + zh: "启动Obsidian后开始同步" + }, + "Sync after merging file": { + zh: "合并文件后同步" + }, + "Sync automatically after merging files": { + zh: "合并文件后自动同步" + }, + "Use the trash bin": { + zh: "使用回收站" + }, + "Do not delete files that are deleted in remote, just move to trash.": { + zh: "不删除被远程删除的文件,只是移动到回收站" + }, + "Keep empty folder": { + zh: "保留空文件夹" + }, + "Normally, a folder is deleted when it becomes empty after a synchronization. Enabling this will prevent it from getting deleted": { + zh: "通常,同步后,文件夹变为空时会被删除。启用此功能将阻止其被删除" + }, + "Always overwrite with a newer file (beta)": { + zh: "始终使用更新的文件覆盖(测试版)" + }, + "(Def off) Resolve conflicts by newer files automatically.": { + zh: "(默认关闭)自动使用更新的文件解决冲突" + }, + "Postpone resolution of inactive files": { + zh: "推迟解决不活动文件" + }, + "Postpone manual resolution of inactive files": { + zh: "推迟手动解决不活动文件" + }, + "Always resolve conflicts manually": { + zh: "始终手动解决冲突" + }, + "If this switch is turned on, a merge dialog will be displayed, even if the sensible-merge is possible automatically. (Turn on to previous behavior)": { + zh: "如果打开此开关,即使可以自动进行合并,也会显示合并对话框。(打开可恢复到以前的行为)" + }, + "Always reflect synchronized changes even if the note has a conflict": { + zh: "即使笔记存在冲突,也始终反映同步的更改" + }, + "Turn on to previous behavior": { + zh: "打开可恢复到以前的行为" + }, + "Scan for hidden files before replication": { + zh: "复制前扫描隐藏文件" + }, + "Scan hidden files periodically": { + zh: "定期扫描隐藏文件" + }, + "Seconds, 0 to disable": { + zh: "秒,0为禁用" + }, + "Batch database update": { + zh: "批量数据库更新" + }, + "Reducing the frequency with which on-disk changes are reflected into the DB": { + zh: "降低将磁盘上的更改反映到数据库中的频率" + }, + "Enhance chunk size": { + zh: "增强块大小" + }, + "Fetch chunks on demand": { + zh: "按需获取块" + }, + "(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": { + zh: "(例如,在线读取块)如果启用此选项,LiveSync将直接在线读取块,而不是在本地复制块。建议增加自定义块大小" + }, + "Maximum file size": { + zh: "最大文件大小" + }, + "(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": { + zh: "(MB)如果设置了此项,大于此大小的本地和远程文件的更改将被跳过。如果文件再次变小,将使用更新的文件" + }, + "(Beta) Use ignore files": { + zh: "(测试版)使用忽略文件" + }, + "If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": { + zh: "如果设置了此项,与忽略文件匹配的本地文件的更改将被跳过。远程更改使用本地忽略文件确定" + }, + "Ignore files": { + zh: "忽略文件" + }, + "We can use multiple ignore files, e.g.) `.gitignore, .dockerignore`": { + zh: "我们可以使用多个忽略文件,例如`.gitignore, .dockerignore`" + }, + "Batch size": { + zh: "批量大小" + }, + "Number of change feed items to process at a time. Defaults to 50. Minimum is 2.": { + zh: "一次处理的更改源项目数。默认为50。最小为2" + }, + "Batch limit": { + zh: "批量限制" + }, + "Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": { + zh: "一次处理的批量数。默认为40。最小为2。这与批量大小一起控制一次在内存中保留多少文档" + }, + "Use timeouts instead of heartbeats": { + zh: "使用超时而不是心跳" + }, + "If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": { + zh: "如果启用此选项,PouchDB将保持连接打开60秒,如果在此时间内没有更改到达,则关闭并重新打开套接字,而不是无限期保持打开。当代理限制请求持续时间时有用,但可能会增加资源使用" + }, + "Batch size of on-demand fetching": { + zh: "按需获取的批量大小" + }, + "The delay for consecutive on-demand fetches": { + zh: "连续按需获取的延迟" + }, + "Suspend file watching": { + zh: "暂停文件监视" + }, + "Stop watching for file change.": { + zh: "停止监视文件更改" + }, + "Suspend database reflecting": { + zh: "暂停数据库反映" + }, + "Stop reflecting database changes to storage files.": { + zh: "停止将数据库更改反映到存储文件" + }, + "Write logs into the file": { + zh: "将日志写入文件" + }, + "Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": { + zh: "警告!这将严重影响性能。并且日志不会以默认名称同步。请小心处理日志;它们通常包含您的敏感信息" + }, + "Do not keep metadata of deleted files.": { + zh: "不保留已删除文件的元数据" + }, + "Delete old metadata of deleted files on start-up": { + zh: "启动时删除已删除文件的旧元数据" + }, + "(Days passed, 0 to disable automatic-deletion)": { + zh: "(天数,0为禁用自动删除)" + }, + "Use an old adapter for compatibility": { + zh: "为了兼容性使用旧适配器" + }, + "Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": { + zh: "在v0.17.16之前,我们使用了旧适配器作为本地数据库。现在更倾向于使用新适配器。但是,它需要重建本地数据库。请在有足够时间时禁用此切换。如果保留启用状态,且在从远程数据库获取时,将要求您禁用此切换" + }, + "Scan changes on customization sync": { + zh: "在自定义同步时扫描更改" + }, + "Do not use internal API": { + zh: "不使用内部API" + }, + "Database suffix": { + zh: "数据库后缀" + }, + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": { + zh: "LiveSync无法处理具有相同名称但没有不同前缀的多个仓库。这应该自动配置" + }, + "The Hash algorithm for chunk IDs": { + zh: "块ID的哈希算法" + }, + "Fetch database with previous behaviour": { + zh: "用以前的行为获取数据库" + }, + "Do not check configuration mismatch before replication": { + zh: "在复制前不检查配置不匹配" + }, + "Device name": { + zh: "设备名称" + }, + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": { + zh: "所有同步设备之间的唯一名称。要编辑此设置,请首先禁用自定义同步" + }, + "Enable customization sync": { + zh: "启用自定义同步" + }, + "Scan customization automatically": { + zh: "自动扫描自定义设置" + }, + "Scan customization before replicating.": { + zh: "在复制前扫描自定义设置" + }, + "Scan customization periodically": { + zh: "定期扫描自定义设置" + }, + "Scan customization every 1 minute.": { + zh: "每1分钟扫描自定义设置" + }, + "Notify customized": { + zh: "通知自定义设置" + }, + "Notify when other device has newly customized.": { + zh: "当其他设备有新的自定义设置时通知" + }, + "Waiting for ready...": { + zh: "等待就绪..." + } +}, currentLang = "", missingTranslations = [], __onMissingTranslations = _ => console.warn(_); + +function __onMissingTranslation(_) { + __onMissingTranslations = _; +} + +var msgCache = new Map; + +function setLang(_) { + if (_ != currentLang) { + currentLang = _; + msgCache.clear(); + } +} + +function _getMessage(_, ee) { + var ne, ie, re; + if ("" == _.trim()) return _; + const se = null != (ne = allMessages[_]) ? ne : void 0; + if ("" == ee) ee = "def"; + let oe = null != (ie = null == se ? void 0 : se[ee]) ? ie : void 0; + if (!oe) oe = null != (re = null == se ? void 0 : se.def) ? re : void 0; + if (!oe) { + if (!missingTranslations.contains(_)) { + __onMissingTranslations(_); + missingTranslations.push(_); + } + return _; + } + return oe; +} + +function getMessage(_) { + if (msgCache.has(_)) return msgCache.get(_); + const ee = _getMessage(_, currentLang); + msgCache.set(_, ee); + return ee; +} + +function $t(_, ee) { + if (void 0 !== ee) return _getMessage(_, ee); else return getMessage(_); +} + +function $f(_, ...ee) { + let ne = ""; + for (let ie = 0; ie < ee.length; ie++) ne += getMessage(_[ie]) + ee[ie]; + ne += getMessage(_[_.length - 1]); + return ne; +} + +var _a3, OnDialogSettingsDefault = { + configPassphrase: "", + preset: "", + syncMode: "ONEVENTS", + dummy: 0, + deviceAndVaultName: "" +}, AllSettingDefault = { + ...DEFAULT_SETTINGS, + ...OnDialogSettingsDefault +}, SettingInformation = { + liveSync: { + name: "Sync Mode" + }, + couchDB_URI: { + name: "URI", + placeHolder: "https://........" + }, + couchDB_USER: { + name: "Username", + desc: "username" + }, + couchDB_PASSWORD: { + name: "Password", + desc: "password" + }, + couchDB_DBNAME: { + name: "Database name" + }, + passphrase: { + name: "Passphrase", + desc: "Encrypting passphrase. If you change the passphrase of an existing database, overwriting the remote database is strongly recommended." + }, + showStatusOnEditor: { + name: "Show status inside the editor", + desc: "Reflected after reboot" + }, + showOnlyIconsOnEditor: { + name: "Show status as icons only" + }, + showStatusOnStatusbar: { + name: "Show status on the status bar", + desc: "Reflected after reboot." + }, + lessInformationInLog: { + name: "Show only notifications", + desc: "Prevent logging and show only notification. Please disable when you report the logs" + }, + showVerboseLog: { + name: "Verbose Log", + desc: "Show verbose log. Please enable when you report the logs" + }, + hashCacheMaxCount: { + name: "Memory cache size (by total items)" + }, + hashCacheMaxAmount: { + name: "Memory cache size (by total characters)", + desc: "(Mega chars)" + }, + writeCredentialsForSettingSync: { + name: "Write credentials in the file", + desc: "(Not recommended) If set, credentials will be stored in the file." + }, + notifyAllSettingSyncFile: { + name: "Notify all setting files" + }, + configPassphrase: { + name: "Passphrase of sensitive configuration items", + desc: "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again." + }, + configPassphraseStore: { + name: "Encrypting sensitive configuration items" + }, + syncOnSave: { + name: "Sync on Save", + desc: "When you save a file, sync automatically" + }, + syncOnEditorSave: { + name: "Sync on Editor Save", + desc: "When you save a file in the editor, sync automatically" + }, + syncOnFileOpen: { + name: "Sync on File Open", + desc: "When you open a file, sync automatically" + }, + syncOnStart: { + name: "Sync on Start", + desc: "Start synchronization after launching Obsidian." + }, + syncAfterMerge: { + name: "Sync after merging file", + desc: "Sync automatically after merging files" + }, + trashInsteadDelete: { + name: "Use the trash bin", + desc: "Do not delete files that are deleted in remote, just move to trash." + }, + doNotDeleteFolder: { + name: "Keep empty folder", + desc: "Normally, a folder is deleted when it becomes empty after a synchronization. Enabling this will prevent it from getting deleted" + }, + resolveConflictsByNewerFile: { + name: "Always overwrite with a newer file (beta)", + desc: "(Def off) Resolve conflicts by newer files automatically." + }, + checkConflictOnlyOnOpen: { + name: "Postpone resolution of inactive files" + }, + showMergeDialogOnlyOnActive: { + name: "Postpone manual resolution of inactive files" + }, + disableMarkdownAutoMerge: { + name: "Always resolve conflicts manually", + desc: "If this switch is turned on, a merge dialog will be displayed, even if the sensible-merge is possible automatically. (Turn on to previous behavior)" + }, + writeDocumentsIfConflicted: { + name: "Always reflect synchronized changes even if the note has a conflict", + desc: "Turn on to previous behavior" + }, + syncInternalFilesInterval: { + name: "Scan hidden files periodically", + desc: "Seconds, 0 to disable" + }, + batchSave: { + name: "Batch database update", + desc: "Reducing the frequency with which on-disk changes are reflected into the DB" + }, + readChunksOnline: { + name: "Fetch chunks on demand", + desc: "(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended." + }, + syncMaxSizeInMB: { + name: "Maximum file size", + desc: "(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used." + }, + useIgnoreFiles: { + name: "(Beta) Use ignore files", + desc: "If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files." + }, + ignoreFiles: { + name: "Ignore files", + desc: "We can use multiple ignore files, e.g.) `.gitignore, .dockerignore`" + }, + batch_size: { + name: "Batch size", + desc: "Number of change feed items to process at a time. Defaults to 50. Minimum is 2." + }, + batches_limit: { + name: "Batch limit", + desc: "Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time." + }, + useTimeouts: { + name: "Use timeouts instead of heartbeats", + desc: "If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage." + }, + concurrencyOfReadChunksOnline: { + name: "Batch size of on-demand fetching" + }, + minimumIntervalOfReadChunksOnline: { + name: "The delay for consecutive on-demand fetches" + }, + suspendFileWatching: { + name: "Suspend file watching", + desc: "Stop watching for file change." + }, + suspendParseReplicationResult: { + name: "Suspend database reflecting", + desc: "Stop reflecting database changes to storage files." + }, + writeLogToTheFile: { + name: "Write logs into the file", + desc: "Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information." + }, + deleteMetadataOfDeletedFiles: { + name: "Do not keep metadata of deleted files." + }, + useIndexedDBAdapter: { + name: "Use an old adapter for compatibility", + desc: "Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this." + }, + watchInternalFileChanges: { + name: "Scan changes on customization sync", + desc: "Do not use internal API" + }, + doNotSuspendOnFetching: { + name: "Fetch database with previous behaviour" + }, + disableCheckingConfigMismatch: { + name: "Do not check configuration mismatch before replication" + }, + usePluginSync: { + name: "Enable customization sync" + }, + autoSweepPlugins: { + name: "Scan customization automatically", + desc: "Scan customization before replicating." + }, + autoSweepPluginsPeriodic: { + name: "Scan customization periodically", + desc: "Scan customization every 1 minute." + }, + notifyPluginOrSettingUpdated: { + name: "Notify customized", + desc: "Notify when other device has newly customized." + }, + remoteType: { + name: "Remote Type", + desc: "Remote server type" + }, + endpoint: { + name: "Endpoint URL", + placeHolder: "https://........" + }, + accessKey: { + name: "Access Key" + }, + secretKey: { + name: "Secret Key" + }, + region: { + name: "Region", + placeHolder: "auto" + }, + bucket: { + name: "Bucket Name" + }, + useCustomRequestHandler: { + name: "Use Custom HTTP Handler", + desc: "If your Object Storage could not configured accepting CORS, enable this." + }, + maxChunksInEden: { + name: "Maximum Incubating Chunks", + desc: "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks." + }, + maxTotalLengthInEden: { + name: "Maximum Incubating Chunk Size", + desc: "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks." + }, + maxAgeInEden: { + name: "Maximum Incubation Period", + desc: "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks." + }, + settingSyncFile: { + name: "Filename", + desc: "If you set this, all settings are saved in a markdown file. You will be notified when new settings arrive. You can set different files by the platform." + }, + preset: { + name: "Presets", + desc: "Apply preset configuration" + }, + syncMode: { + name: "Sync Mode" + }, + periodicReplicationInterval: { + name: "Periodic Sync interval", + desc: "Interval (sec)" + }, + syncInternalFilesBeforeReplication: { + name: "Scan for hidden files before replication" + }, + automaticallyDeleteMetadataOfDeletedFiles: { + name: "Delete old metadata of deleted files on start-up", + desc: "(Days passed, 0 to disable automatic-deletion)" + }, + additionalSuffixOfDatabaseName: { + name: "Database suffix", + desc: "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured." + }, + hashAlg: { + name: (null == (_a3 = configurationNames["hashAlg"]) ? void 0 : _a3.name) || "", + desc: "xxhash64 is the current default." + }, + deviceAndVaultName: { + name: "Device name", + desc: "Unique name between all synchronized devices. To edit this setting, please disable customization sync once." + }, + displayLanguage: { + name: "Display Language", + desc: 'Not all messages have been translated. And, please revert to "Default" when reporting errors.' + }, + enableChunkSplitterV2: { + name: "Use splitting-limit-capped chunk splitter", + desc: "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker." + }, + disableWorkerForGeneratingChunks: { + name: "Do not split chunks in the background", + desc: "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour)." + }, + processSmallFilesInUIThread: { + name: "Process small files in the foreground", + desc: "If enabled, the file under 1kb will be processed in the UI thread." + }, + batchSaveMinimumDelay: { + name: "Minimum delay for batch database updating", + desc: "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving." + }, + batchSaveMaximumDelay: { + name: "Maximum delay for batch database updating", + desc: "Saving will be performed forcefully after this number of seconds." + }, + notifyThresholdOfRemoteStorageSize: { + name: "Notify when the estimated remote storage size exceeds on start up", + desc: "MB (0 to disable)." + }, + usePluginSyncV2: { + name: "Enable per-file-saved customization sync", + desc: "If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions." + } +}; + +function translateInfo(_) { + if (!_) return false; + const ee = { + ..._ + }; + ee.name = $t(ee.name); + if (ee.desc) ee.desc = $t(ee.desc); + return ee; +} + +function _getConfig(_) { + if (_ in configurationNames) return configurationNames[_]; + if (_ in SettingInformation) return SettingInformation[_]; else return false; +} + +function getConfig(_) { + return translateInfo(_getConfig(_)); +} + +function getConfName(_) { + const ee = getConfig(_); + if (!ee) return `${_} (No info)`; else return ee.name; +} + +function visibleOnly(_) { + return () => ({ + visibility: _() + }); +} + +function enableOnly(_) { + return () => ({ + disabled: !_() + }); +} + +function wrapMemo(_) { + let ee; + return ne => { + if (ee !== ne) { + _(ne); + ee = ne; + } + }; +} + +var Setting2 = class _Setting extends import_obsidian.Setting { + constructor(_) { + super(_); + this.watchDirtyKeys = []; + this.holdValue = false; + this.descBuf = ""; + this.nameBuf = ""; + this.placeHolderBuf = ""; + this.hasPassword = false; + this.updateHandlers = new Set; + this.prevStatus = {}; + _Setting.env.settingComponents.push(this); + } + setDesc(_) { + this.descBuf = _; + super.setDesc(_); + return this; + } + setName(_) { + this.nameBuf = _; + super.setName(_); + return this; + } + setAuto(_, ee) { + this.autoWireSetting(_, ee); + return this; + } + autoWireSetting(_, ee) { + const ne = getConfig(_); + if (!ne) return; + const ie = `${ne.name}${statusDisplay(ne.status)}`; + this.setName(ie); + if (ne.desc) this.setDesc(ne.desc); + this.holdValue = (null == ee ? void 0 : ee.holdValue) || this.holdValue; + this.selfKey = _; + if (null == ee ? void 0 : ee.onUpdate) this.addOnUpdate(ee.onUpdate); + const re = this._getComputedStatus(); + if (false === re.visibility) this.settingEl.toggleClass("sls-setting-hidden", !re.visibility); + return ne; + } + autoWireComponent(_, ee, ne) { + this.placeHolderBuf = (null == ee ? void 0 : ee.placeHolder) || (null == ne ? void 0 : ne.placeHolder) || ""; + if (this.placeHolderBuf && _ instanceof import_obsidian6.TextComponent) _.setPlaceholder(this.placeHolderBuf); + if (null == ne ? void 0 : ne.onUpdate) this.addOnUpdate(ne.onUpdate); + } + async commitValue(_) { + const ee = this.selfKey; + if (void 0 !== ee) if (_ != _Setting.env.editingSettings[ee]) { + _Setting.env.editingSettings[ee] = _; + if (!this.holdValue) await _Setting.env.saveSettings([ ee ]); + } + _Setting.env.requestUpdate(); + } + autoWireText(_, ee) { + const ne = this.autoWireSetting(_, ee); + this.addText((ie => { + this.autoWiredComponent = ie; + const re = wrapMemo((_ => ie.setValue(_))); + this.invalidateValue = () => re(`${_Setting.env.editingSettings[_]}`); + this.invalidateValue(); + ie.onChange((async _ => { + await this.commitValue(_); + })); + if (null == ee ? void 0 : ee.isPassword) { + ie.inputEl.setAttribute("type", "password"); + this.hasPassword = true; + } + this.autoWireComponent(this.autoWiredComponent, ne, ee); + })); + return this; + } + autoWireTextArea(_, ee) { + const ne = this.autoWireSetting(_, ee); + this.addTextArea((ie => { + this.autoWiredComponent = ie; + const re = wrapMemo((_ => ie.setValue(_))); + this.invalidateValue = () => re(`${_Setting.env.editingSettings[_]}`); + this.invalidateValue(); + ie.onChange((async _ => { + await this.commitValue(_); + })); + if (null == ee ? void 0 : ee.isPassword) { + ie.inputEl.setAttribute("type", "password"); + this.hasPassword = true; + } + this.autoWireComponent(this.autoWiredComponent, ne, ee); + })); + return this; + } + autoWireNumeric(_, ee) { + const ne = this.autoWireSetting(_, ee); + this.addText((ie => { + this.autoWiredComponent = ie; + if (ee.clampMin) ie.inputEl.setAttribute("min", `${ee.clampMin}`); + if (ee.clampMax) ie.inputEl.setAttribute("max", `${ee.clampMax}`); + let re = false; + const se = wrapMemo((_ => ie.setValue(_))); + this.invalidateValue = () => { + if (!re) se(`${_Setting.env.editingSettings[_]}`); + }; + this.invalidateValue(); + ie.onChange((async _ => { + const ne = Number(_); + let se = false; + if (isNaN(ne)) se = true; + if (ee.clampMax && ee.clampMax < ne) se = true; + if (ee.clampMin && ee.clampMin > ne) if (ee.acceptZero && 0 == ne) ; else se = true; + if (!se) { + re = false; + this.setTooltip(""); + ie.inputEl.toggleClass("sls-item-invalid-value", false); + await this.commitValue(ne); + } else { + this.setTooltip(`The value should ${ee.clampMin || "~"} < value < ${ee.clampMax || "~"}`); + ie.inputEl.toggleClass("sls-item-invalid-value", true); + re = true; + return false; + } + })); + ie.inputEl.setAttr("type", "number"); + this.autoWireComponent(this.autoWiredComponent, ne, ee); + })); + return this; + } + autoWireToggle(_, ee) { + const ne = this.autoWireSetting(_, ee); + this.addToggle((ie => { + this.autoWiredComponent = ie; + const re = wrapMemo((_ => ie.setValue((null == ee ? void 0 : ee.invert) ? !_ : _))); + this.invalidateValue = () => { + var ee; + return re(null != (ee = _Setting.env.editingSettings[_]) ? ee : false); + }; + this.invalidateValue(); + ie.onChange((async _ => { + await this.commitValue((null == ee ? void 0 : ee.invert) ? !_ : _); + })); + this.autoWireComponent(this.autoWiredComponent, ne, ee); + })); + return this; + } + autoWireDropDown(_, ee) { + const ne = this.autoWireSetting(_, ee); + this.addDropdown((ie => { + this.autoWiredComponent = ie; + const re = wrapMemo((_ => { + ie.setValue(_); + })); + ie.addOptions(ee.options); + this.invalidateValue = () => re(_Setting.env.editingSettings[_] || ""); + this.invalidateValue(); + ie.onChange((async _ => { + await this.commitValue(_); + })); + this.autoWireComponent(this.autoWiredComponent, ne, ee); + })); + return this; + } + addApplyButton(_) { + this.addButton((ee => { + this.applyButtonComponent = ee; + this.watchDirtyKeys = unique([ ..._, ...this.watchDirtyKeys ]); + ee.setButtonText("Apply"); + ee.onClick((async () => { + await _Setting.env.saveSettings(_); + _Setting.env.reloadAllSettings(); + })); + _Setting.env.requestUpdate(); + })); + return this; + } + addOnUpdate(_) { + this.updateHandlers.add(_); + return this; + } + _getComputedStatus() { + let _ = {}; + for (const ee of this.updateHandlers) _ = { + ..._, + ...ee() + }; + return _; + } + _applyOnUpdateHandlers() { + if (this.updateHandlers.size > 0) { + const _ = this._getComputedStatus(), ee = Object.keys(_); + for (const ne of ee) if (!(ne in this.prevStatus) || this.prevStatus[ne] != _[ne]) switch (ne) { + case "visibility": + this.settingEl.toggleClass("sls-setting-hidden", !(_[ne] || false)); + this.prevStatus[ne] = _[ne]; + break; + + case "classes": + break; + + case "disabled": + this.setDisabled(_[ne] || false); + this.settingEl.toggleClass("sls-setting-disabled", _[ne] || false); + this.prevStatus[ne] = _[ne]; + break; + + case "isCta": + { + const ee = this.autoWiredComponent; + if (ee instanceof import_obsidian6.ButtonComponent) if (_[ne]) ee.setCta(); else ee.removeCta(); + this.prevStatus[ne] = _[ne]; + } + break; + + case "isWarning": + { + const ee = this.autoWiredComponent; + if (ee instanceof import_obsidian6.ButtonComponent) if (_[ne]) ee.setWarning(); + this.prevStatus[ne] = _[ne]; + } + break; + } + } + } + _onUpdate() { + if (this.applyButtonComponent) { + const _ = _Setting.env.isSomeDirty(this.watchDirtyKeys); + this.applyButtonComponent.setDisabled(!_); + if (_) this.applyButtonComponent.setCta(); else this.applyButtonComponent.removeCta(); + } + if (this.selfKey && !_Setting.env.isDirty(this.selfKey) && this.invalidateValue) this.invalidateValue(); + if (this.holdValue && this.selfKey) { + const _ = _Setting.env.isDirty(this.selfKey), ee = _ ? `Original: ${_Setting.env.initialSettings[this.selfKey]}` : ""; + this.controlEl.toggleClass("sls-item-dirty", _); + if (!this.hasPassword) { + this.nameEl.toggleClass("sls-item-dirty-help", _); + this.setTooltip(ee, { + delay: 10, + placement: "right" + }); + } + } + this._applyOnUpdateHandlers(); + } +}, ObsidianLiveSyncSettingTab = class extends import_obsidian.PluginSettingTab { + constructor(_, ee) { + super(_, ee); + this.selectedScreen = ""; + this.settingComponents = []; + this.controlledElementFunc = []; + this.onSavedHandlers = []; + this.isShown = false; + this.plugin = ee; + Setting2.env = this; + } + get editingSettings() { + if (!this._editingSettings) this.reloadAllSettings(); + return this._editingSettings; + } + set editingSettings(_) { + if (!this._editingSettings) this.reloadAllSettings(); + this._editingSettings = _; + } + applySetting(_) { + for (const ee of _) if (this.isDirty(ee)) if (!(ee in OnDialogSettingsDefault)) { + this.plugin.settings[ee] = this.editingSettings[ee]; + this.initialSettings[ee] = this.plugin.settings[ee]; + } + _.forEach((_ => this.refreshSetting(_))); + } + applyAllSettings() { + var _; + const ee = Object.keys(null != (_ = this.editingSettings) ? _ : {}).filter((_ => this.isDirty(_))); + this.applySetting(ee); + this.reloadAllSettings(); + } + async saveLocalSetting(_) { + var ee, ne, ie; + if ("configPassphrase" == _) { + localStorage.setItem("ls-setting-passphrase", null != (ne = null == (ee = this.editingSettings) ? void 0 : ee[_]) ? ne : ""); + return await Promise.resolve(); + } + if ("deviceAndVaultName" == _) { + this.plugin.deviceAndVaultName = null == (ie = this.editingSettings) ? void 0 : ie[_]; + this.plugin.saveDeviceAndVaultName(); + return await Promise.resolve(); + } + } + async saveSettings(_) { + let ee = false; + const ne = []; + for (const ie of _) if (this.isDirty(ie)) { + ne.push(ie); + if (!(ie in OnDialogSettingsDefault)) { + this.plugin.settings[ie] = this.editingSettings[ie]; + this.initialSettings[ie] = this.plugin.settings[ie]; + ee = true; + } else { + await this.saveLocalSetting(ie); + this.initialSettings[ie] = this.editingSettings[ie]; + } + } + if (ee) await this.plugin.saveSettings(); + const ie = this.onSavedHandlers.filter((_ => -1 !== ne.indexOf(_.key))).map((_ => _.handler(this.editingSettings[_.key]))); + await Promise.all(ie); + _.forEach((_ => this.refreshSetting(_))); + } + async saveAllDirtySettings() { + var _; + const ee = Object.keys(null != (_ = this.editingSettings) ? _ : {}).filter((_ => this.isDirty(_))); + await this.saveSettings(ee); + this.reloadAllSettings(); + } + requestUpdate() { + scheduleTask("update-setting", 10, (() => { + for (const _ of this.settingComponents) _._onUpdate(); + for (const _ of this.controlledElementFunc) _(); + })); + } + reloadAllLocalSettings() { + const _ = { + ...OnDialogSettingsDefault + }; + _.configPassphrase = localStorage.getItem("ls-setting-passphrase") || ""; + _.preset = ""; + _.deviceAndVaultName = this.plugin.deviceAndVaultName; + return _; + } + computeAllLocalSettings() { + var _, ee; + return { + syncMode: (null == (_ = this.editingSettings) ? void 0 : _.liveSync) ? "LIVESYNC" : (null == (ee = this.editingSettings) ? void 0 : ee.periodicReplication) ? "PERIODIC" : "ONEVENTS" + }; + } + reloadAllSettings(_ = false) { + const ee = this.reloadAllLocalSettings(); + this._editingSettings = { + ...this.plugin.settings, + ...ee + }; + this._editingSettings = { + ...this.editingSettings, + ...this.computeAllLocalSettings() + }; + this.initialSettings = { + ...this.editingSettings + }; + if (!_) this.requestUpdate(); + } + refreshSetting(_) { + const ee = this.reloadAllLocalSettings(); + if (_ in this.plugin.settings) if (_ in ee) { + this.initialSettings[_] = ee[_]; + this.editingSettings[_] = ee[_]; + } else { + this.initialSettings[_] = this.plugin.settings[_]; + this.editingSettings[_] = this.initialSettings[_]; + } + this.editingSettings = { + ...this.editingSettings, + ...this.computeAllLocalSettings() + }; + this.requestUpdate(); + } + isDirty(_) { + var ee; + return isObjectDifferent(this.editingSettings[_], null == (ee = this.initialSettings) ? void 0 : ee[_]); + } + isSomeDirty(_) { + return _.some((_ => this.isDirty(_))); + } + isConfiguredAs(_, ee) { + if (!this.editingSettings) return false; else return this.editingSettings[_] == ee; + } + async testConnection(_ = {}) { + const ee = { + ...this.editingSettings, + ..._ + }, ne = this.plugin.getNewReplicator(ee); + await ne.tryConnectRemote(ee); + const ie = await ne.getRemoteStatus(ee); + if (ie) if (ie.estimatedSize) Logger(`Estimated size: ${sizeToHumanReadable2(ie.estimatedSize)}`, LOG_LEVEL_NOTICE); + } + closeSetting() { + this.plugin.app.setting.close(); + } + handleElement(_, ee) { + const ne = ((_, ee) => { + const ne = {}; + return () => { + const ie = ee(), re = Object.keys(ie); + for (const ee of re) if (ne[ee] !== ie[ee]) { + if ("visibility" == ee) _.toggleClass("sls-setting-hidden", !(ie[ee] || false)); + ne[ee] = ie[ee]; + } + }; + })(_, ee); + this.controlledElementFunc.push(ne); + ne(); + } + createEl(_, ee, ne, ie, re) { + const se = _.createEl(ee, ne, ie); + if (re) this.handleElement(se, re); + return se; + } + addOnSaved(_, ee) { + this.onSavedHandlers.push({ + key: _, + handler: ee + }); + } + resetEditingSettings() { + this._editingSettings = void 0; + this.initialSettings = void 0; + } + hide() { + this.isShown = false; + } + requestReload() { + var _; + if (this.isShown) { + const ee = this.plugin.settings, ne = Object.keys(ee); + let ie = false; + for (const re of ne) if ("deviceAndVaultName" !== re) if (isObjectDifferent(ee[re], null == (_ = this.initialSettings) ? void 0 : _[re])) if (this.isDirty(re)) this.plugin.askInPopup(`config-reloaded-${re}`, `The setting "${getConfName(re)}" being in editing has been changed from somewhere. We can discard modification and reload by clicking {HERE}. Click elsewhere to ignore changes`, (_ => { + _.text = "HERE"; + _.addEventListener("click", (() => { + this.refreshSetting(re); + this.display(); + })); + })); else { + this.refreshSetting(re); + ie = true; + } + if (ie) this.display(); else this.requestUpdate(); + } else this.reloadAllSettings(true); + } + display() { + var _, ee, ne, ie, re, se; + const {containerEl: oe} = this; + this.settingComponents.length = 0; + this.controlledElementFunc.length = 0; + this.onSavedHandlers.length = 0; + if (null == this._editingSettings || null == this.initialSettings) this.reloadAllSettings(); + if (void 0 === this.editingSettings || null == this.initialSettings) return; + this.isShown = true; + oe.empty(); + this.createEl(oe, "h2", { + text: "Settings for Self-hosted LiveSync." + }); + oe.addClass("sls-setting"); + oe.removeClass("isWizard"); + const le = oe.createDiv(""), ue = {}, addScreenElement = (_, ee) => { + if (!(_ in ue)) ue[_] = []; + ue[_].push(ee); + }; + le.addClass("sls-setting-menu"); + le.innerHTML = "\n\n\n\n\n\n\n\n\n "; + const de = le.querySelectorAll(".sls-setting-label"), changeDisplay = _ => { + for (const ee in ue) if (ee == _) ue[ee].forEach((_ => _.removeClass("setting-collapsed"))); else ue[ee].forEach((_ => _.addClass("setting-collapsed"))); + le.querySelectorAll(".sls-setting-label").forEach((_ => { + _.removeClass("selected"); + _.querySelector("input[type=radio]").checked = false; + })); + le.querySelectorAll(`.sls-setting-label.c-${_}`).forEach((_ => { + _.addClass("selected"); + _.querySelector("input[type=radio]").checked = true; + })); + this.selectedScreen = _; + }; + de.forEach((_ => { + const ee = _.querySelector(".sls-setting-tab"); + if (ee) ee.addEventListener("change", (ee => { + de.forEach((_ => _.removeClass("selected"))); + changeDisplay(ee.currentTarget.value); + _.addClass("selected"); + })); + })); + const fe = oe.createDiv(), he = this.createEl(fe, "h3", { + text: "Updates" + }), pe = this.createEl(fe, "div", { + text: "" + }), ge = "0.23.20", me = ~~(versionNumberString2Number(ge) / 1e3), ye = createSpan(); + ye.addClass("sls-header-button"); + ye.innerHTML = ""; + if (me > ((null == (_ = this.editingSettings) ? void 0 : _.lastReadUpdates) || 0)) { + const _ = he.appendChild(ye); + null == (ee = _.querySelector("button")) || ee.addEventListener("click", (async () => { + this.editingSettings.lastReadUpdates = me; + await this.saveAllDirtySettings(); + _.remove(); + })); + } + import_obsidian.MarkdownRenderer.render(this.plugin.app, "### 0.23.0\nIncredibly new features!\n\nNow, we can use object storage (MinIO, S3, R2 or anything you like) for synchronising! Moreover, despite that, we can use all the features as if we were using CouchDB.\nNote: As this is a pretty experimental feature, hence we have some limitations.\n- This is built on the append-only architecture. It will not shrink used storage if we do not perform a rebuild.\n- A bit fragile. However, our version x.yy.0 is always so.\n- When the first synchronisation, the entire history to date is transferred. For this reason, it is preferable to do this under the WiFi network.\n- Do not worry, from the second synchronisation, we always transfer only differences.\n\nI hope this feature empowers users to maintain independence and self-host their data, offering an alternative for those who prefer to manage their own storage solutions and avoid being stuck on the right side of a sudden change in business model.\n\nOf course, I use Self-hosted MinIO for testing and recommend this. It is for the same reason as using CouchDB. -- open, controllable, auditable and indeed already audited by numerous eyes.\n\nLet me write one more acknowledgement.\n\nI have a lot of respect for that plugin, even though it is sometimes treated as if it is a competitor, remotely-save. I think it is a great architecture that embodies a different approach to my approach of recreating history. This time, with all due respect, I have used some of its code as a reference.\nHooray for open source, and generous licences, and the sharing of knowledge by experts.\n\n#### Version history\n- 0.23.20:\n - Fixed:\n - Customisation Sync now checks the difference while storing or applying the configuration.\n - No longer storing the same configuration multiple times.\n - Time difference in the dialogue has been fixed.\n - Remote Storage Limit Notification dialogue has been fixed, now the chosen value is saved.\n - Improved:\n - The Enlarging button on the enlarging threshold dialogue now displays the new value.\n- 0.23.19:\n - Not released.\n- 0.23.18:\n - New feature:\n - Per-file-saved customization sync has been shipped.\n - We can synchronise plug-igs etc., more smoothly.\n - Default: disabled. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost compatibility with old versions.\n - Customisation sync has got beta3.\n - We can set `Flag` to each item to select the newest, automatically.\n - This configuration is per device.\n - Improved:\n - Start-up speed has been improved.\n - Fixed:\n - On the customisation sync dialogue, buttons are kept within the screen.\n - No more unnecessary entries on `data.json` for customisation sync.\n - Selections are no longer lost while updating customisation items.\n - Tidied on source codes:\n - Many typos have been fixed.\n - Some unnecessary type casting removed.\n- 0.23.17:\n - Improved:\n - Overall performance has been improved by using PouchDB 9.0.0.\n - Configuration mismatch detection is refined. We can resolve mismatches more smoothly and naturally.\n More detail is on `troubleshooting.md` on the repository.\n - Fixed:\n - Customisation Sync will be disabled when a corrupted configuration is detected.\n Therefore, the Device Name can be changed even in the event of a configuration mismatch.\n - New feature:\n - We can get a notification about the storage usage of the remote database.\n - Default: We will be asked.\n - If the remote storage usage approaches the configured value, we will be asked whether we want to Rebuild or increase the limit.\n\nOlder notes is in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md).", pe, "/", this.plugin); + addScreenElement("100", fe); + const isAnySyncEnabled = () => { + var _, ee, ne, ie; + if (this.isConfiguredAs("isConfigured", false)) return false; + if (this.isConfiguredAs("liveSync", true)) return true; + if (this.isConfiguredAs("periodicReplication", true)) return true; + if (this.isConfiguredAs("syncOnFileOpen", true)) return true; + if (this.isConfiguredAs("syncOnSave", true)) return true; + if (this.isConfiguredAs("syncOnEditorSave", true)) return true; + if (this.isConfiguredAs("syncOnStart", true)) return true; + if (this.isConfiguredAs("syncAfterMerge", true)) return true; + if (this.isConfiguredAs("syncOnFileOpen", true)) return true; + if ("CONNECTED" == (null == (ee = null == (_ = this.plugin) ? void 0 : _.replicator) ? void 0 : ee.syncStatus)) return true; + if ("PAUSED" == (null == (ie = null == (ne = this.plugin) ? void 0 : ne.replicator) ? void 0 : ie.syncStatus)) return true; else return false; + }, Se = enableOnly((() => !isAnySyncEnabled())); + let Ee = false; + if (oe.hasClass("inWizard")) Ee = true; + const ve = oe.createDiv(); + this.createEl(ve, "h3", { + text: "Setup wizard" + }); + new Setting2(ve).setName("Use the copied setup URI").setDesc("To setup Self-hosted LiveSync, this method is the most preferred one.").addButton((_ => { + _.setButtonText("Use").onClick((async () => { + this.closeSetting(); + await this.plugin.addOnSetup.command_openSetupURI(); + })); + })); + if (this.editingSettings.isConfigured) new Setting2(ve).setName("Copy current settings as a new setup URI").addButton((_ => { + _.setButtonText("Copy").onClick((async () => { + await this.plugin.addOnSetup.command_copySetupURI(); + })); + })); + new Setting2(ve).setName("Minimal setup").addButton((_ => { + _.setButtonText("Start").onClick((async () => { + this.editingSettings.liveSync = false; + this.editingSettings.periodicReplication = false; + this.editingSettings.syncOnSave = false; + this.editingSettings.syncOnEditorSave = false; + this.editingSettings.syncOnStart = false; + this.editingSettings.syncOnFileOpen = false; + this.editingSettings.syncAfterMerge = false; + this.plugin.replicator.closeReplication(); + await this.saveAllDirtySettings(); + oe.addClass("isWizard"); + Ee = true; + changeDisplay("0"); + })); + })); + new Setting2(ve).setName("Enable LiveSync on this device as the setup was completed manually").addButton((_ => { + _.setButtonText("Enable").onClick((async () => { + this.editingSettings.isConfigured = true; + await this.saveAllDirtySettings(); + this.plugin.askReload(); + })); + })).addOnUpdate(visibleOnly((() => !this.isConfiguredAs("isConfigured", true)))); + new Setting2(ve).setName("Discard existing settings and databases").addButton((_ => { + _.setButtonText("Discard").onClick((async () => { + if ("yes" == await askYesNo(this.plugin.app, "Do you really want to discard existing settings and databases?")) { + this.editingSettings = { + ...this.editingSettings, + ...DEFAULT_SETTINGS + }; + await this.plugin.saveSettingData(); + await this.plugin.resetLocalDatabase(); + this.plugin.askReload(); + } + })).setWarning(); + })).addOnUpdate(visibleOnly((() => this.isConfiguredAs("isConfigured", true)))); + this.createEl(ve, "h3", { + text: "Online Tips" + }); + const Ce = "vrtmrz/obsidian-livesync", we = "/docs/troubleshooting.md", Le = `https://raw.githubusercontent.com/${Ce}/main`; + this.createEl(ve, "div", "", (_ => _.innerHTML = `Open in browser`)); + const Oe = this.createEl(ve, "div", { + text: "", + cls: "sls-troubleshoot-preview" + }), loadMarkdownPage = async (_, ee = "") => { + var ne, ie; + Oe.style.minHeight = Oe.clientHeight + "px"; + Oe.empty(); + const re = (_.startsWith("/") ? _ : `${ee}/${_}`).split("/"), se = re.pop(), oe = re.join("/"); + let le = ""; + try { + le = await (0, import_obsidian6.request)(`${Le}${oe}/${se}`); + } catch (_) { + le = "An error occurred!!\n" + _.toString(); + } + const ue = le.replace(/\((.*?(.png)|(.jpg))\)/g, `(${Le}${oe}/$1)`); + await import_obsidian.MarkdownRenderer.render(this.plugin.app, ` [Tips and Troubleshooting](${we}) [PageTop](${se})\n\n${ue}`, Oe, `${Le}`, this.plugin); + null == (ie = null == (ne = Oe.querySelector(".sls-troubleshoot-anchor")) ? void 0 : ne.parentElement) || ie.setCssStyles({ + position: "sticky", + top: "-1em", + backgroundColor: "var(--modal-background)" + }); + Oe.querySelectorAll("a.internal-link").forEach((_ => { + _.addEventListener("click", (async ee => { + const ne = _.getAttr("data-href"); + if (ne) if (ne.startsWith("#")) { + ee.preventDefault(); + const _ = Array.from(Oe.querySelectorAll("[data-heading]")).find((_ => { + var ee; + return (null == (ee = _.getAttr("data-heading")) ? void 0 : ee.toLowerCase().split(" ").join("-")) == ne.substring(1).toLowerCase(); + })); + if (_) { + _.setCssStyles({ + scrollMargin: "3em" + }); + _.scrollIntoView({ + behavior: "instant", + block: "start" + }); + } + } else { + ee.preventDefault(); + await loadMarkdownPage(ne, oe); + Oe.setCssStyles({ + scrollMargin: "1em" + }); + Oe.scrollIntoView({ + behavior: "instant", + block: "start" + }); + } + })); + })); + Oe.style.minHeight = ""; + }; + loadMarkdownPage(we); + addScreenElement("110", ve); + const ke = oe.createDiv(); + this.createEl(ke, "h3", { + text: "Remote configuration" + }); + new Setting2(ke).autoWireDropDown("remoteType", { + holdValue: true, + options: { + [REMOTE_COUCHDB]: "CouchDB", + [REMOTE_MINIO]: "Minio,S3,R2" + }, + onUpdate: Se + }); + const onlyOnCouchDB = () => ({ + visibility: this.isConfiguredAs("remoteType", REMOTE_COUCHDB) + }), onlyOnMinIO = () => ({ + visibility: this.isConfiguredAs("remoteType", REMOTE_MINIO) + }); + this.createEl(ke, "div", void 0, (_ => { + const ee = this.createEl(_, "div", { + text: "" + }); + import_obsidian.MarkdownRenderer.render(this.plugin.app, "Kindly notice: this is a pretty experimental feature, hence we have some limitations. \n- Append only architecture. It will not shrink used storage if we do not perform a rebuild.\n- A bit fragile.\n- During the first synchronization, the entire history to date will be transferred. For this reason, it is preferable to do this while connected to a Wi-Fi network.\n- From the second, we always transfer only differences.\n\nHowever, your report is needed to stabilise this. I appreciate you for your great dedication.\n", ee, "/", this.plugin); + ee.addClass("op-warn-info"); + new Setting2(_).autoWireText("endpoint", { + holdValue: true + }); + new Setting2(_).autoWireText("accessKey", { + holdValue: true + }); + new Setting2(_).autoWireText("secretKey", { + holdValue: true, + isPassword: true + }); + new Setting2(_).autoWireText("region", { + holdValue: true + }); + new Setting2(_).autoWireText("bucket", { + holdValue: true + }); + new Setting2(_).autoWireToggle("useCustomRequestHandler", { + holdValue: true + }); + new Setting2(_).setName("Test Connection").addButton((_ => _.setButtonText("Test").setDisabled(false).onClick((async () => { + await this.testConnection(this.editingSettings); + })))); + new Setting2(_).setName("Apply Settings").setClass("wizardHidden").addApplyButton([ "remoteType", "endpoint", "region", "accessKey", "secretKey", "bucket", "useCustomRequestHandler" ]).addOnUpdate(onlyOnMinIO); + }), onlyOnMinIO); + this.createEl(ke, "div", void 0, (_ => { + if (this.plugin.isMobile) this.createEl(_, "div", { + text: "Configured as using non-HTTPS. We cannot connect to the remote. Please set up the credentials and use HTTPS for the remote URI." + }, void 0, visibleOnly((() => !this.editingSettings.couchDB_URI.startsWith("https://")))).addClass("op-warn"); else this.createEl(_, "div", { + text: "Configured as using non-HTTPS. We might fail on mobile devices." + }, void 0, visibleOnly((() => !this.editingSettings.couchDB_URI.startsWith("https://")))).addClass("op-warn-info"); + this.createEl(_, "div", { + text: 'These settings are kept locked while any synchronization options are enabled. Disable these options in the "Sync Settings" tab to unlock.' + }, void 0, visibleOnly((() => isAnySyncEnabled()))).addClass("sls-setting-hidden"); + new Setting2(_).autoWireText("couchDB_URI", { + holdValue: true, + onUpdate: Se + }); + new Setting2(_).autoWireText("couchDB_USER", { + holdValue: true, + onUpdate: Se + }); + new Setting2(_).autoWireText("couchDB_PASSWORD", { + holdValue: true, + isPassword: true, + onUpdate: Se + }); + new Setting2(_).autoWireText("couchDB_DBNAME", { + holdValue: true, + onUpdate: Se + }); + new Setting2(_).setName("Test Database Connection").setClass("wizardHidden").setDesc("Open database connection. If the remote database is not found and you have the privilege to create a database, the database will be created.").addButton((_ => _.setButtonText("Test").setDisabled(false).onClick((async () => { + await this.testConnection(); + })))); + new Setting2(_).setName("Check and fix database configuration").setDesc("Check the database configuration, and fix if there are any problems.").addButton((_ => _.setButtonText("Check").setDisabled(false).onClick((async () => { + const checkConfig = async () => { + var _, ne, ie, re, se, oe, le, ue, de, fe, he; + Logger("Checking database configuration", LOG_LEVEL_INFO); + const pe = createDiv(); + pe.innerHTML = ""; + ee.replaceChildren(pe); + const addResult2 = (_, ne) => { + const ie = createDiv(); + ie.addClass("ob-btn-config-fix"); + if (ne) ie.addClasses(ne); + ie.innerHTML = `${_}`; + ee.appendChild(ie); + }; + try { + if (isCloudantURI(this.editingSettings.couchDB_URI)) { + Logger("This feature cannot be used with IBM Cloudant.", LOG_LEVEL_NOTICE); + return; + } + const pe = (await requestToCouchDB(this.editingSettings.couchDB_URI, this.editingSettings.couchDB_USER, this.editingSettings.couchDB_PASSWORD, window.origin)).json, addConfigFixButton = (_, ne, ie) => { + var re; + const se = createDiv(); + se.addClass("ob-btn-config-fix"); + se.innerHTML = ``; + const oe = ee.appendChild(se); + null == (re = oe.querySelector("button")) || re.addEventListener("click", (async () => { + Logger(`CouchDB Configuration: ${_} -> Set ${ne} to ${ie}`); + const re = await requestToCouchDB(this.editingSettings.couchDB_URI, this.editingSettings.couchDB_USER, this.editingSettings.couchDB_PASSWORD, void 0, ne, ie); + if (200 == re.status) { + Logger(`CouchDB Configuration: ${_} successfully updated`, LOG_LEVEL_NOTICE); + ee.removeChild(oe); + checkConfig(); + } else { + Logger(`CouchDB Configuration: ${_} failed`, LOG_LEVEL_NOTICE); + Logger(re.text, LOG_LEVEL_VERBOSE); + } + })); + }; + addResult2("---Notice---", [ "ob-btn-config-head" ]); + addResult2("If the server configuration is not persistent (e.g., running on docker), the values set from here will also be volatile. Once you are able to connect, please reflect the settings in the server's local.ini.", [ "ob-btn-config-info" ]); + addResult2("--Config check--", [ "ob-btn-config-head" ]); + if (!(this.editingSettings.couchDB_USER in pe.admins)) addResult2("⚠ You do not have administrative privileges."); else addResult2("✔ You have administrative privileges."); + if ("true" != (null == (_ = null == pe ? void 0 : pe.chttpd) ? void 0 : _.require_valid_user)) { + addResult2("❗ chttpd.require_valid_user is wrong."); + addConfigFixButton("Set chttpd.require_valid_user = true", "chttpd/require_valid_user", "true"); + } else addResult2("✔ chttpd.require_valid_user is ok."); + if ("true" != (null == (ne = null == pe ? void 0 : pe.chttpd_auth) ? void 0 : ne.require_valid_user)) { + addResult2("❗ chttpd_auth.require_valid_user is wrong."); + addConfigFixButton("Set chttpd_auth.require_valid_user = true", "chttpd_auth/require_valid_user", "true"); + } else addResult2("✔ chttpd_auth.require_valid_user is ok."); + if (!(null == pe ? void 0 : pe.httpd["WWW-Authenticate"])) { + addResult2("❗ httpd.WWW-Authenticate is missing"); + addConfigFixButton("Set httpd.WWW-Authenticate", "httpd/WWW-Authenticate", 'Basic realm="couchdb"'); + } else addResult2("✔ httpd.WWW-Authenticate is ok."); + if ("true" != (null == (ie = null == pe ? void 0 : pe.httpd) ? void 0 : ie.enable_cors)) { + addResult2("❗ httpd.enable_cors is wrong"); + addConfigFixButton("Set httpd.enable_cors", "httpd/enable_cors", "true"); + } else addResult2("✔ httpd.enable_cors is ok."); + if (!isCloudantURI(this.editingSettings.couchDB_URI)) { + if (Number(null != (se = null == (re = null == pe ? void 0 : pe.chttpd) ? void 0 : re.max_http_request_size) ? se : 0) < 4294967296) { + addResult2("❗ chttpd.max_http_request_size is low)"); + addConfigFixButton("Set chttpd.max_http_request_size", "chttpd/max_http_request_size", "4294967296"); + } else addResult2("✔ chttpd.max_http_request_size is ok."); + if (Number(null != (le = null == (oe = null == pe ? void 0 : pe.couchdb) ? void 0 : oe.max_document_size) ? le : 0) < 5e7) { + addResult2("❗ couchdb.max_document_size is low)"); + addConfigFixButton("Set couchdb.max_document_size", "couchdb/max_document_size", "50000000"); + } else addResult2("✔ couchdb.max_document_size is ok."); + } + if ("true" != (null == (ue = null == pe ? void 0 : pe.cors) ? void 0 : ue.credentials)) { + addResult2("❗ cors.credentials is wrong"); + addConfigFixButton("Set cors.credentials", "cors/credentials", "true"); + } else addResult2("✔ cors.credentials is ok."); + const ge = ((null != (fe = null == (de = null == pe ? void 0 : pe.cors) ? void 0 : de.origins) ? fe : "") + "").split(","); + if ("*" == (null == (he = null == pe ? void 0 : pe.cors) ? void 0 : he.origins) || -1 !== ge.indexOf("app://obsidian.md") && -1 !== ge.indexOf("capacitor://localhost") && -1 !== ge.indexOf("http://localhost")) addResult2("✔ cors.origins is ok."); else { + addResult2("❗ cors.origins is wrong"); + addConfigFixButton("Set cors.origins", "cors/origins", "app://obsidian.md,capacitor://localhost,http://localhost"); + } + addResult2("--Connection check--", [ "ob-btn-config-head" ]); + addResult2(`Current origin:${window.location.origin}`); + const me = [ "app://obsidian.md", "capacitor://localhost", "http://localhost" ]; + for (const _ of me) { + const ee = await requestToCouchDB(this.editingSettings.couchDB_URI, this.editingSettings.couchDB_USER, this.editingSettings.couchDB_PASSWORD, _), ne = Object.fromEntries(Object.entries(ee.headers).map((_ => { + _[0] = `${_[0]}`.toLowerCase(); + return _; + }))); + addResult2(`Origin check:${_}`); + if ("true" != ne["access-control-allow-credentials"]) addResult2("❗ CORS is not allowing credentials"); else addResult2("✔ CORS credentials OK"); + if (ne["access-control-allow-origin"] != _) addResult2(`❗ CORS Origin is unmatched:${origin}->${ne["access-control-allow-origin"]}`); else addResult2("✔ CORS origin OK"); + } + addResult2("--Done--", [ "ob-btn-config-head" ]); + addResult2("If you have some trouble with Connection-check even though all Config-check has been passed, please check your reverse proxy's configuration.", [ "ob-btn-config-info" ]); + Logger("Checking configuration done", LOG_LEVEL_INFO); + } catch (_) { + if (401 == (null == _ ? void 0 : _.status)) { + addResult2("❗ Access forbidden."); + addResult2("We could not continue the test."); + Logger("Checking configuration done", LOG_LEVEL_INFO); + } else { + Logger("Checking configuration failed", LOG_LEVEL_NOTICE); + Logger(_); + } + } + }; + await checkConfig(); + })))); + const ee = this.createEl(_, "div", { + text: "" + }); + new Setting2(_).setName("Apply Settings").setClass("wizardHidden").addApplyButton([ "remoteType", "couchDB_URI", "couchDB_USER", "couchDB_PASSWORD", "couchDB_DBNAME" ]).addOnUpdate(onlyOnCouchDB); + }), onlyOnCouchDB); + this.createEl(ke, "h4", { + text: "Notification" + }).addClass("wizardHidden"); + new Setting2(ke).autoWireNumeric("notifyThresholdOfRemoteStorageSize", {}).setClass("wizardHidden"); + this.createEl(ke, "h4", { + text: "Effective Storage Using" + }).addClass("wizardHidden"); + new Setting2(ke).autoWireToggle("useEden").setClass("wizardHidden"); + const Ae = visibleOnly((() => this.isConfiguredAs("useEden", true))); + new Setting2(ke).autoWireNumeric("maxChunksInEden", { + onUpdate: Ae + }).setClass("wizardHidden"); + new Setting2(ke).autoWireNumeric("maxTotalLengthInEden", { + onUpdate: Ae + }).setClass("wizardHidden"); + new Setting2(ke).autoWireNumeric("maxAgeInEden", { + onUpdate: Ae + }).setClass("wizardHidden"); + new Setting2(ke).autoWireToggle("enableCompression").setClass("wizardHidden"); + this.createEl(ke, "h4", { + text: "Confidentiality" + }); + new Setting2(ke).autoWireToggle("encrypt", { + holdValue: true + }); + const xe = visibleOnly((() => this.isConfiguredAs("encrypt", true))); + new Setting2(ke).autoWireText("passphrase", { + holdValue: true, + isPassword: true, + onUpdate: xe + }); + new Setting2(ke).autoWireToggle("usePathObfuscation", { + holdValue: true, + onUpdate: xe + }); + new Setting2(ke).autoWireToggle("useDynamicIterationCount", { + holdValue: true, + onUpdate: xe + }).setClass("wizardHidden"); + new Setting2(ke).setName("Apply").setDesc("Apply encryption settings").setClass("wizardHidden").addButton((_ => _.setButtonText("Just apply").setWarning().setDisabled(false).onClick((async () => { + await applyEncryption(false); + })))).addButton((_ => _.setButtonText("Apply and fetch").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("localOnly"); + })))).addButton((_ => _.setButtonText("Apply and rebuild").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("rebuildBothByThisDevice"); + })))).addOnUpdate((() => ({ + isCta: this.isSomeDirty([ "passphrase", "useDynamicIterationCount", "usePathObfuscation", "encrypt" ]), + disabled: !this.isSomeDirty([ "passphrase", "useDynamicIterationCount", "usePathObfuscation", "encrypt" ]) + }))); + const checkWorkingPassphrase = async () => { + if (this.editingSettings.remoteType == REMOTE_MINIO) return true; + const _ = { + ...this.editingSettings + }, ee = this.plugin.getReplicator(); + if (!(ee instanceof LiveSyncCouchDBReplicator)) return true; + const ne = await ee.connectRemoteCouchDBWithSetting(_, this.plugin.isMobile, true); + if ("string" == typeof ne) { + Logger("Could not connect to the database.", LOG_LEVEL_NOTICE); + return false; + } else if (await checkSyncInfo(ne.db)) return true; else { + Logger("Failed to read remote database", LOG_LEVEL_NOTICE); + return false; + } + }, applyEncryption = async _ => { + if (!this.editingSettings.encrypt || "" != this.editingSettings.passphrase) if (!this.editingSettings.encrypt || await testCrypt()) { + if (await checkWorkingPassphrase() || _) { + if (!this.editingSettings.encrypt) this.editingSettings.passphrase = ""; + this.saveAllDirtySettings(); + this.plugin.addOnSetup.suspendAllSync(); + this.plugin.addOnSetup.suspendExtraSync(); + this.reloadAllSettings(); + this.editingSettings.isConfigured = true; + await this.saveAllDirtySettings(); + if (_) await this.plugin.addOnSetup.rebuildRemote(); else { + await this.plugin.markRemoteResolved(); + await this.plugin.replicate(true); + } + } + } else Logger("WARNING! Your device does not support encryption.", LOG_LEVEL_NOTICE); else Logger("If you enable encryption, you have to set the passphrase", LOG_LEVEL_NOTICE); + }, rebuildDB = async _ => { + if (!this.editingSettings.encrypt || "" != this.editingSettings.passphrase) if (!this.editingSettings.encrypt || await testCrypt()) { + if (!this.editingSettings.encrypt) this.editingSettings.passphrase = ""; + this.applyAllSettings(); + this.plugin.addOnSetup.suspendAllSync(); + this.plugin.addOnSetup.suspendExtraSync(); + this.reloadAllSettings(); + this.editingSettings.isConfigured = true; + Logger("All synchronizations have been temporarily disabled. Please enable them after the fetching, if you need them.", LOG_LEVEL_NOTICE); + await this.saveAllDirtySettings(); + this.closeSetting(); + await delay(2e3); + await performRebuildDB(this.plugin, _); + } else Logger("WARNING! Your device does not support encryption.", LOG_LEVEL_NOTICE); else Logger("If you enable encryption, you have to set the passphrase", LOG_LEVEL_NOTICE); + }; + new Setting2(ke).setClass("wizardOnly").addButton((_ => _.setButtonText("Next").setCta().setDisabled(false).onClick((() => { + if (!this.editingSettings.encrypt) this.editingSettings.passphrase = ""; + if (isCloudantURI(this.editingSettings.couchDB_URI)) this.editingSettings = { + ...this.editingSettings, + ...PREFERRED_SETTING_CLOUDANT + }; else if (this.editingSettings.remoteType == REMOTE_MINIO) this.editingSettings = { + ...this.editingSettings, + ...PREFERRED_JOURNAL_SYNC + }; else this.editingSettings = { + ...this.editingSettings, + ...PREFERRED_SETTING_SELF_HOSTED + }; + changeDisplay("30"); + })))); + addScreenElement("0", ke); + const Re = oe.createDiv(); + this.createEl(Re, "h3", { + text: "General Settings" + }); + this.createEl(Re, "h4", { + text: "Appearance" + }); + const Te = Object.fromEntries([ [ "", "Default" ], ...SUPPORTED_I18N_LANGS.map((_ => [ _, $t(`lang-${_}`) ])) ]); + new Setting2(Re).autoWireDropDown("displayLanguage", { + options: Te + }); + this.addOnSaved("displayLanguage", (() => this.display())); + new Setting2(Re).autoWireToggle("showStatusOnEditor"); + new Setting2(Re).autoWireToggle("showOnlyIconsOnEditor", { + onUpdate: visibleOnly((() => this.isConfiguredAs("showStatusOnEditor", true))) + }); + new Setting2(Re).autoWireToggle("showStatusOnStatusbar"); + this.createEl(Re, "h4", { + text: "Logging" + }); + new Setting2(Re).autoWireToggle("lessInformationInLog"); + new Setting2(Re).autoWireToggle("showVerboseLog", { + onUpdate: visibleOnly((() => this.isConfiguredAs("lessInformationInLog", false))) + }); + this.createEl(Re, "h4", { + text: "Performance tweaks" + }); + new Setting2(Re).autoWireNumeric("hashCacheMaxCount", { + clampMin: 10 + }); + new Setting2(Re).autoWireNumeric("hashCacheMaxAmount", { + clampMin: 1 + }); + this.createEl(Re, "h4", { + text: "Share settings via markdown" + }); + new Setting2(Re).autoWireText("settingSyncFile", { + holdValue: true + }).addApplyButton([ "settingSyncFile" ]); + new Setting2(Re).autoWireToggle("writeCredentialsForSettingSync"); + new Setting2(Re).autoWireToggle("notifyAllSettingSyncFile"); + this.createEl(Re, "h4", { + text: "Advanced Confidentiality" + }); + new Setting2(Re).setName("Encrypting sensitive configuration items").autoWireDropDown("configPassphraseStore", { + options: { + "": "Default", + LOCALSTORAGE: "Use a custom passphrase", + ASK_AT_LAUNCH: "Ask an passphrase at every launch" + }, + holdValue: true + }).setClass("wizardHidden"); + new Setting2(Re).autoWireText("configPassphrase", { + isPassword: true, + holdValue: true + }).setClass("wizardHidden").addOnUpdate((() => ({ + disabled: !this.isConfiguredAs("configPassphraseStore", "LOCALSTORAGE") + }))); + new Setting2(Re).addApplyButton([ "configPassphrase", "configPassphraseStore" ]).setClass("wizardHidden"); + addScreenElement("20", Re); + const Pe = oe.createDiv(); + this.createEl(Pe, "h3", { + text: "Sync Settings" + }); + if ("" != this.editingSettings.versionUpFlash) { + const _ = this.createEl(Pe, "div", { + text: this.editingSettings.versionUpFlash, + cls: "op-warn sls-setting-hidden" + }, (ee => { + this.createEl(ee, "button", { + text: "I got it and updated." + }, (ee => { + ee.addClass("mod-cta"); + ee.addEventListener("click", (async () => { + this.editingSettings.versionUpFlash = ""; + await this.saveAllDirtySettings(); + _.remove(); + })); + })); + }), visibleOnly((() => !this.isConfiguredAs("versionUpFlash", "")))); + } + this.createEl(Pe, "div", { + text: "Please select any preset to complete the wizard.", + cls: "wizardOnly" + }).addClasses([ "op-warn-info" ]); + const Ie = this.editingSettings.remoteType == REMOTE_COUCHDB ? { + NONE: "", + LIVESYNC: "LiveSync", + PERIODIC: "Periodic w/ batch", + DISABLE: "Disable all automatic" + } : { + NONE: "", + PERIODIC: "Periodic w/ batch", + DISABLE: "Disable all automatic" + }; + new Setting2(Pe).autoWireDropDown("preset", { + options: Ie, + holdValue: true + }).addButton((_ => { + _.setButtonText("Apply"); + _.onClick((async () => { + await this.saveSettings([ "preset" ]); + })); + })); + this.addOnSaved("preset", (async _ => { + if ("" == _) { + Logger("Select any preset.", LOG_LEVEL_NOTICE); + return; + } + const ee = { + batchSave: false, + liveSync: false, + periodicReplication: false, + syncOnSave: false, + syncOnEditorSave: false, + syncOnStart: false, + syncOnFileOpen: false, + syncAfterMerge: false + }, ne = { + ...ee, + liveSync: true + }, ie = { + ...ee, + batchSave: true, + periodicReplication: true, + syncOnSave: false, + syncOnEditorSave: false, + syncOnStart: true, + syncOnFileOpen: true, + syncAfterMerge: true + }; + if ("LIVESYNC" == _) { + this.editingSettings = { + ...this.editingSettings, + ...ne + }; + Logger("Synchronization setting configured as LiveSync.", LOG_LEVEL_NOTICE); + } else if ("PERIODIC" == _) { + this.editingSettings = { + ...this.editingSettings, + ...ie + }; + Logger("Synchronization setting configured as Periodic sync with batch database update.", LOG_LEVEL_NOTICE); + } else { + Logger("All synchronizations disabled.", LOG_LEVEL_NOTICE); + this.editingSettings = { + ...this.editingSettings, + ...ee + }; + } + await this.saveAllDirtySettings(); + await this.plugin.realizeSettingSyncMode(); + if (Ee) { + this.closeSetting(); + if (!this.editingSettings.isConfigured) { + this.editingSettings.isConfigured = true; + await this.saveAllDirtySettings(); + await rebuildDB("localOnly"); + Logger("All done! Please set up subsequent devices with 'Copy current settings as a new setup URI' and 'Use the copied setup URI'.", LOG_LEVEL_NOTICE); + await this.plugin.addOnSetup.command_copySetupURI(); + } else this.plugin.askReload(); + } + })); + this.createEl(Pe, "h4", { + text: "Synchronization Methods" + }).addClass("wizardHidden"); + const De = visibleOnly((() => !this.isConfiguredAs("syncMode", "LIVESYNC"))), Be = visibleOnly((() => this.isConfiguredAs("syncMode", "PERIODIC"))), Ne = this.editingSettings.remoteType == REMOTE_COUCHDB ? { + ONEVENTS: "On events", + PERIODIC: "Periodic and On events", + LIVESYNC: "LiveSync" + } : { + ONEVENTS: "On events", + PERIODIC: "Periodic and On events" + }; + new Setting2(Pe).autoWireDropDown("syncMode", { + options: Ne + }).setClass("wizardHidden"); + this.addOnSaved("syncMode", (async _ => { + this.editingSettings.liveSync = false; + this.editingSettings.periodicReplication = false; + if ("LIVESYNC" == _) this.editingSettings.liveSync = true; else if ("PERIODIC" == _) this.editingSettings.periodicReplication = true; + await this.saveSettings([ "liveSync", "periodicReplication" ]); + await this.plugin.realizeSettingSyncMode(); + })); + new Setting2(Pe).autoWireNumeric("periodicReplicationInterval", { + clampMax: 5e3, + onUpdate: Be + }).setClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncOnSave", { + onUpdate: De + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncOnEditorSave", { + onUpdate: De + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncOnFileOpen", { + onUpdate: De + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncOnStart", { + onUpdate: De + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncAfterMerge", { + onUpdate: De + }); + this.createEl(Pe, "h4", { + text: "Deletions propagation" + }).addClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("trashInsteadDelete"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("doNotDeleteFolder"); + this.createEl(Pe, "h4", { + text: "Conflict resolution" + }).addClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("resolveConflictsByNewerFile"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("checkConflictOnlyOnOpen"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("showMergeDialogOnlyOnActive"); + this.createEl(Pe, "h4", { + text: "Compatibility" + }).addClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("disableMarkdownAutoMerge"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("writeDocumentsIfConflicted"); + this.createEl(Pe, "h4", { + text: "Hidden files" + }).addClass("wizardHidden"); + new Setting2(Pe).setName("Hidden file synchronization").setClass("wizardHidden").settingEl.createDiv("").innerText = this.editingSettings.syncInternalFiles ? "🔁 : Enabled" : "⏹️ : Disabled"; + if (this.editingSettings.syncInternalFiles) new Setting2(Pe).setName("Disable Hidden files sync").setClass("wizardHidden").addButton((_ => { + _.setButtonText("Disable").onClick((async () => { + this.editingSettings.syncInternalFiles = false; + await this.saveAllDirtySettings(); + this.display(); + })); + })); else new Setting2(Pe).setName("Enable Hidden files sync").setClass("wizardHidden").addButton((_ => { + _.setButtonText("Merge").onClick((async () => { + this.closeSetting(); + await this.plugin.addOnSetup.configureHiddenFileSync("MERGE"); + })); + })).addButton((_ => { + _.setButtonText("Fetch").onClick((async () => { + this.closeSetting(); + await this.plugin.addOnSetup.configureHiddenFileSync("FETCH"); + })); + })).addButton((_ => { + _.setButtonText("Overwrite").onClick((async () => { + this.closeSetting(); + await this.plugin.addOnSetup.configureHiddenFileSync("OVERWRITE"); + })); + })); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("syncInternalFilesBeforeReplication", { + onUpdate: visibleOnly((() => this.isConfiguredAs("watchInternalFileChanges", false))) + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("syncInternalFilesInterval", { + clampMin: 10, + acceptZero: true + }); + const Me = "\\/node_modules\\/, \\/\\.git\\/, ^\\.git\\/, \\/obsidian-livesync\\/", Fe = Me + ",\\/workspace$ ,\\/workspace.json$,\\/workspace-mobile.json$", Ve = this.editingSettings.syncInternalFilesIgnorePatterns.split(",").map((_ => _.trim())).filter((_ => "" != _)), $e = new Setting2(Pe).setName("Hidden files ignore patterns").setClass("wizardHidden").setDesc(""); + new MultipleRegExpControl_default({ + target: $e.controlEl, + props: { + patterns: Ve, + originals: [ ...Ve ], + apply: async _ => { + this.editingSettings.syncInternalFilesIgnorePatterns = _.map((_ => _.trim())).filter((_ => "" != _)).join(", "); + await this.saveAllDirtySettings(); + this.display(); + } + } + }); + const addDefaultPatterns = async _ => { + const ee = this.editingSettings.syncInternalFilesIgnorePatterns.split(",").map((_ => _.trim())).filter((_ => "" != _)), ne = _.split(",").map((_ => _.trim())).filter((_ => "" != _)), ie = new Set([ ...ee, ...ne ]); + this.editingSettings.syncInternalFilesIgnorePatterns = [ ...ie ].join(", "); + await this.saveAllDirtySettings(); + this.display(); + }; + new Setting2(Pe).setName("Add default patterns").setClass("wizardHidden").addButton((_ => { + _.setButtonText("Default").onClick((async () => { + await addDefaultPatterns(Me); + })); + })).addButton((_ => { + _.setButtonText("Cross-platform").onClick((async () => { + await addDefaultPatterns(Fe); + })); + })); + this.createEl(Pe, "h4", { + text: "Performance tweaks" + }).addClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("batchSave"); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("batchSaveMinimumDelay", { + acceptZero: true, + onUpdate: visibleOnly((() => this.isConfiguredAs("batchSave", true))) + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("batchSaveMaximumDelay", { + acceptZero: true, + onUpdate: visibleOnly((() => this.isConfiguredAs("batchSave", true))) + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("customChunkSize", { + clampMin: 0 + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("readChunksOnline", { + onUpdate: onlyOnCouchDB + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("enableChunkSplitterV2"); + this.createEl(Pe, "h4", { + text: (0, import_obsidian.sanitizeHTMLToDom)("Targets") + }).addClass("wizardHidden"); + const Ge = new Setting2(Pe).setName("Synchronising files").setDesc("(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.").setClass("wizardHidden"); + new MultipleRegExpControl_default({ + target: Ge.controlEl, + props: { + patterns: this.editingSettings.syncOnlyRegEx.split("|[]|"), + originals: [ ...this.editingSettings.syncOnlyRegEx.split("|[]|") ], + apply: async _ => { + this.editingSettings.syncOnlyRegEx = _.map((_ => _.trim())).filter((_ => "" != _)).join("|[]|"); + await this.saveAllDirtySettings(); + this.display(); + } + } + }); + const Ue = new Setting2(Pe).setName("Non-Synchronising files").setDesc("(RegExp) If this is set, any changes to local and remote files that match this will be skipped.").setClass("wizardHidden"); + new MultipleRegExpControl_default({ + target: Ue.controlEl, + props: { + patterns: this.editingSettings.syncIgnoreRegEx.split("|[]|"), + originals: [ ...this.editingSettings.syncIgnoreRegEx.split("|[]|") ], + apply: async _ => { + this.editingSettings.syncIgnoreRegEx = _.map((_ => _.trim())).filter((_ => "" != _)).join("|[]|"); + await this.saveAllDirtySettings(); + this.display(); + } + } + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("syncMaxSizeInMB", { + clampMin: 0 + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("useIgnoreFiles"); + new Setting2(Pe).setClass("wizardHidden").autoWireTextArea("ignoreFiles", { + onUpdate: visibleOnly((() => this.isConfiguredAs("useIgnoreFiles", true))) + }); + this.createEl(Pe, "h4", { + text: (0, import_obsidian.sanitizeHTMLToDom)("Advanced settings") + }, void 0, onlyOnCouchDB).addClass("wizardHidden"); + this.createEl(Pe, "div", { + text: "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value." + }, void 0, onlyOnCouchDB).addClass("wizardHidden"); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("batch_size", { + clampMin: 2, + onUpdate: onlyOnCouchDB + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("batches_limit", { + clampMin: 2, + onUpdate: onlyOnCouchDB + }); + new Setting2(Pe).setClass("wizardHidden").autoWireToggle("useTimeouts", { + onUpdate: onlyOnCouchDB + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("concurrencyOfReadChunksOnline", { + clampMin: 10, + onUpdate: onlyOnCouchDB + }); + new Setting2(Pe).setClass("wizardHidden").autoWireNumeric("minimumIntervalOfReadChunksOnline", { + clampMin: 10, + onUpdate: onlyOnCouchDB + }); + addScreenElement("30", Pe); + const je = oe.createDiv(); + this.createEl(je, "h3", { + text: "Hatch" + }); + new Setting2(je).setName("Make report to inform the issue").addButton((_ => _.setButtonText("Make report").setDisabled(false).onClick((async () => { + let _ = {}; + const ee = "𝑅𝐸𝐷𝐴𝐶𝑇𝐸𝐷"; + if (this.editingSettings.remoteType == REMOTE_COUCHDB) try { + const ne = await requestToCouchDB(this.editingSettings.couchDB_URI, this.editingSettings.couchDB_USER, this.editingSettings.couchDB_PASSWORD, window.origin); + Logger(JSON.stringify(ne.json, null, 2)); + _ = ne.json; + _["couch_httpd_auth"].secret = ee; + _["couch_httpd_auth"].authentication_db = ee; + _["couch_httpd_auth"].authentication_redirect = ee; + _["couchdb"].uuid = ee; + _["admins"] = ee; + } catch (ee) { + _ = "Requesting information from the remote CouchDB has failed. If you are using IBM Cloudant, this is normal behaviour."; + } else if (this.editingSettings.remoteType == REMOTE_MINIO) _ = "Object Storage Synchronisation"; + const ne = JSON.parse(JSON.stringify(this.editingSettings)); + ne.couchDB_DBNAME = ee; + ne.couchDB_PASSWORD = ee; + const ie = ne.couchDB_URI.startsWith("http:") ? "(HTTP)" : ne.couchDB_URI.startsWith("https:") ? "(HTTPS)" : ""; + ne.couchDB_URI = isCloudantURI(ne.couchDB_URI) ? "cloudant" : `self-hosted${ie}`; + ne.couchDB_USER = ee; + ne.passphrase = ee; + ne.encryptedPassphrase = ee; + ne.encryptedCouchDBConnection = ee; + ne.accessKey = ee; + ne.secretKey = ee; + ne.region = `${ee}(${ne.region.length} letters)`; + ne.bucket = `${ee}(${ne.bucket.length} letters)`; + ne.pluginSyncExtendedSetting = {}; + const re = ne.endpoint; + if ("" == re) ne.endpoint = "Not configured or AWS"; else { + const _ = ne.endpoint.startsWith("http:") ? "(HTTP)" : ne.endpoint.startsWith("https:") ? "(HTTPS)" : ""; + ne.endpoint = `${-1 !== re.indexOf(".r2.cloudflarestorage.") ? "R2" : "self-hosted?"}(${_})`; + } + const se = `---- Obsidian info ----\n${navigator.userAgent}\n---- remote config ----\n${(0, + import_obsidian.stringifyYaml)(_)}\n---- Plug-in config ---\nversion:${ge}\n${(0, + import_obsidian.stringifyYaml)(ne)}`; + console.log(se); + await navigator.clipboard.writeText(se); + Logger("Information has been copied to clipboard", LOG_LEVEL_NOTICE); + })))); + if (null == (ie = null == (ne = this.plugin) ? void 0 : ne.replicator) ? void 0 : ie.remoteLockedAndDeviceNotAccepted) { + const _ = this.createEl(je, "div", { + text: "To prevent unwanted vault corruption, the remote database has been locked for synchronization, and this device was not marked as 'resolved'. It caused by some operations like this. Re-initialized. Local database initialization should be required. Please back your vault up, reset the local database, and press 'Mark this device as resolved'. " + }); + this.createEl(_, "button", { + text: "I'm ready, mark this device 'resolved'" + }, (ee => { + ee.addClass("mod-warning"); + ee.addEventListener("click", (async () => { + await this.plugin.markRemoteResolved(); + _.remove(); + })); + })); + _.addClass("op-warn"); + } else if (null == (se = null == (re = this.plugin) ? void 0 : re.replicator) ? void 0 : se.remoteLocked) { + const _ = this.createEl(je, "div", { + text: "To prevent unwanted vault corruption, the remote database has been locked for synchronization. (This device is marked 'resolved') When all your devices are marked 'resolved', unlock the database." + }); + this.createEl(_, "button", { + text: "I'm ready, unlock the database" + }, (ee => { + ee.addClass("mod-warning"); + ee.addEventListener("click", (async () => { + await this.plugin.markRemoteUnlocked(); + _.remove(); + })); + })); + _.addClass("op-warn"); + } + new Setting2(je).setName("Back to non-configured").addButton((_ => _.setButtonText("Back").setDisabled(false).onClick((async () => { + this.editingSettings.isConfigured = false; + await this.saveAllDirtySettings(); + this.plugin.askReload(); + })))); + this.createEl(je, "div", { + text: "To stop the boot up sequence for fixing problems on databases, you can put redflag.md on top of your vault (Rebooting obsidian is required)." + }).addClass("op-warn-info"); + const addResult = (_, ee, ne) => { + ze.appendChild(this.createEl(ze, "div", {}, (ie => { + ie.appendChild(this.createEl(ie, "h6", { + text: _ + })); + ie.appendChild(this.createEl(ie, "div", {}, (_ => { + _.appendChild(this.createEl(_, "div", { + text: "Storage : Modified: " + (!ee ? "Missing:" : `${new Date(ee.stat.mtime).toLocaleString()}, Size:${ee.stat.size}`) + })); + _.appendChild(this.createEl(_, "div", { + text: "Database: Modified: " + (!ne ? "Missing:" : `${new Date(ne.mtime).toLocaleString()}, Size:${ne.size}`) + })); + }))); + if (ne && ee) ie.appendChild(this.createEl(ie, "button", { + text: "Show history" + }, (_ => { + _.onClickEvent((() => { + this.plugin.showHistory(ee, ne._id); + })); + }))); + if (ee) ie.appendChild(this.createEl(ie, "button", { + text: "Storage -> Database" + }, (_ => { + _.onClickEvent((() => { + this.plugin.updateIntoDB(ee, void 0, true); + ie.remove(); + })); + }))); + if (ne) ie.appendChild(this.createEl(ie, "button", { + text: "Database -> Storage" + }, (_ => { + _.onClickEvent((() => { + this.plugin.pullFile(this.plugin.getPath(ne), [], true, void 0, false); + ie.remove(); + })); + }))); + return ie; + }))); + }, checkBetweenStorageAndDatabase = async (_, ee) => { + const ne = readAsBlob(ee), ie = createBlob(await this.plugin.vaultAccess.vaultReadAuto(_)); + if (await isDocContentSame(ie, ne)) Logger(`Compare: SAME: ${_.path}`); else { + Logger(`Compare: CONTENT IS NOT MATCHED! ${_.path}`, LOG_LEVEL_NOTICE); + addResult(_.path, _, ee); + } + }; + new Setting2(je).setName("Verify and repair all files").setDesc("Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.").addButton((_ => _.setButtonText("Verify all").setDisabled(false).setWarning().onClick((async () => { + const _ = this.app.vault.getFiles(), ee = [], ne = this.plugin.localDatabase.findAllNormalDocs(); + for await (const _ of ne) ee.push(this.plugin.getPath(_)); + const ie = [ ...new Set([ ...ee, ..._.map((_ => _.path)) ]) ]; + let re = 0; + for (const ee of ie) { + re++; + Logger(`${re}/${_.length}\n${ee}`, LOG_LEVEL_NOTICE, "verify"); + if (shouldBeIgnored(ee)) continue; + const ne = this.plugin.vaultAccess.getAbstractFileByPath(ee), ie = ne instanceof import_obsidian6.TFile ? ne : false; + if (!await this.plugin.isTargetFile(ee)) continue; + if (ie && this.plugin.isFileSizeExceeded(ie.stat.size)) continue; + const se = await this.plugin.localDatabase.getDBEntry(ee); + if (!se || !this.plugin.isFileSizeExceeded(se.size)) if (se || !ie) if (!se || ie) { + if (ie && se) await checkBetweenStorageAndDatabase(ie, se); + } else { + Logger(`Compare: Not found on the storage: ${ee}`, LOG_LEVEL_NOTICE); + addResult(ee, false, se); + } else { + Logger(`Compare: Not found on the local database: ${ee}`, LOG_LEVEL_NOTICE); + addResult(ee, ie, false); + } + } + Logger("done", LOG_LEVEL_NOTICE, "verify"); + })))); + const ze = je.createDiv({ + text: "" + }); + new Setting2(je).setName("Check and convert non-path-obfuscated files").setDesc("").addButton((_ => _.setButtonText("Perform").setDisabled(false).setWarning().onClick((async () => { + var _, ee, ne; + for await (const ie of this.plugin.localDatabase.findAllDocNames()) if (!ie.startsWith("f:")) { + const re = await this.plugin.path2id(ie), se = await this.plugin.localDatabase.getRaw(ie); + if (!se) continue; + if ("newnote" != se.type && "plain" != se.type) continue; + if (null != (_ = null == se ? void 0 : se.deleted) ? _ : false) continue; + const oe = { + ...se + }; + oe._id = re; + oe.path = ie; + delete oe._rev; + try { + const _ = await this.plugin.localDatabase.getRaw(re, { + revs_info: true + }); + null == (ee = _._revs_info) || ee.shift(); + const le = null == (ne = _._revs_info) ? void 0 : ne.shift(); + if (le) oe._rev = le.rev; else oe._rev = "1-" + `00000000000000000000000000000000${~~(1e9 * Math.random())}${~~(1e9 * Math.random())}${~~(1e9 * Math.random())}${~~(1e9 * Math.random())}`.slice(-32); + const ue = await this.plugin.localDatabase.putRaw(oe, { + force: true + }); + if (ue.ok) { + Logger(`${ie} has been converted as conflicted document`, LOG_LEVEL_NOTICE); + se._deleted = true; + if ((await this.plugin.localDatabase.putRaw(se)).ok) Logger(`Old ${ie} has been deleted`, LOG_LEVEL_NOTICE); + await this.plugin.queueConflictCheck(ie); + } else { + Logger(`Converting ${ie} Failed!`, LOG_LEVEL_NOTICE); + Logger(ue, LOG_LEVEL_VERBOSE); + } + } catch (_) { + if (404 == (null == _ ? void 0 : _.status)) { + if ((await this.plugin.localDatabase.putRaw(oe)).ok) { + Logger(`${ie} has been converted`, LOG_LEVEL_NOTICE); + se._deleted = true; + if ((await this.plugin.localDatabase.putRaw(se)).ok) Logger(`Old ${ie} has been deleted`, LOG_LEVEL_NOTICE); + } + } else { + Logger(`Something went wrong while converting ${ie}`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + } + Logger("Converting finished", LOG_LEVEL_NOTICE); + })))); + new Setting2(je).setName("Delete all customization sync data").addButton((_ => _.setButtonText("Delete").setDisabled(false).setWarning().onClick((async () => { + Logger("Deleting customization sync data", LOG_LEVEL_NOTICE); + const _ = (await this.plugin.localDatabase.allDocsRaw({ + startkey: "ix:", + endkey: "ix:􏿿", + include_docs: true + })).rows.map((_ => ({ + ..._.doc, + _deleted: true + }))); + Logger(`${(await this.plugin.localDatabase.bulkDocsRaw(_)).length} items have been removed, to confirm how many items are left, please perform it again.`, LOG_LEVEL_NOTICE); + })))); + new Setting2(je).autoWireToggle("suspendFileWatching"); + this.addOnSaved("suspendFileWatching", (() => this.plugin.askReload())); + new Setting2(je).autoWireToggle("suspendParseReplicationResult"); + this.addOnSaved("suspendParseReplicationResult", (() => this.plugin.askReload())); + new Setting2(je).autoWireToggle("writeLogToTheFile"); + this.createEl(je, "h4", { + text: (0, import_obsidian.sanitizeHTMLToDom)("Compatibility"), + cls: "wizardHidden" + }); + new Setting2(je).setClass("wizardHidden").autoWireToggle("deleteMetadataOfDeletedFiles"); + new Setting2(je).setClass("wizardHidden").autoWireNumeric("automaticallyDeleteMetadataOfDeletedFiles", { + onUpdate: visibleOnly((() => this.isConfiguredAs("deleteMetadataOfDeletedFiles", true))) + }); + new Setting2(je).autoWireToggle("useIndexedDBAdapter", { + invert: true + }); + this.addOnSaved("useIndexedDBAdapter", (async () => { + await this.saveAllDirtySettings(); + await rebuildDB("localOnly"); + })); + new Setting2(je).autoWireToggle("watchInternalFileChanges", { + invert: true + }); + new Setting2(je).autoWireText("additionalSuffixOfDatabaseName", { + holdValue: true + }).addApplyButton([ "additionalSuffixOfDatabaseName" ]); + this.addOnSaved("additionalSuffixOfDatabaseName", (async _ => { + Logger("Suffix has been changed. Reopening database...", LOG_LEVEL_NOTICE); + await this.plugin.initializeDatabase(); + })); + new Setting2(je).autoWireDropDown("hashAlg", { + options: { + "": "Old Algorithm", + xxhash32: "xxhash32 (Fast)", + xxhash64: "xxhash64 (Fastest)", + sha1: "Fallback (Without WebAssembly)" + } + }); + this.addOnSaved("hashAlg", (async () => { + await this.plugin.localDatabase.prepareHashFunctions(); + })); + new Setting2(je).autoWireToggle("doNotSuspendOnFetching"); + new Setting2(je).autoWireToggle("disableCheckingConfigMismatch"); + new Setting2(je).autoWireToggle("disableWorkerForGeneratingChunks"); + new Setting2(je).autoWireToggle("processSmallFilesInUIThread", { + onUpdate: visibleOnly((() => this.isConfiguredAs("disableWorkerForGeneratingChunks", false))) + }); + addScreenElement("50", je); + const qe = oe.createDiv(); + this.createEl(qe, "h3", { + text: "Customization sync (beta 3)" + }); + const He = enableOnly((() => this.isConfiguredAs("usePluginSync", false))), Ke = visibleOnly((() => this.isConfiguredAs("usePluginSync", true))); + new Setting2(qe).autoWireText("deviceAndVaultName", { + placeHolder: "desktop", + onUpdate: He + }); + new Setting2(qe).autoWireToggle("usePluginSyncV2"); + new Setting2(qe).autoWireToggle("usePluginSync", { + onUpdate: enableOnly((() => !this.isConfiguredAs("deviceAndVaultName", ""))) + }); + new Setting2(qe).autoWireToggle("autoSweepPlugins", { + onUpdate: Ke + }); + new Setting2(qe).autoWireToggle("autoSweepPluginsPeriodic", { + onUpdate: visibleOnly((() => this.isConfiguredAs("usePluginSync", true) && this.isConfiguredAs("autoSweepPlugins", true))) + }); + new Setting2(qe).autoWireToggle("notifyPluginOrSettingUpdated", { + onUpdate: Ke + }); + new Setting2(qe).setName("Open").setDesc("Open the dialog").addButton((_ => { + _.setButtonText("Open").setDisabled(false).onClick((() => { + this.plugin.addOnConfigSync.showPluginSyncModal(); + })); + })).addOnUpdate(Ke); + addScreenElement("60", qe); + const We = oe.createDiv(); + this.createEl(We, "h3", { + text: "Maintenance" + }); + this.createEl(We, "h4", { + text: "Remote" + }); + new Setting2(We).setName("Perform compaction").setDesc("Compaction discards all of Eden in the non-latest revisions, reducing the storage usage. However, this operation requires the same free space on the remote as the current database.").addButton((_ => _.setButtonText("Perform").setDisabled(false).onClick((async () => { + const _ = this.plugin.replicator; + Logger("Compaction has been began", LOG_LEVEL_NOTICE, "compaction"); + if (await _.compactRemote(this.editingSettings)) Logger("Compaction has been completed!", LOG_LEVEL_NOTICE, "compaction"); else Logger("Compaction has been failed!", LOG_LEVEL_NOTICE, "compaction"); + })))).addOnUpdate(onlyOnCouchDB); + new Setting2(We).setName("Lock remote").setDesc("Lock remote to prevent synchronization with other devices.").addButton((_ => _.setButtonText("Lock").setDisabled(false).setWarning().onClick((async () => { + await this.plugin.markRemoteLocked(); + })))); + new Setting2(We).setName("Overwrite remote").setDesc("Overwrite remote with local DB and passphrase.").addButton((_ => _.setButtonText("Send").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("remoteOnly"); + })))); + new Setting2(We).setName("Reset journal received history").setDesc("Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.").addButton((_ => _.setButtonText("Reset received").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.getMinioJournalSyncClient().updateCheckPointInfo((_ => ({ + ..._, + receivedFiles: new Set, + knownIDs: new Set + }))); + Logger("Journal received history has been cleared.", LOG_LEVEL_NOTICE); + })))).addOnUpdate(onlyOnMinIO); + new Setting2(We).setName("Reset journal sent history").setDesc("Initialise journal sent history. On the next sync, every item except this device received will be sent again.").addButton((_ => _.setButtonText("Reset sent history").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.getMinioJournalSyncClient().updateCheckPointInfo((_ => ({ + ..._, + lastLocalSeq: 0, + sentIDs: new Set, + sentFiles: new Set + }))); + Logger("Journal sent history has been cleared.", LOG_LEVEL_NOTICE); + })))).addOnUpdate(onlyOnMinIO); + new Setting2(We).setName("Reset all journal counter").setDesc("Initialise all journal history, On the next sync, every item will be received and sent.").addButton((_ => _.setButtonText("Reset all").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.getMinioJournalSyncClient().resetCheckpointInfo(); + Logger("Journal exchange history has been cleared.", LOG_LEVEL_NOTICE); + })))).addOnUpdate(onlyOnMinIO); + new Setting2(We).setName("Purge all journal counter").setDesc("Purge all sending and downloading cache.").addButton((_ => _.setButtonText("Reset all").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.getMinioJournalSyncClient().resetAllCaches(); + Logger("Journal sending and downloading cache has been cleared.", LOG_LEVEL_NOTICE); + })))).addOnUpdate(onlyOnMinIO); + new Setting2(We).setName("Make empty the bucket").setDesc("Delete all data on the remote.").addButton((_ => _.setButtonText("Delete").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.getMinioJournalSyncClient().updateCheckPointInfo((_ => ({ + ..._, + receivedFiles: new Set, + knownIDs: new Set, + lastLocalSeq: 0, + sentIDs: new Set, + sentFiles: new Set + }))); + await this.plugin.resetRemoteBucket(); + Logger("the bucket has been cleared.", LOG_LEVEL_NOTICE); + })))).addOnUpdate(onlyOnMinIO); + this.createEl(We, "h4", { + text: "Local database" + }); + new Setting2(We).setName("Fetch from remote").setDesc("Restore or reconstruct local database from remote.").addButton((_ => _.setButtonText("Fetch").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.vaultAccess.vaultCreate(FLAGMD_REDFLAG3_HR, ""); + this.plugin.performAppReload(); + })))).addButton((_ => _.setButtonText("Fetch w/o restarting").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("localOnly"); + })))); + new Setting2(We).setName("Fetch rebuilt DB (Save local documents before)").setDesc("Restore or reconstruct local database from remote database but use local chunks.").addButton((_ => _.setButtonText("Save and Fetch").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("localOnlyWithChunks"); + })))).addOnUpdate(onlyOnCouchDB); + new Setting2(We).setName("Discard local database to reset or uninstall Self-hosted LiveSync").addButton((_ => _.setButtonText("Discard").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.resetLocalDatabase(); + await this.plugin.initializeDatabase(); + })))); + this.createEl(We, "h4", { + text: "Both databases" + }); + new Setting2(We).setName("(Beta2) Clean up databases").setDesc("Delete unused chunks to shrink the database. This feature requires disabling 'Use an old adapter for compatibility'").addButton((_ => _.setButtonText("DryRun").setDisabled(false).onClick((async () => { + await this.plugin.dryRunGC(); + })))).addButton((_ => _.setButtonText("Perform cleaning").setDisabled(false).setWarning().onClick((async () => { + this.closeSetting(); + await this.plugin.dbGC(); + })))).addOnUpdate(onlyOnCouchDB); + new Setting2(We).setName("Rebuild everything").setDesc("Rebuild local and remote database with local files.").addButton((_ => _.setButtonText("Rebuild").setWarning().setDisabled(false).onClick((async () => { + await this.plugin.vaultAccess.vaultCreate(FLAGMD_REDFLAG2_HR, ""); + this.plugin.performAppReload(); + })))).addButton((_ => _.setButtonText("Rebuild w/o restarting").setWarning().setDisabled(false).onClick((async () => { + await rebuildDB("rebuildBothByThisDevice"); + })))); + addScreenElement("70", We); + if ("" == this.selectedScreen) if (me != this.editingSettings.lastReadUpdates) if (this.editingSettings.isConfigured) changeDisplay("100"); else changeDisplay("110"); else if (isAnySyncEnabled()) changeDisplay("20"); else changeDisplay("110"); else changeDisplay(this.selectedScreen); + this.requestUpdate(); + } +}; + +function isImage(_) { + const ee = _.split(".").splice(-1)[0].toLowerCase(); + return [ "png", "jpg", "jpeg", "gif", "bmp", "webp" ].includes(ee); +} + +function isComparableText(_) { + const ee = _.split(".").splice(-1)[0].toLowerCase(); + return isPlainText(_) || [ "md", "mdx", "txt", "json" ].includes(ee); +} + +function isComparableTextDecode(_) { + const ee = _.split(".").splice(-1)[0].toLowerCase(); + return [ "json" ].includes(ee); +} + +function readDocument(_) { + if (0 == _.data.length) return ""; + if (isImage(_.path)) return new Uint8Array(decodeBinary(_.data)); + if ("plain" == _.type || "plain" == _.datatype) return getDocData(_.data); + if (isComparableTextDecode(_.path)) return readString(new Uint8Array(decodeBinary(_.data))); + if (isComparableText(_.path)) return getDocData(_.data); + try { + return readString(new Uint8Array(decodeBinary(_.data))); + } catch (_) {} + return getDocData(_.data); +} + +var DocumentHistoryModal = class extends import_obsidian.Modal { + constructor(_, ee, ne, ie, re) { + super(_); + this.showDiff = false; + this.revs_info = []; + this.currentText = ""; + this.currentDeleted = false; + this.BlobURLs = new Map; + this.plugin = ee; + this.file = ne instanceof import_obsidian.TFile ? getPathFromTFile(ne) : ne; + this.id = ie; + this.initialRev = re; + if (!ne && ie) this.file = this.plugin.id2path(ie); + if ("1" == localStorage.getItem("ols-history-highlightdiff")) this.showDiff = true; + } + async loadFile(_) { + var ee, ne; + if (!this.id) this.id = await this.plugin.path2id(this.file); + const ie = this.plugin.localDatabase; + try { + const re = await ie.getRaw(this.id, { + revs_info: true + }); + this.revs_info = null != (ne = null == (ee = re._revs_info) ? void 0 : ee.filter((_ => "available" == (null == _ ? void 0 : _.status)))) ? ne : []; + this.range.max = `${Math.max(this.revs_info.length - 1, 0)}`; + this.range.value = this.range.max; + this.fileInfo.setText(`${this.file} / ${this.revs_info.length} revisions`); + await this.loadRevs(_); + } catch (_) { + if (isErrorOfMissingDoc(_)) { + this.range.max = "0"; + this.range.value = ""; + this.range.disabled = true; + this.contentView.setText("History of this file was not recorded."); + } else { + this.contentView.setText("Error occurred."); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + } + async loadRevs(_) { + if (0 == this.revs_info.length) return; + if (_) { + const ee = this.revs_info.findIndex((ee => ee.rev == _)); + if (ee >= 0) this.range.value = "" + (this.revs_info.length - 1 - ee); + } + const ee = this.revs_info.length - 1 - this.range.value / 1, ne = this.revs_info[ee]; + await this.showExactRev(ne.rev); + } + revokeURL(_) { + const ee = this.BlobURLs.get(_); + if (ee) URL.revokeObjectURL(ee); + this.BlobURLs.delete(_); + } + generateBlobURL(_, ee) { + this.revokeURL(_); + const ne = URL.createObjectURL(new Blob([ ee ], { + endings: "transparent", + type: "application/octet-stream" + })); + this.BlobURLs.set(_, ne); + return ne; + } + async showExactRev(_) { + const ee = this.plugin.localDatabase, ne = await ee.getDBEntry(this.file, { + rev: _ + }, false, false, true); + this.currentText = ""; + this.currentDeleted = false; + if (false === ne) { + this.currentDeleted = true; + this.info.innerHTML = ""; + this.contentView.innerHTML = `Could not read this revision
    (${_})`; + } else { + this.currentDoc = ne; + this.info.innerHTML = `Modified:${new Date(ne.mtime).toLocaleString()}`; + let _; + const ie = readDocument(ne); + this.currentDeleted = !!ne.deleted; + if (this.showDiff) { + const ne = this.revs_info.length - 1 - (this.range.value / 1 - 1); + if (ne >= 0 && ne < this.revs_info.length) { + const re = this.revs_info[ne].rev, se = await ee.getDBEntry(this.file, { + rev: re + }, false, false, true); + if (false != se) if ("string" == typeof ie) { + _ = ""; + const ee = new import_diff_match_patch.diff_match_patch, ne = readDocument(se), re = ee.diff_main(ne, ie); + ee.diff_cleanupSemantic(re); + for (const ee of re) { + const ne = ee[0], ie = ee[1]; + if (ne == import_diff_match_patch.DIFF_DELETE) _ += "" + escapeStringToHTML(ie) + ""; else if (ne == import_diff_match_patch.DIFF_EQUAL) _ += "" + escapeStringToHTML(ie) + ""; else if (ne == import_diff_match_patch.DIFF_INSERT) _ += "" + escapeStringToHTML(ie) + ""; + } + _ = _.replace(/\n/g, "
    "); + } else if (isImage(this.file)) { + _ = `
    \n
    \n \n \n
    \n
    `; + this.contentView.removeClass("op-pre"); + } + } + } + if (null == _) if ("string" != typeof ie) { + if (isImage(this.file)) { + _ = `
    \n
    \n\n
    \n
    `; + this.contentView.removeClass("op-pre"); + } + } else _ = escapeStringToHTML(ie); + if (null == _) _ = "string" == typeof ie ? escapeStringToHTML(ie) : "Binary file"; + this.contentView.innerHTML = (this.currentDeleted ? "(At this revision, the file has been deleted)\n" : "") + _; + } + } + onOpen() { + const {contentEl: _} = this; + this.titleEl.setText("Document History"); + _.empty(); + this.fileInfo = _.createDiv(""); + this.fileInfo.addClass("op-info"); + const ee = _.createDiv(""); + ee.addClass("op-flex"); + ee.createEl("input", { + type: "range" + }, (_ => { + this.range = _; + _.addEventListener("change", (_ => { + this.loadRevs(); + })); + _.addEventListener("input", (_ => { + this.loadRevs(); + })); + })); + _.createDiv("", (_ => { + _.createEl("label", {}, (_ => { + _.appendChild(createEl("input", { + type: "checkbox" + }, (_ => { + if (this.showDiff) _.checked = true; + _.addEventListener("input", (ee => { + this.showDiff = _.checked; + localStorage.setItem("ols-history-highlightdiff", true == this.showDiff ? "1" : ""); + this.loadRevs(); + })); + }))); + _.appendText("Highlight diff"); + })); + })).addClass("op-info"); + this.info = _.createDiv(""); + this.info.addClass("op-info"); + this.loadFile(this.initialRev); + const ne = _.createDiv({ + text: "Loading old revisions..." + }); + this.contentView = ne; + ne.addClass("op-scrollable"); + ne.addClass("op-pre"); + const ie = _.createDiv(""); + ie.createEl("button", { + text: "Copy to clipboard" + }, (_ => { + _.addClass("mod-cta"); + _.addEventListener("click", (async () => { + await navigator.clipboard.writeText(this.currentText); + Logger("Old content copied to clipboard", LOG_LEVEL_NOTICE); + })); + })); + const focusFile = async _ => { + const ee = this.plugin.app.vault.getFileByPath(_); + if (ee) { + const _ = this.plugin.app.workspace.getLeaf(false); + await _.openFile(ee); + } else Logger("The file could not view on the editor", LOG_LEVEL_NOTICE); + }; + ie.createEl("button", { + text: "Back to this revision" + }, (_ => { + _.addClass("mod-cta"); + _.addEventListener("click", (async () => { + const _ = stripPrefix(this.file); + if (!isValidPath(_)) { + Logger("Path is not valid to write content.", LOG_LEVEL_INFO); + return; + } + if (!this.currentDoc) { + Logger("No active file loaded.", LOG_LEVEL_INFO); + return; + } + const ee = readContent(this.currentDoc); + await this.plugin.vaultAccess.adapterWrite(_, ee); + await focusFile(_); + this.close(); + })); + })); + } + onClose() { + const {contentEl: _} = this; + _.empty(); + this.BlobURLs.forEach((_ => { + console.log(_); + if (_) URL.revokeObjectURL(_); + })); + } +}, WrappedNotice = class { + constructor(_, ee) { + var ne; + let ie = ""; + if (_ instanceof DocumentFragment) ie = null != (ne = _.textContent) ? ne : ""; else ie = _; + Logger(ie, LOG_LEVEL_NOTICE); + } + setMessage(_) { + var ee; + let ne = ""; + if (_ instanceof DocumentFragment) ne = null != (ee = _.textContent) ? ee : ""; else ne = _; + Logger(ne, LOG_LEVEL_NOTICE); + return this; + } + hide() {} +}, _notice = WrappedNotice; + +function setNoticeClass(_) { + _notice = _; +} + +var idbProxyableTypes, cursorAdvanceMethods, StorageEventManager = class {}, StorageEventManagerObsidian = class extends StorageEventManager { + constructor(_) { + super(); + this.totalQueued = reactiveSource(0); + this.batched = reactiveSource(0); + this.processing = reactiveSource(0); + this.bufferedQueuedItems = []; + this.concurrentProcessing = Semaphore(5); + this.waitedSince = new Map; + this.processingCount = 0; + this.plugin = _; + } + get shouldBatchSave() { + return this.plugin.shouldBatchSave; + } + get batchSaveMinimumDelay() { + return this.plugin.batchSaveMinimumDelay; + } + get batchSaveMaximumDelay() { + return this.plugin.batchSaveMaximumDelay; + } + beginWatch() { + const _ = this.plugin; + this.watchVaultChange = this.watchVaultChange.bind(this); + this.watchVaultCreate = this.watchVaultCreate.bind(this); + this.watchVaultDelete = this.watchVaultDelete.bind(this); + this.watchVaultRename = this.watchVaultRename.bind(this); + this.watchVaultRawEvents = this.watchVaultRawEvents.bind(this); + _.registerEvent(_.app.vault.on("modify", this.watchVaultChange)); + _.registerEvent(_.app.vault.on("delete", this.watchVaultDelete)); + _.registerEvent(_.app.vault.on("rename", this.watchVaultRename)); + _.registerEvent(_.app.vault.on("create", this.watchVaultCreate)); + _.registerEvent(_.app.vault.on("raw", this.watchVaultRawEvents)); + } + watchVaultCreate(_, ee) { + this.appendQueue([ { + type: "CREATE", + file: _ + } ], ee); + } + watchVaultChange(_, ee) { + this.appendQueue([ { + type: "CHANGED", + file: _ + } ], ee); + } + watchVaultDelete(_, ee) { + this.appendQueue([ { + type: "DELETE", + file: _ + } ], ee); + } + watchVaultRename(_, ee, ne) { + if (_ instanceof import_obsidian.TFile) this.appendQueue([ { + type: "DELETE", + file: { + path: ee, + mtime: _.stat.mtime, + ctime: _.stat.ctime, + size: _.stat.size, + deleted: true + }, + skipBatchWait: true + }, { + type: "CREATE", + file: _, + skipBatchWait: true + } ], ne); + } + watchVaultRawEvents(_) { + if (this.plugin.settings.useIgnoreFiles && this.plugin.ignoreFiles.some((ee => _.endsWith(ee.trim())))) this.plugin.isTargetFile(_).then((() => this._watchVaultRawEvents(_))); else this._watchVaultRawEvents(_); + } + _watchVaultRawEvents(_) { + if (this.plugin.settings.syncInternalFiles || this.plugin.settings.usePluginSync) if (this.plugin.settings.watchInternalFileChanges) if (_.startsWith(this.plugin.app.vault.configDir)) if (!this.plugin.settings.syncInternalFilesIgnorePatterns.replace(/\n| /g, "").split(",").filter((_ => _)).map((_ => new RegExp(_, "i"))).some((ee => _.match(ee)))) this.appendQueue([ { + type: "INTERNAL", + file: { + path: _, + mtime: 0, + ctime: 0, + size: 0 + } + } ], null); + } + async appendQueue(_, ee) { + var ne; + if (!this.plugin.settings.isConfigured) return; + if (this.plugin.settings.suspendFileWatching) return; + const ie = new Set; + for (const re of _) { + if (shouldBeIgnored(re.file.path)) continue; + const _ = [ 0, 0, 0, 0, 0, 0 ].map((_ => `${Math.floor(1e5 * Math.random())}`)).join("-"), se = re.type, oe = re.file, le = re.oldPath, ue = oe instanceof import_obsidian.TFile ? oe.stat.size : null != (ne = null == oe ? void 0 : oe.size) ? ne : 0; + if (this.plugin.isFileSizeExceeded(ue) && ("CREATE" == se || "CHANGED" == se)) { + Logger(`The storage file has been changed but exceeds the maximum size. Skipping: ${re.file.path}`, LOG_LEVEL_NOTICE); + continue; + } + if (oe instanceof import_obsidian.TFolder) continue; + if (!await this.plugin.isTargetFile(oe.path)) continue; + if (oe instanceof import_obsidian.TFile && ("CREATE" == se || "CHANGED" == se)) { + await delay(10); + if (this.plugin.vaultAccess.recentlyTouched(oe)) continue; + } + const de = oe instanceof import_obsidian.TFile ? { + ctime: oe.stat.ctime, + mtime: oe.stat.mtime, + file: oe, + path: oe.path, + size: oe.stat.size + } : oe; + let fe; + if (re.cachedData) fe = re.cachedData; + this.enqueue({ + type: se, + args: { + file: de, + oldPath: le, + cache: fe, + ctx: ee + }, + skipBatchWait: re.skipBatchWait, + key: _ + }); + ie.add(oe.path); + if (le) ie.add(le); + } + for (const _ of ie) fireAndForget((() => this.startStandingBy(_))); + } + enqueue(_) { + const ee = _.args.file.path; + if (this.shouldBatchSave) { + Logger(`Request cancel for waiting of previous ${ee}`, LOG_LEVEL_DEBUG); + finishWaitingForTimeout(`storage-event-manager-batchsave-${ee}`); + } + this.bufferedQueuedItems.push(_); + if ("DELETE" == _.type || "RENAME" == _.type) return this.flushQueue(); + } + async startStandingBy(_) { + await skipIfDuplicated(`storage-event-manager-${_}`, (async () => { + Logger(`Processing ${_}: Starting`, LOG_LEVEL_DEBUG); + const ee = await this.concurrentProcessing.acquire(); + try { + Logger(`Processing ${_}: Started`, LOG_LEVEL_DEBUG); + let ee = false; + do { + const ne = this.bufferedQueuedItems.find((ee => ee.args.file.path == _)); + if (void 0 === ne) { + ee = true; + break; + } + const ie = ne.type, re = ne.type; + if (!ne.cancelled) { + if (!ne.skipBatchWait) { + if (this.shouldBatchSave && ("CREATE" == re || "CHANGED" == re)) { + const ee = this.waitedSince.get(_); + let re = true; + const se = Date.now(); + if (void 0 !== ee) if (ee + 1e3 * this.batchSaveMaximumDelay < se) { + Logger(`Processing ${_}: Could not wait no more: ${ie}`, LOG_LEVEL_INFO); + re = false; + } + if (re) { + if (void 0 === ee) this.waitedSince.set(_, se); + ne.batched = true; + Logger(`Processing ${_}: Waiting for batch save delay: ${ie}`, LOG_LEVEL_DEBUG); + this.updateStatus(); + if (!await waitForTimeout(`storage-event-manager-batchsave-${_}`, 1e3 * this.batchSaveMinimumDelay)) { + Logger(`Processing ${_}: Cancelled by new queue: ${ie}`, LOG_LEVEL_DEBUG); + this.cancelStandingBy(ne); + continue; + } + } + } + } else Logger(`Processing ${_}:Requested to perform immediately ${_}: ${ie}`, LOG_LEVEL_DEBUG); + Logger(`Processing ${_}: Request main to process: ${ie}`, LOG_LEVEL_DEBUG); + this.requestProcessQueue(ne); + } else { + Logger(`Processing ${_}: Cancelled (scheduled): ${ie}`, LOG_LEVEL_DEBUG); + this.cancelStandingBy(ne); + } + } while (!ee); + } finally { + ee(); + } + Logger(`Processing ${_}: Finished`, LOG_LEVEL_DEBUG); + })); + } + cancelStandingBy(_) { + this.bufferedQueuedItems.remove(_); + this.updateStatus(); + } + async requestProcessQueue(_) { + try { + this.processingCount++; + this.bufferedQueuedItems.remove(_); + this.updateStatus(); + this.waitedSince.delete(_.args.file.path); + await this.plugin.handleFileEvent(_); + } finally { + this.processingCount--; + this.updateStatus(); + } + } + isWaiting(_) { + return isWaitingForTimeout(`storage-event-manager-batchsave-${_}`); + } + flushQueue() { + this.bufferedQueuedItems.forEach((_ => _.skipBatchWait = true)); + finishAllWaitingForTimeout("storage-event-manager-batchsave-", true); + } + cancelQueue(_) { + this.bufferedQueuedItems.forEach((ee => { + if (ee.key === _) ee.skipBatchWait = true; + })); + } + updateStatus() { + const _ = this.bufferedQueuedItems.filter((_ => !_.cancelled)); + this.batched.value = _.filter((_ => _.batched && !_.skipBatchWait)).length; + this.processing.value = this.processingCount; + this.totalQueued.value = _.length - this.batched.value; + } +}, LiveSyncLocalDB = class { + constructor(_, ee) { + this.isReady = false; + this.xxhash64 = false; + this.hashCaches = new LRUCache(10, 1e3); + this.changeHandler = null; + this.chunkVersion = -1; + this.maxChunkVersion = -1; + this.minChunkVersion = -1; + this.needScanning = false; + this._chunkCollectProcessor = new QueueProcessor((async _ => { + try { + const ee = await this._collectChunks(_, false); + if (ee) ee.forEach((_ => sendValue(`chunk-fetch-${_._id}`, _))); else throw new Error("Failed: CollectChunksInternal"); + } catch (ee) { + Logger("Exception raised while retrieving chunks", LOG_LEVEL_NOTICE); + Logger(ee, LOG_LEVEL_VERBOSE); + _.forEach((_ => sendValue(`chunk-fetch-${_}`, []))); + } + }), { + batchSize: 100, + interval: 100, + concurrentLimit: 1, + maintainDelay: true, + suspended: false, + totalRemainingReactiveSource: collectingChunks + }); + this.auth = { + username: "", + password: "" + }; + this.dbname = _; + this.env = ee; + this.refreshSettings(); + } + get isOnDemandChunkEnabled() { + if (this.settings.remoteType !== REMOTE_COUCHDB) return false; else return this.settings.readChunksOnline; + } + onunload() { + var _, ee; + this.env.beforeOnUnload(this); + null == (_ = this.changeHandler) || _.cancel(); + null == (ee = this.changeHandler) || ee.removeAllListeners(); + this.localDatabase.removeAllListeners(); + } + refreshSettings() { + const _ = this.env.getSettings(); + this.settings = _; + this.hashCaches = new LRUCache(_.hashCacheMaxCount, _.hashCacheMaxAmount); + } + id2path(_, ee, ne) { + return this.env.id2path(_, ee, ne); + } + async path2id(_, ee) { + return await this.env.path2id(_, ee); + } + async close() { + var _, ee; + Logger("Database closed (by close)"); + this.isReady = false; + null == (_ = this.changeHandler) || _.cancel(); + null == (ee = this.changeHandler) || ee.removeAllListeners(); + if (null != this.localDatabase) await this.localDatabase.close(); + this.env.onClose(this); + } + async initializeDatabase() { + var _, ee; + await this.prepareHashFunctions(); + if (null != this.localDatabase) await this.localDatabase.close(); + null == (_ = this.changeHandler) || _.cancel(); + null == (ee = this.changeHandler) || ee.removeAllListeners(); + this.localDatabase = null; + this.localDatabase = this.env.createPouchDBInstance(this.dbname + "-livesync-v2", { + auto_compaction: false, + revs_limit: 100, + deterministic_revs: true + }); + await this.env.onInitializeDatabase(this); + Logger("Opening Database..."); + Logger("Database info", LOG_LEVEL_VERBOSE); + Logger(await this.localDatabase.info(), LOG_LEVEL_VERBOSE); + this.localDatabase.on("close", (() => { + var _; + Logger("Database closed."); + this.isReady = false; + this.localDatabase.removeAllListeners(); + null == (_ = this.env.getReplicator()) || _.closeReplication(); + })); + const ne = this.localDatabase.changes({ + since: "now", + live: true, + filter: _ => "leaf" == _.type + }).on("change", (_ => { + if (!_.deleted) sendValue(`leaf-${_.id}`, _.doc); + })); + this.changeHandler = ne; + this.isReady = true; + Logger("Database is now ready."); + return true; + } + async prepareHashFunctions() { + if (null == this.h32) if ("sha1" != this.settings.hashAlg) try { + const {h32ToString: _, h32Raw: ee, h32: ne, h64: ie} = await e2(); + this.xxhash64 = ie; + this.xxhash32 = ne; + this.h32 = _; + this.h32Raw = ee; + Logger("Newer xxhash has been initialised", LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Could not initialise xxhash: use v1", LOG_LEVEL_VERBOSE); + Logger(_); + try { + this.xxhash64 = false; + const {h32: _, h32Raw: ee} = await xxhash_wasm_default(); + this.h32 = _; + this.h32Raw = ee; + this.xxhash32 = _ => ee(writeString(_)); + } catch (_) { + Logger("Could not initialise xxhash: use sha1F", LOG_LEVEL_VERBOSE); + Logger(_); + this.settings.hashAlg = "sha1"; + } + } else Logger("Fallback(SHA1) is used for hashing", LOG_LEVEL_VERBOSE); + } + async readChunk(_, ee) { + const ne = this.hashCaches.get(_); + if (ne) return ne; + let ie; + try { + ie = await this.localDatabase.get(_); + } catch (_) { + if (!isErrorOfMissingDoc(_)) throw _; + } + if (void 0 === ie && 0 != ee) { + const ne = await waitForValue(`leaf-${_}`, ee); + if (ne === RESULT_TIMED_OUT) throw new Error(`Timed out: ${_}`); + ie = ne; + } + if (void 0 === ie) throw new Error(`Missing chunks of: ${_}`); + if ("leaf" != ie.type) throw new Error(`Corrupted chunk has been detected: ${_}`); + this.hashCaches.set(_, ie.data); + return ie.data; + } + async getDBLeafWithTimeout(_, ee) { + try { + return await this.readChunk(_, ee); + } catch (_) { + Logger("Something went wrong while retrieving chunks"); + Logger(_, LOG_LEVEL_VERBOSE); + throw _; + } + } + getDBLeaf(_, ee) { + return this.getDBLeafWithTimeout(_, ee ? LEAF_WAIT_TIMEOUT : 0); + } + async getDBEntryMeta(_, ee, ne = false) { + return getDBEntryMeta(this, _, ee, ne); + } + async getDBEntry(_, ee, ne = false, ie = true, re = false) { + return getDBEntry(this, _, ee, ne, ie, re); + } + async getDBEntryFromMeta(_, ee, ne = false, ie = true, re = false) { + return getDBEntryFromMeta(this, _, ee, ne, ie, re); + } + async deleteDBEntry(_, ee) { + return deleteDBEntry(this, _, ee); + } + async deleteDBEntryPrefix(_) { + return deleteDBEntryPrefix(this, _); + } + async putDBEntry(_) { + return putDBEntry(this, _); + } + async resetDatabase() { + var _, ee; + null == (_ = this.changeHandler) || _.cancel(); + null == (ee = this.changeHandler) || ee.removeAllListeners(); + this.env.getReplicator().closeReplication(); + await this.env.onResetDatabase(this); + Logger("Database closed for reset Database."); + this.isReady = false; + await this.localDatabase.destroy(); + this.localDatabase = null; + await this.initializeDatabase(); + Logger("Local Database Reset", LOG_LEVEL_NOTICE); + } + isTargetFile(_) { + const ee = _.startsWith("i:") ? _.substring(2) : _; + if (ee.startsWith("ix:")) return true; + if (ee.startsWith("ps:")) return true; + if (ee.includes(":")) return false; + if (this.settings.syncOnlyRegEx) { + const _ = new RegExp(this.settings.syncOnlyRegEx); + if (!ee.match(_)) return false; + } + if (this.settings.syncIgnoreRegEx) { + const _ = new RegExp(this.settings.syncIgnoreRegEx); + if (ee.match(_)) return false; + } + return true; + } + async collectChunks(_, ee = false, ne) { + const ie = await this.collectChunksWithCache(_); + if (0 == ie.filter((_ => !_.chunk)).map((_ => _.id)).length) return ie.map((_ => _.chunk)); + this._chunkCollectProcessor.batchSize = this.settings.concurrencyOfReadChunksOnline; + this._chunkCollectProcessor.interval = this.settings.minimumIntervalOfReadChunksOnline; + this._chunkCollectProcessor.enqueueAll(_); + const re = _.map((_ => waitForValue(`chunk-fetch-${_}`))); + return (await Promise.all(re)).filter(onlyNot(RESULT_TIMED_OUT)); + } + async _collectChunks(_, ee = false) { + const ne = await this.collectChunksWithCache(_), ie = ne.filter((_ => !_.chunk)).map((_ => _.id)); + if (0 == ie.length) return ne.map((_ => _.chunk)); + const re = await this.env.getReplicator().fetchRemoteChunks(ie, ee); + if (false == re) { + Logger("Could not fetch chunks from the server. ", ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_VERBOSE, "fetch"); + return false; + } + re.forEach((_ => this.hashCaches.set(_._id, _.data))); + await this.localDatabase.bulkDocs(re, { + new_edits: false + }); + const se = Object.fromEntries([ ...ne.map((_ => _.chunk)).filter((_ => false !== _)), ...re ].map((_ => [ _._id, _ ]))), oe = _.map((_ => { + var ee; + return null != (ee = null == se ? void 0 : se[_]) ? ee : void 0; + })); + if (oe.some((_ => void 0 === _))) return false; else return oe; + } + async* findAllChunks(_) { + const ee = [ () => this.findEntries("h:", "h:􏿿", null != _ ? _ : {}) ]; + for (const _ of ee) { + const ee = _(); + for await (const _ of ee) yield _; + } + } + async* findEntries(_, ee, ne) { + let ie = _, re = this.allDocsRaw({ + limit: 100, + startkey: ie, + endkey: ee, + include_docs: true, + ...ne + }); + do { + const _ = await re; + if (0 === _.rows.length) break; + ie = `${_.rows[_.rows.length - 1].id}`; + re = this.allDocsRaw({ + limit: 100, + skip: 1, + startkey: ie, + endkey: ee, + include_docs: true, + ...ne + }); + for (const ee of _.rows) { + const _ = ee.doc; + if ("type" in _) if ("newnote" == _.type || "plain" == _.type) yield _; + } + } while ("" != ie); + } + async* findAllDocs(_) { + const ee = [ () => this.findEntries("", "_", null != _ ? _ : {}), () => this.findEntries("_􏿿", "h:", null != _ ? _ : {}), () => this.findEntries("h:􏿿", "", null != _ ? _ : {}) ]; + for (const _ of ee) { + const ee = _(); + for await (const _ of ee) yield _; + } + } + async* findEntryNames(_, ee, ne) { + let ie = _, re = this.allDocsRaw({ + limit: 100, + startkey: ie, + endkey: ee, + ...ne + }); + do { + const _ = await re; + if (0 == _.rows.length) { + ie = ""; + break; + } + ie = `${_.rows[_.rows.length - 1].key}`; + re = this.allDocsRaw({ + limit: 100, + skip: 1, + startkey: ie, + endkey: ee, + ...ne + }); + for (const ee of _.rows) yield ee.id; + } while ("" != ie); + } + async* findAllDocNames(_) { + const ee = [ () => this.findEntryNames("", "_", null != _ ? _ : {}), () => this.findEntryNames("_􏿿", "h:", null != _ ? _ : {}), () => this.findEntryNames("h:􏿿", "i:", null != _ ? _ : {}), () => this.findEntryNames("i:􏿿", "ix:", null != _ ? _ : {}), () => this.findEntryNames("ix:􏿿", "ps:", null != _ ? _ : {}), () => this.findEntryNames("ps:􏿿", "", null != _ ? _ : {}) ]; + for (const _ of ee) { + const ee = _(); + for await (const _ of ee) if (!_.startsWith("_")) if (_ != VERSIONING_DOCID) yield _; + } + } + async* findAllNormalDocs(_) { + const ee = [ () => this.findEntries("", "_", null != _ ? _ : {}), () => this.findEntries("_􏿿", "h:", null != _ ? _ : {}), () => this.findEntries("h:􏿿", "i:", null != _ ? _ : {}), () => this.findEntries("i:􏿿", "ix:", null != _ ? _ : {}), () => this.findEntries("ix:􏿿", "ps:", null != _ ? _ : {}), () => this.findEntries("ps:􏿿", "", null != _ ? _ : {}) ]; + for (const _ of ee) { + const ee = _(); + for await (const _ of ee) if (!_._id.startsWith("_")) if ("newnote" == _.type || "plain" == _.type) yield _; + } + } + async removeRevision(_, ee) { + try { + const ne = await this.localDatabase.get(_, { + rev: ee + }); + ne._deleted = true; + await this.localDatabase.put(ne); + return true; + } catch (ne) { + if (isErrorOfMissingDoc(ne)) Logger(`Remove revision: Missing target revision, ${_}-${ee}`, LOG_LEVEL_VERBOSE); + } + return false; + } + getRaw(_, ee) { + return this.localDatabase.get(_, ee || {}); + } + removeRaw(_, ee, ne) { + return this.localDatabase.remove(_, ee, ne || {}); + } + putRaw(_, ee) { + return this.localDatabase.put(_, ee || {}); + } + allDocsRaw(_) { + return this.localDatabase.allDocs(_); + } + bulkDocsRaw(_, ee) { + return this.localDatabase.bulkDocs(_, ee || {}); + } + async collectChunksWithCache(_) { + const ee = _.map((_ => this.hashCaches.has(_) ? { + id: _, + chunk: this.hashCaches.get(_) + } : { + id: _, + chunk: false + })), ne = ee.filter((_ => false === _.chunk)); + if (ne.length > 0) { + const _ = await this.localDatabase.allDocs({ + keys: ne.map((_ => _.id)), + include_docs: true + }), ie = _.rows.filter((_ => !("error" in _))).map((_ => _.doc)), re = _.rows.filter((_ => "error" in _)).map((_ => _.key)), se = (await this.localDatabase.allDocs({ + keys: re.map((_ => `_local/${_}`)), + include_docs: true + })).rows.filter((_ => !("error" in _))).map((_ => ({ + ..._.doc, + _id: _.id.substring(7) + }))), oe = Object.fromEntries(se.map((_ => [ _._id, _.data ]))); + for (const _ of ie) { + oe[_._id] = _.data; + this.hashCaches.set(_._id, _.data); + } + return ee.map((_ => ({ + id: _.id, + chunk: false !== _.chunk ? _.chunk : _.id in oe ? oe[_.id] : false + }))).map((_ => ({ + id: _.id, + chunk: false !== _.chunk ? { + _id: _.id, + data: _.chunk, + type: "leaf" + } : false + }))); + } else return ee.map((_ => ({ + id: _.id, + chunk: { + _id: _.id, + data: _.chunk, + type: "leaf" + } + }))); + } +}, instanceOfAny = (_, ee) => ee.some((ee => _ instanceof ee)); + +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 = new WeakMap, transformCache = new WeakMap, reverseTransformCache = new WeakMap; + +function promisifyRequest(_) { + const ee = new Promise(((ee, ne) => { + const unlisten = () => { + _.removeEventListener("success", success); + _.removeEventListener("error", error); + }, success = () => { + ee(wrap(_.result)); + unlisten(); + }, error = () => { + ne(_.error); + unlisten(); + }; + _.addEventListener("success", success); + _.addEventListener("error", error); + })); + reverseTransformCache.set(ee, _); + return ee; +} + +function cacheDonePromiseForTransaction(_) { + if (transactionDoneMap.has(_)) return; + const ee = new Promise(((ee, ne) => { + const unlisten = () => { + _.removeEventListener("complete", complete); + _.removeEventListener("error", error); + _.removeEventListener("abort", error); + }, complete = () => { + ee(); + unlisten(); + }, error = () => { + ne(_.error || new DOMException("AbortError", "AbortError")); + unlisten(); + }; + _.addEventListener("complete", complete); + _.addEventListener("error", error); + _.addEventListener("abort", error); + })); + transactionDoneMap.set(_, ee); +} + +var idbProxyTraps = { + get(_, ee, ne) { + if (_ instanceof IDBTransaction) { + if ("done" === ee) return transactionDoneMap.get(_); + if ("store" === ee) return ne.objectStoreNames[1] ? void 0 : ne.objectStore(ne.objectStoreNames[0]); + } + return wrap(_[ee]); + }, + set(_, ee, ne) { + _[ee] = ne; + return true; + }, + has(_, ee) { + if (_ instanceof IDBTransaction && ("done" === ee || "store" === ee)) return true; else return ee in _; + } +}; + +function replaceTraps(_) { + idbProxyTraps = _(idbProxyTraps); +} + +function wrapFunction(_) { + if (getCursorAdvanceMethods().includes(_)) return function(...ee) { + _.apply(unwrap(this), ee); + return wrap(this.request); + }; else return function(...ee) { + return wrap(_.apply(unwrap(this), ee)); + }; +} + +function transformCachableValue(_) { + if ("function" == typeof _) return wrapFunction(_); + if (_ instanceof IDBTransaction) cacheDonePromiseForTransaction(_); + if (instanceOfAny(_, getIdbProxyableTypes())) return new Proxy(_, idbProxyTraps); else return _; +} + +function wrap(_) { + if (_ instanceof IDBRequest) return promisifyRequest(_); + if (transformCache.has(_)) return transformCache.get(_); + const ee = transformCachableValue(_); + if (ee !== _) { + transformCache.set(_, ee); + reverseTransformCache.set(ee, _); + } + return ee; +} + +var unwrap = _ => reverseTransformCache.get(_); + +function openDB(_, ee, {blocked: ne, upgrade: ie, blocking: re, terminated: se} = {}) { + const oe = indexedDB.open(_, ee), le = wrap(oe); + if (ie) oe.addEventListener("upgradeneeded", (_ => { + ie(wrap(oe.result), _.oldVersion, _.newVersion, wrap(oe.transaction), _); + })); + if (ne) oe.addEventListener("blocked", (_ => ne(_.oldVersion, _.newVersion, _))); + le.then((_ => { + if (se) _.addEventListener("close", (() => se())); + if (re) _.addEventListener("versionchange", (_ => re(_.oldVersion, _.newVersion, _))); + })).catch((() => {})); + return le; +} + +function deleteDB(_, {blocked: ee} = {}) { + const ne = indexedDB.deleteDatabase(_); + if (ee) ne.addEventListener("blocked", (_ => ee(_.oldVersion, _))); + return wrap(ne).then((() => {})); +} + +var readMethods = [ "get", "getKey", "getAll", "getAllKeys", "count" ], writeMethods = [ "put", "add", "delete", "clear" ], cachedMethods = new Map; + +function getMethod(_, ee) { + if (!(_ instanceof IDBDatabase && !(ee in _) && "string" == typeof ee)) return; + if (cachedMethods.get(ee)) return cachedMethods.get(ee); + const ne = ee.replace(/FromIndex$/, ""), ie = ee !== ne, re = writeMethods.includes(ne); + if (!(ne in (ie ? IDBIndex : IDBObjectStore).prototype) || !(re || readMethods.includes(ne))) return; + const method = async function(_, ...ee) { + const se = this.transaction(_, re ? "readwrite" : "readonly"); + let oe = se.store; + if (ie) oe = oe.index(ee.shift()); + return (await Promise.all([ oe[ne](...ee), re && se.done ]))[0]; + }; + cachedMethods.set(ee, method); + return method; +} + +replaceTraps((_ => ({ + ..._, + get: (ee, ne, ie) => getMethod(ee, ne) || _.get(ee, ne, ie), + has: (ee, ne) => !!getMethod(ee, ne) || _.has(ee, ne) +}))); + +var advanceMethodProps = [ "continue", "continuePrimaryKey", "advance" ], methodMap = {}, advanceResults = new WeakMap, ittrProxiedCursorToOriginalProxy = new WeakMap, cursorIteratorTraps = { + get(_, ee) { + if (!advanceMethodProps.includes(ee)) return _[ee]; + let ne = methodMap[ee]; + if (!ne) ne = methodMap[ee] = function(..._) { + advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[ee](..._)); + }; + return ne; + } +}; + +async function* iterate(..._) { + let ee = this; + if (!(ee instanceof IDBCursor)) ee = await ee.openCursor(..._); + if (!ee) return; + const ne = new Proxy(ee, cursorIteratorTraps); + ittrProxiedCursorToOriginalProxy.set(ne, ee); + reverseTransformCache.set(ne, unwrap(ee)); + for (;ee; ) { + yield ne; + ee = await (advanceResults.get(ne) || ee.continue()); + advanceResults.delete(ne); + } +} + +function isIteratorProp(_, ee) { + return ee === Symbol.asyncIterator && instanceOfAny(_, [ IDBIndex, IDBObjectStore, IDBCursor ]) || "iterate" === ee && instanceOfAny(_, [ IDBIndex, IDBObjectStore ]); +} + +replaceTraps((_ => ({ + ..._, + get(ee, ne, ie) { + if (isIteratorProp(ee, ne)) return iterate; else return _.get(ee, ne, ie); + }, + has: (ee, ne) => isIteratorProp(ee, ne) || _.has(ee, ne) +}))); + +var databaseCache = {}, OpenKeyValueDatabase = async _ => { + if (_ in databaseCache) { + databaseCache[_].close(); + delete databaseCache[_]; + } + const ee = _, ne = openDB(_, 1, { + upgrade(_) { + _.createObjectStore(ee); + } + }), ie = await ne; + databaseCache[_] = ie; + return { + get: async _ => await ie.get(ee, _), + set: async (_, ne) => await ie.put(ee, ne, _), + del: async _ => await ie.delete(ee, _), + clear: async () => await ie.clear(ee), + keys: async (_, ne) => await ie.getAllKeys(ee, _, ne), + close() { + delete databaseCache[_]; + return ie.close(); + }, + async destroy() { + delete databaseCache[_]; + ie.close(); + await deleteDB(_); + } + }; +}, HiddenFileSync = class extends LiveSyncCommands { + constructor() { + super(...arguments); + this.periodicInternalFileScanProcessor = new PeriodicProcessor(this.plugin, (async () => this.settings.syncInternalFiles && this.localDatabase.isReady && await this.syncInternalFilesAndDatabase("push", false))); + this.internalFileProcessor = new QueueProcessor((async _ => { + Logger(`START :Applying hidden ${_.length} files change`, LOG_LEVEL_VERBOSE); + await this.syncInternalFilesAndDatabase("pull", false, false, _); + Logger(`DONE :Applying hidden ${_.length} files change`, LOG_LEVEL_VERBOSE); + }), { + batchSize: 100, + concurrentLimit: 1, + delay: 10, + yieldThreshold: 100, + suspended: false, + totalRemainingReactiveSource: hiddenFilesEventCount + }); + this.recentProcessedInternalFiles = []; + this.conflictResolutionProcessor = new QueueProcessor((async _ => { + var ee, ne, ie; + const re = _[0]; + sendSignal(`cancel-internal-conflict:${re}`); + try { + const _ = await this.path2id(re, ICHeader), se = await this.localDatabase.getRaw(_, { + conflicts: true + }); + if (void 0 === se._conflicts) return []; + if (0 == se._conflicts.length) return []; + Logger(`Hidden file conflicted:${re}`); + const oe = se._conflicts.sort(((_, ee) => Number(_.split("-")[0]) - Number(ee.split("-")[0]))), le = se._rev, ue = oe[0]; + if (re.endsWith(".json")) { + const de = oe[0], fe = Number(de.split("-")[0]), he = null != (ie = null == (ne = null == (ee = (await this.localDatabase.getRaw(_, { + revs_info: true + }))._revs_info) ? void 0 : ee.filter((_ => "available" == _.status && Number(_.rev.split("-")[0]) < fe)).first()) ? void 0 : ne.rev) ? ie : "", pe = await this.plugin.mergeObject(re, he, se._rev, de); + if (pe) { + Logger(`Object merge:${re}`, LOG_LEVEL_INFO); + const ee = stripAllPrefixes(re); + if (!await this.plugin.vaultAccess.adapterExists(ee)) await this.vaultAccess.ensureDirectory(ee); + await this.plugin.vaultAccess.adapterWrite(ee, pe); + const ne = await this.vaultAccess.adapterStat(ee); + if (!ne) throw new Error(`conflictResolutionProcessor: Failed to stat file ${ee}`); + await this.storeInternalFileToDatabase({ + path: ee, + ...ne + }); + await this.extractInternalFileFromDatabase(ee); + await this.localDatabase.removeRevision(_, ue); + this.conflictResolutionProcessor.enqueue(re); + return []; + } else Logger("Object merge is not applicable.", LOG_LEVEL_VERBOSE); + return [ { + path: re, + revA: le, + revB: ue, + id: _, + doc: se + } ]; + } + await this.resolveByNewerEntry(_, re, se, le, ue); + return []; + } catch (_) { + Logger(`Failed to resolve conflict (Hidden): ${re}`); + Logger(_, LOG_LEVEL_VERBOSE); + return []; + } + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 5, + delay: 10, + keepResultUntilDownstreamConnected: true, + yieldThreshold: 10, + pipeTo: new QueueProcessor((async _ => { + const {id: ee, doc: ne, path: ie, revA: re, revB: se} = _[0], oe = await this.localDatabase.getDBEntry(ie, { + rev: re + }), le = await this.localDatabase.getDBEntry(ie, { + rev: se + }); + if (false == oe || false == le) await this.resolveByNewerEntry(ee, ie, ne, re, se); else if (await this.showJSONMergeDialogAndMerge(oe, le)) this.conflictResolutionProcessor.enqueue(ie); + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 1, + delay: 10, + keepResultUntilDownstreamConnected: false, + yieldThreshold: 10 + }) + }); + } + get kvDB() { + return this.plugin.kvDB; + } + getConflictedDoc(_, ee) { + return this.plugin.getConflictedDoc(_, ee); + } + onunload() { + var _; + null == (_ = this.periodicInternalFileScanProcessor) || _.disable(); + } + onload() { + this.plugin.addCommand({ + id: "livesync-scaninternal", + name: "Sync hidden files", + callback: () => { + this.syncInternalFilesAndDatabase("safe", true); + } + }); + } + async onInitializeDatabase(_) { + if (this.settings.syncInternalFiles) try { + Logger("Synchronizing hidden files..."); + await this.syncInternalFilesAndDatabase("push", _); + Logger("Synchronizing hidden files done"); + } catch (_) { + Logger("Synchronizing hidden files failed"); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + async beforeReplicate(_) { + if (this.localDatabase.isReady && this.settings.syncInternalFiles && this.settings.syncInternalFilesBeforeReplication && !this.settings.watchInternalFileChanges) await this.syncInternalFilesAndDatabase("push", _); + } + async onResume() { + var _; + null == (_ = this.periodicInternalFileScanProcessor) || _.disable(); + if (!this.plugin.suspended) { + if (this.settings.syncInternalFiles) await this.syncInternalFilesAndDatabase("safe", false); + this.periodicInternalFileScanProcessor.enable(this.settings.syncInternalFiles && this.settings.syncInternalFilesInterval ? 1e3 * this.settings.syncInternalFilesInterval : 0); + } + } + parseReplicationResultItem(_) { + return false; + } + realizeSettingSyncMode() { + var _; + null == (_ = this.periodicInternalFileScanProcessor) || _.disable(); + if (this.plugin.suspended) return Promise.resolve(); + if (!this.plugin.isReady) return Promise.resolve(); + this.periodicInternalFileScanProcessor.enable(this.settings.syncInternalFiles && this.settings.syncInternalFilesInterval ? 1e3 * this.settings.syncInternalFilesInterval : 0); + return Promise.resolve(); + } + procInternalFile(_) { + this.internalFileProcessor.enqueue(_); + } + async watchVaultRawEventsAsync(_) { + var ee, ne, ie; + if (!this.settings.syncInternalFiles) return; + const re = normalizePath(this.app.vault.configDir); + if ((!this.settings.usePluginSync ? [] : Object.values(this.settings.pluginSyncExtendedSetting).filter((_ => _.mode == MODE_SELECTIVE || _.mode == MODE_PAUSED)).map((_ => _.files)).flat().map((_ => `${re}/${_}`.toLowerCase()))).some((ee => ee.startsWith(_.toLowerCase())))) { + Logger(`Hidden file skipped: ${_} is synchronized in customization sync.`, LOG_LEVEL_VERBOSE); + return; + } + const se = await this.vaultAccess.adapterStat(_); + if (null != se && "file" != se.type) return; + const oe = null == se ? 0 : null != (ee = null == se ? void 0 : se.mtime) ? ee : 0, le = ~~(oe / 1e3), ue = `${_}-${le}`; + if (0 != oe && this.recentProcessedInternalFiles.contains(ue)) return; + this.recentProcessedInternalFiles = [ ue, ...this.recentProcessedInternalFiles ].slice(0, 100); + const de = addPrefix(_, ICHeader), fe = await this.localDatabase.getDBEntryMeta(de); + if (~~((fe && fe.mtime || 0) / 1e3) != le) if (0 == le) await this.deleteInternalFileOnDatabase(_); else await this.storeInternalFileToDatabase({ + path: _, + mtime: oe, + ctime: null != (ne = null == se ? void 0 : se.ctime) ? ne : oe, + size: null != (ie = null == se ? void 0 : se.size) ? ie : 0 + }); + } + async resolveConflictOnInternalFiles() { + const _ = this.localDatabase.findEntries(ICHeader, ICHeaderEnd, { + conflicts: true + }); + this.conflictResolutionProcessor.suspend(); + try { + for await (const ee of _) if ("_conflicts" in ee) if (isInternalMetadata(ee._id)) this.conflictResolutionProcessor.enqueue(ee.path); + } catch (_) { + Logger("something went wrong on resolving all conflicted internal files"); + Logger(_, LOG_LEVEL_VERBOSE); + } + await this.conflictResolutionProcessor.startPipeline().waitForAllProcessed(); + } + async resolveByNewerEntry(_, ee, ne, ie, re) { + var se; + const oe = await this.localDatabase.getRaw(_, { + rev: re + }), le = ("mtime" in ne && ne.mtime || 0) < ("mtime" in oe && oe.mtime || 0) ? ie : re; + await this.localDatabase.removeRevision(_, le); + Logger(`Older one has been deleted:${ee}`); + if (0 === (null == (se = (await this.localDatabase.getRaw(_, { + conflicts: true + }))._conflicts) ? void 0 : se.length)) await this.extractInternalFileFromDatabase(stripAllPrefixes(ee)); else this.conflictResolutionProcessor.enqueue(ee); + } + queueConflictCheck(_) { + this.conflictResolutionProcessor.enqueue(_); + } + async syncInternalFilesAndDatabase(_, ee, ne = false, ie = false) { + await this.resolveConflictOnInternalFiles(); + const re = ee ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO; + Logger("Scanning hidden files.", re, "sync_internal"); + const se = this.settings.syncInternalFilesIgnorePatterns.replace(/\n| /g, "").split(",").filter((_ => _)).map((_ => new RegExp(_, "i"))), oe = normalizePath(this.app.vault.configDir); + let le = ne ? ne : await this.scanInternalFiles(); + const ue = !this.settings.usePluginSync ? [] : Object.values(this.settings.pluginSyncExtendedSetting).filter((_ => _.mode == MODE_SELECTIVE || _.mode == MODE_PAUSED)).map((_ => _.files)).flat().map((_ => `${oe}/${_}`.toLowerCase())); + le = le.filter((_ => ue.every((ee => !_.path.toLowerCase().startsWith(ee))))); + const de = (await this.localDatabase.allDocsRaw({ + startkey: ICHeader, + endkey: ICHeaderEnd, + include_docs: true + })).rows.map((_ => _.doc)).filter((_ => !_.deleted)), fe = [ ...new Set([ ...le.map((_ => normalizePath(_.path))), ...de.map((_ => stripAllPrefixes(this.getPath(_)))) ]) ].filter((_ => !ie || ie && -1 !== ie.indexOf(_))).filter((_ => ue.every((ee => !_.toLowerCase().startsWith(ee))))), he = fe.length; + let pe = 0, ge = 0; + const me = {}, countUpdatedFolder = _ => { + const ee = _.split("/"); + let ne = ee.shift(), ie = ""; + ge++; + for (;ne; ) { + ie += ("" != ie ? "/" : "") + ne; + ie = normalizePath(ie); + if (!(ie in me)) me[ie] = 0; + me[ie]++; + ne = ee.shift(); + } + }; + let ye = {}; + ye = await this.kvDB.get("diff-caches-internal") || {}; + const Se = le.reduce(((_, ee) => { + _[ee.path] = ee; + return _; + }), {}), Ee = de.reduce(((_, ee) => { + _[stripAllPrefixes(this.getPath(ee))] = ee; + return _; + }), {}); + await new QueueProcessor((async _ => { + const ee = _[0]; + pe++; + if (pe % 100 == 0) Logger(`Hidden file: ${pe}/${he}`, re, "sync_internal"); + if (!ee) return []; + if (se.some((_ => ee.match(_)))) return []; + if (await this.plugin.isIgnoredByIgnoreFiles(ee)) return []; + const ne = ee in Se ? Se[ee] : void 0, ie = ee in Ee ? Ee[ee] : void 0; + return [ { + filename: ee, + fileOnStorage: ne, + fileOnDatabase: ie + } ]; + }), { + suspended: true, + batchSize: 1, + concurrentLimit: 10, + delay: 0, + totalRemainingReactiveSource: hiddenFilesProcessingCount + }).pipeTo(new QueueProcessor((async ee => { + const {filename: ne, fileOnStorage: ie, fileOnDatabase: re} = ee[0]; + if (ie && re) { + const ee = ne in ye ? ye[ne] : { + storageMtime: 0, + docMtime: 0 + }; + if ("pullForce" != _ && "pushForce" != _ && re.mtime == ee.docMtime && ie.mtime == ee.storageMtime) return; + const se = function compareMTime2(_, ee) { + return ~~(_ / 1e3) - ~~(ee / 1e3); + }(ie.mtime, re.mtime); + if (se > 0 || "pushForce" == _) await this.storeInternalFileToDatabase(ie); + if (se < 0 || "pullForce" == _) if (!await this.extractInternalFileFromDatabase(ne)) return; + ee.docMtime = re.mtime; + ee.storageMtime = ie.mtime; + ye[ne] = ee; + countUpdatedFolder(ne); + } else if (!ie && re) { + if ("push" == _ || "pushForce" == _) { + if (re.deleted) return; + await this.deleteInternalFileOnDatabase(ne, false); + } else if ("pull" == _ || "pullForce" == _) { + if (await this.extractInternalFileFromDatabase(ne)) countUpdatedFolder(ne); + } else if ("safe" == _) { + if (re.deleted) return; + if (await this.extractInternalFileFromDatabase(ne)) countUpdatedFolder(ne); + } + } else if (ie && !re) if ("push" == _ || "pushForce" == _ || "safe" == _) await this.storeInternalFileToDatabase(ie); else await this.extractInternalFileFromDatabase(ie.path); else throw new Error("Invalid state on hidden file sync"); + }), { + suspended: true, + batchSize: 1, + concurrentLimit: 5, + delay: 0 + })).root.enqueueAll(fe).startPipeline().waitForAllDoneAndTerminate(); + await this.kvDB.set("diff-caches-internal", ye); + if (("pull" == _ || "pullForce" == _) && 0 != ge) if (oe in me) { + let _ = me[oe]; + try { + const ee = Object.values(this.app.plugins.manifests), ne = this.app.plugins.enabledPlugins, ie = ee.filter((_ => ne.has(_.id))); + for (const ee of ie) if (ee.dir && ee.dir in me) { + _ -= me[ee.dir]; + const ne = ee.id, ie = ee.name; + this.plugin.askInPopup(`updated-${ne}`, `Files in ${ie} has been updated, Press {HERE} to reload ${ie}, or press elsewhere to dismiss this message.`, (_ => { + _.text = "HERE"; + _.addEventListener("click", (async () => { + Logger(`Unloading plugin: ${ie}`, LOG_LEVEL_NOTICE, "plugin-reload-" + ne); + await this.app.plugins.unloadPlugin(ne); + await this.app.plugins.loadPlugin(ne); + Logger(`Plugin reloaded: ${ie}`, LOG_LEVEL_NOTICE, "plugin-reload-" + ne); + })); + })); + } + } catch (_) { + Logger("Error on checking plugin status."); + Logger(_, LOG_LEVEL_VERBOSE); + } + if (0 != _) if (!this.plugin.isReloadingScheduled) this.plugin.askInPopup("updated-any-hidden", "Hidden files have been synchronised, Press {HERE} to schedule a reload of Obsidian, or press elsewhere to dismiss this message.", (_ => { + _.text = "HERE"; + _.addEventListener("click", (() => { + this.plugin.scheduleAppReload(); + })); + })); + } + Logger(`Hidden files scanned: ${ge} files had been modified`, re, "sync_internal"); + } + async storeInternalFileToDatabase(_, ee = false) { + if (await this.plugin.isIgnoredByIgnoreFiles(_.path)) return; + const ne = await this.path2id(_.path, ICHeader), ie = addPrefix(_.path, ICHeader), re = createBlob(await this.plugin.vaultAccess.adapterReadAuto(_.path)), se = _.mtime; + return await serialized("file-" + ie, (async () => { + try { + const oe = await this.localDatabase.getDBEntry(ie, void 0, false, false); + let le; + if (false === oe) le = { + _id: ne, + path: ie, + data: re, + mtime: se, + ctime: se, + datatype: "newnote", + size: _.size, + children: [], + deleted: false, + type: "newnote", + eden: {} + }; else { + if (await isDocContentSame(readAsBlob(oe), re) && !ee) return; + le = { + ...oe, + data: re, + mtime: se, + size: _.size, + datatype: oe.datatype, + children: [], + deleted: false, + type: oe.datatype + }; + } + const ue = await this.localDatabase.putDBEntry(le); + Logger(`STORAGE --\x3e DB:${_.path}: (hidden) Done`); + return ue; + } catch (ee) { + Logger(`STORAGE --\x3e DB:${_.path}: (hidden) Failed`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + })); + } + async deleteInternalFileOnDatabase(_, ee = false) { + const ne = await this.path2id(_, ICHeader), ie = addPrefix(_, ICHeader), re = (new Date).getTime(); + if (!await this.plugin.isIgnoredByIgnoreFiles(_)) await serialized("file-" + ie, (async () => { + try { + const ee = await this.localDatabase.getDBEntryMeta(ie, void 0, true); + let se; + if (false === ee) se = { + _id: ne, + path: ie, + mtime: re, + ctime: re, + size: 0, + children: [], + deleted: true, + type: "newnote", + eden: {} + }; else { + const ne = await this.localDatabase.getRaw(ee._id, { + conflicts: true + }); + if (void 0 !== ne._conflicts) for (const ie of ne._conflicts) { + await this.localDatabase.removeRevision(ee._id, ie); + Logger(`STORAGE -x> DB:${_}: (hidden) conflict removed ${ee._rev} => ${ie}`, LOG_LEVEL_VERBOSE); + } + if (ee.deleted) { + Logger(`STORAGE -x> DB:${_}: (hidden) already deleted`); + return; + } + se = { + ...ee, + mtime: re, + size: 0, + children: [], + deleted: true, + type: "newnote" + }; + } + await this.localDatabase.putRaw(se); + Logger(`STORAGE -x> DB:${_}: (hidden) Done`); + } catch (ee) { + Logger(`STORAGE -x> DB:${_}: (hidden) Failed`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + })); + } + async extractInternalFileFromDatabase(_, ee = false) { + const ne = await this.plugin.vaultAccess.adapterExists(_), ie = addPrefix(_, ICHeader); + if (!await this.plugin.isIgnoredByIgnoreFiles(_)) return await serialized("file-" + ie, (async () => { + var re; + try { + const se = await this.localDatabase.getDBEntry(ie, { + conflicts: true + }, false, true, true); + if (false === se) throw new Error(`File not found on database.:${_}`); + if (null == (re = null == se ? void 0 : se._conflicts) ? void 0 : re.length) { + Logger(`Hidden file ${_} has conflicted revisions, to keep in safe, writing to storage has been prevented`, LOG_LEVEL_INFO); + return; + } + if (se.deleted || se._deleted || false) { + if (!ne) Logger(`STORAGE { + Logger("Opening data-merging dialog", LOG_LEVEL_VERBOSE); + const ie = [ _, ee ], re = stripAllPrefixes(_.path); + new JsonResolveModal(this.app, re, [ _, ee ], (async (_, ee) => { + var se, oe, le; + try { + const ue = re; + let de = false; + if (!ee && !_) { + Logger(`Skipped merging: ${ue}`); + ne(false); + return; + } + if (ee || _) for (const ee of ie) if (ee._rev != _) if (await this.localDatabase.deleteDBEntry(this.getPath(ee), { + rev: ee._rev + })) { + Logger(`Conflicted revision has been deleted: ${ue}`); + de = true; + } + if (!_ && ee) { + if (!await this.plugin.vaultAccess.adapterExists(ue)) await this.vaultAccess.ensureDirectory(ue); + await this.plugin.vaultAccess.adapterWrite(ue, ee); + const _ = await this.plugin.vaultAccess.adapterStat(ue); + if (!_) throw new Error("Stat failed"); + const ne = null != (se = null == _ ? void 0 : _.mtime) ? se : 0; + await this.storeInternalFileToDatabase({ + path: ue, + mtime: ne, + ctime: null != (oe = null == _ ? void 0 : _.ctime) ? oe : ne, + size: null != (le = null == _ ? void 0 : _.size) ? le : 0 + }, true); + try { + await this.app.vault.adapter.reconcileInternalFile(ue); + } catch (_) { + Logger("Failed to call internal API(reconcileInternalFile)", LOG_LEVEL_VERBOSE); + Logger(_, LOG_LEVEL_VERBOSE); + } + Logger(`STORAGE <-- DB:${ue}: written (hidden,merged)`); + } + if (de) { + await this.extractInternalFileFromDatabase(ue, false); + Logger(`STORAGE --\x3e DB:${ue}: extracted (hidden,merged)`); + } + ne(true); + } catch (_) { + Logger("Could not merge conflicted json"); + Logger(_, LOG_LEVEL_VERBOSE); + ne(false); + } + })).open(); + })); + } + async scanInternalFiles() { + var _, ee, ne, ie, re, se; + const oe = normalizePath(this.app.vault.configDir), le = this.settings.syncInternalFilesIgnorePatterns.replace(/\n| /g, "").split(",").filter((_ => _)).map((_ => new RegExp(_, "i"))), ue = !this.settings.usePluginSync ? [] : Object.values(this.settings.pluginSyncExtendedSetting).filter((_ => _.mode == MODE_SELECTIVE || _.mode == MODE_PAUSED)).map((_ => _.files)).flat().map((_ => `${oe}/${_}`.toLowerCase())), de = this.app.vault.getRoot().path, fe = (await this.getFiles(de, [], void 0, le)).filter((_ => _.startsWith("."))).filter((_ => !_.startsWith(".trash"))).filter((_ => ue.every((ee => !_.toLowerCase().startsWith(ee))))).map((async _ => ({ + path: _, + stat: await this.plugin.vaultAccess.adapterStat(_) + }))), he = []; + for (const oe of fe) { + const le = await oe; + if (await this.plugin.isIgnoredByIgnoreFiles(le.path)) continue; + const ue = null != (ee = null == (_ = le.stat) ? void 0 : _.mtime) ? ee : 0, de = null != (ie = null == (ne = le.stat) ? void 0 : ne.ctime) ? ie : ue, fe = null != (se = null == (re = le.stat) ? void 0 : re.size) ? se : 0; + he.push({ + ...le, + mtime: ue, + ctime: de, + size: fe + }); + } + return he; + } + async getFiles(_, ee, ne, ie) { + let re; + try { + re = await this.app.vault.adapter.list(_); + } catch (ee) { + Logger(`Could not traverse(HiddenSync):${_}`, LOG_LEVEL_INFO); + Logger(ee, LOG_LEVEL_VERBOSE); + return []; + } + const se = [ ...re.files.filter((_ => !ee.some((ee => _.endsWith(ee))))).filter((_ => !ne || ne.some((ee => _.match(ee))))).filter((_ => !ie || ie.every((ee => !_.match(ee))))) ]; + let oe = []; + for (const _ of se) if (!await this.plugin.isIgnoredByIgnoreFiles(_)) oe.push(_); + e: for (const _ of re.folders) { + for (const ne of ee) if (_.endsWith(ne)) continue e; + if (!ie || !ie.some((ee => _.match(ee)))) if (!await this.plugin.isIgnoredByIgnoreFiles(_)) oe = oe.concat(await this.getFiles(_, ee, ne, ie)); + } + return oe; + } +}, SetupLiveSync = class extends LiveSyncCommands { + onunload() {} + onload() { + this.plugin.registerObsidianProtocolHandler("setuplivesync", (async _ => await this.setupWizard(_.settings))); + this.plugin.addCommand({ + id: "livesync-copysetupuri", + name: "Copy settings as a new setup URI", + callback: () => fireAndForget(this.command_copySetupURI()) + }); + this.plugin.addCommand({ + id: "livesync-copysetupuri-short", + name: "Copy settings as a new setup URI (With customization sync)", + callback: () => fireAndForget(this.command_copySetupURIWithSync()) + }); + this.plugin.addCommand({ + id: "livesync-copysetupurifull", + name: "Copy settings as a new setup URI (Full)", + callback: () => fireAndForget(this.command_copySetupURIFull()) + }); + this.plugin.addCommand({ + id: "livesync-opensetupuri", + name: "Use the copied setup URI (Formerly Open setup URI)", + callback: () => fireAndForget(this.command_openSetupURI()) + }); + } + onInitializeDatabase(_) {} + beforeReplicate(_) {} + onResume() {} + parseReplicationResultItem(_) { + return false; + } + async realizeSettingSyncMode() {} + async command_copySetupURI(_ = true) { + const ee = await askString(this.app, "Encrypt your settings", "The passphrase to encrypt the setup URI", "", true); + if (false === ee) return; + const ne = { + ...this.settings, + configPassphraseStore: "", + encryptedCouchDBConnection: "", + encryptedPassphrase: "" + }; + if (_) delete ne.pluginSyncExtendedSetting; + const ie = Object.keys(ne); + for (const _ of ie) if (JSON.stringify(_ in ne ? ne[_] : "") == JSON.stringify(_ in DEFAULT_SETTINGS ? DEFAULT_SETTINGS[_] : "*")) delete ne[_]; + const re = encodeURIComponent(await encrypt(JSON.stringify(ne), ee, false)), se = `${configURIBase}${re}`; + await navigator.clipboard.writeText(se); + Logger("Setup URI copied to clipboard", LOG_LEVEL_NOTICE); + } + async command_copySetupURIFull() { + const _ = await askString(this.app, "Encrypt your settings", "The passphrase to encrypt the setup URI", "", true); + if (false === _) return; + const ee = { + ...this.settings, + configPassphraseStore: "", + encryptedCouchDBConnection: "", + encryptedPassphrase: "" + }, ne = encodeURIComponent(await encrypt(JSON.stringify(ee), _, false)), ie = `${configURIBase}${ne}`; + await navigator.clipboard.writeText(ie); + Logger("Setup URI copied to clipboard", LOG_LEVEL_NOTICE); + } + async command_copySetupURIWithSync() { + await this.command_copySetupURI(false); + } + async command_openSetupURI() { + const _ = await askString(this.app, "Easy setup", "Set up URI", `${configURIBase}aaaaa`); + if (false === _) return; + if (!_.startsWith(`${configURIBase}`)) { + Logger("Set up URI looks wrong.", LOG_LEVEL_NOTICE); + return; + } + const ee = decodeURIComponent(_.substring(configURIBase.length)); + console.dir(ee); + await this.setupWizard(ee); + } + async setupWizard(_) { + try { + const ee = JSON.parse(JSON.stringify(this.settings)), ne = await askString(this.app, "Passphrase", "The passphrase to decrypt your setup URI", "", true); + if (false === ne) return; + const ie = await JSON.parse(await decrypt(_, ne, false)); + if (ie) { + if ("yes" == await askYesNo(this.app, "Importing LiveSync's conf, OK?")) { + const _ = Object.assign({}, DEFAULT_SETTINGS, ie); + this.plugin.replicator.closeReplication(); + this.settings.suspendFileWatching = true; + console.dir(_); + _.configPassphraseStore = ""; + _.encryptedPassphrase = ""; + _.encryptedCouchDBConnection = ""; + _.additionalSuffixOfDatabaseName = `${"appId" in this.app ? this.app.appId : ""}`; + const ne = "Just import setting", re = "Set it up as secondary or subsequent device", se = "Secondary device but try keeping local changes", oe = "Reconfigure and reconstitute the data", le = "Leave everything to me"; + _.syncInternalFiles = false; + _.usePluginSync = false; + _.isConfigured = true; + if (!_.useIndexedDBAdapter) _.useIndexedDBAdapter = true; + const ue = await askSelectString(this.app, "How would you like to set it up?", [ re, oe, se, ne, le ]); + if (ue == ne) { + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + await this.plugin.saveSettings(); + } else if (ue == re) { + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + await this.fetchLocal(); + } else if (ue == se) { + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + await this.fetchLocalWithRebuild(); + } else if (ue == oe) { + const ee = "I know this operation will rebuild all my databases with files on this device, and files that are on the remote database and I didn't synchronize to any other devices will be lost and want to proceed indeed."; + if (await askSelectString(this.app, "Do you really want to do this?", [ "Cancel", ee ]) != ee) return; + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + await this.rebuildEverything(); + } else if (ue == le) { + const ne = await askYesNo(this.app, "Keep local DB?"), ie = await askYesNo(this.app, "Keep remote DB?"); + if ("yes" == ne && "yes" == ie) { + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + this.suspendAllSync(); + this.suspendExtraSync(); + await this.plugin.saveSettings(); + if ("yes" == await askYesNo(this.app, "Unlock and replicate?")) { + await this.plugin.replicate(true); + await this.plugin.markRemoteUnlocked(); + } + Logger("Configuration loaded.", LOG_LEVEL_NOTICE); + return; + } + if ("no" == ne && "no" == ie) if ("yes" != await askYesNo(this.app, "Drop everything?")) { + Logger("Cancelled", LOG_LEVEL_NOTICE); + this.plugin.settings = ee; + return; + } + let re; + this.plugin.settings = _; + this.plugin.usedPassphrase = ""; + await this.plugin.saveSettings(); + if ("no" == ne) { + await this.plugin.resetLocalDatabase(); + await this.plugin.localDatabase.initializeDatabase(); + if ("yes" == await askYesNo(this.app, "Rebuild the database?")) re = this.plugin.initializeDatabase(true); else await this.plugin.markRemoteResolved(); + } + if ("no" == ie) { + await this.plugin.tryResetRemoteDatabase(); + await this.plugin.markRemoteLocked(); + } + if ("no" == ne || "no" == ie) if ("yes" == await askYesNo(this.app, "Replicate once?")) { + if (null != re) await re; + await this.plugin.replicate(true); + } + } + } + Logger("Configuration loaded.", LOG_LEVEL_NOTICE); + } else Logger("Cancelled.", LOG_LEVEL_NOTICE); + } catch (_) { + Logger("Couldn't parse or decrypt configuration uri.", LOG_LEVEL_NOTICE); + } + } + suspendExtraSync() { + Logger("Hidden files and plugin synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.", LOG_LEVEL_NOTICE); + this.plugin.settings.syncInternalFiles = false; + this.plugin.settings.usePluginSync = false; + this.plugin.settings.autoSweepPlugins = false; + } + async askHiddenFileConfiguration(_) { + this.plugin.addOnSetup.suspendExtraSync(); + const ee = `Would you like to enable \`Hidden File Synchronization\` or \`Customization sync\`?\n${_.enableFetch ? " - Fetch: Use files stored from other devices. \n" : ""}${_.enableOverwrite ? "- Overwrite: Use files from this device. \n" : ""}- Custom: Synchronize only customization files with a dedicated interface.\n- Keep them disabled: Do not use hidden file synchronization.\nOf course, we are able to disable these features.`, ne = "Fetch", ie = "Overwrite", re = "Custom", se = "keep them disabled", oe = []; + if (null == _ ? void 0 : _.enableFetch) oe.push(ne); + if (null == _ ? void 0 : _.enableOverwrite) oe.push(ie); + oe.push(re); + oe.push(se); + const le = await confirmWithMessage(this.plugin, "Hidden file sync", ee, oe, se, 40); + if (le == ne) await this.configureHiddenFileSync("FETCH"); else if (le == ie) await this.configureHiddenFileSync("OVERWRITE"); else if (le == se) await this.configureHiddenFileSync("DISABLE"); else if (le == re) await this.configureHiddenFileSync("CUSTOMIZE"); + } + async configureHiddenFileSync(_) { + this.plugin.addOnSetup.suspendExtraSync(); + if ("DISABLE" != _) { + if ("CUSTOMIZE" != _) { + Logger("Gathering files for enabling Hidden File Sync", LOG_LEVEL_NOTICE); + if ("FETCH" == _) await this.plugin.addOnHiddenFileSync.syncInternalFilesAndDatabase("pullForce", true); else if ("OVERWRITE" == _) await this.plugin.addOnHiddenFileSync.syncInternalFilesAndDatabase("pushForce", true); else if ("MERGE" == _) await this.plugin.addOnHiddenFileSync.syncInternalFilesAndDatabase("safe", true); + this.plugin.settings.syncInternalFiles = true; + await this.plugin.saveSettings(); + Logger("Done! Restarting the app is strongly recommended!", LOG_LEVEL_NOTICE); + } else if ("CUSTOMIZE" == _) { + if (!this.plugin.deviceAndVaultName) { + let _ = await askString(this.app, "Device name", "Please set this device name", "desktop"); + if (!_) { + if (import_obsidian.Platform.isAndroidApp) _ = "android-app"; else if (import_obsidian.Platform.isIosApp) _ = "ios"; else if (import_obsidian.Platform.isMacOS) _ = "macos"; else if (import_obsidian.Platform.isMobileApp) _ = "mobile-app"; else if (import_obsidian.Platform.isMobile) _ = "mobile"; else if (import_obsidian.Platform.isSafari) _ = "safari"; else if (import_obsidian.Platform.isDesktop) _ = "desktop"; else if (import_obsidian.Platform.isDesktopApp) _ = "desktop-app"; else _ = "unknown"; + _ += Math.random().toString(36).slice(-4); + } + this.plugin.deviceAndVaultName = _; + } + this.plugin.settings.usePluginSync = true; + await this.plugin.saveSettings(); + await this.plugin.addOnConfigSync.scanAllConfigFiles(true); + } + } else { + this.plugin.settings.syncInternalFiles = false; + this.plugin.settings.usePluginSync = false; + await this.plugin.saveSettings(); + } + } + suspendAllSync() { + this.plugin.settings.liveSync = false; + this.plugin.settings.periodicReplication = false; + this.plugin.settings.syncOnSave = false; + this.plugin.settings.syncOnEditorSave = false; + this.plugin.settings.syncOnStart = false; + this.plugin.settings.syncOnFileOpen = false; + this.plugin.settings.syncAfterMerge = false; + } + async suspendReflectingDatabase() { + if (!this.plugin.settings.doNotSuspendOnFetching) if (this.plugin.settings.remoteType != REMOTE_MINIO) { + Logger("Suspending reflection: Database and storage changes will not be reflected in each other until completely finished the fetching.", LOG_LEVEL_NOTICE); + this.plugin.settings.suspendParseReplicationResult = true; + this.plugin.settings.suspendFileWatching = true; + await this.plugin.saveSettings(); + } + } + async resumeReflectingDatabase() { + if (!this.plugin.settings.doNotSuspendOnFetching) if (this.plugin.settings.remoteType != REMOTE_MINIO) { + Logger("Database and storage reflection has been resumed!", LOG_LEVEL_NOTICE); + this.plugin.settings.suspendParseReplicationResult = false; + this.plugin.settings.suspendFileWatching = false; + await this.plugin.syncAllFiles(true); + await this.plugin.loadQueuedFiles(); + await this.plugin.saveSettings(); + } + } + async askUseNewAdapter() { + if (!this.plugin.settings.useIndexedDBAdapter) { + const _ = "Now this plugin has been configured to use the old database adapter for keeping compatibility. Do you want to deactivate it?", ee = "Yes, disable and use latest", ne = [ ee, "No, keep compatibility" ]; + if (await confirmWithMessage(this.plugin, "Database adapter", _, ne, ee, 10) == ee) this.plugin.settings.useIndexedDBAdapter = true; + } + } + async resetLocalDatabase() { + if (this.plugin.settings.isConfigured && "" == this.plugin.settings.additionalSuffixOfDatabaseName) await this.plugin.resetLocalDatabase(); + this.plugin.settings.additionalSuffixOfDatabaseName = `${"appId" in this.app ? this.app.appId : ""}`; + await this.plugin.resetLocalDatabase(); + } + async fetchRemoteChunks() { + if (!this.plugin.settings.doNotSuspendOnFetching && this.plugin.settings.readChunksOnline && this.plugin.settings.remoteType == REMOTE_COUCHDB) { + Logger("Fetching chunks", LOG_LEVEL_NOTICE); + const _ = this.plugin.getReplicator(), ee = await _.connectRemoteCouchDBWithSetting(this.settings, this.plugin.getIsMobile(), true); + if ("string" == typeof ee) Logger(ee, LOG_LEVEL_NOTICE); else await fetchAllUsedChunks(this.localDatabase.localDatabase, ee.db); + Logger("Fetching chunks done", LOG_LEVEL_NOTICE); + } + } + async fetchLocal(_) { + this.suspendExtraSync(); + await this.askUseNewAdapter(); + this.plugin.settings.isConfigured = true; + await this.suspendReflectingDatabase(); + await this.plugin.realizeSettingSyncMode(); + await this.resetLocalDatabase(); + await delay(1e3); + await this.plugin.openDatabase(); + this.plugin.isReady = true; + if (_) await this.plugin.initializeDatabase(true); + await this.plugin.markRemoteResolved(); + await delay(500); + await this.plugin.replicateAllFromServer(true); + await delay(1e3); + await this.plugin.replicateAllFromServer(true); + await this.resumeReflectingDatabase(); + await this.askHiddenFileConfiguration({ + enableFetch: true + }); + } + async fetchLocalWithRebuild() { + return await this.fetchLocal(true); + } + async rebuildRemote() { + this.suspendExtraSync(); + this.plugin.settings.isConfigured = true; + await this.plugin.realizeSettingSyncMode(); + await this.plugin.markRemoteLocked(); + await this.plugin.tryResetRemoteDatabase(); + await this.plugin.markRemoteLocked(); + await delay(500); + await this.askHiddenFileConfiguration({ + enableOverwrite: true + }); + await delay(1e3); + await this.plugin.replicateAllToServer(true); + await delay(1e3); + await this.plugin.replicateAllToServer(true); + } + async rebuildEverything() { + this.suspendExtraSync(); + await this.askUseNewAdapter(); + this.plugin.settings.isConfigured = true; + await this.plugin.realizeSettingSyncMode(); + await this.resetLocalDatabase(); + await delay(1e3); + await this.plugin.initializeDatabase(true); + await this.plugin.markRemoteLocked(); + await this.plugin.tryResetRemoteDatabase(); + await this.plugin.markRemoteLocked(); + await delay(500); + await this.askHiddenFileConfiguration({ + enableOverwrite: true + }); + await delay(1e3); + await this.plugin.replicateAllToServer(true); + await delay(1e3); + await this.plugin.replicateAllToServer(true); + } +}; + +function add_css5(_) { + append_styles(_, "svelte-1vjy5r1", ".svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{box-sizing:border-box}.globalhistory.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{margin-bottom:2em}table.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{width:100%}.more.svelte-1vjy5r1>div.svelte-1vjy5r1.svelte-1vjy5r1{display:flex}.more.svelte-1vjy5r1>div.svelte-1vjy5r1>button.svelte-1vjy5r1{flex-grow:1}th.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{position:sticky;top:0;backdrop-filter:blur(10px)}td.mtime.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{white-space:break-spaces}td.path.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{word-break:break-word}.row.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{display:flex;flex-direction:row;flex-wrap:wrap}.row.svelte-1vjy5r1>label.svelte-1vjy5r1.svelte-1vjy5r1{display:flex;align-items:center;min-width:5em}.row.svelte-1vjy5r1>input.svelte-1vjy5r1.svelte-1vjy5r1{flex-grow:1}.filenames.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{display:flex;flex-direction:column}.filenames.svelte-1vjy5r1>.path.svelte-1vjy5r1.svelte-1vjy5r1{font-size:70%}.rev.svelte-1vjy5r1.svelte-1vjy5r1.svelte-1vjy5r1{text-overflow:ellipsis;max-width:3em;display:inline-block;overflow:hidden;white-space:nowrap}"); +} + +function get_each_context5(_, ee, ne) { + const ie = _.slice(); + ie[26] = ee[ne]; + return ie; +} + +function create_if_block_54(_) { + let ee; + return { + c() { + ee = element("div"); + ee.textContent = "Gathering information..."; + attr(ee, "class", " svelte-1vjy5r1"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_44(_) { + let ee; + return { + c() { + ee = element("th"); + ee.textContent = "Chunks"; + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_else_block_23(_) { + let ee, ne, ie, re; + return { + c() { + ee = element("div"); + ne = element("button"); + ne.textContent = "+1 week"; + attr(ne, "class", "svelte-1vjy5r1"); + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(se, oe) { + insert(se, ee, oe); + append(ee, ne); + if (!ie) { + re = listen(ne, "click", _[17]); + ie = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ie = false; + re(); + } + }; +} + +function create_if_block_34(_) { + let ee; + return { + c() { + ee = element("div"); + attr(ee, "class", " svelte-1vjy5r1"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_else_block_14(_) { + let ee, ne = _[26].rev + ""; + return { + c() { + ee = text(ne); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p(_, ie) { + if (32 & ie && ne !== (ne = _[26].rev + "")) set_data(ee, ne); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_if_block_24(_) { + let ee, ne, ie, re, se = _[26].rev + ""; + function click_handler_2() { + return _[19](_[26]); + } + return { + c() { + ee = element("a"); + ne = text(se); + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(_, se) { + insert(_, ee, se); + append(ee, ne); + if (!ie) { + re = listen(ee, "click", click_handler_2); + ie = true; + } + }, + p(ee, ie) { + _ = ee; + if (32 & ie && se !== (se = _[26].rev + "")) set_data(ne, se); + }, + d(_) { + if (_) detach(ee); + ie = false; + re(); + } + }; +} + +function create_if_block_14(_) { + let ee, ne, ie = _[26].chunks + ""; + return { + c() { + ee = element("td"); + ne = text(ie); + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, ee) { + if (32 & ee && ie !== (ie = _[26].chunks + "")) set_data(ne, ie); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_each_block5(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce, we, Le, Oe, ke = _[26].mtimeDisp + "", Ae = _[26].dirname.split("/").join("​/") + "", xe = _[26].filename + "", Re = _[26].changes + ""; + function click_handler_1() { + return _[18](_[26]); + } + function select_block_type_1(_, ee) { + if (_[26].isPlain) return create_if_block_24; else return create_else_block_14; + } + let Te = select_block_type_1(_), Pe = Te(_), Ie = _[1] && create_if_block_14(_); + return { + c() { + ee = element("tr"); + ne = element("td"); + ie = text(ke); + re = space(); + se = element("td"); + oe = element("div"); + le = element("span"); + ue = text("/"); + de = text(Ae); + fe = space(); + he = element("span"); + pe = element("a"); + ge = text(xe); + me = space(); + ye = element("td"); + Se = element("span"); + Pe.c(); + Ee = space(); + ve = element("td"); + Ce = text(Re); + we = space(); + if (Ie) Ie.c(); + attr(ne, "class", "mtime svelte-1vjy5r1"); + attr(le, "class", "path svelte-1vjy5r1"); + attr(pe, "class", "svelte-1vjy5r1"); + attr(he, "class", "filename svelte-1vjy5r1"); + attr(oe, "class", "filenames svelte-1vjy5r1"); + attr(se, "class", "path svelte-1vjy5r1"); + attr(Se, "class", "rev svelte-1vjy5r1"); + attr(ye, "class", "svelte-1vjy5r1"); + attr(ve, "class", "svelte-1vjy5r1"); + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(_, ke) { + insert(_, ee, ke); + append(ee, ne); + append(ne, ie); + append(ee, re); + append(ee, se); + append(se, oe); + append(oe, le); + append(le, ue); + append(le, de); + append(oe, fe); + append(oe, he); + append(he, pe); + append(pe, ge); + append(ee, me); + append(ee, ye); + append(ye, Se); + Pe.m(Se, null); + append(ee, Ee); + append(ee, ve); + append(ve, Ce); + append(ee, we); + if (Ie) Ie.m(ee, null); + if (!Le) { + Oe = listen(pe, "click", click_handler_1); + Le = true; + } + }, + p(ne, re) { + _ = ne; + if (32 & re && ke !== (ke = _[26].mtimeDisp + "")) set_data(ie, ke); + if (32 & re && Ae !== (Ae = _[26].dirname.split("/").join("​/") + "")) set_data(de, Ae); + if (32 & re && xe !== (xe = _[26].filename + "")) set_data(ge, xe); + if (Te === (Te = select_block_type_1(_)) && Pe) Pe.p(_, re); else { + Pe.d(1); + Pe = Te(_); + if (Pe) { + Pe.c(); + Pe.m(Se, null); + } + } + if (32 & re && Re !== (Re = _[26].changes + "")) set_data(Ce, Re); + if (_[1]) if (Ie) Ie.p(_, re); else { + Ie = create_if_block_14(_); + Ie.c(); + Ie.m(ee, null); + } else if (Ie) { + Ie.d(1); + Ie = null; + } + }, + d(_) { + if (_) detach(ee); + Pe.d(); + if (Ie) Ie.d(); + Le = false; + Oe(); + } + }; +} + +function create_else_block4(_) { + let ee, ne, ie, re; + return { + c() { + ee = element("div"); + ne = element("button"); + ne.textContent = "+1 week"; + attr(ne, "class", "svelte-1vjy5r1"); + attr(ee, "class", "svelte-1vjy5r1"); + }, + m(se, oe) { + insert(se, ee, oe); + append(ee, ne); + if (!ie) { + re = listen(ne, "click", _[20]); + ie = true; + } + }, + p: noop2, + d(_) { + if (_) detach(ee); + ie = false; + re(); + } + }; +} + +function create_if_block4(_) { + let ee; + return { + c() { + ee = element("div"); + attr(ee, "class", " svelte-1vjy5r1"); + }, + m(_, ne) { + insert(_, ee, ne); + }, + p: noop2, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_fragment5(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce, we, Le, Oe, ke, Ae, xe, Re, Te, Pe, Ie, De, Be, Ne, Me, Fe, Ve, $e, Ge, Ue, je, ze, qe, He, Ke, We, Xe, Ye, Qe, Je = _[6] && create_if_block_54(_), Ze = _[1] && create_if_block_44(_); + function select_block_type(_, ee) { + if (_[6]) return create_if_block_34; else return create_else_block_23; + } + let tt = select_block_type(_), nt = tt(_), it = ensure_array_like(_[5]), rt = []; + for (let ee = 0; ee < it.length; ee += 1) rt[ee] = create_each_block5(get_each_context5(_, it, ee)); + function select_block_type_2(_, ee) { + if (_[6]) return create_if_block4; else return create_else_block4; + } + let st = select_block_type_2(_), ot = st(_); + return { + c() { + ee = element("div"); + ne = element("h1"); + ne.textContent = "Vault history"; + ie = space(); + re = element("div"); + se = element("div"); + oe = element("label"); + oe.textContent = "From:"; + le = element("input"); + ue = space(); + de = element("div"); + fe = element("label"); + fe.textContent = "To:"; + he = element("input"); + pe = space(); + ge = element("div"); + me = element("label"); + me.textContent = "Info:"; + ye = space(); + Se = element("label"); + Ee = element("input"); + ve = element("span"); + ve.textContent = "Diff"; + Ce = space(); + we = element("label"); + Le = element("input"); + Oe = element("span"); + Oe.textContent = "Chunks"; + ke = space(); + Ae = element("label"); + xe = element("input"); + Re = element("span"); + Re.textContent = "File integrity"; + Te = space(); + if (Je) Je.c(); + Pe = space(); + Ie = element("table"); + De = element("tr"); + Be = element("th"); + Be.textContent = "Date"; + Ne = space(); + Me = element("th"); + Me.textContent = "Path"; + Fe = space(); + Ve = element("th"); + Ve.textContent = "Rev"; + $e = space(); + Ge = element("th"); + Ge.textContent = "Stat"; + Ue = space(); + if (Ze) Ze.c(); + je = space(); + ze = element("tr"); + qe = element("td"); + nt.c(); + He = space(); + for (let _ = 0; _ < rt.length; _ += 1) rt[_].c(); + Ke = space(); + We = element("tr"); + Xe = element("td"); + ot.c(); + attr(ne, "class", "svelte-1vjy5r1"); + attr(oe, "for", ""); + attr(oe, "class", "svelte-1vjy5r1"); + attr(le, "type", "date"); + le.disabled = _[6]; + attr(le, "class", "svelte-1vjy5r1"); + attr(se, "class", "row svelte-1vjy5r1"); + attr(fe, "for", ""); + attr(fe, "class", "svelte-1vjy5r1"); + attr(he, "type", "date"); + he.disabled = _[6]; + attr(he, "class", "svelte-1vjy5r1"); + attr(de, "class", "row svelte-1vjy5r1"); + attr(me, "for", ""); + attr(me, "class", "svelte-1vjy5r1"); + attr(Ee, "type", "checkbox"); + Ee.disabled = _[6]; + attr(Ee, "class", "svelte-1vjy5r1"); + attr(ve, "class", "svelte-1vjy5r1"); + attr(Se, "class", "svelte-1vjy5r1"); + attr(Le, "type", "checkbox"); + Le.disabled = _[6]; + attr(Le, "class", "svelte-1vjy5r1"); + attr(Oe, "class", "svelte-1vjy5r1"); + attr(we, "class", "svelte-1vjy5r1"); + attr(xe, "type", "checkbox"); + xe.disabled = _[6]; + attr(xe, "class", "svelte-1vjy5r1"); + attr(Re, "class", "svelte-1vjy5r1"); + attr(Ae, "class", "svelte-1vjy5r1"); + attr(ge, "class", "row svelte-1vjy5r1"); + attr(re, "class", "control svelte-1vjy5r1"); + attr(Be, "class", "svelte-1vjy5r1"); + attr(Me, "class", "svelte-1vjy5r1"); + attr(Ve, "class", "svelte-1vjy5r1"); + attr(Ge, "class", "svelte-1vjy5r1"); + attr(De, "class", "svelte-1vjy5r1"); + attr(qe, "colspan", "5"); + attr(qe, "class", "more svelte-1vjy5r1"); + attr(ze, "class", "svelte-1vjy5r1"); + attr(Xe, "colspan", "5"); + attr(Xe, "class", "more svelte-1vjy5r1"); + attr(We, "class", "svelte-1vjy5r1"); + attr(Ie, "class", "svelte-1vjy5r1"); + attr(ee, "class", "globalhistory svelte-1vjy5r1"); + }, + m(tt, it) { + insert(tt, ee, it); + append(ee, ne); + append(ee, ie); + append(ee, re); + append(re, se); + append(se, oe); + append(se, le); + set_input_value(le, _[3]); + append(re, ue); + append(re, de); + append(de, fe); + append(de, he); + set_input_value(he, _[4]); + append(re, pe); + append(re, ge); + append(ge, me); + append(ge, ye); + append(ge, Se); + append(Se, Ee); + Ee.checked = _[0]; + append(Se, ve); + append(ge, Ce); + append(ge, we); + append(we, Le); + Le.checked = _[1]; + append(we, Oe); + append(ge, ke); + append(ge, Ae); + append(Ae, xe); + xe.checked = _[2]; + append(Ae, Re); + append(ee, Te); + if (Je) Je.m(ee, null); + append(ee, Pe); + append(ee, Ie); + append(Ie, De); + append(De, Be); + append(De, Ne); + append(De, Me); + append(De, Fe); + append(De, Ve); + append(De, $e); + append(De, Ge); + append(De, Ue); + if (Ze) Ze.m(De, null); + append(Ie, je); + append(Ie, ze); + append(ze, qe); + nt.m(qe, null); + append(Ie, He); + for (let _ = 0; _ < rt.length; _ += 1) if (rt[_]) rt[_].m(Ie, null); + append(Ie, Ke); + append(Ie, We); + append(We, Xe); + ot.m(Xe, null); + if (!Ye) { + Qe = [ listen(le, "input", _[12]), listen(he, "input", _[13]), listen(Ee, "change", _[14]), listen(Le, "change", _[15]), listen(xe, "change", _[16]) ]; + Ye = true; + } + }, + p(_, [ne]) { + if (64 & ne) le.disabled = _[6]; + if (8 & ne) set_input_value(le, _[3]); + if (64 & ne) he.disabled = _[6]; + if (16 & ne) set_input_value(he, _[4]); + if (64 & ne) Ee.disabled = _[6]; + if (1 & ne) Ee.checked = _[0]; + if (64 & ne) Le.disabled = _[6]; + if (2 & ne) Le.checked = _[1]; + if (64 & ne) xe.disabled = _[6]; + if (4 & ne) xe.checked = _[2]; + if (_[6]) if (Je) ; else { + Je = create_if_block_54(_); + Je.c(); + Je.m(ee, Pe); + } else if (Je) { + Je.d(1); + Je = null; + } + if (_[1]) if (Ze) ; else { + Ze = create_if_block_44(_); + Ze.c(); + Ze.m(De, null); + } else if (Ze) { + Ze.d(1); + Ze = null; + } + if (tt === (tt = select_block_type(_)) && nt) nt.p(_, ne); else { + nt.d(1); + nt = tt(_); + if (nt) { + nt.c(); + nt.m(qe, null); + } + } + if (1570 & ne) { + it = ensure_array_like(_[5]); + let ee; + for (ee = 0; ee < it.length; ee += 1) { + const ie = get_each_context5(_, it, ee); + if (rt[ee]) rt[ee].p(ie, ne); else { + rt[ee] = create_each_block5(ie); + rt[ee].c(); + rt[ee].m(Ie, Ke); + } + } + for (;ee < rt.length; ee += 1) rt[ee].d(1); + rt.length = it.length; + } + if (st === (st = select_block_type_2(_)) && ot) ot.p(_, ne); else { + ot.d(1); + ot = st(_); + if (ot) { + ot.c(); + ot.m(Xe, null); + } + } + }, + i: noop2, + o: noop2, + d(_) { + if (_) detach(ee); + if (Je) Je.d(); + if (Ze) Ze.d(); + nt.d(); + destroy_each(rt, _); + ot.d(); + Ye = false; + run_all(Qe); + } + }; +} + +function mtimeToDate(_) { + return new Date(_).toLocaleString(); +} + +function instance5(_, ee, ne) { + let {plugin: ie} = ee, re = false, se = false, oe = false, le = Date.now() - 6048e5, ue = Date.now() + 1728e5; + const de = (new Date).getTimezoneOffset(); + let fe = new Date(le - de).toISOString().split("T")[0], he = new Date(ue - de).toISOString().split("T")[0], pe = [], ge = false; + async function getHistory(_, ee, de) { + ne(6, ge = true); + const fe = [], he = await async function fetchChanges() { + var _, ee, de; + try { + const ne = ie.localDatabase; + let fe = []; + for await (const he of ne.findAllNormalDocs()) { + if (he.mtime < le) continue; + if (!isAnyNote(he)) continue; + const pe = ie.getPath(he), ge = isPlainText(he.path); + let me; + const ye = (null !== (_ = (await ne.getRaw(he._id, { + revs_info: true + }))._revs_info) && void 0 !== _ ? _ : []).reverse(), Se = -1, Ee = 0, ve = 1; + for (const _ of ye) if ("available" == _.status) { + const ye = !ge && re || oe && _.rev == he._rev ? await ne.getDBEntry(pe, { + rev: _.rev + }, false, false, true) : await ne.getDBEntryMeta(pe, { + rev: _.rev + }, true); + if (false === ye) continue; + const Ce = _.rev, we = "mtime" in ye ? ye.mtime : 0; + if (le > we) continue; + if (ue < we) continue; + let Le = ""; + if (re && !ge) { + const _ = getDocData(ye.data); + if (void 0 === me) me = _; + if (me != _) { + const ee = new import_diff_match_patch.diff_match_patch, ne = ee.diff_main(me, _); + ee.diff_cleanupSemantic(ne); + me = _; + const ie = { + [Se]: 0, + [Ee]: 0, + [ve]: 0 + }, re = ne.reduce(((_, ee) => { + var ne; + return { + ..._, + [ee[0]]: (null !== (ne = _[ee[0]]) && void 0 !== ne ? ne : 0) + ee[1].length + }; + }), ie); + Le = `-${re[Se]}, +${re[ve]}`; + } + } + const Oe = ye._deleted || (null == ye ? void 0 : ye.deleted) || false; + if (Oe) Le += " 🗑️"; + if (Ce == he._rev) if (oe) { + const _ = ie.vaultAccess.getAbstractFileByPath(stripAllPrefixes(ie.getPath(he))); + if (_ instanceof import_obsidian.TFile) { + const ee = await ie.vaultAccess.adapterReadAuto(_), ne = readAsBlob(ye); + if (await isDocContentSame(ee, ne)) Le += " ⚖️"; else Le += " ⚠️"; + } + } + const ke = ie.getPath(ye), [Ae, ...xe] = ke.split("/").reverse(); + let Re = ""; + if (se) { + const _ = null !== (ee = null == ye ? void 0 : ye.children) && void 0 !== ee ? ee : [], ie = await ne.allDocsRaw({ + keys: [ ..._ ] + }), re = ie.rows.length, se = ie.rows.filter((_ => "error" in _)).length; + if (0 == se) Re = `✅ ${re}`; else Re = `🔎 ${se} ✅ ${re}`; + } + fe.push({ + id: ye._id, + rev: ye._rev, + path: ke, + dirname: xe.reverse().join("/"), + filename: Ae, + mtime: we, + mtimeDisp: mtimeToDate(we), + size: null !== (de = null == ye ? void 0 : ye.size) && void 0 !== de ? de : 0, + isDeleted: Oe, + changes: Le, + chunks: Re, + isPlain: ge + }); + } + } + return [ ...fe ].sort(((_, ee) => ee.mtime - _.mtime)); + } finally { + ne(6, ge = false); + } + }(); + fe.push(...he); + ne(5, pe = [ ...fe ]); + } + function nextWeek() { + ne(4, he = new Date(ue - de + 6048e5).toISOString().split("T")[0]); + } + function prevWeek() { + ne(3, fe = new Date(le - de - 6048e5).toISOString().split("T")[0]); + } + onMount((async () => { + await getHistory(); + })); + onDestroy((() => {})); + function showHistory(_, ee) { + new DocumentHistoryModal(ie.app, ie, _, void 0, ee).open(); + } + function openFile(_) { + ie.app.workspace.openLinkText(_, _); + } + _.$$set = _ => { + if ("plugin" in _) ne(11, ie = _.plugin); + }; + _.$$.update = () => { + if (31 & _.$$.dirty) { + le = new Date(fe).getTime() + de; + ue = new Date(he).getTime() + de; + getHistory(); + } + }; + return [ re, se, oe, fe, he, pe, ge, nextWeek, prevWeek, showHistory, openFile, ie, function input0_input_handler() { + fe = this.value; + ne(3, fe); + }, function input1_input_handler() { + he = this.value; + ne(4, he); + }, function input2_change_handler() { + re = this.checked; + ne(0, re); + }, function input3_change_handler() { + se = this.checked; + ne(1, se); + }, function input4_change_handler() { + oe = this.checked; + ne(2, oe); + }, () => nextWeek(), _ => openFile(_.path), _ => showHistory(_.path, (null == _ ? void 0 : _.rev) || ""), () => prevWeek() ]; +} + +var GlobalHistory = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance5, create_fragment5, safe_not_equal, { + plugin: 11 + }, add_css5); + } +}, GlobalHistory_default = GlobalHistory, VIEW_TYPE_GLOBAL_HISTORY = "global-history", GlobalHistoryView = class extends import_obsidian.ItemView { + constructor(_, ee) { + super(_); + this.icon = "clock"; + this.title = ""; + this.navigation = true; + this.plugin = ee; + } + getIcon() { + return "clock"; + } + getViewType() { + return VIEW_TYPE_GLOBAL_HISTORY; + } + getDisplayText() { + return "Vault history"; + } + async onOpen() { + this.component = new GlobalHistory_default({ + target: this.contentEl, + props: { + plugin: this.plugin + } + }); + } + async onClose() { + var _; + null == (_ = this.component) || _.$destroy(); + } +}, import_obsidian7 = require("obsidian"); + +function add_css6(_) { + append_styles(_, "svelte-1j0mkaj", ".svelte-1j0mkaj.svelte-1j0mkaj{box-sizing:border-box}.logpane.svelte-1j0mkaj.svelte-1j0mkaj{display:flex;height:100%;flex-direction:column}.log.svelte-1j0mkaj.svelte-1j0mkaj{overflow-y:scroll;user-select:text;padding-bottom:2em}.log.svelte-1j0mkaj>pre.svelte-1j0mkaj{margin:0}.log.svelte-1j0mkaj>pre.wrap-right.svelte-1j0mkaj{word-break:break-all;max-width:100%;width:100%;white-space:normal}.row.svelte-1j0mkaj.svelte-1j0mkaj{display:flex;flex-direction:row;justify-content:flex-end}.row.svelte-1j0mkaj>label.svelte-1j0mkaj{display:flex;align-items:center;min-width:5em;margin-right:1em}"); +} + +function get_each_context6(_, ee, ne) { + const ie = _.slice(); + ie[11] = ee[ne]; + return ie; +} + +function create_each_block6(_) { + let ee, ne, ie = _[11] + ""; + return { + c() { + ee = element("pre"); + ne = text(ie); + attr(ee, "class", "svelte-1j0mkaj"); + toggle_class(ee, "wrap-right", _[1]); + }, + m(_, ie) { + insert(_, ee, ie); + append(ee, ne); + }, + p(_, re) { + if (1 & re && ie !== (ie = _[11] + "")) set_data(ne, ie); + if (2 & re) toggle_class(ee, "wrap-right", _[1]); + }, + d(_) { + if (_) detach(ee); + } + }; +} + +function create_fragment6(_) { + let ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye, Se, Ee, ve, Ce = ensure_array_like(_[0]), we = []; + for (let ee = 0; ee < Ce.length; ee += 1) we[ee] = create_each_block6(get_each_context6(_, Ce, ee)); + return { + c() { + ee = element("div"); + ne = element("div"); + ie = element("div"); + re = element("label"); + se = element("input"); + oe = element("span"); + oe.textContent = "Wrap"; + le = space(); + ue = element("label"); + de = element("input"); + fe = element("span"); + fe.textContent = "Auto scroll"; + he = space(); + pe = element("label"); + ge = element("input"); + me = element("span"); + me.textContent = "Pause"; + ye = space(); + Se = element("div"); + for (let _ = 0; _ < we.length; _ += 1) we[_].c(); + attr(se, "type", "checkbox"); + attr(se, "class", "svelte-1j0mkaj"); + attr(oe, "class", "svelte-1j0mkaj"); + attr(re, "class", "svelte-1j0mkaj"); + attr(de, "type", "checkbox"); + attr(de, "class", "svelte-1j0mkaj"); + attr(fe, "class", "svelte-1j0mkaj"); + attr(ue, "class", "svelte-1j0mkaj"); + attr(ge, "type", "checkbox"); + attr(ge, "class", "svelte-1j0mkaj"); + attr(me, "class", "svelte-1j0mkaj"); + attr(pe, "class", "svelte-1j0mkaj"); + attr(ie, "class", "row svelte-1j0mkaj"); + attr(ne, "class", "control svelte-1j0mkaj"); + attr(Se, "class", "log svelte-1j0mkaj"); + attr(ee, "class", "logpane svelte-1j0mkaj"); + }, + m(Ce, Le) { + insert(Ce, ee, Le); + append(ee, ne); + append(ne, ie); + append(ie, re); + append(re, se); + se.checked = _[1]; + append(re, oe); + append(ie, le); + append(ie, ue); + append(ue, de); + de.checked = _[2]; + append(ue, fe); + append(ie, he); + append(ie, pe); + append(pe, ge); + ge.checked = _[3]; + append(pe, me); + append(ee, ye); + append(ee, Se); + for (let _ = 0; _ < we.length; _ += 1) if (we[_]) we[_].m(Se, null); + _[8](Se); + if (!Ee) { + ve = [ listen(se, "change", _[5]), listen(de, "change", _[6]), listen(ge, "change", _[7]) ]; + Ee = true; + } + }, + p(_, [ee]) { + if (2 & ee) se.checked = _[1]; + if (4 & ee) de.checked = _[2]; + if (8 & ee) ge.checked = _[3]; + if (3 & ee) { + Ce = ensure_array_like(_[0]); + let ne; + for (ne = 0; ne < Ce.length; ne += 1) { + const ie = get_each_context6(_, Ce, ne); + if (we[ne]) we[ne].p(ie, ee); else { + we[ne] = create_each_block6(ie); + we[ne].c(); + we[ne].m(Se, null); + } + } + for (;ne < we.length; ne += 1) we[ne].d(1); + we.length = Ce.length; + } + }, + i: noop2, + o: noop2, + d(ne) { + if (ne) detach(ee); + destroy_each(we, ne); + _[8](null); + Ee = false; + run_all(ve); + } + }; +} + +function instance6(_, ee, ne) { + let ie, re, se = [], oe = false, le = true, ue = false; + function updateLog(_) { + const ee = _.value; + if (!ue) { + ne(0, se = [ ...ee ]); + setTimeout((() => { + if (re) ne(4, re.scrollTop = re.scrollHeight, re); + }), 10); + } + } + onMount((async () => { + logMessages.onChanged(updateLog); + Logger("Log window opened"); + ie = () => logMessages.offChanged(updateLog); + })); + onDestroy((() => { + if (ie) ie(); + })); + return [ se, oe, le, ue, re, function input0_change_handler() { + oe = this.checked; + ne(1, oe); + }, function input1_change_handler() { + le = this.checked; + ne(2, le); + }, function input2_change_handler() { + ue = this.checked; + ne(3, ue); + }, function div2_binding(_) { + binding_callbacks[_ ? "unshift" : "push"]((() => { + re = _; + ne(4, re); + })); + } ]; +} + +var LogPane = class extends SvelteComponent { + constructor(_) { + super(); + init2(this, _, instance6, create_fragment6, safe_not_equal, {}, add_css6); + } +}, LogPane_default = LogPane, VIEW_TYPE_LOG = "log-log", LogPaneView = class extends import_obsidian7.ItemView { + constructor(_, ee) { + super(_); + this.icon = "view-log"; + this.title = ""; + this.navigation = true; + this.plugin = ee; + } + getIcon() { + return "view-log"; + } + getViewType() { + return VIEW_TYPE_LOG; + } + getDisplayText() { + return "Self-hosted LiveSync Log"; + } + async onOpen() { + this.component = new LogPane_default({ + target: this.contentEl, + props: {} + }); + } + async onClose() { + var _; + null == (_ = this.component) || _.$destroy(); + } +}; + +function getFileLockKey(_) { + return `fl:${"string" == typeof _ ? _ : _.path}`; +} + +function toArrayBuffer(_) { + if (_ instanceof Uint8Array) return _.buffer; + if (_ instanceof DataView) return _.buffer; else return _; +} + +async function processReadFile(_, ee) { + return await serialized(getFileLockKey(_), (() => ee())); +} + +async function processWriteFile(_, ee) { + return await serialized(getFileLockKey(_), (() => ee())); +} + +var HttpAuthLocation, HttpApiKeyAuthLocation, EndpointURLScheme, AlgorithmId, FieldPosition, SerializedFileAccess = class { + constructor(_) { + this.touchedFiles = []; + this.app = _; + } + async adapterStat(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + return await processReadFile(_, (() => this.app.vault.adapter.stat(ee))); + } + async adapterExists(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + return await processReadFile(_, (() => this.app.vault.adapter.exists(ee))); + } + async adapterRemove(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + return await processReadFile(_, (() => this.app.vault.adapter.remove(ee))); + } + async adapterRead(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + return await processReadFile(_, (() => this.app.vault.adapter.read(ee))); + } + async adapterReadBinary(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + return await processReadFile(_, (() => this.app.vault.adapter.readBinary(ee))); + } + async adapterReadAuto(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + if (isPlainText(ee)) return await processReadFile(_, (() => this.app.vault.adapter.read(ee))); else return await processReadFile(_, (() => this.app.vault.adapter.readBinary(ee))); + } + async adapterWrite(_, ee, ne) { + const ie = _ instanceof import_obsidian.TFile ? _.path : _; + if ("string" == typeof ee) return await processWriteFile(_, (() => this.app.vault.adapter.write(ie, ee, ne))); else return await processWriteFile(_, (() => this.app.vault.adapter.writeBinary(ie, toArrayBuffer(ee), ne))); + } + async vaultCacheRead(_) { + return await processReadFile(_, (() => this.app.vault.cachedRead(_))); + } + async vaultRead(_) { + return await processReadFile(_, (() => this.app.vault.read(_))); + } + async vaultReadBinary(_) { + return await processReadFile(_, (() => this.app.vault.readBinary(_))); + } + async vaultReadAuto(_) { + if (isPlainText(_.path)) return await processReadFile(_, (() => this.app.vault.read(_))); else return await processReadFile(_, (() => this.app.vault.readBinary(_))); + } + async vaultModify(_, ee, ne) { + if ("string" == typeof ee) return await processWriteFile(_, (async () => { + const ie = await this.app.vault.read(_); + if (ee === ie) { + if (ne && ne.mtime) markChangesAreSame(_, _.stat.mtime, ne.mtime); + return false; + } + await this.app.vault.modify(_, ee, ne); + return true; + })); else return await processWriteFile(_, (async () => { + const ie = await this.app.vault.readBinary(_); + if (await isDocContentSame(createBinaryBlob(ie), createBinaryBlob(ee))) { + if (ne && ne.mtime) markChangesAreSame(_, _.stat.mtime, ne.mtime); + return false; + } + await this.app.vault.modifyBinary(_, toArrayBuffer(ee), ne); + return true; + })); + } + async vaultCreate(_, ee, ne) { + if ("string" == typeof ee) return await processWriteFile(_, (() => this.app.vault.create(_, ee, ne))); else return await processWriteFile(_, (() => this.app.vault.createBinary(_, toArrayBuffer(ee), ne))); + } + trigger(_, ...ee) { + return this.app.vault.trigger(_, ...ee); + } + async adapterAppend(_, ee, ne) { + return await this.app.vault.adapter.append(_, ee, ne); + } + async delete(_, ee = false) { + return await processWriteFile(_, (() => this.app.vault.delete(_, ee))); + } + async trash(_, ee = false) { + return await processWriteFile(_, (() => this.app.vault.trash(_, ee))); + } + getAbstractFileByPath(_) { + return this.app.vault.getAbstractFileByPath(_); + } + getFiles() { + return this.app.vault.getFiles(); + } + async ensureDirectory(_) { + const ee = _.split("/"); + ee.pop(); + let ne = ""; + for (const _ of ee) { + ne += _; + try { + await this.app.vault.adapter.mkdir(ne); + } catch (_) { + if ("Folder already exists." == (null == _ ? void 0 : _.message)) ; else { + Logger("Folder Create Error"); + Logger(_); + } + } + ne += "/"; + } + } + touch(_) { + const ee = _ instanceof import_obsidian.TFile ? _ : this.getAbstractFileByPath(_), ne = `${ee.path}-${ee.stat.mtime}-${ee.stat.size}`; + this.touchedFiles.unshift(ne); + this.touchedFiles = this.touchedFiles.slice(0, 100); + } + recentlyTouched(_) { + const ee = _ instanceof import_obsidian.TFile ? `${_.path}-${_.stat.mtime}-${_.stat.size}` : `${_.path}-${_.mtime}-${_.size}`; + if (-1 == this.touchedFiles.indexOf(ee)) return false; else return true; + } + clearTouched() { + this.touchedFiles = []; + } +}, getHttpHandlerExtensionConfiguration = _ => { + let ee = _.httpHandler; + return { + setHttpHandler(_) { + ee = _; + }, + httpHandler: () => ee, + updateHttpClientConfig(_, ne) { + ee.updateHttpClientConfig(_, ne); + }, + httpHandlerConfigs: () => ee.httpHandlerConfigs() + }; +}, resolveHttpHandlerRuntimeConfig = _ => ({ + httpHandler: _.httpHandler() +}); + +(function(_) { + _["HEADER"] = "header"; + _["QUERY"] = "query"; +})(HttpAuthLocation || (HttpAuthLocation = {})); + +(function(_) { + _["HEADER"] = "header"; + _["QUERY"] = "query"; +})(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {})); + +(function(_) { + _["HTTP"] = "http"; + _["HTTPS"] = "https"; +})(EndpointURLScheme || (EndpointURLScheme = {})); + +(function(_) { + _["MD5"] = "md5"; + _["CRC32"] = "crc32"; + _["CRC32C"] = "crc32c"; + _["SHA1"] = "sha1"; + _["SHA256"] = "sha256"; +})(AlgorithmId || (AlgorithmId = {})); + +(function(_) { + _[_["HEADER"] = 0] = "HEADER"; + _[_["TRAILER"] = 1] = "TRAILER"; +})(FieldPosition || (FieldPosition = {})); + +var IniSectionType, RequestHandlerProtocol, SMITHY_CONTEXT_KEY = "__smithy_context"; + +(function(_) { + _["PROFILE"] = "profile"; + _["SSO_SESSION"] = "sso-session"; + _["SERVICES"] = "services"; +})(IniSectionType || (IniSectionType = {})); + +(function(_) { + _["HTTP_0_9"] = "http/0.9"; + _["HTTP_1_0"] = "http/1.0"; + _["TDS_8_0"] = "tds/8.0"; +})(RequestHandlerProtocol || (RequestHandlerProtocol = {})); + +var HttpRequest = class _HttpRequest { + constructor(_) { + this.method = _.method || "GET"; + this.hostname = _.hostname || "localhost"; + this.port = _.port; + this.query = _.query || {}; + this.headers = _.headers || {}; + this.body = _.body; + this.protocol = _.protocol ? ":" !== _.protocol.slice(-1) ? `${_.protocol}:` : _.protocol : "https:"; + this.path = _.path ? "/" !== _.path.charAt(0) ? `/${_.path}` : _.path : "/"; + this.username = _.username; + this.password = _.password; + this.fragment = _.fragment; + } + static isInstance(_) { + if (!_) return false; + const ee = _; + return "method" in ee && "protocol" in ee && "hostname" in ee && "path" in ee && "object" == typeof ee["query"] && "object" == typeof ee["headers"]; + } + clone() { + const _ = new _HttpRequest({ + ...this, + headers: { + ...this.headers + } + }); + if (_.query) _.query = cloneQuery(_.query); + return _; + } +}; + +function cloneQuery(_) { + return Object.keys(_).reduce(((ee, ne) => { + const ie = _[ne]; + return { + ...ee, + [ne]: Array.isArray(ie) ? [ ...ie ] : ie + }; + }), {}); +} + +var HttpResponse = class { + constructor(_) { + this.statusCode = _.statusCode; + this.reason = _.reason; + this.headers = _.headers || {}; + this.body = _.body; + } + static isInstance(_) { + if (!_) return false; + const ee = _; + return "number" == typeof ee.statusCode && "object" == typeof ee.headers; + } +}; + +function isValidHostname(_) { + return /^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(_); +} + +function addExpectContinueMiddleware(_) { + return ee => async ne => { + var ie, re; + const {request: se} = ne; + if (HttpRequest.isInstance(se) && se.body && "node" === _.runtime) if ("FetchHttpHandler" !== (null == (re = null == (ie = _.requestHandler) ? void 0 : ie.constructor) ? void 0 : re.name)) se.headers = { + ...se.headers, + Expect: "100-continue" + }; + return ee({ + ...ne, + request: se + }); + }; +} + +var addExpectContinueMiddlewareOptions = { + step: "build", + tags: [ "SET_EXPECT_HEADER", "EXPECT_HEADER" ], + name: "addExpectContinueMiddleware", + override: true +}, getAddExpectContinuePlugin = _ => ({ + applyToStack: ee => { + ee.add(addExpectContinueMiddleware(_), addExpectContinueMiddlewareOptions); + } +}); + +function resolveHostHeaderConfig(_) { + return _; +} + +var hostHeaderMiddleware = _ => ee => async ne => { + if (!HttpRequest.isInstance(ne.request)) return ee(ne); + const {request: ie} = ne, {handlerProtocol: re = ""} = _.requestHandler.metadata || {}; + if (re.indexOf("h2") >= 0 && !ie.headers[":authority"]) { + delete ie.headers["host"]; + ie.headers[":authority"] = ie.hostname + (ie.port ? ":" + ie.port : ""); + } else if (!ie.headers["host"]) { + let _ = ie.hostname; + if (null != ie.port) _ += `:${ie.port}`; + ie.headers["host"] = _; + } + return ee(ne); +}, hostHeaderMiddlewareOptions = { + name: "hostHeaderMiddleware", + step: "build", + priority: "low", + tags: [ "HOST" ], + override: true +}, getHostHeaderPlugin = _ => ({ + applyToStack: ee => { + ee.add(hostHeaderMiddleware(_), hostHeaderMiddlewareOptions); + } +}), loggerMiddleware = () => (_, ee) => async ne => { + var ie, re; + try { + const re = await _(ne), {clientName: se, commandName: oe, logger: le, dynamoDbDocumentClientOptions: ue = {}} = ee, {overrideInputFilterSensitiveLog: de, overrideOutputFilterSensitiveLog: fe} = ue, he = null != de ? de : ee.inputFilterSensitiveLog, pe = null != fe ? fe : ee.outputFilterSensitiveLog, {$metadata: ge, ...me} = re.output; + null == (ie = null == le ? void 0 : le.info) || ie.call(le, { + clientName: se, + commandName: oe, + input: he(ne.input), + output: pe(me), + metadata: ge + }); + return re; + } catch (_) { + const {clientName: ie, commandName: se, logger: oe, dynamoDbDocumentClientOptions: le = {}} = ee, {overrideInputFilterSensitiveLog: ue} = le, de = null != ue ? ue : ee.inputFilterSensitiveLog; + null == (re = null == oe ? void 0 : oe.error) || re.call(oe, { + clientName: ie, + commandName: se, + input: de(ne.input), + error: _, + metadata: _.$metadata + }); + throw _; + } +}, loggerMiddlewareOptions = { + name: "loggerMiddleware", + tags: [ "LOGGER" ], + step: "initialize", + override: true +}, getLoggerPlugin = _ => ({ + applyToStack: _ => { + _.add(loggerMiddleware(), loggerMiddlewareOptions); + } +}), TRACE_ID_HEADER_NAME = "X-Amzn-Trace-Id", ENV_LAMBDA_FUNCTION_NAME = "AWS_LAMBDA_FUNCTION_NAME", ENV_TRACE_ID = "_X_AMZN_TRACE_ID", recursionDetectionMiddleware = _ => ee => async ne => { + const {request: ie} = ne; + if (!HttpRequest.isInstance(ie) || "node" !== _.runtime || ie.headers.hasOwnProperty(TRACE_ID_HEADER_NAME)) return ee(ne); + const re = process.env[ENV_LAMBDA_FUNCTION_NAME], se = process.env[ENV_TRACE_ID], nonEmptyString = _ => "string" == typeof _ && _.length > 0; + if (nonEmptyString(re) && nonEmptyString(se)) ie.headers[TRACE_ID_HEADER_NAME] = se; + return ee({ + ...ne, + request: ie + }); +}, addRecursionDetectionMiddlewareOptions = { + step: "build", + tags: [ "RECURSION_DETECTION" ], + name: "recursionDetectionMiddleware", + override: true, + priority: "low" +}, getRecursionDetectionPlugin = _ => ({ + applyToStack: ee => { + ee.add(recursionDetectionMiddleware(_), addRecursionDetectionMiddlewareOptions); + } +}), NoOpLogger = class { + trace() {} + debug() {} + info() {} + warn() {} + error() {} +}, getAllAliases = (_, ee) => { + const ne = []; + if (_) ne.push(_); + if (ee) for (const _ of ee) ne.push(_); + return ne; +}, getMiddlewareNameWithAliases = (_, ee) => `${_ || "anonymous"}${ee && ee.length > 0 ? ` (a.k.a. ${ee.join(",")})` : ""}`, constructStack = () => { + let _ = [], ee = [], ne = false; + const ie = new Set, cloneTo = ne => { + var ie; + _.forEach((_ => { + ne.add(_.middleware, { + ..._ + }); + })); + ee.forEach((_ => { + ne.addRelativeTo(_.middleware, { + ..._ + }); + })); + null == (ie = ne.identifyOnResolve) || ie.call(ne, re.identifyOnResolve()); + return ne; + }, expandRelativeMiddlewareList = _ => { + const ee = []; + _.before.forEach((_ => { + if (0 === _.before.length && 0 === _.after.length) ee.push(_); else ee.push(...expandRelativeMiddlewareList(_)); + })); + ee.push(_); + _.after.reverse().forEach((_ => { + if (0 === _.before.length && 0 === _.after.length) ee.push(_); else ee.push(...expandRelativeMiddlewareList(_)); + })); + return ee; + }, getMiddlewareList = (ne = false) => { + const ie = [], re = [], se = {}; + _.forEach((_ => { + const ee = { + ..._, + before: [], + after: [] + }; + for (const _ of getAllAliases(ee.name, ee.aliases)) se[_] = ee; + ie.push(ee); + })); + ee.forEach((_ => { + const ee = { + ..._, + before: [], + after: [] + }; + for (const _ of getAllAliases(ee.name, ee.aliases)) se[_] = ee; + re.push(ee); + })); + re.forEach((_ => { + if (_.toMiddleware) { + const ee = se[_.toMiddleware]; + if (void 0 === ee) { + if (ne) return; + throw new Error(`${_.toMiddleware} is not found when adding ${getMiddlewareNameWithAliases(_.name, _.aliases)} middleware ${_.relation} ${_.toMiddleware}`); + } + if ("after" === _.relation) ee.after.push(_); + if ("before" === _.relation) ee.before.push(_); + } + })); + var oe; + return (oe = ie, oe.sort(((_, ee) => stepWeights[ee.step] - stepWeights[_.step] || priorityWeights[ee.priority || "normal"] - priorityWeights[_.priority || "normal"]))).map(expandRelativeMiddlewareList).reduce(((_, ee) => { + _.push(...ee); + return _; + }), []); + }, re = { + add: (ee, ne = {}) => { + const {name: re, override: se, aliases: oe} = ne, le = { + step: "initialize", + priority: "normal", + middleware: ee, + ...ne + }, ue = getAllAliases(re, oe); + if (ue.length > 0) { + if (ue.some((_ => ie.has(_)))) { + if (!se) throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(re, oe)}'`); + for (const ee of ue) { + const ne = _.findIndex((_ => { + var ne; + return _.name === ee || (null == (ne = _.aliases) ? void 0 : ne.some((_ => _ === ee))); + })); + if (-1 === ne) continue; + const ie = _[ne]; + if (ie.step !== le.step || le.priority !== ie.priority) throw new Error(`"${getMiddlewareNameWithAliases(ie.name, ie.aliases)}" middleware with ${ie.priority} priority in ${ie.step} step cannot be overridden by "${getMiddlewareNameWithAliases(re, oe)}" middleware with ${le.priority} priority in ${le.step} step.`); + _.splice(ne, 1); + } + } + for (const _ of ue) ie.add(_); + } + _.push(le); + }, + addRelativeTo: (_, ne) => { + const {name: re, override: se, aliases: oe} = ne, le = { + middleware: _, + ...ne + }, ue = getAllAliases(re, oe); + if (ue.length > 0) { + if (ue.some((_ => ie.has(_)))) { + if (!se) throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(re, oe)}'`); + for (const _ of ue) { + const ne = ee.findIndex((ee => { + var ne; + return ee.name === _ || (null == (ne = ee.aliases) ? void 0 : ne.some((ee => ee === _))); + })); + if (-1 === ne) continue; + const ie = ee[ne]; + if (ie.toMiddleware !== le.toMiddleware || ie.relation !== le.relation) throw new Error(`"${getMiddlewareNameWithAliases(ie.name, ie.aliases)}" middleware ${ie.relation} "${ie.toMiddleware}" middleware cannot be overridden by "${getMiddlewareNameWithAliases(re, oe)}" middleware ${le.relation} "${le.toMiddleware}" middleware.`); + ee.splice(ne, 1); + } + } + for (const _ of ue) ie.add(_); + } + ee.push(le); + }, + clone: () => cloneTo(constructStack()), + use: _ => { + _.applyToStack(re); + }, + remove: ne => { + if ("string" == typeof ne) return (ne => { + let re = false; + const filterCb = _ => { + const ee = getAllAliases(_.name, _.aliases); + if (ee.includes(ne)) { + re = true; + for (const _ of ee) ie.delete(_); + return false; + } + return true; + }; + _ = _.filter(filterCb); + ee = ee.filter(filterCb); + return re; + })(ne); else return (ne => { + let re = false; + const filterCb = _ => { + if (_.middleware === ne) { + re = true; + for (const ee of getAllAliases(_.name, _.aliases)) ie.delete(ee); + return false; + } + return true; + }; + _ = _.filter(filterCb); + ee = ee.filter(filterCb); + return re; + })(ne); + }, + removeByTag: ne => { + let re = false; + const filterCb = _ => { + const {tags: ee, name: se, aliases: oe} = _; + if (ee && ee.includes(ne)) { + const _ = getAllAliases(se, oe); + for (const ee of _) ie.delete(ee); + re = true; + return false; + } + return true; + }; + _ = _.filter(filterCb); + ee = ee.filter(filterCb); + return re; + }, + concat: _ => { + var ee, ie; + const re = cloneTo(constructStack()); + re.use(_); + re.identifyOnResolve(ne || re.identifyOnResolve() || (null != (ie = null == (ee = _.identifyOnResolve) ? void 0 : ee.call(_)) ? ie : false)); + return re; + }, + applyToStack: cloneTo, + identify: () => getMiddlewareList(true).map((_ => { + var ee; + const ne = null != (ee = _.step) ? ee : _.relation + " " + _.toMiddleware; + return getMiddlewareNameWithAliases(_.name, _.aliases) + " - " + ne; + })), + identifyOnResolve(_) { + if ("boolean" == typeof _) ne = _; + return ne; + }, + resolve: (_, ee) => { + for (const ne of getMiddlewareList().map((_ => _.middleware)).reverse()) _ = ne(_, ee); + if (ne) console.log(re.identify()); + return _; + } + }; + return re; +}, stepWeights = { + initialize: 5, + serialize: 4, + build: 3, + finalizeRequest: 2, + deserialize: 1 +}, priorityWeights = { + high: 3, + normal: 2, + low: 1 +}, Client = class { + constructor(_) { + this.middlewareStack = constructStack(); + this.config = _; + } + send(_, ee, ne) { + const ie = "function" != typeof ee ? ee : void 0, re = "function" == typeof ee ? ee : ne, se = _.resolveMiddleware(this.middlewareStack, this.config, ie); + if (re) se(_).then((_ => re(null, _.output)), (_ => re(_))).catch((() => {})); else return se(_).then((_ => _.output)); + } + destroy() { + if (this.config.requestHandler.destroy) this.config.requestHandler.destroy(); + } +}, alphabetByEncoding = {}, alphabetByValue = new Array(64); + +for (let _ = 0, ee = "A".charCodeAt(0), ne = "Z".charCodeAt(0); _ + ee <= ne; _++) { + const ne = String.fromCharCode(_ + ee); + alphabetByEncoding[ne] = _; + alphabetByValue[_] = ne; +} + +for (let _ = 0, ee = "a".charCodeAt(0), ne = "z".charCodeAt(0); _ + ee <= ne; _++) { + const ne = String.fromCharCode(_ + ee), ie = _ + 26; + alphabetByEncoding[ne] = ie; + alphabetByValue[ie] = ne; +} + +for (let _ = 0; _ < 10; _++) { + alphabetByEncoding[_.toString(10)] = _ + 52; + const ee = _.toString(10), ne = _ + 52; + alphabetByEncoding[ee] = ne; + alphabetByValue[ne] = ee; +} + +alphabetByEncoding["+"] = 62; + +alphabetByValue[62] = "+"; + +alphabetByEncoding["/"] = 63; + +alphabetByValue[63] = "/"; + +var bitsPerLetter = 6, bitsPerByte = 8, maxLetterValue = 63, fromBase64 = _ => { + let ee = _.length / 4 * 3; + if ("==" === _.slice(-2)) ee -= 2; else if ("=" === _.slice(-1)) ee--; + const ne = new ArrayBuffer(ee), ie = new DataView(ne); + for (let ee = 0; ee < _.length; ee += 4) { + let ne = 0, re = 0; + for (let ie = ee, se = ee + 3; ie <= se; ie++) if ("=" !== _[ie]) { + if (!(_[ie] in alphabetByEncoding)) throw new TypeError(`Invalid character ${_[ie]} in base64 string.`); + ne |= alphabetByEncoding[_[ie]] << (se - ie) * bitsPerLetter; + re += bitsPerLetter; + } else ne >>= bitsPerLetter; + const se = ee / 4 * 3; + ne >>= re % bitsPerByte; + const oe = Math.floor(re / bitsPerByte); + for (let _ = 0; _ < oe; _++) { + const ee = (oe - _ - 1) * bitsPerByte; + ie.setUint8(se + _, (ne & 255 << ee) >> ee); + } + } + return new Uint8Array(ne); +}, fromUtf8 = _ => (new TextEncoder).encode(_), toUint8Array = _ => { + if ("string" == typeof _) return fromUtf8(_); + if (ArrayBuffer.isView(_)) return new Uint8Array(_.buffer, _.byteOffset, _.byteLength / Uint8Array.BYTES_PER_ELEMENT); else return new Uint8Array(_); +}, toUtf8 = _ => { + if ("string" == typeof _) return _; + if ("object" != typeof _ || "number" != typeof _.byteOffset || "number" != typeof _.byteLength) throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array."); + return new TextDecoder("utf-8").decode(_); +}; + +function toBase64(_) { + let ee; + if ("string" == typeof _) ee = fromUtf8(_); else ee = _; + const ne = "object" == typeof ee && "number" == typeof ee.length, ie = "object" == typeof ee && "number" == typeof ee.byteOffset && "number" == typeof ee.byteLength; + if (!ne && !ie) throw new Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array."); + let re = ""; + for (let _ = 0; _ < ee.length; _ += 3) { + let ne = 0, ie = 0; + for (let re = _, se = Math.min(_ + 3, ee.length); re < se; re++) { + ne |= ee[re] << (se - re - 1) * bitsPerByte; + ie += bitsPerByte; + } + const se = Math.ceil(ie / bitsPerLetter); + ne <<= se * bitsPerLetter - ie; + for (let _ = 1; _ <= se; _++) { + const ee = (se - _) * bitsPerLetter; + re += alphabetByValue[(ne & maxLetterValue << ee) >> ee]; + } + re += "==".slice(0, 4 - se); + } + return re; +} + +function transformToString(_, ee = "utf-8") { + if ("base64" === ee) return toBase64(_); else return toUtf8(_); +} + +function transformFromString(_, ee) { + if ("base64" === ee) return Uint8ArrayBlobAdapter.mutate(fromBase64(_)); else return Uint8ArrayBlobAdapter.mutate(fromUtf8(_)); +} + +var Uint8ArrayBlobAdapter = class _Uint8ArrayBlobAdapter extends Uint8Array { + static fromString(_, ee = "utf-8") { + switch (typeof _) { + case "string": + return transformFromString(_, ee); + + default: + throw new Error(`Unsupported conversion from ${typeof _} to Uint8ArrayBlobAdapter.`); + } + } + static mutate(_) { + Object.setPrototypeOf(_, _Uint8ArrayBlobAdapter.prototype); + return _; + } + transformToString(_ = "utf-8") { + return transformToString(this, _); + } +}, getAwsChunkedEncodingStream = (_, ee) => { + const {base64Encoder: ne, bodyLengthChecker: ie, checksumAlgorithmFn: re, checksumLocationName: se, streamHasher: oe} = ee, le = void 0 !== ne && void 0 !== ie && void 0 !== re && void 0 !== se && void 0 !== oe, ue = le ? oe(re, _) : void 0, de = _.getReader(); + return new ReadableStream({ + async pull(_) { + const {value: ee, done: re} = await de.read(); + if (re) { + _.enqueue("0\r\n"); + if (le) { + const ee = ne(await ue); + _.enqueue(`${se}:${ee}\r\n`); + _.enqueue("\r\n"); + } + _.close(); + } else _.enqueue(`${(ie(ee) || 0).toString(16)}\r\n${ee}\r\n`); + } + }); +}, escapeUri = _ => encodeURIComponent(_).replace(/[!'()*]/g, hexEncode), hexEncode = _ => `%${_.charCodeAt(0).toString(16).toUpperCase()}`; + +function buildQueryString(_) { + const ee = []; + for (let ne of Object.keys(_).sort()) { + const ie = _[ne]; + ne = escapeUri(ne); + if (Array.isArray(ie)) for (let _ = 0, re = ie.length; _ < re; _++) ee.push(`${ne}=${escapeUri(ie[_])}`); else { + let _ = ne; + if (ie || "string" == typeof ie) _ += `=${escapeUri(ie)}`; + ee.push(_); + } + } + return ee.join("&"); +} + +function requestTimeout(_ = 0) { + return new Promise(((ee, ne) => { + if (_) setTimeout((() => { + const ee = new Error(`Request did not complete within ${_} ms`); + ee.name = "TimeoutError"; + ne(ee); + }), _); + })); +} + +var keepAliveSupport = { + supported: void 0 +}, FetchHttpHandler = class _FetchHttpHandler { + static create(_) { + if ("function" == typeof (null == _ ? void 0 : _.handle)) return _; else return new _FetchHttpHandler(_); + } + constructor(_) { + if ("function" == typeof _) this.configProvider = _().then((_ => _ || {})); else { + this.config = null != _ ? _ : {}; + this.configProvider = Promise.resolve(this.config); + } + if (void 0 === keepAliveSupport.supported) keepAliveSupport.supported = Boolean("undefined" != typeof Request && "keepalive" in new Request("https://[::1]")); + } + destroy() {} + async handle(_, {abortSignal: ee} = {}) { + var ne, ie; + if (!this.config) this.config = await this.configProvider; + const re = this.config.requestTimeout, se = true === this.config.keepAlive, oe = this.config.credentials; + if (null == ee ? void 0 : ee.aborted) { + const _ = new Error("Request aborted"); + _.name = "AbortError"; + return Promise.reject(_); + } + let le = _.path; + const ue = buildQueryString(_.query || {}); + if (ue) le += `?${ue}`; + if (_.fragment) le += `#${_.fragment}`; + let de = ""; + if (null != _.username || null != _.password) de = `${null != (ne = _.username) ? ne : ""}:${null != (ie = _.password) ? ie : ""}@`; + const {port: fe, method: he} = _, pe = `${_.protocol}//${de}${_.hostname}${fe ? `:${fe}` : ""}${le}`, ge = "GET" === he || "HEAD" === he ? void 0 : _.body, me = { + body: ge, + headers: new Headers(_.headers), + method: he, + credentials: oe + }; + if (ge) me.duplex = "half"; + if ("undefined" != typeof AbortController) me.signal = ee; + if (keepAliveSupport.supported) me.keepalive = se; + let ye = null; + const Se = new Request(pe, me), Ee = [ fetch(Se).then((_ => { + const ee = _.headers, ne = {}; + for (const _ of ee.entries()) ne[_[0]] = _[1]; + if (!(null != _.body)) return _.blob().then((ee => ({ + response: new HttpResponse({ + headers: ne, + reason: _.statusText, + statusCode: _.status, + body: ee + }) + }))); else return { + response: new HttpResponse({ + headers: ne, + reason: _.statusText, + statusCode: _.status, + body: _.body + }) + }; + })), requestTimeout(re) ]; + if (ee) Ee.push(new Promise(((_, ne) => { + const onAbort = () => { + const _ = new Error("Request aborted"); + _.name = "AbortError"; + ne(_); + }; + if ("function" == typeof ee.addEventListener) { + const _ = ee; + _.addEventListener("abort", onAbort, { + once: true + }); + ye = () => _.removeEventListener("abort", onAbort); + } else ee.onabort = onAbort; + }))); + return Promise.race(Ee).finally(ye); + } + updateHttpClientConfig(_, ee) { + this.config = void 0; + this.configProvider = this.configProvider.then((ne => { + ne[_] = ee; + return ne; + })); + } + httpHandlerConfigs() { + var _; + return null != (_ = this.config) ? _ : {}; + } +}, streamCollector = _ => { + if ("function" == typeof Blob && _ instanceof Blob) return collectBlob(_); else return collectStream(_); +}; + +async function collectBlob(_) { + const ee = await readToBase64(_), ne = fromBase64(ee); + return new Uint8Array(ne); +} + +async function collectStream(_) { + const ee = [], ne = _.getReader(); + let ie = false, re = 0; + for (;!ie; ) { + const {done: _, value: se} = await ne.read(); + if (se) { + ee.push(se); + re += se.length; + } + ie = _; + } + const se = new Uint8Array(re); + let oe = 0; + for (const _ of ee) { + se.set(_, oe); + oe += _.length; + } + return se; +} + +function readToBase64(_) { + return new Promise(((ee, ne) => { + const ie = new FileReader; + ie.onloadend = () => { + var _; + if (2 !== ie.readyState) return ne(new Error("Reader aborted too early")); + const re = null != (_ = ie.result) ? _ : "", se = re.indexOf(","), oe = se > -1 ? se + 1 : re.length; + ee(re.substring(oe)); + }; + ie.onabort = () => ne(new Error("Read aborted")); + ie.onerror = () => ne(ie.error); + ie.readAsDataURL(_); + })); +} + +var SHORT_TO_HEX = {}, HEX_TO_SHORT = {}; + +for (let _ = 0; _ < 256; _++) { + let ee = _.toString(16).toLowerCase(); + if (1 === ee.length) ee = `0${ee}`; + SHORT_TO_HEX[_] = ee; + HEX_TO_SHORT[ee] = _; +} + +function fromHex(_) { + if (_.length % 2 != 0) throw new Error("Hex encoded strings must have an even number length"); + const ee = new Uint8Array(_.length / 2); + for (let ne = 0; ne < _.length; ne += 2) { + const ie = _.slice(ne, ne + 2).toLowerCase(); + if (ie in HEX_TO_SHORT) ee[ne / 2] = HEX_TO_SHORT[ie]; else throw new Error(`Cannot decode unrecognized sequence ${ie} as hexadecimal`); + } + return ee; +} + +function toHex(_) { + let ee = ""; + for (let ne = 0; ne < _.byteLength; ne++) ee += SHORT_TO_HEX[_[ne]]; + return ee; +} + +var ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED = "The stream has already been transformed.", sdkStreamMixin = _ => { + var ee, ne; + if (!isBlobInstance(_) && !isReadableStreamInstance(_)) { + const ie = (null == (ne = null == (ee = null == _ ? void 0 : _.__proto__) ? void 0 : ee.constructor) ? void 0 : ne.name) || _; + throw new Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${ie}`); + } + let ie = false; + const transformToByteArray = async () => { + if (ie) throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED); + ie = true; + return await streamCollector(_); + }; + return Object.assign(_, { + transformToByteArray, + transformToString: async _ => { + const ee = await transformToByteArray(); + if ("base64" === _) return toBase64(ee); else if ("hex" === _) return toHex(ee); else if (void 0 === _ || "utf8" === _ || "utf-8" === _) return toUtf8(ee); else if ("function" == typeof TextDecoder) return new TextDecoder(_).decode(ee); else throw new Error("TextDecoder is not available, please make sure polyfill is provided."); + }, + transformToWebStream: () => { + if (ie) throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED); + ie = true; + if (isBlobInstance(_)) return (_ => { + if ("function" != typeof _.stream) throw new Error("Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.\nIf you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body"); + return _.stream(); + })(_); else if (isReadableStreamInstance(_)) return _; else throw new Error(`Cannot transform payload to web stream, got ${_}`); + } + }); +}, isBlobInstance = _ => "function" == typeof Blob && _ instanceof Blob, isReadableStreamInstance = _ => "function" == typeof ReadableStream && _ instanceof ReadableStream, collectBody = async (_ = new Uint8Array, ee) => { + if (_ instanceof Uint8Array) return Uint8ArrayBlobAdapter.mutate(_); + if (!_) return Uint8ArrayBlobAdapter.mutate(new Uint8Array); + const ne = ee.streamCollector(_); + return Uint8ArrayBlobAdapter.mutate(await ne); +}, Command = class { + constructor() { + this.middlewareStack = constructStack(); + } + static classBuilder() { + return new ClassBuilder; + } + resolveMiddlewareWithContext(_, ee, ne, {middlewareFn: ie, clientName: re, commandName: se, inputFilterSensitiveLog: oe, outputFilterSensitiveLog: le, smithyContext: ue, additionalContext: de, CommandCtor: fe}) { + for (const re of ie.bind(this)(fe, _, ee, ne)) this.middlewareStack.use(re); + const he = _.concat(this.middlewareStack), {logger: pe} = ee, ge = { + logger: pe, + clientName: re, + commandName: se, + inputFilterSensitiveLog: oe, + outputFilterSensitiveLog: le, + [SMITHY_CONTEXT_KEY]: { + ...ue + }, + ...de + }, {requestHandler: me} = ee; + return he.resolve((_ => me.handle(_.request, ne || {})), ge); + } +}, ClassBuilder = class { + constructor() { + this._init = () => {}; + this._ep = {}; + this._middlewareFn = () => []; + this._commandName = ""; + this._clientName = ""; + this._additionalContext = {}; + this._smithyContext = {}; + this._inputFilterSensitiveLog = _ => _; + this._outputFilterSensitiveLog = _ => _; + this._serializer = null; + this._deserializer = null; + } + init(_) { + this._init = _; + } + ep(_) { + this._ep = _; + return this; + } + m(_) { + this._middlewareFn = _; + return this; + } + s(_, ee, ne = {}) { + this._smithyContext = { + service: _, + operation: ee, + ...ne + }; + return this; + } + c(_ = {}) { + this._additionalContext = _; + return this; + } + n(_, ee) { + this._clientName = _; + this._commandName = ee; + return this; + } + f(_ = _ => _, ee = _ => _) { + this._inputFilterSensitiveLog = _; + this._outputFilterSensitiveLog = ee; + return this; + } + ser(_) { + this._serializer = _; + return this; + } + de(_) { + this._deserializer = _; + return this; + } + build() { + const _ = this; + let ee; + return ee = class extends Command { + static getEndpointParameterInstructions() { + return _._ep; + } + constructor(...[ee]) { + super(); + this.serialize = _._serializer; + this.deserialize = _._deserializer; + this.input = null != ee ? ee : {}; + _._init(this); + } + resolveMiddleware(ne, ie, re) { + return this.resolveMiddlewareWithContext(ne, ie, re, { + CommandCtor: ee, + middlewareFn: _._middlewareFn, + clientName: _._clientName, + commandName: _._commandName, + inputFilterSensitiveLog: _._inputFilterSensitiveLog, + outputFilterSensitiveLog: _._outputFilterSensitiveLog, + smithyContext: _._smithyContext, + additionalContext: _._additionalContext + }); + } + }; + } +}, SENSITIVE_STRING = "***SensitiveInformation***", createAggregatedClient = (_, ee) => { + for (const ne of Object.keys(_)) { + const ie = _[ne], methodImpl = async function(_, ee, ne) { + const re = new ie(_); + if ("function" == typeof ee) this.send(re, ee); else if ("function" == typeof ne) { + if ("object" != typeof ee) throw new Error("Expected http options but got " + typeof ee); + this.send(re, ee || {}, ne); + } else return this.send(re, ee); + }, re = (ne[0].toLowerCase() + ne.slice(1)).replace(/Command$/, ""); + ee.prototype[re] = methodImpl; + } +}, parseBoolean = _ => { + switch (_) { + case "true": + return true; + + case "false": + return false; + + default: + throw new Error(`Unable to parse boolean value "${_}"`); + } +}, expectNumber = _ => { + if (null != _) { + if ("string" == typeof _) { + const ee = parseFloat(_); + if (!Number.isNaN(ee)) { + if (String(ee) !== String(_)) logger.warn(stackTraceWarning(`Expected number but observed string: ${_}`)); + return ee; + } + } + if ("number" == typeof _) return _; + throw new TypeError(`Expected number, got ${typeof _}: ${_}`); + } +}, MAX_FLOAT = Math.ceil(2 ** 127 * (2 - 2 ** -23)), expectFloat32 = _ => { + const ee = expectNumber(_); + if (void 0 !== ee && !Number.isNaN(ee) && ee !== 1 / 0 && ee !== -1 / 0) if (Math.abs(ee) > MAX_FLOAT) throw new TypeError(`Expected 32-bit float, got ${_}`); + return ee; +}, expectLong = _ => { + if (null != _) { + if (Number.isInteger(_) && !Number.isNaN(_)) return _; + throw new TypeError(`Expected integer, got ${typeof _}: ${_}`); + } +}, expectInt32 = _ => expectSizedInt(_, 32), expectShort = _ => expectSizedInt(_, 16), expectByte = _ => expectSizedInt(_, 8), expectSizedInt = (_, ee) => { + const ne = expectLong(_); + if (void 0 !== ne && castInt(ne, ee) !== ne) throw new TypeError(`Expected ${ee}-bit integer, got ${_}`); + return ne; +}, castInt = (_, ee) => { + switch (ee) { + case 32: + return Int32Array.of(_)[0]; + + case 16: + return Int16Array.of(_)[0]; + + case 8: + return Int8Array.of(_)[0]; + } +}, expectNonNull = (_, ee) => { + if (null == _) { + if (ee) throw new TypeError(`Expected a non-null value for ${ee}`); + throw new TypeError("Expected a non-null value"); + } + return _; +}, expectObject = _ => { + if (null == _) return; + if ("object" == typeof _ && !Array.isArray(_)) return _; + const ee = Array.isArray(_) ? "array" : typeof _; + throw new TypeError(`Expected object, got ${ee}: ${_}`); +}, expectString = _ => { + if (null != _) { + if ("string" == typeof _) return _; + if ([ "boolean", "number", "bigint" ].includes(typeof _)) { + logger.warn(stackTraceWarning(`Expected string, got ${typeof _}: ${_}`)); + return String(_); + } + throw new TypeError(`Expected string, got ${typeof _}: ${_}`); + } +}, expectUnion = _ => { + if (null == _) return; + const ee = expectObject(_), ne = Object.entries(ee).filter((([, _]) => null != _)).map((([_]) => _)); + if (0 === ne.length) throw new TypeError("Unions must have exactly one non-null member. None were found."); + if (ne.length > 1) throw new TypeError(`Unions must have exactly one non-null member. Keys ${ne} were not null.`); + return ee; +}, strictParseFloat32 = _ => { + if ("string" == typeof _) return expectFloat32(parseNumber2(_)); else return expectFloat32(_); +}, NUMBER_REGEX = /(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g, parseNumber2 = _ => { + const ee = _.match(NUMBER_REGEX); + if (null === ee || ee[0].length !== _.length) throw new TypeError("Expected real number, got implicit NaN"); + return parseFloat(_); +}, strictParseLong = _ => { + if ("string" == typeof _) return expectLong(parseNumber2(_)); else return expectLong(_); +}, strictParseInt32 = _ => { + if ("string" == typeof _) return expectInt32(parseNumber2(_)); else return expectInt32(_); +}, strictParseShort = _ => { + if ("string" == typeof _) return expectShort(parseNumber2(_)); else return expectShort(_); +}, strictParseByte = _ => { + if ("string" == typeof _) return expectByte(parseNumber2(_)); else return expectByte(_); +}, stackTraceWarning = _ => String(new TypeError(_).stack || _).split("\n").slice(0, 5).filter((_ => !_.includes("stackTraceWarning"))).join("\n"), logger = { + warn: console.warn +}, DAYS = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], MONTHS = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; + +function dateToUtcString(_) { + const ee = _.getUTCFullYear(), ne = _.getUTCMonth(), ie = _.getUTCDay(), re = _.getUTCDate(), se = _.getUTCHours(), oe = _.getUTCMinutes(), le = _.getUTCSeconds(), ue = re < 10 ? `0${re}` : `${re}`, de = se < 10 ? `0${se}` : `${se}`, fe = oe < 10 ? `0${oe}` : `${oe}`, he = le < 10 ? `0${le}` : `${le}`; + return `${DAYS[ie]}, ${ue} ${MONTHS[ne]} ${ee} ${de}:${fe}:${he} GMT`; +} + +var RFC3339 = new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/), RFC3339_WITH_OFFSET = new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/), parseRfc3339DateTimeWithOffset = _ => { + if (null == _) return; + if ("string" != typeof _) throw new TypeError("RFC-3339 date-times must be expressed as strings"); + const ee = RFC3339_WITH_OFFSET.exec(_); + if (!ee) throw new TypeError("Invalid RFC-3339 date-time value"); + const [ne, ie, re, se, oe, le, ue, de, fe] = ee, he = strictParseShort(stripLeadingZeroes(ie)), pe = parseDateValue(re, "month", 1, 12), ge = parseDateValue(se, "day", 1, 31), me = buildDate(he, pe, ge, { + hours: oe, + minutes: le, + seconds: ue, + fractionalMilliseconds: de + }); + if ("Z" != fe.toUpperCase()) me.setTime(me.getTime() - parseOffsetToMilliseconds(fe)); + return me; +}, IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/), RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/), ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/), parseRfc7231DateTime = _ => { + if (null == _) return; + if ("string" != typeof _) throw new TypeError("RFC-7231 date-times must be expressed as strings"); + let ee = IMF_FIXDATE.exec(_); + if (ee) { + const [_, ne, ie, re, se, oe, le, ue] = ee; + return buildDate(strictParseShort(stripLeadingZeroes(re)), parseMonthByShortName(ie), parseDateValue(ne, "day", 1, 31), { + hours: se, + minutes: oe, + seconds: le, + fractionalMilliseconds: ue + }); + } + ee = RFC_850_DATE.exec(_); + if (ee) { + const [_, ne, ie, re, se, oe, le, ue] = ee; + return adjustRfc850Year(buildDate(parseTwoDigitYear(re), parseMonthByShortName(ie), parseDateValue(ne, "day", 1, 31), { + hours: se, + minutes: oe, + seconds: le, + fractionalMilliseconds: ue + })); + } + ee = ASC_TIME.exec(_); + if (ee) { + const [_, ne, ie, re, se, oe, le, ue] = ee; + return buildDate(strictParseShort(stripLeadingZeroes(ue)), parseMonthByShortName(ne), parseDateValue(ie.trimLeft(), "day", 1, 31), { + hours: re, + minutes: se, + seconds: oe, + fractionalMilliseconds: le + }); + } + throw new TypeError("Invalid RFC-7231 date-time value"); +}, buildDate = (_, ee, ne, ie) => { + const re = ee - 1; + validateDayOfMonth(_, re, ne); + return new Date(Date.UTC(_, re, ne, parseDateValue(ie.hours, "hour", 0, 23), parseDateValue(ie.minutes, "minute", 0, 59), parseDateValue(ie.seconds, "seconds", 0, 60), parseMilliseconds(ie.fractionalMilliseconds))); +}, parseTwoDigitYear = _ => { + const ee = (new Date).getUTCFullYear(), ne = 100 * Math.floor(ee / 100) + strictParseShort(stripLeadingZeroes(_)); + if (ne < ee) return ne + 100; else return ne; +}, FIFTY_YEARS_IN_MILLIS = 15768e8, adjustRfc850Year = _ => { + if (_.getTime() - (new Date).getTime() > FIFTY_YEARS_IN_MILLIS) return new Date(Date.UTC(_.getUTCFullYear() - 100, _.getUTCMonth(), _.getUTCDate(), _.getUTCHours(), _.getUTCMinutes(), _.getUTCSeconds(), _.getUTCMilliseconds())); else return _; +}, parseMonthByShortName = _ => { + const ee = MONTHS.indexOf(_); + if (ee < 0) throw new TypeError(`Invalid month: ${_}`); + return ee + 1; +}, DAYS_IN_MONTH = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ], validateDayOfMonth = (_, ee, ne) => { + let ie = DAYS_IN_MONTH[ee]; + if (1 === ee && isLeapYear(_)) ie = 29; + if (ne > ie) throw new TypeError(`Invalid day for ${MONTHS[ee]} in ${_}: ${ne}`); +}, isLeapYear = _ => _ % 4 == 0 && (_ % 100 != 0 || _ % 400 == 0), parseDateValue = (_, ee, ne, ie) => { + const re = strictParseByte(stripLeadingZeroes(_)); + if (re < ne || re > ie) throw new TypeError(`${ee} must be between ${ne} and ${ie}, inclusive`); + return re; +}, parseMilliseconds = _ => { + if (null == _) return 0; else return 1e3 * strictParseFloat32("0." + _); +}, parseOffsetToMilliseconds = _ => { + const ee = _[0]; + let ne = 1; + if ("+" == ee) ne = 1; else if ("-" == ee) ne = -1; else throw new TypeError(`Offset direction, ${ee}, must be "+" or "-"`); + return ne * (60 * Number(_.substring(1, 3)) + Number(_.substring(4, 6))) * 60 * 1e3; +}, stripLeadingZeroes = _ => { + let ee = 0; + for (;ee < _.length - 1 && "0" === _.charAt(ee); ) ee++; + if (0 === ee) return _; else return _.slice(ee); +}, ServiceException = class _ServiceException extends Error { + constructor(_) { + super(_.message); + Object.setPrototypeOf(this, _ServiceException.prototype); + this.name = _.name; + this.$fault = _.$fault; + this.$metadata = _.$metadata; + } +}, decorateServiceException = (_, ee = {}) => { + Object.entries(ee).filter((([, _]) => void 0 !== _)).forEach((([ee, ne]) => { + if (null == _[ee] || "" === _[ee]) _[ee] = ne; + })); + const ne = _.message || _.Message || "UnknownError"; + _.message = ne; + delete _.Message; + return _; +}, throwDefaultError = ({output: _, parsedBody: ee, exceptionCtor: ne, errorCode: ie}) => { + const re = deserializeMetadata(_), se = re.httpStatusCode ? re.httpStatusCode + "" : void 0, oe = new ne({ + name: (null == ee ? void 0 : ee.code) || (null == ee ? void 0 : ee.Code) || ie || se || "UnknownError", + $fault: "client", + $metadata: re + }); + throw decorateServiceException(oe, ee); +}, withBaseException = _ => ({output: ee, parsedBody: ne, errorCode: ie}) => { + throwDefaultError({ + output: ee, + parsedBody: ne, + exceptionCtor: _, + errorCode: ie + }); +}, deserializeMetadata = _ => { + var ee, ne; + return { + httpStatusCode: _.statusCode, + requestId: null != (ne = null != (ee = _.headers["x-amzn-requestid"]) ? ee : _.headers["x-amzn-request-id"]) ? ne : _.headers["x-amz-request-id"], + extendedRequestId: _.headers["x-amz-id-2"], + cfId: _.headers["x-amz-cf-id"] + }; +}, loadConfigsForDefaultMode = _ => { + switch (_) { + case "standard": + return { + retryMode: "standard", + connectionTimeout: 3100 + }; + + case "in-region": + return { + retryMode: "standard", + connectionTimeout: 1100 + }; + + case "cross-region": + return { + retryMode: "standard", + connectionTimeout: 3100 + }; + + case "mobile": + return { + retryMode: "standard", + connectionTimeout: 3e4 + }; + + default: + return {}; + } +}, getChecksumConfiguration2 = _ => { + const ee = []; + for (const ne in AlgorithmId) { + const ie = AlgorithmId[ne]; + if (void 0 !== _[ie]) ee.push({ + algorithmId: () => ie, + checksumConstructor: () => _[ie] + }); + } + return { + _checksumAlgorithms: ee, + addChecksumAlgorithm(_) { + this._checksumAlgorithms.push(_); + }, + checksumAlgorithms() { + return this._checksumAlgorithms; + } + }; +}, resolveChecksumRuntimeConfig2 = _ => { + const ee = {}; + _.checksumAlgorithms().forEach((_ => { + ee[_.algorithmId()] = _.checksumConstructor(); + })); + return ee; +}, getRetryConfiguration = _ => { + let ee = _.retryStrategy; + return { + setRetryStrategy(_) { + ee = _; + }, + retryStrategy: () => ee + }; +}, resolveRetryRuntimeConfig = _ => { + const ee = {}; + ee.retryStrategy = _.retryStrategy(); + return ee; +}, getDefaultExtensionConfiguration = _ => ({ + ...getChecksumConfiguration2(_), + ...getRetryConfiguration(_) +}), resolveDefaultRuntimeConfig = _ => ({ + ...resolveChecksumRuntimeConfig2(_), + ...resolveRetryRuntimeConfig(_) +}); + +function extendedEncodeURIComponent(_) { + return encodeURIComponent(_).replace(/[!'()*]/g, (function(_) { + return "%" + _.charCodeAt(0).toString(16).toUpperCase(); + })); +} + +var getArrayIfSingleItem = _ => Array.isArray(_) ? _ : [ _ ], getValueFromTextNode = _ => { + const ee = "#text"; + for (const ne in _) if (_.hasOwnProperty(ne) && void 0 !== _[ne][ee]) _[ne] = _[ne][ee]; else if ("object" == typeof _[ne] && null !== _[ne]) _[ne] = getValueFromTextNode(_[ne]); + return _; +}, StringWrapper = function() { + const _ = Object.getPrototypeOf(this).constructor, ee = new (Function.bind.apply(String, [ null, ...arguments ])); + Object.setPrototypeOf(ee, _.prototype); + return ee; +}; + +StringWrapper.prototype = Object.create(String.prototype, { + constructor: { + value: StringWrapper, + enumerable: false, + writable: true, + configurable: true + } +}); + +Object.setPrototypeOf(StringWrapper, String); + +function map(_, ee, ne) { + let ie, re, se; + if ("undefined" == typeof ee && "undefined" == typeof ne) { + ie = {}; + se = _; + } else { + ie = _; + if ("function" == typeof ee) { + re = ee; + se = ne; + return mapWithFilter(ie, re, se); + } else se = ee; + } + for (const _ of Object.keys(se)) if (Array.isArray(se[_])) applyInstruction(ie, null, se, _); else ie[_] = se[_]; + return ie; +} + +var mapWithFilter = (_, ee, ne) => map(_, Object.entries(ne).reduce(((_, [ne, ie]) => { + if (Array.isArray(ie)) _[ne] = ie; else if ("function" == typeof ie) _[ne] = [ ee, ie() ]; else _[ne] = [ ee, ie ]; + return _; +}), {})), applyInstruction = (_, ee, ne, ie) => { + if (null !== ee) { + let re = ne[ie]; + if ("function" == typeof re) re = [ , re ]; + const [se = nonNullish, oe = pass, le = ie] = re; + if ("function" == typeof se && se(ee[le]) || "function" != typeof se && !!se) _[ie] = oe(ee[le]); + return; + } + let [re, se] = ne[ie]; + if ("function" == typeof se) { + let ee; + const ne = void 0 === re && null != (ee = se()), oe = "function" == typeof re && !!re(void 0) || "function" != typeof re && !!re; + if (ne) _[ie] = ee; else if (oe) _[ie] = se(); + } else { + const ee = void 0 === re && null != se, ne = "function" == typeof re && !!re(se) || "function" != typeof re && !!re; + if (ee || ne) _[ie] = se; + } +}, nonNullish = _ => null != _, pass = _ => _, resolvedPath = (_, ee, ne, ie, re, se) => { + if (null != ee && void 0 !== ee[ne]) { + const ee = ie(); + if (ee.length <= 0) throw new Error("Empty value provided for input HTTP label: " + ne + "."); + _ = _.replace(re, se ? ee.split("/").map((_ => extendedEncodeURIComponent(_))).join("/") : extendedEncodeURIComponent(ee)); + } else throw new Error("No value provided for input HTTP label: " + ne + "."); + return _; +}, serializeDateTime = _ => _.toISOString().replace(".000Z", "Z"), CONTENT_LENGTH_HEADER = "content-length"; + +function checkContentLengthHeader() { + return (_, ee) => async ne => { + var ie; + const {request: re} = ne; + if (HttpRequest.isInstance(re)) if (!(CONTENT_LENGTH_HEADER in re.headers)) { + const _ = "Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage."; + if ("function" == typeof (null == (ie = null == ee ? void 0 : ee.logger) ? void 0 : ie.warn) && !(ee.logger instanceof NoOpLogger)) ee.logger.warn(_); else console.warn(_); + } + return _({ + ...ne + }); + }; +} + +var checkContentLengthHeaderMiddlewareOptions = { + step: "finalizeRequest", + tags: [ "CHECK_CONTENT_LENGTH_HEADER" ], + name: "getCheckContentLengthHeaderPlugin", + override: true +}, getCheckContentLengthHeaderPlugin = _ => ({ + applyToStack: _ => { + _.add(checkContentLengthHeader(), checkContentLengthHeaderMiddlewareOptions); + } +}), regionRedirectEndpointMiddleware = _ => (ee, ne) => async ie => { + const re = await _.region(), se = _.region; + if (ne.__s3RegionRedirect) _.region = async () => { + _.region = se; + return ne.__s3RegionRedirect; + }; + const oe = await ee(ie); + if (ne.__s3RegionRedirect) if (re !== await _.region()) throw new Error("Region was not restored following S3 region redirect."); + return oe; +}, regionRedirectEndpointMiddlewareOptions = { + tags: [ "REGION_REDIRECT", "S3" ], + name: "regionRedirectEndpointMiddleware", + override: true, + relation: "before", + toMiddleware: "endpointV2Middleware" +}; + +function regionRedirectMiddleware(_) { + return (ee, ne) => async ie => { + var re, se; + try { + return await ee(ie); + } catch (oe) { + if (_.followRegionRedirects && 301 === (null == (re = null == oe ? void 0 : oe.$metadata) ? void 0 : re.httpStatusCode)) { + try { + const ee = oe.$response.headers["x-amz-bucket-region"]; + null == (se = ne.logger) || se.debug(`Redirecting from ${await _.region()} to ${ee}`); + ne.__s3RegionRedirect = ee; + } catch (_) { + throw new Error("Region redirect failed: " + _); + } + return ee(ie); + } else throw oe; + } + }; +} + +var regionRedirectMiddlewareOptions = { + step: "initialize", + tags: [ "REGION_REDIRECT", "S3" ], + name: "regionRedirectMiddleware", + override: true +}, getRegionRedirectMiddlewarePlugin = _ => ({ + applyToStack: ee => { + ee.add(regionRedirectMiddleware(_), regionRedirectMiddlewareOptions); + ee.addRelativeTo(regionRedirectEndpointMiddleware(_), regionRedirectEndpointMiddlewareOptions); + } +}), s3ExpiresMiddleware = _ => (_, ee) => async ne => { + var ie; + const re = await _(ne), {response: se} = re; + if (HttpResponse.isInstance(se)) if (se.headers.expires) { + se.headers.expiresstring = se.headers.expires; + try { + parseRfc7231DateTime(se.headers.expires); + } catch (_) { + null == (ie = ee.logger) || ie.warn(`AWS SDK Warning for ${ee.clientName}::${ee.commandName} response parsing (${se.headers.expires}): ${_}`); + delete se.headers.expires; + } + } + return re; +}, s3ExpiresMiddlewareOptions = { + tags: [ "S3" ], + name: "s3ExpiresMiddleware", + override: true, + relation: "after", + toMiddleware: "deserializerMiddleware" +}, getS3ExpiresMiddlewarePlugin = _ => ({ + applyToStack: ee => { + ee.addRelativeTo(s3ExpiresMiddleware(_), s3ExpiresMiddlewareOptions); + } +}), S3ExpressIdentityCache = class _S3ExpressIdentityCache { + constructor(_ = {}) { + this.data = _; + this.lastPurgeTime = Date.now(); + } + get(_) { + const ee = this.data[_]; + if (ee) return ee; + } + set(_, ee) { + this.data[_] = ee; + return ee; + } + delete(_) { + delete this.data[_]; + } + async purgeExpired() { + const _ = Date.now(); + if (!(this.lastPurgeTime + _S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS > _)) for (const ee in this.data) { + const ne = this.data[ee]; + if (!ne.isRefreshing) { + const ie = await ne.identity; + if (ie.expiration) if (ie.expiration.getTime() < _) delete this.data[ee]; + } + } + } +}; + +S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS = 3e4; + +var S3ExpressIdentityCacheEntry = class { + constructor(_, ee = false, ne = Date.now()) { + this._identity = _; + this.isRefreshing = ee; + this.accessed = ne; + } + get identity() { + this.accessed = Date.now(); + return this._identity; + } +}, S3ExpressIdentityProviderImpl = class _S3ExpressIdentityProviderImpl { + constructor(_, ee = new S3ExpressIdentityCache) { + this.createSessionFn = _; + this.cache = ee; + } + async getS3ExpressIdentity(_, ee) { + const ne = ee.Bucket, {cache: ie} = this, re = ie.get(ne); + if (re) return re.identity.then((_ => { + var ee, se, oe, le; + if ((null != (se = null == (ee = _.expiration) ? void 0 : ee.getTime()) ? se : 0) < Date.now()) return ie.set(ne, new S3ExpressIdentityCacheEntry(this.getIdentity(ne))).identity; + if ((null != (le = null == (oe = _.expiration) ? void 0 : oe.getTime()) ? le : 0) < Date.now() + _S3ExpressIdentityProviderImpl.REFRESH_WINDOW_MS && !re.isRefreshing) { + re.isRefreshing = true; + this.getIdentity(ne).then((_ => { + ie.set(ne, new S3ExpressIdentityCacheEntry(Promise.resolve(_))); + })); + } + return _; + })); else return ie.set(ne, new S3ExpressIdentityCacheEntry(this.getIdentity(ne))).identity; + } + async getIdentity(_) { + var ee, ne; + await this.cache.purgeExpired().catch((_ => { + console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n" + _); + })); + const ie = await this.createSessionFn(_); + if (!(null == (ee = ie.Credentials) ? void 0 : ee.AccessKeyId) || !(null == (ne = ie.Credentials) ? void 0 : ne.SecretAccessKey)) throw new Error("s3#createSession response credential missing AccessKeyId or SecretAccessKey."); + return { + accessKeyId: ie.Credentials.AccessKeyId, + secretAccessKey: ie.Credentials.SecretAccessKey, + sessionToken: ie.Credentials.SessionToken, + expiration: ie.Credentials.Expiration ? new Date(ie.Credentials.Expiration) : void 0 + }; + } +}; + +S3ExpressIdentityProviderImpl.REFRESH_WINDOW_MS = 6e4; + +var HEADER_VALUE_TYPE, getSmithyContext = _ => _[SMITHY_CONTEXT_KEY] || (_[SMITHY_CONTEXT_KEY] = {}), normalizeProvider = _ => { + if ("function" == typeof _) return _; + const ee = Promise.resolve(_); + return () => ee; +}, ALGORITHM_QUERY_PARAM = "X-Amz-Algorithm", CREDENTIAL_QUERY_PARAM = "X-Amz-Credential", AMZ_DATE_QUERY_PARAM = "X-Amz-Date", SIGNED_HEADERS_QUERY_PARAM = "X-Amz-SignedHeaders", EXPIRES_QUERY_PARAM = "X-Amz-Expires", SIGNATURE_QUERY_PARAM = "X-Amz-Signature", TOKEN_QUERY_PARAM = "X-Amz-Security-Token", AUTH_HEADER = "authorization", AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase(), DATE_HEADER = "date", GENERATED_HEADERS = [ AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER ], SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase(), SHA256_HEADER = "x-amz-content-sha256", TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase(), ALWAYS_UNSIGNABLE_HEADERS = { + authorization: true, + "cache-control": true, + connection: true, + expect: true, + from: true, + "keep-alive": true, + "max-forwards": true, + pragma: true, + referer: true, + te: true, + trailer: true, + "transfer-encoding": true, + upgrade: true, + "user-agent": true, + "x-amzn-trace-id": true +}, PROXY_HEADER_PATTERN = /^proxy-/, SEC_HEADER_PATTERN = /^sec-/, ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256", EVENT_ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256-PAYLOAD", UNSIGNED_PAYLOAD = "UNSIGNED-PAYLOAD", MAX_CACHE_SIZE = 50, KEY_TYPE_IDENTIFIER = "aws4_request", MAX_PRESIGNED_TTL = 604800, signingKeyCache = {}, cacheQueue = [], createScope = (_, ee, ne) => `${_}/${ee}/${ne}/${KEY_TYPE_IDENTIFIER}`, getSigningKey = async (_, ee, ne, ie, re) => { + const se = `${ne}:${ie}:${re}:${toHex(await hmac(_, ee.secretAccessKey, ee.accessKeyId))}:${ee.sessionToken}`; + if (se in signingKeyCache) return signingKeyCache[se]; + cacheQueue.push(se); + for (;cacheQueue.length > MAX_CACHE_SIZE; ) delete signingKeyCache[cacheQueue.shift()]; + let oe = `AWS4${ee.secretAccessKey}`; + for (const ee of [ ne, ie, re, KEY_TYPE_IDENTIFIER ]) oe = await hmac(_, oe, ee); + return signingKeyCache[se] = oe; +}, hmac = (_, ee, ne) => { + const ie = new _(ee); + ie.update(toUint8Array(ne)); + return ie.digest(); +}, getCanonicalHeaders = ({headers: _}, ee, ne) => { + const ie = {}; + for (const re of Object.keys(_).sort()) { + if (null == _[re]) continue; + const se = re.toLowerCase(); + if (se in ALWAYS_UNSIGNABLE_HEADERS || (null == ee ? void 0 : ee.has(se)) || PROXY_HEADER_PATTERN.test(se) || SEC_HEADER_PATTERN.test(se)) if (!ne || ne && !ne.has(se)) continue; + ie[se] = _[re].trim().replace(/\s+/g, " "); + } + return ie; +}, getCanonicalQuery = ({query: _ = {}}) => { + const ee = [], ne = {}; + for (const ie of Object.keys(_).sort()) { + if (ie.toLowerCase() === SIGNATURE_HEADER) continue; + ee.push(ie); + const re = _[ie]; + if ("string" == typeof re) ne[ie] = `${escapeUri(ie)}=${escapeUri(re)}`; else if (Array.isArray(re)) ne[ie] = re.slice(0).reduce(((_, ee) => _.concat([ `${escapeUri(ie)}=${escapeUri(ee)}` ])), []).sort().join("&"); + } + return ee.map((_ => ne[_])).filter((_ => _)).join("&"); +}, isArrayBuffer = _ => "function" == typeof ArrayBuffer && _ instanceof ArrayBuffer || "[object ArrayBuffer]" === Object.prototype.toString.call(_), getPayloadHash = async ({headers: _, body: ee}, ne) => { + for (const ee of Object.keys(_)) if (ee.toLowerCase() === SHA256_HEADER) return _[ee]; + if (null == ee) return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; else if ("string" == typeof ee || ArrayBuffer.isView(ee) || isArrayBuffer(ee)) { + const _ = new ne; + _.update(toUint8Array(ee)); + return toHex(await _.digest()); + } + return UNSIGNED_PAYLOAD; +}, HeaderFormatter = class { + format(_) { + const ee = []; + for (const ne of Object.keys(_)) { + const ie = fromUtf8(ne); + ee.push(Uint8Array.from([ ie.byteLength ]), ie, this.formatHeaderValue(_[ne])); + } + const ne = new Uint8Array(ee.reduce(((_, ee) => _ + ee.byteLength), 0)); + let ie = 0; + for (const _ of ee) { + ne.set(_, ie); + ie += _.byteLength; + } + return ne; + } + formatHeaderValue(_) { + switch (_.type) { + case "boolean": + return Uint8Array.from([ _.value ? 0 : 1 ]); + + case "byte": + return Uint8Array.from([ 2, _.value ]); + + case "short": + const ee = new DataView(new ArrayBuffer(3)); + ee.setUint8(0, 3); + ee.setInt16(1, _.value, false); + return new Uint8Array(ee.buffer); + + case "integer": + const ne = new DataView(new ArrayBuffer(5)); + ne.setUint8(0, 4); + ne.setInt32(1, _.value, false); + return new Uint8Array(ne.buffer); + + case "long": + const ie = new Uint8Array(9); + ie[0] = 5; + ie.set(_.value.bytes, 1); + return ie; + + case "binary": + const re = new DataView(new ArrayBuffer(3 + _.value.byteLength)); + re.setUint8(0, 6); + re.setUint16(1, _.value.byteLength, false); + const se = new Uint8Array(re.buffer); + se.set(_.value, 3); + return se; + + case "string": + const oe = fromUtf8(_.value), le = new DataView(new ArrayBuffer(3 + oe.byteLength)); + le.setUint8(0, 7); + le.setUint16(1, oe.byteLength, false); + const ue = new Uint8Array(le.buffer); + ue.set(oe, 3); + return ue; + + case "timestamp": + const de = new Uint8Array(9); + de[0] = 8; + de.set(Int64.fromNumber(_.value.valueOf()).bytes, 1); + return de; + + case "uuid": + if (!UUID_PATTERN.test(_.value)) throw new Error(`Invalid UUID received: ${_.value}`); + const fe = new Uint8Array(17); + fe[0] = 9; + fe.set(fromHex(_.value.replace(/\-/g, "")), 1); + return fe; + } + } +}; + +(function(_) { + _[_["boolTrue"] = 0] = "boolTrue"; + _[_["boolFalse"] = 1] = "boolFalse"; + _[_["byte"] = 2] = "byte"; + _[_["short"] = 3] = "short"; + _[_["integer"] = 4] = "integer"; + _[_["long"] = 5] = "long"; + _[_["byteArray"] = 6] = "byteArray"; + _[_["string"] = 7] = "string"; + _[_["timestamp"] = 8] = "timestamp"; + _[_["uuid"] = 9] = "uuid"; +})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {})); + +var UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/, Int64 = class _Int64 { + constructor(_) { + this.bytes = _; + if (8 !== _.byteLength) throw new Error("Int64 buffers must be exactly 8 bytes"); + } + static fromNumber(_) { + if (_ > 0x8000000000000000 || _ < -0x8000000000000000) throw new Error(`${_} is too large (or, if negative, too small) to represent as an Int64`); + const ee = new Uint8Array(8); + for (let ne = 7, ie = Math.abs(Math.round(_)); ne > -1 && ie > 0; ne--, ie /= 256) ee[ne] = ie; + if (_ < 0) negate(ee); + return new _Int64(ee); + } + valueOf() { + const _ = this.bytes.slice(0), ee = 128 & _[0]; + if (ee) negate(_); + return parseInt(toHex(_), 16) * (ee ? -1 : 1); + } + toString() { + return String(this.valueOf()); + } +}; + +function negate(_) { + for (let ee = 0; ee < 8; ee++) _[ee] ^= 255; + for (let ee = 7; ee > -1; ee--) { + _[ee]++; + if (0 !== _[ee]) break; + } +} + +var SelectorType, hasHeader = (_, ee) => { + _ = _.toLowerCase(); + for (const ne of Object.keys(ee)) if (_ === ne.toLowerCase()) return true; + return false; +}, cloneRequest = ({headers: _, query: ee, ...ne}) => ({ + ...ne, + headers: { + ..._ + }, + query: ee ? cloneQuery2(ee) : void 0 +}), cloneQuery2 = _ => Object.keys(_).reduce(((ee, ne) => { + const ie = _[ne]; + return { + ...ee, + [ne]: Array.isArray(ie) ? [ ...ie ] : ie + }; +}), {}), moveHeadersToQuery = (_, ee = {}) => { + var ne; + const {headers: ie, query: re = {}} = "function" == typeof _.clone ? _.clone() : cloneRequest(_); + for (const _ of Object.keys(ie)) { + const se = _.toLowerCase(); + if ("x-amz-" === se.slice(0, 6) && !(null == (ne = ee.unhoistableHeaders) ? void 0 : ne.has(se))) { + re[_] = ie[_]; + delete ie[_]; + } + } + return { + ..._, + headers: ie, + query: re + }; +}, prepareRequest = _ => { + _ = "function" == typeof _.clone ? _.clone() : cloneRequest(_); + for (const ee of Object.keys(_.headers)) if (GENERATED_HEADERS.indexOf(ee.toLowerCase()) > -1) delete _.headers[ee]; + return _; +}, iso8601 = _ => toDate(_).toISOString().replace(/\.\d{3}Z$/, "Z"), toDate = _ => { + if ("number" == typeof _) return new Date(1e3 * _); + if ("string" == typeof _) if (Number(_)) return new Date(1e3 * Number(_)); else return new Date(_); + return _; +}, SignatureV4 = class { + constructor({applyChecksum: _, credentials: ee, region: ne, service: ie, sha256: re, uriEscapePath: se = true}) { + this.headerFormatter = new HeaderFormatter; + this.service = ie; + this.sha256 = re; + this.uriEscapePath = se; + this.applyChecksum = "boolean" == typeof _ ? _ : true; + this.regionProvider = normalizeProvider(ne); + this.credentialProvider = normalizeProvider(ee); + } + async presign(_, ee = {}) { + const {signingDate: ne = new Date, expiresIn: ie = 3600, unsignableHeaders: re, unhoistableHeaders: se, signableHeaders: oe, signingRegion: le, signingService: ue} = ee, de = await this.credentialProvider(); + this.validateResolvedCredentials(de); + const fe = null != le ? le : await this.regionProvider(), {longDate: he, shortDate: pe} = formatDate(ne); + if (ie > MAX_PRESIGNED_TTL) return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future"); + const ge = createScope(pe, fe, null != ue ? ue : this.service), me = moveHeadersToQuery(prepareRequest(_), { + unhoistableHeaders: se + }); + if (de.sessionToken) me.query[TOKEN_QUERY_PARAM] = de.sessionToken; + me.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER; + me.query[CREDENTIAL_QUERY_PARAM] = `${de.accessKeyId}/${ge}`; + me.query[AMZ_DATE_QUERY_PARAM] = he; + me.query[EXPIRES_QUERY_PARAM] = ie.toString(10); + const ye = getCanonicalHeaders(me, re, oe); + me.query[SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(ye); + me.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(he, ge, this.getSigningKey(de, fe, pe, ue), this.createCanonicalRequest(me, ye, await getPayloadHash(_, this.sha256))); + return me; + } + async sign(_, ee) { + if ("string" == typeof _) return this.signString(_, ee); else if (_.headers && _.payload) return this.signEvent(_, ee); else if (_.message) return this.signMessage(_, ee); else return this.signRequest(_, ee); + } + async signEvent({headers: _, payload: ee}, {signingDate: ne = new Date, priorSignature: ie, signingRegion: re, signingService: se}) { + const oe = null != re ? re : await this.regionProvider(), {shortDate: le, longDate: ue} = formatDate(ne), de = createScope(le, oe, null != se ? se : this.service), fe = await getPayloadHash({ + headers: {}, + body: ee + }, this.sha256), he = new this.sha256; + he.update(_); + const pe = toHex(await he.digest()), ge = [ EVENT_ALGORITHM_IDENTIFIER, ue, de, ie, pe, fe ].join("\n"); + return this.signString(ge, { + signingDate: ne, + signingRegion: oe, + signingService: se + }); + } + async signMessage(_, {signingDate: ee = new Date, signingRegion: ne, signingService: ie}) { + return this.signEvent({ + headers: this.headerFormatter.format(_.message.headers), + payload: _.message.body + }, { + signingDate: ee, + signingRegion: ne, + signingService: ie, + priorSignature: _.priorSignature + }).then((ee => ({ + message: _.message, + signature: ee + }))); + } + async signString(_, {signingDate: ee = new Date, signingRegion: ne, signingService: ie} = {}) { + const re = await this.credentialProvider(); + this.validateResolvedCredentials(re); + const se = null != ne ? ne : await this.regionProvider(), {shortDate: oe} = formatDate(ee), le = new this.sha256(await this.getSigningKey(re, se, oe, ie)); + le.update(toUint8Array(_)); + return toHex(await le.digest()); + } + async signRequest(_, {signingDate: ee = new Date, signableHeaders: ne, unsignableHeaders: ie, signingRegion: re, signingService: se} = {}) { + const oe = await this.credentialProvider(); + this.validateResolvedCredentials(oe); + const le = null != re ? re : await this.regionProvider(), ue = prepareRequest(_), {longDate: de, shortDate: fe} = formatDate(ee), he = createScope(fe, le, null != se ? se : this.service); + ue.headers[AMZ_DATE_HEADER] = de; + if (oe.sessionToken) ue.headers[TOKEN_HEADER] = oe.sessionToken; + const pe = await getPayloadHash(ue, this.sha256); + if (!hasHeader(SHA256_HEADER, ue.headers) && this.applyChecksum) ue.headers[SHA256_HEADER] = pe; + const ge = getCanonicalHeaders(ue, ie, ne), me = await this.getSignature(de, he, this.getSigningKey(oe, le, fe, se), this.createCanonicalRequest(ue, ge, pe)); + ue.headers[AUTH_HEADER] = `${ALGORITHM_IDENTIFIER} Credential=${oe.accessKeyId}/${he}, SignedHeaders=${getCanonicalHeaderList(ge)}, Signature=${me}`; + return ue; + } + createCanonicalRequest(_, ee, ne) { + const ie = Object.keys(ee).sort(); + return `${_.method}\n${this.getCanonicalPath(_)}\n${getCanonicalQuery(_)}\n${ie.map((_ => `${_}:${ee[_]}`)).join("\n")}\n\n${ie.join(";")}\n${ne}`; + } + async createStringToSign(_, ee, ne) { + const ie = new this.sha256; + ie.update(toUint8Array(ne)); + const re = await ie.digest(); + return `${ALGORITHM_IDENTIFIER}\n${_}\n${ee}\n${toHex(re)}`; + } + getCanonicalPath({path: _}) { + if (this.uriEscapePath) { + const ee = []; + for (const ne of _.split("/")) if (0 !== (null == ne ? void 0 : ne.length)) if ("." !== ne) if (".." === ne) ee.pop(); else ee.push(ne); + const ne = `${(null == _ ? void 0 : _.startsWith("/")) ? "/" : ""}${ee.join("/")}${ee.length > 0 && (null == _ ? void 0 : _.endsWith("/")) ? "/" : ""}`; + return escapeUri(ne).replace(/%2F/g, "/"); + } + return _; + } + async getSignature(_, ee, ne, ie) { + const re = await this.createStringToSign(_, ee, ie), se = new this.sha256(await ne); + se.update(toUint8Array(re)); + return toHex(await se.digest()); + } + getSigningKey(_, ee, ne, ie) { + return getSigningKey(this.sha256, _, ne, ee, ie || this.service); + } + validateResolvedCredentials(_) { + if ("object" != typeof _ || "string" != typeof _.accessKeyId || "string" != typeof _.secretAccessKey) throw new Error("Resolved credential object is not valid"); + } +}, formatDate = _ => { + const ee = iso8601(_).replace(/[\-:]/g, ""); + return { + longDate: ee, + shortDate: ee.slice(0, 8) + }; +}, getCanonicalHeaderList = _ => Object.keys(_).sort().join(";"); + +(function(_) { + _["ENV"] = "env"; + _["CONFIG"] = "shared config entry"; +})(SelectorType || (SelectorType = {})); + +var S3_EXPRESS_BUCKET_TYPE = "Directory", S3_EXPRESS_BACKEND = "S3Express", S3_EXPRESS_AUTH_SCHEME = "sigv4-s3express", SESSION_TOKEN_QUERY_PARAM = "X-Amz-S3session-Token", SESSION_TOKEN_HEADER = SESSION_TOKEN_QUERY_PARAM.toLowerCase(), SignatureV4S3Express = class extends SignatureV4 { + async signWithCredentials(_, ee, ne) { + const ie = getCredentialsWithoutSessionToken(ee); + _.headers[SESSION_TOKEN_HEADER] = ee.sessionToken; + setSingleOverride(this, ie); + return this.signRequest(_, null != ne ? ne : {}); + } + async presignWithCredentials(_, ee, ne) { + var ie; + const re = getCredentialsWithoutSessionToken(ee); + delete _.headers[SESSION_TOKEN_HEADER]; + _.headers[SESSION_TOKEN_QUERY_PARAM] = ee.sessionToken; + _.query = null != (ie = _.query) ? ie : {}; + _.query[SESSION_TOKEN_QUERY_PARAM] = ee.sessionToken; + setSingleOverride(this, re); + return this.presign(_, ne); + } +}; + +function getCredentialsWithoutSessionToken(_) { + return { + accessKeyId: _.accessKeyId, + secretAccessKey: _.secretAccessKey, + expiration: _.expiration + }; +} + +function setSingleOverride(_, ee) { + const ne = setTimeout((() => { + throw new Error("SignatureV4S3Express credential override was created but not called."); + }), 10), ie = _.credentialProvider; + _.credentialProvider = () => { + clearTimeout(ne); + _.credentialProvider = ie; + return Promise.resolve(ee); + }; +} + +var s3ExpressMiddleware = _ => (ee, ne) => async ie => { + var re, se, oe, le, ue; + if (ne.endpointV2) { + const ee = ne.endpointV2, de = (null == (oe = null == (se = null == (re = ee.properties) ? void 0 : re.authSchemes) ? void 0 : se[0]) ? void 0 : oe.name) === S3_EXPRESS_AUTH_SCHEME; + if ((null == (le = ee.properties) ? void 0 : le.backend) === S3_EXPRESS_BACKEND || (null == (ue = ee.properties) ? void 0 : ue.bucketType) === S3_EXPRESS_BUCKET_TYPE) ne.isS3ExpressBucket = true; + if (de) { + const ee = ie.input.Bucket; + if (ee) { + const re = await _.s3ExpressIdentityProvider.getS3ExpressIdentity(await _.credentials(), { + Bucket: ee + }); + ne.s3ExpressIdentity = re; + if (HttpRequest.isInstance(ie.request) && re.sessionToken) ie.request.headers[SESSION_TOKEN_HEADER] = re.sessionToken; + } + } + } + return ee(ie); +}, s3ExpressMiddlewareOptions = { + name: "s3ExpressMiddleware", + step: "build", + tags: [ "S3", "S3_EXPRESS" ], + override: true +}, getS3ExpressPlugin = _ => ({ + applyToStack: ee => { + ee.add(s3ExpressMiddleware(_), s3ExpressMiddlewareOptions); + } +}), resolveS3Config = (_, {session: ee}) => { + var ne, ie, re, se, oe, le; + const [ue, de] = ee; + return { + ..._, + forcePathStyle: null != (ne = _.forcePathStyle) ? ne : false, + useAccelerateEndpoint: null != (ie = _.useAccelerateEndpoint) ? ie : false, + disableMultiregionAccessPoints: null != (re = _.disableMultiregionAccessPoints) ? re : false, + followRegionRedirects: null != (se = _.followRegionRedirects) ? se : false, + s3ExpressIdentityProvider: null != (oe = _.s3ExpressIdentityProvider) ? oe : new S3ExpressIdentityProviderImpl((async _ => ue().send(new de({ + Bucket: _, + SessionMode: "ReadWrite" + })))), + bucketEndpoint: null != (le = _.bucketEndpoint) ? le : false + }; +}, throw200ExceptionsMiddleware = _ => ee => async ne => { + const ie = await ee(ne), {response: re} = ie; + if (!HttpResponse.isInstance(re)) return ie; + const {statusCode: se, body: oe} = re; + if (se < 200 || se >= 300) return ie; + const le = await collectBody2(oe, _), ue = await collectBodyString(le, _); + if (0 === le.length) { + const _ = new Error("S3 aborted request"); + _.name = "InternalError"; + throw _; + } + if (ue && ue.match("")) re.statusCode = 400; + re.body = le; + return ie; +}, collectBody2 = (_ = new Uint8Array, ee) => { + if (_ instanceof Uint8Array) return Promise.resolve(_); else return ee.streamCollector(_) || Promise.resolve(new Uint8Array); +}, collectBodyString = (_, ee) => collectBody2(_, ee).then((_ => ee.utf8Encoder(_))), throw200ExceptionsMiddlewareOptions = { + relation: "after", + toMiddleware: "deserializerMiddleware", + tags: [ "THROW_200_EXCEPTIONS", "S3" ], + name: "throw200ExceptionsMiddleware", + override: true +}, getThrow200ExceptionsPlugin = _ => ({ + applyToStack: ee => { + ee.addRelativeTo(throw200ExceptionsMiddleware(_), throw200ExceptionsMiddlewareOptions); + } +}), validate3 = _ => "string" == typeof _ && 0 === _.indexOf("arn:") && _.split(":").length >= 6; + +function bucketEndpointMiddleware(_) { + return (ee, ne) => async ie => { + var re, se, oe, le; + if (_.bucketEndpoint) { + const _ = ne.endpointV2; + if (_) { + const ee = ie.input.Bucket; + if ("string" == typeof ee) try { + const ne = new URL(ee); + _.url = ne; + } catch (_) { + const ie = `@aws-sdk/middleware-sdk-s3: bucketEndpoint=true was set but Bucket=${ee} could not be parsed as URL.`; + if ("NoOpLogger" === (null == (se = null == (re = ne.logger) ? void 0 : re.constructor) ? void 0 : se.name)) console.warn(ie); else null == (le = null == (oe = ne.logger) ? void 0 : oe.warn) || le.call(oe, ie); + throw _; + } + } + } + return ee(ie); + }; +} + +var bucketEndpointMiddlewareOptions = { + name: "bucketEndpointMiddleware", + override: true, + relation: "after", + toMiddleware: "endpointV2Middleware" +}; + +function validateBucketNameMiddleware({bucketEndpoint: _}) { + return ee => async ne => { + const {input: {Bucket: ie}} = ne; + if (!_ && "string" == typeof ie && !validate3(ie) && ie.indexOf("/") >= 0) { + const _ = new Error(`Bucket name shouldn't contain '/', received '${ie}'`); + _.name = "InvalidBucketName"; + throw _; + } + return ee({ + ...ne + }); + }; +} + +var validateBucketNameMiddlewareOptions = { + step: "initialize", + tags: [ "VALIDATE_BUCKET_NAME" ], + name: "validateBucketNameMiddleware", + override: true +}, getValidateBucketNamePlugin = _ => ({ + applyToStack: ee => { + ee.add(validateBucketNameMiddleware(_), validateBucketNameMiddlewareOptions); + ee.addRelativeTo(bucketEndpointMiddleware(_), bucketEndpointMiddlewareOptions); + } +}), memoize = (_, ee, ne) => { + let ie, re, se, oe = false; + const coalesceProvider = async () => { + if (!re) re = _(); + try { + ie = await re; + se = true; + oe = false; + } finally { + re = void 0; + } + return ie; + }; + if (void 0 === ee) return async _ => { + if (!se || (null == _ ? void 0 : _.forceRefresh)) ie = await coalesceProvider(); + return ie; + }; else return async _ => { + if (!se || (null == _ ? void 0 : _.forceRefresh)) ie = await coalesceProvider(); + if (oe) return ie; + if (ne && !ne(ie)) { + oe = true; + return ie; + } + if (ee(ie)) { + await coalesceProvider(); + return ie; + } + return ie; + }; +}, CREDENTIAL_EXPIRE_WINDOW = 3e5, resolveAwsAuthConfig = _ => { + const ee = _.credentials ? normalizeCredentialProvider(_.credentials) : _.credentialDefaultProvider(Object.assign({}, _, { + parentClientConfig: _ + })), {signingEscapePath: ne = true, systemClockOffset: ie = _.systemClockOffset || 0, sha256: re} = _; + let se; + if (_.signer) se = normalizeProvider(_.signer); else if (_.regionInfoProvider) se = () => normalizeProvider(_.region)().then((async ee => [ await _.regionInfoProvider(ee, { + useFipsEndpoint: await _.useFipsEndpoint(), + useDualstackEndpoint: await _.useDualstackEndpoint() + }) || {}, ee ])).then((([ie, se]) => { + const {signingRegion: oe, signingService: le} = ie; + _.signingRegion = _.signingRegion || oe || se; + _.signingName = _.signingName || le || _.serviceId; + const ue = { + ..._, + credentials: ee, + region: _.signingRegion, + service: _.signingName, + sha256: re, + uriEscapePath: ne + }; + return new (_.signerConstructor || SignatureV4)(ue); + })); else se = async ie => { + const se = "sigv4a" === (null == (ie = Object.assign({}, { + name: "sigv4", + signingName: _.signingName || _.defaultSigningName, + signingRegion: await normalizeProvider(_.region)(), + properties: {} + }, ie)) ? void 0 : ie.name), oe = ie.signingRegion, le = ie.signingName; + let ue; + if (se) ue = _.signingRegion || oe; else { + _.signingRegion = _.signingRegion || oe; + ue = _.signingRegion; + } + _.signingName = _.signingName || le || _.serviceId; + const de = { + ..._, + credentials: ee, + region: ue, + service: _.signingName, + sha256: re, + uriEscapePath: ne + }; + return new (_.signerConstructor || SignatureV4)(de); + }; + return { + ..._, + systemClockOffset: ie, + signingEscapePath: ne, + credentials: ee, + signer: se + }; +}, normalizeCredentialProvider = _ => { + if ("function" == typeof _) return memoize(_, (_ => void 0 !== _.expiration && _.expiration.getTime() - Date.now() < CREDENTIAL_EXPIRE_WINDOW), (_ => void 0 !== _.expiration)); else return normalizeProvider(_); +}, getSkewCorrectedDate = _ => new Date(Date.now() + _), isClockSkewed = (_, ee) => Math.abs(getSkewCorrectedDate(ee).getTime() - _) >= 3e5, getUpdatedSystemClockOffset = (_, ee) => { + const ne = Date.parse(_); + if (isClockSkewed(ne, ee)) return ne - Date.now(); else return ee; +}, awsAuthMiddleware = _ => (ee, ne) => async function(ie) { + var re, se, oe, le, ue, de, fe; + if (!HttpRequest.isInstance(ie.request)) return ee(ie); + let he, pe; + const ge = null == (oe = null == (se = null == (re = ne.endpointV2) ? void 0 : re.properties) ? void 0 : se.authSchemes) ? void 0 : oe[0], me = null == (de = null == (ue = null == (le = ne.endpointV2) ? void 0 : le.properties) ? void 0 : ue.authSchemes) ? void 0 : de[1]; + if ("sigv4a" === (null == ge ? void 0 : ge.name) && me) { + pe = await _.signer(he = ge); + const ee = pe; + if (!(() => { + var _; + if ("function" == typeof (null == ee ? void 0 : ee.getSigv4aSigner)) { + if ("node" !== (null == (_ = null == ee ? void 0 : ee.signerOptions) ? void 0 : _.runtime)) return false; + try { + ee.getSigv4aSigner(); + return true; + } catch (_) {} + } + return false; + })()) pe = await _.signer(he = me); + } else pe = await _.signer(he = ge); + let ye; + const Se = "sigv4a" === (null == he ? void 0 : he.name) ? null == (fe = null == he ? void 0 : he.signingRegionSet) ? void 0 : fe.join(",") : void 0, Ee = { + signingDate: getSkewCorrectedDate(_.systemClockOffset), + signingRegion: Se || ne["signing_region"], + signingService: ne["signing_service"] + }; + if (ne.s3ExpressIdentity) { + const _ = pe; + ye = await _.signWithCredentials(ie.request, ne.s3ExpressIdentity, Ee); + if (ye.headers["X-Amz-Security-Token"] || ye.headers["x-amz-security-token"]) throw new Error("X-Amz-Security-Token must not be set for s3-express requests."); + } else ye = await pe.sign(ie.request, Ee); + const ve = await ee({ + ...ie, + request: ye + }).catch((ee => { + var ne; + const ie = null != (ne = ee.ServerTime) ? ne : getDateHeader(ee.$response); + if (ie) _.systemClockOffset = getUpdatedSystemClockOffset(ie, _.systemClockOffset); + throw ee; + })), Ce = getDateHeader(ve.response); + if (Ce) _.systemClockOffset = getUpdatedSystemClockOffset(Ce, _.systemClockOffset); + return ve; +}, getDateHeader = _ => { + var ee, ne, ie; + return HttpResponse.isInstance(_) ? null != (ie = null == (ee = _.headers) ? void 0 : ee.date) ? ie : null == (ne = _.headers) ? void 0 : ne.Date : void 0; +}, awsAuthMiddlewareOptions = { + name: "awsAuthMiddleware", + tags: [ "SIGNATURE", "AWSAUTH" ], + relation: "after", + toMiddleware: "retryMiddleware", + override: true +}, getAwsAuthPlugin = _ => ({ + applyToStack: ee => { + ee.addRelativeTo(awsAuthMiddleware(_), awsAuthMiddlewareOptions); + } +}); + +function resolveUserAgentConfig(_) { + return { + ..._, + customUserAgent: "string" == typeof _.customUserAgent ? [ [ _.customUserAgent ] ] : _.customUserAgent + }; +} + +var IP_V4_REGEX = new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$"), isIpAddress = _ => IP_V4_REGEX.test(_) || _.startsWith("[") && _.endsWith("]"), VALID_HOST_LABEL_REGEX = new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"), isValidHostLabel = (_, ee = false) => { + if (!ee) return VALID_HOST_LABEL_REGEX.test(_); + const ne = _.split("."); + for (const _ of ne) if (!isValidHostLabel(_)) return false; + return true; +}, customEndpointFunctions = {}, debugId = "endpoints"; + +function toDebugString(_) { + if ("object" != typeof _ || null == _) return _; + if ("ref" in _) return `$${toDebugString(_.ref)}`; + if ("fn" in _) return `${_.fn}(${(_.argv || []).map(toDebugString).join(", ")})`; else return JSON.stringify(_, null, 2); +} + +var EndpointError = class extends Error { + constructor(_) { + super(_); + this.name = "EndpointError"; + } +}, booleanEquals = (_, ee) => _ === ee, getAttrPathList = _ => { + const ee = _.split("."), ne = []; + for (const ie of ee) { + const ee = ie.indexOf("["); + if (-1 !== ee) { + if (ie.indexOf("]") !== ie.length - 1) throw new EndpointError(`Path: '${_}' does not end with ']'`); + const re = ie.slice(ee + 1, -1); + if (Number.isNaN(parseInt(re))) throw new EndpointError(`Invalid array index: '${re}' in path: '${_}'`); + if (0 !== ee) ne.push(ie.slice(0, ee)); + ne.push(re); + } else ne.push(ie); + } + return ne; +}, getAttr = (_, ee) => getAttrPathList(ee).reduce(((ne, ie) => { + if ("object" != typeof ne) throw new EndpointError(`Index '${ie}' in '${ee}' not found in '${JSON.stringify(_)}'`); else if (Array.isArray(ne)) return ne[parseInt(ie)]; + return ne[ie]; +}), _), isSet = _ => null != _, not = _ => !_, DEFAULT_PORTS = { + [EndpointURLScheme.HTTP]: 80, + [EndpointURLScheme.HTTPS]: 443 +}, parseURL = _ => { + const ee = (() => { + try { + if (_ instanceof URL) return _; + if ("object" == typeof _ && "hostname" in _) { + const {hostname: ee, port: ne, protocol: ie = "", path: re = "", query: se = {}} = _, oe = new URL(`${ie}//${ee}${ne ? `:${ne}` : ""}${re}`); + oe.search = Object.entries(se).map((([_, ee]) => `${_}=${ee}`)).join("&"); + return oe; + } + return new URL(_); + } catch (_) { + return null; + } + })(); + if (!ee) { + console.error(`Unable to parse ${JSON.stringify(_)} as a whatwg URL.`); + return null; + } + const ne = ee.href, {host: ie, hostname: re, pathname: se, protocol: oe, search: le} = ee; + if (le) return null; + const ue = oe.slice(0, -1); + if (!Object.values(EndpointURLScheme).includes(ue)) return null; + const de = isIpAddress(re); + return { + scheme: ue, + authority: `${ie}${ne.includes(`${ie}:${DEFAULT_PORTS[ue]}`) || "string" == typeof _ && _.includes(`${ie}:${DEFAULT_PORTS[ue]}`) ? `:${DEFAULT_PORTS[ue]}` : ""}`, + path: se, + normalizedPath: se.endsWith("/") ? se : `${se}/`, + isIp: de + }; +}, stringEquals = (_, ee) => _ === ee, substring = (_, ee, ne, ie) => { + if (ee >= ne || _.length < ne) return null; + if (!ie) return _.substring(ee, ne); else return _.substring(_.length - ne, _.length - ee); +}, uriEncode = _ => encodeURIComponent(_).replace(/[!*'()]/g, (_ => `%${_.charCodeAt(0).toString(16).toUpperCase()}`)), endpointFunctions = { + booleanEquals, + getAttr, + isSet, + isValidHostLabel, + not, + parseURL, + stringEquals, + substring, + uriEncode +}, evaluateTemplate = (_, ee) => { + const ne = [], ie = { + ...ee.endpointParams, + ...ee.referenceRecord + }; + let re = 0; + for (;re < _.length; ) { + const ee = _.indexOf("{", re); + if (-1 === ee) { + ne.push(_.slice(re)); + break; + } + ne.push(_.slice(re, ee)); + const se = _.indexOf("}", ee); + if (-1 === se) { + ne.push(_.slice(ee)); + break; + } + if ("{" === _[ee + 1] && "}" === _[se + 1]) { + ne.push(_.slice(ee + 1, se)); + re = se + 2; + } + const oe = _.substring(ee + 1, se); + if (oe.includes("#")) { + const [_, ee] = oe.split("#"); + ne.push(getAttr(ie[_], ee)); + } else ne.push(ie[oe]); + re = se + 1; + } + return ne.join(""); +}, getReferenceValue = ({ref: _}, ee) => ({ + ...ee.endpointParams, + ...ee.referenceRecord +}[_]), evaluateExpression = (_, ee, ne) => { + if ("string" == typeof _) return evaluateTemplate(_, ne); else if (_["fn"]) return callFunction(_, ne); else if (_["ref"]) return getReferenceValue(_, ne); + throw new EndpointError(`'${ee}': ${String(_)} is not a string, function or reference.`); +}, callFunction = ({fn: _, argv: ee}, ne) => { + const ie = ee.map((_ => [ "boolean", "number" ].includes(typeof _) ? _ : evaluateExpression(_, "arg", ne))), re = _.split("."); + if (re[0] in customEndpointFunctions && null != re[1]) return customEndpointFunctions[re[0]][re[1]](...ie); else return endpointFunctions[_](...ie); +}, evaluateCondition = ({assign: _, ...ee}, ne) => { + var ie, re; + if (_ && _ in ne.referenceRecord) throw new EndpointError(`'${_}' is already defined in Reference Record.`); + const se = callFunction(ee, ne); + null == (re = null == (ie = ne.logger) ? void 0 : ie.debug) || re.call(ie, `${debugId} evaluateCondition: ${toDebugString(ee)} = ${toDebugString(se)}`); + return { + result: "" === se ? true : !!se, + ...null != _ && { + toAssign: { + name: _, + value: se + } + } + }; +}, evaluateConditions = (_ = [], ee) => { + var ne, ie; + const re = {}; + for (const se of _) { + const {result: _, toAssign: oe} = evaluateCondition(se, { + ...ee, + referenceRecord: { + ...ee.referenceRecord, + ...re + } + }); + if (!_) return { + result: _ + }; + if (oe) { + re[oe.name] = oe.value; + null == (ie = null == (ne = ee.logger) ? void 0 : ne.debug) || ie.call(ne, `${debugId} assign: ${oe.name} := ${toDebugString(oe.value)}`); + } + } + return { + result: true, + referenceRecord: re + }; +}, getEndpointHeaders = (_, ee) => Object.entries(_).reduce(((_, [ne, ie]) => ({ + ..._, + [ne]: ie.map((_ => { + const ie = evaluateExpression(_, "Header value entry", ee); + if ("string" != typeof ie) throw new EndpointError(`Header '${ne}' value '${ie}' is not a string`); + return ie; + })) +})), {}), getEndpointProperty = (_, ee) => { + if (Array.isArray(_)) return _.map((_ => getEndpointProperty(_, ee))); + switch (typeof _) { + case "string": + return evaluateTemplate(_, ee); + + case "object": + if (null === _) throw new EndpointError(`Unexpected endpoint property: ${_}`); + return getEndpointProperties(_, ee); + + case "boolean": + return _; + + default: + throw new EndpointError("Unexpected endpoint property type: " + typeof _); + } +}, getEndpointProperties = (_, ee) => Object.entries(_).reduce(((_, [ne, ie]) => ({ + ..._, + [ne]: getEndpointProperty(ie, ee) +})), {}), getEndpointUrl = (_, ee) => { + const ne = evaluateExpression(_, "Endpoint URL", ee); + if ("string" == typeof ne) try { + return new URL(ne); + } catch (_) { + console.error(`Failed to construct URL with ${ne}`, _); + throw _; + } + throw new EndpointError("Endpoint URL must be a string, got " + typeof ne); +}, evaluateEndpointRule = (_, ee) => { + var ne, ie; + const {conditions: re, endpoint: se} = _, {result: oe, referenceRecord: le} = evaluateConditions(re, ee); + if (!oe) return; + const ue = { + ...ee, + referenceRecord: { + ...ee.referenceRecord, + ...le + } + }, {url: de, properties: fe, headers: he} = se; + null == (ie = null == (ne = ee.logger) ? void 0 : ne.debug) || ie.call(ne, `${debugId} Resolving endpoint from template: ${toDebugString(se)}`); + return { + ...null != he && { + headers: getEndpointHeaders(he, ue) + }, + ...null != fe && { + properties: getEndpointProperties(fe, ue) + }, + url: getEndpointUrl(de, ue) + }; +}, evaluateErrorRule = (_, ee) => { + const {conditions: ne, error: ie} = _, {result: re, referenceRecord: se} = evaluateConditions(ne, ee); + if (re) throw new EndpointError(evaluateExpression(ie, "Error", { + ...ee, + referenceRecord: { + ...ee.referenceRecord, + ...se + } + })); +}, evaluateTreeRule = (_, ee) => { + const {conditions: ne, rules: ie} = _, {result: re, referenceRecord: se} = evaluateConditions(ne, ee); + if (re) return evaluateRules(ie, { + ...ee, + referenceRecord: { + ...ee.referenceRecord, + ...se + } + }); +}, evaluateRules = (_, ee) => { + for (const ne of _) if ("endpoint" === ne.type) { + const _ = evaluateEndpointRule(ne, ee); + if (_) return _; + } else if ("error" === ne.type) evaluateErrorRule(ne, ee); else if ("tree" === ne.type) { + const _ = evaluateTreeRule(ne, ee); + if (_) return _; + } else throw new EndpointError(`Unknown endpoint rule: ${ne}`); + throw new EndpointError("Rules evaluation failed"); +}, resolveEndpoint = (_, ee) => { + var ne, ie, re, se, oe, le; + const {endpointParams: ue, logger: de} = ee, {parameters: fe, rules: he} = _; + null == (ie = null == (ne = ee.logger) ? void 0 : ne.debug) || ie.call(ne, `${debugId} Initial EndpointParams: ${toDebugString(ue)}`); + const pe = Object.entries(fe).filter((([, _]) => null != _.default)).map((([_, ee]) => [ _, ee.default ])); + if (pe.length > 0) for (const [_, ee] of pe) ue[_] = null != (re = ue[_]) ? re : ee; + const ge = Object.entries(fe).filter((([, _]) => _.required)).map((([_]) => _)); + for (const _ of ge) if (null == ue[_]) throw new EndpointError(`Missing required parameter: '${_}'`); + const me = evaluateRules(he, { + endpointParams: ue, + logger: de, + referenceRecord: {} + }); + if (null == (se = ee.endpointParams) ? void 0 : se.Endpoint) try { + const _ = new URL(ee.endpointParams.Endpoint), {protocol: ne, port: ie} = _; + me.url.protocol = ne; + me.url.port = ie; + } catch (_) {} + null == (le = null == (oe = ee.logger) ? void 0 : oe.debug) || le.call(oe, `${debugId} Resolved endpoint: ${toDebugString(me)}`); + return me; +}, isVirtualHostableS3Bucket = (_, ee = false) => { + if (ee) { + for (const ee of _.split(".")) if (!isVirtualHostableS3Bucket(ee)) return false; + return true; + } + if (!isValidHostLabel(_)) return false; + if (_.length < 3 || _.length > 63) return false; + if (_ !== _.toLowerCase()) return false; + if (isIpAddress(_)) return false; else return true; +}, parseArn = _ => { + const ee = _.split(":"); + if (ee.length < 6) return null; + const [ne, ie, re, se, oe, ...le] = ee; + if ("arn" !== ne || "" === ie || "" === re || "" === le[0]) return null; else return { + partition: ie, + service: re, + region: se, + accountId: oe, + resourceId: le[0].includes("/") ? le[0].split("/") : le + }; +}, partitions_default = { + partitions: [ { + id: "aws", + outputs: { + dnsSuffix: "amazonaws.com", + dualStackDnsSuffix: "api.aws", + implicitGlobalRegion: "us-east-1", + name: "aws", + supportsDualStack: true, + supportsFIPS: true + }, + regionRegex: "^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$", + regions: { + "af-south-1": { + description: "Africa (Cape Town)" + }, + "ap-east-1": { + description: "Asia Pacific (Hong Kong)" + }, + "ap-northeast-1": { + description: "Asia Pacific (Tokyo)" + }, + "ap-northeast-2": { + description: "Asia Pacific (Seoul)" + }, + "ap-northeast-3": { + description: "Asia Pacific (Osaka)" + }, + "ap-south-1": { + description: "Asia Pacific (Mumbai)" + }, + "ap-south-2": { + description: "Asia Pacific (Hyderabad)" + }, + "ap-southeast-1": { + description: "Asia Pacific (Singapore)" + }, + "ap-southeast-2": { + description: "Asia Pacific (Sydney)" + }, + "ap-southeast-3": { + description: "Asia Pacific (Jakarta)" + }, + "ap-southeast-4": { + description: "Asia Pacific (Melbourne)" + }, + "aws-global": { + description: "AWS Standard global region" + }, + "ca-central-1": { + description: "Canada (Central)" + }, + "ca-west-1": { + description: "Canada West (Calgary)" + }, + "eu-central-1": { + description: "Europe (Frankfurt)" + }, + "eu-central-2": { + description: "Europe (Zurich)" + }, + "eu-north-1": { + description: "Europe (Stockholm)" + }, + "eu-south-1": { + description: "Europe (Milan)" + }, + "eu-south-2": { + description: "Europe (Spain)" + }, + "eu-west-1": { + description: "Europe (Ireland)" + }, + "eu-west-2": { + description: "Europe (London)" + }, + "eu-west-3": { + description: "Europe (Paris)" + }, + "il-central-1": { + description: "Israel (Tel Aviv)" + }, + "me-central-1": { + description: "Middle East (UAE)" + }, + "me-south-1": { + description: "Middle East (Bahrain)" + }, + "sa-east-1": { + description: "South America (Sao Paulo)" + }, + "us-east-1": { + description: "US East (N. Virginia)" + }, + "us-east-2": { + description: "US East (Ohio)" + }, + "us-west-1": { + description: "US West (N. California)" + }, + "us-west-2": { + description: "US West (Oregon)" + } + } + }, { + id: "aws-cn", + outputs: { + dnsSuffix: "amazonaws.com.cn", + dualStackDnsSuffix: "api.amazonwebservices.com.cn", + implicitGlobalRegion: "cn-northwest-1", + name: "aws-cn", + supportsDualStack: true, + supportsFIPS: true + }, + regionRegex: "^cn\\-\\w+\\-\\d+$", + regions: { + "aws-cn-global": { + description: "AWS China global region" + }, + "cn-north-1": { + description: "China (Beijing)" + }, + "cn-northwest-1": { + description: "China (Ningxia)" + } + } + }, { + id: "aws-us-gov", + outputs: { + dnsSuffix: "amazonaws.com", + dualStackDnsSuffix: "api.aws", + implicitGlobalRegion: "us-gov-west-1", + name: "aws-us-gov", + supportsDualStack: true, + supportsFIPS: true + }, + regionRegex: "^us\\-gov\\-\\w+\\-\\d+$", + regions: { + "aws-us-gov-global": { + description: "AWS GovCloud (US) global region" + }, + "us-gov-east-1": { + description: "AWS GovCloud (US-East)" + }, + "us-gov-west-1": { + description: "AWS GovCloud (US-West)" + } + } + }, { + id: "aws-iso", + outputs: { + dnsSuffix: "c2s.ic.gov", + dualStackDnsSuffix: "c2s.ic.gov", + implicitGlobalRegion: "us-iso-east-1", + name: "aws-iso", + supportsDualStack: false, + supportsFIPS: true + }, + regionRegex: "^us\\-iso\\-\\w+\\-\\d+$", + regions: { + "aws-iso-global": { + description: "AWS ISO (US) global region" + }, + "us-iso-east-1": { + description: "US ISO East" + }, + "us-iso-west-1": { + description: "US ISO WEST" + } + } + }, { + id: "aws-iso-b", + outputs: { + dnsSuffix: "sc2s.sgov.gov", + dualStackDnsSuffix: "sc2s.sgov.gov", + implicitGlobalRegion: "us-isob-east-1", + name: "aws-iso-b", + supportsDualStack: false, + supportsFIPS: true + }, + regionRegex: "^us\\-isob\\-\\w+\\-\\d+$", + regions: { + "aws-iso-b-global": { + description: "AWS ISOB (US) global region" + }, + "us-isob-east-1": { + description: "US ISOB East (Ohio)" + } + } + }, { + id: "aws-iso-e", + outputs: { + dnsSuffix: "cloud.adc-e.uk", + dualStackDnsSuffix: "cloud.adc-e.uk", + implicitGlobalRegion: "eu-isoe-west-1", + name: "aws-iso-e", + supportsDualStack: false, + supportsFIPS: true + }, + regionRegex: "^eu\\-isoe\\-\\w+\\-\\d+$", + regions: { + "eu-isoe-west-1": { + description: "EU ISOE West" + } + } + }, { + id: "aws-iso-f", + outputs: { + dnsSuffix: "csp.hci.ic.gov", + dualStackDnsSuffix: "csp.hci.ic.gov", + implicitGlobalRegion: "us-isof-south-1", + name: "aws-iso-f", + supportsDualStack: false, + supportsFIPS: true + }, + regionRegex: "^us\\-isof\\-\\w+\\-\\d+$", + regions: {} + } ], + version: "1.1" +}, selectedPartitionsInfo = partitions_default, selectedUserAgentPrefix = "", partition = _ => { + const {partitions: ee} = selectedPartitionsInfo; + for (const ne of ee) { + const {regions: ee, outputs: ie} = ne; + for (const [ne, re] of Object.entries(ee)) if (ne === _) return { + ...ie, + ...re + }; + } + for (const ne of ee) { + const {regionRegex: ee, outputs: ie} = ne; + if (new RegExp(ee).test(_)) return { + ...ie + }; + } + const ne = ee.find((_ => "aws" === _.id)); + if (!ne) throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist."); + return { + ...ne.outputs + }; +}, getUserAgentPrefix = () => selectedUserAgentPrefix, awsEndpointFunctions = { + isVirtualHostableS3Bucket, + parseArn, + partition +}; + +customEndpointFunctions.aws = awsEndpointFunctions; + +var USER_AGENT = "user-agent", X_AMZ_USER_AGENT = "x-amz-user-agent", SPACE = " ", UA_NAME_SEPARATOR = "/", UA_NAME_ESCAPE_REGEX = /[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g, UA_VALUE_ESCAPE_REGEX = /[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w\#]/g, UA_ESCAPE_CHAR = "-", userAgentMiddleware = _ => (ee, ne) => async ie => { + var re, se; + const {request: oe} = ie; + if (!HttpRequest.isInstance(oe)) return ee(ie); + const {headers: le} = oe, ue = (null == (re = null == ne ? void 0 : ne.userAgent) ? void 0 : re.map(escapeUserAgent)) || [], de = (await _.defaultUserAgentProvider()).map(escapeUserAgent), fe = (null == (se = null == _ ? void 0 : _.customUserAgent) ? void 0 : se.map(escapeUserAgent)) || [], he = getUserAgentPrefix(), pe = (he ? [ he ] : []).concat([ ...de, ...ue, ...fe ]).join(SPACE), ge = [ ...de.filter((_ => _.startsWith("aws-sdk-"))), ...fe ].join(SPACE); + if ("browser" !== _.runtime) { + if (ge) le[X_AMZ_USER_AGENT] = le[X_AMZ_USER_AGENT] ? `${le[USER_AGENT]} ${ge}` : ge; + le[USER_AGENT] = pe; + } else le[X_AMZ_USER_AGENT] = pe; + return ee({ + ...ie, + request: oe + }); +}, escapeUserAgent = _ => { + var ee; + const ne = _[0].split(UA_NAME_SEPARATOR).map((_ => _.replace(UA_NAME_ESCAPE_REGEX, UA_ESCAPE_CHAR))).join(UA_NAME_SEPARATOR), ie = null == (ee = _[1]) ? void 0 : ee.replace(UA_VALUE_ESCAPE_REGEX, UA_ESCAPE_CHAR), re = ne.indexOf(UA_NAME_SEPARATOR), se = ne.substring(0, re); + let oe = ne.substring(re + 1); + if ("api" === se) oe = oe.toLowerCase(); + return [ se, oe, ie ].filter((_ => _ && _.length > 0)).reduce(((_, ee, ne) => { + switch (ne) { + case 0: + return ee; + + case 1: + return `${_}/${ee}`; + + default: + return `${_}#${ee}`; + } + }), ""); +}, getUserAgentMiddlewareOptions = { + name: "getUserAgentMiddleware", + step: "build", + priority: "low", + tags: [ "SET_USER_AGENT", "USER_AGENT" ], + override: true +}, getUserAgentPlugin = _ => ({ + applyToStack: ee => { + ee.add(userAgentMiddleware(_), getUserAgentMiddlewareOptions); + } +}), DEFAULT_USE_DUALSTACK_ENDPOINT = false, DEFAULT_USE_FIPS_ENDPOINT = false, isFipsRegion = _ => "string" == typeof _ && (_.startsWith("fips-") || _.endsWith("-fips")), getRealRegion = _ => isFipsRegion(_) ? [ "fips-aws-global", "aws-fips" ].includes(_) ? "us-east-1" : _.replace(/fips-(dkr-|prod-)?|-fips/, "") : _, resolveRegionConfig = _ => { + const {region: ee, useFipsEndpoint: ne} = _; + if (!ee) throw new Error("Region is missing"); + return { + ..._, + region: async () => { + if ("string" == typeof ee) return getRealRegion(ee); + const _ = await ee(); + return getRealRegion(_); + }, + useFipsEndpoint: async () => { + const _ = "string" == typeof ee ? ee : await ee(); + if (isFipsRegion(_)) return true; else return "function" != typeof ne ? Promise.resolve(!!ne) : ne(); + } + }; +}, resolveEventStreamSerdeConfig = _ => ({ + ..._, + eventStreamMarshaller: _.eventStreamSerdeProvider(_) +}), CONTENT_LENGTH_HEADER2 = "content-length"; + +function contentLengthMiddleware(_) { + return ee => async ne => { + const ie = ne.request; + if (HttpRequest.isInstance(ie)) { + const {body: ee, headers: ne} = ie; + if (ee && -1 === Object.keys(ne).map((_ => _.toLowerCase())).indexOf(CONTENT_LENGTH_HEADER2)) try { + const ne = _(ee); + ie.headers = { + ...ie.headers, + [CONTENT_LENGTH_HEADER2]: String(ne) + }; + } catch (_) {} + } + return ee({ + ...ne, + request: ie + }); + }; +} + +var contentLengthMiddlewareOptions = { + step: "build", + tags: [ "SET_CONTENT_LENGTH", "CONTENT_LENGTH" ], + name: "contentLengthMiddleware", + override: true +}, getContentLengthPlugin = _ => ({ + applyToStack: ee => { + ee.add(contentLengthMiddleware(_.bodyLengthChecker), contentLengthMiddlewareOptions); + } +}), resolveParamsForS3 = async _ => { + const ee = (null == _ ? void 0 : _.Bucket) || ""; + if ("string" == typeof _.Bucket) _.Bucket = ee.replace(/#/g, encodeURIComponent("#")).replace(/\?/g, encodeURIComponent("?")); + if (isArnBucketName(ee)) { + if (true === _.ForcePathStyle) throw new Error("Path-style addressing cannot be used with ARN buckets"); + } else if (!isDnsCompatibleBucketName(ee) || -1 !== ee.indexOf(".") && !String(_.Endpoint).startsWith("http:") || ee.toLowerCase() !== ee || ee.length < 3) _.ForcePathStyle = true; + if (_.DisableMultiRegionAccessPoints) { + _.disableMultiRegionAccessPoints = true; + _.DisableMRAP = true; + } + return _; +}, DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/, IP_ADDRESS_PATTERN = /(\d+\.){3}\d+/, DOTS_PATTERN = /\.\./, isDnsCompatibleBucketName = _ => DOMAIN_PATTERN.test(_) && !IP_ADDRESS_PATTERN.test(_) && !DOTS_PATTERN.test(_), isArnBucketName = _ => { + const [ee, ne, ie, , , re] = _.split(":"), se = "arn" === ee && _.split(":").length >= 6, oe = Boolean(se && ne && ie && re); + if (se && !oe) throw new Error(`Invalid ARN: ${_} was an invalid ARN.`); + return oe; +}, createConfigValueProvider = (_, ee, ne) => { + const configProvider = async () => { + var ie; + const re = null != (ie = ne[_]) ? ie : ne[ee]; + if ("function" == typeof re) return re(); else return re; + }; + if ("credentialScope" === _ || "CredentialScope" === ee) return async () => { + var _; + const ee = "function" == typeof ne.credentials ? await ne.credentials() : ne.credentials; + return null != (_ = null == ee ? void 0 : ee.credentialScope) ? _ : null == ee ? void 0 : ee.CredentialScope; + }; + if ("endpoint" === _ || "endpoint" === ee) return async () => { + const _ = await configProvider(); + if (_ && "object" == typeof _) { + if ("url" in _) return _.url.href; + if ("hostname" in _) { + const {protocol: ee, hostname: ne, port: ie, path: re} = _; + return `${ee}//${ne}${ie ? ":" + ie : ""}${re}`; + } + } + return _; + }; else return configProvider; +}, getEndpointFromConfig = async _ => {}; + +function parseQueryString(_) { + const ee = {}; + if (_ = _.replace(/^\?/, "")) for (const ne of _.split("&")) { + let [_, ie = null] = ne.split("="); + _ = decodeURIComponent(_); + if (ie) ie = decodeURIComponent(ie); + if (!(_ in ee)) ee[_] = ie; else if (Array.isArray(ee[_])) ee[_].push(ie); else ee[_] = [ ee[_], ie ]; + } + return ee; +} + +var parseUrl = _ => { + if ("string" == typeof _) return parseUrl(new URL(_)); + const {hostname: ee, pathname: ne, port: ie, protocol: re, search: se} = _; + let oe; + if (se) oe = parseQueryString(se); + return { + hostname: ee, + port: ie ? parseInt(ie) : void 0, + protocol: re, + path: ne, + query: oe + }; +}, toEndpointV1 = _ => { + if ("object" == typeof _) if ("url" in _) return parseUrl(_.url); else return _; + return parseUrl(_); +}, getEndpointFromInstructions = async (_, ee, ne, ie) => { + if (!ne.endpoint) { + const _ = await getEndpointFromConfig(ne.serviceId || ""); + if (_) ne.endpoint = () => Promise.resolve(toEndpointV1(_)); + } + const re = await resolveParams(_, ee, ne); + if ("function" != typeof ne.endpointProvider) throw new Error("config.endpointProvider is not set."); + return ne.endpointProvider(re, ie); +}, resolveParams = async (_, ee, ne) => { + var ie; + const re = {}, se = (null == (ie = null == ee ? void 0 : ee.getEndpointParameterInstructions) ? void 0 : ie.call(ee)) || {}; + for (const [ee, ie] of Object.entries(se)) switch (ie.type) { + case "staticContextParams": + re[ee] = ie.value; + break; + + case "contextParams": + re[ee] = _[ie.name]; + break; + + case "clientContextParams": + case "builtInParams": + re[ee] = await createConfigValueProvider(ie.name, ee, ne)(); + break; + + default: + throw new Error("Unrecognized endpoint parameter instruction: " + JSON.stringify(ie)); + } + if (0 === Object.keys(se).length) Object.assign(re, ne); + if ("s3" === String(ne.serviceId).toLowerCase()) await resolveParamsForS3(re); + return re; +}, endpointMiddleware = ({config: _, instructions: ee}) => (ne, ie) => async re => { + var se, oe, le; + const ue = await getEndpointFromInstructions(re.input, { + getEndpointParameterInstructions: () => ee + }, { + ..._ + }, ie); + ie.endpointV2 = ue; + ie.authSchemes = null == (se = ue.properties) ? void 0 : se.authSchemes; + const de = null == (oe = ie.authSchemes) ? void 0 : oe[0]; + if (de) { + ie["signing_region"] = de.signingRegion; + ie["signing_service"] = de.signingName; + const _ = getSmithyContext(ie), ee = null == (le = null == _ ? void 0 : _.selectedHttpAuthScheme) ? void 0 : le.httpAuthOption; + if (ee) ee.signingProperties = Object.assign(ee.signingProperties || {}, { + signing_region: de.signingRegion, + signingRegion: de.signingRegion, + signing_service: de.signingName, + signingName: de.signingName, + signingRegionSet: de.signingRegionSet + }, de.properties); + } + return ne({ + ...re + }); +}, deserializerMiddleware = (_, ee) => ne => async ie => { + const {response: re} = await ne(ie); + try { + return { + response: re, + output: await ee(re, _) + }; + } catch (_) { + Object.defineProperty(_, "$response", { + value: re + }); + if (!("$metadata" in _)) { + const ee = "Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object."; + _.message += "\n " + ee; + if ("undefined" != typeof _.$responseBodyText) if (_.$response) _.$response.body = _.$responseBodyText; + } + throw _; + } +}, serializerMiddleware = (_, ee) => (ne, ie) => async re => { + var se; + const oe = (null == (se = ie.endpointV2) ? void 0 : se.url) && _.urlParser ? async () => _.urlParser(ie.endpointV2.url) : _.endpoint; + if (!oe) throw new Error("No valid endpoint provider available."); + const le = await ee(re.input, { + ..._, + endpoint: oe + }); + return ne({ + ...re, + request: le + }); +}, deserializerMiddlewareOption = { + name: "deserializerMiddleware", + step: "deserialize", + tags: [ "DESERIALIZER" ], + override: true +}, serializerMiddlewareOption = { + name: "serializerMiddleware", + step: "serialize", + tags: [ "SERIALIZER" ], + override: true +}; + +function getSerdePlugin(_, ee, ne) { + return { + applyToStack: ie => { + ie.add(deserializerMiddleware(_, ne), deserializerMiddlewareOption); + ie.add(serializerMiddleware(_, ee), serializerMiddlewareOption); + } + }; +} + +var RETRY_MODES, endpointMiddlewareOptions = { + step: "serialize", + tags: [ "ENDPOINT_PARAMETERS", "ENDPOINT_V2", "ENDPOINT" ], + name: "endpointV2Middleware", + override: true, + relation: "before", + toMiddleware: serializerMiddlewareOption.name +}, getEndpointPlugin = (_, ee) => ({ + applyToStack: ne => { + ne.addRelativeTo(endpointMiddleware({ + config: _, + instructions: ee + }), endpointMiddlewareOptions); + } +}), resolveEndpointConfig = _ => { + var ee, ne, ie; + const re = null != (ee = _.tls) ? ee : true, {endpoint: se} = _, oe = null != se ? async () => toEndpointV1(await normalizeProvider(se)()) : void 0, le = !!se; + return { + ..._, + endpoint: oe, + tls: re, + isCustomEndpoint: le, + useDualstackEndpoint: normalizeProvider(null != (ne = _.useDualstackEndpoint) ? ne : false), + useFipsEndpoint: normalizeProvider(null != (ie = _.useFipsEndpoint) ? ie : false) + }; +}; + +(function(_) { + _["STANDARD"] = "standard"; + _["ADAPTIVE"] = "adaptive"; +})(RETRY_MODES || (RETRY_MODES = {})); + +var getRandomValues2, DEFAULT_MAX_ATTEMPTS = 3, DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD, THROTTLING_ERROR_CODES = [ "BandwidthLimitExceeded", "EC2ThrottledException", "LimitExceededException", "PriorRequestNotComplete", "ProvisionedThroughputExceededException", "RequestLimitExceeded", "RequestThrottled", "RequestThrottledException", "SlowDown", "ThrottledException", "Throttling", "ThrottlingException", "TooManyRequestsException", "TransactionInProgressException" ], TRANSIENT_ERROR_CODES = [ "TimeoutError", "RequestTimeout", "RequestTimeoutException" ], TRANSIENT_ERROR_STATUS_CODES = [ 500, 502, 503, 504 ], NODEJS_TIMEOUT_ERROR_CODES = [ "ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT" ], isClockSkewCorrectedError = _ => { + var ee; + return null == (ee = _.$metadata) ? void 0 : ee.clockSkewCorrected; +}, isThrottlingError = _ => { + var ee, ne; + return 429 === (null == (ee = _.$metadata) ? void 0 : ee.httpStatusCode) || THROTTLING_ERROR_CODES.includes(_.name) || true == (null == (ne = _.$retryable) ? void 0 : ne.throttling); +}, isTransientError = _ => { + var ee; + return isClockSkewCorrectedError(_) || TRANSIENT_ERROR_CODES.includes(_.name) || NODEJS_TIMEOUT_ERROR_CODES.includes((null == _ ? void 0 : _.code) || "") || TRANSIENT_ERROR_STATUS_CODES.includes((null == (ee = _.$metadata) ? void 0 : ee.httpStatusCode) || 0); +}, isServerError = _ => { + var ee; + if (void 0 !== (null == (ee = _.$metadata) ? void 0 : ee.httpStatusCode)) { + const ee = _.$metadata.httpStatusCode; + if (500 <= ee && ee <= 599 && !isTransientError(_)) return true; else return false; + } + return false; +}, DefaultRateLimiter = class { + constructor(_) { + var ee, ne, ie, re, se; + this.currentCapacity = 0; + this.enabled = false; + this.lastMaxRate = 0; + this.measuredTxRate = 0; + this.requestCount = 0; + this.lastTimestamp = 0; + this.timeWindow = 0; + this.beta = null != (ee = null == _ ? void 0 : _.beta) ? ee : .7; + this.minCapacity = null != (ne = null == _ ? void 0 : _.minCapacity) ? ne : 1; + this.minFillRate = null != (ie = null == _ ? void 0 : _.minFillRate) ? ie : .5; + this.scaleConstant = null != (re = null == _ ? void 0 : _.scaleConstant) ? re : .4; + this.smooth = null != (se = null == _ ? void 0 : _.smooth) ? se : .8; + const oe = this.getCurrentTimeInSeconds(); + this.lastThrottleTime = oe; + this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds()); + this.fillRate = this.minFillRate; + this.maxCapacity = this.minCapacity; + } + getCurrentTimeInSeconds() { + return Date.now() / 1e3; + } + async getSendToken() { + return this.acquireTokenBucket(1); + } + async acquireTokenBucket(_) { + if (this.enabled) { + this.refillTokenBucket(); + if (_ > this.currentCapacity) { + const ee = (_ - this.currentCapacity) / this.fillRate * 1e3; + await new Promise((_ => setTimeout(_, ee))); + } + this.currentCapacity = this.currentCapacity - _; + } + } + refillTokenBucket() { + const _ = this.getCurrentTimeInSeconds(); + if (!this.lastTimestamp) { + this.lastTimestamp = _; + return; + } + const ee = (_ - this.lastTimestamp) * this.fillRate; + this.currentCapacity = Math.min(this.maxCapacity, this.currentCapacity + ee); + this.lastTimestamp = _; + } + updateClientSendingRate(_) { + let ee; + this.updateMeasuredRate(); + if (isThrottlingError(_)) { + const _ = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate); + this.lastMaxRate = _; + this.calculateTimeWindow(); + this.lastThrottleTime = this.getCurrentTimeInSeconds(); + ee = this.cubicThrottle(_); + this.enableTokenBucket(); + } else { + this.calculateTimeWindow(); + ee = this.cubicSuccess(this.getCurrentTimeInSeconds()); + } + const ne = Math.min(ee, 2 * this.measuredTxRate); + this.updateTokenBucketRate(ne); + } + calculateTimeWindow() { + this.timeWindow = this.getPrecise(Math.pow(this.lastMaxRate * (1 - this.beta) / this.scaleConstant, 1 / 3)); + } + cubicThrottle(_) { + return this.getPrecise(_ * this.beta); + } + cubicSuccess(_) { + return this.getPrecise(this.scaleConstant * Math.pow(_ - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate); + } + enableTokenBucket() { + this.enabled = true; + } + updateTokenBucketRate(_) { + this.refillTokenBucket(); + this.fillRate = Math.max(_, this.minFillRate); + this.maxCapacity = Math.max(_, this.minCapacity); + this.currentCapacity = Math.min(this.currentCapacity, this.maxCapacity); + } + updateMeasuredRate() { + const _ = this.getCurrentTimeInSeconds(), ee = Math.floor(2 * _) / 2; + this.requestCount++; + if (ee > this.lastTxRateBucket) { + const _ = this.requestCount / (ee - this.lastTxRateBucket); + this.measuredTxRate = this.getPrecise(_ * this.smooth + this.measuredTxRate * (1 - this.smooth)); + this.requestCount = 0; + this.lastTxRateBucket = ee; + } + } + getPrecise(_) { + return parseFloat(_.toFixed(8)); + } +}, DEFAULT_RETRY_DELAY_BASE = 100, MAXIMUM_RETRY_DELAY = 2e4, THROTTLING_RETRY_DELAY_BASE = 500, INITIAL_RETRY_TOKENS = 500, RETRY_COST = 5, TIMEOUT_RETRY_COST = 10, NO_RETRY_INCREMENT = 1, INVOCATION_ID_HEADER = "amz-sdk-invocation-id", REQUEST_HEADER = "amz-sdk-request", getDefaultRetryBackoffStrategy = () => { + let _ = DEFAULT_RETRY_DELAY_BASE; + return { + computeNextBackoffDelay: ee => Math.floor(Math.min(MAXIMUM_RETRY_DELAY, Math.random() * 2 ** ee * _)), + setDelayBase: ee => { + _ = ee; + } + }; +}, createDefaultRetryToken = ({retryDelay: _, retryCount: ee, retryCost: ne}) => ({ + getRetryCount: () => ee, + getRetryDelay: () => Math.min(MAXIMUM_RETRY_DELAY, _), + getRetryCost: () => ne +}), StandardRetryStrategy = class { + constructor(_) { + this.maxAttempts = _; + this.mode = RETRY_MODES.STANDARD; + this.capacity = INITIAL_RETRY_TOKENS; + this.retryBackoffStrategy = getDefaultRetryBackoffStrategy(); + this.maxAttemptsProvider = "function" == typeof _ ? _ : async () => _; + } + async acquireInitialRetryToken(_) { + return createDefaultRetryToken({ + retryDelay: DEFAULT_RETRY_DELAY_BASE, + retryCount: 0 + }); + } + async refreshRetryTokenForRetry(_, ee) { + const ne = await this.getMaxAttempts(); + if (this.shouldRetry(_, ee, ne)) { + const ne = ee.errorType; + this.retryBackoffStrategy.setDelayBase("THROTTLING" === ne ? THROTTLING_RETRY_DELAY_BASE : DEFAULT_RETRY_DELAY_BASE); + const ie = this.retryBackoffStrategy.computeNextBackoffDelay(_.getRetryCount()), re = ee.retryAfterHint ? Math.max(ee.retryAfterHint.getTime() - Date.now() || 0, ie) : ie, se = this.getCapacityCost(ne); + this.capacity -= se; + return createDefaultRetryToken({ + retryDelay: re, + retryCount: _.getRetryCount() + 1, + retryCost: se + }); + } + throw new Error("No retry token available"); + } + recordSuccess(_) { + var ee; + this.capacity = Math.max(INITIAL_RETRY_TOKENS, this.capacity + (null != (ee = _.getRetryCost()) ? ee : NO_RETRY_INCREMENT)); + } + getCapacity() { + return this.capacity; + } + async getMaxAttempts() { + try { + return await this.maxAttemptsProvider(); + } catch (_) { + console.warn(`Max attempts provider could not resolve. Using default of ${DEFAULT_MAX_ATTEMPTS}`); + return DEFAULT_MAX_ATTEMPTS; + } + } + shouldRetry(_, ee, ne) { + return _.getRetryCount() + 1 < ne && this.capacity >= this.getCapacityCost(ee.errorType) && this.isRetryableError(ee.errorType); + } + getCapacityCost(_) { + return "TRANSIENT" === _ ? TIMEOUT_RETRY_COST : RETRY_COST; + } + isRetryableError(_) { + return "THROTTLING" === _ || "TRANSIENT" === _; + } +}, AdaptiveRetryStrategy = class { + constructor(_, ee) { + this.maxAttemptsProvider = _; + this.mode = RETRY_MODES.ADAPTIVE; + const {rateLimiter: ne} = null != ee ? ee : {}; + this.rateLimiter = null != ne ? ne : new DefaultRateLimiter; + this.standardRetryStrategy = new StandardRetryStrategy(_); + } + async acquireInitialRetryToken(_) { + await this.rateLimiter.getSendToken(); + return this.standardRetryStrategy.acquireInitialRetryToken(_); + } + async refreshRetryTokenForRetry(_, ee) { + this.rateLimiter.updateClientSendingRate(ee); + return this.standardRetryStrategy.refreshRetryTokenForRetry(_, ee); + } + recordSuccess(_) { + this.rateLimiter.updateClientSendingRate({}); + this.standardRetryStrategy.recordSuccess(_); + } +}, ConfiguredRetryStrategy = class extends StandardRetryStrategy { + constructor(_, ee = DEFAULT_RETRY_DELAY_BASE) { + super("function" == typeof _ ? _ : async () => _); + if ("number" == typeof ee) this.computeNextBackoffDelay = () => ee; else this.computeNextBackoffDelay = ee; + } + async refreshRetryTokenForRetry(_, ee) { + const ne = await super.refreshRetryTokenForRetry(_, ee); + ne.getRetryDelay = () => this.computeNextBackoffDelay(ne.getRetryCount()); + return ne; + } +}, rnds82 = new Uint8Array(16); + +function rng2() { + if (!getRandomValues2) if (!(getRandomValues2 = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto))) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); + return getRandomValues2(rnds82); +} + +var byteToHex2 = []; + +for (let _ = 0; _ < 256; ++_) byteToHex2.push((_ + 256).toString(16).slice(1)); + +function unsafeStringify(_, ee = 0) { + return byteToHex2[_[ee + 0]] + byteToHex2[_[ee + 1]] + byteToHex2[_[ee + 2]] + byteToHex2[_[ee + 3]] + "-" + byteToHex2[_[ee + 4]] + byteToHex2[_[ee + 5]] + "-" + byteToHex2[_[ee + 6]] + byteToHex2[_[ee + 7]] + "-" + byteToHex2[_[ee + 8]] + byteToHex2[_[ee + 9]] + "-" + byteToHex2[_[ee + 10]] + byteToHex2[_[ee + 11]] + byteToHex2[_[ee + 12]] + byteToHex2[_[ee + 13]] + byteToHex2[_[ee + 14]] + byteToHex2[_[ee + 15]]; +} + +var randomUUID = "undefined" != typeof crypto && crypto.randomUUID && crypto.randomUUID.bind(crypto), native_default = { + randomUUID +}; + +function v42(_, ee, ne) { + if (native_default.randomUUID && !ee && !_) return native_default.randomUUID(); + const ie = (_ = _ || {}).random || (_.rng || rng2)(); + ie[6] = 15 & ie[6] | 64; + ie[8] = 63 & ie[8] | 128; + if (ee) { + ne = ne || 0; + for (let _ = 0; _ < 16; ++_) ee[ne + _] = ie[_]; + return ee; + } + return unsafeStringify(ie); +} + +var AnalyticsFilter, LifecycleRuleFilter, MetricsFilter, ReplicationRuleFilter, v4_default2 = v42, asSdkError = _ => { + if (_ instanceof Error) return _; + if (_ instanceof Object) return Object.assign(new Error, _); + if ("string" == typeof _) return new Error(_); else return new Error(`AWS SDK error wrapper for ${_}`); +}, resolveRetryConfig = _ => { + var ee; + const {retryStrategy: ne} = _, ie = normalizeProvider(null != (ee = _.maxAttempts) ? ee : DEFAULT_MAX_ATTEMPTS); + return { + ..._, + maxAttempts: ie, + retryStrategy: async () => { + if (ne) return ne; + if (await normalizeProvider(_.retryMode)() === RETRY_MODES.ADAPTIVE) return new AdaptiveRetryStrategy(ie); else return new StandardRetryStrategy(ie); + } + }; +}, isStreamingPayload = _ => (null == _ ? void 0 : _.body) instanceof ReadableStream, retryMiddleware = _ => (ee, ne) => async ie => { + var re; + let se = await _.retryStrategy(); + const oe = await _.maxAttempts(); + if (isRetryStrategyV2(se)) { + let _ = await se.acquireInitialRetryToken(ne["partition_id"]), le = new Error, ue = 0, de = 0; + const {request: fe} = ie, he = HttpRequest.isInstance(fe); + if (he) fe.headers[INVOCATION_ID_HEADER] = v4_default2(); + for (;;) try { + if (he) fe.headers[REQUEST_HEADER] = `attempt=${ue + 1}; max=${oe}`; + const {response: ne, output: re} = await ee(ie); + se.recordSuccess(_); + re.$metadata.attempts = ue + 1; + re.$metadata.totalRetryDelay = de; + return { + response: ne, + output: re + }; + } catch (ee) { + const ie = getRetryErrorInfo(ee); + le = asSdkError(ee); + if (he && isStreamingPayload(fe)) { + null == (re = ne.logger instanceof NoOpLogger ? console : ne.logger) || re.warn("An error was encountered in a non-retryable streaming request."); + throw le; + } + try { + _ = await se.refreshRetryTokenForRetry(_, ie); + } catch (_) { + if (!le.$metadata) le.$metadata = {}; + le.$metadata.attempts = ue + 1; + le.$metadata.totalRetryDelay = de; + throw le; + } + ue = _.getRetryCount(); + const oe = _.getRetryDelay(); + de += oe; + await new Promise((_ => setTimeout(_, oe))); + } + } else { + if (null == se ? void 0 : se.mode) ne.userAgent = [ ...ne.userAgent || [], [ "cfg/retry-mode", se.mode ] ]; + return se.retry(ee, ie); + } +}, isRetryStrategyV2 = _ => "undefined" != typeof _.acquireInitialRetryToken && "undefined" != typeof _.refreshRetryTokenForRetry && "undefined" != typeof _.recordSuccess, getRetryErrorInfo = _ => { + const ee = { + error: _, + errorType: getRetryErrorType(_) + }, ne = getRetryAfterHint(_.$response); + if (ne) ee.retryAfterHint = ne; + return ee; +}, getRetryErrorType = _ => { + if (isThrottlingError(_)) return "THROTTLING"; + if (isTransientError(_)) return "TRANSIENT"; + if (isServerError(_)) return "SERVER_ERROR"; else return "CLIENT_ERROR"; +}, retryMiddlewareOptions = { + name: "retryMiddleware", + tags: [ "RETRY" ], + step: "finalizeRequest", + priority: "high", + override: true +}, getRetryPlugin = _ => ({ + applyToStack: ee => { + ee.add(retryMiddleware(_), retryMiddlewareOptions); + } +}), getRetryAfterHint = _ => { + if (!HttpResponse.isInstance(_)) return; + const ee = Object.keys(_.headers).find((_ => "retry-after" === _.toLowerCase())); + if (!ee) return; + const ne = _.headers[ee], ie = Number(ne); + if (!Number.isNaN(ie)) return new Date(1e3 * ie); else return new Date(ne); +}, resolveClientEndpointParameters = _ => { + var ee, ne, ie, re, se, oe; + return { + ..._, + useFipsEndpoint: null != (ee = _.useFipsEndpoint) ? ee : false, + useDualstackEndpoint: null != (ne = _.useDualstackEndpoint) ? ne : false, + forcePathStyle: null != (ie = _.forcePathStyle) ? ie : false, + useAccelerateEndpoint: null != (re = _.useAccelerateEndpoint) ? re : false, + useGlobalEndpoint: null != (se = _.useGlobalEndpoint) ? se : false, + disableMultiregionAccessPoints: null != (oe = _.disableMultiregionAccessPoints) ? oe : false, + defaultSigningName: "s3" + }; +}, commonParams = { + ForcePathStyle: { + type: "clientContextParams", + name: "forcePathStyle" + }, + UseArnRegion: { + type: "clientContextParams", + name: "useArnRegion" + }, + DisableMultiRegionAccessPoints: { + type: "clientContextParams", + name: "disableMultiregionAccessPoints" + }, + Accelerate: { + type: "clientContextParams", + name: "useAccelerateEndpoint" + }, + DisableS3ExpressSessionAuth: { + type: "clientContextParams", + name: "disableS3ExpressSessionAuth" + }, + UseGlobalEndpoint: { + type: "builtInParams", + name: "useGlobalEndpoint" + }, + UseFIPS: { + type: "builtInParams", + name: "useFipsEndpoint" + }, + Endpoint: { + type: "builtInParams", + name: "endpoint" + }, + Region: { + type: "builtInParams", + name: "region" + }, + UseDualStack: { + type: "builtInParams", + name: "useDualstackEndpoint" + } +}, S3ServiceException = class _S3ServiceException extends ServiceException { + constructor(_) { + super(_); + Object.setPrototypeOf(this, _S3ServiceException.prototype); + } +}, NoSuchUpload = class _NoSuchUpload extends S3ServiceException { + constructor(_) { + super({ + name: "NoSuchUpload", + $fault: "client", + ..._ + }); + this.name = "NoSuchUpload"; + this.$fault = "client"; + Object.setPrototypeOf(this, _NoSuchUpload.prototype); + } +}, ObjectNotInActiveTierError = class _ObjectNotInActiveTierError extends S3ServiceException { + constructor(_) { + super({ + name: "ObjectNotInActiveTierError", + $fault: "client", + ..._ + }); + this.name = "ObjectNotInActiveTierError"; + this.$fault = "client"; + Object.setPrototypeOf(this, _ObjectNotInActiveTierError.prototype); + } +}, BucketAlreadyExists = class _BucketAlreadyExists extends S3ServiceException { + constructor(_) { + super({ + name: "BucketAlreadyExists", + $fault: "client", + ..._ + }); + this.name = "BucketAlreadyExists"; + this.$fault = "client"; + Object.setPrototypeOf(this, _BucketAlreadyExists.prototype); + } +}, BucketAlreadyOwnedByYou = class _BucketAlreadyOwnedByYou extends S3ServiceException { + constructor(_) { + super({ + name: "BucketAlreadyOwnedByYou", + $fault: "client", + ..._ + }); + this.name = "BucketAlreadyOwnedByYou"; + this.$fault = "client"; + Object.setPrototypeOf(this, _BucketAlreadyOwnedByYou.prototype); + } +}, NoSuchBucket = class _NoSuchBucket extends S3ServiceException { + constructor(_) { + super({ + name: "NoSuchBucket", + $fault: "client", + ..._ + }); + this.name = "NoSuchBucket"; + this.$fault = "client"; + Object.setPrototypeOf(this, _NoSuchBucket.prototype); + } +}; + +(AnalyticsFilter || (AnalyticsFilter = {})).visit = (_, ee) => { + if (void 0 !== _.Prefix) return ee.Prefix(_.Prefix); + if (void 0 !== _.Tag) return ee.Tag(_.Tag); + if (void 0 !== _.And) return ee.And(_.And); else return ee._(_.$unknown[0], _.$unknown[1]); +}; + +(LifecycleRuleFilter || (LifecycleRuleFilter = {})).visit = (_, ee) => { + if (void 0 !== _.Prefix) return ee.Prefix(_.Prefix); + if (void 0 !== _.Tag) return ee.Tag(_.Tag); + if (void 0 !== _.ObjectSizeGreaterThan) return ee.ObjectSizeGreaterThan(_.ObjectSizeGreaterThan); + if (void 0 !== _.ObjectSizeLessThan) return ee.ObjectSizeLessThan(_.ObjectSizeLessThan); + if (void 0 !== _.And) return ee.And(_.And); else return ee._(_.$unknown[0], _.$unknown[1]); +}; + +(MetricsFilter || (MetricsFilter = {})).visit = (_, ee) => { + if (void 0 !== _.Prefix) return ee.Prefix(_.Prefix); + if (void 0 !== _.Tag) return ee.Tag(_.Tag); + if (void 0 !== _.AccessPointArn) return ee.AccessPointArn(_.AccessPointArn); + if (void 0 !== _.And) return ee.And(_.And); else return ee._(_.$unknown[0], _.$unknown[1]); +}; + +(ReplicationRuleFilter || (ReplicationRuleFilter = {})).visit = (_, ee) => { + if (void 0 !== _.Prefix) return ee.Prefix(_.Prefix); + if (void 0 !== _.Tag) return ee.Tag(_.Tag); + if (void 0 !== _.And) return ee.And(_.And); else return ee._(_.$unknown[0], _.$unknown[1]); +}; + +var InvalidObjectState = class _InvalidObjectState extends S3ServiceException { + constructor(_) { + super({ + name: "InvalidObjectState", + $fault: "client", + ..._ + }); + this.name = "InvalidObjectState"; + this.$fault = "client"; + Object.setPrototypeOf(this, _InvalidObjectState.prototype); + this.StorageClass = _.StorageClass; + this.AccessTier = _.AccessTier; + } +}, NoSuchKey = class _NoSuchKey extends S3ServiceException { + constructor(_) { + super({ + name: "NoSuchKey", + $fault: "client", + ..._ + }); + this.name = "NoSuchKey"; + this.$fault = "client"; + Object.setPrototypeOf(this, _NoSuchKey.prototype); + } +}, NotFound = class _NotFound extends S3ServiceException { + constructor(_) { + super({ + name: "NotFound", + $fault: "client", + ..._ + }); + this.name = "NotFound"; + this.$fault = "client"; + Object.setPrototypeOf(this, _NotFound.prototype); + } +}, CompleteMultipartUploadOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), CompleteMultipartUploadRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), CopyObjectOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + } +}), CopyObjectRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + }, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + }, + ..._.CopySourceSSECustomerKey && { + CopySourceSSECustomerKey: SENSITIVE_STRING + } +}), CreateMultipartUploadOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + } +}), CreateMultipartUploadRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + }, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + } +}), SessionCredentialsFilterSensitiveLog = _ => ({ + ..._, + ..._.SecretAccessKey && { + SecretAccessKey: SENSITIVE_STRING + }, + ..._.SessionToken && { + SessionToken: SENSITIVE_STRING + } +}), CreateSessionOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.Credentials && { + Credentials: SessionCredentialsFilterSensitiveLog(_.Credentials) + } +}), ServerSideEncryptionByDefaultFilterSensitiveLog = _ => ({ + ..._, + ..._.KMSMasterKeyID && { + KMSMasterKeyID: SENSITIVE_STRING + } +}), ServerSideEncryptionRuleFilterSensitiveLog = _ => ({ + ..._, + ..._.ApplyServerSideEncryptionByDefault && { + ApplyServerSideEncryptionByDefault: ServerSideEncryptionByDefaultFilterSensitiveLog(_.ApplyServerSideEncryptionByDefault) + } +}), ServerSideEncryptionConfigurationFilterSensitiveLog = _ => ({ + ..._, + ..._.Rules && { + Rules: _.Rules.map((_ => ServerSideEncryptionRuleFilterSensitiveLog(_))) + } +}), GetBucketEncryptionOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.ServerSideEncryptionConfiguration && { + ServerSideEncryptionConfiguration: ServerSideEncryptionConfigurationFilterSensitiveLog(_.ServerSideEncryptionConfiguration) + } +}), SSEKMSFilterSensitiveLog = _ => ({ + ..._, + ..._.KeyId && { + KeyId: SENSITIVE_STRING + } +}), InventoryEncryptionFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMS && { + SSEKMS: SSEKMSFilterSensitiveLog(_.SSEKMS) + } +}), InventoryS3BucketDestinationFilterSensitiveLog = _ => ({ + ..._, + ..._.Encryption && { + Encryption: InventoryEncryptionFilterSensitiveLog(_.Encryption) + } +}), InventoryDestinationFilterSensitiveLog = _ => ({ + ..._, + ..._.S3BucketDestination && { + S3BucketDestination: InventoryS3BucketDestinationFilterSensitiveLog(_.S3BucketDestination) + } +}), InventoryConfigurationFilterSensitiveLog = _ => ({ + ..._, + ..._.Destination && { + Destination: InventoryDestinationFilterSensitiveLog(_.Destination) + } +}), GetBucketInventoryConfigurationOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.InventoryConfiguration && { + InventoryConfiguration: InventoryConfigurationFilterSensitiveLog(_.InventoryConfiguration) + } +}), GetObjectOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), GetObjectRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), GetObjectAttributesRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), GetObjectTorrentOutputFilterSensitiveLog = _ => ({ + ..._ +}), HeadObjectOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), HeadObjectRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), ListBucketInventoryConfigurationsOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.InventoryConfigurationList && { + InventoryConfigurationList: _.InventoryConfigurationList.map((_ => InventoryConfigurationFilterSensitiveLog(_))) + } +}), ListPartsRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), PutBucketEncryptionRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.ServerSideEncryptionConfiguration && { + ServerSideEncryptionConfiguration: ServerSideEncryptionConfigurationFilterSensitiveLog(_.ServerSideEncryptionConfiguration) + } +}), PutBucketInventoryConfigurationRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.InventoryConfiguration && { + InventoryConfiguration: InventoryConfigurationFilterSensitiveLog(_.InventoryConfiguration) + } +}), httpAuthSchemeEndpointRuleSetMiddlewareOptions = { + step: "serialize", + tags: [ "HTTP_AUTH_SCHEME" ], + name: "httpAuthSchemeMiddleware", + override: true, + relation: "before", + toMiddleware: endpointMiddlewareOptions.name +}, httpAuthSchemeMiddlewareOptions = { + step: "serialize", + tags: [ "HTTP_AUTH_SCHEME" ], + name: "httpAuthSchemeMiddleware", + override: true, + relation: "before", + toMiddleware: serializerMiddlewareOption.name +}, httpSigningMiddlewareOptions = { + step: "finalizeRequest", + tags: [ "HTTP_SIGNING" ], + name: "httpSigningMiddleware", + aliases: [ "apiKeyMiddleware", "tokenMiddleware", "awsAuthMiddleware" ], + override: true, + relation: "after", + toMiddleware: retryMiddlewareOptions.name +}, createIsIdentityExpiredFunction = _ => ee => doesIdentityRequireRefresh(ee) && ee.expiration.getTime() - Date.now() < _, EXPIRATION_MS = 3e5, isIdentityExpired = createIsIdentityExpiredFunction(EXPIRATION_MS), doesIdentityRequireRefresh = _ => void 0 !== _.expiration; + +function requestBuilder(_, ee) { + return new RequestBuilder(_, ee); +} + +var RequestBuilder = class { + constructor(_, ee) { + this.input = _; + this.context = ee; + this.query = {}; + this.method = ""; + this.headers = {}; + this.path = ""; + this.body = null; + this.hostname = ""; + this.resolvePathStack = []; + } + async build() { + const {hostname: _, protocol: ee = "https", port: ne, path: ie} = await this.context.endpoint(); + this.path = ie; + for (const _ of this.resolvePathStack) _(this.path); + return new HttpRequest({ + protocol: ee, + hostname: this.hostname || _, + port: ne, + method: this.method, + path: this.path, + query: this.query, + body: this.body, + headers: this.headers + }); + } + hn(_) { + this.hostname = _; + return this; + } + bp(_) { + this.resolvePathStack.push((ee => { + this.path = `${(null == ee ? void 0 : ee.endsWith("/")) ? ee.slice(0, -1) : ee || ""}` + _; + })); + return this; + } + p(_, ee, ne, ie) { + this.resolvePathStack.push((re => { + this.path = resolvedPath(re, this.input, _, ee, ne, ie); + })); + return this; + } + h(_) { + this.headers = _; + return this; + } + q(_) { + this.query = _; + return this; + } + b(_) { + this.body = _; + return this; + } + m(_) { + this.method = _; + return this; + } +}, collectBodyString2 = (_, ee) => collectBody(_, ee).then((_ => ee.utf8Encoder(_))), import_fast_xml_parser = __toESM(require_fxp()), parseXmlBody = (_, ee) => collectBodyString2(_, ee).then((_ => { + if (_.length) { + const ee = new import_fast_xml_parser.XMLParser({ + attributeNamePrefix: "", + htmlEntities: true, + ignoreAttributes: false, + ignoreDeclaration: true, + parseTagValue: false, + trimValues: false, + tagValueProcessor: (_, ee) => "" === ee.trim() && ee.includes("\n") ? "" : void 0 + }); + ee.addEntity("#xD", "\r"); + ee.addEntity("#10", "\n"); + let ne; + try { + ne = ee.parse(_, true); + } catch (ee) { + if (ee && "object" == typeof ee) Object.defineProperty(ee, "$responseBodyText", { + value: _ + }); + throw ee; + } + const ie = "#text", re = Object.keys(ne)[0], se = ne[re]; + if (se[ie]) { + se[re] = se[ie]; + delete se[ie]; + } + return getValueFromTextNode(se); + } + return {}; +})), parseXmlErrorBody = async (_, ee) => { + var ne; + const ie = await parseXmlBody(_, ee); + if (ie.Error) ie.Error.message = null != (ne = ie.Error.message) ? ne : ie.Error.Message; + return ie; +}, loadRestXmlErrorCode = (_, ee) => { + var ne; + if (void 0 !== (null == (ne = null == ee ? void 0 : ee.Error) ? void 0 : ne.Code)) return ee.Error.Code; + if (void 0 !== (null == ee ? void 0 : ee.Code)) return ee.Code; + if (404 == _.statusCode) return "NotFound"; +}; + +function escapeAttribute(_) { + return _.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); +} + +function escapeElement(_) { + return _.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">").replace(/\r/g, " ").replace(/\n/g, " ").replace(/\u0085/g, "…").replace(/\u2028/, "
"); +} + +var SelectObjectContentEventStream, XmlText = class { + constructor(_) { + this.value = _; + } + toString() { + return escapeElement("" + this.value); + } +}, XmlNode = class _XmlNode { + static of(_, ee, ne) { + const ie = new _XmlNode(_); + if (void 0 !== ee) ie.addChildNode(new XmlText(ee)); + if (void 0 !== ne) ie.withName(ne); + return ie; + } + constructor(_, ee = []) { + this.name = _; + this.children = ee; + this.attributes = {}; + } + withName(_) { + this.name = _; + return this; + } + addAttribute(_, ee) { + this.attributes[_] = ee; + return this; + } + addChildNode(_) { + this.children.push(_); + return this; + } + removeAttribute(_) { + delete this.attributes[_]; + return this; + } + n(_) { + this.name = _; + return this; + } + c(_) { + this.children.push(_); + return this; + } + a(_, ee) { + if (null != ee) this.attributes[_] = ee; + return this; + } + cc(_, ee, ne = ee) { + if (null != _[ee]) { + const ie = _XmlNode.of(ee, _[ee]).withName(ne); + this.c(ie); + } + } + l(_, ee, ne, ie) { + if (null != _[ee]) ie().map((_ => { + _.withName(ne); + this.c(_); + })); + } + lc(_, ee, ne, ie) { + if (null != _[ee]) { + const _ = ie(), ee = new _XmlNode(ne); + _.map((_ => { + ee.c(_); + })); + this.c(ee); + } + } + toString() { + const _ = Boolean(this.children.length); + let ee = `<${this.name}`; + const ne = this.attributes; + for (const _ of Object.keys(ne)) { + const ie = ne[_]; + if (null != ie) ee += ` ${_}="${escapeAttribute("" + ie)}"`; + } + return ee += !_ ? "/>" : `>${this.children.map((_ => _.toString())).join("")}`; + } +}, ObjectAlreadyInActiveTierError = class _ObjectAlreadyInActiveTierError extends S3ServiceException { + constructor(_) { + super({ + name: "ObjectAlreadyInActiveTierError", + $fault: "client", + ..._ + }); + this.name = "ObjectAlreadyInActiveTierError"; + this.$fault = "client"; + Object.setPrototypeOf(this, _ObjectAlreadyInActiveTierError.prototype); + } +}; + +(SelectObjectContentEventStream || (SelectObjectContentEventStream = {})).visit = (_, ee) => { + if (void 0 !== _.Records) return ee.Records(_.Records); + if (void 0 !== _.Stats) return ee.Stats(_.Stats); + if (void 0 !== _.Progress) return ee.Progress(_.Progress); + if (void 0 !== _.Cont) return ee.Cont(_.Cont); + if (void 0 !== _.End) return ee.End(_.End); else return ee._(_.$unknown[0], _.$unknown[1]); +}; + +var PutObjectOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + } +}), PutObjectRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + }, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + }, + ..._.SSEKMSEncryptionContext && { + SSEKMSEncryptionContext: SENSITIVE_STRING + } +}), EncryptionFilterSensitiveLog = _ => ({ + ..._, + ..._.KMSKeyId && { + KMSKeyId: SENSITIVE_STRING + } +}), S3LocationFilterSensitiveLog = _ => ({ + ..._, + ..._.Encryption && { + Encryption: EncryptionFilterSensitiveLog(_.Encryption) + } +}), OutputLocationFilterSensitiveLog = _ => ({ + ..._, + ..._.S3 && { + S3: S3LocationFilterSensitiveLog(_.S3) + } +}), RestoreRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.OutputLocation && { + OutputLocation: OutputLocationFilterSensitiveLog(_.OutputLocation) + } +}), RestoreObjectRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.RestoreRequest && { + RestoreRequest: RestoreRequestFilterSensitiveLog(_.RestoreRequest) + } +}), SelectObjectContentOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.Payload && { + Payload: "STREAMING_CONTENT" + } +}), SelectObjectContentRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), UploadPartOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), UploadPartRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + } +}), UploadPartCopyOutputFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), UploadPartCopyRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSECustomerKey && { + SSECustomerKey: SENSITIVE_STRING + }, + ..._.CopySourceSSECustomerKey && { + CopySourceSSECustomerKey: SENSITIVE_STRING + } +}), WriteGetObjectResponseRequestFilterSensitiveLog = _ => ({ + ..._, + ..._.SSEKMSKeyId && { + SSEKMSKeyId: SENSITIVE_STRING + } +}), se_AbortMultipartUploadCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "AbortMultipartUpload" ], + [_uI]: [ , expectNonNull(_[_UI], "UploadId") ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_CompleteMultipartUploadCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xacc]: _[_CCRC], + [_xacc_]: _[_CCRCC], + [_xacs]: _[_CSHA], + [_xacs_]: _[_CSHAh], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_uI]: [ , expectNonNull(_[_UI], "UploadId") ] + }); + let se, oe; + if (void 0 !== _.MultipartUpload) { + oe = se_CompletedMultipartUpload(_.MultipartUpload, ee); + oe = oe.n("CompleteMultipartUpload"); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("POST").h(ie).q(re).b(se); + return ne.build(); +}, se_CopyObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaa]: _[_ACL], + [_cc]: _[_CC], + [_xaca]: _[_CA], + [_cd]: _[_CD], + [_ce]: _[_CE], + [_cl]: _[_CL], + [_ct]: _[_CT], + [_xacs__]: _[_CS], + [_xacsim]: _[_CSIM], + [_xacsims]: [ () => isSerializableHeaderValue(_[_CSIMS]), () => dateToUtcString(_[_CSIMS]).toString() ], + [_xacsinm]: _[_CSINM], + [_xacsius]: [ () => isSerializableHeaderValue(_[_CSIUS]), () => dateToUtcString(_[_CSIUS]).toString() ], + [_e]: [ () => isSerializableHeaderValue(_[_E]), () => dateToUtcString(_[_E]).toString() ], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagwa]: _[_GWACP], + [_xamd]: _[_MD], + [_xatd]: _[_TD], + [_xasse]: _[_SSE], + [_xasc]: _[_SC], + [_xawrl]: _[_WRL], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xasseakki]: _[_SSEKMSKI], + [_xassec]: _[_SSEKMSEC], + [_xassebke]: [ () => isSerializableHeaderValue(_[_BKE]), () => _[_BKE].toString() ], + [_xacssseca]: _[_CSSSECA], + [_xacssseck]: _[_CSSSECK], + [_xacssseckm]: _[_CSSSECKMD], + [_xarp]: _[_RP], + [_xat]: _[_T], + [_xaolm]: _[_OLM], + [_xaolrud]: [ () => isSerializableHeaderValue(_[_OLRUD]), () => serializeDateTime(_[_OLRUD]).toString() ], + [_xaollh]: _[_OLLHS], + [_xaebo]: _[_EBO], + [_xasebo]: _[_ESBO], + ...void 0 !== _.Metadata && Object.keys(_.Metadata).reduce(((ee, ne) => { + ee[`x-amz-meta-${ne.toLowerCase()}`] = _.Metadata[ne]; + return ee; + }), {}) + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "CopyObject" ] + }); + ne.m("PUT").h(ie).q(re).b(void 0); + return ne.build(); +}, se_CreateBucketCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaa]: _[_ACL], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagw]: _[_GW], + [_xagwa]: _[_GWACP], + [_xabole]: [ () => isSerializableHeaderValue(_[_OLEFB]), () => _[_OLEFB].toString() ], + [_xaoo]: _[_OO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + let re, se; + if (void 0 !== _.CreateBucketConfiguration) { + se = se_CreateBucketConfiguration(_.CreateBucketConfiguration, ee); + re = _ve; + se.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + re += se.toString(); + } + ne.m("PUT").h(ie).b(re); + return ne.build(); +}, se_CreateMultipartUploadCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaa]: _[_ACL], + [_cc]: _[_CC], + [_cd]: _[_CD], + [_ce]: _[_CE], + [_cl]: _[_CL], + [_ct]: _[_CT], + [_e]: [ () => isSerializableHeaderValue(_[_E]), () => dateToUtcString(_[_E]).toString() ], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagwa]: _[_GWACP], + [_xasse]: _[_SSE], + [_xasc]: _[_SC], + [_xawrl]: _[_WRL], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xasseakki]: _[_SSEKMSKI], + [_xassec]: _[_SSEKMSEC], + [_xassebke]: [ () => isSerializableHeaderValue(_[_BKE]), () => _[_BKE].toString() ], + [_xarp]: _[_RP], + [_xat]: _[_T], + [_xaolm]: _[_OLM], + [_xaolrud]: [ () => isSerializableHeaderValue(_[_OLRUD]), () => serializeDateTime(_[_OLRUD]).toString() ], + [_xaollh]: _[_OLLHS], + [_xaebo]: _[_EBO], + [_xaca]: _[_CA], + ...void 0 !== _.Metadata && Object.keys(_.Metadata).reduce(((ee, ne) => { + ee[`x-amz-meta-${ne.toLowerCase()}`] = _.Metadata[ne]; + return ee; + }), {}) + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_u]: [ , "" ] + }); + ne.m("POST").h(ie).q(re).b(void 0); + return ne.build(); +}, se_CreateSessionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xacsm]: _[_SM] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_s]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.m("DELETE").h(ie).b(void 0); + return ne.build(); +}, se_DeleteBucketAnalyticsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_a4]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketCorsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_c]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketEncryptionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_en]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const ie = map({ + [_it]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("DELETE").h({}).q(ie).b(void 0); + return ne.build(); +}, se_DeleteBucketInventoryConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_in]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketLifecycleCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_l]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketMetricsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_m]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketOwnershipControlsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_oC]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketPolicyCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_p]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketReplicationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_r]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_t]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteBucketWebsiteCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_w]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xam]: _[_MFA], + [_xarp]: _[_RP], + [_xabgr]: [ () => isSerializableHeaderValue(_[_BGR]), () => _[_BGR].toString() ], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "DeleteObject" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeleteObjectsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xam]: _[_MFA], + [_xarp]: _[_RP], + [_xabgr]: [ () => isSerializableHeaderValue(_[_BGR]), () => _[_BGR].toString() ], + [_xaebo]: _[_EBO], + [_xasca]: _[_CA] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_d]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.Delete) { + oe = se_Delete(_.Delete, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("POST").h(ie).q(re).b(se); + return ne.build(); +}, se_DeleteObjectTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_t]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_DeletePublicAccessBlockCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_pAB]: [ , "" ] + }); + ne.m("DELETE").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketAccelerateConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO], + [_xarp]: _[_RP] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_ac]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketAclCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_acl]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketAnalyticsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_a4]: [ , "" ], + [_xi]: [ , "GetBucketAnalyticsConfiguration" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketCorsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_c]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketEncryptionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_en]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const ie = map({ + [_it]: [ , "" ], + [_xi]: [ , "GetBucketIntelligentTieringConfiguration" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("GET").h({}).q(ie).b(void 0); + return ne.build(); +}, se_GetBucketInventoryConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_in]: [ , "" ], + [_xi]: [ , "GetBucketInventoryConfiguration" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketLifecycleConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_l]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketLocationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_lo]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketLoggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_log]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketMetricsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_m]: [ , "" ], + [_xi]: [ , "GetBucketMetricsConfiguration" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketNotificationConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_n]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketOwnershipControlsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_oC]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketPolicyCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_p]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketPolicyStatusCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_pS]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketReplicationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_r]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketRequestPaymentCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_rP]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_t]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketVersioningCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_v]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetBucketWebsiteCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_w]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_im]: _[_IM], + [_ims]: [ () => isSerializableHeaderValue(_[_IMS]), () => dateToUtcString(_[_IMS]).toString() ], + [_inm]: _[_INM], + [_ius]: [ () => isSerializableHeaderValue(_[_IUS]), () => dateToUtcString(_[_IUS]).toString() ], + [_ra]: _[_R], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xacm]: _[_CM] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "GetObject" ], + [_rcc]: [ , _[_RCC] ], + [_rcd]: [ , _[_RCD] ], + [_rce]: [ , _[_RCE] ], + [_rcl]: [ , _[_RCL] ], + [_rct]: [ , _[_RCT] ], + [_re]: [ () => void 0 !== _.ResponseExpires, () => dateToUtcString(_[_RE]).toString() ], + [_vI]: [ , _[_VI] ], + [_pN]: [ () => void 0 !== _.PartNumber, () => _[_PN].toString() ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectAclCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_acl]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectAttributesCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xamp]: [ () => isSerializableHeaderValue(_[_MP]), () => _[_MP].toString() ], + [_xapnm]: _[_PNM], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xaoa]: [ () => isSerializableHeaderValue(_[_OA]), () => (_[_OA] || []).map((_ => _)).join(", ") ] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_at]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectLegalHoldCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_lh]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectLockConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_ol]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectRetentionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_ret]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO], + [_xarp]: _[_RP] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_t]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetObjectTorrentCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_to]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_GetPublicAccessBlockCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_pAB]: [ , "" ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_HeadBucketCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.m("HEAD").h(ie).b(void 0); + return ne.build(); +}, se_HeadObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_im]: _[_IM], + [_ims]: [ () => isSerializableHeaderValue(_[_IMS]), () => dateToUtcString(_[_IMS]).toString() ], + [_inm]: _[_INM], + [_ius]: [ () => isSerializableHeaderValue(_[_IUS]), () => dateToUtcString(_[_IUS]).toString() ], + [_ra]: _[_R], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xacm]: _[_CM] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_rcc]: [ , _[_RCC] ], + [_rcd]: [ , _[_RCD] ], + [_rce]: [ , _[_RCE] ], + [_rcl]: [ , _[_RCL] ], + [_rct]: [ , _[_RCT] ], + [_re]: [ () => void 0 !== _.ResponseExpires, () => dateToUtcString(_[_RE]).toString() ], + [_vI]: [ , _[_VI] ], + [_pN]: [ () => void 0 !== _.PartNumber, () => _[_PN].toString() ] + }); + ne.m("HEAD").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListBucketAnalyticsConfigurationsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_a4]: [ , "" ], + [_xi]: [ , "ListBucketAnalyticsConfigurations" ], + [_ct_]: [ , _[_CTo] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListBucketIntelligentTieringConfigurationsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const ie = map({ + [_it]: [ , "" ], + [_xi]: [ , "ListBucketIntelligentTieringConfigurations" ], + [_ct_]: [ , _[_CTo] ] + }); + ne.m("GET").h({}).q(ie).b(void 0); + return ne.build(); +}, se_ListBucketInventoryConfigurationsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_in]: [ , "" ], + [_xi]: [ , "ListBucketInventoryConfigurations" ], + [_ct_]: [ , _[_CTo] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListBucketMetricsConfigurationsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_m]: [ , "" ], + [_xi]: [ , "ListBucketMetricsConfigurations" ], + [_ct_]: [ , _[_CTo] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListBucketsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + const ie = map({ + [_xi]: [ , "ListBuckets" ] + }); + ne.m("GET").h({}).q(ie).b(void 0); + return ne.build(); +}, se_ListDirectoryBucketsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + const ie = map({ + [_xi]: [ , "ListDirectoryBuckets" ], + [_ct_]: [ , _[_CTo] ], + [_mdb]: [ () => void 0 !== _.MaxDirectoryBuckets, () => _[_MDB].toString() ] + }); + ne.m("GET").h({}).q(ie).b(void 0); + return ne.build(); +}, se_ListMultipartUploadsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO], + [_xarp]: _[_RP] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_u]: [ , "" ], + [_de]: [ , _[_D] ], + [_et]: [ , _[_ET] ], + [_km]: [ , _[_KM] ], + [_mu]: [ () => void 0 !== _.MaxUploads, () => _[_MU].toString() ], + [_pr]: [ , _[_P] ], + [_uim]: [ , _[_UIM] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListObjectsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xaooa]: [ () => isSerializableHeaderValue(_[_OOA]), () => (_[_OOA] || []).map((_ => _)).join(", ") ] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_de]: [ , _[_D] ], + [_et]: [ , _[_ET] ], + [_ma]: [ , _[_M] ], + [_mk]: [ () => void 0 !== _.MaxKeys, () => _[_MK].toString() ], + [_pr]: [ , _[_P] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListObjectsV2Command = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xaooa]: [ () => isSerializableHeaderValue(_[_OOA]), () => (_[_OOA] || []).map((_ => _)).join(", ") ] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_lt]: [ , "2" ], + [_de]: [ , _[_D] ], + [_et]: [ , _[_ET] ], + [_mk]: [ () => void 0 !== _.MaxKeys, () => _[_MK].toString() ], + [_pr]: [ , _[_P] ], + [_ct_]: [ , _[_CTo] ], + [_fo]: [ () => void 0 !== _.FetchOwner, () => _[_FO].toString() ], + [_sa]: [ , _[_SA] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListObjectVersionsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xaebo]: _[_EBO], + [_xarp]: _[_RP], + [_xaooa]: [ () => isSerializableHeaderValue(_[_OOA]), () => (_[_OOA] || []).map((_ => _)).join(", ") ] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_ver]: [ , "" ], + [_de]: [ , _[_D] ], + [_et]: [ , _[_ET] ], + [_km]: [ , _[_KM] ], + [_mk]: [ () => void 0 !== _.MaxKeys, () => _[_MK].toString() ], + [_pr]: [ , _[_P] ], + [_vim]: [ , _[_VIM] ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_ListPartsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "ListParts" ], + [_mp]: [ () => void 0 !== _.MaxParts, () => _[_MP].toString() ], + [_pnm]: [ , _[_PNM] ], + [_uI]: [ , expectNonNull(_[_UI], "UploadId") ] + }); + ne.m("GET").h(ie).q(re).b(void 0); + return ne.build(); +}, se_PutBucketAccelerateConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaebo]: _[_EBO], + [_xasca]: _[_CA] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_ac]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.AccelerateConfiguration) { + oe = se_AccelerateConfiguration(_.AccelerateConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketAclCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaa]: _[_ACL], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagw]: _[_GW], + [_xagwa]: _[_GWACP], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_acl]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.AccessControlPolicy) { + oe = se_AccessControlPolicy(_.AccessControlPolicy, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketAnalyticsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_a4]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + let se, oe; + if (void 0 !== _.AnalyticsConfiguration) { + oe = se_AnalyticsConfiguration(_.AnalyticsConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketCorsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_c]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.CORSConfiguration) { + oe = se_CORSConfiguration(_.CORSConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketEncryptionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_en]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.ServerSideEncryptionConfiguration) { + oe = se_ServerSideEncryptionConfiguration(_.ServerSideEncryptionConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const ie = map({ + [_it]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + let re, se; + if (void 0 !== _.IntelligentTieringConfiguration) { + se = se_IntelligentTieringConfiguration(_.IntelligentTieringConfiguration, ee); + re = _ve; + se.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + re += se.toString(); + } + ne.m("PUT").h({ + "content-type": "application/xml" + }).q(ie).b(re); + return ne.build(); +}, se_PutBucketInventoryConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_in]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + let se, oe; + if (void 0 !== _.InventoryConfiguration) { + oe = se_InventoryConfiguration(_.InventoryConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketLifecycleConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_l]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.LifecycleConfiguration) { + oe = se_BucketLifecycleConfiguration(_.LifecycleConfiguration, ee); + oe = oe.n("LifecycleConfiguration"); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketLoggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_log]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.BucketLoggingStatus) { + oe = se_BucketLoggingStatus(_.BucketLoggingStatus, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketMetricsConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_m]: [ , "" ], + [_i]: [ , expectNonNull(_[_I], "Id") ] + }); + let se, oe; + if (void 0 !== _.MetricsConfiguration) { + oe = se_MetricsConfiguration(_.MetricsConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketNotificationConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaebo]: _[_EBO], + [_xasdv]: [ () => isSerializableHeaderValue(_[_SDV]), () => _[_SDV].toString() ] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_n]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.NotificationConfiguration) { + oe = se_NotificationConfiguration(_.NotificationConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketOwnershipControlsCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_oC]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.OwnershipControls) { + oe = se_OwnershipControls(_.OwnershipControls, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketPolicyCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "text/plain", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xacrsba]: [ () => isSerializableHeaderValue(_[_CRSBA]), () => _[_CRSBA].toString() ], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_p]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.Policy) { + oe = _.Policy; + se = oe; + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketReplicationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xabolt]: _[_To], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_r]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.ReplicationConfiguration) { + oe = se_ReplicationConfiguration(_.ReplicationConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketRequestPaymentCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_rP]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.RequestPaymentConfiguration) { + oe = se_RequestPaymentConfiguration(_.RequestPaymentConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_t]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.Tagging) { + oe = se_Tagging(_.Tagging, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketVersioningCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xam]: _[_MFA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_v]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.VersioningConfiguration) { + oe = se_VersioningConfiguration(_.VersioningConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutBucketWebsiteCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_w]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.WebsiteConfiguration) { + oe = se_WebsiteConfiguration(_.WebsiteConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_ct]: _[_CT] || "application/octet-stream", + [_xaa]: _[_ACL], + [_cc]: _[_CC], + [_cd]: _[_CD], + [_ce]: _[_CE], + [_cl]: _[_CL], + [_cl_]: [ () => isSerializableHeaderValue(_[_CLo]), () => _[_CLo].toString() ], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xacc]: _[_CCRC], + [_xacc_]: _[_CCRCC], + [_xacs]: _[_CSHA], + [_xacs_]: _[_CSHAh], + [_e]: [ () => isSerializableHeaderValue(_[_E]), () => dateToUtcString(_[_E]).toString() ], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagwa]: _[_GWACP], + [_xasse]: _[_SSE], + [_xasc]: _[_SC], + [_xawrl]: _[_WRL], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xasseakki]: _[_SSEKMSKI], + [_xassec]: _[_SSEKMSEC], + [_xassebke]: [ () => isSerializableHeaderValue(_[_BKE]), () => _[_BKE].toString() ], + [_xarp]: _[_RP], + [_xat]: _[_T], + [_xaolm]: _[_OLM], + [_xaolrud]: [ () => isSerializableHeaderValue(_[_OLRUD]), () => serializeDateTime(_[_OLRUD]).toString() ], + [_xaollh]: _[_OLLHS], + [_xaebo]: _[_EBO], + ...void 0 !== _.Metadata && Object.keys(_.Metadata).reduce(((ee, ne) => { + ee[`x-amz-meta-${ne.toLowerCase()}`] = _.Metadata[ne]; + return ee; + }), {}) + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "PutObject" ] + }); + let se, oe; + if (void 0 !== _.Body) { + oe = _.Body; + se = oe; + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectAclCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xaa]: _[_ACL], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xagfc]: _[_GFC], + [_xagr]: _[_GR], + [_xagra]: _[_GRACP], + [_xagw]: _[_GW], + [_xagwa]: _[_GWACP], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_acl]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + let se, oe; + if (void 0 !== _.AccessControlPolicy) { + oe = se_AccessControlPolicy(_.AccessControlPolicy, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectLegalHoldCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xarp]: _[_RP], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_lh]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + let se, oe; + if (void 0 !== _.LegalHold) { + oe = se_ObjectLockLegalHold(_.LegalHold, ee); + oe = oe.n("LegalHold"); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectLockConfigurationCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xarp]: _[_RP], + [_xabolt]: _[_To], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_ol]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.ObjectLockConfiguration) { + oe = se_ObjectLockConfiguration(_.ObjectLockConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectRetentionCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xarp]: _[_RP], + [_xabgr]: [ () => isSerializableHeaderValue(_[_BGR]), () => _[_BGR].toString() ], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_ret]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + let se, oe; + if (void 0 !== _.Retention) { + oe = se_ObjectLockRetention(_.Retention, ee); + oe = oe.n("Retention"); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutObjectTaggingCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO], + [_xarp]: _[_RP] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_t]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + let se, oe; + if (void 0 !== _.Tagging) { + oe = se_Tagging(_.Tagging, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_PutPublicAccessBlockCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + const re = map({ + [_pAB]: [ , "" ] + }); + let se, oe; + if (void 0 !== _.PublicAccessBlockConfiguration) { + oe = se_PublicAccessBlockConfiguration(_.PublicAccessBlockConfiguration, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_RestoreObjectCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xarp]: _[_RP], + [_xasca]: _[_CA], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_res]: [ , "" ], + [_vI]: [ , _[_VI] ] + }); + let se, oe; + if (void 0 !== _.RestoreRequest) { + oe = se_RestoreRequest(_.RestoreRequest, ee); + se = _ve; + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + se += oe.toString(); + } + ne.m("POST").h(ie).q(re).b(se); + return ne.build(); +}, se_SelectObjectContentCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/xml", + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_se]: [ , "" ], + [_st]: [ , "2" ] + }); + let se; + se = _ve; + const oe = new XmlNode(_SOCR); + oe.a("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/"); + oe.cc(_, _Ex); + oe.cc(_, _ETx); + if (null != _[_IS]) oe.c(se_InputSerialization(_[_IS], ee).n(_IS)); + if (null != _[_OS]) oe.c(se_OutputSerialization(_[_OS], ee).n(_OS)); + if (null != _[_RPe]) oe.c(se_RequestProgress(_[_RPe], ee).n(_RPe)); + if (null != _[_SR]) oe.c(se_ScanRange(_[_SR], ee).n(_SR)); + se += oe.toString(); + ne.m("POST").h(ie).q(re).b(se); + return ne.build(); +}, se_UploadPartCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "content-type": "application/octet-stream", + [_cl_]: [ () => isSerializableHeaderValue(_[_CLo]), () => _[_CLo].toString() ], + [_cm]: _[_CMD], + [_xasca]: _[_CA], + [_xacc]: _[_CCRC], + [_xacc_]: _[_CCRCC], + [_xacs]: _[_CSHA], + [_xacs_]: _[_CSHAh], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "UploadPart" ], + [_pN]: [ null != expectNonNull(_.PartNumber, "PartNumber"), () => _[_PN].toString() ], + [_uI]: [ , expectNonNull(_[_UI], "UploadId") ] + }); + let se, oe; + if (void 0 !== _.Body) { + oe = _.Body; + se = oe; + } + ne.m("PUT").h(ie).q(re).b(se); + return ne.build(); +}, se_UploadPartCopyCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + [_xacs__]: _[_CS], + [_xacsim]: _[_CSIM], + [_xacsims]: [ () => isSerializableHeaderValue(_[_CSIMS]), () => dateToUtcString(_[_CSIMS]).toString() ], + [_xacsinm]: _[_CSINM], + [_xacsius]: [ () => isSerializableHeaderValue(_[_CSIUS]), () => dateToUtcString(_[_CSIUS]).toString() ], + [_xacsr]: _[_CSR], + [_xasseca]: _[_SSECA], + [_xasseck]: _[_SSECK], + [_xasseckm]: _[_SSECKMD], + [_xacssseca]: _[_CSSSECA], + [_xacssseck]: _[_CSSSECK], + [_xacssseckm]: _[_CSSSECKMD], + [_xarp]: _[_RP], + [_xaebo]: _[_EBO], + [_xasebo]: _[_ESBO] + }); + ne.bp("/{Key+}"); + ne.p("Bucket", (() => _.Bucket), "{Bucket}", false); + ne.p("Key", (() => _.Key), "{Key+}", true); + const re = map({ + [_xi]: [ , "UploadPartCopy" ], + [_pN]: [ null != expectNonNull(_.PartNumber, "PartNumber"), () => _[_PN].toString() ], + [_uI]: [ , expectNonNull(_[_UI], "UploadId") ] + }); + ne.m("PUT").h(ie).q(re).b(void 0); + return ne.build(); +}, se_WriteGetObjectResponseCommand = async (_, ee) => { + const ne = requestBuilder(_, ee), ie = map({}, isSerializableHeaderValue, { + "x-amz-content-sha256": "UNSIGNED-PAYLOAD", + "content-type": "application/octet-stream", + [_xarr]: _[_RR], + [_xart]: _[_RT], + [_xafs]: [ () => isSerializableHeaderValue(_[_SCt]), () => _[_SCt].toString() ], + [_xafec]: _[_EC], + [_xafem]: _[_EM], + [_xafhar]: _[_AR], + [_xafhcc]: _[_CC], + [_xafhcd]: _[_CD], + [_xafhce]: _[_CE], + [_xafhcl]: _[_CL], + [_cl_]: [ () => isSerializableHeaderValue(_[_CLo]), () => _[_CLo].toString() ], + [_xafhcr]: _[_CR], + [_xafhct]: _[_CT], + [_xafhxacc]: _[_CCRC], + [_xafhxacc_]: _[_CCRCC], + [_xafhxacs]: _[_CSHA], + [_xafhxacs_]: _[_CSHAh], + [_xafhxadm]: [ () => isSerializableHeaderValue(_[_DM]), () => _[_DM].toString() ], + [_xafhe]: _[_ETa], + [_xafhe_]: [ () => isSerializableHeaderValue(_[_E]), () => dateToUtcString(_[_E]).toString() ], + [_xafhxae]: _[_Exp], + [_xafhlm]: [ () => isSerializableHeaderValue(_[_LM]), () => dateToUtcString(_[_LM]).toString() ], + [_xafhxamm]: [ () => isSerializableHeaderValue(_[_MM]), () => _[_MM].toString() ], + [_xafhxaolm]: _[_OLM], + [_xafhxaollh]: _[_OLLHS], + [_xafhxaolrud]: [ () => isSerializableHeaderValue(_[_OLRUD]), () => serializeDateTime(_[_OLRUD]).toString() ], + [_xafhxampc]: [ () => isSerializableHeaderValue(_[_PC]), () => _[_PC].toString() ], + [_xafhxars]: _[_RS], + [_xafhxarc]: _[_RC], + [_xafhxar]: _[_Re], + [_xafhxasse]: _[_SSE], + [_xafhxasseca]: _[_SSECA], + [_xafhxasseakki]: _[_SSEKMSKI], + [_xafhxasseckm]: _[_SSECKMD], + [_xafhxasc]: _[_SC], + [_xafhxatc]: [ () => isSerializableHeaderValue(_[_TC]), () => _[_TC].toString() ], + [_xafhxavi]: _[_VI], + [_xafhxassebke]: [ () => isSerializableHeaderValue(_[_BKE]), () => _[_BKE].toString() ], + ...void 0 !== _.Metadata && Object.keys(_.Metadata).reduce(((ee, ne) => { + ee[`x-amz-meta-${ne.toLowerCase()}`] = _.Metadata[ne]; + return ee; + }), {}) + }); + ne.bp("/WriteGetObjectResponse"); + let re, se; + if (void 0 !== _.Body) { + se = _.Body; + re = se; + } + let {hostname: oe} = await ee.endpoint(); + if (true !== ee.disableHostPrefix) { + oe = "{RequestRoute}." + oe; + if (void 0 === _.RequestRoute) throw new Error("Empty value provided for input host prefix: RequestRoute."); + oe = oe.replace("{RequestRoute}", _.RequestRoute); + if (!isValidHostname(oe)) throw new Error("ValidationError: prefixed hostname must be hostname compatible."); + } + ne.hn(oe); + ne.m("POST").h(ie).b(re); + return ne.build(); +}, de_AbortMultipartUploadCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_CompleteMultipartUploadCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_Exp]: [ , _.headers[_xae] ], + [_SSE]: [ , _.headers[_xasse] ], + [_VI]: [ , _.headers[_xavi] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_B]) ne[_B] = expectString(ie[_B]); + if (null != ie[_CCRC]) ne[_CCRC] = expectString(ie[_CCRC]); + if (null != ie[_CCRCC]) ne[_CCRCC] = expectString(ie[_CCRCC]); + if (null != ie[_CSHA]) ne[_CSHA] = expectString(ie[_CSHA]); + if (null != ie[_CSHAh]) ne[_CSHAh] = expectString(ie[_CSHAh]); + if (null != ie[_ETa]) ne[_ETa] = expectString(ie[_ETa]); + if (null != ie[_K]) ne[_K] = expectString(ie[_K]); + if (null != ie[_L]) ne[_L] = expectString(ie[_L]); + return ne; +}, de_CopyObjectCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_Exp]: [ , _.headers[_xae] ], + [_CSVI]: [ , _.headers[_xacsvi] ], + [_VI]: [ , _.headers[_xavi] ], + [_SSE]: [ , _.headers[_xasse] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_SSEKMSEC]: [ , _.headers[_xassec] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.CopyObjectResult = de_CopyObjectResult(ie, ee); + return ne; +}, de_CreateBucketCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_L]: [ , _.headers[_lo] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_CreateMultipartUploadCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_AD]: [ () => void 0 !== _.headers[_xaad], () => expectNonNull(parseRfc7231DateTime(_.headers[_xaad])) ], + [_ARI]: [ , _.headers[_xaari] ], + [_SSE]: [ , _.headers[_xasse] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_SSEKMSEC]: [ , _.headers[_xassec] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ], + [_CA]: [ , _.headers[_xaca] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_B]) ne[_B] = expectString(ie[_B]); + if (null != ie[_K]) ne[_K] = expectString(ie[_K]); + if (null != ie[_UI]) ne[_UI] = expectString(ie[_UI]); + return ne; +}, de_CreateSessionCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_C]) ne[_C] = de_SessionCredentials(ie[_C], ee); + return ne; +}, de_DeleteBucketCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketAnalyticsConfigurationCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketCorsCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketEncryptionCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketInventoryConfigurationCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketLifecycleCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketMetricsConfigurationCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketOwnershipControlsCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketPolicyCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketReplicationCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketTaggingCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteBucketWebsiteCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteObjectCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_DM]: [ () => void 0 !== _.headers[_xadm], () => parseBoolean(_.headers[_xadm]) ], + [_VI]: [ , _.headers[_xavi] ], + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_DeleteObjectsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.Deleted) ne[_De] = []; else if (null != ie[_De]) ne[_De] = de_DeletedObjects(getArrayIfSingleItem(ie[_De]), ee); + if ("" === ie.Error) ne[_Err] = []; else if (null != ie[_Er]) ne[_Err] = de_Errors(getArrayIfSingleItem(ie[_Er]), ee); + return ne; +}, de_DeleteObjectTaggingCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_VI]: [ , _.headers[_xavi] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_DeletePublicAccessBlockCommand = async (_, ee) => { + if (204 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_GetBucketAccelerateConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_S]) ne[_S] = expectString(ie[_S]); + return ne; +}, de_GetBucketAclCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.AccessControlList) ne[_Gr] = []; else if (null != ie[_ACLc] && null != ie[_ACLc][_G]) ne[_Gr] = de_Grants(getArrayIfSingleItem(ie[_ACLc][_G]), ee); + if (null != ie[_O]) ne[_O] = de_Owner(ie[_O], ee); + return ne; +}, de_GetBucketAnalyticsConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.AnalyticsConfiguration = de_AnalyticsConfiguration(ie, ee); + return ne; +}, de_GetBucketCorsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.CORSRule) ne[_CORSRu] = []; else if (null != ie[_CORSR]) ne[_CORSRu] = de_CORSRules(getArrayIfSingleItem(ie[_CORSR]), ee); + return ne; +}, de_GetBucketEncryptionCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.ServerSideEncryptionConfiguration = de_ServerSideEncryptionConfiguration(ie, ee); + return ne; +}, de_GetBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.IntelligentTieringConfiguration = de_IntelligentTieringConfiguration(ie, ee); + return ne; +}, de_GetBucketInventoryConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.InventoryConfiguration = de_InventoryConfiguration(ie, ee); + return ne; +}, de_GetBucketLifecycleConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.Rule) ne[_Rul] = []; else if (null != ie[_Ru]) ne[_Rul] = de_LifecycleRules(getArrayIfSingleItem(ie[_Ru]), ee); + return ne; +}, de_GetBucketLocationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_LC]) ne[_LC] = expectString(ie[_LC]); + return ne; +}, de_GetBucketLoggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_LE]) ne[_LE] = de_LoggingEnabled(ie[_LE], ee); + return ne; +}, de_GetBucketMetricsConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.MetricsConfiguration = de_MetricsConfiguration(ie, ee); + return ne; +}, de_GetBucketNotificationConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_EBC]) ne[_EBC] = de_EventBridgeConfiguration(ie[_EBC], ee); + if ("" === ie.CloudFunctionConfiguration) ne[_LFC] = []; else if (null != ie[_CFC]) ne[_LFC] = de_LambdaFunctionConfigurationList(getArrayIfSingleItem(ie[_CFC]), ee); + if ("" === ie.QueueConfiguration) ne[_QCu] = []; else if (null != ie[_QC]) ne[_QCu] = de_QueueConfigurationList(getArrayIfSingleItem(ie[_QC]), ee); + if ("" === ie.TopicConfiguration) ne[_TCop] = []; else if (null != ie[_TCo]) ne[_TCop] = de_TopicConfigurationList(getArrayIfSingleItem(ie[_TCo]), ee); + return ne; +}, de_GetBucketOwnershipControlsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.OwnershipControls = de_OwnershipControls(ie, ee); + return ne; +}, de_GetBucketPolicyCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = await collectBodyString3(_.body, ee); + ne.Policy = expectString(ie); + return ne; +}, de_GetBucketPolicyStatusCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.PolicyStatus = de_PolicyStatus(ie, ee); + return ne; +}, de_GetBucketReplicationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.ReplicationConfiguration = de_ReplicationConfiguration(ie, ee); + return ne; +}, de_GetBucketRequestPaymentCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_Pa]) ne[_Pa] = expectString(ie[_Pa]); + return ne; +}, de_GetBucketTaggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.TagSet) ne[_TS] = []; else if (null != ie[_TS] && null != ie[_TS][_Ta]) ne[_TS] = de_TagSet(getArrayIfSingleItem(ie[_TS][_Ta]), ee); + return ne; +}, de_GetBucketVersioningCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_MDf]) ne[_MFAD] = expectString(ie[_MDf]); + if (null != ie[_S]) ne[_S] = expectString(ie[_S]); + return ne; +}, de_GetBucketWebsiteCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_ED]) ne[_ED] = de_ErrorDocument(ie[_ED], ee); + if (null != ie[_ID]) ne[_ID] = de_IndexDocument(ie[_ID], ee); + if (null != ie[_RART]) ne[_RART] = de_RedirectAllRequestsTo(ie[_RART], ee); + if ("" === ie.RoutingRules) ne[_RRo] = []; else if (null != ie[_RRo] && null != ie[_RRo][_RRou]) ne[_RRo] = de_RoutingRules(getArrayIfSingleItem(ie[_RRo][_RRou]), ee); + return ne; +}, de_GetObjectCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_DM]: [ () => void 0 !== _.headers[_xadm], () => parseBoolean(_.headers[_xadm]) ], + [_AR]: [ , _.headers[_ar] ], + [_Exp]: [ , _.headers[_xae] ], + [_Re]: [ , _.headers[_xar] ], + [_LM]: [ () => void 0 !== _.headers[_lm], () => expectNonNull(parseRfc7231DateTime(_.headers[_lm])) ], + [_CLo]: [ () => void 0 !== _.headers[_cl_], () => strictParseLong(_.headers[_cl_]) ], + [_ETa]: [ , _.headers[_eta] ], + [_CCRC]: [ , _.headers[_xacc] ], + [_CCRCC]: [ , _.headers[_xacc_] ], + [_CSHA]: [ , _.headers[_xacs] ], + [_CSHAh]: [ , _.headers[_xacs_] ], + [_MM]: [ () => void 0 !== _.headers[_xamm], () => strictParseInt32(_.headers[_xamm]) ], + [_VI]: [ , _.headers[_xavi] ], + [_CC]: [ , _.headers[_cc] ], + [_CD]: [ , _.headers[_cd] ], + [_CE]: [ , _.headers[_ce] ], + [_CL]: [ , _.headers[_cl] ], + [_CR]: [ , _.headers[_cr] ], + [_CT]: [ , _.headers[_ct] ], + [_E]: [ () => void 0 !== _.headers[_e], () => expectNonNull(parseRfc7231DateTime(_.headers[_e])) ], + [_ES]: [ , _.headers[_ex] ], + [_WRL]: [ , _.headers[_xawrl] ], + [_SSE]: [ , _.headers[_xasse] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_SC]: [ , _.headers[_xasc] ], + [_RC]: [ , _.headers[_xarc] ], + [_RS]: [ , _.headers[_xars] ], + [_PC]: [ () => void 0 !== _.headers[_xampc], () => strictParseInt32(_.headers[_xampc]) ], + [_TC]: [ () => void 0 !== _.headers[_xatc], () => strictParseInt32(_.headers[_xatc]) ], + [_OLM]: [ , _.headers[_xaolm] ], + [_OLRUD]: [ () => void 0 !== _.headers[_xaolrud], () => expectNonNull(parseRfc3339DateTimeWithOffset(_.headers[_xaolrud])) ], + [_OLLHS]: [ , _.headers[_xaollh] ], + Metadata: [ , Object.keys(_.headers).filter((_ => _.startsWith("x-amz-meta-"))).reduce(((ee, ne) => { + ee[ne.substring(11)] = _.headers[ne]; + return ee; + }), {}) ] + }), ie = _.body; + ee.sdkStreamMixin(ie); + ne.Body = ie; + return ne; +}, de_GetObjectAclCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.AccessControlList) ne[_Gr] = []; else if (null != ie[_ACLc] && null != ie[_ACLc][_G]) ne[_Gr] = de_Grants(getArrayIfSingleItem(ie[_ACLc][_G]), ee); + if (null != ie[_O]) ne[_O] = de_Owner(ie[_O], ee); + return ne; +}, de_GetObjectAttributesCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_DM]: [ () => void 0 !== _.headers[_xadm], () => parseBoolean(_.headers[_xadm]) ], + [_LM]: [ () => void 0 !== _.headers[_lm], () => expectNonNull(parseRfc7231DateTime(_.headers[_lm])) ], + [_VI]: [ , _.headers[_xavi] ], + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_Ch]) ne[_Ch] = de_Checksum(ie[_Ch], ee); + if (null != ie[_ETa]) ne[_ETa] = expectString(ie[_ETa]); + if (null != ie[_OP]) ne[_OP] = de_GetObjectAttributesParts(ie[_OP], ee); + if (null != ie[_OSb]) ne[_OSb] = strictParseLong(ie[_OSb]); + if (null != ie[_SC]) ne[_SC] = expectString(ie[_SC]); + return ne; +}, de_GetObjectLegalHoldCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.LegalHold = de_ObjectLockLegalHold(ie, ee); + return ne; +}, de_GetObjectLockConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.ObjectLockConfiguration = de_ObjectLockConfiguration(ie, ee); + return ne; +}, de_GetObjectRetentionCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.Retention = de_ObjectLockRetention(ie, ee); + return ne; +}, de_GetObjectTaggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_VI]: [ , _.headers[_xavi] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.TagSet) ne[_TS] = []; else if (null != ie[_TS] && null != ie[_TS][_Ta]) ne[_TS] = de_TagSet(getArrayIfSingleItem(ie[_TS][_Ta]), ee); + return ne; +}, de_GetObjectTorrentCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = _.body; + ee.sdkStreamMixin(ie); + ne.Body = ie; + return ne; +}, de_GetPublicAccessBlockCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.PublicAccessBlockConfiguration = de_PublicAccessBlockConfiguration(ie, ee); + return ne; +}, de_HeadBucketCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_BLT]: [ , _.headers[_xablt] ], + [_BLN]: [ , _.headers[_xabln] ], + [_BR]: [ , _.headers[_xabr] ], + [_APA]: [ () => void 0 !== _.headers[_xaapa], () => parseBoolean(_.headers[_xaapa]) ] + }); + await collectBody(_.body, ee); + return ne; +}, de_HeadObjectCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_DM]: [ () => void 0 !== _.headers[_xadm], () => parseBoolean(_.headers[_xadm]) ], + [_AR]: [ , _.headers[_ar] ], + [_Exp]: [ , _.headers[_xae] ], + [_Re]: [ , _.headers[_xar] ], + [_AS]: [ , _.headers[_xaas] ], + [_LM]: [ () => void 0 !== _.headers[_lm], () => expectNonNull(parseRfc7231DateTime(_.headers[_lm])) ], + [_CLo]: [ () => void 0 !== _.headers[_cl_], () => strictParseLong(_.headers[_cl_]) ], + [_CCRC]: [ , _.headers[_xacc] ], + [_CCRCC]: [ , _.headers[_xacc_] ], + [_CSHA]: [ , _.headers[_xacs] ], + [_CSHAh]: [ , _.headers[_xacs_] ], + [_ETa]: [ , _.headers[_eta] ], + [_MM]: [ () => void 0 !== _.headers[_xamm], () => strictParseInt32(_.headers[_xamm]) ], + [_VI]: [ , _.headers[_xavi] ], + [_CC]: [ , _.headers[_cc] ], + [_CD]: [ , _.headers[_cd] ], + [_CE]: [ , _.headers[_ce] ], + [_CL]: [ , _.headers[_cl] ], + [_CT]: [ , _.headers[_ct] ], + [_E]: [ () => void 0 !== _.headers[_e], () => expectNonNull(parseRfc7231DateTime(_.headers[_e])) ], + [_ES]: [ , _.headers[_ex] ], + [_WRL]: [ , _.headers[_xawrl] ], + [_SSE]: [ , _.headers[_xasse] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_SC]: [ , _.headers[_xasc] ], + [_RC]: [ , _.headers[_xarc] ], + [_RS]: [ , _.headers[_xars] ], + [_PC]: [ () => void 0 !== _.headers[_xampc], () => strictParseInt32(_.headers[_xampc]) ], + [_OLM]: [ , _.headers[_xaolm] ], + [_OLRUD]: [ () => void 0 !== _.headers[_xaolrud], () => expectNonNull(parseRfc3339DateTimeWithOffset(_.headers[_xaolrud])) ], + [_OLLHS]: [ , _.headers[_xaollh] ], + Metadata: [ , Object.keys(_.headers).filter((_ => _.startsWith("x-amz-meta-"))).reduce(((ee, ne) => { + ee[ne.substring(11)] = _.headers[ne]; + return ee; + }), {}) ] + }); + await collectBody(_.body, ee); + return ne; +}, de_ListBucketAnalyticsConfigurationsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.AnalyticsConfiguration) ne[_ACLn] = []; else if (null != ie[_AC]) ne[_ACLn] = de_AnalyticsConfigurationList(getArrayIfSingleItem(ie[_AC]), ee); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_NCT]) ne[_NCT] = expectString(ie[_NCT]); + return ne; +}, de_ListBucketIntelligentTieringConfigurationsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + if ("" === ie.IntelligentTieringConfiguration) ne[_ITCL] = []; else if (null != ie[_ITC]) ne[_ITCL] = de_IntelligentTieringConfigurationList(getArrayIfSingleItem(ie[_ITC]), ee); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_NCT]) ne[_NCT] = expectString(ie[_NCT]); + return ne; +}, de_ListBucketInventoryConfigurationsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + if ("" === ie.InventoryConfiguration) ne[_ICL] = []; else if (null != ie[_IC]) ne[_ICL] = de_InventoryConfigurationList(getArrayIfSingleItem(ie[_IC]), ee); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_NCT]) ne[_NCT] = expectString(ie[_NCT]); + return ne; +}, de_ListBucketMetricsConfigurationsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if ("" === ie.MetricsConfiguration) ne[_MCL] = []; else if (null != ie[_MC]) ne[_MCL] = de_MetricsConfigurationList(getArrayIfSingleItem(ie[_MC]), ee); + if (null != ie[_NCT]) ne[_NCT] = expectString(ie[_NCT]); + return ne; +}, de_ListBucketsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.Buckets) ne[_Bu] = []; else if (null != ie[_Bu] && null != ie[_Bu][_B]) ne[_Bu] = de_Buckets(getArrayIfSingleItem(ie[_Bu][_B]), ee); + if (null != ie[_O]) ne[_O] = de_Owner(ie[_O], ee); + return ne; +}, de_ListDirectoryBucketsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.Buckets) ne[_Bu] = []; else if (null != ie[_Bu] && null != ie[_Bu][_B]) ne[_Bu] = de_Buckets(getArrayIfSingleItem(ie[_Bu][_B]), ee); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + return ne; +}, de_ListMultipartUploadsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_B]) ne[_B] = expectString(ie[_B]); + if ("" === ie.CommonPrefixes) ne[_CP] = []; else if (null != ie[_CP]) ne[_CP] = de_CommonPrefixList(getArrayIfSingleItem(ie[_CP]), ee); + if (null != ie[_D]) ne[_D] = expectString(ie[_D]); + if (null != ie[_ET]) ne[_ET] = expectString(ie[_ET]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_KM]) ne[_KM] = expectString(ie[_KM]); + if (null != ie[_MU]) ne[_MU] = strictParseInt32(ie[_MU]); + if (null != ie[_NKM]) ne[_NKM] = expectString(ie[_NKM]); + if (null != ie[_NUIM]) ne[_NUIM] = expectString(ie[_NUIM]); + if (null != ie[_P]) ne[_P] = expectString(ie[_P]); + if (null != ie[_UIM]) ne[_UIM] = expectString(ie[_UIM]); + if ("" === ie.Upload) ne[_Up] = []; else if (null != ie[_U]) ne[_Up] = de_MultipartUploadList(getArrayIfSingleItem(ie[_U]), ee); + return ne; +}, de_ListObjectsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.CommonPrefixes) ne[_CP] = []; else if (null != ie[_CP]) ne[_CP] = de_CommonPrefixList(getArrayIfSingleItem(ie[_CP]), ee); + if ("" === ie.Contents) ne[_Co] = []; else if (null != ie[_Co]) ne[_Co] = de_ObjectList(getArrayIfSingleItem(ie[_Co]), ee); + if (null != ie[_D]) ne[_D] = expectString(ie[_D]); + if (null != ie[_ET]) ne[_ET] = expectString(ie[_ET]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_M]) ne[_M] = expectString(ie[_M]); + if (null != ie[_MK]) ne[_MK] = strictParseInt32(ie[_MK]); + if (null != ie[_N]) ne[_N] = expectString(ie[_N]); + if (null != ie[_NM]) ne[_NM] = expectString(ie[_NM]); + if (null != ie[_P]) ne[_P] = expectString(ie[_P]); + return ne; +}, de_ListObjectsV2Command = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.CommonPrefixes) ne[_CP] = []; else if (null != ie[_CP]) ne[_CP] = de_CommonPrefixList(getArrayIfSingleItem(ie[_CP]), ee); + if ("" === ie.Contents) ne[_Co] = []; else if (null != ie[_Co]) ne[_Co] = de_ObjectList(getArrayIfSingleItem(ie[_Co]), ee); + if (null != ie[_CTo]) ne[_CTo] = expectString(ie[_CTo]); + if (null != ie[_D]) ne[_D] = expectString(ie[_D]); + if (null != ie[_ET]) ne[_ET] = expectString(ie[_ET]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_KC]) ne[_KC] = strictParseInt32(ie[_KC]); + if (null != ie[_MK]) ne[_MK] = strictParseInt32(ie[_MK]); + if (null != ie[_N]) ne[_N] = expectString(ie[_N]); + if (null != ie[_NCT]) ne[_NCT] = expectString(ie[_NCT]); + if (null != ie[_P]) ne[_P] = expectString(ie[_P]); + if (null != ie[_SA]) ne[_SA] = expectString(ie[_SA]); + return ne; +}, de_ListObjectVersionsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if ("" === ie.CommonPrefixes) ne[_CP] = []; else if (null != ie[_CP]) ne[_CP] = de_CommonPrefixList(getArrayIfSingleItem(ie[_CP]), ee); + if ("" === ie.DeleteMarker) ne[_DMe] = []; else if (null != ie[_DM]) ne[_DMe] = de_DeleteMarkers(getArrayIfSingleItem(ie[_DM]), ee); + if (null != ie[_D]) ne[_D] = expectString(ie[_D]); + if (null != ie[_ET]) ne[_ET] = expectString(ie[_ET]); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_KM]) ne[_KM] = expectString(ie[_KM]); + if (null != ie[_MK]) ne[_MK] = strictParseInt32(ie[_MK]); + if (null != ie[_N]) ne[_N] = expectString(ie[_N]); + if (null != ie[_NKM]) ne[_NKM] = expectString(ie[_NKM]); + if (null != ie[_NVIM]) ne[_NVIM] = expectString(ie[_NVIM]); + if (null != ie[_P]) ne[_P] = expectString(ie[_P]); + if (null != ie[_VIM]) ne[_VIM] = expectString(ie[_VIM]); + if ("" === ie.Version) ne[_Ve] = []; else if (null != ie[_V]) ne[_Ve] = de_ObjectVersionList(getArrayIfSingleItem(ie[_V]), ee); + return ne; +}, de_ListPartsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_AD]: [ () => void 0 !== _.headers[_xaad], () => expectNonNull(parseRfc7231DateTime(_.headers[_xaad])) ], + [_ARI]: [ , _.headers[_xaari] ], + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectNonNull(expectObject(await parseXmlBody(_.body, ee)), "body"); + if (null != ie[_B]) ne[_B] = expectString(ie[_B]); + if (null != ie[_CA]) ne[_CA] = expectString(ie[_CA]); + if (null != ie[_In]) ne[_In] = de_Initiator(ie[_In], ee); + if (null != ie[_IT]) ne[_IT] = parseBoolean(ie[_IT]); + if (null != ie[_K]) ne[_K] = expectString(ie[_K]); + if (null != ie[_MP]) ne[_MP] = strictParseInt32(ie[_MP]); + if (null != ie[_NPNM]) ne[_NPNM] = expectString(ie[_NPNM]); + if (null != ie[_O]) ne[_O] = de_Owner(ie[_O], ee); + if (null != ie[_PNM]) ne[_PNM] = expectString(ie[_PNM]); + if ("" === ie.Part) ne[_Part] = []; else if (null != ie[_Par]) ne[_Part] = de_Parts(getArrayIfSingleItem(ie[_Par]), ee); + if (null != ie[_SC]) ne[_SC] = expectString(ie[_SC]); + if (null != ie[_UI]) ne[_UI] = expectString(ie[_UI]); + return ne; +}, de_PutBucketAccelerateConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketAclCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketAnalyticsConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketCorsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketEncryptionCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketIntelligentTieringConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketInventoryConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketLifecycleConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketLoggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketMetricsConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketNotificationConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketOwnershipControlsCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketPolicyCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketReplicationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketRequestPaymentCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketTaggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketVersioningCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutBucketWebsiteCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_Exp]: [ , _.headers[_xae] ], + [_ETa]: [ , _.headers[_eta] ], + [_CCRC]: [ , _.headers[_xacc] ], + [_CCRCC]: [ , _.headers[_xacc_] ], + [_CSHA]: [ , _.headers[_xacs] ], + [_CSHAh]: [ , _.headers[_xacs_] ], + [_SSE]: [ , _.headers[_xasse] ], + [_VI]: [ , _.headers[_xavi] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_SSEKMSEC]: [ , _.headers[_xassec] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectAclCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectLegalHoldCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectLockConfigurationCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectRetentionCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutObjectTaggingCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_VI]: [ , _.headers[_xavi] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_PutPublicAccessBlockCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_RestoreObjectCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_RC]: [ , _.headers[_xarc] ], + [_ROP]: [ , _.headers[_xarop] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_SelectObjectContentCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }), ie = _.body; + ne.Payload = de_SelectObjectContentEventStream(ie, ee); + return ne; +}, de_UploadPartCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_SSE]: [ , _.headers[_xasse] ], + [_ETa]: [ , _.headers[_eta] ], + [_CCRC]: [ , _.headers[_xacc] ], + [_CCRCC]: [ , _.headers[_xacc_] ], + [_CSHA]: [ , _.headers[_xacs] ], + [_CSHAh]: [ , _.headers[_xacs_] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ] + }); + await collectBody(_.body, ee); + return ne; +}, de_UploadPartCopyCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_), + [_CSVI]: [ , _.headers[_xacsvi] ], + [_SSE]: [ , _.headers[_xasse] ], + [_SSECA]: [ , _.headers[_xasseca] ], + [_SSECKMD]: [ , _.headers[_xasseckm] ], + [_SSEKMSKI]: [ , _.headers[_xasseakki] ], + [_BKE]: [ () => void 0 !== _.headers[_xassebke], () => parseBoolean(_.headers[_xassebke]) ], + [_RC]: [ , _.headers[_xarc] ] + }), ie = expectObject(await parseXmlBody(_.body, ee)); + ne.CopyPartResult = de_CopyPartResult(ie, ee); + return ne; +}, de_WriteGetObjectResponseCommand = async (_, ee) => { + if (200 !== _.statusCode && _.statusCode >= 300) return de_CommandError(_, ee); + const ne = map({ + $metadata: deserializeMetadata2(_) + }); + await collectBody(_.body, ee); + return ne; +}, de_CommandError = async (_, ee) => { + const ne = { + ..._, + body: await parseXmlErrorBody(_.body, ee) + }, ie = loadRestXmlErrorCode(_, ne.body); + switch (ie) { + case "NoSuchUpload": + case "com.amazonaws.s3#NoSuchUpload": + throw await de_NoSuchUploadRes(ne, ee); + + case "ObjectNotInActiveTierError": + case "com.amazonaws.s3#ObjectNotInActiveTierError": + throw await de_ObjectNotInActiveTierErrorRes(ne, ee); + + case "BucketAlreadyExists": + case "com.amazonaws.s3#BucketAlreadyExists": + throw await de_BucketAlreadyExistsRes(ne, ee); + + case "BucketAlreadyOwnedByYou": + case "com.amazonaws.s3#BucketAlreadyOwnedByYou": + throw await de_BucketAlreadyOwnedByYouRes(ne, ee); + + case "NoSuchBucket": + case "com.amazonaws.s3#NoSuchBucket": + throw await de_NoSuchBucketRes(ne, ee); + + case "InvalidObjectState": + case "com.amazonaws.s3#InvalidObjectState": + throw await de_InvalidObjectStateRes(ne, ee); + + case "NoSuchKey": + case "com.amazonaws.s3#NoSuchKey": + throw await de_NoSuchKeyRes(ne, ee); + + case "NotFound": + case "com.amazonaws.s3#NotFound": + throw await de_NotFoundRes(ne, ee); + + case "ObjectAlreadyInActiveTierError": + case "com.amazonaws.s3#ObjectAlreadyInActiveTierError": + throw await de_ObjectAlreadyInActiveTierErrorRes(ne, ee); + + default: + const re = ne.body; + return throwDefaultError2({ + output: _, + parsedBody: re, + errorCode: ie + }); + } +}, throwDefaultError2 = withBaseException(S3ServiceException), de_BucketAlreadyExistsRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new BucketAlreadyExists({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_BucketAlreadyOwnedByYouRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new BucketAlreadyOwnedByYou({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_InvalidObjectStateRes = async (_, ee) => { + const ne = map({}), ie = _.body; + if (null != ie[_AT]) ne[_AT] = expectString(ie[_AT]); + if (null != ie[_SC]) ne[_SC] = expectString(ie[_SC]); + const re = new InvalidObjectState({ + $metadata: deserializeMetadata2(_), + ...ne + }); + return decorateServiceException(re, _.body); +}, de_NoSuchBucketRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new NoSuchBucket({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_NoSuchKeyRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new NoSuchKey({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_NoSuchUploadRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new NoSuchUpload({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_NotFoundRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new NotFound({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_ObjectAlreadyInActiveTierErrorRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new ObjectAlreadyInActiveTierError({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_ObjectNotInActiveTierErrorRes = async (_, ee) => { + const ne = map({}), ie = (_.body, new ObjectNotInActiveTierError({ + $metadata: deserializeMetadata2(_), + ...ne + })); + return decorateServiceException(ie, _.body); +}, de_SelectObjectContentEventStream = (_, ee) => ee.eventStreamMarshaller.deserialize(_, (async ne => { + if (null != ne["Records"]) return { + Records: await de_RecordsEvent_event(ne["Records"], ee) + }; + if (null != ne["Stats"]) return { + Stats: await de_StatsEvent_event(ne["Stats"], ee) + }; + if (null != ne["Progress"]) return { + Progress: await de_ProgressEvent_event(ne["Progress"], ee) + }; + if (null != ne["Cont"]) return { + Cont: await de_ContinuationEvent_event(ne["Cont"], ee) + }; + if (null != ne["End"]) return { + End: await de_EndEvent_event(ne["End"], ee) + }; else return { + $unknown: _ + }; +})), de_ContinuationEvent_event = async (_, ee) => { + const ne = {}, ie = await parseXmlBody(_.body, ee); + Object.assign(ne, de_ContinuationEvent(ie, ee)); + return ne; +}, de_EndEvent_event = async (_, ee) => { + const ne = {}, ie = await parseXmlBody(_.body, ee); + Object.assign(ne, de_EndEvent(ie, ee)); + return ne; +}, de_ProgressEvent_event = async (_, ee) => { + const ne = {}, ie = await parseXmlBody(_.body, ee); + ne.Details = de_Progress(ie, ee); + return ne; +}, de_RecordsEvent_event = async (_, ee) => { + const ne = {}; + ne.Payload = _.body; + return ne; +}, de_StatsEvent_event = async (_, ee) => { + const ne = {}, ie = await parseXmlBody(_.body, ee); + ne.Details = de_Stats(ie, ee); + return ne; +}, se_AbortIncompleteMultipartUpload = (_, ee) => { + const ne = new XmlNode(_AIMU); + if (null != _[_DAI]) ne.c(XmlNode.of(_DAI, String(_[_DAI])).n(_DAI)); + return ne; +}, se_AccelerateConfiguration = (_, ee) => { + const ne = new XmlNode(_ACc); + if (null != _[_S]) ne.c(XmlNode.of(_BAS, _[_S]).n(_S)); + return ne; +}, se_AccessControlPolicy = (_, ee) => { + const ne = new XmlNode(_ACP); + ne.lc(_, "Grants", "AccessControlList", (() => se_Grants(_[_Gr], ee))); + if (null != _[_O]) ne.c(se_Owner(_[_O], ee).n(_O)); + return ne; +}, se_AccessControlTranslation = (_, ee) => { + const ne = new XmlNode(_ACT); + if (null != _[_O]) ne.c(XmlNode.of(_OOw, _[_O]).n(_O)); + return ne; +}, se_AllowedHeaders = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_AH, _).n(_me))), se_AllowedMethods = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_AM, _).n(_me))), se_AllowedOrigins = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_AO, _).n(_me))), se_AnalyticsAndOperator = (_, ee) => { + const ne = new XmlNode(_AAO); + ne.cc(_, _P); + ne.l(_, "Tags", "Tag", (() => se_TagSet(_[_Tag], ee))); + return ne; +}, se_AnalyticsConfiguration = (_, ee) => { + const ne = new XmlNode(_AC); + if (null != _[_I]) ne.c(XmlNode.of(_AI, _[_I]).n(_I)); + if (null != _[_F]) ne.c(se_AnalyticsFilter(_[_F], ee).n(_F)); + if (null != _[_SCA]) ne.c(se_StorageClassAnalysis(_[_SCA], ee).n(_SCA)); + return ne; +}, se_AnalyticsExportDestination = (_, ee) => { + const ne = new XmlNode(_AED); + if (null != _[_SBD]) ne.c(se_AnalyticsS3BucketDestination(_[_SBD], ee).n(_SBD)); + return ne; +}, se_AnalyticsFilter = (_, ee) => { + const ne = new XmlNode(_AF); + AnalyticsFilter.visit(_, { + Prefix: ee => { + if (null != _[_P]) ne.c(XmlNode.of(_P, ee).n(_P)); + }, + Tag: ie => { + if (null != _[_Ta]) ne.c(se_Tag(ie, ee).n(_Ta)); + }, + And: ie => { + if (null != _[_A]) ne.c(se_AnalyticsAndOperator(ie, ee).n(_A)); + }, + _: (_, ee) => { + if (!(ee instanceof XmlNode || ee instanceof XmlText)) throw new Error("Unable to serialize unknown union members in XML."); + ne.c(new XmlNode(_).c(ee)); + } + }); + return ne; +}, se_AnalyticsS3BucketDestination = (_, ee) => { + const ne = new XmlNode(_ASBD); + if (null != _[_Fo]) ne.c(XmlNode.of(_ASEFF, _[_Fo]).n(_Fo)); + if (null != _[_BAI]) ne.c(XmlNode.of(_AIc, _[_BAI]).n(_BAI)); + if (null != _[_B]) ne.c(XmlNode.of(_BN, _[_B]).n(_B)); + ne.cc(_, _P); + return ne; +}, se_BucketInfo = (_, ee) => { + const ne = new XmlNode(_BI); + ne.cc(_, _DR); + if (null != _[_Ty]) ne.c(XmlNode.of(_BT, _[_Ty]).n(_Ty)); + return ne; +}, se_BucketLifecycleConfiguration = (_, ee) => { + const ne = new XmlNode(_BLC); + ne.l(_, "Rules", "Rule", (() => se_LifecycleRules(_[_Rul], ee))); + return ne; +}, se_BucketLoggingStatus = (_, ee) => { + const ne = new XmlNode(_BLS); + if (null != _[_LE]) ne.c(se_LoggingEnabled(_[_LE], ee).n(_LE)); + return ne; +}, se_CompletedMultipartUpload = (_, ee) => { + const ne = new XmlNode(_CMU); + ne.l(_, "Parts", "Part", (() => se_CompletedPartList(_[_Part], ee))); + return ne; +}, se_CompletedPart = (_, ee) => { + const ne = new XmlNode(_CPo); + ne.cc(_, _ETa); + ne.cc(_, _CCRC); + ne.cc(_, _CCRCC); + ne.cc(_, _CSHA); + ne.cc(_, _CSHAh); + if (null != _[_PN]) ne.c(XmlNode.of(_PN, String(_[_PN])).n(_PN)); + return ne; +}, se_CompletedPartList = (_, ee) => _.filter((_ => null != _)).map((_ => se_CompletedPart(_, ee).n(_me))), se_Condition = (_, ee) => { + const ne = new XmlNode(_Con); + ne.cc(_, _HECRE); + ne.cc(_, _KPE); + return ne; +}, se_CORSConfiguration = (_, ee) => { + const ne = new XmlNode(_CORSC); + ne.l(_, "CORSRules", "CORSRule", (() => se_CORSRules(_[_CORSRu], ee))); + return ne; +}, se_CORSRule = (_, ee) => { + const ne = new XmlNode(_CORSR); + ne.cc(_, _ID_); + ne.l(_, "AllowedHeaders", "AllowedHeader", (() => se_AllowedHeaders(_[_AHl], ee))); + ne.l(_, "AllowedMethods", "AllowedMethod", (() => se_AllowedMethods(_[_AMl], ee))); + ne.l(_, "AllowedOrigins", "AllowedOrigin", (() => se_AllowedOrigins(_[_AOl], ee))); + ne.l(_, "ExposeHeaders", "ExposeHeader", (() => se_ExposeHeaders(_[_EH], ee))); + if (null != _[_MAS]) ne.c(XmlNode.of(_MAS, String(_[_MAS])).n(_MAS)); + return ne; +}, se_CORSRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_CORSRule(_, ee).n(_me))), se_CreateBucketConfiguration = (_, ee) => { + const ne = new XmlNode(_CBC); + if (null != _[_LC]) ne.c(XmlNode.of(_BLCu, _[_LC]).n(_LC)); + if (null != _[_L]) ne.c(se_LocationInfo(_[_L], ee).n(_L)); + if (null != _[_B]) ne.c(se_BucketInfo(_[_B], ee).n(_B)); + return ne; +}, se_CSVInput = (_, ee) => { + const ne = new XmlNode(_CSVIn); + ne.cc(_, _FHI); + ne.cc(_, _Com); + ne.cc(_, _QEC); + ne.cc(_, _RD); + ne.cc(_, _FD); + ne.cc(_, _QCuo); + if (null != _[_AQRD]) ne.c(XmlNode.of(_AQRD, String(_[_AQRD])).n(_AQRD)); + return ne; +}, se_CSVOutput = (_, ee) => { + const ne = new XmlNode(_CSVO); + ne.cc(_, _QF); + ne.cc(_, _QEC); + ne.cc(_, _RD); + ne.cc(_, _FD); + ne.cc(_, _QCuo); + return ne; +}, se_DefaultRetention = (_, ee) => { + const ne = new XmlNode(_DRe); + if (null != _[_Mo]) ne.c(XmlNode.of(_OLRM, _[_Mo]).n(_Mo)); + if (null != _[_Da]) ne.c(XmlNode.of(_Da, String(_[_Da])).n(_Da)); + if (null != _[_Y]) ne.c(XmlNode.of(_Y, String(_[_Y])).n(_Y)); + return ne; +}, se_Delete = (_, ee) => { + const ne = new XmlNode(_Del); + ne.l(_, "Objects", "Object", (() => se_ObjectIdentifierList(_[_Ob], ee))); + if (null != _[_Q]) ne.c(XmlNode.of(_Q, String(_[_Q])).n(_Q)); + return ne; +}, se_DeleteMarkerReplication = (_, ee) => { + const ne = new XmlNode(_DMR); + if (null != _[_S]) ne.c(XmlNode.of(_DMRS, _[_S]).n(_S)); + return ne; +}, se_Destination = (_, ee) => { + const ne = new XmlNode(_Des); + if (null != _[_B]) ne.c(XmlNode.of(_BN, _[_B]).n(_B)); + if (null != _[_Ac]) ne.c(XmlNode.of(_AIc, _[_Ac]).n(_Ac)); + ne.cc(_, _SC); + if (null != _[_ACT]) ne.c(se_AccessControlTranslation(_[_ACT], ee).n(_ACT)); + if (null != _[_ECn]) ne.c(se_EncryptionConfiguration(_[_ECn], ee).n(_ECn)); + if (null != _[_RTe]) ne.c(se_ReplicationTime(_[_RTe], ee).n(_RTe)); + if (null != _[_Me]) ne.c(se_Metrics(_[_Me], ee).n(_Me)); + return ne; +}, se_Encryption = (_, ee) => { + const ne = new XmlNode(_En); + if (null != _[_ETn]) ne.c(XmlNode.of(_SSE, _[_ETn]).n(_ETn)); + if (null != _[_KMSKI]) ne.c(XmlNode.of(_SSEKMSKI, _[_KMSKI]).n(_KMSKI)); + ne.cc(_, _KMSC); + return ne; +}, se_EncryptionConfiguration = (_, ee) => { + const ne = new XmlNode(_ECn); + ne.cc(_, _RKKID); + return ne; +}, se_ErrorDocument = (_, ee) => { + const ne = new XmlNode(_ED); + if (null != _[_K]) ne.c(XmlNode.of(_OK, _[_K]).n(_K)); + return ne; +}, se_EventBridgeConfiguration = (_, ee) => new XmlNode(_EBC), se_EventList = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_Ev, _).n(_me))), se_ExistingObjectReplication = (_, ee) => { + const ne = new XmlNode(_EOR); + if (null != _[_S]) ne.c(XmlNode.of(_EORS, _[_S]).n(_S)); + return ne; +}, se_ExposeHeaders = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_EHx, _).n(_me))), se_FilterRule = (_, ee) => { + const ne = new XmlNode(_FR); + if (null != _[_N]) ne.c(XmlNode.of(_FRN, _[_N]).n(_N)); + if (null != _[_Va]) ne.c(XmlNode.of(_FRV, _[_Va]).n(_Va)); + return ne; +}, se_FilterRuleList = (_, ee) => _.filter((_ => null != _)).map((_ => se_FilterRule(_, ee).n(_me))), se_GlacierJobParameters = (_, ee) => { + const ne = new XmlNode(_GJP); + ne.cc(_, _Ti); + return ne; +}, se_Grant = (_, ee) => { + const ne = new XmlNode(_G); + if (null != _[_Gra]) { + const ie = se_Grantee(_[_Gra], ee).n(_Gra); + ie.a("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ne.c(ie); + } + ne.cc(_, _Pe); + return ne; +}, se_Grantee = (_, ee) => { + const ne = new XmlNode(_Gra); + ne.cc(_, _DN); + ne.cc(_, _EA); + ne.cc(_, _ID_); + ne.cc(_, _URI); + ne.a("xsi:type", _[_Ty]); + return ne; +}, se_Grants = (_, ee) => _.filter((_ => null != _)).map((_ => se_Grant(_, ee).n(_G))), se_IndexDocument = (_, ee) => { + const ne = new XmlNode(_ID); + ne.cc(_, _Su); + return ne; +}, se_InputSerialization = (_, ee) => { + const ne = new XmlNode(_IS); + if (null != _[_CSV]) ne.c(se_CSVInput(_[_CSV], ee).n(_CSV)); + ne.cc(_, _CTom); + if (null != _[_JSON]) ne.c(se_JSONInput(_[_JSON], ee).n(_JSON)); + if (null != _[_Parq]) ne.c(se_ParquetInput(_[_Parq], ee).n(_Parq)); + return ne; +}, se_IntelligentTieringAndOperator = (_, ee) => { + const ne = new XmlNode(_ITAO); + ne.cc(_, _P); + ne.l(_, "Tags", "Tag", (() => se_TagSet(_[_Tag], ee))); + return ne; +}, se_IntelligentTieringConfiguration = (_, ee) => { + const ne = new XmlNode(_ITC); + if (null != _[_I]) ne.c(XmlNode.of(_ITI, _[_I]).n(_I)); + if (null != _[_F]) ne.c(se_IntelligentTieringFilter(_[_F], ee).n(_F)); + if (null != _[_S]) ne.c(XmlNode.of(_ITS, _[_S]).n(_S)); + ne.l(_, "Tierings", "Tiering", (() => se_TieringList(_[_Tie], ee))); + return ne; +}, se_IntelligentTieringFilter = (_, ee) => { + const ne = new XmlNode(_ITF); + ne.cc(_, _P); + if (null != _[_Ta]) ne.c(se_Tag(_[_Ta], ee).n(_Ta)); + if (null != _[_A]) ne.c(se_IntelligentTieringAndOperator(_[_A], ee).n(_A)); + return ne; +}, se_InventoryConfiguration = (_, ee) => { + const ne = new XmlNode(_IC); + if (null != _[_Des]) ne.c(se_InventoryDestination(_[_Des], ee).n(_Des)); + if (null != _[_IE]) ne.c(XmlNode.of(_IE, String(_[_IE])).n(_IE)); + if (null != _[_F]) ne.c(se_InventoryFilter(_[_F], ee).n(_F)); + if (null != _[_I]) ne.c(XmlNode.of(_II, _[_I]).n(_I)); + if (null != _[_IOV]) ne.c(XmlNode.of(_IIOV, _[_IOV]).n(_IOV)); + ne.lc(_, "OptionalFields", "OptionalFields", (() => se_InventoryOptionalFields(_[_OF], ee))); + if (null != _[_Sc]) ne.c(se_InventorySchedule(_[_Sc], ee).n(_Sc)); + return ne; +}, se_InventoryDestination = (_, ee) => { + const ne = new XmlNode(_IDn); + if (null != _[_SBD]) ne.c(se_InventoryS3BucketDestination(_[_SBD], ee).n(_SBD)); + return ne; +}, se_InventoryEncryption = (_, ee) => { + const ne = new XmlNode(_IEn); + if (null != _[_SSES]) ne.c(se_SSES3(_[_SSES], ee).n(_SS)); + if (null != _[_SSEKMS]) ne.c(se_SSEKMS(_[_SSEKMS], ee).n(_SK)); + return ne; +}, se_InventoryFilter = (_, ee) => { + const ne = new XmlNode(_IF); + ne.cc(_, _P); + return ne; +}, se_InventoryOptionalFields = (_, ee) => _.filter((_ => null != _)).map((_ => XmlNode.of(_IOF, _).n(_Fi))), se_InventoryS3BucketDestination = (_, ee) => { + const ne = new XmlNode(_ISBD); + ne.cc(_, _AIc); + if (null != _[_B]) ne.c(XmlNode.of(_BN, _[_B]).n(_B)); + if (null != _[_Fo]) ne.c(XmlNode.of(_IFn, _[_Fo]).n(_Fo)); + ne.cc(_, _P); + if (null != _[_En]) ne.c(se_InventoryEncryption(_[_En], ee).n(_En)); + return ne; +}, se_InventorySchedule = (_, ee) => { + const ne = new XmlNode(_ISn); + if (null != _[_Fr]) ne.c(XmlNode.of(_IFnv, _[_Fr]).n(_Fr)); + return ne; +}, se_JSONInput = (_, ee) => { + const ne = new XmlNode(_JSONI); + if (null != _[_Ty]) ne.c(XmlNode.of(_JSONT, _[_Ty]).n(_Ty)); + return ne; +}, se_JSONOutput = (_, ee) => { + const ne = new XmlNode(_JSONO); + ne.cc(_, _RD); + return ne; +}, se_LambdaFunctionConfiguration = (_, ee) => { + const ne = new XmlNode(_LFCa); + if (null != _[_I]) ne.c(XmlNode.of(_NI, _[_I]).n(_I)); + if (null != _[_LFA]) ne.c(XmlNode.of(_LFA, _[_LFA]).n(_CF)); + ne.l(_, "Events", "Event", (() => se_EventList(_[_Eve], ee))); + if (null != _[_F]) ne.c(se_NotificationConfigurationFilter(_[_F], ee).n(_F)); + return ne; +}, se_LambdaFunctionConfigurationList = (_, ee) => _.filter((_ => null != _)).map((_ => se_LambdaFunctionConfiguration(_, ee).n(_me))), se_LifecycleExpiration = (_, ee) => { + const ne = new XmlNode(_LEi); + if (null != _[_Dat]) ne.c(XmlNode.of(_Dat, serializeDateTime(_[_Dat]).toString()).n(_Dat)); + if (null != _[_Da]) ne.c(XmlNode.of(_Da, String(_[_Da])).n(_Da)); + if (null != _[_EODM]) ne.c(XmlNode.of(_EODM, String(_[_EODM])).n(_EODM)); + return ne; +}, se_LifecycleRule = (_, ee) => { + const ne = new XmlNode(_LR); + if (null != _[_Exp]) ne.c(se_LifecycleExpiration(_[_Exp], ee).n(_Exp)); + ne.cc(_, _ID_); + ne.cc(_, _P); + if (null != _[_F]) ne.c(se_LifecycleRuleFilter(_[_F], ee).n(_F)); + if (null != _[_S]) ne.c(XmlNode.of(_ESx, _[_S]).n(_S)); + ne.l(_, "Transitions", "Transition", (() => se_TransitionList(_[_Tr], ee))); + ne.l(_, "NoncurrentVersionTransitions", "NoncurrentVersionTransition", (() => se_NoncurrentVersionTransitionList(_[_NVT], ee))); + if (null != _[_NVE]) ne.c(se_NoncurrentVersionExpiration(_[_NVE], ee).n(_NVE)); + if (null != _[_AIMU]) ne.c(se_AbortIncompleteMultipartUpload(_[_AIMU], ee).n(_AIMU)); + return ne; +}, se_LifecycleRuleAndOperator = (_, ee) => { + const ne = new XmlNode(_LRAO); + ne.cc(_, _P); + ne.l(_, "Tags", "Tag", (() => se_TagSet(_[_Tag], ee))); + if (null != _[_OSGT]) ne.c(XmlNode.of(_OSGTB, String(_[_OSGT])).n(_OSGT)); + if (null != _[_OSLT]) ne.c(XmlNode.of(_OSLTB, String(_[_OSLT])).n(_OSLT)); + return ne; +}, se_LifecycleRuleFilter = (_, ee) => { + const ne = new XmlNode(_LRF); + LifecycleRuleFilter.visit(_, { + Prefix: ee => { + if (null != _[_P]) ne.c(XmlNode.of(_P, ee).n(_P)); + }, + Tag: ie => { + if (null != _[_Ta]) ne.c(se_Tag(ie, ee).n(_Ta)); + }, + ObjectSizeGreaterThan: ee => { + if (null != _[_OSGT]) ne.c(XmlNode.of(_OSGTB, String(ee)).n(_OSGT)); + }, + ObjectSizeLessThan: ee => { + if (null != _[_OSLT]) ne.c(XmlNode.of(_OSLTB, String(ee)).n(_OSLT)); + }, + And: ie => { + if (null != _[_A]) ne.c(se_LifecycleRuleAndOperator(ie, ee).n(_A)); + }, + _: (_, ee) => { + if (!(ee instanceof XmlNode || ee instanceof XmlText)) throw new Error("Unable to serialize unknown union members in XML."); + ne.c(new XmlNode(_).c(ee)); + } + }); + return ne; +}, se_LifecycleRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_LifecycleRule(_, ee).n(_me))), se_LocationInfo = (_, ee) => { + const ne = new XmlNode(_LI); + if (null != _[_Ty]) ne.c(XmlNode.of(_LT, _[_Ty]).n(_Ty)); + if (null != _[_N]) ne.c(XmlNode.of(_LNAS, _[_N]).n(_N)); + return ne; +}, se_LoggingEnabled = (_, ee) => { + const ne = new XmlNode(_LE); + ne.cc(_, _TB); + ne.lc(_, "TargetGrants", "TargetGrants", (() => se_TargetGrants(_[_TG], ee))); + ne.cc(_, _TP); + if (null != _[_TOKF]) ne.c(se_TargetObjectKeyFormat(_[_TOKF], ee).n(_TOKF)); + return ne; +}, se_MetadataEntry = (_, ee) => { + const ne = new XmlNode(_ME); + if (null != _[_N]) ne.c(XmlNode.of(_MKe, _[_N]).n(_N)); + if (null != _[_Va]) ne.c(XmlNode.of(_MV, _[_Va]).n(_Va)); + return ne; +}, se_Metrics = (_, ee) => { + const ne = new XmlNode(_Me); + if (null != _[_S]) ne.c(XmlNode.of(_MS, _[_S]).n(_S)); + if (null != _[_ETv]) ne.c(se_ReplicationTimeValue(_[_ETv], ee).n(_ETv)); + return ne; +}, se_MetricsAndOperator = (_, ee) => { + const ne = new XmlNode(_MAO); + ne.cc(_, _P); + ne.l(_, "Tags", "Tag", (() => se_TagSet(_[_Tag], ee))); + ne.cc(_, _APAc); + return ne; +}, se_MetricsConfiguration = (_, ee) => { + const ne = new XmlNode(_MC); + if (null != _[_I]) ne.c(XmlNode.of(_MI, _[_I]).n(_I)); + if (null != _[_F]) ne.c(se_MetricsFilter(_[_F], ee).n(_F)); + return ne; +}, se_MetricsFilter = (_, ee) => { + const ne = new XmlNode(_MF); + MetricsFilter.visit(_, { + Prefix: ee => { + if (null != _[_P]) ne.c(XmlNode.of(_P, ee).n(_P)); + }, + Tag: ie => { + if (null != _[_Ta]) ne.c(se_Tag(ie, ee).n(_Ta)); + }, + AccessPointArn: ee => { + if (null != _[_APAc]) ne.c(XmlNode.of(_APAc, ee).n(_APAc)); + }, + And: ie => { + if (null != _[_A]) ne.c(se_MetricsAndOperator(ie, ee).n(_A)); + }, + _: (_, ee) => { + if (!(ee instanceof XmlNode || ee instanceof XmlText)) throw new Error("Unable to serialize unknown union members in XML."); + ne.c(new XmlNode(_).c(ee)); + } + }); + return ne; +}, se_NoncurrentVersionExpiration = (_, ee) => { + const ne = new XmlNode(_NVE); + if (null != _[_ND]) ne.c(XmlNode.of(_Da, String(_[_ND])).n(_ND)); + if (null != _[_NNV]) ne.c(XmlNode.of(_VC, String(_[_NNV])).n(_NNV)); + return ne; +}, se_NoncurrentVersionTransition = (_, ee) => { + const ne = new XmlNode(_NVTo); + if (null != _[_ND]) ne.c(XmlNode.of(_Da, String(_[_ND])).n(_ND)); + if (null != _[_SC]) ne.c(XmlNode.of(_TSC, _[_SC]).n(_SC)); + if (null != _[_NNV]) ne.c(XmlNode.of(_VC, String(_[_NNV])).n(_NNV)); + return ne; +}, se_NoncurrentVersionTransitionList = (_, ee) => _.filter((_ => null != _)).map((_ => se_NoncurrentVersionTransition(_, ee).n(_me))), se_NotificationConfiguration = (_, ee) => { + const ne = new XmlNode(_NC); + ne.l(_, "TopicConfigurations", "TopicConfiguration", (() => se_TopicConfigurationList(_[_TCop], ee))); + ne.l(_, "QueueConfigurations", "QueueConfiguration", (() => se_QueueConfigurationList(_[_QCu], ee))); + ne.l(_, "LambdaFunctionConfigurations", "CloudFunctionConfiguration", (() => se_LambdaFunctionConfigurationList(_[_LFC], ee))); + if (null != _[_EBC]) ne.c(se_EventBridgeConfiguration(_[_EBC], ee).n(_EBC)); + return ne; +}, se_NotificationConfigurationFilter = (_, ee) => { + const ne = new XmlNode(_NCF); + if (null != _[_K]) ne.c(se_S3KeyFilter(_[_K], ee).n(_SKe)); + return ne; +}, se_ObjectIdentifier = (_, ee) => { + const ne = new XmlNode(_OI); + if (null != _[_K]) ne.c(XmlNode.of(_OK, _[_K]).n(_K)); + if (null != _[_VI]) ne.c(XmlNode.of(_OVI, _[_VI]).n(_VI)); + return ne; +}, se_ObjectIdentifierList = (_, ee) => _.filter((_ => null != _)).map((_ => se_ObjectIdentifier(_, ee).n(_me))), se_ObjectLockConfiguration = (_, ee) => { + const ne = new XmlNode(_OLC); + ne.cc(_, _OLE); + if (null != _[_Ru]) ne.c(se_ObjectLockRule(_[_Ru], ee).n(_Ru)); + return ne; +}, se_ObjectLockLegalHold = (_, ee) => { + const ne = new XmlNode(_OLLH); + if (null != _[_S]) ne.c(XmlNode.of(_OLLHS, _[_S]).n(_S)); + return ne; +}, se_ObjectLockRetention = (_, ee) => { + const ne = new XmlNode(_OLR); + if (null != _[_Mo]) ne.c(XmlNode.of(_OLRM, _[_Mo]).n(_Mo)); + if (null != _[_RUD]) ne.c(XmlNode.of(_Dat, serializeDateTime(_[_RUD]).toString()).n(_RUD)); + return ne; +}, se_ObjectLockRule = (_, ee) => { + const ne = new XmlNode(_OLRb); + if (null != _[_DRe]) ne.c(se_DefaultRetention(_[_DRe], ee).n(_DRe)); + return ne; +}, se_OutputLocation = (_, ee) => { + const ne = new XmlNode(_OL); + if (null != _[_S_]) ne.c(se_S3Location(_[_S_], ee).n(_S_)); + return ne; +}, se_OutputSerialization = (_, ee) => { + const ne = new XmlNode(_OS); + if (null != _[_CSV]) ne.c(se_CSVOutput(_[_CSV], ee).n(_CSV)); + if (null != _[_JSON]) ne.c(se_JSONOutput(_[_JSON], ee).n(_JSON)); + return ne; +}, se_Owner = (_, ee) => { + const ne = new XmlNode(_O); + ne.cc(_, _DN); + ne.cc(_, _ID_); + return ne; +}, se_OwnershipControls = (_, ee) => { + const ne = new XmlNode(_OC); + ne.l(_, "Rules", "Rule", (() => se_OwnershipControlsRules(_[_Rul], ee))); + return ne; +}, se_OwnershipControlsRule = (_, ee) => { + const ne = new XmlNode(_OCR); + ne.cc(_, _OO); + return ne; +}, se_OwnershipControlsRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_OwnershipControlsRule(_, ee).n(_me))), se_ParquetInput = (_, ee) => new XmlNode(_PI), se_PartitionedPrefix = (_, ee) => { + const ne = new XmlNode(_PP); + ne.cc(_, _PDS); + return ne; +}, se_PublicAccessBlockConfiguration = (_, ee) => { + const ne = new XmlNode(_PABC); + if (null != _[_BPA]) ne.c(XmlNode.of(_Se, String(_[_BPA])).n(_BPA)); + if (null != _[_IPA]) ne.c(XmlNode.of(_Se, String(_[_IPA])).n(_IPA)); + if (null != _[_BPP]) ne.c(XmlNode.of(_Se, String(_[_BPP])).n(_BPP)); + if (null != _[_RPB]) ne.c(XmlNode.of(_Se, String(_[_RPB])).n(_RPB)); + return ne; +}, se_QueueConfiguration = (_, ee) => { + const ne = new XmlNode(_QC); + if (null != _[_I]) ne.c(XmlNode.of(_NI, _[_I]).n(_I)); + if (null != _[_QA]) ne.c(XmlNode.of(_QA, _[_QA]).n(_Qu)); + ne.l(_, "Events", "Event", (() => se_EventList(_[_Eve], ee))); + if (null != _[_F]) ne.c(se_NotificationConfigurationFilter(_[_F], ee).n(_F)); + return ne; +}, se_QueueConfigurationList = (_, ee) => _.filter((_ => null != _)).map((_ => se_QueueConfiguration(_, ee).n(_me))), se_Redirect = (_, ee) => { + const ne = new XmlNode(_Red); + ne.cc(_, _HN); + ne.cc(_, _HRC); + ne.cc(_, _Pr); + ne.cc(_, _RKPW); + ne.cc(_, _RKW); + return ne; +}, se_RedirectAllRequestsTo = (_, ee) => { + const ne = new XmlNode(_RART); + ne.cc(_, _HN); + ne.cc(_, _Pr); + return ne; +}, se_ReplicaModifications = (_, ee) => { + const ne = new XmlNode(_RM); + if (null != _[_S]) ne.c(XmlNode.of(_RMS, _[_S]).n(_S)); + return ne; +}, se_ReplicationConfiguration = (_, ee) => { + const ne = new XmlNode(_RCe); + ne.cc(_, _Ro); + ne.l(_, "Rules", "Rule", (() => se_ReplicationRules(_[_Rul], ee))); + return ne; +}, se_ReplicationRule = (_, ee) => { + const ne = new XmlNode(_RRe); + ne.cc(_, _ID_); + if (null != _[_Pri]) ne.c(XmlNode.of(_Pri, String(_[_Pri])).n(_Pri)); + ne.cc(_, _P); + if (null != _[_F]) ne.c(se_ReplicationRuleFilter(_[_F], ee).n(_F)); + if (null != _[_S]) ne.c(XmlNode.of(_RRS, _[_S]).n(_S)); + if (null != _[_SSC]) ne.c(se_SourceSelectionCriteria(_[_SSC], ee).n(_SSC)); + if (null != _[_EOR]) ne.c(se_ExistingObjectReplication(_[_EOR], ee).n(_EOR)); + if (null != _[_Des]) ne.c(se_Destination(_[_Des], ee).n(_Des)); + if (null != _[_DMR]) ne.c(se_DeleteMarkerReplication(_[_DMR], ee).n(_DMR)); + return ne; +}, se_ReplicationRuleAndOperator = (_, ee) => { + const ne = new XmlNode(_RRAO); + ne.cc(_, _P); + ne.l(_, "Tags", "Tag", (() => se_TagSet(_[_Tag], ee))); + return ne; +}, se_ReplicationRuleFilter = (_, ee) => { + const ne = new XmlNode(_RRF); + ReplicationRuleFilter.visit(_, { + Prefix: ee => { + if (null != _[_P]) ne.c(XmlNode.of(_P, ee).n(_P)); + }, + Tag: ie => { + if (null != _[_Ta]) ne.c(se_Tag(ie, ee).n(_Ta)); + }, + And: ie => { + if (null != _[_A]) ne.c(se_ReplicationRuleAndOperator(ie, ee).n(_A)); + }, + _: (_, ee) => { + if (!(ee instanceof XmlNode || ee instanceof XmlText)) throw new Error("Unable to serialize unknown union members in XML."); + ne.c(new XmlNode(_).c(ee)); + } + }); + return ne; +}, se_ReplicationRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_ReplicationRule(_, ee).n(_me))), se_ReplicationTime = (_, ee) => { + const ne = new XmlNode(_RTe); + if (null != _[_S]) ne.c(XmlNode.of(_RTS, _[_S]).n(_S)); + if (null != _[_Tim]) ne.c(se_ReplicationTimeValue(_[_Tim], ee).n(_Tim)); + return ne; +}, se_ReplicationTimeValue = (_, ee) => { + const ne = new XmlNode(_RTV); + if (null != _[_Mi]) ne.c(XmlNode.of(_Mi, String(_[_Mi])).n(_Mi)); + return ne; +}, se_RequestPaymentConfiguration = (_, ee) => { + const ne = new XmlNode(_RPC); + ne.cc(_, _Pa); + return ne; +}, se_RequestProgress = (_, ee) => { + const ne = new XmlNode(_RPe); + if (null != _[_Ena]) ne.c(XmlNode.of(_ERP, String(_[_Ena])).n(_Ena)); + return ne; +}, se_RestoreRequest = (_, ee) => { + const ne = new XmlNode(_RRes); + if (null != _[_Da]) ne.c(XmlNode.of(_Da, String(_[_Da])).n(_Da)); + if (null != _[_GJP]) ne.c(se_GlacierJobParameters(_[_GJP], ee).n(_GJP)); + if (null != _[_Ty]) ne.c(XmlNode.of(_RRT, _[_Ty]).n(_Ty)); + ne.cc(_, _Ti); + ne.cc(_, _Desc); + if (null != _[_SP]) ne.c(se_SelectParameters(_[_SP], ee).n(_SP)); + if (null != _[_OL]) ne.c(se_OutputLocation(_[_OL], ee).n(_OL)); + return ne; +}, se_RoutingRule = (_, ee) => { + const ne = new XmlNode(_RRou); + if (null != _[_Con]) ne.c(se_Condition(_[_Con], ee).n(_Con)); + if (null != _[_Red]) ne.c(se_Redirect(_[_Red], ee).n(_Red)); + return ne; +}, se_RoutingRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_RoutingRule(_, ee).n(_RRou))), se_S3KeyFilter = (_, ee) => { + const ne = new XmlNode(_SKF); + ne.l(_, "FilterRules", "FilterRule", (() => se_FilterRuleList(_[_FRi], ee))); + return ne; +}, se_S3Location = (_, ee) => { + const ne = new XmlNode(_SL); + ne.cc(_, _BN); + if (null != _[_P]) ne.c(XmlNode.of(_LP, _[_P]).n(_P)); + if (null != _[_En]) ne.c(se_Encryption(_[_En], ee).n(_En)); + if (null != _[_CACL]) ne.c(XmlNode.of(_OCACL, _[_CACL]).n(_CACL)); + ne.lc(_, "AccessControlList", "AccessControlList", (() => se_Grants(_[_ACLc], ee))); + if (null != _[_T]) ne.c(se_Tagging(_[_T], ee).n(_T)); + ne.lc(_, "UserMetadata", "UserMetadata", (() => se_UserMetadata(_[_UM], ee))); + ne.cc(_, _SC); + return ne; +}, se_ScanRange = (_, ee) => { + const ne = new XmlNode(_SR); + if (null != _[_St]) ne.c(XmlNode.of(_St, String(_[_St])).n(_St)); + if (null != _[_End]) ne.c(XmlNode.of(_End, String(_[_End])).n(_End)); + return ne; +}, se_SelectParameters = (_, ee) => { + const ne = new XmlNode(_SP); + if (null != _[_IS]) ne.c(se_InputSerialization(_[_IS], ee).n(_IS)); + ne.cc(_, _ETx); + ne.cc(_, _Ex); + if (null != _[_OS]) ne.c(se_OutputSerialization(_[_OS], ee).n(_OS)); + return ne; +}, se_ServerSideEncryptionByDefault = (_, ee) => { + const ne = new XmlNode(_SSEBD); + if (null != _[_SSEA]) ne.c(XmlNode.of(_SSE, _[_SSEA]).n(_SSEA)); + if (null != _[_KMSMKID]) ne.c(XmlNode.of(_SSEKMSKI, _[_KMSMKID]).n(_KMSMKID)); + return ne; +}, se_ServerSideEncryptionConfiguration = (_, ee) => { + const ne = new XmlNode(_SSEC); + ne.l(_, "Rules", "Rule", (() => se_ServerSideEncryptionRules(_[_Rul], ee))); + return ne; +}, se_ServerSideEncryptionRule = (_, ee) => { + const ne = new XmlNode(_SSER); + if (null != _[_ASSEBD]) ne.c(se_ServerSideEncryptionByDefault(_[_ASSEBD], ee).n(_ASSEBD)); + if (null != _[_BKE]) ne.c(XmlNode.of(_BKE, String(_[_BKE])).n(_BKE)); + return ne; +}, se_ServerSideEncryptionRules = (_, ee) => _.filter((_ => null != _)).map((_ => se_ServerSideEncryptionRule(_, ee).n(_me))), se_SimplePrefix = (_, ee) => new XmlNode(_SPi), se_SourceSelectionCriteria = (_, ee) => { + const ne = new XmlNode(_SSC); + if (null != _[_SKEO]) ne.c(se_SseKmsEncryptedObjects(_[_SKEO], ee).n(_SKEO)); + if (null != _[_RM]) ne.c(se_ReplicaModifications(_[_RM], ee).n(_RM)); + return ne; +}, se_SSEKMS = (_, ee) => { + const ne = new XmlNode(_SK); + if (null != _[_KI]) ne.c(XmlNode.of(_SSEKMSKI, _[_KI]).n(_KI)); + return ne; +}, se_SseKmsEncryptedObjects = (_, ee) => { + const ne = new XmlNode(_SKEO); + if (null != _[_S]) ne.c(XmlNode.of(_SKEOS, _[_S]).n(_S)); + return ne; +}, se_SSES3 = (_, ee) => new XmlNode(_SS), se_StorageClassAnalysis = (_, ee) => { + const ne = new XmlNode(_SCA); + if (null != _[_DE]) ne.c(se_StorageClassAnalysisDataExport(_[_DE], ee).n(_DE)); + return ne; +}, se_StorageClassAnalysisDataExport = (_, ee) => { + const ne = new XmlNode(_SCADE); + if (null != _[_OSV]) ne.c(XmlNode.of(_SCASV, _[_OSV]).n(_OSV)); + if (null != _[_Des]) ne.c(se_AnalyticsExportDestination(_[_Des], ee).n(_Des)); + return ne; +}, se_Tag = (_, ee) => { + const ne = new XmlNode(_Ta); + if (null != _[_K]) ne.c(XmlNode.of(_OK, _[_K]).n(_K)); + ne.cc(_, _Va); + return ne; +}, se_Tagging = (_, ee) => { + const ne = new XmlNode(_T); + ne.lc(_, "TagSet", "TagSet", (() => se_TagSet(_[_TS], ee))); + return ne; +}, se_TagSet = (_, ee) => _.filter((_ => null != _)).map((_ => se_Tag(_, ee).n(_Ta))), se_TargetGrant = (_, ee) => { + const ne = new XmlNode(_TGa); + if (null != _[_Gra]) { + const ie = se_Grantee(_[_Gra], ee).n(_Gra); + ie.a("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ne.c(ie); + } + if (null != _[_Pe]) ne.c(XmlNode.of(_BLP, _[_Pe]).n(_Pe)); + return ne; +}, se_TargetGrants = (_, ee) => _.filter((_ => null != _)).map((_ => se_TargetGrant(_, ee).n(_G))), se_TargetObjectKeyFormat = (_, ee) => { + const ne = new XmlNode(_TOKF); + if (null != _[_SPi]) ne.c(se_SimplePrefix(_[_SPi], ee).n(_SPi)); + if (null != _[_PP]) ne.c(se_PartitionedPrefix(_[_PP], ee).n(_PP)); + return ne; +}, se_Tiering = (_, ee) => { + const ne = new XmlNode(_Tier); + if (null != _[_Da]) ne.c(XmlNode.of(_ITD, String(_[_Da])).n(_Da)); + if (null != _[_AT]) ne.c(XmlNode.of(_ITAT, _[_AT]).n(_AT)); + return ne; +}, se_TieringList = (_, ee) => _.filter((_ => null != _)).map((_ => se_Tiering(_, ee).n(_me))), se_TopicConfiguration = (_, ee) => { + const ne = new XmlNode(_TCo); + if (null != _[_I]) ne.c(XmlNode.of(_NI, _[_I]).n(_I)); + if (null != _[_TA]) ne.c(XmlNode.of(_TA, _[_TA]).n(_Top)); + ne.l(_, "Events", "Event", (() => se_EventList(_[_Eve], ee))); + if (null != _[_F]) ne.c(se_NotificationConfigurationFilter(_[_F], ee).n(_F)); + return ne; +}, se_TopicConfigurationList = (_, ee) => _.filter((_ => null != _)).map((_ => se_TopicConfiguration(_, ee).n(_me))), se_Transition = (_, ee) => { + const ne = new XmlNode(_Tra); + if (null != _[_Dat]) ne.c(XmlNode.of(_Dat, serializeDateTime(_[_Dat]).toString()).n(_Dat)); + if (null != _[_Da]) ne.c(XmlNode.of(_Da, String(_[_Da])).n(_Da)); + if (null != _[_SC]) ne.c(XmlNode.of(_TSC, _[_SC]).n(_SC)); + return ne; +}, se_TransitionList = (_, ee) => _.filter((_ => null != _)).map((_ => se_Transition(_, ee).n(_me))), se_UserMetadata = (_, ee) => _.filter((_ => null != _)).map((_ => se_MetadataEntry(_, ee).n(_ME))), se_VersioningConfiguration = (_, ee) => { + const ne = new XmlNode(_VCe); + if (null != _[_MFAD]) ne.c(XmlNode.of(_MFAD, _[_MFAD]).n(_MDf)); + if (null != _[_S]) ne.c(XmlNode.of(_BVS, _[_S]).n(_S)); + return ne; +}, se_WebsiteConfiguration = (_, ee) => { + const ne = new XmlNode(_WC); + if (null != _[_ED]) ne.c(se_ErrorDocument(_[_ED], ee).n(_ED)); + if (null != _[_ID]) ne.c(se_IndexDocument(_[_ID], ee).n(_ID)); + if (null != _[_RART]) ne.c(se_RedirectAllRequestsTo(_[_RART], ee).n(_RART)); + ne.lc(_, "RoutingRules", "RoutingRules", (() => se_RoutingRules(_[_RRo], ee))); + return ne; +}, de_AbortIncompleteMultipartUpload = (_, ee) => { + const ne = {}; + if (null != _[_DAI]) ne[_DAI] = strictParseInt32(_[_DAI]); + return ne; +}, de_AccessControlTranslation = (_, ee) => { + const ne = {}; + if (null != _[_O]) ne[_O] = expectString(_[_O]); + return ne; +}, de_AllowedHeaders = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_AllowedMethods = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_AllowedOrigins = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_AnalyticsAndOperator = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Tag) ne[_Tag] = []; else if (null != _[_Ta]) ne[_Tag] = de_TagSet(getArrayIfSingleItem(_[_Ta]), ee); + return ne; +}, de_AnalyticsConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if ("" === _.Filter) ; else if (null != _[_F]) ne[_F] = de_AnalyticsFilter(expectUnion(_[_F]), ee); + if (null != _[_SCA]) ne[_SCA] = de_StorageClassAnalysis(_[_SCA], ee); + return ne; +}, de_AnalyticsConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_AnalyticsConfiguration(_, ee))), de_AnalyticsExportDestination = (_, ee) => { + const ne = {}; + if (null != _[_SBD]) ne[_SBD] = de_AnalyticsS3BucketDestination(_[_SBD], ee); + return ne; +}, de_AnalyticsFilter = (_, ee) => { + if (null != _[_P]) return { + Prefix: expectString(_[_P]) + }; + if (null != _[_Ta]) return { + Tag: de_Tag(_[_Ta], ee) + }; + if (null != _[_A]) return { + And: de_AnalyticsAndOperator(_[_A], ee) + }; else return { + $unknown: Object.entries(_)[0] + }; +}, de_AnalyticsS3BucketDestination = (_, ee) => { + const ne = {}; + if (null != _[_Fo]) ne[_Fo] = expectString(_[_Fo]); + if (null != _[_BAI]) ne[_BAI] = expectString(_[_BAI]); + if (null != _[_B]) ne[_B] = expectString(_[_B]); + if (null != _[_P]) ne[_P] = expectString(_[_P]); + return ne; +}, de_Bucket = (_, ee) => { + const ne = {}; + if (null != _[_N]) ne[_N] = expectString(_[_N]); + if (null != _[_CDr]) ne[_CDr] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_CDr])); + return ne; +}, de_Buckets = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Bucket(_, ee))), de_Checksum = (_, ee) => { + const ne = {}; + if (null != _[_CCRC]) ne[_CCRC] = expectString(_[_CCRC]); + if (null != _[_CCRCC]) ne[_CCRCC] = expectString(_[_CCRCC]); + if (null != _[_CSHA]) ne[_CSHA] = expectString(_[_CSHA]); + if (null != _[_CSHAh]) ne[_CSHAh] = expectString(_[_CSHAh]); + return ne; +}, de_ChecksumAlgorithmList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_CommonPrefix = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + return ne; +}, de_CommonPrefixList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_CommonPrefix(_, ee))), de_Condition = (_, ee) => { + const ne = {}; + if (null != _[_HECRE]) ne[_HECRE] = expectString(_[_HECRE]); + if (null != _[_KPE]) ne[_KPE] = expectString(_[_KPE]); + return ne; +}, de_ContinuationEvent = (_, ee) => ({}), de_CopyObjectResult = (_, ee) => { + const ne = {}; + if (null != _[_ETa]) ne[_ETa] = expectString(_[_ETa]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + if (null != _[_CCRC]) ne[_CCRC] = expectString(_[_CCRC]); + if (null != _[_CCRCC]) ne[_CCRCC] = expectString(_[_CCRCC]); + if (null != _[_CSHA]) ne[_CSHA] = expectString(_[_CSHA]); + if (null != _[_CSHAh]) ne[_CSHAh] = expectString(_[_CSHAh]); + return ne; +}, de_CopyPartResult = (_, ee) => { + const ne = {}; + if (null != _[_ETa]) ne[_ETa] = expectString(_[_ETa]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + if (null != _[_CCRC]) ne[_CCRC] = expectString(_[_CCRC]); + if (null != _[_CCRCC]) ne[_CCRCC] = expectString(_[_CCRCC]); + if (null != _[_CSHA]) ne[_CSHA] = expectString(_[_CSHA]); + if (null != _[_CSHAh]) ne[_CSHAh] = expectString(_[_CSHAh]); + return ne; +}, de_CORSRule = (_, ee) => { + const ne = {}; + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + if ("" === _.AllowedHeader) ne[_AHl] = []; else if (null != _[_AH]) ne[_AHl] = de_AllowedHeaders(getArrayIfSingleItem(_[_AH]), ee); + if ("" === _.AllowedMethod) ne[_AMl] = []; else if (null != _[_AM]) ne[_AMl] = de_AllowedMethods(getArrayIfSingleItem(_[_AM]), ee); + if ("" === _.AllowedOrigin) ne[_AOl] = []; else if (null != _[_AO]) ne[_AOl] = de_AllowedOrigins(getArrayIfSingleItem(_[_AO]), ee); + if ("" === _.ExposeHeader) ne[_EH] = []; else if (null != _[_EHx]) ne[_EH] = de_ExposeHeaders(getArrayIfSingleItem(_[_EHx]), ee); + if (null != _[_MAS]) ne[_MAS] = strictParseInt32(_[_MAS]); + return ne; +}, de_CORSRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_CORSRule(_, ee))), de_DefaultRetention = (_, ee) => { + const ne = {}; + if (null != _[_Mo]) ne[_Mo] = expectString(_[_Mo]); + if (null != _[_Da]) ne[_Da] = strictParseInt32(_[_Da]); + if (null != _[_Y]) ne[_Y] = strictParseInt32(_[_Y]); + return ne; +}, de_DeletedObject = (_, ee) => { + const ne = {}; + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_VI]) ne[_VI] = expectString(_[_VI]); + if (null != _[_DM]) ne[_DM] = parseBoolean(_[_DM]); + if (null != _[_DMVI]) ne[_DMVI] = expectString(_[_DMVI]); + return ne; +}, de_DeletedObjects = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_DeletedObject(_, ee))), de_DeleteMarkerEntry = (_, ee) => { + const ne = {}; + if (null != _[_O]) ne[_O] = de_Owner(_[_O], ee); + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_VI]) ne[_VI] = expectString(_[_VI]); + if (null != _[_IL]) ne[_IL] = parseBoolean(_[_IL]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + return ne; +}, de_DeleteMarkerReplication = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + return ne; +}, de_DeleteMarkers = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_DeleteMarkerEntry(_, ee))), de_Destination = (_, ee) => { + const ne = {}; + if (null != _[_B]) ne[_B] = expectString(_[_B]); + if (null != _[_Ac]) ne[_Ac] = expectString(_[_Ac]); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + if (null != _[_ACT]) ne[_ACT] = de_AccessControlTranslation(_[_ACT], ee); + if (null != _[_ECn]) ne[_ECn] = de_EncryptionConfiguration(_[_ECn], ee); + if (null != _[_RTe]) ne[_RTe] = de_ReplicationTime(_[_RTe], ee); + if (null != _[_Me]) ne[_Me] = de_Metrics(_[_Me], ee); + return ne; +}, de_EncryptionConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_RKKID]) ne[_RKKID] = expectString(_[_RKKID]); + return ne; +}, de_EndEvent = (_, ee) => ({}), de__Error = (_, ee) => { + const ne = {}; + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_VI]) ne[_VI] = expectString(_[_VI]); + if (null != _[_Cod]) ne[_Cod] = expectString(_[_Cod]); + if (null != _[_Mes]) ne[_Mes] = expectString(_[_Mes]); + return ne; +}, de_ErrorDocument = (_, ee) => { + const ne = {}; + if (null != _[_K]) ne[_K] = expectString(_[_K]); + return ne; +}, de_Errors = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de__Error(_, ee))), de_EventBridgeConfiguration = (_, ee) => ({}), de_EventList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_ExistingObjectReplication = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + return ne; +}, de_ExposeHeaders = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_FilterRule = (_, ee) => { + const ne = {}; + if (null != _[_N]) ne[_N] = expectString(_[_N]); + if (null != _[_Va]) ne[_Va] = expectString(_[_Va]); + return ne; +}, de_FilterRuleList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_FilterRule(_, ee))), de_GetObjectAttributesParts = (_, ee) => { + const ne = {}; + if (null != _[_PC]) ne[_TPC] = strictParseInt32(_[_PC]); + if (null != _[_PNM]) ne[_PNM] = expectString(_[_PNM]); + if (null != _[_NPNM]) ne[_NPNM] = expectString(_[_NPNM]); + if (null != _[_MP]) ne[_MP] = strictParseInt32(_[_MP]); + if (null != _[_IT]) ne[_IT] = parseBoolean(_[_IT]); + if ("" === _.Part) ne[_Part] = []; else if (null != _[_Par]) ne[_Part] = de_PartsList(getArrayIfSingleItem(_[_Par]), ee); + return ne; +}, de_Grant = (_, ee) => { + const ne = {}; + if (null != _[_Gra]) ne[_Gra] = de_Grantee(_[_Gra], ee); + if (null != _[_Pe]) ne[_Pe] = expectString(_[_Pe]); + return ne; +}, de_Grantee = (_, ee) => { + const ne = {}; + if (null != _[_DN]) ne[_DN] = expectString(_[_DN]); + if (null != _[_EA]) ne[_EA] = expectString(_[_EA]); + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + if (null != _[_URI]) ne[_URI] = expectString(_[_URI]); + if (null != _[_x]) ne[_Ty] = expectString(_[_x]); + return ne; +}, de_Grants = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Grant(_, ee))), de_IndexDocument = (_, ee) => { + const ne = {}; + if (null != _[_Su]) ne[_Su] = expectString(_[_Su]); + return ne; +}, de_Initiator = (_, ee) => { + const ne = {}; + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + if (null != _[_DN]) ne[_DN] = expectString(_[_DN]); + return ne; +}, de_IntelligentTieringAndOperator = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Tag) ne[_Tag] = []; else if (null != _[_Ta]) ne[_Tag] = de_TagSet(getArrayIfSingleItem(_[_Ta]), ee); + return ne; +}, de_IntelligentTieringConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if (null != _[_F]) ne[_F] = de_IntelligentTieringFilter(_[_F], ee); + if (null != _[_S]) ne[_S] = expectString(_[_S]); + if ("" === _.Tiering) ne[_Tie] = []; else if (null != _[_Tier]) ne[_Tie] = de_TieringList(getArrayIfSingleItem(_[_Tier]), ee); + return ne; +}, de_IntelligentTieringConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_IntelligentTieringConfiguration(_, ee))), de_IntelligentTieringFilter = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if (null != _[_Ta]) ne[_Ta] = de_Tag(_[_Ta], ee); + if (null != _[_A]) ne[_A] = de_IntelligentTieringAndOperator(_[_A], ee); + return ne; +}, de_InventoryConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_Des]) ne[_Des] = de_InventoryDestination(_[_Des], ee); + if (null != _[_IE]) ne[_IE] = parseBoolean(_[_IE]); + if (null != _[_F]) ne[_F] = de_InventoryFilter(_[_F], ee); + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if (null != _[_IOV]) ne[_IOV] = expectString(_[_IOV]); + if ("" === _.OptionalFields) ne[_OF] = []; else if (null != _[_OF] && null != _[_OF][_Fi]) ne[_OF] = de_InventoryOptionalFields(getArrayIfSingleItem(_[_OF][_Fi]), ee); + if (null != _[_Sc]) ne[_Sc] = de_InventorySchedule(_[_Sc], ee); + return ne; +}, de_InventoryConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_InventoryConfiguration(_, ee))), de_InventoryDestination = (_, ee) => { + const ne = {}; + if (null != _[_SBD]) ne[_SBD] = de_InventoryS3BucketDestination(_[_SBD], ee); + return ne; +}, de_InventoryEncryption = (_, ee) => { + const ne = {}; + if (null != _[_SS]) ne[_SSES] = de_SSES3(_[_SS], ee); + if (null != _[_SK]) ne[_SSEKMS] = de_SSEKMS(_[_SK], ee); + return ne; +}, de_InventoryFilter = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + return ne; +}, de_InventoryOptionalFields = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => expectString(_))), de_InventoryS3BucketDestination = (_, ee) => { + const ne = {}; + if (null != _[_AIc]) ne[_AIc] = expectString(_[_AIc]); + if (null != _[_B]) ne[_B] = expectString(_[_B]); + if (null != _[_Fo]) ne[_Fo] = expectString(_[_Fo]); + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if (null != _[_En]) ne[_En] = de_InventoryEncryption(_[_En], ee); + return ne; +}, de_InventorySchedule = (_, ee) => { + const ne = {}; + if (null != _[_Fr]) ne[_Fr] = expectString(_[_Fr]); + return ne; +}, de_LambdaFunctionConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if (null != _[_CF]) ne[_LFA] = expectString(_[_CF]); + if ("" === _.Event) ne[_Eve] = []; else if (null != _[_Ev]) ne[_Eve] = de_EventList(getArrayIfSingleItem(_[_Ev]), ee); + if (null != _[_F]) ne[_F] = de_NotificationConfigurationFilter(_[_F], ee); + return ne; +}, de_LambdaFunctionConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_LambdaFunctionConfiguration(_, ee))), de_LifecycleExpiration = (_, ee) => { + const ne = {}; + if (null != _[_Dat]) ne[_Dat] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_Dat])); + if (null != _[_Da]) ne[_Da] = strictParseInt32(_[_Da]); + if (null != _[_EODM]) ne[_EODM] = parseBoolean(_[_EODM]); + return ne; +}, de_LifecycleRule = (_, ee) => { + const ne = {}; + if (null != _[_Exp]) ne[_Exp] = de_LifecycleExpiration(_[_Exp], ee); + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Filter) ; else if (null != _[_F]) ne[_F] = de_LifecycleRuleFilter(expectUnion(_[_F]), ee); + if (null != _[_S]) ne[_S] = expectString(_[_S]); + if ("" === _.Transition) ne[_Tr] = []; else if (null != _[_Tra]) ne[_Tr] = de_TransitionList(getArrayIfSingleItem(_[_Tra]), ee); + if ("" === _.NoncurrentVersionTransition) ne[_NVT] = []; else if (null != _[_NVTo]) ne[_NVT] = de_NoncurrentVersionTransitionList(getArrayIfSingleItem(_[_NVTo]), ee); + if (null != _[_NVE]) ne[_NVE] = de_NoncurrentVersionExpiration(_[_NVE], ee); + if (null != _[_AIMU]) ne[_AIMU] = de_AbortIncompleteMultipartUpload(_[_AIMU], ee); + return ne; +}, de_LifecycleRuleAndOperator = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Tag) ne[_Tag] = []; else if (null != _[_Ta]) ne[_Tag] = de_TagSet(getArrayIfSingleItem(_[_Ta]), ee); + if (null != _[_OSGT]) ne[_OSGT] = strictParseLong(_[_OSGT]); + if (null != _[_OSLT]) ne[_OSLT] = strictParseLong(_[_OSLT]); + return ne; +}, de_LifecycleRuleFilter = (_, ee) => { + if (null != _[_P]) return { + Prefix: expectString(_[_P]) + }; + if (null != _[_Ta]) return { + Tag: de_Tag(_[_Ta], ee) + }; + if (null != _[_OSGT]) return { + ObjectSizeGreaterThan: strictParseLong(_[_OSGT]) + }; + if (null != _[_OSLT]) return { + ObjectSizeLessThan: strictParseLong(_[_OSLT]) + }; + if (null != _[_A]) return { + And: de_LifecycleRuleAndOperator(_[_A], ee) + }; else return { + $unknown: Object.entries(_)[0] + }; +}, de_LifecycleRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_LifecycleRule(_, ee))), de_LoggingEnabled = (_, ee) => { + const ne = {}; + if (null != _[_TB]) ne[_TB] = expectString(_[_TB]); + if ("" === _.TargetGrants) ne[_TG] = []; else if (null != _[_TG] && null != _[_TG][_G]) ne[_TG] = de_TargetGrants(getArrayIfSingleItem(_[_TG][_G]), ee); + if (null != _[_TP]) ne[_TP] = expectString(_[_TP]); + if (null != _[_TOKF]) ne[_TOKF] = de_TargetObjectKeyFormat(_[_TOKF], ee); + return ne; +}, de_Metrics = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + if (null != _[_ETv]) ne[_ETv] = de_ReplicationTimeValue(_[_ETv], ee); + return ne; +}, de_MetricsAndOperator = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Tag) ne[_Tag] = []; else if (null != _[_Ta]) ne[_Tag] = de_TagSet(getArrayIfSingleItem(_[_Ta]), ee); + if (null != _[_APAc]) ne[_APAc] = expectString(_[_APAc]); + return ne; +}, de_MetricsConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if ("" === _.Filter) ; else if (null != _[_F]) ne[_F] = de_MetricsFilter(expectUnion(_[_F]), ee); + return ne; +}, de_MetricsConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_MetricsConfiguration(_, ee))), de_MetricsFilter = (_, ee) => { + if (null != _[_P]) return { + Prefix: expectString(_[_P]) + }; + if (null != _[_Ta]) return { + Tag: de_Tag(_[_Ta], ee) + }; + if (null != _[_APAc]) return { + AccessPointArn: expectString(_[_APAc]) + }; + if (null != _[_A]) return { + And: de_MetricsAndOperator(_[_A], ee) + }; else return { + $unknown: Object.entries(_)[0] + }; +}, de_MultipartUpload = (_, ee) => { + const ne = {}; + if (null != _[_UI]) ne[_UI] = expectString(_[_UI]); + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_Ini]) ne[_Ini] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_Ini])); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + if (null != _[_O]) ne[_O] = de_Owner(_[_O], ee); + if (null != _[_In]) ne[_In] = de_Initiator(_[_In], ee); + if (null != _[_CA]) ne[_CA] = expectString(_[_CA]); + return ne; +}, de_MultipartUploadList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_MultipartUpload(_, ee))), de_NoncurrentVersionExpiration = (_, ee) => { + const ne = {}; + if (null != _[_ND]) ne[_ND] = strictParseInt32(_[_ND]); + if (null != _[_NNV]) ne[_NNV] = strictParseInt32(_[_NNV]); + return ne; +}, de_NoncurrentVersionTransition = (_, ee) => { + const ne = {}; + if (null != _[_ND]) ne[_ND] = strictParseInt32(_[_ND]); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + if (null != _[_NNV]) ne[_NNV] = strictParseInt32(_[_NNV]); + return ne; +}, de_NoncurrentVersionTransitionList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_NoncurrentVersionTransition(_, ee))), de_NotificationConfigurationFilter = (_, ee) => { + const ne = {}; + if (null != _[_SKe]) ne[_K] = de_S3KeyFilter(_[_SKe], ee); + return ne; +}, de__Object = (_, ee) => { + const ne = {}; + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + if (null != _[_ETa]) ne[_ETa] = expectString(_[_ETa]); + if ("" === _.ChecksumAlgorithm) ne[_CA] = []; else if (null != _[_CA]) ne[_CA] = de_ChecksumAlgorithmList(getArrayIfSingleItem(_[_CA]), ee); + if (null != _[_Si]) ne[_Si] = strictParseLong(_[_Si]); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + if (null != _[_O]) ne[_O] = de_Owner(_[_O], ee); + if (null != _[_RSe]) ne[_RSe] = de_RestoreStatus(_[_RSe], ee); + return ne; +}, de_ObjectList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de__Object(_, ee))), de_ObjectLockConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_OLE]) ne[_OLE] = expectString(_[_OLE]); + if (null != _[_Ru]) ne[_Ru] = de_ObjectLockRule(_[_Ru], ee); + return ne; +}, de_ObjectLockLegalHold = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + return ne; +}, de_ObjectLockRetention = (_, ee) => { + const ne = {}; + if (null != _[_Mo]) ne[_Mo] = expectString(_[_Mo]); + if (null != _[_RUD]) ne[_RUD] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_RUD])); + return ne; +}, de_ObjectLockRule = (_, ee) => { + const ne = {}; + if (null != _[_DRe]) ne[_DRe] = de_DefaultRetention(_[_DRe], ee); + return ne; +}, de_ObjectPart = (_, ee) => { + const ne = {}; + if (null != _[_PN]) ne[_PN] = strictParseInt32(_[_PN]); + if (null != _[_Si]) ne[_Si] = strictParseLong(_[_Si]); + if (null != _[_CCRC]) ne[_CCRC] = expectString(_[_CCRC]); + if (null != _[_CCRCC]) ne[_CCRCC] = expectString(_[_CCRCC]); + if (null != _[_CSHA]) ne[_CSHA] = expectString(_[_CSHA]); + if (null != _[_CSHAh]) ne[_CSHAh] = expectString(_[_CSHAh]); + return ne; +}, de_ObjectVersion = (_, ee) => { + const ne = {}; + if (null != _[_ETa]) ne[_ETa] = expectString(_[_ETa]); + if ("" === _.ChecksumAlgorithm) ne[_CA] = []; else if (null != _[_CA]) ne[_CA] = de_ChecksumAlgorithmList(getArrayIfSingleItem(_[_CA]), ee); + if (null != _[_Si]) ne[_Si] = strictParseLong(_[_Si]); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_VI]) ne[_VI] = expectString(_[_VI]); + if (null != _[_IL]) ne[_IL] = parseBoolean(_[_IL]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + if (null != _[_O]) ne[_O] = de_Owner(_[_O], ee); + if (null != _[_RSe]) ne[_RSe] = de_RestoreStatus(_[_RSe], ee); + return ne; +}, de_ObjectVersionList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_ObjectVersion(_, ee))), de_Owner = (_, ee) => { + const ne = {}; + if (null != _[_DN]) ne[_DN] = expectString(_[_DN]); + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + return ne; +}, de_OwnershipControls = (_, ee) => { + const ne = {}; + if ("" === _.Rule) ne[_Rul] = []; else if (null != _[_Ru]) ne[_Rul] = de_OwnershipControlsRules(getArrayIfSingleItem(_[_Ru]), ee); + return ne; +}, de_OwnershipControlsRule = (_, ee) => { + const ne = {}; + if (null != _[_OO]) ne[_OO] = expectString(_[_OO]); + return ne; +}, de_OwnershipControlsRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_OwnershipControlsRule(_, ee))), de_Part = (_, ee) => { + const ne = {}; + if (null != _[_PN]) ne[_PN] = strictParseInt32(_[_PN]); + if (null != _[_LM]) ne[_LM] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_LM])); + if (null != _[_ETa]) ne[_ETa] = expectString(_[_ETa]); + if (null != _[_Si]) ne[_Si] = strictParseLong(_[_Si]); + if (null != _[_CCRC]) ne[_CCRC] = expectString(_[_CCRC]); + if (null != _[_CCRCC]) ne[_CCRCC] = expectString(_[_CCRCC]); + if (null != _[_CSHA]) ne[_CSHA] = expectString(_[_CSHA]); + if (null != _[_CSHAh]) ne[_CSHAh] = expectString(_[_CSHAh]); + return ne; +}, de_PartitionedPrefix = (_, ee) => { + const ne = {}; + if (null != _[_PDS]) ne[_PDS] = expectString(_[_PDS]); + return ne; +}, de_Parts = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Part(_, ee))), de_PartsList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_ObjectPart(_, ee))), de_PolicyStatus = (_, ee) => { + const ne = {}; + if (null != _[_IP]) ne[_IP] = parseBoolean(_[_IP]); + return ne; +}, de_Progress = (_, ee) => { + const ne = {}; + if (null != _[_BS]) ne[_BS] = strictParseLong(_[_BS]); + if (null != _[_BP]) ne[_BP] = strictParseLong(_[_BP]); + if (null != _[_BRy]) ne[_BRy] = strictParseLong(_[_BRy]); + return ne; +}, de_PublicAccessBlockConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_BPA]) ne[_BPA] = parseBoolean(_[_BPA]); + if (null != _[_IPA]) ne[_IPA] = parseBoolean(_[_IPA]); + if (null != _[_BPP]) ne[_BPP] = parseBoolean(_[_BPP]); + if (null != _[_RPB]) ne[_RPB] = parseBoolean(_[_RPB]); + return ne; +}, de_QueueConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if (null != _[_Qu]) ne[_QA] = expectString(_[_Qu]); + if ("" === _.Event) ne[_Eve] = []; else if (null != _[_Ev]) ne[_Eve] = de_EventList(getArrayIfSingleItem(_[_Ev]), ee); + if (null != _[_F]) ne[_F] = de_NotificationConfigurationFilter(_[_F], ee); + return ne; +}, de_QueueConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_QueueConfiguration(_, ee))), de_Redirect = (_, ee) => { + const ne = {}; + if (null != _[_HN]) ne[_HN] = expectString(_[_HN]); + if (null != _[_HRC]) ne[_HRC] = expectString(_[_HRC]); + if (null != _[_Pr]) ne[_Pr] = expectString(_[_Pr]); + if (null != _[_RKPW]) ne[_RKPW] = expectString(_[_RKPW]); + if (null != _[_RKW]) ne[_RKW] = expectString(_[_RKW]); + return ne; +}, de_RedirectAllRequestsTo = (_, ee) => { + const ne = {}; + if (null != _[_HN]) ne[_HN] = expectString(_[_HN]); + if (null != _[_Pr]) ne[_Pr] = expectString(_[_Pr]); + return ne; +}, de_ReplicaModifications = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + return ne; +}, de_ReplicationConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_Ro]) ne[_Ro] = expectString(_[_Ro]); + if ("" === _.Rule) ne[_Rul] = []; else if (null != _[_Ru]) ne[_Rul] = de_ReplicationRules(getArrayIfSingleItem(_[_Ru]), ee); + return ne; +}, de_ReplicationRule = (_, ee) => { + const ne = {}; + if (null != _[_ID_]) ne[_ID_] = expectString(_[_ID_]); + if (null != _[_Pri]) ne[_Pri] = strictParseInt32(_[_Pri]); + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Filter) ; else if (null != _[_F]) ne[_F] = de_ReplicationRuleFilter(expectUnion(_[_F]), ee); + if (null != _[_S]) ne[_S] = expectString(_[_S]); + if (null != _[_SSC]) ne[_SSC] = de_SourceSelectionCriteria(_[_SSC], ee); + if (null != _[_EOR]) ne[_EOR] = de_ExistingObjectReplication(_[_EOR], ee); + if (null != _[_Des]) ne[_Des] = de_Destination(_[_Des], ee); + if (null != _[_DMR]) ne[_DMR] = de_DeleteMarkerReplication(_[_DMR], ee); + return ne; +}, de_ReplicationRuleAndOperator = (_, ee) => { + const ne = {}; + if (null != _[_P]) ne[_P] = expectString(_[_P]); + if ("" === _.Tag) ne[_Tag] = []; else if (null != _[_Ta]) ne[_Tag] = de_TagSet(getArrayIfSingleItem(_[_Ta]), ee); + return ne; +}, de_ReplicationRuleFilter = (_, ee) => { + if (null != _[_P]) return { + Prefix: expectString(_[_P]) + }; + if (null != _[_Ta]) return { + Tag: de_Tag(_[_Ta], ee) + }; + if (null != _[_A]) return { + And: de_ReplicationRuleAndOperator(_[_A], ee) + }; else return { + $unknown: Object.entries(_)[0] + }; +}, de_ReplicationRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_ReplicationRule(_, ee))), de_ReplicationTime = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + if (null != _[_Tim]) ne[_Tim] = de_ReplicationTimeValue(_[_Tim], ee); + return ne; +}, de_ReplicationTimeValue = (_, ee) => { + const ne = {}; + if (null != _[_Mi]) ne[_Mi] = strictParseInt32(_[_Mi]); + return ne; +}, de_RestoreStatus = (_, ee) => { + const ne = {}; + if (null != _[_IRIP]) ne[_IRIP] = parseBoolean(_[_IRIP]); + if (null != _[_RED]) ne[_RED] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_RED])); + return ne; +}, de_RoutingRule = (_, ee) => { + const ne = {}; + if (null != _[_Con]) ne[_Con] = de_Condition(_[_Con], ee); + if (null != _[_Red]) ne[_Red] = de_Redirect(_[_Red], ee); + return ne; +}, de_RoutingRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_RoutingRule(_, ee))), de_S3KeyFilter = (_, ee) => { + const ne = {}; + if ("" === _.FilterRule) ne[_FRi] = []; else if (null != _[_FR]) ne[_FRi] = de_FilterRuleList(getArrayIfSingleItem(_[_FR]), ee); + return ne; +}, de_ServerSideEncryptionByDefault = (_, ee) => { + const ne = {}; + if (null != _[_SSEA]) ne[_SSEA] = expectString(_[_SSEA]); + if (null != _[_KMSMKID]) ne[_KMSMKID] = expectString(_[_KMSMKID]); + return ne; +}, de_ServerSideEncryptionConfiguration = (_, ee) => { + const ne = {}; + if ("" === _.Rule) ne[_Rul] = []; else if (null != _[_Ru]) ne[_Rul] = de_ServerSideEncryptionRules(getArrayIfSingleItem(_[_Ru]), ee); + return ne; +}, de_ServerSideEncryptionRule = (_, ee) => { + const ne = {}; + if (null != _[_ASSEBD]) ne[_ASSEBD] = de_ServerSideEncryptionByDefault(_[_ASSEBD], ee); + if (null != _[_BKE]) ne[_BKE] = parseBoolean(_[_BKE]); + return ne; +}, de_ServerSideEncryptionRules = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_ServerSideEncryptionRule(_, ee))), de_SessionCredentials = (_, ee) => { + const ne = {}; + if (null != _[_AKI]) ne[_AKI] = expectString(_[_AKI]); + if (null != _[_SAK]) ne[_SAK] = expectString(_[_SAK]); + if (null != _[_ST]) ne[_ST] = expectString(_[_ST]); + if (null != _[_Exp]) ne[_Exp] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_Exp])); + return ne; +}, de_SimplePrefix = (_, ee) => ({}), de_SourceSelectionCriteria = (_, ee) => { + const ne = {}; + if (null != _[_SKEO]) ne[_SKEO] = de_SseKmsEncryptedObjects(_[_SKEO], ee); + if (null != _[_RM]) ne[_RM] = de_ReplicaModifications(_[_RM], ee); + return ne; +}, de_SSEKMS = (_, ee) => { + const ne = {}; + if (null != _[_KI]) ne[_KI] = expectString(_[_KI]); + return ne; +}, de_SseKmsEncryptedObjects = (_, ee) => { + const ne = {}; + if (null != _[_S]) ne[_S] = expectString(_[_S]); + return ne; +}, de_SSES3 = (_, ee) => ({}), de_Stats = (_, ee) => { + const ne = {}; + if (null != _[_BS]) ne[_BS] = strictParseLong(_[_BS]); + if (null != _[_BP]) ne[_BP] = strictParseLong(_[_BP]); + if (null != _[_BRy]) ne[_BRy] = strictParseLong(_[_BRy]); + return ne; +}, de_StorageClassAnalysis = (_, ee) => { + const ne = {}; + if (null != _[_DE]) ne[_DE] = de_StorageClassAnalysisDataExport(_[_DE], ee); + return ne; +}, de_StorageClassAnalysisDataExport = (_, ee) => { + const ne = {}; + if (null != _[_OSV]) ne[_OSV] = expectString(_[_OSV]); + if (null != _[_Des]) ne[_Des] = de_AnalyticsExportDestination(_[_Des], ee); + return ne; +}, de_Tag = (_, ee) => { + const ne = {}; + if (null != _[_K]) ne[_K] = expectString(_[_K]); + if (null != _[_Va]) ne[_Va] = expectString(_[_Va]); + return ne; +}, de_TagSet = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Tag(_, ee))), de_TargetGrant = (_, ee) => { + const ne = {}; + if (null != _[_Gra]) ne[_Gra] = de_Grantee(_[_Gra], ee); + if (null != _[_Pe]) ne[_Pe] = expectString(_[_Pe]); + return ne; +}, de_TargetGrants = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_TargetGrant(_, ee))), de_TargetObjectKeyFormat = (_, ee) => { + const ne = {}; + if (null != _[_SPi]) ne[_SPi] = de_SimplePrefix(_[_SPi], ee); + if (null != _[_PP]) ne[_PP] = de_PartitionedPrefix(_[_PP], ee); + return ne; +}, de_Tiering = (_, ee) => { + const ne = {}; + if (null != _[_Da]) ne[_Da] = strictParseInt32(_[_Da]); + if (null != _[_AT]) ne[_AT] = expectString(_[_AT]); + return ne; +}, de_TieringList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Tiering(_, ee))), de_TopicConfiguration = (_, ee) => { + const ne = {}; + if (null != _[_I]) ne[_I] = expectString(_[_I]); + if (null != _[_Top]) ne[_TA] = expectString(_[_Top]); + if ("" === _.Event) ne[_Eve] = []; else if (null != _[_Ev]) ne[_Eve] = de_EventList(getArrayIfSingleItem(_[_Ev]), ee); + if (null != _[_F]) ne[_F] = de_NotificationConfigurationFilter(_[_F], ee); + return ne; +}, de_TopicConfigurationList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_TopicConfiguration(_, ee))), de_Transition = (_, ee) => { + const ne = {}; + if (null != _[_Dat]) ne[_Dat] = expectNonNull(parseRfc3339DateTimeWithOffset(_[_Dat])); + if (null != _[_Da]) ne[_Da] = strictParseInt32(_[_Da]); + if (null != _[_SC]) ne[_SC] = expectString(_[_SC]); + return ne; +}, de_TransitionList = (_, ee) => (_ || []).filter((_ => null != _)).map((_ => de_Transition(_, ee))), deserializeMetadata2 = _ => { + var ee, ne; + return { + httpStatusCode: _.statusCode, + requestId: null != (ne = null != (ee = _.headers["x-amzn-requestid"]) ? ee : _.headers["x-amzn-request-id"]) ? ne : _.headers["x-amz-request-id"], + extendedRequestId: _.headers["x-amz-id-2"], + cfId: _.headers["x-amz-cf-id"] + }; +}, collectBodyString3 = (_, ee) => collectBody(_, ee).then((_ => ee.utf8Encoder(_))), isSerializableHeaderValue = _ => !(null == _ || "" === _ || Object.getOwnPropertyNames(_).includes("length") && 0 == _.length || Object.getOwnPropertyNames(_).includes("size") && 0 == _.size), _A = "And", _AAO = "AnalyticsAndOperator", _AC = "AnalyticsConfiguration", _ACL = "ACL", _ACLc = "AccessControlList", _ACLn = "AnalyticsConfigurationList", _ACP = "AccessControlPolicy", _ACT = "AccessControlTranslation", _ACc = "AccelerateConfiguration", _AD = "AbortDate", _AED = "AnalyticsExportDestination", _AF = "AnalyticsFilter", _AH = "AllowedHeader", _AHl = "AllowedHeaders", _AI = "AnalyticsId", _AIMU = "AbortIncompleteMultipartUpload", _AIc = "AccountId", _AKI = "AccessKeyId", _AM = "AllowedMethod", _AMl = "AllowedMethods", _AO = "AllowedOrigin", _AOl = "AllowedOrigins", _APA = "AccessPointAlias", _APAc = "AccessPointArn", _AQRD = "AllowQuotedRecordDelimiter", _AR = "AcceptRanges", _ARI = "AbortRuleId", _AS = "ArchiveStatus", _ASBD = "AnalyticsS3BucketDestination", _ASEFF = "AnalyticsS3ExportFileFormat", _ASSEBD = "ApplyServerSideEncryptionByDefault", _AT = "AccessTier", _Ac = "Account", _B = "Bucket", _BAI = "BucketAccountId", _BAS = "BucketAccelerateStatus", _BGR = "BypassGovernanceRetention", _BI = "BucketInfo", _BKE = "BucketKeyEnabled", _BLC = "BucketLifecycleConfiguration", _BLCu = "BucketLocationConstraint", _BLN = "BucketLocationName", _BLP = "BucketLogsPermission", _BLS = "BucketLoggingStatus", _BLT = "BucketLocationType", _BN = "BucketName", _BP = "BytesProcessed", _BPA = "BlockPublicAcls", _BPP = "BlockPublicPolicy", _BR = "BucketRegion", _BRy = "BytesReturned", _BS = "BytesScanned", _BT = "BucketType", _BVS = "BucketVersioningStatus", _Bu = "Buckets", _C = "Credentials", _CA = "ChecksumAlgorithm", _CACL = "CannedACL", _CBC = "CreateBucketConfiguration", _CC = "CacheControl", _CCRC = "ChecksumCRC32", _CCRCC = "ChecksumCRC32C", _CD = "ContentDisposition", _CDr = "CreationDate", _CE = "ContentEncoding", _CF = "CloudFunction", _CFC = "CloudFunctionConfiguration", _CL = "ContentLanguage", _CLo = "ContentLength", _CM = "ChecksumMode", _CMD = "ContentMD5", _CMU = "CompletedMultipartUpload", _CORSC = "CORSConfiguration", _CORSR = "CORSRule", _CORSRu = "CORSRules", _CP = "CommonPrefixes", _CPo = "CompletedPart", _CR = "ContentRange", _CRSBA = "ConfirmRemoveSelfBucketAccess", _CS = "CopySource", _CSHA = "ChecksumSHA1", _CSHAh = "ChecksumSHA256", _CSIM = "CopySourceIfMatch", _CSIMS = "CopySourceIfModifiedSince", _CSINM = "CopySourceIfNoneMatch", _CSIUS = "CopySourceIfUnmodifiedSince", _CSR = "CopySourceRange", _CSSSECA = "CopySourceSSECustomerAlgorithm", _CSSSECK = "CopySourceSSECustomerKey", _CSSSECKMD = "CopySourceSSECustomerKeyMD5", _CSV = "CSV", _CSVI = "CopySourceVersionId", _CSVIn = "CSVInput", _CSVO = "CSVOutput", _CT = "ContentType", _CTo = "ContinuationToken", _CTom = "CompressionType", _Ch = "Checksum", _Co = "Contents", _Cod = "Code", _Com = "Comments", _Con = "Condition", _D = "Delimiter", _DAI = "DaysAfterInitiation", _DE = "DataExport", _DM = "DeleteMarker", _DMR = "DeleteMarkerReplication", _DMRS = "DeleteMarkerReplicationStatus", _DMVI = "DeleteMarkerVersionId", _DMe = "DeleteMarkers", _DN = "DisplayName", _DR = "DataRedundancy", _DRe = "DefaultRetention", _Da = "Days", _Dat = "Date", _De = "Deleted", _Del = "Delete", _Des = "Destination", _Desc = "Description", _E = "Expires", _EA = "EmailAddress", _EBC = "EventBridgeConfiguration", _EBO = "ExpectedBucketOwner", _EC = "ErrorCode", _ECn = "EncryptionConfiguration", _ED = "ErrorDocument", _EH = "ExposeHeaders", _EHx = "ExposeHeader", _EM = "ErrorMessage", _EODM = "ExpiredObjectDeleteMarker", _EOR = "ExistingObjectReplication", _EORS = "ExistingObjectReplicationStatus", _ERP = "EnableRequestProgress", _ES = "ExpiresString", _ESBO = "ExpectedSourceBucketOwner", _ESx = "ExpirationStatus", _ET = "EncodingType", _ETa = "ETag", _ETn = "EncryptionType", _ETv = "EventThreshold", _ETx = "ExpressionType", _En = "Encryption", _Ena = "Enabled", _End = "End", _Er = "Error", _Err = "Errors", _Ev = "Event", _Eve = "Events", _Ex = "Expression", _Exp = "Expiration", _F = "Filter", _FD = "FieldDelimiter", _FHI = "FileHeaderInfo", _FO = "FetchOwner", _FR = "FilterRule", _FRN = "FilterRuleName", _FRV = "FilterRuleValue", _FRi = "FilterRules", _Fi = "Field", _Fo = "Format", _Fr = "Frequency", _G = "Grant", _GFC = "GrantFullControl", _GJP = "GlacierJobParameters", _GR = "GrantRead", _GRACP = "GrantReadACP", _GW = "GrantWrite", _GWACP = "GrantWriteACP", _Gr = "Grants", _Gra = "Grantee", _HECRE = "HttpErrorCodeReturnedEquals", _HN = "HostName", _HRC = "HttpRedirectCode", _I = "Id", _IC = "InventoryConfiguration", _ICL = "InventoryConfigurationList", _ID = "IndexDocument", _ID_ = "ID", _IDn = "InventoryDestination", _IE = "IsEnabled", _IEn = "InventoryEncryption", _IF = "InventoryFilter", _IFn = "InventoryFormat", _IFnv = "InventoryFrequency", _II = "InventoryId", _IIOV = "InventoryIncludedObjectVersions", _IL = "IsLatest", _IM = "IfMatch", _IMS = "IfModifiedSince", _INM = "IfNoneMatch", _IOF = "InventoryOptionalField", _IOV = "IncludedObjectVersions", _IP = "IsPublic", _IPA = "IgnorePublicAcls", _IRIP = "IsRestoreInProgress", _IS = "InputSerialization", _ISBD = "InventoryS3BucketDestination", _ISn = "InventorySchedule", _IT = "IsTruncated", _ITAO = "IntelligentTieringAndOperator", _ITAT = "IntelligentTieringAccessTier", _ITC = "IntelligentTieringConfiguration", _ITCL = "IntelligentTieringConfigurationList", _ITD = "IntelligentTieringDays", _ITF = "IntelligentTieringFilter", _ITI = "IntelligentTieringId", _ITS = "IntelligentTieringStatus", _IUS = "IfUnmodifiedSince", _In = "Initiator", _Ini = "Initiated", _JSON = "JSON", _JSONI = "JSONInput", _JSONO = "JSONOutput", _JSONT = "JSONType", _K = "Key", _KC = "KeyCount", _KI = "KeyId", _KM = "KeyMarker", _KMSC = "KMSContext", _KMSKI = "KMSKeyId", _KMSMKID = "KMSMasterKeyID", _KPE = "KeyPrefixEquals", _L = "Location", _LC = "LocationConstraint", _LE = "LoggingEnabled", _LEi = "LifecycleExpiration", _LFA = "LambdaFunctionArn", _LFC = "LambdaFunctionConfigurations", _LFCa = "LambdaFunctionConfiguration", _LI = "LocationInfo", _LM = "LastModified", _LNAS = "LocationNameAsString", _LP = "LocationPrefix", _LR = "LifecycleRule", _LRAO = "LifecycleRuleAndOperator", _LRF = "LifecycleRuleFilter", _LT = "LocationType", _M = "Marker", _MAO = "MetricsAndOperator", _MAS = "MaxAgeSeconds", _MC = "MetricsConfiguration", _MCL = "MetricsConfigurationList", _MD = "MetadataDirective", _MDB = "MaxDirectoryBuckets", _MDf = "MfaDelete", _ME = "MetadataEntry", _MF = "MetricsFilter", _MFA = "MFA", _MFAD = "MFADelete", _MI = "MetricsId", _MK = "MaxKeys", _MKe = "MetadataKey", _MM = "MissingMeta", _MP = "MaxParts", _MS = "MetricsStatus", _MU = "MaxUploads", _MV = "MetadataValue", _Me = "Metrics", _Mes = "Message", _Mi = "Minutes", _Mo = "Mode", _N = "Name", _NC = "NotificationConfiguration", _NCF = "NotificationConfigurationFilter", _NCT = "NextContinuationToken", _ND = "NoncurrentDays", _NI = "NotificationId", _NKM = "NextKeyMarker", _NM = "NextMarker", _NNV = "NewerNoncurrentVersions", _NPNM = "NextPartNumberMarker", _NUIM = "NextUploadIdMarker", _NVE = "NoncurrentVersionExpiration", _NVIM = "NextVersionIdMarker", _NVT = "NoncurrentVersionTransitions", _NVTo = "NoncurrentVersionTransition", _O = "Owner", _OA = "ObjectAttributes", _OC = "OwnershipControls", _OCACL = "ObjectCannedACL", _OCR = "OwnershipControlsRule", _OF = "OptionalFields", _OI = "ObjectIdentifier", _OK = "ObjectKey", _OL = "OutputLocation", _OLC = "ObjectLockConfiguration", _OLE = "ObjectLockEnabled", _OLEFB = "ObjectLockEnabledForBucket", _OLLH = "ObjectLockLegalHold", _OLLHS = "ObjectLockLegalHoldStatus", _OLM = "ObjectLockMode", _OLR = "ObjectLockRetention", _OLRM = "ObjectLockRetentionMode", _OLRUD = "ObjectLockRetainUntilDate", _OLRb = "ObjectLockRule", _OO = "ObjectOwnership", _OOA = "OptionalObjectAttributes", _OOw = "OwnerOverride", _OP = "ObjectParts", _OS = "OutputSerialization", _OSGT = "ObjectSizeGreaterThan", _OSGTB = "ObjectSizeGreaterThanBytes", _OSLT = "ObjectSizeLessThan", _OSLTB = "ObjectSizeLessThanBytes", _OSV = "OutputSchemaVersion", _OSb = "ObjectSize", _OVI = "ObjectVersionId", _Ob = "Objects", _P = "Prefix", _PABC = "PublicAccessBlockConfiguration", _PC = "PartsCount", _PDS = "PartitionDateSource", _PI = "ParquetInput", _PN = "PartNumber", _PNM = "PartNumberMarker", _PP = "PartitionedPrefix", _Pa = "Payer", _Par = "Part", _Parq = "Parquet", _Part = "Parts", _Pe = "Permission", _Pr = "Protocol", _Pri = "Priority", _Q = "Quiet", _QA = "QueueArn", _QC = "QueueConfiguration", _QCu = "QueueConfigurations", _QCuo = "QuoteCharacter", _QEC = "QuoteEscapeCharacter", _QF = "QuoteFields", _Qu = "Queue", _R = "Range", _RART = "RedirectAllRequestsTo", _RC = "RequestCharged", _RCC = "ResponseCacheControl", _RCD = "ResponseContentDisposition", _RCE = "ResponseContentEncoding", _RCL = "ResponseContentLanguage", _RCT = "ResponseContentType", _RCe = "ReplicationConfiguration", _RD = "RecordDelimiter", _RE = "ResponseExpires", _RED = "RestoreExpiryDate", _RKKID = "ReplicaKmsKeyID", _RKPW = "ReplaceKeyPrefixWith", _RKW = "ReplaceKeyWith", _RM = "ReplicaModifications", _RMS = "ReplicaModificationsStatus", _ROP = "RestoreOutputPath", _RP = "RequestPayer", _RPB = "RestrictPublicBuckets", _RPC = "RequestPaymentConfiguration", _RPe = "RequestProgress", _RR = "RequestRoute", _RRAO = "ReplicationRuleAndOperator", _RRF = "ReplicationRuleFilter", _RRS = "ReplicationRuleStatus", _RRT = "RestoreRequestType", _RRe = "ReplicationRule", _RRes = "RestoreRequest", _RRo = "RoutingRules", _RRou = "RoutingRule", _RS = "ReplicationStatus", _RSe = "RestoreStatus", _RT = "RequestToken", _RTS = "ReplicationTimeStatus", _RTV = "ReplicationTimeValue", _RTe = "ReplicationTime", _RUD = "RetainUntilDate", _Re = "Restore", _Red = "Redirect", _Ro = "Role", _Ru = "Rule", _Rul = "Rules", _S = "Status", _SA = "StartAfter", _SAK = "SecretAccessKey", _SBD = "S3BucketDestination", _SC = "StorageClass", _SCA = "StorageClassAnalysis", _SCADE = "StorageClassAnalysisDataExport", _SCASV = "StorageClassAnalysisSchemaVersion", _SCt = "StatusCode", _SDV = "SkipDestinationValidation", _SK = "SSE-KMS", _SKEO = "SseKmsEncryptedObjects", _SKEOS = "SseKmsEncryptedObjectsStatus", _SKF = "S3KeyFilter", _SKe = "S3Key", _SL = "S3Location", _SM = "SessionMode", _SOCR = "SelectObjectContentRequest", _SP = "SelectParameters", _SPi = "SimplePrefix", _SR = "ScanRange", _SS = "SSE-S3", _SSC = "SourceSelectionCriteria", _SSE = "ServerSideEncryption", _SSEA = "SSEAlgorithm", _SSEBD = "ServerSideEncryptionByDefault", _SSEC = "ServerSideEncryptionConfiguration", _SSECA = "SSECustomerAlgorithm", _SSECK = "SSECustomerKey", _SSECKMD = "SSECustomerKeyMD5", _SSEKMS = "SSEKMS", _SSEKMSEC = "SSEKMSEncryptionContext", _SSEKMSKI = "SSEKMSKeyId", _SSER = "ServerSideEncryptionRule", _SSES = "SSES3", _ST = "SessionToken", _S_ = "S3", _Sc = "Schedule", _Se = "Setting", _Si = "Size", _St = "Start", _Su = "Suffix", _T = "Tagging", _TA = "TopicArn", _TB = "TargetBucket", _TC = "TagCount", _TCo = "TopicConfiguration", _TCop = "TopicConfigurations", _TD = "TaggingDirective", _TG = "TargetGrants", _TGa = "TargetGrant", _TOKF = "TargetObjectKeyFormat", _TP = "TargetPrefix", _TPC = "TotalPartsCount", _TS = "TagSet", _TSC = "TransitionStorageClass", _Ta = "Tag", _Tag = "Tags", _Ti = "Tier", _Tie = "Tierings", _Tier = "Tiering", _Tim = "Time", _To = "Token", _Top = "Topic", _Tr = "Transitions", _Tra = "Transition", _Ty = "Type", _U = "Upload", _UI = "UploadId", _UIM = "UploadIdMarker", _UM = "UserMetadata", _URI = "URI", _Up = "Uploads", _V = "Version", _VC = "VersionCount", _VCe = "VersioningConfiguration", _VI = "VersionId", _VIM = "VersionIdMarker", _Va = "Value", _Ve = "Versions", _WC = "WebsiteConfiguration", _WRL = "WebsiteRedirectLocation", _Y = "Years", _a4 = "analytics", _ac = "accelerate", _acl = "acl", _ar = "accept-ranges", _at = "attributes", _c = "cors", _cc = "cache-control", _cd = "content-disposition", _ce = "content-encoding", _cl = "content-language", _cl_ = "content-length", _cm = "content-md5", _cr = "content-range", _ct = "content-type", _ct_ = "continuation-token", _d = "delete", _de = "delimiter", _e = "expires", _en = "encryption", _et = "encoding-type", _eta = "etag", _ex = "expiresstring", _fo = "fetch-owner", _i = "id", _im = "if-match", _ims = "if-modified-since", _in = "inventory", _inm = "if-none-match", _it = "intelligent-tiering", _ius = "if-unmodified-since", _km = "key-marker", _l = "lifecycle", _lh = "legal-hold", _lm = "last-modified", _lo = "location", _log = "logging", _lt = "list-type", _m = "metrics", _ma = "marker", _mdb = "max-directory-buckets", _me = "member", _mk = "max-keys", _mp = "max-parts", _mu = "max-uploads", _n = "notification", _oC = "ownershipControls", _ol = "object-lock", _p = "policy", _pAB = "publicAccessBlock", _pN = "partNumber", _pS = "policyStatus", _pnm = "part-number-marker", _pr = "prefix", _r = "replication", _rP = "requestPayment", _ra = "range", _rcc = "response-cache-control", _rcd = "response-content-disposition", _rce = "response-content-encoding", _rcl = "response-content-language", _rct = "response-content-type", _re = "response-expires", _res = "restore", _ret = "retention", _s = "session", _sa = "start-after", _se = "select", _st = "select-type", _t = "tagging", _to = "torrent", _u = "uploads", _uI = "uploadId", _uim = "upload-id-marker", _v = "versioning", _vI = "versionId", _ve = '', _ver = "versions", _vim = "version-id-marker", _w = "website", _x = "xsi:type", _xaa = "x-amz-acl", _xaad = "x-amz-abort-date", _xaapa = "x-amz-access-point-alias", _xaari = "x-amz-abort-rule-id", _xaas = "x-amz-archive-status", _xabgr = "x-amz-bypass-governance-retention", _xabln = "x-amz-bucket-location-name", _xablt = "x-amz-bucket-location-type", _xabole = "x-amz-bucket-object-lock-enabled", _xabolt = "x-amz-bucket-object-lock-token", _xabr = "x-amz-bucket-region", _xaca = "x-amz-checksum-algorithm", _xacc = "x-amz-checksum-crc32", _xacc_ = "x-amz-checksum-crc32c", _xacm = "x-amz-checksum-mode", _xacrsba = "x-amz-confirm-remove-self-bucket-access", _xacs = "x-amz-checksum-sha1", _xacs_ = "x-amz-checksum-sha256", _xacs__ = "x-amz-copy-source", _xacsim = "x-amz-copy-source-if-match", _xacsims = "x-amz-copy-source-if-modified-since", _xacsinm = "x-amz-copy-source-if-none-match", _xacsius = "x-amz-copy-source-if-unmodified-since", _xacsm = "x-amz-create-session-mode", _xacsr = "x-amz-copy-source-range", _xacssseca = "x-amz-copy-source-server-side-encryption-customer-algorithm", _xacssseck = "x-amz-copy-source-server-side-encryption-customer-key", _xacssseckm = "x-amz-copy-source-server-side-encryption-customer-key-md5", _xacsvi = "x-amz-copy-source-version-id", _xadm = "x-amz-delete-marker", _xae = "x-amz-expiration", _xaebo = "x-amz-expected-bucket-owner", _xafec = "x-amz-fwd-error-code", _xafem = "x-amz-fwd-error-message", _xafhar = "x-amz-fwd-header-accept-ranges", _xafhcc = "x-amz-fwd-header-cache-control", _xafhcd = "x-amz-fwd-header-content-disposition", _xafhce = "x-amz-fwd-header-content-encoding", _xafhcl = "x-amz-fwd-header-content-language", _xafhcr = "x-amz-fwd-header-content-range", _xafhct = "x-amz-fwd-header-content-type", _xafhe = "x-amz-fwd-header-etag", _xafhe_ = "x-amz-fwd-header-expires", _xafhlm = "x-amz-fwd-header-last-modified", _xafhxacc = "x-amz-fwd-header-x-amz-checksum-crc32", _xafhxacc_ = "x-amz-fwd-header-x-amz-checksum-crc32c", _xafhxacs = "x-amz-fwd-header-x-amz-checksum-sha1", _xafhxacs_ = "x-amz-fwd-header-x-amz-checksum-sha256", _xafhxadm = "x-amz-fwd-header-x-amz-delete-marker", _xafhxae = "x-amz-fwd-header-x-amz-expiration", _xafhxamm = "x-amz-fwd-header-x-amz-missing-meta", _xafhxampc = "x-amz-fwd-header-x-amz-mp-parts-count", _xafhxaollh = "x-amz-fwd-header-x-amz-object-lock-legal-hold", _xafhxaolm = "x-amz-fwd-header-x-amz-object-lock-mode", _xafhxaolrud = "x-amz-fwd-header-x-amz-object-lock-retain-until-date", _xafhxar = "x-amz-fwd-header-x-amz-restore", _xafhxarc = "x-amz-fwd-header-x-amz-request-charged", _xafhxars = "x-amz-fwd-header-x-amz-replication-status", _xafhxasc = "x-amz-fwd-header-x-amz-storage-class", _xafhxasse = "x-amz-fwd-header-x-amz-server-side-encryption", _xafhxasseakki = "x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id", _xafhxassebke = "x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled", _xafhxasseca = "x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm", _xafhxasseckm = "x-amz-fwd-header-x-amz-server-side-encryption-customer-key-md5", _xafhxatc = "x-amz-fwd-header-x-amz-tagging-count", _xafhxavi = "x-amz-fwd-header-x-amz-version-id", _xafs = "x-amz-fwd-status", _xagfc = "x-amz-grant-full-control", _xagr = "x-amz-grant-read", _xagra = "x-amz-grant-read-acp", _xagw = "x-amz-grant-write", _xagwa = "x-amz-grant-write-acp", _xam = "x-amz-mfa", _xamd = "x-amz-metadata-directive", _xamm = "x-amz-missing-meta", _xamp = "x-amz-max-parts", _xampc = "x-amz-mp-parts-count", _xaoa = "x-amz-object-attributes", _xaollh = "x-amz-object-lock-legal-hold", _xaolm = "x-amz-object-lock-mode", _xaolrud = "x-amz-object-lock-retain-until-date", _xaoo = "x-amz-object-ownership", _xaooa = "x-amz-optional-object-attributes", _xapnm = "x-amz-part-number-marker", _xar = "x-amz-restore", _xarc = "x-amz-request-charged", _xarop = "x-amz-restore-output-path", _xarp = "x-amz-request-payer", _xarr = "x-amz-request-route", _xars = "x-amz-replication-status", _xart = "x-amz-request-token", _xasc = "x-amz-storage-class", _xasca = "x-amz-sdk-checksum-algorithm", _xasdv = "x-amz-skip-destination-validation", _xasebo = "x-amz-source-expected-bucket-owner", _xasse = "x-amz-server-side-encryption", _xasseakki = "x-amz-server-side-encryption-aws-kms-key-id", _xassebke = "x-amz-server-side-encryption-bucket-key-enabled", _xassec = "x-amz-server-side-encryption-context", _xasseca = "x-amz-server-side-encryption-customer-algorithm", _xasseck = "x-amz-server-side-encryption-customer-key", _xasseckm = "x-amz-server-side-encryption-customer-key-md5", _xat = "x-amz-tagging", _xatc = "x-amz-tagging-count", _xatd = "x-amz-tagging-directive", _xavi = "x-amz-version-id", _xawrl = "x-amz-website-redirect-location", _xi = "x-id", CreateSessionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + DisableS3ExpressSessionAuth: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "CreateSession", {}).n("S3Client", "CreateSessionCommand").f(void 0, CreateSessionOutputFilterSensitiveLog).ser(se_CreateSessionCommand).de(de_CreateSessionCommand).build()){}, package_default = { + name: "@aws-sdk/client-s3", + description: "AWS SDK for JavaScript S3 Client for Node.js, Browser and React Native", + version: "3.614.0", + scripts: { + build: "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'", + "build:cjs": "node ../../scripts/compilation/inline client-s3", + "build:es": "tsc -p tsconfig.es.json", + "build:include:deps": "lerna run --scope $npm_package_name --include-dependencies build", + "build:types": "tsc -p tsconfig.types.json", + "build:types:downlevel": "downlevel-dts dist-types dist-types/ts3.4", + clean: "rimraf ./dist-* && rimraf *.tsbuildinfo", + "extract:docs": "api-extractor run --local", + "generate:client": "node ../../scripts/generate-clients/single-service --solo s3", + test: "yarn test:unit", + "test:e2e": "yarn test:e2e:node && yarn test:e2e:browser", + "test:e2e:browser": "ts-mocha test/**/*.browser.ispec.ts && karma start karma.conf.js", + "test:e2e:node": "jest --c jest.config.e2e.js", + "test:unit": "ts-mocha test/unit/**/*.spec.ts" + }, + main: "./dist-cjs/index.js", + types: "./dist-types/index.d.ts", + module: "./dist-es/index.js", + sideEffects: false, + dependencies: { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.614.0", + "@aws-sdk/client-sts": "3.614.0", + "@aws-sdk/core": "3.614.0", + "@aws-sdk/credential-provider-node": "3.614.0", + "@aws-sdk/middleware-bucket-endpoint": "3.614.0", + "@aws-sdk/middleware-expect-continue": "3.609.0", + "@aws-sdk/middleware-flexible-checksums": "3.614.0", + "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.609.0", + "@aws-sdk/middleware-sdk-s3": "3.614.0", + "@aws-sdk/middleware-signing": "3.609.0", + "@aws-sdk/middleware-ssec": "3.609.0", + "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.2.6", + "@smithy/eventstream-serde-browser": "^3.0.4", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.4", + "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/hash-blob-browser": "^3.1.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/hash-stream-node": "^3.1.2", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/md5-js": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.3", + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.2", + "@smithy/protocol-http": "^4.0.3", + "@smithy/smithy-client": "^3.1.7", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.9", + "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", + tslib: "^2.6.2" + }, + devDependencies: { + "@aws-sdk/signature-v4-crt": "3.614.0", + "@tsconfig/node16": "16.1.3", + "@types/chai": "^4.2.11", + "@types/mocha": "^8.0.4", + "@types/node": "^16.18.96", + concurrently: "7.0.0", + "downlevel-dts": "0.10.1", + rimraf: "3.0.2", + typescript: "~4.9.5" + }, + engines: { + node: ">=16.0.0" + }, + typesVersions: { + "<4.0": { + "dist-types/*": [ "dist-types/ts3.4/*" ] + } + }, + files: [ "dist-*/**" ], + author: { + name: "AWS SDK for JavaScript Team", + url: "https://aws.amazon.com/javascript/" + }, + license: "Apache-2.0", + browser: { + "./dist-es/runtimeConfig": "./dist-es/runtimeConfig.browser" + }, + "react-native": { + "./dist-es/runtimeConfig": "./dist-es/runtimeConfig.native" + }, + homepage: "https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3", + repository: { + type: "git", + url: "https://github.com/aws/aws-sdk-js-v3.git", + directory: "clients/client-s3" + } +}, fromUtf82 = _ => (new TextEncoder).encode(_); + +function isEmptyData(_) { + if ("string" == typeof _) return 0 === _.length; else return 0 === _.byteLength; +} + +var SHA_1_HASH = { + name: "SHA-1" +}, SHA_1_HMAC_ALGO = { + name: "HMAC", + hash: SHA_1_HASH +}, EMPTY_DATA_SHA_1 = new Uint8Array([ 218, 57, 163, 238, 94, 107, 75, 13, 50, 85, 191, 239, 149, 96, 24, 144, 175, 216, 7, 9 ]), fallbackWindow = {}; + +function locateWindow() { + if ("undefined" != typeof window) return window; else if ("undefined" != typeof self) return self; + return fallbackWindow; +} + +var Sha1 = function() { + function Sha13(_) { + this.toHash = new Uint8Array(0); + if (void 0 !== _) { + this.key = new Promise((function(ee, ne) { + locateWindow().crypto.subtle.importKey("raw", convertToBuffer(_), SHA_1_HMAC_ALGO, false, [ "sign" ]).then(ee, ne); + })); + this.key.catch((function() {})); + } + } + Sha13.prototype.update = function(_) { + if (!isEmptyData(_)) { + var ee = convertToBuffer(_), ne = new Uint8Array(this.toHash.byteLength + ee.byteLength); + ne.set(this.toHash, 0); + ne.set(ee, this.toHash.byteLength); + this.toHash = ne; + } + }; + Sha13.prototype.digest = function() { + var _ = this; + if (this.key) return this.key.then((function(ee) { + return locateWindow().crypto.subtle.sign(SHA_1_HMAC_ALGO, ee, _.toHash).then((function(_) { + return new Uint8Array(_); + })); + })); + if (isEmptyData(this.toHash)) return Promise.resolve(EMPTY_DATA_SHA_1); else return Promise.resolve().then((function() { + return locateWindow().crypto.subtle.digest(SHA_1_HASH, _.toHash); + })).then((function(_) { + return Promise.resolve(new Uint8Array(_)); + })); + }; + Sha13.prototype.reset = function() { + this.toHash = new Uint8Array(0); + }; + return Sha13; +}(); + +function convertToBuffer(_) { + if ("string" == typeof _) return fromUtf82(_); + if (ArrayBuffer.isView(_)) return new Uint8Array(_.buffer, _.byteOffset, _.byteLength / Uint8Array.BYTES_PER_ELEMENT); else return new Uint8Array(_); +} + +function __awaiter(_, ee, ne, ie) { + return new (ne || (ne = Promise))((function(re, se) { + function fulfilled(_) { + try { + step(ie.next(_)); + } catch (_) { + se(_); + } + } + function rejected(_) { + try { + step(ie["throw"](_)); + } catch (_) { + se(_); + } + } + function step(_) { + _.done ? re(_.value) : function adopt(_) { + return _ instanceof ne ? _ : new ne((function(ee) { + ee(_); + })); + }(_.value).then(fulfilled, rejected); + } + step((ie = ie.apply(_, ee || [])).next()); + })); +} + +function __generator(_, ee) { + var ne, ie, re, se, oe = { + label: 0, + sent: function() { + if (1 & re[0]) throw re[1]; + return re[1]; + }, + trys: [], + ops: [] + }; + return se = { + next: verb(0), + throw: verb(1), + return: verb(2) + }, "function" == typeof Symbol && (se[Symbol.iterator] = function() { + return this; + }), se; + function verb(le) { + return function(ue) { + return function step(le) { + if (ne) throw new TypeError("Generator is already executing."); + for (;se && (se = 0, le[0] && (oe = 0)), oe; ) try { + if (ne = 1, ie && (re = 2 & le[0] ? ie["return"] : le[0] ? ie["throw"] || ((re = ie["return"]) && re.call(ie), + 0) : ie.next) && !(re = re.call(ie, le[1])).done) return re; + if (ie = 0, re) le = [ 2 & le[0], re.value ]; + switch (le[0]) { + case 0: + case 1: + re = le; + break; + + case 4: + oe.label++; + return { + value: le[1], + done: false + }; + + case 5: + oe.label++; + ie = le[1]; + le = [ 0 ]; + continue; + + case 7: + le = oe.ops.pop(); + oe.trys.pop(); + continue; + + default: + if (!(re = oe.trys, re = re.length > 0 && re[re.length - 1]) && (6 === le[0] || 2 === le[0])) { + oe = 0; + continue; + } + if (3 === le[0] && (!re || le[1] > re[0] && le[1] < re[3])) { + oe.label = le[1]; + break; + } + if (6 === le[0] && oe.label < re[1]) { + oe.label = re[1]; + re = le; + break; + } + if (re && oe.label < re[2]) { + oe.label = re[2]; + oe.ops.push(le); + break; + } + if (re[2]) oe.ops.pop(); + oe.trys.pop(); + continue; + } + le = ee.call(_, oe); + } catch (_) { + le = [ 6, _ ]; + ie = 0; + } finally { + ne = re = 0; + } + if (5 & le[0]) throw le[1]; + return { + value: le[0] ? le[1] : void 0, + done: true + }; + }([ le, ue ]); + }; + } +} + +function __values(_) { + var ee = "function" == typeof Symbol && Symbol.iterator, ne = ee && _[ee], ie = 0; + if (ne) return ne.call(_); + if (_ && "number" == typeof _.length) return { + next: function() { + if (_ && ie >= _.length) _ = void 0; + return { + value: _ && _[ie++], + done: !_ + }; + } + }; + throw new TypeError(ee ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +var subtleCryptoMethods = [ "decrypt", "digest", "encrypt", "exportKey", "generateKey", "importKey", "sign", "verify" ]; + +function supportsWebCrypto(_) { + if (supportsSecureRandom(_) && "object" == typeof _.crypto.subtle) return supportsSubtleCrypto(_.crypto.subtle); else return false; +} + +function supportsSecureRandom(_) { + if ("object" == typeof _ && "object" == typeof _.crypto) return "function" == typeof _.crypto.getRandomValues; else return false; +} + +function supportsSubtleCrypto(_) { + return _ && subtleCryptoMethods.every((function(ee) { + return "function" == typeof _[ee]; + })); +} + +var fromUtf83 = _ => (new TextEncoder).encode(_), fromUtf84 = "undefined" != typeof Buffer && Buffer.from ? function(_) { + return Buffer.from(_, "utf8"); +} : fromUtf83; + +function convertToBuffer2(_) { + if (_ instanceof Uint8Array) return _; + if ("string" == typeof _) return fromUtf84(_); + if (ArrayBuffer.isView(_)) return new Uint8Array(_.buffer, _.byteOffset, _.byteLength / Uint8Array.BYTES_PER_ELEMENT); else return new Uint8Array(_); +} + +function isEmptyData2(_) { + if ("string" == typeof _) return 0 === _.length; else return 0 === _.byteLength; +} + +function numToUint8(_) { + return new Uint8Array([ (4278190080 & _) >> 24, (16711680 & _) >> 16, (65280 & _) >> 8, 255 & _ ]); +} + +function uint32ArrayFrom(_) { + if (!Uint32Array.from) { + for (var ee = new Uint32Array(_.length), ne = 0; ne < _.length; ) { + ee[ne] = _[ne]; + ne += 1; + } + return ee; + } + return Uint32Array.from(_); +} + +var Sha12 = function() { + function Sha13(_) { + if (supportsWebCrypto(locateWindow())) this.hash = new Sha1(_); else throw new Error("SHA1 not supported"); + } + Sha13.prototype.update = function(_, ee) { + this.hash.update(convertToBuffer2(_)); + }; + Sha13.prototype.digest = function() { + return this.hash.digest(); + }; + Sha13.prototype.reset = function() { + this.hash.reset(); + }; + return Sha13; +}(), SHA_256_HASH = { + name: "SHA-256" +}, SHA_256_HMAC_ALGO = { + name: "HMAC", + hash: SHA_256_HASH +}, EMPTY_DATA_SHA_256 = new Uint8Array([ 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, 153, 111, 185, 36, 39, 174, 65, 228, 100, 155, 147, 76, 164, 149, 153, 27, 120, 82, 184, 85 ]), Sha256 = function() { + function Sha2564(_) { + this.toHash = new Uint8Array(0); + this.secret = _; + this.reset(); + } + Sha2564.prototype.update = function(_) { + if (!isEmptyData2(_)) { + var ee = convertToBuffer2(_), ne = new Uint8Array(this.toHash.byteLength + ee.byteLength); + ne.set(this.toHash, 0); + ne.set(ee, this.toHash.byteLength); + this.toHash = ne; + } + }; + Sha2564.prototype.digest = function() { + var _ = this; + if (this.key) return this.key.then((function(ee) { + return locateWindow().crypto.subtle.sign(SHA_256_HMAC_ALGO, ee, _.toHash).then((function(_) { + return new Uint8Array(_); + })); + })); + if (isEmptyData2(this.toHash)) return Promise.resolve(EMPTY_DATA_SHA_256); else return Promise.resolve().then((function() { + return locateWindow().crypto.subtle.digest(SHA_256_HASH, _.toHash); + })).then((function(_) { + return Promise.resolve(new Uint8Array(_)); + })); + }; + Sha2564.prototype.reset = function() { + var _ = this; + this.toHash = new Uint8Array(0); + if (this.secret && void 0 !== this.secret) { + this.key = new Promise((function(ee, ne) { + locateWindow().crypto.subtle.importKey("raw", convertToBuffer2(_.secret), SHA_256_HMAC_ALGO, false, [ "sign" ]).then(ee, ne); + })); + this.key.catch((function() {})); + } + }; + return Sha2564; +}(), BLOCK_SIZE = 64, DIGEST_LENGTH = 32, KEY = new Uint32Array([ 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 ]), INIT = [ 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225 ], MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1, RawSha256 = function() { + function RawSha2562() { + this.state = Int32Array.from(INIT); + this.temp = new Int32Array(64); + this.buffer = new Uint8Array(64); + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + } + RawSha2562.prototype.update = function(_) { + if (this.finished) throw new Error("Attempted to update an already finished hash."); + var ee = 0, ne = _.byteLength; + this.bytesHashed += ne; + if (8 * this.bytesHashed > MAX_HASHABLE_LENGTH) throw new Error("Cannot hash more than 2^53 - 1 bits"); + for (;ne > 0; ) { + this.buffer[this.bufferLength++] = _[ee++]; + ne--; + if (this.bufferLength === BLOCK_SIZE) { + this.hashBuffer(); + this.bufferLength = 0; + } + } + }; + RawSha2562.prototype.digest = function() { + if (!this.finished) { + var _ = 8 * this.bytesHashed, ee = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength), ne = this.bufferLength; + ee.setUint8(this.bufferLength++, 128); + if (ne % BLOCK_SIZE >= BLOCK_SIZE - 8) { + for (var ie = this.bufferLength; ie < BLOCK_SIZE; ie++) ee.setUint8(ie, 0); + this.hashBuffer(); + this.bufferLength = 0; + } + for (ie = this.bufferLength; ie < BLOCK_SIZE - 8; ie++) ee.setUint8(ie, 0); + ee.setUint32(BLOCK_SIZE - 8, Math.floor(_ / 4294967296), true); + ee.setUint32(BLOCK_SIZE - 4, _); + this.hashBuffer(); + this.finished = true; + } + var re = new Uint8Array(DIGEST_LENGTH); + for (ie = 0; ie < 8; ie++) { + re[4 * ie] = this.state[ie] >>> 24 & 255; + re[4 * ie + 1] = this.state[ie] >>> 16 & 255; + re[4 * ie + 2] = this.state[ie] >>> 8 & 255; + re[4 * ie + 3] = this.state[ie] >>> 0 & 255; + } + return re; + }; + RawSha2562.prototype.hashBuffer = function() { + for (var _ = this.buffer, ee = this.state, ne = ee[0], ie = ee[1], re = ee[2], se = ee[3], oe = ee[4], le = ee[5], ue = ee[6], de = ee[7], fe = 0; fe < BLOCK_SIZE; fe++) { + if (fe < 16) this.temp[fe] = (255 & _[4 * fe]) << 24 | (255 & _[4 * fe + 1]) << 16 | (255 & _[4 * fe + 2]) << 8 | 255 & _[4 * fe + 3]; else { + var he = this.temp[fe - 2], pe = (he >>> 17 | he << 15) ^ (he >>> 19 | he << 13) ^ he >>> 10, ge = ((he = this.temp[fe - 15]) >>> 7 | he << 25) ^ (he >>> 18 | he << 14) ^ he >>> 3; + this.temp[fe] = (pe + this.temp[fe - 7] | 0) + (ge + this.temp[fe - 16] | 0); + } + var me = (((oe >>> 6 | oe << 26) ^ (oe >>> 11 | oe << 21) ^ (oe >>> 25 | oe << 7)) + (oe & le ^ ~oe & ue) | 0) + (de + (KEY[fe] + this.temp[fe] | 0) | 0) | 0, ye = ((ne >>> 2 | ne << 30) ^ (ne >>> 13 | ne << 19) ^ (ne >>> 22 | ne << 10)) + (ne & ie ^ ne & re ^ ie & re) | 0; + de = ue; + ue = le; + le = oe; + oe = se + me | 0; + se = re; + re = ie; + ie = ne; + ne = me + ye | 0; + } + ee[0] += ne; + ee[1] += ie; + ee[2] += re; + ee[3] += se; + ee[4] += oe; + ee[5] += le; + ee[6] += ue; + ee[7] += de; + }; + return RawSha2562; +}(), Sha2562 = function() { + function Sha2564(_) { + this.secret = _; + this.hash = new RawSha256; + this.reset(); + } + Sha2564.prototype.update = function(_) { + if (!isEmptyData2(_) && !this.error) try { + this.hash.update(convertToBuffer2(_)); + } catch (_) { + this.error = _; + } + }; + Sha2564.prototype.digestSync = function() { + if (this.error) throw this.error; + if (this.outer) { + if (!this.outer.finished) this.outer.update(this.hash.digest()); + return this.outer.digest(); + } + return this.hash.digest(); + }; + Sha2564.prototype.digest = function() { + return __awaiter(this, void 0, void 0, (function() { + return __generator(this, (function(_) { + return [ 2, this.digestSync() ]; + })); + })); + }; + Sha2564.prototype.reset = function() { + this.hash = new RawSha256; + if (this.secret) { + this.outer = new RawSha256; + var _ = bufferFromSecret(this.secret), ee = new Uint8Array(BLOCK_SIZE); + ee.set(_); + for (var ne = 0; ne < BLOCK_SIZE; ne++) { + _[ne] ^= 54; + ee[ne] ^= 92; + } + this.hash.update(_); + this.outer.update(ee); + for (ne = 0; ne < _.byteLength; ne++) _[ne] = 0; + } + }; + return Sha2564; +}(); + +function bufferFromSecret(_) { + var ee = convertToBuffer2(_); + if (ee.byteLength > BLOCK_SIZE) { + var ne = new RawSha256; + ne.update(ee); + ee = ne.digest(); + } + var ie = new Uint8Array(BLOCK_SIZE); + ie.set(ee); + return ie; +} + +var Sha2563 = function() { + function Sha2564(_) { + if (supportsWebCrypto(locateWindow())) this.hash = new Sha256(_); else this.hash = new Sha2562(_); + } + Sha2564.prototype.update = function(_, ee) { + this.hash.update(convertToBuffer2(_)); + }; + Sha2564.prototype.digest = function() { + return this.hash.digest(); + }; + Sha2564.prototype.reset = function() { + this.hash.reset(); + }; + return Sha2564; +}(), import_bowser = __toESM(require_es5()), defaultUserAgent = ({serviceId: _, clientVersion: ee}) => async () => { + var ne, ie, re, se, oe, le, ue; + const de = "undefined" != typeof window && (null == (ne = null == window ? void 0 : window.navigator) ? void 0 : ne.userAgent) ? import_bowser.default.parse(window.navigator.userAgent) : void 0, fe = [ [ "aws-sdk-js", ee ], [ "ua", "2.0" ], [ `os/${(null == (ie = null == de ? void 0 : de.os) ? void 0 : ie.name) || "other"}`, null == (re = null == de ? void 0 : de.os) ? void 0 : re.version ], [ "lang/js" ], [ "md/browser", `${null != (oe = null == (se = null == de ? void 0 : de.browser) ? void 0 : se.name) ? oe : "unknown"}_${null != (ue = null == (le = null == de ? void 0 : de.browser) ? void 0 : le.version) ? ue : "unknown"}` ] ]; + if (_) fe.push([ `api/${_}`, ee ]); + return fe; +}, AwsCrc32 = function() { + function AwsCrc322() { + this.crc32 = new Crc32; + } + AwsCrc322.prototype.update = function(_) { + if (!isEmptyData2(_)) this.crc32.update(convertToBuffer2(_)); + }; + AwsCrc322.prototype.digest = function() { + return __awaiter(this, void 0, void 0, (function() { + return __generator(this, (function(_) { + return [ 2, numToUint8(this.crc32.digest()) ]; + })); + })); + }; + AwsCrc322.prototype.reset = function() { + this.crc32 = new Crc32; + }; + return AwsCrc322; +}(), Crc32 = function() { + function Crc322() { + this.checksum = 4294967295; + } + Crc322.prototype.update = function(_) { + var ee, ne; + try { + for (var ie = __values(_), re = ie.next(); !re.done; re = ie.next()) { + var se = re.value; + this.checksum = this.checksum >>> 8 ^ lookupTable[255 & (this.checksum ^ se)]; + } + } catch (_) { + ee = { + error: _ + }; + } finally { + try { + if (re && !re.done && (ne = ie.return)) ne.call(ie); + } finally { + if (ee) throw ee.error; + } + } + return this; + }; + Crc322.prototype.digest = function() { + return (4294967295 ^ this.checksum) >>> 0; + }; + return Crc322; +}(), a_lookUpTable = [ 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117 ], lookupTable = uint32ArrayFrom(a_lookUpTable), Int642 = class _Int64 { + constructor(_) { + this.bytes = _; + if (8 !== _.byteLength) throw new Error("Int64 buffers must be exactly 8 bytes"); + } + static fromNumber(_) { + if (_ > 0x8000000000000000 || _ < -0x8000000000000000) throw new Error(`${_} is too large (or, if negative, too small) to represent as an Int64`); + const ee = new Uint8Array(8); + for (let ne = 7, ie = Math.abs(Math.round(_)); ne > -1 && ie > 0; ne--, ie /= 256) ee[ne] = ie; + if (_ < 0) negate2(ee); + return new _Int64(ee); + } + valueOf() { + const _ = this.bytes.slice(0), ee = 128 & _[0]; + if (ee) negate2(_); + return parseInt(toHex(_), 16) * (ee ? -1 : 1); + } + toString() { + return String(this.valueOf()); + } +}; + +function negate2(_) { + for (let ee = 0; ee < 8; ee++) _[ee] ^= 255; + for (let ee = 7; ee > -1; ee--) { + _[ee]++; + if (0 !== _[ee]) break; + } +} + +var HEADER_VALUE_TYPE2, HeaderMarshaller = class { + constructor(_, ee) { + this.toUtf8 = _; + this.fromUtf8 = ee; + } + format(_) { + const ee = []; + for (const ne of Object.keys(_)) { + const ie = this.fromUtf8(ne); + ee.push(Uint8Array.from([ ie.byteLength ]), ie, this.formatHeaderValue(_[ne])); + } + const ne = new Uint8Array(ee.reduce(((_, ee) => _ + ee.byteLength), 0)); + let ie = 0; + for (const _ of ee) { + ne.set(_, ie); + ie += _.byteLength; + } + return ne; + } + formatHeaderValue(_) { + switch (_.type) { + case "boolean": + return Uint8Array.from([ _.value ? 0 : 1 ]); + + case "byte": + return Uint8Array.from([ 2, _.value ]); + + case "short": + const ee = new DataView(new ArrayBuffer(3)); + ee.setUint8(0, 3); + ee.setInt16(1, _.value, false); + return new Uint8Array(ee.buffer); + + case "integer": + const ne = new DataView(new ArrayBuffer(5)); + ne.setUint8(0, 4); + ne.setInt32(1, _.value, false); + return new Uint8Array(ne.buffer); + + case "long": + const ie = new Uint8Array(9); + ie[0] = 5; + ie.set(_.value.bytes, 1); + return ie; + + case "binary": + const re = new DataView(new ArrayBuffer(3 + _.value.byteLength)); + re.setUint8(0, 6); + re.setUint16(1, _.value.byteLength, false); + const se = new Uint8Array(re.buffer); + se.set(_.value, 3); + return se; + + case "string": + const oe = this.fromUtf8(_.value), le = new DataView(new ArrayBuffer(3 + oe.byteLength)); + le.setUint8(0, 7); + le.setUint16(1, oe.byteLength, false); + const ue = new Uint8Array(le.buffer); + ue.set(oe, 3); + return ue; + + case "timestamp": + const de = new Uint8Array(9); + de[0] = 8; + de.set(Int642.fromNumber(_.value.valueOf()).bytes, 1); + return de; + + case "uuid": + if (!UUID_PATTERN2.test(_.value)) throw new Error(`Invalid UUID received: ${_.value}`); + const fe = new Uint8Array(17); + fe[0] = 9; + fe.set(fromHex(_.value.replace(/\-/g, "")), 1); + return fe; + } + } + parse(_) { + const ee = {}; + let ne = 0; + for (;ne < _.byteLength; ) { + const ie = _.getUint8(ne++), re = this.toUtf8(new Uint8Array(_.buffer, _.byteOffset + ne, ie)); + ne += ie; + switch (_.getUint8(ne++)) { + case 0: + ee[re] = { + type: BOOLEAN_TAG, + value: true + }; + break; + + case 1: + ee[re] = { + type: BOOLEAN_TAG, + value: false + }; + break; + + case 2: + ee[re] = { + type: BYTE_TAG, + value: _.getInt8(ne++) + }; + break; + + case 3: + ee[re] = { + type: SHORT_TAG, + value: _.getInt16(ne, false) + }; + ne += 2; + break; + + case 4: + ee[re] = { + type: INT_TAG, + value: _.getInt32(ne, false) + }; + ne += 4; + break; + + case 5: + ee[re] = { + type: LONG_TAG, + value: new Int642(new Uint8Array(_.buffer, _.byteOffset + ne, 8)) + }; + ne += 8; + break; + + case 6: + const ie = _.getUint16(ne, false); + ne += 2; + ee[re] = { + type: BINARY_TAG, + value: new Uint8Array(_.buffer, _.byteOffset + ne, ie) + }; + ne += ie; + break; + + case 7: + const se = _.getUint16(ne, false); + ne += 2; + ee[re] = { + type: STRING_TAG, + value: this.toUtf8(new Uint8Array(_.buffer, _.byteOffset + ne, se)) + }; + ne += se; + break; + + case 8: + ee[re] = { + type: TIMESTAMP_TAG, + value: new Date(new Int642(new Uint8Array(_.buffer, _.byteOffset + ne, 8)).valueOf()) + }; + ne += 8; + break; + + case 9: + const oe = new Uint8Array(_.buffer, _.byteOffset + ne, 16); + ne += 16; + ee[re] = { + type: UUID_TAG, + value: `${toHex(oe.subarray(0, 4))}-${toHex(oe.subarray(4, 6))}-${toHex(oe.subarray(6, 8))}-${toHex(oe.subarray(8, 10))}-${toHex(oe.subarray(10))}` + }; + break; + + default: + throw new Error("Unrecognized header type tag"); + } + } + return ee; + } +}; + +(function(_) { + _[_["boolTrue"] = 0] = "boolTrue"; + _[_["boolFalse"] = 1] = "boolFalse"; + _[_["byte"] = 2] = "byte"; + _[_["short"] = 3] = "short"; + _[_["integer"] = 4] = "integer"; + _[_["long"] = 5] = "long"; + _[_["byteArray"] = 6] = "byteArray"; + _[_["string"] = 7] = "string"; + _[_["timestamp"] = 8] = "timestamp"; + _[_["uuid"] = 9] = "uuid"; +})(HEADER_VALUE_TYPE2 || (HEADER_VALUE_TYPE2 = {})); + +var BOOLEAN_TAG = "boolean", BYTE_TAG = "byte", SHORT_TAG = "short", INT_TAG = "integer", LONG_TAG = "long", BINARY_TAG = "binary", STRING_TAG = "string", TIMESTAMP_TAG = "timestamp", UUID_TAG = "uuid", UUID_PATTERN2 = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/, PRELUDE_MEMBER_LENGTH = 4, PRELUDE_LENGTH = 2 * PRELUDE_MEMBER_LENGTH, CHECKSUM_LENGTH = 4, MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + 2 * CHECKSUM_LENGTH; + +function splitMessage({byteLength: _, byteOffset: ee, buffer: ne}) { + if (_ < MINIMUM_MESSAGE_LENGTH) throw new Error("Provided message too short to accommodate event stream message overhead"); + const ie = new DataView(ne, ee, _), re = ie.getUint32(0, false); + if (_ !== re) throw new Error("Reported message length does not match received message length"); + const se = ie.getUint32(PRELUDE_MEMBER_LENGTH, false), oe = ie.getUint32(PRELUDE_LENGTH, false), le = ie.getUint32(_ - CHECKSUM_LENGTH, false), ue = (new Crc32).update(new Uint8Array(ne, ee, PRELUDE_LENGTH)); + if (oe !== ue.digest()) throw new Error(`The prelude checksum specified in the message (${oe}) does not match the calculated CRC32 checksum (${ue.digest()})`); + ue.update(new Uint8Array(ne, ee + PRELUDE_LENGTH, _ - (PRELUDE_LENGTH + CHECKSUM_LENGTH))); + if (le !== ue.digest()) throw new Error(`The message checksum (${ue.digest()}) did not match the expected value of ${le}`); + return { + headers: new DataView(ne, ee + PRELUDE_LENGTH + CHECKSUM_LENGTH, se), + body: new Uint8Array(ne, ee + PRELUDE_LENGTH + CHECKSUM_LENGTH + se, re - se - (PRELUDE_LENGTH + CHECKSUM_LENGTH + CHECKSUM_LENGTH)) + }; +} + +var EventStreamCodec = class { + constructor(_, ee) { + this.headerMarshaller = new HeaderMarshaller(_, ee); + this.messageBuffer = []; + this.isEndOfStream = false; + } + feed(_) { + this.messageBuffer.push(this.decode(_)); + } + endOfStream() { + this.isEndOfStream = true; + } + getMessage() { + const _ = this.messageBuffer.pop(), ee = this.isEndOfStream; + return { + getMessage: () => _, + isEndOfStream: () => ee + }; + } + getAvailableMessages() { + const _ = this.messageBuffer; + this.messageBuffer = []; + const ee = this.isEndOfStream; + return { + getMessages: () => _, + isEndOfStream: () => ee + }; + } + encode({headers: _, body: ee}) { + const ne = this.headerMarshaller.format(_), ie = ne.byteLength + ee.byteLength + 16, re = new Uint8Array(ie), se = new DataView(re.buffer, re.byteOffset, re.byteLength), oe = new Crc32; + se.setUint32(0, ie, false); + se.setUint32(4, ne.byteLength, false); + se.setUint32(8, oe.update(re.subarray(0, 8)).digest(), false); + re.set(ne, 12); + re.set(ee, ne.byteLength + 12); + se.setUint32(ie - 4, oe.update(re.subarray(8, ie - 4)).digest(), false); + return re; + } + decode(_) { + const {headers: ee, body: ne} = splitMessage(_); + return { + headers: this.headerMarshaller.parse(ee), + body: ne + }; + } + formatHeaders(_) { + return this.headerMarshaller.format(_); + } +}, MessageDecoderStream = class { + constructor(_) { + this.options = _; + } + [Symbol.asyncIterator]() { + return this.asyncIterator(); + } + async* asyncIterator() { + for await (const _ of this.options.inputStream) { + const ee = this.options.decoder.decode(_); + yield ee; + } + } +}, MessageEncoderStream = class { + constructor(_) { + this.options = _; + } + [Symbol.asyncIterator]() { + return this.asyncIterator(); + } + async* asyncIterator() { + for await (const _ of this.options.messageStream) { + const ee = this.options.encoder.encode(_); + yield ee; + } + if (this.options.includeEndFrame) yield new Uint8Array(0); + } +}, SmithyMessageDecoderStream = class { + constructor(_) { + this.options = _; + } + [Symbol.asyncIterator]() { + return this.asyncIterator(); + } + async* asyncIterator() { + for await (const _ of this.options.messageStream) { + const ee = await this.options.deserializer(_); + if (void 0 !== ee) yield ee; + } + } +}, SmithyMessageEncoderStream = class { + constructor(_) { + this.options = _; + } + [Symbol.asyncIterator]() { + return this.asyncIterator(); + } + async* asyncIterator() { + for await (const _ of this.options.inputStream) { + const ee = this.options.serializer(_); + yield ee; + } + } +}; + +function getChunkedStream(_) { + let ee = 0, ne = 0, ie = null, re = null; + const allocateMessage = _ => { + if ("number" != typeof _) throw new Error("Attempted to allocate an event message where size was not a number: " + _); + ee = _; + ne = 4; + ie = new Uint8Array(_); + new DataView(ie.buffer).setUint32(0, _, false); + }; + return { + [Symbol.asyncIterator]: async function*() { + const se = _[Symbol.asyncIterator](); + for (;;) { + const {value: _, done: oe} = await se.next(); + if (oe) { + if (!ee) return; else if (ee === ne) yield ie; else throw new Error("Truncated event message received."); + return; + } + const le = _.length; + let ue = 0; + for (;ue < le; ) { + if (!ie) { + const ee = le - ue; + if (!re) re = new Uint8Array(4); + const ie = Math.min(4 - ne, ee); + re.set(_.slice(ue, ue + ie), ne); + ne += ie; + ue += ie; + if (ne < 4) break; + allocateMessage(new DataView(re.buffer).getUint32(0, false)); + re = null; + } + const se = Math.min(ee - ne, le - ue); + ie.set(_.slice(ue, ue + se), ne); + ne += se; + ue += se; + if (ee && ee === ne) { + yield ie; + ie = null; + ee = 0; + ne = 0; + } + } + } + } + }; +} + +function getMessageUnmarshaller(_, ee) { + return async function(ne) { + const {value: ie} = ne.headers[":message-type"]; + if ("error" === ie) { + const _ = new Error(ne.headers[":error-message"].value || "UnknownError"); + _.name = ne.headers[":error-code"].value; + throw _; + } else if ("exception" === ie) { + const ie = ne.headers[":exception-type"].value, re = { + [ie]: ne + }, se = await _(re); + if (se.$unknown) { + const _ = new Error(ee(ne.body)); + _.name = ie; + throw _; + } + throw se[ie]; + } else if ("event" === ie) { + const ee = { + [ne.headers[":event-type"].value]: ne + }, ie = await _(ee); + if (ie.$unknown) return; + return ie; + } else throw Error(`Unrecognizable event type: ${ne.headers[":event-type"].value}`); + }; +} + +var EventStreamMarshaller = class { + constructor({utf8Encoder: _, utf8Decoder: ee}) { + this.eventStreamCodec = new EventStreamCodec(_, ee); + this.utfEncoder = _; + } + deserialize(_, ee) { + const ne = getChunkedStream(_); + return new SmithyMessageDecoderStream({ + messageStream: new MessageDecoderStream({ + inputStream: ne, + decoder: this.eventStreamCodec + }), + deserializer: getMessageUnmarshaller(ee, this.utfEncoder) + }); + } + serialize(_, ee) { + return new MessageEncoderStream({ + messageStream: new SmithyMessageEncoderStream({ + inputStream: _, + serializer: ee + }), + encoder: this.eventStreamCodec, + includeEndFrame: true + }); + } +}, readableStreamtoIterable = _ => ({ + [Symbol.asyncIterator]: async function*() { + const ee = _.getReader(); + try { + for (;;) { + const {done: _, value: ne} = await ee.read(); + if (_) return; + yield ne; + } + } finally { + ee.releaseLock(); + } + } +}), iterableToReadableStream = _ => { + const ee = _[Symbol.asyncIterator](); + return new ReadableStream({ + async pull(_) { + const {done: ne, value: ie} = await ee.next(); + if (ne) return _.close(); + _.enqueue(ie); + } + }); +}, EventStreamMarshaller2 = class { + constructor({utf8Encoder: _, utf8Decoder: ee}) { + this.universalMarshaller = new EventStreamMarshaller({ + utf8Decoder: ee, + utf8Encoder: _ + }); + } + deserialize(_, ee) { + const ne = isReadableStream(_) ? readableStreamtoIterable(_) : _; + return this.universalMarshaller.deserialize(ne, ee); + } + serialize(_, ee) { + const ne = this.universalMarshaller.serialize(_, ee); + return "function" == typeof ReadableStream ? iterableToReadableStream(ne) : ne; + } +}, isReadableStream = _ => "function" == typeof ReadableStream && _ instanceof ReadableStream, eventStreamSerdeProvider = _ => new EventStreamMarshaller2(_); + +function blobReader(_, ee, ne = 1048576) { + return new Promise(((ie, re) => { + const se = new FileReader; + se.addEventListener("error", re); + se.addEventListener("abort", re); + const oe = _.size; + let le = 0; + function read() { + if (!(le >= oe)) se.readAsArrayBuffer(_.slice(le, Math.min(oe, le + ne))); else ie(); + } + se.addEventListener("load", (_ => { + const ne = _.target.result; + ee(new Uint8Array(ne)); + le += ne.byteLength; + read(); + })); + read(); + })); +} + +var blobHasher = async function blobHasher2(_, ee) { + const ne = new _; + await blobReader(ee, (_ => { + ne.update(_); + })); + return ne.digest(); +}, invalidProvider = _ => () => Promise.reject(_), BLOCK_SIZE2 = 64, DIGEST_LENGTH2 = 16, INIT2 = [ 1732584193, 4023233417, 2562383102, 271733878 ], Md57 = class { + constructor() { + this.reset(); + } + update(_) { + if (isEmptyData3(_)) return; else if (this.finished) throw new Error("Attempted to update an already finished hash."); + const ee = convertToBuffer3(_); + let ne = 0, {byteLength: ie} = ee; + this.bytesHashed += ie; + for (;ie > 0; ) { + this.buffer.setUint8(this.bufferLength++, ee[ne++]); + ie--; + if (this.bufferLength === BLOCK_SIZE2) { + this.hashBuffer(); + this.bufferLength = 0; + } + } + } + async digest() { + if (!this.finished) { + const {buffer: _, bufferLength: ee, bytesHashed: ne} = this, ie = 8 * ne; + _.setUint8(this.bufferLength++, 128); + if (ee % BLOCK_SIZE2 >= BLOCK_SIZE2 - 8) { + for (let ee = this.bufferLength; ee < BLOCK_SIZE2; ee++) _.setUint8(ee, 0); + this.hashBuffer(); + this.bufferLength = 0; + } + for (let ee = this.bufferLength; ee < BLOCK_SIZE2 - 8; ee++) _.setUint8(ee, 0); + _.setUint32(BLOCK_SIZE2 - 8, ie >>> 0, true); + _.setUint32(BLOCK_SIZE2 - 4, Math.floor(ie / 4294967296), true); + this.hashBuffer(); + this.finished = true; + } + const _ = new DataView(new ArrayBuffer(DIGEST_LENGTH2)); + for (let ee = 0; ee < 4; ee++) _.setUint32(4 * ee, this.state[ee], true); + return new Uint8Array(_.buffer, _.byteOffset, _.byteLength); + } + hashBuffer() { + const {buffer: _, state: ee} = this; + let ne = ee[0], ie = ee[1], re = ee[2], se = ee[3]; + ne = ff(ne, ie, re, se, _.getUint32(0, true), 7, 3614090360); + se = ff(se, ne, ie, re, _.getUint32(4, true), 12, 3905402710); + re = ff(re, se, ne, ie, _.getUint32(8, true), 17, 606105819); + ie = ff(ie, re, se, ne, _.getUint32(12, true), 22, 3250441966); + ne = ff(ne, ie, re, se, _.getUint32(16, true), 7, 4118548399); + se = ff(se, ne, ie, re, _.getUint32(20, true), 12, 1200080426); + re = ff(re, se, ne, ie, _.getUint32(24, true), 17, 2821735955); + ie = ff(ie, re, se, ne, _.getUint32(28, true), 22, 4249261313); + ne = ff(ne, ie, re, se, _.getUint32(32, true), 7, 1770035416); + se = ff(se, ne, ie, re, _.getUint32(36, true), 12, 2336552879); + re = ff(re, se, ne, ie, _.getUint32(40, true), 17, 4294925233); + ie = ff(ie, re, se, ne, _.getUint32(44, true), 22, 2304563134); + ne = ff(ne, ie, re, se, _.getUint32(48, true), 7, 1804603682); + se = ff(se, ne, ie, re, _.getUint32(52, true), 12, 4254626195); + re = ff(re, se, ne, ie, _.getUint32(56, true), 17, 2792965006); + ie = ff(ie, re, se, ne, _.getUint32(60, true), 22, 1236535329); + ne = gg(ne, ie, re, se, _.getUint32(4, true), 5, 4129170786); + se = gg(se, ne, ie, re, _.getUint32(24, true), 9, 3225465664); + re = gg(re, se, ne, ie, _.getUint32(44, true), 14, 643717713); + ie = gg(ie, re, se, ne, _.getUint32(0, true), 20, 3921069994); + ne = gg(ne, ie, re, se, _.getUint32(20, true), 5, 3593408605); + se = gg(se, ne, ie, re, _.getUint32(40, true), 9, 38016083); + re = gg(re, se, ne, ie, _.getUint32(60, true), 14, 3634488961); + ie = gg(ie, re, se, ne, _.getUint32(16, true), 20, 3889429448); + ne = gg(ne, ie, re, se, _.getUint32(36, true), 5, 568446438); + se = gg(se, ne, ie, re, _.getUint32(56, true), 9, 3275163606); + re = gg(re, se, ne, ie, _.getUint32(12, true), 14, 4107603335); + ie = gg(ie, re, se, ne, _.getUint32(32, true), 20, 1163531501); + ne = gg(ne, ie, re, se, _.getUint32(52, true), 5, 2850285829); + se = gg(se, ne, ie, re, _.getUint32(8, true), 9, 4243563512); + re = gg(re, se, ne, ie, _.getUint32(28, true), 14, 1735328473); + ie = gg(ie, re, se, ne, _.getUint32(48, true), 20, 2368359562); + ne = hh(ne, ie, re, se, _.getUint32(20, true), 4, 4294588738); + se = hh(se, ne, ie, re, _.getUint32(32, true), 11, 2272392833); + re = hh(re, se, ne, ie, _.getUint32(44, true), 16, 1839030562); + ie = hh(ie, re, se, ne, _.getUint32(56, true), 23, 4259657740); + ne = hh(ne, ie, re, se, _.getUint32(4, true), 4, 2763975236); + se = hh(se, ne, ie, re, _.getUint32(16, true), 11, 1272893353); + re = hh(re, se, ne, ie, _.getUint32(28, true), 16, 4139469664); + ie = hh(ie, re, se, ne, _.getUint32(40, true), 23, 3200236656); + ne = hh(ne, ie, re, se, _.getUint32(52, true), 4, 681279174); + se = hh(se, ne, ie, re, _.getUint32(0, true), 11, 3936430074); + re = hh(re, se, ne, ie, _.getUint32(12, true), 16, 3572445317); + ie = hh(ie, re, se, ne, _.getUint32(24, true), 23, 76029189); + ne = hh(ne, ie, re, se, _.getUint32(36, true), 4, 3654602809); + se = hh(se, ne, ie, re, _.getUint32(48, true), 11, 3873151461); + re = hh(re, se, ne, ie, _.getUint32(60, true), 16, 530742520); + ie = hh(ie, re, se, ne, _.getUint32(8, true), 23, 3299628645); + ne = ii(ne, ie, re, se, _.getUint32(0, true), 6, 4096336452); + se = ii(se, ne, ie, re, _.getUint32(28, true), 10, 1126891415); + re = ii(re, se, ne, ie, _.getUint32(56, true), 15, 2878612391); + ie = ii(ie, re, se, ne, _.getUint32(20, true), 21, 4237533241); + ne = ii(ne, ie, re, se, _.getUint32(48, true), 6, 1700485571); + se = ii(se, ne, ie, re, _.getUint32(12, true), 10, 2399980690); + re = ii(re, se, ne, ie, _.getUint32(40, true), 15, 4293915773); + ie = ii(ie, re, se, ne, _.getUint32(4, true), 21, 2240044497); + ne = ii(ne, ie, re, se, _.getUint32(32, true), 6, 1873313359); + se = ii(se, ne, ie, re, _.getUint32(60, true), 10, 4264355552); + re = ii(re, se, ne, ie, _.getUint32(24, true), 15, 2734768916); + ie = ii(ie, re, se, ne, _.getUint32(52, true), 21, 1309151649); + ne = ii(ne, ie, re, se, _.getUint32(16, true), 6, 4149444226); + se = ii(se, ne, ie, re, _.getUint32(44, true), 10, 3174756917); + re = ii(re, se, ne, ie, _.getUint32(8, true), 15, 718787259); + ie = ii(ie, re, se, ne, _.getUint32(36, true), 21, 3951481745); + ee[0] = ne + ee[0] & 4294967295; + ee[1] = ie + ee[1] & 4294967295; + ee[2] = re + ee[2] & 4294967295; + ee[3] = se + ee[3] & 4294967295; + } + reset() { + this.state = Uint32Array.from(INIT2); + this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE2)); + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + } +}; + +function cmn(_, ee, ne, ie, re, se) { + return ((ee = (ee + _ & 4294967295) + (ie + se & 4294967295) & 4294967295) << re | ee >>> 32 - re) + ne & 4294967295; +} + +function ff(_, ee, ne, ie, re, se, oe) { + return cmn(ee & ne | ~ee & ie, _, ee, re, se, oe); +} + +function gg(_, ee, ne, ie, re, se, oe) { + return cmn(ee & ie | ne & ~ie, _, ee, re, se, oe); +} + +function hh(_, ee, ne, ie, re, se, oe) { + return cmn(ee ^ ne ^ ie, _, ee, re, se, oe); +} + +function ii(_, ee, ne, ie, re, se, oe) { + return cmn(ne ^ (ee | ~ie), _, ee, re, se, oe); +} + +function isEmptyData3(_) { + if ("string" == typeof _) return 0 === _.length; else return 0 === _.byteLength; +} + +function convertToBuffer3(_) { + if ("string" == typeof _) return fromUtf8(_); + if (ArrayBuffer.isView(_)) return new Uint8Array(_.buffer, _.byteOffset, _.byteLength / Uint8Array.BYTES_PER_ELEMENT); else return new Uint8Array(_); +} + +var TEXT_ENCODER = "function" == typeof TextEncoder ? new TextEncoder : null, calculateBodyLength = _ => { + if ("string" == typeof _) { + if (TEXT_ENCODER) return TEXT_ENCODER.encode(_).byteLength; + let ee = _.length; + for (let ne = ee - 1; ne >= 0; ne--) { + const ie = _.charCodeAt(ne); + if (ie > 127 && ie <= 2047) ee++; else if (ie > 2047 && ie <= 65535) ee += 2; + if (ie >= 56320 && ie <= 57343) ne--; + } + return ee; + } else if ("number" == typeof _.byteLength) return _.byteLength; else if ("number" == typeof _.size) return _.size; + throw new Error(`Body Length computation failed for ${_}`); +}, signatureV4CrtContainer = { + CrtSignerV4: null +}, SignatureV4MultiRegion = class { + constructor(_) { + this.sigv4Signer = new SignatureV4S3Express(_); + this.signerOptions = _; + } + async sign(_, ee = {}) { + if ("*" === ee.signingRegion) { + if ("node" !== this.signerOptions.runtime) throw new Error("This request requires signing with SigV4Asymmetric algorithm. It's only available in Node.js"); + return this.getSigv4aSigner().sign(_, ee); + } + return this.sigv4Signer.sign(_, ee); + } + async signWithCredentials(_, ee, ne = {}) { + if ("*" === ne.signingRegion) { + if ("node" !== this.signerOptions.runtime) throw new Error("This request requires signing with SigV4Asymmetric algorithm. It's only available in Node.js"); + return this.getSigv4aSigner().signWithCredentials(_, ee, ne); + } + return this.sigv4Signer.signWithCredentials(_, ee, ne); + } + async presign(_, ee = {}) { + if ("*" === ee.signingRegion) { + if ("node" !== this.signerOptions.runtime) throw new Error("This request requires signing with SigV4Asymmetric algorithm. It's only available in Node.js"); + return this.getSigv4aSigner().presign(_, ee); + } + return this.sigv4Signer.presign(_, ee); + } + async presignWithCredentials(_, ee, ne = {}) { + if ("*" === ne.signingRegion) throw new Error("Method presignWithCredentials is not supported for [signingRegion=*]."); + return this.sigv4Signer.presignWithCredentials(_, ee, ne); + } + getSigv4aSigner() { + if (!this.sigv4aSigner) { + let _ = null; + try { + _ = signatureV4CrtContainer.CrtSignerV4; + if ("function" != typeof _) throw new Error; + } catch (_) { + _.message = `${_.message}\nPlease check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. \nYou must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. \nFor more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`; + throw _; + } + this.sigv4aSigner = new _({ + ...this.signerOptions, + signingAlgorithm: 1 + }); + } + return this.sigv4aSigner; + } +}, ce = "required", cf = "type", cg = "conditions", ch3 = "fn", ci = "argv", cj = "ref", ck = "assign", cl = "url", cm = "properties", cn = "backend", co = "authSchemes", cp = "disableDoubleEncoding", cq = "signingName", cr = "signingRegion", cs = "headers", ct = "signingRegionSet", a = false, b = true, c = "isSet", d3 = "booleanEquals", e3 = "error", f3 = "aws.partition", g = "stringEquals", h2 = "getAttr", i = "name", j = "substring", k = "bucketSuffix", l = "parseURL", m = "{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}", n2 = "endpoint", o = "tree", p = "aws.isVirtualHostableS3Bucket", q = "{url#scheme}://{Bucket}.{url#authority}{url#path}", r = "not", s = "{url#scheme}://{url#authority}{url#path}", t3 = "hardwareType", u = "regionPrefix", v = "bucketAliasSuffix", w = "outpostId", x = "isValidHostLabel", y = "sigv4a", z = "s3-outposts", A = "s3", B = "{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}", C = "https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}", D = "https://{Bucket}.s3.{partitionResult#dnsSuffix}", E = "aws.parseArn", F = "bucketArn", G = "arnType", H = "", I = "s3-object-lambda", J = "accesspoint", K = "accessPointName", L = "{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}", M = "mrapPartition", N = "outpostType", O = "arnPrefix", P = "{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}", Q = "https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", R = "https://s3.{partitionResult#dnsSuffix}", S = { + [ce]: false, + [cf]: "String" +}, T = { + [ce]: true, + default: false, + [cf]: "Boolean" +}, U = { + [ce]: false, + [cf]: "Boolean" +}, V = { + [ch3]: d3, + [ci]: [ { + [cj]: "Accelerate" + }, true ] +}, W = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseFIPS" + }, true ] +}, X = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseDualStack" + }, true ] +}, Y = { + [ch3]: c, + [ci]: [ { + [cj]: "Endpoint" + } ] +}, Z = { + [ch3]: f3, + [ci]: [ { + [cj]: "Region" + } ], + [ck]: "partitionResult" +}, aa = { + [ch3]: g, + [ci]: [ { + [ch3]: h2, + [ci]: [ { + [cj]: "partitionResult" + }, i ] + }, "aws-cn" ] +}, ab = { + [ch3]: c, + [ci]: [ { + [cj]: "Bucket" + } ] +}, ac = { + [cj]: "Bucket" +}, ad = { + [ch3]: l, + [ci]: [ { + [cj]: "Endpoint" + } ], + [ck]: "url" +}, ae = { + [ch3]: d3, + [ci]: [ { + [ch3]: h2, + [ci]: [ { + [cj]: "url" + }, "isIp" ] + }, true ] +}, af = { + [cj]: "url" +}, ag = { + [ch3]: "uriEncode", + [ci]: [ ac ], + [ck]: "uri_encoded_bucket" +}, ah = { + [cn]: "S3Express", + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: "s3express", + [cr]: "{Region}" + } ] +}, ai = {}, aj = { + [ch3]: p, + [ci]: [ ac, false ] +}, ak = { + [e3]: "S3Express bucket name is not a valid virtual hostable name.", + [cf]: e3 +}, al = { + [cn]: "S3Express", + [co]: [ { + [cp]: true, + [i]: "sigv4-s3express", + [cq]: "s3express", + [cr]: "{Region}" + } ] +}, am = { + [ch3]: c, + [ci]: [ { + [cj]: "UseS3ExpressControlEndpoint" + } ] +}, an = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseS3ExpressControlEndpoint" + }, true ] +}, ao = { + [ch3]: r, + [ci]: [ Y ] +}, ap = { + [e3]: "Unrecognized S3Express bucket name format.", + [cf]: e3 +}, aq = { + [ch3]: r, + [ci]: [ ab ] +}, ar = { + [cj]: t3 +}, as = { + [cg]: [ ao ], + [e3]: "Expected a endpoint to be specified but no endpoint was found", + [cf]: e3 +}, at = { + [co]: [ { + [cp]: true, + [i]: y, + [cq]: z, + [ct]: [ "*" ] + }, { + [cp]: true, + [i]: "sigv4", + [cq]: z, + [cr]: "{Region}" + } ] +}, au = { + [ch3]: d3, + [ci]: [ { + [cj]: "ForcePathStyle" + }, false ] +}, av = { + [cj]: "ForcePathStyle" +}, aw = { + [ch3]: d3, + [ci]: [ { + [cj]: "Accelerate" + }, false ] +}, ax = { + [ch3]: g, + [ci]: [ { + [cj]: "Region" + }, "aws-global" ] +}, ay = { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: A, + [cr]: "us-east-1" + } ] +}, az = { + [ch3]: r, + [ci]: [ ax ] +}, aA = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseGlobalEndpoint" + }, true ] +}, aB = { + [cl]: "https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}", + [cm]: { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: A, + [cr]: "{Region}" + } ] + }, + [cs]: {} +}, aC = { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: A, + [cr]: "{Region}" + } ] +}, aD = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseGlobalEndpoint" + }, false ] +}, aE = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseDualStack" + }, false ] +}, aF = { + [cl]: "https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, aG = { + [ch3]: d3, + [ci]: [ { + [cj]: "UseFIPS" + }, false ] +}, aH = { + [cl]: "https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, aI = { + [cl]: "https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, aJ = { + [ch3]: d3, + [ci]: [ { + [ch3]: h2, + [ci]: [ af, "isIp" ] + }, false ] +}, aK = { + [cl]: B, + [cm]: aC, + [cs]: {} +}, aL = { + [cl]: q, + [cm]: aC, + [cs]: {} +}, aM = { + [n2]: aL, + [cf]: n2 +}, aN = { + [cl]: C, + [cm]: aC, + [cs]: {} +}, aO = { + [cl]: "https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, aP = { + [e3]: "Invalid region: region was not a valid DNS name.", + [cf]: e3 +}, aQ = { + [cj]: F +}, aR = { + [cj]: G +}, aS = { + [ch3]: h2, + [ci]: [ aQ, "service" ] +}, aT = { + [cj]: K +}, aU = { + [cg]: [ X ], + [e3]: "S3 Object Lambda does not support Dual-stack", + [cf]: e3 +}, aV = { + [cg]: [ V ], + [e3]: "S3 Object Lambda does not support S3 Accelerate", + [cf]: e3 +}, aW = { + [cg]: [ { + [ch3]: c, + [ci]: [ { + [cj]: "DisableAccessPoints" + } ] + }, { + [ch3]: d3, + [ci]: [ { + [cj]: "DisableAccessPoints" + }, true ] + } ], + [e3]: "Access points are not supported for this operation", + [cf]: e3 +}, aX = { + [cg]: [ { + [ch3]: c, + [ci]: [ { + [cj]: "UseArnRegion" + } ] + }, { + [ch3]: d3, + [ci]: [ { + [cj]: "UseArnRegion" + }, false ] + }, { + [ch3]: r, + [ci]: [ { + [ch3]: g, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "region" ] + }, "{Region}" ] + } ] + } ], + [e3]: "Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`", + [cf]: e3 +}, aY = { + [ch3]: h2, + [ci]: [ { + [cj]: "bucketPartition" + }, i ] +}, aZ = { + [ch3]: h2, + [ci]: [ aQ, "accountId" ] +}, ba = { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: I, + [cr]: "{bucketArn#region}" + } ] +}, bb = { + [e3]: "Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`", + [cf]: e3 +}, bc = { + [e3]: "Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`", + [cf]: e3 +}, bd = { + [e3]: "Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)", + [cf]: e3 +}, be = { + [e3]: "Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`", + [cf]: e3 +}, bf = { + [e3]: "Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.", + [cf]: e3 +}, bg = { + [e3]: "Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided", + [cf]: e3 +}, bh = { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: A, + [cr]: "{bucketArn#region}" + } ] +}, bi = { + [co]: [ { + [cp]: true, + [i]: y, + [cq]: z, + [ct]: [ "*" ] + }, { + [cp]: true, + [i]: "sigv4", + [cq]: z, + [cr]: "{bucketArn#region}" + } ] +}, bj = { + [ch3]: E, + [ci]: [ ac ] +}, bk = { + [cl]: "https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: aC, + [cs]: {} +}, bl = { + [cl]: "https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: aC, + [cs]: {} +}, bm = { + [cl]: "https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: aC, + [cs]: {} +}, bn = { + [cl]: P, + [cm]: aC, + [cs]: {} +}, bo = { + [cl]: "https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: aC, + [cs]: {} +}, bp = { + [cj]: "UseObjectLambdaEndpoint" +}, bq = { + [co]: [ { + [cp]: true, + [i]: "sigv4", + [cq]: I, + [cr]: "{Region}" + } ] +}, br = { + [cl]: "https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, bs = { + [cl]: "https://s3-fips.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, bt = { + [cl]: "https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, bu = { + [cl]: s, + [cm]: aC, + [cs]: {} +}, bv = { + [cl]: "https://s3.{Region}.{partitionResult#dnsSuffix}", + [cm]: aC, + [cs]: {} +}, bw = [ { + [cj]: "Region" +} ], bx = [ { + [cj]: "Endpoint" +} ], by = [ ac ], bz = [ X ], bA = [ V ], bB = [ Y, ad ], bC = [ { + [ch3]: c, + [ci]: [ { + [cj]: "DisableS3ExpressSessionAuth" + } ] +}, { + [ch3]: d3, + [ci]: [ { + [cj]: "DisableS3ExpressSessionAuth" + }, true ] +} ], bD = [ ae ], bE = [ ag ], bF = [ aj ], bG = [ W ], bH = [ { + [ch3]: j, + [ci]: [ ac, 6, 14, true ], + [ck]: "s3expressAvailabilityZoneId" +}, { + [ch3]: j, + [ci]: [ ac, 14, 16, true ], + [ck]: "s3expressAvailabilityZoneDelim" +}, { + [ch3]: g, + [ci]: [ { + [cj]: "s3expressAvailabilityZoneDelim" + }, "--" ] +} ], bI = [ { + [cg]: [ W ], + [n2]: { + [cl]: "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com", + [cm]: ah, + [cs]: {} + }, + [cf]: n2 +}, { + [n2]: { + [cl]: "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com", + [cm]: ah, + [cs]: {} + }, + [cf]: n2 +} ], bJ = [ { + [ch3]: j, + [ci]: [ ac, 6, 15, true ], + [ck]: "s3expressAvailabilityZoneId" +}, { + [ch3]: j, + [ci]: [ ac, 15, 17, true ], + [ck]: "s3expressAvailabilityZoneDelim" +}, { + [ch3]: g, + [ci]: [ { + [cj]: "s3expressAvailabilityZoneDelim" + }, "--" ] +} ], bK = [ { + [cg]: [ W ], + [n2]: { + [cl]: "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com", + [cm]: al, + [cs]: {} + }, + [cf]: n2 +}, { + [n2]: { + [cl]: "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com", + [cm]: al, + [cs]: {} + }, + [cf]: n2 +} ], bL = [ ab ], bM = [ { + [ch3]: x, + [ci]: [ { + [cj]: w + }, false ] +} ], bN = [ { + [ch3]: g, + [ci]: [ { + [cj]: u + }, "beta" ] +} ], bO = [ "*" ], bP = [ Z ], bQ = [ { + [ch3]: x, + [ci]: [ { + [cj]: "Region" + }, false ] +} ], bR = [ { + [ch3]: g, + [ci]: [ { + [cj]: "Region" + }, "us-east-1" ] +} ], bS = [ { + [ch3]: g, + [ci]: [ aR, J ] +} ], bT = [ { + [ch3]: h2, + [ci]: [ aQ, "resourceId[1]" ], + [ck]: K +}, { + [ch3]: r, + [ci]: [ { + [ch3]: g, + [ci]: [ aT, H ] + } ] +} ], bU = [ aQ, "resourceId[1]" ], bV = [ { + [ch3]: r, + [ci]: [ { + [ch3]: g, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "region" ] + }, H ] + } ] +} ], bW = [ { + [ch3]: r, + [ci]: [ { + [ch3]: c, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "resourceId[2]" ] + } ] + } ] +} ], bX = [ aQ, "resourceId[2]" ], bY = [ { + [ch3]: f3, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "region" ] + } ], + [ck]: "bucketPartition" +} ], bZ = [ { + [ch3]: g, + [ci]: [ aY, { + [ch3]: h2, + [ci]: [ { + [cj]: "partitionResult" + }, i ] + } ] +} ], ca = [ { + [ch3]: x, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "region" ] + }, true ] +} ], cb = [ { + [ch3]: x, + [ci]: [ aZ, false ] +} ], cc = [ { + [ch3]: x, + [ci]: [ aT, false ] +} ], cd = [ { + [ch3]: x, + [ci]: [ { + [cj]: "Region" + }, true ] +} ], _data = { + version: "1.0", + parameters: { + Bucket: S, + Region: S, + UseFIPS: T, + UseDualStack: T, + Endpoint: S, + ForcePathStyle: T, + Accelerate: T, + UseGlobalEndpoint: T, + UseObjectLambdaEndpoint: U, + Key: S, + Prefix: S, + CopySource: S, + DisableAccessPoints: U, + DisableMultiRegionAccessPoints: T, + UseArnRegion: U, + UseS3ExpressControlEndpoint: U, + DisableS3ExpressSessionAuth: U + }, + rules: [ { + [cg]: [ { + [ch3]: c, + [ci]: bw + } ], + rules: [ { + [cg]: [ V, W ], + error: "Accelerate cannot be used with FIPS", + [cf]: e3 + }, { + [cg]: [ X, Y ], + error: "Cannot set dual-stack in combination with a custom endpoint.", + [cf]: e3 + }, { + [cg]: [ Y, W ], + error: "A custom endpoint cannot be combined with FIPS", + [cf]: e3 + }, { + [cg]: [ Y, V ], + error: "A custom endpoint cannot be combined with S3 Accelerate", + [cf]: e3 + }, { + [cg]: [ W, Z, aa ], + error: "Partition does not support FIPS", + [cf]: e3 + }, { + [cg]: [ ab, { + [ch3]: j, + [ci]: [ ac, 0, 6, b ], + [ck]: k + }, { + [ch3]: g, + [ci]: [ { + [cj]: k + }, "--x-s3" ] + } ], + rules: [ { + [cg]: bz, + error: "S3Express does not support Dual-stack.", + [cf]: e3 + }, { + [cg]: bA, + error: "S3Express does not support S3 Accelerate.", + [cf]: e3 + }, { + [cg]: bB, + rules: [ { + [cg]: bC, + rules: [ { + [cg]: bD, + rules: [ { + [cg]: bE, + rules: [ { + endpoint: { + [cl]: m, + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: bF, + rules: [ { + endpoint: { + [cl]: q, + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, ak ], + [cf]: o + }, { + [cg]: bD, + rules: [ { + [cg]: bE, + rules: [ { + endpoint: { + [cl]: m, + [cm]: al, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: bF, + rules: [ { + endpoint: { + [cl]: q, + [cm]: al, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, ak ], + [cf]: o + }, { + [cg]: [ am, an ], + rules: [ { + [cg]: [ ag, ao ], + rules: [ { + [cg]: bG, + endpoint: { + [cl]: "https://s3express-control-fips.{Region}.amazonaws.com/{uri_encoded_bucket}", + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: { + [cl]: "https://s3express-control.{Region}.amazonaws.com/{uri_encoded_bucket}", + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: bF, + rules: [ { + [cg]: bC, + rules: [ { + [cg]: bH, + rules: bI, + [cf]: o + }, { + [cg]: bJ, + rules: bI, + [cf]: o + }, ap ], + [cf]: o + }, { + [cg]: bH, + rules: bK, + [cf]: o + }, { + [cg]: bJ, + rules: bK, + [cf]: o + }, ap ], + [cf]: o + }, ak ], + [cf]: o + }, { + [cg]: [ aq, am, an ], + rules: [ { + [cg]: bB, + endpoint: { + [cl]: s, + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: bG, + endpoint: { + [cl]: "https://s3express-control-fips.{Region}.amazonaws.com", + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: { + [cl]: "https://s3express-control.{Region}.amazonaws.com", + [cm]: ah, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ ab, { + [ch3]: j, + [ci]: [ ac, 49, 50, b ], + [ck]: t3 + }, { + [ch3]: j, + [ci]: [ ac, 8, 12, b ], + [ck]: u + }, { + [ch3]: j, + [ci]: [ ac, 0, 7, b ], + [ck]: v + }, { + [ch3]: j, + [ci]: [ ac, 32, 49, b ], + [ck]: w + }, { + [ch3]: f3, + [ci]: bw, + [ck]: "regionPartition" + }, { + [ch3]: g, + [ci]: [ { + [cj]: v + }, "--op-s3" ] + } ], + rules: [ { + [cg]: bM, + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ ar, "e" ] + } ], + rules: [ { + [cg]: bN, + rules: [ as, { + [cg]: bB, + endpoint: { + [cl]: "https://{Bucket}.ec2.{url#authority}", + [cm]: at, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + endpoint: { + [cl]: "https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}", + [cm]: at, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ { + [ch3]: g, + [ci]: [ ar, "o" ] + } ], + rules: [ { + [cg]: bN, + rules: [ as, { + [cg]: bB, + endpoint: { + [cl]: "https://{Bucket}.op-{outpostId}.{url#authority}", + [cm]: at, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + endpoint: { + [cl]: "https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}", + [cm]: at, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + error: 'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"', + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.", + [cf]: e3 + } ], + [cf]: o + }, { + [cg]: bL, + rules: [ { + [cg]: [ Y, { + [ch3]: r, + [ci]: [ { + [ch3]: c, + [ci]: [ { + [ch3]: l, + [ci]: bx + } ] + } ] + } ], + error: "Custom endpoint `{Endpoint}` was not a valid URI", + [cf]: e3 + }, { + [cg]: [ au, aj ], + rules: [ { + [cg]: bP, + rules: [ { + [cg]: bQ, + rules: [ { + [cg]: [ V, aa ], + error: "S3 Accelerate cannot be used in this region", + [cf]: e3 + }, { + [cg]: [ X, W, aw, ao, ax ], + endpoint: { + [cl]: "https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ X, W, aw, ao, az, aA ], + rules: [ { + endpoint: aB, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ X, W, aw, ao, az, aD ], + endpoint: aB, + [cf]: n2 + }, { + [cg]: [ aE, W, aw, ao, ax ], + endpoint: { + [cl]: "https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, W, aw, ao, az, aA ], + rules: [ { + endpoint: aF, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, W, aw, ao, az, aD ], + endpoint: aF, + [cf]: n2 + }, { + [cg]: [ X, aG, V, ao, ax ], + endpoint: { + [cl]: "https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ X, aG, V, ao, az, aA ], + rules: [ { + endpoint: aH, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ X, aG, V, ao, az, aD ], + endpoint: aH, + [cf]: n2 + }, { + [cg]: [ X, aG, aw, ao, ax ], + endpoint: { + [cl]: "https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ X, aG, aw, ao, az, aA ], + rules: [ { + endpoint: aI, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ X, aG, aw, ao, az, aD ], + endpoint: aI, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, Y, ad, ae, ax ], + endpoint: { + [cl]: B, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, Y, ad, aJ, ax ], + endpoint: { + [cl]: q, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, Y, ad, ae, az, aA ], + rules: [ { + [cg]: bR, + endpoint: aK, + [cf]: n2 + }, { + endpoint: aK, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, aG, aw, Y, ad, aJ, az, aA ], + rules: [ { + [cg]: bR, + endpoint: aL, + [cf]: n2 + }, aM ], + [cf]: o + }, { + [cg]: [ aE, aG, aw, Y, ad, ae, az, aD ], + endpoint: aK, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, Y, ad, aJ, az, aD ], + endpoint: aL, + [cf]: n2 + }, { + [cg]: [ aE, aG, V, ao, ax ], + endpoint: { + [cl]: C, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, aG, V, ao, az, aA ], + rules: [ { + [cg]: bR, + endpoint: aN, + [cf]: n2 + }, { + endpoint: aN, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, aG, V, ao, az, aD ], + endpoint: aN, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, ao, ax ], + endpoint: { + [cl]: D, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, aG, aw, ao, az, aA ], + rules: [ { + [cg]: bR, + endpoint: { + [cl]: D, + [cm]: aC, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: aO, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, aG, aw, ao, az, aD ], + endpoint: aO, + [cf]: n2 + } ], + [cf]: o + }, aP ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: [ Y, ad, { + [ch3]: g, + [ci]: [ { + [ch3]: h2, + [ci]: [ af, "scheme" ] + }, "http" ] + }, { + [ch3]: p, + [ci]: [ ac, b ] + }, au, aG, aE, aw ], + rules: [ { + [cg]: bP, + rules: [ { + [cg]: bQ, + rules: [ aM ], + [cf]: o + }, aP ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: [ au, { + [ch3]: E, + [ci]: by, + [ck]: F + } ], + rules: [ { + [cg]: [ { + [ch3]: h2, + [ci]: [ aQ, "resourceId[0]" ], + [ck]: G + }, { + [ch3]: r, + [ci]: [ { + [ch3]: g, + [ci]: [ aR, H ] + } ] + } ], + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ aS, I ] + } ], + rules: [ { + [cg]: bS, + rules: [ { + [cg]: bT, + rules: [ aU, aV, { + [cg]: bV, + rules: [ aW, { + [cg]: bW, + rules: [ aX, { + [cg]: bY, + rules: [ { + [cg]: bP, + rules: [ { + [cg]: bZ, + rules: [ { + [cg]: ca, + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ aZ, H ] + } ], + error: "Invalid ARN: Missing account id", + [cf]: e3 + }, { + [cg]: cb, + rules: [ { + [cg]: cc, + rules: [ { + [cg]: bB, + endpoint: { + [cl]: L, + [cm]: ba, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: bG, + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: ba, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: ba, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, bb ], + [cf]: o + }, bc ], + [cf]: o + }, bd ], + [cf]: o + }, be ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, bf ], + [cf]: o + }, { + error: "Invalid ARN: bucket ARN is missing a region", + [cf]: e3 + } ], + [cf]: o + }, bg ], + [cf]: o + }, { + error: "Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`", + [cf]: e3 + } ], + [cf]: o + }, { + [cg]: bS, + rules: [ { + [cg]: bT, + rules: [ { + [cg]: bV, + rules: [ { + [cg]: bS, + rules: [ { + [cg]: bV, + rules: [ aW, { + [cg]: bW, + rules: [ aX, { + [cg]: bY, + rules: [ { + [cg]: bP, + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ aY, "{partitionResult#name}" ] + } ], + rules: [ { + [cg]: ca, + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ aS, A ] + } ], + rules: [ { + [cg]: cb, + rules: [ { + [cg]: cc, + rules: [ { + [cg]: bA, + error: "Access Points do not support S3 Accelerate", + [cf]: e3 + }, { + [cg]: [ W, X ], + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: bh, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ W, aE ], + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: bh, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, X ], + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: bh, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, aE, Y, ad ], + endpoint: { + [cl]: L, + [cm]: bh, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, aE ], + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: bh, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, bb ], + [cf]: o + }, bc ], + [cf]: o + }, { + error: "Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}", + [cf]: e3 + } ], + [cf]: o + }, bd ], + [cf]: o + }, be ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, bf ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: [ { + [ch3]: x, + [ci]: [ aT, b ] + } ], + rules: [ { + [cg]: bz, + error: "S3 MRAP does not support dual-stack", + [cf]: e3 + }, { + [cg]: bG, + error: "S3 MRAP does not support FIPS", + [cf]: e3 + }, { + [cg]: bA, + error: "S3 MRAP does not support S3 Accelerate", + [cf]: e3 + }, { + [cg]: [ { + [ch3]: d3, + [ci]: [ { + [cj]: "DisableMultiRegionAccessPoints" + }, b ] + } ], + error: "Invalid configuration: Multi-Region Access Point ARNs are disabled.", + [cf]: e3 + }, { + [cg]: [ { + [ch3]: f3, + [ci]: bw, + [ck]: M + } ], + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ { + [ch3]: h2, + [ci]: [ { + [cj]: M + }, i ] + }, { + [ch3]: h2, + [ci]: [ aQ, "partition" ] + } ] + } ], + rules: [ { + endpoint: { + [cl]: "https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}", + [cm]: { + [co]: [ { + [cp]: b, + name: y, + [cq]: A, + [ct]: bO + } ] + }, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + error: "Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`", + [cf]: e3 + } ], + [cf]: o + } ], + [cf]: o + }, { + error: "Invalid Access Point Name", + [cf]: e3 + } ], + [cf]: o + }, bg ], + [cf]: o + }, { + [cg]: [ { + [ch3]: g, + [ci]: [ aS, z ] + } ], + rules: [ { + [cg]: bz, + error: "S3 Outposts does not support Dual-stack", + [cf]: e3 + }, { + [cg]: bG, + error: "S3 Outposts does not support FIPS", + [cf]: e3 + }, { + [cg]: bA, + error: "S3 Outposts does not support S3 Accelerate", + [cf]: e3 + }, { + [cg]: [ { + [ch3]: c, + [ci]: [ { + [ch3]: h2, + [ci]: [ aQ, "resourceId[4]" ] + } ] + } ], + error: "Invalid Arn: Outpost Access Point ARN contains sub resources", + [cf]: e3 + }, { + [cg]: [ { + [ch3]: h2, + [ci]: bU, + [ck]: w + } ], + rules: [ { + [cg]: bM, + rules: [ aX, { + [cg]: bY, + rules: [ { + [cg]: bP, + rules: [ { + [cg]: bZ, + rules: [ { + [cg]: ca, + rules: [ { + [cg]: cb, + rules: [ { + [cg]: [ { + [ch3]: h2, + [ci]: bX, + [ck]: N + } ], + rules: [ { + [cg]: [ { + [ch3]: h2, + [ci]: [ aQ, "resourceId[3]" ], + [ck]: K + } ], + rules: [ { + [cg]: [ { + [ch3]: g, + [ci]: [ { + [cj]: N + }, J ] + } ], + rules: [ { + [cg]: bB, + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}", + [cm]: bi, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: { + [cl]: "https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}", + [cm]: bi, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, { + error: "Expected an outpost type `accesspoint`, found {outpostType}", + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: expected an access point name", + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: Expected a 4-component resource", + [cf]: e3 + } ], + [cf]: o + }, bc ], + [cf]: o + }, bd ], + [cf]: o + }, be ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, { + error: "Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`", + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: The Outpost Id was not set", + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})", + [cf]: e3 + } ], + [cf]: o + }, { + error: "Invalid ARN: No ARN type specified", + [cf]: e3 + } ], + [cf]: o + }, { + [cg]: [ { + [ch3]: j, + [ci]: [ ac, 0, 4, a ], + [ck]: O + }, { + [ch3]: g, + [ci]: [ { + [cj]: O + }, "arn:" ] + }, { + [ch3]: r, + [ci]: [ { + [ch3]: c, + [ci]: [ bj ] + } ] + } ], + error: "Invalid ARN: `{Bucket}` was not a valid ARN", + [cf]: e3 + }, { + [cg]: [ { + [ch3]: d3, + [ci]: [ av, b ] + }, bj ], + error: "Path-style addressing cannot be used with ARN buckets", + [cf]: e3 + }, { + [cg]: bE, + rules: [ { + [cg]: bP, + rules: [ { + [cg]: [ aw ], + rules: [ { + [cg]: [ X, ao, W, ax ], + endpoint: { + [cl]: "https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ X, ao, W, az, aA ], + rules: [ { + endpoint: bk, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ X, ao, W, az, aD ], + endpoint: bk, + [cf]: n2 + }, { + [cg]: [ aE, ao, W, ax ], + endpoint: { + [cl]: "https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, ao, W, az, aA ], + rules: [ { + endpoint: bl, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, ao, W, az, aD ], + endpoint: bl, + [cf]: n2 + }, { + [cg]: [ X, ao, aG, ax ], + endpoint: { + [cl]: "https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ X, ao, aG, az, aA ], + rules: [ { + endpoint: bm, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ X, ao, aG, az, aD ], + endpoint: bm, + [cf]: n2 + }, { + [cg]: [ aE, Y, ad, aG, ax ], + endpoint: { + [cl]: P, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, Y, ad, aG, az, aA ], + rules: [ { + [cg]: bR, + endpoint: bn, + [cf]: n2 + }, { + endpoint: bn, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, Y, ad, aG, az, aD ], + endpoint: bn, + [cf]: n2 + }, { + [cg]: [ aE, ao, aG, ax ], + endpoint: { + [cl]: Q, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aE, ao, aG, az, aA ], + rules: [ { + [cg]: bR, + endpoint: { + [cl]: Q, + [cm]: aC, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: bo, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aE, ao, aG, az, aD ], + endpoint: bo, + [cf]: n2 + } ], + [cf]: o + }, { + error: "Path-style addressing cannot be used with S3 Accelerate", + [cf]: e3 + } ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: [ { + [ch3]: c, + [ci]: [ bp ] + }, { + [ch3]: d3, + [ci]: [ bp, b ] + } ], + rules: [ { + [cg]: bP, + rules: [ { + [cg]: cd, + rules: [ aU, aV, { + [cg]: bB, + endpoint: { + [cl]: s, + [cm]: bq, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: bG, + endpoint: { + [cl]: "https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}", + [cm]: bq, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: { + [cl]: "https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}", + [cm]: bq, + [cs]: ai + }, + [cf]: n2 + } ], + [cf]: o + }, aP ], + [cf]: o + } ], + [cf]: o + }, { + [cg]: [ aq ], + rules: [ { + [cg]: bP, + rules: [ { + [cg]: cd, + rules: [ { + [cg]: [ W, X, ao, ax ], + endpoint: { + [cl]: "https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ W, X, ao, az, aA ], + rules: [ { + endpoint: br, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ W, X, ao, az, aD ], + endpoint: br, + [cf]: n2 + }, { + [cg]: [ W, aE, ao, ax ], + endpoint: { + [cl]: "https://s3-fips.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ W, aE, ao, az, aA ], + rules: [ { + endpoint: bs, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ W, aE, ao, az, aD ], + endpoint: bs, + [cf]: n2 + }, { + [cg]: [ aG, X, ao, ax ], + endpoint: { + [cl]: "https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}", + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, X, ao, az, aA ], + rules: [ { + endpoint: bt, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aG, X, ao, az, aD ], + endpoint: bt, + [cf]: n2 + }, { + [cg]: [ aG, aE, Y, ad, ax ], + endpoint: { + [cl]: s, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, aE, Y, ad, az, aA ], + rules: [ { + [cg]: bR, + endpoint: bu, + [cf]: n2 + }, { + endpoint: bu, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aG, aE, Y, ad, az, aD ], + endpoint: bu, + [cf]: n2 + }, { + [cg]: [ aG, aE, ao, ax ], + endpoint: { + [cl]: R, + [cm]: ay, + [cs]: ai + }, + [cf]: n2 + }, { + [cg]: [ aG, aE, ao, az, aA ], + rules: [ { + [cg]: bR, + endpoint: { + [cl]: R, + [cm]: aC, + [cs]: ai + }, + [cf]: n2 + }, { + endpoint: bv, + [cf]: n2 + } ], + [cf]: o + }, { + [cg]: [ aG, aE, ao, az, aD ], + endpoint: bv, + [cf]: n2 + } ], + [cf]: o + }, aP ], + [cf]: o + } ], + [cf]: o + } ], + [cf]: o + }, { + error: "A region must be set when sending requests to S3.", + [cf]: e3 + } ] +}, ruleSet = _data, defaultEndpointResolver = (_, ee = {}) => resolveEndpoint(ruleSet, { + endpointParams: _, + logger: ee.logger +}); + +customEndpointFunctions.aws = awsEndpointFunctions; + +var getRuntimeConfig = _ => { + var ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye; + return { + apiVersion: "2006-03-01", + base64Decoder: null != (ee = null == _ ? void 0 : _.base64Decoder) ? ee : fromBase64, + base64Encoder: null != (ne = null == _ ? void 0 : _.base64Encoder) ? ne : toBase64, + disableHostPrefix: null != (ie = null == _ ? void 0 : _.disableHostPrefix) ? ie : false, + endpointProvider: null != (re = null == _ ? void 0 : _.endpointProvider) ? re : defaultEndpointResolver, + extensions: null != (se = null == _ ? void 0 : _.extensions) ? se : [], + getAwsChunkedEncodingStream: null != (oe = null == _ ? void 0 : _.getAwsChunkedEncodingStream) ? oe : getAwsChunkedEncodingStream, + logger: null != (le = null == _ ? void 0 : _.logger) ? le : new NoOpLogger, + sdkStreamMixin: null != (ue = null == _ ? void 0 : _.sdkStreamMixin) ? ue : sdkStreamMixin, + serviceId: null != (de = null == _ ? void 0 : _.serviceId) ? de : "S3", + signerConstructor: null != (fe = null == _ ? void 0 : _.signerConstructor) ? fe : SignatureV4MultiRegion, + signingEscapePath: null != (he = null == _ ? void 0 : _.signingEscapePath) ? he : false, + urlParser: null != (pe = null == _ ? void 0 : _.urlParser) ? pe : parseUrl, + useArnRegion: null != (ge = null == _ ? void 0 : _.useArnRegion) ? ge : false, + utf8Decoder: null != (me = null == _ ? void 0 : _.utf8Decoder) ? me : fromUtf8, + utf8Encoder: null != (ye = null == _ ? void 0 : _.utf8Encoder) ? ye : toUtf8 + }; +}, import_bowser2 = __toESM(require_es5()), DEFAULTS_MODE_OPTIONS = [ "in-region", "cross-region", "mobile", "standard", "legacy" ], resolveDefaultsModeConfig = ({defaultsMode: _} = {}) => memoize((async () => { + const ee = "function" == typeof _ ? await _() : _; + switch (null == ee ? void 0 : ee.toLowerCase()) { + case "auto": + return Promise.resolve(isMobileBrowser() ? "mobile" : "standard"); + + case "mobile": + case "in-region": + case "cross-region": + case "standard": + case "legacy": + return Promise.resolve(null == ee ? void 0 : ee.toLocaleLowerCase()); + + case void 0: + return Promise.resolve("legacy"); + + default: + throw new Error(`Invalid parameter for "defaultsMode", expect ${DEFAULTS_MODE_OPTIONS.join(", ")}, got ${ee}`); + } +})), isMobileBrowser = () => { + var _, ee; + const ne = "undefined" != typeof window && (null == (_ = null == window ? void 0 : window.navigator) ? void 0 : _.userAgent) ? import_bowser2.default.parse(window.navigator.userAgent) : void 0, ie = null == (ee = null == ne ? void 0 : ne.platform) ? void 0 : ee.type; + return "tablet" === ie || "mobile" === ie; +}, getRuntimeConfig2 = _ => { + var ee, ne, ie, re, se, oe, le, ue, de, fe, he, pe, ge, me, ye; + const Se = resolveDefaultsModeConfig(_), defaultConfigProvider = () => Se().then(loadConfigsForDefaultMode), Ee = getRuntimeConfig(_); + return { + ...Ee, + ..._, + runtime: "browser", + defaultsMode: Se, + bodyLengthChecker: null != (ee = null == _ ? void 0 : _.bodyLengthChecker) ? ee : calculateBodyLength, + credentialDefaultProvider: null != (ne = null == _ ? void 0 : _.credentialDefaultProvider) ? ne : _ => () => Promise.reject(new Error("Credential is missing")), + defaultUserAgentProvider: null != (ie = null == _ ? void 0 : _.defaultUserAgentProvider) ? ie : defaultUserAgent({ + serviceId: Ee.serviceId, + clientVersion: package_default.version + }), + eventStreamSerdeProvider: null != (re = null == _ ? void 0 : _.eventStreamSerdeProvider) ? re : eventStreamSerdeProvider, + maxAttempts: null != (se = null == _ ? void 0 : _.maxAttempts) ? se : DEFAULT_MAX_ATTEMPTS, + md5: null != (oe = null == _ ? void 0 : _.md5) ? oe : Md57, + region: null != (le = null == _ ? void 0 : _.region) ? le : invalidProvider("Region is missing"), + requestHandler: FetchHttpHandler.create(null != (ue = null == _ ? void 0 : _.requestHandler) ? ue : defaultConfigProvider), + retryMode: null != (de = null == _ ? void 0 : _.retryMode) ? de : async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE, + sha1: null != (fe = null == _ ? void 0 : _.sha1) ? fe : Sha12, + sha256: null != (he = null == _ ? void 0 : _.sha256) ? he : Sha2563, + streamCollector: null != (pe = null == _ ? void 0 : _.streamCollector) ? pe : streamCollector, + streamHasher: null != (ge = null == _ ? void 0 : _.streamHasher) ? ge : blobHasher, + useDualstackEndpoint: null != (me = null == _ ? void 0 : _.useDualstackEndpoint) ? me : () => Promise.resolve(DEFAULT_USE_DUALSTACK_ENDPOINT), + useFipsEndpoint: null != (ye = null == _ ? void 0 : _.useFipsEndpoint) ? ye : () => Promise.resolve(DEFAULT_USE_FIPS_ENDPOINT) + }; +}, getAwsRegionExtensionConfiguration = _ => { + let runtimeConfigRegion = async () => { + if (void 0 === _.region) throw new Error("Region is missing from runtimeConfig"); + const ee = _.region; + if ("string" == typeof ee) return ee; else return ee(); + }; + return { + setRegion(_) { + runtimeConfigRegion = _; + }, + region: () => runtimeConfigRegion + }; +}, resolveAwsRegionExtensionConfiguration = _ => ({ + region: _.region() +}), asPartial = _ => _, resolveRuntimeExtensions = (_, ee) => { + const ne = { + ...asPartial(getAwsRegionExtensionConfiguration(_)), + ...asPartial(getDefaultExtensionConfiguration(_)), + ...asPartial(getHttpHandlerExtensionConfiguration(_)) + }; + ee.forEach((_ => _.configure(ne))); + return { + ..._, + ...resolveAwsRegionExtensionConfiguration(ne), + ...resolveDefaultRuntimeConfig(ne), + ...resolveHttpHandlerRuntimeConfig(ne) + }; +}, S3Client = class extends Client { + constructor(...[_]) { + const ee = getRuntimeConfig2(_ || {}), ne = resolveClientEndpointParameters(ee), ie = resolveRegionConfig(ne), re = resolveEndpointConfig(ie), se = resolveHostHeaderConfig(resolveRetryConfig(re)), oe = resolveAwsAuthConfig(se), le = resolveUserAgentConfig(resolveS3Config(oe, { + session: [ () => this, CreateSessionCommand ] + })), ue = resolveEventStreamSerdeConfig(le), de = resolveRuntimeExtensions(ue, (null == _ ? void 0 : _.extensions) || []); + super(de); + this.config = de; + this.middlewareStack.use(getRetryPlugin(this.config)); + this.middlewareStack.use(getContentLengthPlugin(this.config)); + this.middlewareStack.use(getHostHeaderPlugin(this.config)); + this.middlewareStack.use(getLoggerPlugin(this.config)); + this.middlewareStack.use(getRecursionDetectionPlugin(this.config)); + this.middlewareStack.use(getAwsAuthPlugin(this.config)); + this.middlewareStack.use(getValidateBucketNamePlugin(this.config)); + this.middlewareStack.use(getAddExpectContinuePlugin(this.config)); + this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config)); + this.middlewareStack.use(getS3ExpressPlugin(this.config)); + this.middlewareStack.use(getUserAgentPlugin(this.config)); + } + destroy() { + super.destroy(); + } +}, AbortMultipartUploadCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "AbortMultipartUpload", {}).n("S3Client", "AbortMultipartUploadCommand").f(void 0, void 0).ser(se_AbortMultipartUploadCommand).de(de_AbortMultipartUploadCommand).build()){}; + +function ssecMiddleware(_) { + return ee => async ne => { + const ie = { + ...ne.input + }, re = [ { + target: "SSECustomerKey", + hash: "SSECustomerKeyMD5" + }, { + target: "CopySourceSSECustomerKey", + hash: "CopySourceSSECustomerKeyMD5" + } ]; + for (const ee of re) { + const ne = ie[ee.target]; + if (ne) { + let re; + if ("string" == typeof ne) if (isValidBase64EncodedSSECustomerKey(ne, _)) re = _.base64Decoder(ne); else { + re = _.utf8Decoder(ne); + ie[ee.target] = _.base64Encoder(re); + } else { + re = ArrayBuffer.isView(ne) ? new Uint8Array(ne.buffer, ne.byteOffset, ne.byteLength) : new Uint8Array(ne); + ie[ee.target] = _.base64Encoder(re); + } + const se = new _.md5; + se.update(re); + ie[ee.hash] = _.base64Encoder(await se.digest()); + } + } + return ee({ + ...ne, + input: ie + }); + }; +} + +var ssecMiddlewareOptions = { + name: "ssecMiddleware", + step: "initialize", + tags: [ "SSE" ], + override: true +}, getSsecPlugin = _ => ({ + applyToStack: ee => { + ee.add(ssecMiddleware(_), ssecMiddlewareOptions); + } +}); + +function isValidBase64EncodedSSECustomerKey(_, ee) { + if (!/^(?:[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(_)) return false; + try { + return 32 === ee.base64Decoder(_).length; + } catch (_) { + return false; + } +} + +var CompleteMultipartUploadCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getThrow200ExceptionsPlugin(ne), getSsecPlugin(ne) ]; +})).s("AmazonS3", "CompleteMultipartUpload", {}).n("S3Client", "CompleteMultipartUploadCommand").f(CompleteMultipartUploadRequestFilterSensitiveLog, CompleteMultipartUploadOutputFilterSensitiveLog).ser(se_CompleteMultipartUploadCommand).de(de_CompleteMultipartUploadCommand).build()){}, CopyObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + DisableS3ExpressSessionAuth: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + }, + CopySource: { + type: "contextParams", + name: "CopySource" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getThrow200ExceptionsPlugin(ne), getSsecPlugin(ne) ]; +})).s("AmazonS3", "CopyObject", {}).n("S3Client", "CopyObjectCommand").f(CopyObjectRequestFilterSensitiveLog, CopyObjectOutputFilterSensitiveLog).ser(se_CopyObjectCommand).de(de_CopyObjectCommand).build()){}; + +function locationConstraintMiddleware(_) { + return ee => async ne => { + const {CreateBucketConfiguration: ie} = ne.input, re = await _.region(); + if (!(null == ie ? void 0 : ie.LocationConstraint) && !(null == ie ? void 0 : ie.Location)) ne = { + ...ne, + input: { + ...ne.input, + CreateBucketConfiguration: "us-east-1" === re ? void 0 : { + LocationConstraint: re + } + } + }; + return ee(ne); + }; +} + +var ChecksumAlgorithm, ChecksumLocation, locationConstraintMiddlewareOptions = { + step: "initialize", + tags: [ "LOCATION_CONSTRAINT", "CREATE_BUCKET_CONFIGURATION" ], + name: "locationConstraintMiddleware", + override: true +}, getLocationConstraintPlugin = _ => ({ + applyToStack: ee => { + ee.add(locationConstraintMiddleware(_), locationConstraintMiddlewareOptions); + } +}), CreateBucketCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + DisableAccessPoints: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getLocationConstraintPlugin(ne) ]; +})).s("AmazonS3", "CreateBucket", {}).n("S3Client", "CreateBucketCommand").f(void 0, void 0).ser(se_CreateBucketCommand).de(de_CreateBucketCommand).build()){}, CreateMultipartUploadCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne) ]; +})).s("AmazonS3", "CreateMultipartUpload", {}).n("S3Client", "CreateMultipartUploadCommand").f(CreateMultipartUploadRequestFilterSensitiveLog, CreateMultipartUploadOutputFilterSensitiveLog).ser(se_CreateMultipartUploadCommand).de(de_CreateMultipartUploadCommand).build()){}, DeleteBucketAnalyticsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketAnalyticsConfiguration", {}).n("S3Client", "DeleteBucketAnalyticsConfigurationCommand").f(void 0, void 0).ser(se_DeleteBucketAnalyticsConfigurationCommand).de(de_DeleteBucketAnalyticsConfigurationCommand).build()){}, DeleteBucketCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucket", {}).n("S3Client", "DeleteBucketCommand").f(void 0, void 0).ser(se_DeleteBucketCommand).de(de_DeleteBucketCommand).build()){}, DeleteBucketCorsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketCors", {}).n("S3Client", "DeleteBucketCorsCommand").f(void 0, void 0).ser(se_DeleteBucketCorsCommand).de(de_DeleteBucketCorsCommand).build()){}, DeleteBucketEncryptionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketEncryption", {}).n("S3Client", "DeleteBucketEncryptionCommand").f(void 0, void 0).ser(se_DeleteBucketEncryptionCommand).de(de_DeleteBucketEncryptionCommand).build()){}, DeleteBucketIntelligentTieringConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketIntelligentTieringConfiguration", {}).n("S3Client", "DeleteBucketIntelligentTieringConfigurationCommand").f(void 0, void 0).ser(se_DeleteBucketIntelligentTieringConfigurationCommand).de(de_DeleteBucketIntelligentTieringConfigurationCommand).build()){}, DeleteBucketInventoryConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketInventoryConfiguration", {}).n("S3Client", "DeleteBucketInventoryConfigurationCommand").f(void 0, void 0).ser(se_DeleteBucketInventoryConfigurationCommand).de(de_DeleteBucketInventoryConfigurationCommand).build()){}, DeleteBucketLifecycleCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketLifecycle", {}).n("S3Client", "DeleteBucketLifecycleCommand").f(void 0, void 0).ser(se_DeleteBucketLifecycleCommand).de(de_DeleteBucketLifecycleCommand).build()){}, DeleteBucketMetricsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketMetricsConfiguration", {}).n("S3Client", "DeleteBucketMetricsConfigurationCommand").f(void 0, void 0).ser(se_DeleteBucketMetricsConfigurationCommand).de(de_DeleteBucketMetricsConfigurationCommand).build()){}, DeleteBucketOwnershipControlsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketOwnershipControls", {}).n("S3Client", "DeleteBucketOwnershipControlsCommand").f(void 0, void 0).ser(se_DeleteBucketOwnershipControlsCommand).de(de_DeleteBucketOwnershipControlsCommand).build()){}, DeleteBucketPolicyCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketPolicy", {}).n("S3Client", "DeleteBucketPolicyCommand").f(void 0, void 0).ser(se_DeleteBucketPolicyCommand).de(de_DeleteBucketPolicyCommand).build()){}, DeleteBucketReplicationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketReplication", {}).n("S3Client", "DeleteBucketReplicationCommand").f(void 0, void 0).ser(se_DeleteBucketReplicationCommand).de(de_DeleteBucketReplicationCommand).build()){}, DeleteBucketTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketTagging", {}).n("S3Client", "DeleteBucketTaggingCommand").f(void 0, void 0).ser(se_DeleteBucketTaggingCommand).de(de_DeleteBucketTaggingCommand).build()){}, DeleteBucketWebsiteCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteBucketWebsite", {}).n("S3Client", "DeleteBucketWebsiteCommand").f(void 0, void 0).ser(se_DeleteBucketWebsiteCommand).de(de_DeleteBucketWebsiteCommand).build()){}, DeleteObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteObject", {}).n("S3Client", "DeleteObjectCommand").f(void 0, void 0).ser(se_DeleteObjectCommand).de(de_DeleteObjectCommand).build()){}; + +(function(_) { + _["MD5"] = "MD5"; + _["CRC32"] = "CRC32"; + _["CRC32C"] = "CRC32C"; + _["SHA1"] = "SHA1"; + _["SHA256"] = "SHA256"; +})(ChecksumAlgorithm || (ChecksumAlgorithm = {})); + +(function(_) { + _["HEADER"] = "header"; + _["TRAILER"] = "trailer"; +})(ChecksumLocation || (ChecksumLocation = {})); + +var DEFAULT_CHECKSUM_ALGORITHM = ChecksumAlgorithm.MD5, S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM = ChecksumAlgorithm.CRC32, CLIENT_SUPPORTED_ALGORITHMS = [ ChecksumAlgorithm.CRC32, ChecksumAlgorithm.CRC32C, ChecksumAlgorithm.SHA1, ChecksumAlgorithm.SHA256 ], PRIORITY_ORDER_ALGORITHMS = [ ChecksumAlgorithm.CRC32, ChecksumAlgorithm.CRC32C, ChecksumAlgorithm.SHA1, ChecksumAlgorithm.SHA256 ], getChecksumAlgorithmForRequest = (_, {requestChecksumRequired: ee, requestAlgorithmMember: ne}, ie) => { + const re = ie ? S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM : DEFAULT_CHECKSUM_ALGORITHM; + if (!ne || !_[ne]) return ee ? re : void 0; + const se = _[ne]; + if (!CLIENT_SUPPORTED_ALGORITHMS.includes(se)) throw new Error(`The checksum algorithm "${se}" is not supported by the client. Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`); + return se; +}, getChecksumLocationName = _ => _ === ChecksumAlgorithm.MD5 ? "content-md5" : `x-amz-checksum-${_.toLowerCase()}`, hasHeader2 = (_, ee) => { + const ne = _.toLowerCase(); + for (const _ of Object.keys(ee)) if (ne === _.toLowerCase()) return true; + return false; +}, isStreaming = _ => void 0 !== _ && "string" != typeof _ && !ArrayBuffer.isView(_) && !isArrayBuffer(_), AwsCrc32c = function() { + function AwsCrc32c2() { + this.crc32c = new Crc32c; + } + AwsCrc32c2.prototype.update = function(_) { + if (!isEmptyData2(_)) this.crc32c.update(convertToBuffer2(_)); + }; + AwsCrc32c2.prototype.digest = function() { + return __awaiter(this, void 0, void 0, (function() { + return __generator(this, (function(_) { + return [ 2, numToUint8(this.crc32c.digest()) ]; + })); + })); + }; + AwsCrc32c2.prototype.reset = function() { + this.crc32c = new Crc32c; + }; + return AwsCrc32c2; +}(), Crc32c = function() { + function Crc32c2() { + this.checksum = 4294967295; + } + Crc32c2.prototype.update = function(_) { + var ee, ne; + try { + for (var ie = __values(_), re = ie.next(); !re.done; re = ie.next()) { + var se = re.value; + this.checksum = this.checksum >>> 8 ^ lookupTable2[255 & (this.checksum ^ se)]; + } + } catch (_) { + ee = { + error: _ + }; + } finally { + try { + if (re && !re.done && (ne = ie.return)) ne.call(ie); + } finally { + if (ee) throw ee.error; + } + } + return this; + }; + Crc32c2.prototype.digest = function() { + return (4294967295 ^ this.checksum) >>> 0; + }; + return Crc32c2; +}(), a_lookupTable = [ 0, 4067132163, 3778769143, 324072436, 3348797215, 904991772, 648144872, 3570033899, 2329499855, 2024987596, 1809983544, 2575936315, 1296289744, 3207089363, 2893594407, 1578318884, 274646895, 3795141740, 4049975192, 51262619, 3619967088, 632279923, 922689671, 3298075524, 2592579488, 1760304291, 2075979607, 2312596564, 1562183871, 2943781820, 3156637768, 1313733451, 549293790, 3537243613, 3246849577, 871202090, 3878099393, 357341890, 102525238, 4101499445, 2858735121, 1477399826, 1264559846, 3107202533, 1845379342, 2677391885, 2361733625, 2125378298, 820201905, 3263744690, 3520608582, 598981189, 4151959214, 85089709, 373468761, 3827903834, 3124367742, 1213305469, 1526817161, 2842354314, 2107672161, 2412447074, 2627466902, 1861252501, 1098587580, 3004210879, 2688576843, 1378610760, 2262928035, 1955203488, 1742404180, 2511436119, 3416409459, 969524848, 714683780, 3639785095, 205050476, 4266873199, 3976438427, 526918040, 1361435347, 2739821008, 2954799652, 1114974503, 2529119692, 1691668175, 2005155131, 2247081528, 3690758684, 697762079, 986182379, 3366744552, 476452099, 3993867776, 4250756596, 255256311, 1640403810, 2477592673, 2164122517, 1922457750, 2791048317, 1412925310, 1197962378, 3037525897, 3944729517, 427051182, 170179418, 4165941337, 746937522, 3740196785, 3451792453, 1070968646, 1905808397, 2213795598, 2426610938, 1657317369, 3053634322, 1147748369, 1463399397, 2773627110, 4215344322, 153784257, 444234805, 3893493558, 1021025245, 3467647198, 3722505002, 797665321, 2197175160, 1889384571, 1674398607, 2443626636, 1164749927, 3070701412, 2757221520, 1446797203, 137323447, 4198817972, 3910406976, 461344835, 3484808360, 1037989803, 781091935, 3705997148, 2460548119, 1623424788, 1939049696, 2180517859, 1429367560, 2807687179, 3020495871, 1180866812, 410100952, 3927582683, 4182430767, 186734380, 3756733383, 763408580, 1053836080, 3434856499, 2722870694, 1344288421, 1131464017, 2971354706, 1708204729, 2545590714, 2229949006, 1988219213, 680717673, 3673779818, 3383336350, 1002577565, 4010310262, 493091189, 238226049, 4233660802, 2987750089, 1082061258, 1395524158, 2705686845, 1972364758, 2279892693, 2494862625, 1725896226, 952904198, 3399985413, 3656866545, 731699698, 4283874585, 222117402, 510512622, 3959836397, 3280807620, 837199303, 582374963, 3504198960, 68661723, 4135334616, 3844915500, 390545967, 1230274059, 3141532936, 2825850620, 1510247935, 2395924756, 2091215383, 1878366691, 2644384480, 3553878443, 565732008, 854102364, 3229815391, 340358836, 3861050807, 4117890627, 119113024, 1493875044, 2875275879, 3090270611, 1247431312, 2660249211, 1828433272, 2141937292, 2378227087, 3811616794, 291187481, 34330861, 4032846830, 615137029, 3603020806, 3314634738, 939183345, 1776939221, 2609017814, 2295496738, 2058945313, 2926798794, 1545135305, 1330124605, 3173225534, 4084100981, 17165430, 307568514, 3762199681, 888469610, 3332340585, 3587147933, 665062302, 2042050490, 2346497209, 2559330125, 1793573966, 3190661285, 1279665062, 1595330642, 2910671697 ], lookupTable2 = uint32ArrayFrom(a_lookupTable), selectChecksumAlgorithmFunction = (_, ee) => ({ + [ChecksumAlgorithm.MD5]: ee.md5, + [ChecksumAlgorithm.CRC32]: AwsCrc32, + [ChecksumAlgorithm.CRC32C]: AwsCrc32c, + [ChecksumAlgorithm.SHA1]: ee.sha1, + [ChecksumAlgorithm.SHA256]: ee.sha256 +}[_]), stringHasher = (_, ee) => { + const ne = new _; + ne.update(toUint8Array(ee || "")); + return ne.digest(); +}, flexibleChecksumsMiddlewareOptions = { + name: "flexibleChecksumsMiddleware", + step: "build", + tags: [ "BODY_CHECKSUM" ], + override: true +}, flexibleChecksumsMiddleware = (_, ee) => (ne, ie) => async re => { + if (!HttpRequest.isInstance(re.request)) return ne(re); + const {request: se} = re, {body: oe, headers: le} = se, {base64Encoder: ue, streamHasher: de} = _, {input: fe, requestChecksumRequired: he, requestAlgorithmMember: pe} = ee, ge = getChecksumAlgorithmForRequest(fe, { + requestChecksumRequired: he, + requestAlgorithmMember: pe + }, !!ie.isS3ExpressBucket); + let me = oe, ye = le; + if (ge) { + const ee = getChecksumLocationName(ge), ne = selectChecksumAlgorithmFunction(ge, _); + if (isStreaming(oe)) { + const {getAwsChunkedEncodingStream: ie, bodyLengthChecker: re} = _; + me = ie(oe, { + base64Encoder: ue, + bodyLengthChecker: re, + checksumLocationName: ee, + checksumAlgorithmFn: ne, + streamHasher: de + }); + ye = { + ...le, + "content-encoding": le["content-encoding"] ? `${le["content-encoding"]},aws-chunked` : "aws-chunked", + "transfer-encoding": "chunked", + "x-amz-decoded-content-length": le["content-length"], + "x-amz-content-sha256": "STREAMING-UNSIGNED-PAYLOAD-TRAILER", + "x-amz-trailer": ee + }; + delete ye["content-length"]; + } else if (!hasHeader2(ee, le)) { + const _ = await stringHasher(ne, oe); + ye = { + ...le, + [ee]: ue(_) + }; + } + } + return await ne({ + ...re, + request: { + ...se, + headers: ye, + body: me + } + }); +}, getChecksumAlgorithmListForResponse = (_ = []) => { + const ee = []; + for (const ne of PRIORITY_ORDER_ALGORITHMS) if (_.includes(ne) && CLIENT_SUPPORTED_ALGORITHMS.includes(ne)) ee.push(ne); + return ee; +}, isChecksumWithPartNumber = _ => { + const ee = _.lastIndexOf("-"); + if (-1 !== ee) { + const ne = _.slice(ee + 1); + if (!ne.startsWith("0")) { + const _ = parseInt(ne, 10); + if (!isNaN(_) && _ >= 1 && _ <= 1e4) return true; + } + } + return false; +}; + +function createReadStreamOnBuffer(_) { + return new Blob([ _ ]).stream(); +} + +var getChecksum = async (_, {streamHasher: ee, checksumAlgorithmFn: ne, base64Encoder: ie}) => { + const re = isStreaming(_) ? ee(ne, _) : stringHasher(ne, _); + return ie(await re); +}, validateChecksumFromResponse = async (_, {config: ee, responseAlgorithms: ne}) => { + const ie = getChecksumAlgorithmListForResponse(ne), {body: re, headers: se} = _; + for (const _ of ie) { + const ne = getChecksumLocationName(_), ie = se[ne]; + if (ie) { + const se = selectChecksumAlgorithmFunction(_, ee), {streamHasher: oe, base64Encoder: le} = ee, ue = await getChecksum(re, { + streamHasher: oe, + checksumAlgorithmFn: se, + base64Encoder: le + }); + if (ue === ie) break; + throw new Error(`Checksum mismatch: expected "${ue}" but received "${ie}" in response header "${ne}".`); + } + } +}, flexibleChecksumsResponseMiddlewareOptions = { + name: "flexibleChecksumsResponseMiddleware", + toMiddleware: "deserializerMiddleware", + relation: "after", + tags: [ "BODY_CHECKSUM" ], + override: true +}, flexibleChecksumsResponseMiddleware = (_, ee) => (ne, ie) => async re => { + if (!HttpRequest.isInstance(re.request)) return ne(re); + const se = re.input, oe = await ne(re), le = oe.response; + let ue; + const {requestValidationModeMember: de, responseAlgorithms: fe} = ee; + if (de && "ENABLED" === se[de]) { + const {clientName: ee, commandName: ne} = ie; + if ("S3Client" === ee && "GetObjectCommand" === ne && getChecksumAlgorithmListForResponse(fe).every((_ => { + const ee = getChecksumLocationName(_), ne = le.headers[ee]; + return !ne || isChecksumWithPartNumber(ne); + }))) return oe; + const re = isStreaming(le.body); + if (re) { + ue = await _.streamCollector(le.body); + le.body = createReadStreamOnBuffer(ue); + } + await validateChecksumFromResponse(oe.response, { + config: _, + responseAlgorithms: fe + }); + if (re && ue) le.body = createReadStreamOnBuffer(ue); + } + return oe; +}, getFlexibleChecksumsPlugin = (_, ee) => ({ + applyToStack: ne => { + ne.add(flexibleChecksumsMiddleware(_, ee), flexibleChecksumsMiddlewareOptions); + ne.addRelativeTo(flexibleChecksumsResponseMiddleware(_, ee), flexibleChecksumsResponseMiddlewareOptions); + } +}), DeleteObjectsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "DeleteObjects", {}).n("S3Client", "DeleteObjectsCommand").f(void 0, void 0).ser(se_DeleteObjectsCommand).de(de_DeleteObjectsCommand).build()){}, DeleteObjectTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeleteObjectTagging", {}).n("S3Client", "DeleteObjectTaggingCommand").f(void 0, void 0).ser(se_DeleteObjectTaggingCommand).de(de_DeleteObjectTaggingCommand).build()){}, DeletePublicAccessBlockCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "DeletePublicAccessBlock", {}).n("S3Client", "DeletePublicAccessBlockCommand").f(void 0, void 0).ser(se_DeletePublicAccessBlockCommand).de(de_DeletePublicAccessBlockCommand).build()){}, GetBucketAccelerateConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketAccelerateConfiguration", {}).n("S3Client", "GetBucketAccelerateConfigurationCommand").f(void 0, void 0).ser(se_GetBucketAccelerateConfigurationCommand).de(de_GetBucketAccelerateConfigurationCommand).build()){}, GetBucketAclCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketAcl", {}).n("S3Client", "GetBucketAclCommand").f(void 0, void 0).ser(se_GetBucketAclCommand).de(de_GetBucketAclCommand).build()){}, GetBucketAnalyticsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketAnalyticsConfiguration", {}).n("S3Client", "GetBucketAnalyticsConfigurationCommand").f(void 0, void 0).ser(se_GetBucketAnalyticsConfigurationCommand).de(de_GetBucketAnalyticsConfigurationCommand).build()){}, GetBucketCorsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketCors", {}).n("S3Client", "GetBucketCorsCommand").f(void 0, void 0).ser(se_GetBucketCorsCommand).de(de_GetBucketCorsCommand).build()){}, GetBucketEncryptionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketEncryption", {}).n("S3Client", "GetBucketEncryptionCommand").f(void 0, GetBucketEncryptionOutputFilterSensitiveLog).ser(se_GetBucketEncryptionCommand).de(de_GetBucketEncryptionCommand).build()){}, GetBucketIntelligentTieringConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketIntelligentTieringConfiguration", {}).n("S3Client", "GetBucketIntelligentTieringConfigurationCommand").f(void 0, void 0).ser(se_GetBucketIntelligentTieringConfigurationCommand).de(de_GetBucketIntelligentTieringConfigurationCommand).build()){}, GetBucketInventoryConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketInventoryConfiguration", {}).n("S3Client", "GetBucketInventoryConfigurationCommand").f(void 0, GetBucketInventoryConfigurationOutputFilterSensitiveLog).ser(se_GetBucketInventoryConfigurationCommand).de(de_GetBucketInventoryConfigurationCommand).build()){}, GetBucketLifecycleConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketLifecycleConfiguration", {}).n("S3Client", "GetBucketLifecycleConfigurationCommand").f(void 0, void 0).ser(se_GetBucketLifecycleConfigurationCommand).de(de_GetBucketLifecycleConfigurationCommand).build()){}, GetBucketLocationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketLocation", {}).n("S3Client", "GetBucketLocationCommand").f(void 0, void 0).ser(se_GetBucketLocationCommand).de(de_GetBucketLocationCommand).build()){}, GetBucketLoggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketLogging", {}).n("S3Client", "GetBucketLoggingCommand").f(void 0, void 0).ser(se_GetBucketLoggingCommand).de(de_GetBucketLoggingCommand).build()){}, GetBucketMetricsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketMetricsConfiguration", {}).n("S3Client", "GetBucketMetricsConfigurationCommand").f(void 0, void 0).ser(se_GetBucketMetricsConfigurationCommand).de(de_GetBucketMetricsConfigurationCommand).build()){}, GetBucketNotificationConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketNotificationConfiguration", {}).n("S3Client", "GetBucketNotificationConfigurationCommand").f(void 0, void 0).ser(se_GetBucketNotificationConfigurationCommand).de(de_GetBucketNotificationConfigurationCommand).build()){}, GetBucketOwnershipControlsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketOwnershipControls", {}).n("S3Client", "GetBucketOwnershipControlsCommand").f(void 0, void 0).ser(se_GetBucketOwnershipControlsCommand).de(de_GetBucketOwnershipControlsCommand).build()){}, GetBucketPolicyCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketPolicy", {}).n("S3Client", "GetBucketPolicyCommand").f(void 0, void 0).ser(se_GetBucketPolicyCommand).de(de_GetBucketPolicyCommand).build()){}, GetBucketPolicyStatusCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketPolicyStatus", {}).n("S3Client", "GetBucketPolicyStatusCommand").f(void 0, void 0).ser(se_GetBucketPolicyStatusCommand).de(de_GetBucketPolicyStatusCommand).build()){}, GetBucketReplicationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketReplication", {}).n("S3Client", "GetBucketReplicationCommand").f(void 0, void 0).ser(se_GetBucketReplicationCommand).de(de_GetBucketReplicationCommand).build()){}, GetBucketRequestPaymentCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketRequestPayment", {}).n("S3Client", "GetBucketRequestPaymentCommand").f(void 0, void 0).ser(se_GetBucketRequestPaymentCommand).de(de_GetBucketRequestPaymentCommand).build()){}, GetBucketTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketTagging", {}).n("S3Client", "GetBucketTaggingCommand").f(void 0, void 0).ser(se_GetBucketTaggingCommand).de(de_GetBucketTaggingCommand).build()){}, GetBucketVersioningCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketVersioning", {}).n("S3Client", "GetBucketVersioningCommand").f(void 0, void 0).ser(se_GetBucketVersioningCommand).de(de_GetBucketVersioningCommand).build()){}, GetBucketWebsiteCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetBucketWebsite", {}).n("S3Client", "GetBucketWebsiteCommand").f(void 0, void 0).ser(se_GetBucketWebsiteCommand).de(de_GetBucketWebsiteCommand).build()){}, GetObjectAclCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectAcl", {}).n("S3Client", "GetObjectAclCommand").f(void 0, void 0).ser(se_GetObjectAclCommand).de(de_GetObjectAclCommand).build()){}, GetObjectAttributesCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne) ]; +})).s("AmazonS3", "GetObjectAttributes", {}).n("S3Client", "GetObjectAttributesCommand").f(GetObjectAttributesRequestFilterSensitiveLog, void 0).ser(se_GetObjectAttributesCommand).de(de_GetObjectAttributesCommand).build()){}, GetObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne), getS3ExpiresMiddlewarePlugin(ne), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestChecksumRequired: false, + requestValidationModeMember: "ChecksumMode", + responseAlgorithms: [ "CRC32", "CRC32C", "SHA256", "SHA1" ] + }) ]; +})).s("AmazonS3", "GetObject", {}).n("S3Client", "GetObjectCommand").f(GetObjectRequestFilterSensitiveLog, GetObjectOutputFilterSensitiveLog).ser(se_GetObjectCommand).de(de_GetObjectCommand).build()){}, GetObjectLegalHoldCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectLegalHold", {}).n("S3Client", "GetObjectLegalHoldCommand").f(void 0, void 0).ser(se_GetObjectLegalHoldCommand).de(de_GetObjectLegalHoldCommand).build()){}, GetObjectLockConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectLockConfiguration", {}).n("S3Client", "GetObjectLockConfigurationCommand").f(void 0, void 0).ser(se_GetObjectLockConfigurationCommand).de(de_GetObjectLockConfigurationCommand).build()){}, GetObjectRetentionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectRetention", {}).n("S3Client", "GetObjectRetentionCommand").f(void 0, void 0).ser(se_GetObjectRetentionCommand).de(de_GetObjectRetentionCommand).build()){}, GetObjectTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectTagging", {}).n("S3Client", "GetObjectTaggingCommand").f(void 0, void 0).ser(se_GetObjectTaggingCommand).de(de_GetObjectTaggingCommand).build()){}, GetObjectTorrentCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetObjectTorrent", {}).n("S3Client", "GetObjectTorrentCommand").f(void 0, GetObjectTorrentOutputFilterSensitiveLog).ser(se_GetObjectTorrentCommand).de(de_GetObjectTorrentCommand).build()){}, GetPublicAccessBlockCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "GetPublicAccessBlock", {}).n("S3Client", "GetPublicAccessBlockCommand").f(void 0, void 0).ser(se_GetPublicAccessBlockCommand).de(de_GetPublicAccessBlockCommand).build()){}, HeadBucketCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "HeadBucket", {}).n("S3Client", "HeadBucketCommand").f(void 0, void 0).ser(se_HeadBucketCommand).de(de_HeadBucketCommand).build()){}, HeadObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne), getS3ExpiresMiddlewarePlugin(ne) ]; +})).s("AmazonS3", "HeadObject", {}).n("S3Client", "HeadObjectCommand").f(HeadObjectRequestFilterSensitiveLog, HeadObjectOutputFilterSensitiveLog).ser(se_HeadObjectCommand).de(de_HeadObjectCommand).build()){}, ListBucketAnalyticsConfigurationsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListBucketAnalyticsConfigurations", {}).n("S3Client", "ListBucketAnalyticsConfigurationsCommand").f(void 0, void 0).ser(se_ListBucketAnalyticsConfigurationsCommand).de(de_ListBucketAnalyticsConfigurationsCommand).build()){}, ListBucketIntelligentTieringConfigurationsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListBucketIntelligentTieringConfigurations", {}).n("S3Client", "ListBucketIntelligentTieringConfigurationsCommand").f(void 0, void 0).ser(se_ListBucketIntelligentTieringConfigurationsCommand).de(de_ListBucketIntelligentTieringConfigurationsCommand).build()){}, ListBucketInventoryConfigurationsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListBucketInventoryConfigurations", {}).n("S3Client", "ListBucketInventoryConfigurationsCommand").f(void 0, ListBucketInventoryConfigurationsOutputFilterSensitiveLog).ser(se_ListBucketInventoryConfigurationsCommand).de(de_ListBucketInventoryConfigurationsCommand).build()){}, ListBucketMetricsConfigurationsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListBucketMetricsConfigurations", {}).n("S3Client", "ListBucketMetricsConfigurationsCommand").f(void 0, void 0).ser(se_ListBucketMetricsConfigurationsCommand).de(de_ListBucketMetricsConfigurationsCommand).build()){}, ListBucketsCommand = class extends(Command.classBuilder().ep({ + ...commonParams +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListBuckets", {}).n("S3Client", "ListBucketsCommand").f(void 0, void 0).ser(se_ListBucketsCommand).de(de_ListBucketsCommand).build()){}, ListDirectoryBucketsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListDirectoryBuckets", {}).n("S3Client", "ListDirectoryBucketsCommand").f(void 0, void 0).ser(se_ListDirectoryBucketsCommand).de(de_ListDirectoryBucketsCommand).build()){}, ListMultipartUploadsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Prefix: { + type: "contextParams", + name: "Prefix" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListMultipartUploads", {}).n("S3Client", "ListMultipartUploadsCommand").f(void 0, void 0).ser(se_ListMultipartUploadsCommand).de(de_ListMultipartUploadsCommand).build()){}, ListObjectsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Prefix: { + type: "contextParams", + name: "Prefix" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListObjects", {}).n("S3Client", "ListObjectsCommand").f(void 0, void 0).ser(se_ListObjectsCommand).de(de_ListObjectsCommand).build()){}, ListObjectsV2Command = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Prefix: { + type: "contextParams", + name: "Prefix" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListObjectsV2", {}).n("S3Client", "ListObjectsV2Command").f(void 0, void 0).ser(se_ListObjectsV2Command).de(de_ListObjectsV2Command).build()){}, ListObjectVersionsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Prefix: { + type: "contextParams", + name: "Prefix" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "ListObjectVersions", {}).n("S3Client", "ListObjectVersionsCommand").f(void 0, void 0).ser(se_ListObjectVersionsCommand).de(de_ListObjectVersionsCommand).build()){}, ListPartsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne) ]; +})).s("AmazonS3", "ListParts", {}).n("S3Client", "ListPartsCommand").f(ListPartsRequestFilterSensitiveLog, void 0).ser(se_ListPartsCommand).de(de_ListPartsCommand).build()){}, PutBucketAccelerateConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: false + }) ]; +})).s("AmazonS3", "PutBucketAccelerateConfiguration", {}).n("S3Client", "PutBucketAccelerateConfigurationCommand").f(void 0, void 0).ser(se_PutBucketAccelerateConfigurationCommand).de(de_PutBucketAccelerateConfigurationCommand).build()){}, PutBucketAclCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketAcl", {}).n("S3Client", "PutBucketAclCommand").f(void 0, void 0).ser(se_PutBucketAclCommand).de(de_PutBucketAclCommand).build()){}, PutBucketAnalyticsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "PutBucketAnalyticsConfiguration", {}).n("S3Client", "PutBucketAnalyticsConfigurationCommand").f(void 0, void 0).ser(se_PutBucketAnalyticsConfigurationCommand).de(de_PutBucketAnalyticsConfigurationCommand).build()){}, PutBucketCorsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketCors", {}).n("S3Client", "PutBucketCorsCommand").f(void 0, void 0).ser(se_PutBucketCorsCommand).de(de_PutBucketCorsCommand).build()){}, PutBucketEncryptionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketEncryption", {}).n("S3Client", "PutBucketEncryptionCommand").f(PutBucketEncryptionRequestFilterSensitiveLog, void 0).ser(se_PutBucketEncryptionCommand).de(de_PutBucketEncryptionCommand).build()){}, PutBucketIntelligentTieringConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "PutBucketIntelligentTieringConfiguration", {}).n("S3Client", "PutBucketIntelligentTieringConfigurationCommand").f(void 0, void 0).ser(se_PutBucketIntelligentTieringConfigurationCommand).de(de_PutBucketIntelligentTieringConfigurationCommand).build()){}, PutBucketInventoryConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "PutBucketInventoryConfiguration", {}).n("S3Client", "PutBucketInventoryConfigurationCommand").f(PutBucketInventoryConfigurationRequestFilterSensitiveLog, void 0).ser(se_PutBucketInventoryConfigurationCommand).de(de_PutBucketInventoryConfigurationCommand).build()){}, PutBucketLifecycleConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketLifecycleConfiguration", {}).n("S3Client", "PutBucketLifecycleConfigurationCommand").f(void 0, void 0).ser(se_PutBucketLifecycleConfigurationCommand).de(de_PutBucketLifecycleConfigurationCommand).build()){}, PutBucketLoggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketLogging", {}).n("S3Client", "PutBucketLoggingCommand").f(void 0, void 0).ser(se_PutBucketLoggingCommand).de(de_PutBucketLoggingCommand).build()){}, PutBucketMetricsConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "PutBucketMetricsConfiguration", {}).n("S3Client", "PutBucketMetricsConfigurationCommand").f(void 0, void 0).ser(se_PutBucketMetricsConfigurationCommand).de(de_PutBucketMetricsConfigurationCommand).build()){}, PutBucketNotificationConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "PutBucketNotificationConfiguration", {}).n("S3Client", "PutBucketNotificationConfigurationCommand").f(void 0, void 0).ser(se_PutBucketNotificationConfigurationCommand).de(de_PutBucketNotificationConfigurationCommand).build()){}, PutBucketOwnershipControlsCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketOwnershipControls", {}).n("S3Client", "PutBucketOwnershipControlsCommand").f(void 0, void 0).ser(se_PutBucketOwnershipControlsCommand).de(de_PutBucketOwnershipControlsCommand).build()){}, PutBucketPolicyCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketPolicy", {}).n("S3Client", "PutBucketPolicyCommand").f(void 0, void 0).ser(se_PutBucketPolicyCommand).de(de_PutBucketPolicyCommand).build()){}, PutBucketReplicationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketReplication", {}).n("S3Client", "PutBucketReplicationCommand").f(void 0, void 0).ser(se_PutBucketReplicationCommand).de(de_PutBucketReplicationCommand).build()){}, PutBucketRequestPaymentCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketRequestPayment", {}).n("S3Client", "PutBucketRequestPaymentCommand").f(void 0, void 0).ser(se_PutBucketRequestPaymentCommand).de(de_PutBucketRequestPaymentCommand).build()){}, PutBucketTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketTagging", {}).n("S3Client", "PutBucketTaggingCommand").f(void 0, void 0).ser(se_PutBucketTaggingCommand).de(de_PutBucketTaggingCommand).build()){}, PutBucketVersioningCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketVersioning", {}).n("S3Client", "PutBucketVersioningCommand").f(void 0, void 0).ser(se_PutBucketVersioningCommand).de(de_PutBucketVersioningCommand).build()){}, PutBucketWebsiteCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutBucketWebsite", {}).n("S3Client", "PutBucketWebsiteCommand").f(void 0, void 0).ser(se_PutBucketWebsiteCommand).de(de_PutBucketWebsiteCommand).build()){}, PutObjectAclCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutObjectAcl", {}).n("S3Client", "PutObjectAclCommand").f(void 0, void 0).ser(se_PutObjectAclCommand).de(de_PutObjectAclCommand).build()){}, PutObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getCheckContentLengthHeaderPlugin(ne), getSsecPlugin(ne), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: false + }) ]; +})).s("AmazonS3", "PutObject", {}).n("S3Client", "PutObjectCommand").f(PutObjectRequestFilterSensitiveLog, PutObjectOutputFilterSensitiveLog).ser(se_PutObjectCommand).de(de_PutObjectCommand).build()){}, PutObjectLegalHoldCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutObjectLegalHold", {}).n("S3Client", "PutObjectLegalHoldCommand").f(void 0, void 0).ser(se_PutObjectLegalHoldCommand).de(de_PutObjectLegalHoldCommand).build()){}, PutObjectLockConfigurationCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutObjectLockConfiguration", {}).n("S3Client", "PutObjectLockConfigurationCommand").f(void 0, void 0).ser(se_PutObjectLockConfigurationCommand).de(de_PutObjectLockConfigurationCommand).build()){}, PutObjectRetentionCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutObjectRetention", {}).n("S3Client", "PutObjectRetentionCommand").f(void 0, void 0).ser(se_PutObjectRetentionCommand).de(de_PutObjectRetentionCommand).build()){}, PutObjectTaggingCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutObjectTagging", {}).n("S3Client", "PutObjectTaggingCommand").f(void 0, void 0).ser(se_PutObjectTaggingCommand).de(de_PutObjectTaggingCommand).build()){}, PutPublicAccessBlockCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseS3ExpressControlEndpoint: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: true + }) ]; +})).s("AmazonS3", "PutPublicAccessBlock", {}).n("S3Client", "PutPublicAccessBlockCommand").f(void 0, void 0).ser(se_PutPublicAccessBlockCommand).de(de_PutPublicAccessBlockCommand).build()){}, RestoreObjectCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: false + }) ]; +})).s("AmazonS3", "RestoreObject", {}).n("S3Client", "RestoreObjectCommand").f(RestoreObjectRequestFilterSensitiveLog, void 0).ser(se_RestoreObjectCommand).de(de_RestoreObjectCommand).build()){}, SelectObjectContentCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne) ]; +})).s("AmazonS3", "SelectObjectContent", { + eventStream: { + output: true + } +}).n("S3Client", "SelectObjectContentCommand").f(SelectObjectContentRequestFilterSensitiveLog, SelectObjectContentOutputFilterSensitiveLog).ser(se_SelectObjectContentCommand).de(de_SelectObjectContentCommand).build()){}, UploadPartCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + Bucket: { + type: "contextParams", + name: "Bucket" + }, + Key: { + type: "contextParams", + name: "Key" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getSsecPlugin(ne), getFlexibleChecksumsPlugin(ne, { + input: this.input, + requestAlgorithmMember: "ChecksumAlgorithm", + requestChecksumRequired: false + }) ]; +})).s("AmazonS3", "UploadPart", {}).n("S3Client", "UploadPartCommand").f(UploadPartRequestFilterSensitiveLog, UploadPartOutputFilterSensitiveLog).ser(se_UploadPartCommand).de(de_UploadPartCommand).build()){}, UploadPartCopyCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + DisableS3ExpressSessionAuth: { + type: "staticContextParams", + value: true + }, + Bucket: { + type: "contextParams", + name: "Bucket" + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()), getThrow200ExceptionsPlugin(ne), getSsecPlugin(ne) ]; +})).s("AmazonS3", "UploadPartCopy", {}).n("S3Client", "UploadPartCopyCommand").f(UploadPartCopyRequestFilterSensitiveLog, UploadPartCopyOutputFilterSensitiveLog).ser(se_UploadPartCopyCommand).de(de_UploadPartCopyCommand).build()){}, WriteGetObjectResponseCommand = class extends(Command.classBuilder().ep({ + ...commonParams, + UseObjectLambdaEndpoint: { + type: "staticContextParams", + value: true + } +}).m((function(_, ee, ne, ie) { + return [ getSerdePlugin(ne, this.serialize, this.deserialize), getEndpointPlugin(ne, _.getEndpointParameterInstructions()) ]; +})).s("AmazonS3", "WriteGetObjectResponse", {}).n("S3Client", "WriteGetObjectResponseCommand").f(WriteGetObjectResponseRequestFilterSensitiveLog, void 0).ser(se_WriteGetObjectResponseCommand).de(de_WriteGetObjectResponseCommand).build()){}, commands = { + AbortMultipartUploadCommand, + CompleteMultipartUploadCommand, + CopyObjectCommand, + CreateBucketCommand, + CreateMultipartUploadCommand, + CreateSessionCommand, + DeleteBucketCommand, + DeleteBucketAnalyticsConfigurationCommand, + DeleteBucketCorsCommand, + DeleteBucketEncryptionCommand, + DeleteBucketIntelligentTieringConfigurationCommand, + DeleteBucketInventoryConfigurationCommand, + DeleteBucketLifecycleCommand, + DeleteBucketMetricsConfigurationCommand, + DeleteBucketOwnershipControlsCommand, + DeleteBucketPolicyCommand, + DeleteBucketReplicationCommand, + DeleteBucketTaggingCommand, + DeleteBucketWebsiteCommand, + DeleteObjectCommand, + DeleteObjectsCommand, + DeleteObjectTaggingCommand, + DeletePublicAccessBlockCommand, + GetBucketAccelerateConfigurationCommand, + GetBucketAclCommand, + GetBucketAnalyticsConfigurationCommand, + GetBucketCorsCommand, + GetBucketEncryptionCommand, + GetBucketIntelligentTieringConfigurationCommand, + GetBucketInventoryConfigurationCommand, + GetBucketLifecycleConfigurationCommand, + GetBucketLocationCommand, + GetBucketLoggingCommand, + GetBucketMetricsConfigurationCommand, + GetBucketNotificationConfigurationCommand, + GetBucketOwnershipControlsCommand, + GetBucketPolicyCommand, + GetBucketPolicyStatusCommand, + GetBucketReplicationCommand, + GetBucketRequestPaymentCommand, + GetBucketTaggingCommand, + GetBucketVersioningCommand, + GetBucketWebsiteCommand, + GetObjectCommand, + GetObjectAclCommand, + GetObjectAttributesCommand, + GetObjectLegalHoldCommand, + GetObjectLockConfigurationCommand, + GetObjectRetentionCommand, + GetObjectTaggingCommand, + GetObjectTorrentCommand, + GetPublicAccessBlockCommand, + HeadBucketCommand, + HeadObjectCommand, + ListBucketAnalyticsConfigurationsCommand, + ListBucketIntelligentTieringConfigurationsCommand, + ListBucketInventoryConfigurationsCommand, + ListBucketMetricsConfigurationsCommand, + ListBucketsCommand, + ListDirectoryBucketsCommand, + ListMultipartUploadsCommand, + ListObjectsCommand, + ListObjectsV2Command, + ListObjectVersionsCommand, + ListPartsCommand, + PutBucketAccelerateConfigurationCommand, + PutBucketAclCommand, + PutBucketAnalyticsConfigurationCommand, + PutBucketCorsCommand, + PutBucketEncryptionCommand, + PutBucketIntelligentTieringConfigurationCommand, + PutBucketInventoryConfigurationCommand, + PutBucketLifecycleConfigurationCommand, + PutBucketLoggingCommand, + PutBucketMetricsConfigurationCommand, + PutBucketNotificationConfigurationCommand, + PutBucketOwnershipControlsCommand, + PutBucketPolicyCommand, + PutBucketReplicationCommand, + PutBucketRequestPaymentCommand, + PutBucketTaggingCommand, + PutBucketVersioningCommand, + PutBucketWebsiteCommand, + PutObjectCommand, + PutObjectAclCommand, + PutObjectLegalHoldCommand, + PutObjectLockConfigurationCommand, + PutObjectRetentionCommand, + PutObjectTaggingCommand, + PutPublicAccessBlockCommand, + RestoreObjectCommand, + SelectObjectContentCommand, + UploadPartCommand, + UploadPartCopyCommand, + WriteGetObjectResponseCommand +}, S3 = class extends S3Client {}; + +createAggregatedClient(commands, S3); + +var CheckPointInfoDefault = { + lastLocalSeq: 0, + knownIDs: new Set, + sentIDs: new Set, + receivedFiles: new Set, + sentFiles: new Set +}, PREFIX_TRENCH = "trench", PREFIX_EPHEMERAL = "ephemeral", PREFIX_PERMANENT = "permanent", idx = 0, series = `${Date.now()}`; + +function generateId(_) { + if (++idx > 1e4) { + series = `${Date.now()}`; + idx = 0; + } + return `${PREFIX_TRENCH}-${_}-${series}-${idx + 1e7}`; +} + +function createRange(_, ee) { + return [ `${PREFIX_TRENCH}-${_}-${ee}-`, `${PREFIX_TRENCH}-${_}-${ee}.` ]; +} + +function createId(_, ee, ne) { + return `${PREFIX_TRENCH}-${_}-${ee}-${ne + 1e7}`; +} + +var indexes = new Map, inProgress = new Set, failed = new Map, Trench = class { + constructor(_, ee = true) { + Object.defineProperty(this, "_db", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "_flushTask", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "concealing", { + enumerable: true, + configurable: true, + writable: true, + value: new Map + }); + this._db = _; + if (ee) this._flushTask = (async () => { + const ee = await _.keys(`${PREFIX_TRENCH}-${PREFIX_EPHEMERAL}`, `${PREFIX_TRENCH}-${PREFIX_EPHEMERAL}.`); + for (const ne of ee) await _.delete(ne); + })(); + } + async eraseAllEphemerals() { + const _ = await this._db.keys(`${PREFIX_TRENCH}-${PREFIX_EPHEMERAL}`, `${PREFIX_TRENCH}-${PREFIX_EPHEMERAL}.`); + for (const ee of _) await this._db.delete(ee); + } + async eraseAllPermanences() { + const _ = await this._db.keys(`${PREFIX_TRENCH}-${PREFIX_PERMANENT}`, `${PREFIX_TRENCH}-${PREFIX_PERMANENT}.`); + for (const ee of _) await this._db.delete(ee); + } + conceal(_) { + const ee = generateId(PREFIX_EPHEMERAL); + this.concealing.set(ee, _); + this._db.set(ee, _).then((async _ => { + if (this.concealing.has(ee)) this.concealing.delete(ee); else await this._db.delete(ee); + })); + return ee; + } + async bury(_) { + if (this.concealing.has(_)) this.concealing.delete(_); + await this._db.delete(_); + } + async expose(_) { + if (this.concealing.has(_)) { + const ee = this.concealing.get(_); + this.concealing.delete(_); + return ee; + } + const ee = await this._db.get(_); + await this._db.delete(_); + return ee; + } + _evacuate(_, ee) { + return async () => { + if (this._flushTask) { + await this._flushTask; + this._flushTask = void 0; + } + await _; + const ne = await this._db.get(ee); + await this._db.delete(ee); + return ne; + }; + } + evacuatePromise(_) { + const ee = generateId(PREFIX_EPHEMERAL), ne = (async () => { + const ne = await _; + await this._db.set(ee, ne); + })(); + return this._evacuate(ne, ee); + } + evacuate(_) { + if (_ instanceof Promise) return this.evacuatePromise(_); + const ee = generateId(PREFIX_EPHEMERAL), ne = this._db.set(ee, _); + return this._evacuate(ne, ee); + } + async _queue(_, ee, ne, ie) { + var re; + if (void 0 === ie) { + ie = null != (re = indexes.get(ee)) ? re : 0; + indexes.set(ee, ie + 1); + } + const se = createId(_, ee, ie); + await this._db.set(se, ne); + } + async _dequeue(_, ee) { + const ne = createRange(_, ee), ie = (await this._db.keys(ne[0], ne[1])).filter((_ => !inProgress.has(_))); + if (0 !== ie.length) return await this.expose(ie[0]); + } + async _dequeueWithCommit(_, ee) { + const ne = createRange(_, ee), ie = await this._db.keys(ne[0], ne[1]), re = ie.filter((_ => !inProgress.has(_))); + if (0 === re.length) return; + const se = re[0]; + inProgress.add(se); + const oe = failed.get(se) || 0, le = await this._db.get(se); + return { + key: se, + value: le, + cancelCount: oe, + pendingItems: ie.length - 1, + commit: async () => { + await this._db.delete(se); + failed.delete(se); + inProgress.delete(se); + }, + cancel: () => { + failed.set(se, (failed.get(se) || 0) + 1); + inProgress.delete(se); + } + }; + } + queue(_, ee, ne) { + return this._queue(PREFIX_EPHEMERAL, _, ee, ne); + } + dequeue(_) { + return this._dequeue(PREFIX_EPHEMERAL, _); + } + dequeueWithCommit(_) { + return this._dequeueWithCommit(PREFIX_EPHEMERAL, _); + } + queuePermanent(_, ee, ne) { + return this._queue(PREFIX_PERMANENT, _, ee, ne); + } + dequeuePermanent(_) { + return this._dequeue(PREFIX_PERMANENT, _); + } + dequeuePermanentWithCommit(_) { + return this._dequeueWithCommit(PREFIX_PERMANENT, _); + } +}, RECORD_SPLIT = "\n", UNIT_SPLIT = "", te = new TextEncoder; + +function serializeDoc(_) { + if (_._id.startsWith("h:")) { + const ee = escapeNewLineFromString(_.data); + return te.encode(`~${_._id}${UNIT_SPLIT}${ee}${RECORD_SPLIT}`); + } + return te.encode(JSON.stringify(_) + RECORD_SPLIT); +} + +var JournalSyncAbstract = class { + constructor(_, ee, ne, ie, re, se, oe, le = "") { + this.id = ""; + this.key = ""; + this.bucket = ""; + this.endpoint = ""; + this.region = "auto"; + this.hash = ""; + this.batchSize = 100; + this.requestedStop = false; + this.notifier = new Notifier; + this._currentCheckPointInfo = { + ...CheckPointInfoDefault + }; + this.isPacking = false; + this.isDownloading = false; + this.id = _; + this.key = ee; + this.bucket = ie; + this.endpoint = ne; + this.region = le; + this.db = se.getDatabase(); + this.env = se; + this.useCustomRequestHandler = oe; + this.processReplication = async _ => await se.processReplication(_); + this.store = re; + this.hash = this.getHash(ne, ie, le); + this.trench = new Trench(re); + } + getHash(_, ee, ne) { + return btoa(encodeURI([ _, ee, ne ].join())); + } + applyNewConfig(_, ee, ne, ie, re, se, oe, le = "") { + this.id = _; + this.key = ee; + this.bucket = ie; + this.endpoint = ne; + this.region = le; + this.db = se.getDatabase(); + this.env = se; + this.useCustomRequestHandler = oe; + this.processReplication = async _ => await se.processReplication(_); + this.store = re; + this.hash = this.getHash(ne, ie, le); + } + updateInfo(_) { + var ee, ne, ie, re, se, oe, le; + const ue = this.env.replicationStat.value; + this.env.replicationStat.value = { + sent: null != (ee = _.sent) ? ee : ue.sent, + arrived: null != (ne = _.arrived) ? ne : ue.arrived, + maxPullSeq: null != (ie = _.maxPullSeq) ? ie : ue.maxPullSeq, + maxPushSeq: null != (re = _.maxPushSeq) ? re : ue.maxPushSeq, + lastSyncPullSeq: null != (se = _.lastSyncPullSeq) ? se : ue.lastSyncPullSeq, + lastSyncPushSeq: null != (oe = _.lastSyncPushSeq) ? oe : ue.lastSyncPushSeq, + syncStatus: null != (le = _.syncStatus) ? le : ue.syncStatus + }; + } + async updateCheckPointInfo(_) { + const ee = `bucketsync-checkpoint-${this.hash}`, ne = _(await this.getCheckpointInfo()); + this._currentCheckPointInfo = ne; + await this.store.set(ee, ne); + return ne; + } + async getCheckpointInfo() { + const _ = `bucketsync-checkpoint-${this.hash}`, ee = await this.store.get(_) || {}, ne = [ "knownIDs", "sentIDs", "receivedFiles", "sentFiles" ]; + for (const _ of ne) if (_ in ee && typeof Array.isArray(ee[_])) ee[_] = new Set(ee[_]); + this._currentCheckPointInfo = { + ...CheckPointInfoDefault, + ...ee + }; + return this._currentCheckPointInfo; + } + async resetAllCaches() { + await this.trench.eraseAllPermanences(); + } + async resetCheckpointInfo() { + await this.updateCheckPointInfo((_ => ({ + ...CheckPointInfoDefault + }))); + } + async _createJournalPack(_) { + const ee = await this.getCheckpointInfo(), ne = _ || ee.lastLocalSeq; + Logger(`Journal reading from seq:${ne}`, LOG_LEVEL_VERBOSE); + let ie = 0, re = 0; + const se = this.db.changes({ + live: false, + since: _ || ne, + conflicts: true, + limit: this.batchSize, + return_docs: true, + attachments: false, + style: "all_docs", + filter: _ => { + const ee = this.getDocKey(_); + if (this._currentCheckPointInfo.knownIDs.has(ee)) { + ie++; + return false; + } + if (this._currentCheckPointInfo.sentIDs.has(ee)) { + ie++; + return false; + } + re++; + return true; + } + }), oe = await se; + if (0 == oe.results.length) return { + changes: [], + hasNext: false, + packLastSeq: oe.last_seq + }; + Logger(`${re} items possibly needs to be sent (${ie} keys has been received before)`, LOG_LEVEL_DEBUG); + const le = await this.db.bulkGet({ + docs: oe.results.map((_ => _.changes.map((ee => ({ + id: _.id, + rev: ee.rev + }))))).flat(), + revs: true + }), ue = oe.last_seq, de = ue < (await this.db.info()).update_seq; + return { + changes: le.results.map((_ => _.docs)).flat().filter((_ => "ok" in _)).map((_ => _.ok)), + hasNext: de, + packLastSeq: ue + }; + } + getDocKey(_) { + if (_ && _._id.startsWith("h:")) return _._id; else return _._id + "-" + _._rev; + } + async uploadQueued(_ = false, ee = false) { + return await shareRunningResult("upload_queue", (async () => { + const ne = "send_journal", ie = "Uploading journal:", re = _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO; + let se = 0; + do { + const _ = await this.trench.dequeuePermanentWithCommit("upload_queue"); + if (!_) { + if (this.isPacking) { + Logger(`${ie} Queue run out, but process is running. wait for the next.`, LOG_LEVEL_VERBOSE); + await Promise.race([ this.notifier.nextNotify, delay(3e3) ]); + continue; + } + if (se) Logger(`${ie}: ${se} files have been uploaded!`, re, ne); else if (!ee) Logger("No files needs to be uploaded!", re, ne); + return true; + } + const {key: oe, value: le, commit: ue, cancel: de, cancelCount: fe, pendingItems: he} = _; + this.updateInfo({ + sent: se, + maxPushSeq: he + se, + lastSyncPushSeq: 1 + }); + Logger(`${ie} ${se} / ${he + se}${0 != fe ? `\nRETRY:${fe}` : ""}`, re, ne); + Logger(`${ie} ${oe} ${0 != fe ? `TRY:${fe}` : ""} ${he} left`, LOG_LEVEL_VERBOSE); + if (fe > 3) { + Logger(`${ie} Something went wrong on processing queue ${oe}.`, LOG_LEVEL_NOTICE); + return false; + } + const pe = `${Date.now()}-docs.jsonl.gz`, ge = "application/octet-stream", me = new Blob([ le ], { + type: ge + }); + try { + if (!await this.uploadFile(pe, me, ge)) throw new Error("Could not send journalPack to the bucket"); + await ue(); + se++; + await this.updateCheckPointInfo((_ => ({ + ..._, + sentFiles: _.sentFiles.add(pe) + }))); + Logger(`${ie}: Uploaded ${oe} as ${pe}`, LOG_LEVEL_INFO); + } catch (_) { + Logger(`${ie} Could not send journalPack to the bucket (${oe} as ${pe})`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + Logger(`${ie} Uploading ${oe} cancelled for retry`, LOG_LEVEL_VERBOSE); + de(); + await delay(1e3); + continue; + } + } while (false == this.requestedStop); + })); + } + async packAndCompress(_ = false) { + return await shareRunningResult("create_send_data", (async () => { + try { + this.isPacking = true; + const ee = "pack_journal", ne = _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO; + this.requestedStop = false; + const ie = await this.getCheckpointInfo(), re = (await this.db.info()).update_seq, se = ie.sentIDs, oe = 250, le = 10485760; + let ue = ie.lastLocalSeq, de = 0; + const fe = []; + let he = false; + const pe = ie.lastLocalSeq, ge = re - pe; + Logger("Packing Journal: Start sending", ne, ee); + do { + if (this.requestedStop) { + Logger("Packing Journal : Stop requested", ne, ee); + he = true; + break; + } + const {changes: _, hasNext: ie, packLastSeq: re} = await this._createJournalPack(ue), me = re - pe; + if (0 == _.length) he = true; else { + Logger(`Packing Journal: ${me} / ${ge}`, ne, ee); + for (const ee of _) { + const _ = serializeDoc(ee); + se.add(this.getDocKey(ee)); + de += _.length; + fe.push(_); + if (fe.length > oe || de > le) { + const _ = concatUInt8Array(fe), ee = _.byteLength, ne = await wrappedDeflate(_, { + consume: true, + level: 8 + }); + Logger(`Packing Journal: Compressed ${ee} bytes to ${ne.byteLength} bytes (${0 != ee ? Math.ceil(ne.byteLength / ee * 100) : "--"}%)`, LOG_LEVEL_VERBOSE); + this.trench.queuePermanent("upload_queue", ne); + this.notifier.notify(); + fe.length = 0; + de = 0; + } + } + } + if (fe.length > 0) { + const _ = concatUInt8Array(fe), ee = _.byteLength, ne = await wrappedDeflate(_, { + consume: true, + level: 8 + }); + Logger(`Packing Journal: Compressed ${ee} bytes to ${ne.byteLength} bytes (${0 != ee ? Math.ceil(ne.byteLength / ee * 100) : "--"}%)`, LOG_LEVEL_VERBOSE); + this.trench.queuePermanent("upload_queue", ne); + this.notifier.notify(); + } + await this.updateCheckPointInfo((_ => ({ + ..._, + lastLocalSeq: re, + sentIDs: se + }))); + ue = re; + if (!ie) { + he = true; + break; + } + } while (false == this.requestedStop && !he); + if (0 != ge) Logger(`Packing Journal: Packaging ${ge}`, ne, ee); else Logger("Packing Journal: No journals to be packed!", ne, ee); + this.notifier.notify(); + return true; + } finally { + this.isPacking = false; + this.notifier.notify(); + } + })); + } + async sendLocalJournal(_ = false) { + this.updateInfo({ + syncStatus: "JOURNAL_SEND" + }); + if ((await Promise.all([ this.packAndCompress(_), this.uploadQueued(_) ])).every((_ => _))) if (await this.uploadQueued(_, true)) { + this.updateInfo({ + syncStatus: "COMPLETED" + }); + return true; + } + this.updateInfo({ + syncStatus: "ERRORED" + }); + return false; + } + async _getRemoteJournals() { + const _ = [ ...(await this.getCheckpointInfo()).receivedFiles.keys() ].sort(((_, ee) => ee.localeCompare(_, void 0, { + numeric: true + })))[0], ee = (await this.listFiles(_)).filter((_ => !_.startsWith("_"))); + if (!ee) return []; else return ee.sort(((_, ee) => _.localeCompare(ee, void 0, { + numeric: true + }))); + } + async processDocuments(_) { + let ee = 0, ne = 0; + try { + const ie = [], re = []; + _.forEach((_ => { + if (_._id.startsWith("h:")) ie.push(_); else re.push(_); + })); + try { + const _ = (await this.db.allDocs({ + include_docs: true, + keys: [ ...ie.map((_ => _._id)) ] + })).rows.map((_ => { + var ee; + return null != (ee = _.id) ? ee : void 0; + })), ee = new Set(_.filter((_ => void 0 !== _))), ne = ie.filter((_ => !ee.has(_._id))).map((_ => ({ + ..._, + _rev: void 0 + }))), re = await this.db.bulkDocs(ne, { + new_edits: true + }), se = re.filter((_ => "error" in _)).map((_ => _.id)); + ne.filter((_ => -1 === se.indexOf(_._id))).forEach((_ => sendValue(`leaf-${_._id}`, _))); + await this.updateCheckPointInfo((_ => ({ + ..._, + knownIDs: setAllItems(_.knownIDs, ie.map((_ => this.getDocKey(_)))) + }))); + Logger(`Saved ${re.length} chunks in transferred ${ie.length} chunks (Error:${se.length})`, LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Applying chunks failed", LOG_LEVEL_INFO); + Logger(_, LOG_LEVEL_VERBOSE); + } + const se = re.map((_ => ({ + [_._id]: _._revisions.ids.map(((ee, ne) => `${_._revisions.start - ne}-${ee}`)) + }))).reduce(((_, ee) => ({ + ..._, + ...ee + })), {}), oe = await this.db.revsDiff(se), le = re.filter((_ => { + var ee; + return _._id in oe && "missing" in oe[_._id] && ((null == (ee = oe[_._id].missing) ? void 0 : ee.length) || 0) > 0; + })); + Logger(`Applying ${le.length} docs (Total transferred:${re.length}, docs:${_.length})`, LOG_LEVEL_VERBOSE); + await this.db.bulkDocs(le, { + new_edits: false + }); + await this.processReplication(le); + await this.updateCheckPointInfo((_ => ({ + ..._, + knownIDs: setAllItems(_.knownIDs, re.map((_ => this.getDocKey(_)))) + }))); + ee += le.length; + ne += re.length; + Logger(`Applied ${ee} of ${ne} docs (${ne - ee} skipped)`, LOG_LEVEL_VERBOSE); + return true; + } catch (_) { + Logger("Applying journal failed", LOG_LEVEL_INFO); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + } + async processDownloadedJournals(_ = false, ee = false) { + return await shareRunningResult("process_downloaded_journals", (async () => { + const ne = "send_journal", ie = _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, re = "Processing journal:"; + let se = 0; + do { + const _ = await this.trench.dequeuePermanentWithCommit("parse_file"); + if (!_) { + if (this.isDownloading) { + Logger(`${re} Queue run out, but process is running. wait for the next.`, LOG_LEVEL_VERBOSE); + await Promise.race([ this.notifier.nextNotify, delay(3e3) ]); + continue; + } + if (se) Logger(`${re} ${se} files have been uploaded!`, ie, ne); else if (!ee) Logger(`${re} No files needs to be processed!`, ie, ne); + return true; + } + const {key: oe, value: le, commit: ue, cancel: de, cancelCount: fe, pendingItems: he} = _; + this.updateInfo({ + arrived: se, + maxPullSeq: he + se, + lastSyncPullSeq: 1 + }); + Logger(`${re} ${se} / ${he + se}${0 != fe ? `\nRETRY:${fe}` : ""}`, ie, "processjournal"); + if (fe > 3) { + Logger(`${re} Something went wrong on processing queue ${oe}.`, LOG_LEVEL_NOTICE); + return false; + } + const pe = await wrappedInflate(le, { + consume: true + }); + if (0 == pe.length) { + await ue(); + se++; + Logger(`${re}: ${oe} has been processed`, LOG_LEVEL_INFO); + continue; + } + let ge = 0, me = 0; + const ye = new TextDecoder, Se = []; + do { + me = pe.indexOf(10, ge); + if (-1 == me) break; + const _ = pe.slice(ge, me), ee = ye.decode(_); + if (ee.startsWith("~")) { + const [_, ne] = ee.substring(1).split(UNIT_SPLIT); + Se.push({ + _id: _, + data: unescapeNewLineFromString(ne), + type: "leaf", + _rev: "" + }); + } else Se.push(JSON.parse(ee)); + ge = me + 1; + } while (me > 0); + try { + if (await this.processDocuments(Se)) { + await ue(); + se++; + Logger(`${re}: ${oe} has been processed`, LOG_LEVEL_INFO); + } else throw new Error("Could not process downloaded journals"); + } catch (_) { + Logger(`${re}: Could not process downloaded journals`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + Logger(`${re}: ${oe} cancelled for retry`, LOG_LEVEL_VERBOSE); + de(); + await delay(1e3); + continue; + } + } while (false == this.requestedStop); + return true; + })); + } + async downloadRemoteJournals(_ = false) { + return await shareRunningResult("downloadRemoteJournals", (async () => { + try { + this.isDownloading = true; + const ee = _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO; + Logger("Receiving Journal: Getting list of remote journal", ee, "receivejournal"); + const ne = await this._getRemoteJournals(); + if (0 == ne.length) { + Logger("Receiving Journal: No journals needs to be downloaded", ee, "receivejournal"); + return true; + } + let ie = 0; + for (const _ of ne) { + ie++; + Logger(`Receiving Journal: ${ie} / ${ne.length}`, ee, "receivejournal"); + if (this.requestedStop) { + Logger(`Receiving canceled: ${_}`, ee); + return false; + } + if (!this._currentCheckPointInfo.sentFiles.has(_)) try { + const ee = await this.downloadFile(_); + if (false === ee) throw new Error("Download Error"); + await this.trench.queuePermanent("parse_file", ee); + await this.updateCheckPointInfo((ee => ({ + ...ee, + receivedFiles: ee.receivedFiles.add(_) + }))); + this.notifier.notify(); + } catch (ne) { + Logger(`Could not download ${_}`, ee); + Logger(ne, LOG_LEVEL_DEBUG); + return false; + } else { + Logger(`Receiving Journal: ${_} is own sent file`, LOG_LEVEL_VERBOSE); + await this.updateCheckPointInfo((ee => ({ + ...ee, + receivedFiles: ee.receivedFiles.add(_) + }))); + } + } + } finally { + this.isDownloading = false; + this.notifier.notify(); + } + this.notifier.notify(); + return true; + })); + } + async receiveRemoteJournal(_ = false) { + this.updateInfo({ + syncStatus: "JOURNAL_RECEIVE" + }); + this.requestedStop = false; + if ((await Promise.all([ this.downloadRemoteJournals(_), this.processDownloadedJournals(_) ])).every((_ => _))) if (await this.processDownloadedJournals(_, true)) { + this.updateInfo({ + syncStatus: "COMPLETED" + }); + return true; + } + this.updateInfo({ + syncStatus: "ERRORED" + }); + return false; + } + async sync(_ = false) { + var ee; + return null != (ee = await shareRunningResult("replicate", (async () => { + this.requestedStop = false; + const ee = await this.receiveRemoteJournal(_); + if (!this.requestedStop) if (ee) return await this.sendLocalJournal(_); else Logger("Could not receive remote journal, so we prevent sending local journals to prevent unwanted mass transfers", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + }))) ? ee : false; + } + requestStop() { + this.requestedStop = true; + } +}, JournalSyncMinio = class extends JournalSyncAbstract { + _getClient() { + if (this._instance) return this._instance; + const _ = this.endpoint ? { + endpoint: this.endpoint, + forcePathStyle: true + } : {}; + this._instance = new S3({ + region: this.region, + ..._, + credentials: { + accessKeyId: this.id, + secretAccessKey: this.key + }, + maxAttempts: 4, + retryStrategy: new ConfiguredRetryStrategy(4, (_ => 100 + 1e3 * _)), + requestHandler: this.useCustomRequestHandler ? this.env.customFetchHandler() : void 0 + }); + return this._instance; + } + async resetBucket() { + var _; + const ee = this._getClient(); + let ne = [], ie = 0, re = 0; + try { + do { + ne = await this.listFiles(""); + if (0 == ne.length) break; + const _ = new DeleteObjectsCommand({ + Bucket: this.bucket, + Delete: { + Objects: ne.map((_ => ({ + Key: _ + }))) + } + }), se = await ee.send(_), {Deleted: oe, Errors: le} = se; + ie += (null == oe ? void 0 : oe.length) || 0; + re += (null == le ? void 0 : le.length) || 0; + Logger(`${ie} items has been deleted!${0 != re ? ` (${re} items failed to delete)` : ""}`, LOG_LEVEL_NOTICE, "reset-bucket"); + } while (0 == ne.length); + } catch (_) { + Logger("WARNING! Could not delete files. you should try it once or remake the bucket manually", LOG_LEVEL_NOTICE, "reset-bucket"); + Logger(_, LOG_LEVEL_VERBOSE); + } + const se = await this._getRemoteJournals(); + if (0 == se.length) { + Logger("Nothing to delete!", LOG_LEVEL_NOTICE); + return true; + } + const oe = new DeleteObjectsCommand({ + Bucket: this.bucket, + Delete: { + Objects: se.map((_ => ({ + Key: _ + }))) + } + }), le = await ee.send(oe); + Logger(`${(null == (_ = null == le ? void 0 : le.Deleted) ? void 0 : _.length) || 0} items has been deleted!`, LOG_LEVEL_NOTICE); + await this.resetCheckpointInfo(); + return true; + } + async uploadJson(_, ee) { + try { + return await this.uploadFile(_, new Blob([ JSON.stringify(ee) ]), "application/json"); + } catch (ee) { + Logger(`Could not upload json ${_}`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + } + async downloadJson(_) { + try { + const ee = await this.downloadFile(_, true); + if (!ee) return false; else return JSON.parse((new TextDecoder).decode(ee)); + } catch (ee) { + Logger(`Could not download json ${_}`); + Logger(ee, LOG_LEVEL_VERBOSE); + return false; + } + } + async uploadFile(_, ee, ne) { + try { + let ie = new Uint8Array(await ee.arrayBuffer()); + const re = this.env.getSettings(); + if (re.encrypt && "" != re.passphrase) ie = await encryptBinary(ie, re.passphrase, re.useDynamicIterationCount); + const se = this._getClient(), oe = new PutObjectCommand({ + Bucket: this.bucket, + Key: _, + Body: ie, + ContentType: ne + }); + if (await se.send(oe)) return true; + } catch (ee) { + Logger(`Could not upload ${_}`); + Logger(ee, LOG_LEVEL_VERBOSE); + } + return false; + } + async downloadFile(_, ee = false) { + const ne = this._getClient(), ie = new GetObjectCommand({ + Bucket: this.bucket, + Key: _, + ...ee ? { + ResponseCacheControl: "no-cache" + } : {} + }), re = await ne.send(ie), se = this.env.getSettings(); + try { + if (re.Body) { + let _ = await re.Body.transformToByteArray(); + if (se.encrypt && "" != se.passphrase) _ = await decryptBinary(_, se.passphrase, se.useDynamicIterationCount); + return _; + } + } catch (ee) { + Logger(`Could not download ${_}`); + Logger(ee, LOG_LEVEL_VERBOSE); + } + return false; + } + async listFiles(_, ee) { + const ne = this._getClient(), ie = await ne.listObjectsV2({ + Bucket: this.bucket, + StartAfter: _, + ...ee ? { + MaxKeys: ee + } : {} + }); + if (!ie.Contents) return []; else return ie.Contents.map((_ => _.Key)); + } + async isAvailable() { + const _ = this._getClient(), ee = new HeadBucketCommand({ + Bucket: this.bucket + }); + try { + await _.send(ee); + return true; + } catch (_) { + Logger("Could not connected to the remote bucket", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + } + async getUsage() { + const _ = this._getClient(); + try { + const ee = await _.listObjectsV2({ + Bucket: this.bucket + }); + if (!ee.Contents) return {}; else return { + estimatedSize: ee.Contents.reduce(((_, ee) => _ + (ee.Size || 0)), 0) + }; + } catch (_) { + Logger("Could not get status of the remote bucket", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + } +}, MILSTONE_DOCID = "_00000000-milestone.json", currentVersionRange2 = { + min: 0, + max: 2, + current: 2 +}, LiveSyncJournalReplicator = class extends LiveSyncAbstractReplicator { + constructor(_) { + super(_); + this.syncStatus = "NOT_CONNECTED"; + this.docArrived = 0; + this.docSent = 0; + this.lastSyncPullSeq = 0; + this.maxPullSeq = 0; + this.lastSyncPushSeq = 0; + this.maxPushSeq = 0; + this.nodeid = ""; + this.remoteLocked = false; + this.remoteCleaned = false; + this.remoteLockedAndDeviceNotAccepted = false; + this.updateInfo = () => { + this.env.replicationStat.value = { + sent: this.docSent, + arrived: this.docArrived, + maxPullSeq: this.maxPullSeq, + maxPushSeq: this.maxPushSeq, + lastSyncPullSeq: this.lastSyncPullSeq, + lastSyncPushSeq: this.lastSyncPushSeq, + syncStatus: this.syncStatus + }; + }; + this.env = _; + this.initializeDatabaseForReplication(); + this.env.getDatabase().on("close", (() => { + this.closeReplication(); + })); + } + get client() { + return this.setupJournalSyncClient(); + } + setupJournalSyncClient() { + const _ = this.env.getSettings(), ee = _.accessKey, ne = _.secretKey, ie = _.bucket, re = _.region, se = _.endpoint, oe = _.useCustomRequestHandler; + if (this._client) this._client.applyNewConfig(ee, ne, se, ie, this.env.simpleStore, this.env, oe, re); else this._client = new JournalSyncMinio(ee, ne, se, ie, this.env.simpleStore, this.env, oe, re); + return this._client; + } + async ensureBucketIsCompatible(_, ee) { + const ne = await this.client.downloadJson(MILSTONE_DOCID); + return await ensureRemoteIsCompatible(ne, this.env.getSettings(), _, ee, (async _ => { + await this.client.uploadJson(MILSTONE_DOCID, _); + })); + } + async migrate(_, ee) { + Logger(`Database updated from ${_} to ${ee}`, LOG_LEVEL_NOTICE); + return true; + } + terminateSync() { + this.client.requestStop(); + } + async openReplication(_, ee, ne, ie = false) { + if (!await this.checkReplicationConnectivity(false, ie)) return false; + await this.client.sync(ne); + } + async replicateAllToServer(_, ee) { + if (!await this.checkReplicationConnectivity(false)) return false; else return await this.client.sendLocalJournal(ee); + } + async replicateAllFromServer(_, ee) { + if (!await this.checkReplicationConnectivity(false)) return false; else return await this.client.receiveRemoteJournal(ee); + } + async checkReplicationConnectivity(_, ee = false) { + if (!await this.client.isAvailable()) return false; + if (!_) { + this.remoteCleaned = false; + this.remoteLocked = false; + this.remoteLockedAndDeviceNotAccepted = false; + this.tweakSettingsMismatched = false; + const _ = await this.ensureBucketIsCompatible(this.nodeid, currentVersionRange2); + if ("INCOMPATIBLE" == _) { + Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.", LOG_LEVEL_NOTICE); + return false; + } else if ("NODE_LOCKED" == _) { + Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.", LOG_LEVEL_NOTICE); + this.remoteLockedAndDeviceNotAccepted = true; + this.remoteLocked = true; + return false; + } else if ("LOCKED" == _) this.remoteLocked = true; else if ("NODE_CLEANED" == _) if (ee) this.remoteLocked = true; else { + Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.", LOG_LEVEL_NOTICE); + this.remoteLockedAndDeviceNotAccepted = true; + this.remoteLocked = true; + this.remoteCleaned = true; + return false; + } else if ("OK" == _) ; else if ("MISMATCHED" == _[0]) { + Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified.", LOG_LEVEL_NOTICE); + this.tweakSettingsMismatched = true; + this.preferredTweakValue = _[1]; + return false; + } + } + return true; + } + async fetchRemoteChunks(_, ee) { + return []; + } + closeReplication() { + this.client.requestStop(); + this.syncStatus = "CLOSED"; + Logger("Replication closed"); + this.updateInfo(); + } + async tryResetRemoteDatabase(_) { + this.closeReplication(); + try { + await this.client.resetBucket(); + Logger("Remote Bucket Cleared", LOG_LEVEL_NOTICE); + await this.tryCreateRemoteDatabase(_); + } catch (_) { + Logger("Something happened on Remote Bucket Clear", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_NOTICE); + } + } + async tryCreateRemoteDatabase(_) { + this.closeReplication(); + Logger("Remote Database Created or Connected", LOG_LEVEL_NOTICE); + } + async markRemoteLocked(_, ee, ne) { + const ie = { + _id: MILSTONE_DOCID, + type: "milestoneinfo", + created: new Date / 1, + locked: ee, + cleaned: ne, + accepted_nodes: [ this.nodeid ], + node_chunk_info: { + [this.nodeid]: currentVersionRange2 + }, + tweak_values: {} + }, re = { + ...ie, + ...await this.client.downloadJson(MILSTONE_DOCID) || {} + }; + re.node_chunk_info = { + ...ie.node_chunk_info, + ...re.node_chunk_info + }; + re.accepted_nodes = [ this.nodeid ]; + re.locked = ee; + re.cleaned = re.cleaned || ne; + if (ee) Logger("Lock remote bucket to prevent data corruption", LOG_LEVEL_NOTICE); else Logger("Unlock remote bucket to prevent data corruption", LOG_LEVEL_NOTICE); + await this.client.uploadJson(MILSTONE_DOCID, re); + } + async markRemoteResolved(_) { + const ee = { + _id: MILSTONE_DOCID, + type: "milestoneinfo", + created: new Date / 1, + locked: false, + accepted_nodes: [ this.nodeid ], + node_chunk_info: { + [this.nodeid]: currentVersionRange2 + }, + tweak_values: {} + }, ne = { + ...ee, + ...await this.client.downloadJson(MILSTONE_DOCID) || {} + }; + ne.node_chunk_info = { + ...ee.node_chunk_info, + ...ne.node_chunk_info + }; + ne.accepted_nodes = Array.from(new Set([ ...ne.accepted_nodes, this.nodeid ])); + Logger("Mark this device as 'resolved'.", LOG_LEVEL_NOTICE); + await this.client.uploadJson(MILSTONE_DOCID, ne); + } + async tryConnectRemote(_, ee = true) { + const ne = _.accessKey, ie = _.secretKey, re = _.bucket, se = _.region, oe = _.endpoint, le = _.useCustomRequestHandler, ue = new JournalSyncMinio(ne, ie, oe, re, this.env.simpleStore, this.env, le, se); + try { + await ue.listFiles("", 1); + Logger(`Connected to ${oe} successfully!`, LOG_LEVEL_NOTICE); + return true; + } catch (_) { + Logger(`Error! Could not connected to ${oe}\n${_.message}`, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_NOTICE); + return false; + } + } + async resetRemoteTweakSettings(_) { + try { + const _ = await this.client.downloadJson(MILSTONE_DOCID); + if (!_) throw new Error("Missing remote milestone"); + _.tweak_values = {}; + Logger("tweak values on the remote database have been cleared", LOG_LEVEL_VERBOSE); + await this.client.uploadJson(MILSTONE_DOCID, _); + } catch (_) { + Logger("Could not retrieve remote milestone", LOG_LEVEL_NOTICE); + throw _; + } + } + async setPreferredRemoteTweakSettings(_) { + try { + const ee = await this.client.downloadJson(MILSTONE_DOCID); + if (!ee) throw new Error("Missing remote milestone"); + ee.tweak_values[DEVICE_ID_PREFERRED] = extractObject(TweakValuesTemplate, { + ..._ + }); + Logger("tweak values on the remote database have been cleared", LOG_LEVEL_VERBOSE); + await this.client.uploadJson(MILSTONE_DOCID, ee); + } catch (_) { + Logger("Could not retrieve remote milestone", LOG_LEVEL_NOTICE); + throw _; + } + } + async getRemoteStatus(_) { + const ee = _.accessKey, ne = _.secretKey, ie = _.bucket, re = _.region, se = _.endpoint, oe = _.useCustomRequestHandler, le = new JournalSyncMinio(ee, ne, se, ie, this.env.simpleStore, this.env, oe, re); + return await le.getUsage(); + } +}, ObsHttpHandler = class extends FetchHttpHandler { + constructor(_, ee) { + super(_); + this.requestTimeoutInMs = void 0 === _ ? void 0 : _.requestTimeout; + this.reverseProxyNoSignUrl = ee; + } + async handle(_, {abortSignal: ee} = {}) { + if (null == ee ? void 0 : ee.aborted) { + const _ = new Error("Request aborted"); + _.name = "AbortError"; + return Promise.reject(_); + } + let ne = _.path; + if (_.query) { + const ee = buildQueryString(_.query); + if (ee) ne += `?${ee}`; + } + const {port: ie, method: re} = _; + let se = `${_.protocol}//${_.hostname}${ie ? `:${ie}` : ""}${ne}`; + if (void 0 !== this.reverseProxyNoSignUrl && "" !== this.reverseProxyNoSignUrl) { + const _ = new URL(se); + _.host = this.reverseProxyNoSignUrl; + se = _.href; + } + const oe = "GET" === re || "HEAD" === re ? void 0 : _.body, le = {}; + for (const ee of Object.keys(_.headers)) { + const ne = ee.toLowerCase(); + if ("host" !== ne && "content-length" !== ne) le[ne] = _.headers[ee]; + } + let ue; + if (void 0 !== le["content-type"]) ue = le["content-type"]; + let de = oe; + if (ArrayBuffer.isView(oe)) de = new Uint8Array(oe.buffer).buffer; + const fe = { + body: de, + headers: le, + method: re, + url: se, + contentType: ue + }, he = [ (0, import_obsidian.requestUrl)(fe).then((_ => { + const ee = _.headers, ne = {}; + for (const _ of Object.keys(ee)) ne[_.toLowerCase()] = ee[_]; + const ie = new ReadableStream({ + start(ee) { + ee.enqueue(new Uint8Array(_.arrayBuffer)); + ee.close(); + } + }); + return { + response: new HttpResponse({ + headers: ne, + statusCode: _.status, + body: ie + }) + }; + })), requestTimeout(this.requestTimeoutInMs) ]; + if (ee) he.push(new Promise(((_, ne) => { + ee.onabort = () => { + const _ = new Error("Request aborted"); + _.name = "AbortError"; + ne(_); + }; + }))); + return Promise.race(he); + } +}, import_obsidian8 = require("obsidian"), isDebug = false; + +setNoticeClass(import_obsidian.Notice); + +setGlobalLogFunction(((_, ee, ne) => { + const ie = { + message: _, + level: ee, + key: ne + }; + logStore.enqueue(ie); +})); + +var recentLogs = [], recentLogProcessor = new QueueProcessor((_ => { + recentLogs = [ ...recentLogs, ..._ ].splice(-200); + logMessages.value = recentLogs; +}), { + batchSize: 25, + delay: 10, + suspended: false, + concurrentLimit: 1 +}).resumePipeLine(); + +async function fetchByAPI(_) { + var ee, ne; + const ie = await (0, import_obsidian.requestUrl)(_); + if (ie.status - ie.status % 100 != 200) { + const _ = new Error(`Request Error:${ie.status}`); + if (ie.json) { + _.message = ie.json.reason; + _.name = `${null != (ee = ie.json.error) ? ee : ""}:${null != (ne = ie.json.message) ? ne : ""}`; + } + _.status = ie.status; + throw _; + } + return ie; +} + +var SETTING_HEADER = "````yaml:livesync-setting\n", SETTING_FOOTER = "\n````", ObsidianLiveSyncPlugin = class extends import_obsidian.Plugin { + constructor() { + super(...arguments); + this._suspended = false; + this.deviceAndVaultName = ""; + this.isReady = false; + this.packageVersion = ""; + this.manifestVersion = ""; + this.addOnHiddenFileSync = new HiddenFileSync(this); + this.addOnSetup = new SetupLiveSync(this); + this.addOnConfigSync = new ConfigSync(this); + this.addOns = [ this.addOnHiddenFileSync, this.addOnSetup, this.addOnConfigSync ]; + this.periodicSyncProcessor = new PeriodicProcessor(this, (async () => await this.replicate())); + this.last_successful_post = false; + this.vaultAccess = new SerializedFileAccess(this.app); + this._unloaded = false; + this.requestCount = reactiveSource(0); + this.responseCount = reactiveSource(0); + this.processReplication = _ => this.parseReplicationResult(_); + this.replicationStat = reactiveSource({ + sent: 0, + arrived: 0, + maxPullSeq: 0, + maxPushSeq: 0, + lastSyncPullSeq: 0, + lastSyncPushSeq: 0, + syncStatus: "CLOSED" + }); + this.isRedFlagRaised = () => this.isFlagFileExist(FLAGMD_REDFLAG); + this.isRedFlag2Raised = () => this.isFlagFileExist(FLAGMD_REDFLAG2) || this.isFlagFileExist(FLAGMD_REDFLAG2_HR); + this.isRedFlag3Raised = () => this.isFlagFileExist(FLAGMD_REDFLAG3) || this.isFlagFileExist(FLAGMD_REDFLAG3_HR); + this.simpleStore = { + get: async _ => await this.kvDB.get(`os-${_}`), + set: async (_, ee) => { + await this.kvDB.set(`os-${_}`, ee); + }, + delete: async _ => { + await this.kvDB.del(`os-${_}`); + }, + keys: async (_, ee, ne) => { + const ie = this.kvDB.keys(IDBKeyRange.bound(`os-${_ || ""}`, `os-${ee || ""}`), ne); + return (await ie).map((_ => _.toString())).filter((_ => _.startsWith("os-"))).map((_ => _.substring(3))); + } + }; + this.usedPassphrase = ""; + this.vaultManager = new StorageEventManagerObsidian(this); + this.hasFocus = true; + this.isLastHidden = false; + this.pendingFileEventCount = reactiveSource(0); + this.processingFileEventCount = reactiveSource(0); + this.notifies = {}; + this.statusLog = reactiveSource(""); + this._saveQueuedFiles = throttle((() => { + const _ = this.replicationResultProcessor._queue.filter((_ => null != _)).map((_ => { + var ee; + return null != (ee = null == _ ? void 0 : _._id) ? ee : ""; + })); + fireAndForget((() => this.kvDB.set("queued-files", _))); + }), 100); + this.databaseQueueCount = reactiveSource(0); + this.databaseQueuedProcessor = new QueueProcessor((async _ => { + var ee; + const ne = _[0], ie = this.getPath(ne), re = await this.localDatabase.getDBEntryFromMeta({ + ...ne + }, {}, false, true, true); + if (re) if (isInternalMetadata(re._id) && this.settings.syncInternalFiles) { + const _ = this.getPathWithoutPrefix(re); + this.isTargetFile(_).then((ee => ee ? this.addOnHiddenFileSync.procInternalFile(_) : Logger(`Skipped (Not target:${_})`, LOG_LEVEL_VERBOSE))); + } else if (isValidPath(this.getPath(re))) this.storageApplyingProcessor.enqueue(re); else Logger(`Skipped: ${re._id.substring(0, 8)}`, LOG_LEVEL_VERBOSE); else Logger(`Something went wrong while gathering content of ${ie} (${ne._id.substring(0, 8)}, ${null == (ee = ne._rev) ? void 0 : ee.substring(0, 10)}) `, LOG_LEVEL_NOTICE); + }), { + suspended: true, + batchSize: 1, + concurrentLimit: 10, + yieldThreshold: 1, + delay: 0, + totalRemainingReactiveSource: this.databaseQueueCount + }).replaceEnqueueProcessor(((_, ee) => [ ..._.filter((_ => _._id != ee._id)), ee ])).startPipeline(); + this.storageApplyingCount = reactiveSource(0); + this.storageApplyingProcessor = new QueueProcessor((async _ => { + const ee = _[0]; + await serialized(ee.path, (async () => { + var _, ne; + const ie = this.getPath(ee); + Logger(`Processing ${ie} (${ee._id.substring(0, 8)}: ${null == (_ = ee._rev) ? void 0 : _.substring(0, 5)}) :Started...`, LOG_LEVEL_VERBOSE); + const re = this.vaultAccess.getAbstractFileByPath(this.getPathWithoutPrefix(ee)); + if (re instanceof import_obsidian.TFolder) Logger(`${this.getPath(ee)} is already exist as the folder`); else { + await this.processEntryDoc(ee, re instanceof import_obsidian.TFile ? re : void 0); + Logger(`Processing ${ie} (${ee._id.substring(0, 8)} :${null == (ne = ee._rev) ? void 0 : ne.substring(0, 5)}) : Done`); + } + })); + }), { + suspended: true, + batchSize: 1, + concurrentLimit: 6, + yieldThreshold: 1, + delay: 0, + totalRemainingReactiveSource: this.storageApplyingCount + }).replaceEnqueueProcessor(((_, ee) => [ ..._.filter((_ => _._id != ee._id)), ee ])).startPipeline(); + this.replicationResultCount = reactiveSource(0); + this.replicationResultProcessor = new QueueProcessor((async _ => { + if (this.settings.suspendParseReplicationResult) return; + const ee = _[0]; + if (ee) if (!isChunk(ee._id)) { + for (const _ of this.addOns) if (await _.parseReplicationResultItem(ee)) return; + if ("versioninfo" != ee.type) { + if (ee._id != SYNCINFO_ID && !ee._id.startsWith("_design")) if (isAnyNote(ee)) { + if (this.databaseQueuedProcessor._isSuspended) Logger(`Processing scheduled: ${ee.path}`, LOG_LEVEL_INFO); + const _ = ee.size; + if (this.isFileSizeExceeded(_)) { + Logger(`Processing ${ee.path} has been skipped due to file size exceeding the limit`, LOG_LEVEL_NOTICE); + return; + } + this.databaseQueuedProcessor.enqueue(ee); + } + } else if (ee.version > VER) { + this.replicator.closeReplication(); + Logger("Remote database updated to incompatible version. update your Self-hosted LiveSync plugin.", LOG_LEVEL_NOTICE); + } + } else sendValue(`leaf-${ee._id}`, ee); + }), { + batchSize: 1, + suspended: true, + concurrentLimit: 100, + delay: 0, + totalRemainingReactiveSource: this.replicationResultCount + }).replaceEnqueueProcessor(((_, ee) => [ ..._.filter((_ => _._id != ee._id)), ee ])).startPipeline().onUpdateProgress((() => { + this.saveQueuedFiles(); + })); + this.lastMessage = ""; + this.conflictProcessQueueCount = reactiveSource(0); + this.conflictResolveQueue = new QueueProcessor((async _ => { + const ee = _[0]; + await serialized(`conflict-resolve:${ee}`, (async () => { + const _ = await this.checkConflictAndPerformAutoMerge(ee); + if (_ !== MISSING_OR_ERROR && _ !== NOT_CONFLICTED && _ !== CANCELLED) if (_ !== AUTO_MERGED) { + if (this.settings.showMergeDialogOnlyOnActive) { + const _ = this.getActiveFile(); + if (_ && _.path != ee) { + Logger(`${ee} is conflicted. Merging process has been postponed to the file have got opened.`, LOG_LEVEL_NOTICE); + return; + } + } + Logger("conflict:Manual merge required!"); + await this.resolveConflictByUI(ee, _); + } else { + if (this.settings.syncAfterMerge && !this.suspended) await shareRunningResult("replication", (() => this.replicate())); + Logger("conflict:Automatically merged, but we have to check it again"); + this.conflictCheckQueue.enqueue(ee); + } + })); + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 1, + delay: 10, + keepResultUntilDownstreamConnected: false + }).replaceEnqueueProcessor(((_, ee) => { + sendValue("cancel-resolve-conflict:" + ee, true); + return [ ...[ ..._ ].filter((_ => _ != ee)), ee ]; + })); + this.conflictCheckQueue = new QueueProcessor((_ => { + const ee = _[0]; + if (this.vaultAccess.getAbstractFileByPath(ee) instanceof import_obsidian.TFolder) return []; else return [ ee ]; + }), { + suspended: false, + batchSize: 1, + concurrentLimit: 5, + delay: 10, + keepResultUntilDownstreamConnected: true, + pipeTo: this.conflictResolveQueue, + totalRemainingReactiveSource: this.conflictProcessQueueCount + }); + this.ignoreFileCache = new LRUCache(300, 25e4, true); + this.ignoreFiles = []; + } + customFetchHandler() { + if (!this._customHandler) this._customHandler = new ObsHttpHandler(void 0, void 0); + return this._customHandler; + } + get suspended() { + var _; + return this._suspended || !(null == (_ = this.settings) ? void 0 : _.isConfigured); + } + set suspended(_) { + this._suspended = _; + } + get shouldBatchSave() { + var _, ee; + return (null == (_ = this.settings) ? void 0 : _.batchSave) && true != (null == (ee = this.settings) ? void 0 : ee.liveSync); + } + get batchSaveMinimumDelay() { + var _, ee; + return null != (ee = null == (_ = this.settings) ? void 0 : _.batchSaveMinimumDelay) ? ee : DEFAULT_SETTINGS.batchSaveMinimumDelay; + } + get batchSaveMaximumDelay() { + var _, ee; + return null != (ee = null == (_ = this.settings) ? void 0 : _.batchSaveMaximumDelay) ? ee : DEFAULT_SETTINGS.batchSaveMaximumDelay; + } + getLastPostFailedBySize() { + return !this.last_successful_post; + } + getDatabase() { + return this.localDatabase.localDatabase; + } + getSettings() { + return this.settings; + } + getIsMobile() { + return this.isMobile; + } + async connectRemoteCouchDB(_, ee, ne, ie, re, se, oe, le) { + if (!isValidRemoteCouchDBURI(_)) return "Remote URI is not valid"; + if (_.toLowerCase() != _) return "Remote URI and database name could not contain capital letters."; + if (-1 !== _.indexOf(" ")) return "Remote URI and database name could not contain spaces."; + let ue = ""; + if (ee.username && ee.password) { + const _ = String.fromCharCode.apply(null, [ ...writeString(`${ee.username}:${ee.password}`) ]), ne = window.btoa(_); + ue = "Basic " + ne; + } else ue = ""; + const de = new index_es_default(_, { + adapter: "http", + auth: ee, + skip_setup: !se, + fetch: async (ee, ie) => { + var re, se; + let oe = ""; + const le = ee.toString().substring(_.length), de = null != (re = null == ie ? void 0 : ie.method) ? re : "GET"; + if (null == ie ? void 0 : ie.body) { + const ee = ie.body.toString().length; + if (ee > 1e7) if (isCloudantURI(_)) { + this.last_successful_post = false; + Logger("This request should fail on IBM Cloudant.", LOG_LEVEL_VERBOSE); + throw new Error("This request should fail on IBM Cloudant."); + } + oe = ` (${ee})`; + } + if (!ne && "string" == typeof ee && "string" == typeof (null != (se = null == ie ? void 0 : ie.body) ? se : "")) { + const _ = null == ie ? void 0 : ie.body, ne = { + ...null == ie ? void 0 : ie.headers + }; + if ("" != ue) ne["authorization"] = ue; + delete ne["host"]; + delete ne["Host"]; + delete ne["content-length"]; + delete ne["Content-Length"]; + const re = { + url: ee, + method: null == ie ? void 0 : ie.method, + body: _, + headers: ne, + contentType: "application/json" + }; + try { + this.requestCount.value = this.requestCount.value + 1; + const _ = await fetchByAPI(re); + if ("POST" == de || "PUT" == de) this.last_successful_post = _.status - _.status % 100 == 200; else this.last_successful_post = true; + Logger(`HTTP:${de}${oe} to:${le} -> ${_.status}`, LOG_LEVEL_DEBUG); + return new Response(_.arrayBuffer, { + headers: _.headers, + status: _.status, + statusText: `${_.status}` + }); + } catch (_) { + Logger(`HTTP:${de}${oe} to:${le} -> failed`, LOG_LEVEL_VERBOSE); + if (-1 !== ee.toString().indexOf("_bulk_docs")) this.last_successful_post = false; + Logger(_); + throw _; + } finally { + this.responseCount.value = this.responseCount.value + 1; + } + } + try { + this.requestCount.value = this.requestCount.value + 1; + const _ = await fetch(ee, ie); + if ("POST" == de || "PUT" == de) this.last_successful_post = _.ok; else this.last_successful_post = true; + Logger(`HTTP:${de}${oe} to:${le} -> ${_.status}`, LOG_LEVEL_DEBUG); + if (2 !== Math.floor(_.status / 100)) if ("GET" != de && -1 === le.indexOf("/_local/") && !le.endsWith("/")) { + const ee = _.clone(); + Logger(`The request may have failed. The reason sent by the server: ${ee.status}: ${ee.statusText}`); + try { + Logger(await (await ee.blob()).text(), LOG_LEVEL_VERBOSE); + } catch (_) { + Logger("Cloud not parse response", LOG_LEVEL_VERBOSE); + } + } else Logger("Just checkpoint or some server information has been missing. The 404 error shown above is not an error.", LOG_LEVEL_VERBOSE); + return _; + } catch (_) { + Logger(`HTTP:${de}${oe} to:${le} -> failed`, LOG_LEVEL_VERBOSE); + if (-1 !== ee.toString().indexOf("_bulk_docs")) this.last_successful_post = false; + Logger(_); + throw _; + } finally { + this.responseCount.value = this.responseCount.value + 1; + } + } + }); + enableCompression(de, le); + if ("false" !== ie && "string" == typeof ie) enableEncryption(de, ie, re, false); + if (oe) return { + db: de, + info: { + db_name: "", + doc_count: 0, + update_seq: "" + } + }; + try { + const _ = await de.info(); + return { + db: de, + info: _ + }; + } catch (_) { + let ee = `${null == _ ? void 0 : _.name}:${null == _ ? void 0 : _.message}`; + if ("TypeError" == (null == _ ? void 0 : _.name) && "Failed to fetch" == (null == _ ? void 0 : _.message)) ee += "\n**Note** This error caused by many reasons. The only sure thing is you didn't touch the server.\nTo check details, open inspector."; + Logger(_, LOG_LEVEL_VERBOSE); + return ee; + } + } + get isMobile() { + return this.app.isMobile; + } + get vaultName() { + return this.app.vault.getName(); + } + getActiveFile() { + return this.app.workspace.getActiveFile(); + } + get appId() { + return `${"appId" in this.app ? this.app.appId : ""}`; + } + id2path(_, ee, ne) { + const ie = id2path(_, ee); + if (ne && isInternalMetadata(ie)) return stripInternalMetadataPrefix(ie); else return ie; + } + getPath(_) { + return getPath2(_); + } + getPathWithoutPrefix(_) { + return getPathWithoutPrefix(_); + } + async path2id(_, ee) { + const ne = addPrefix(_, null != ee ? ee : ""); + return await path2id(ne, this.settings.usePathObfuscation ? this.settings.passphrase : ""); + } + createPouchDBInstance(_, ee) { + const ne = null != ee ? ee : {}; + if (this.settings.useIndexedDBAdapter) { + ne.adapter = "indexeddb"; + ne.purged_infos_limit = 1; + return new index_es_default(_ + "-indexeddb", ne); + } + return new index_es_default(_, ne); + } + beforeOnUnload(_) { + this.kvDB.close(); + } + onClose(_) { + this.kvDB.close(); + } + getNewReplicator(_ = {}) { + if ({ + ...this.settings, + ..._ + }.remoteType == REMOTE_MINIO) return new LiveSyncJournalReplicator(this); else return new LiveSyncCouchDBReplicator(this); + } + async onInitializeDatabase(_) { + this.kvDB = await OpenKeyValueDatabase(_.dbname + "-livesync-kv"); + this.replicator = this.getNewReplicator(); + } + async onResetDatabase(_) { + this.kvDB.del("queued-files"); + await this.kvDB.destroy(); + this.kvDB = await OpenKeyValueDatabase(_.dbname + "-livesync-kv"); + this.replicator = this.getNewReplicator(); + } + getReplicator() { + return this.replicator; + } + getVaultName() { + var _; + return this.vaultName + ((null == (_ = this.settings) ? void 0 : _.additionalSuffixOfDatabaseName) ? "-" + this.settings.additionalSuffixOfDatabaseName : ""); + } + isFlagFileExist(_) { + const ee = this.vaultAccess.getAbstractFileByPath(normalizePath(_)); + if (null != ee && ee instanceof import_obsidian.TFile) return true; else return false; + } + async deleteFlagFile(_) { + try { + const ee = this.vaultAccess.getAbstractFileByPath(normalizePath(_)); + if (null != ee && ee instanceof import_obsidian.TFile) await this.vaultAccess.delete(ee, true); + } catch (ee) { + Logger(`Could not delete ${_}`); + Logger(ee, LOG_LEVEL_VERBOSE); + } + } + async deleteRedFlag2() { + await this.deleteFlagFile(FLAGMD_REDFLAG2); + await this.deleteFlagFile(FLAGMD_REDFLAG2_HR); + } + async deleteRedFlag3() { + await this.deleteFlagFile(FLAGMD_REDFLAG3); + await this.deleteFlagFile(FLAGMD_REDFLAG3_HR); + } + showHistory(_, ee) { + new DocumentHistoryModal(this.app, this, _, ee).open(); + } + async fileHistory() { + const _ = []; + for await (const ee of this.localDatabase.findAllDocs()) _.push({ + id: ee._id, + path: this.getPath(ee), + dispPath: this.getPathWithoutPrefix(ee), + mtime: ee.mtime + }); + _.sort(((_, ee) => ee.mtime - _.mtime)); + const ee = _.map((_ => _.dispPath)), ne = await this.askSelectString("File to view History", ee); + if (ne) { + const ee = _.find((_ => _.dispPath == ne)); + this.showHistory(ee.path, ee.id); + } + } + async pickFileForResolve() { + const _ = []; + for await (const ee of this.localDatabase.findAllDocs({ + conflicts: true + })) if ("_conflicts" in ee) _.push({ + id: ee._id, + path: this.getPath(ee), + dispPath: this.getPathWithoutPrefix(ee), + mtime: ee.mtime + }); + _.sort(((_, ee) => ee.mtime - _.mtime)); + const ee = _.map((_ => _.dispPath)); + if (0 == ee.length) { + Logger("There are no conflicted documents", LOG_LEVEL_NOTICE); + return false; + } + const ne = await this.askSelectString("File to resolve conflict", ee); + if (ne) { + const ee = _.find((_ => _.dispPath == ne)); + this.resolveConflicted(ee.path); + await this.conflictCheckQueue.waitForAllProcessed(); + return true; + } + return false; + } + async resolveConflicted(_) { + if (isInternalMetadata(_)) this.addOnHiddenFileSync.queueConflictCheck(_); else if (isPluginMetadata(_)) await this.resolveConflictByNewerEntry(_); else if (isCustomisationSyncMetadata(_)) await this.resolveConflictByNewerEntry(_); else this.queueConflictCheck(_); + } + async collectDeletedFiles() { + const _ = this.settings.automaticallyDeleteMetadataOfDeletedFiles; + if (_ <= 0) return; + Logger("Checking expired file history"); + const ee = Date.now() - 864e5 * _, ne = []; + for await (const _ of this.localDatabase.findAllDocs({ + conflicts: true + })) if (isAnyNote(_)) if (_.deleted && _.mtime - ee < 0) ne.push({ + path: this.getPath(_), + mtime: _.mtime, + ttl: (_.mtime - ee) / 1e3 / 86400, + doc: _ + }); + if (0 != ne.length) { + for (const _ of ne) { + Logger(`Deletion history expired: ${_.path}`); + const ee = _.doc; + ee._deleted = true; + await this.localDatabase.putRaw(ee); + } + Logger("Checking expired file history done"); + } else { + Logger("There are no old documents"); + Logger("Checking expired file history done"); + } + } + getMinioJournalSyncClient() { + const _ = this.settings.accessKey, ee = this.settings.secretKey, ne = this.settings.bucket, ie = this.settings.region, re = this.settings.endpoint, se = this.settings.useCustomRequestHandler; + return new JournalSyncMinio(_, ee, re, ne, this.simpleStore, this, se, ie); + } + async resetRemoteBucket() { + const _ = this.getMinioJournalSyncClient(); + await _.resetBucket(); + } + async resetJournalSync() { + const _ = this.getMinioJournalSyncClient(); + await _.resetCheckpointInfo(); + } + async journalSendTest() { + const _ = this.getMinioJournalSyncClient(); + await _.sendLocalJournal(); + } + async journalFetchTest() { + const _ = this.getMinioJournalSyncClient(); + await _.receiveRemoteJournal(); + } + async journalSyncTest() { + const _ = this.getMinioJournalSyncClient(); + await _.sync(); + } + async onLayoutReady() { + this.registerFileWatchEvents(); + if (this.localDatabase.isReady) if (this.settings.isConfigured) try { + if (this.isRedFlagRaised() || this.isRedFlag2Raised() || this.isRedFlag3Raised()) { + this.settings.batchSave = false; + this.addOnSetup.suspendAllSync(); + this.addOnSetup.suspendExtraSync(); + this.settings.suspendFileWatching = true; + await this.saveSettings(); + if (this.isRedFlag2Raised()) { + Logger(`${FLAGMD_REDFLAG2} or ${FLAGMD_REDFLAG2_HR} has been detected! Self-hosted LiveSync suspends all sync and rebuild everything.`, LOG_LEVEL_NOTICE); + await this.addOnSetup.rebuildEverything(); + await this.deleteRedFlag2(); + if ("yes" == await this.askYesNo("Do you want to disable Suspend file watching and restart obsidian now?")) { + this.settings.suspendFileWatching = false; + await this.saveSettings(); + this.performAppReload(); + } + } else if (this.isRedFlag3Raised()) { + Logger(`${FLAGMD_REDFLAG3} or ${FLAGMD_REDFLAG3_HR} has been detected! Self-hosted LiveSync will discard the local database and fetch everything from the remote once again.`, LOG_LEVEL_NOTICE); + await this.addOnSetup.fetchLocal(); + await this.deleteRedFlag3(); + if (this.settings.suspendFileWatching) if ("yes" == await this.askYesNo("Do you want to disable Suspend file watching and restart obsidian now?")) { + this.settings.suspendFileWatching = false; + await this.saveSettings(); + this.performAppReload(); + } + } else { + this.settings.writeLogToTheFile = true; + await this.openDatabase(); + Logger("The red flag is raised! The whole initialize steps are skipped, and any file changes are not captured.", LOG_LEVEL_NOTICE); + } + } else { + if (this.settings.suspendFileWatching) Logger("'Suspend file watching' turned on. Are you sure this is what you intended? Every modification on the vault will be ignored.", LOG_LEVEL_NOTICE); + if (this.settings.suspendParseReplicationResult) Logger("'Suspend database reflecting' turned on. Are you sure this is what you intended? Every replicated change will be postponed until disabling this option.", LOG_LEVEL_NOTICE); + if (!await this.initializeDatabase(false, false)) return false; + } + this.registerWatchEvents(); + await this.realizeSettingSyncMode(); + this.swapSaveCommand(); + if (!this.settings.liveSync && this.settings.syncOnStart) this.replicator.openReplication(this.settings, false, false, false); + this.scanStat(); + } catch (_) { + Logger("Error while loading Self-hosted LiveSync", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } else { + const _ = "Hello and welcome to Self-hosted LiveSync.\n\nYour device seems to **not be configured yet**. Please finish the setup and synchronise your vaults!\n\nClick anywhere to stop counting down.\n\n## At the first device\n- With Setup URI -> Use `Use the copied setup URI`. \n If you have configured it automatically, you should have one.\n- Without Setup URI -> Use `Setup wizard` in setting dialogue. **`Minimal setup` is recommended**.\n- What is the Setup URI? -> Do not worry! We have [some docs](https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use) now. Please refer to them once.\n\n## At the subsequent device\n- With Setup URI -> Use `Use the copied setup URI`. \n If you do not have it yet, you can copy it on the first device.\n- Without Setup URI -> Use `Setup wizard` in setting dialogue, but **strongly recommends using setup URI**.\n", ee = "Open setting dialog", ne = "Use the copied setup URI", ie = "Dismiss", re = await confirmWithMessage(this, "Welcome to Self-hosted LiveSync", _, [ ne, ee, ie ], ie, 40); + if (re === ee) try { + this.openSetting(); + } catch (_) { + Logger("Something went wrong on opening setting dialog, please open it manually", LOG_LEVEL_NOTICE); + } else if (re == ne) fireAndForget(this.addOnSetup.command_openSetupURI()); + } else Logger("Something went wrong! The local database is not ready", LOG_LEVEL_NOTICE); + } + async scanStat() { + var _; + const ee = []; + Logger("Additional safety scan..", LOG_LEVEL_VERBOSE); + Logger("Checking storage sizes", LOG_LEVEL_VERBOSE); + if (this.settings.notifyThresholdOfRemoteStorageSize < 0) { + const _ = "Now, Self-hosted LiveSync is able to check the remote storage size on the start-up.\n\nYou can configure the threshold size for your remote storage. This will be different for your server.\n\nPlease choose the threshold size as you like.\n\n- 0: Do not warn about storage size.\n This is recommended if you have enough space on the remote storage especially you have self-hosted. And you can check the storage size and rebuild manually.\n- 800: Warn if the remote storage size exceeds 800MB.\n This is recommended if you are using fly.io with 1GB limit or IBM Cloudant.\n- 2000: Warn if the remote storage size exceeds 2GB.\n\nAnd if your actual storage size exceeds the threshold after the setup, you may warned again. But do not worry, you can enlarge the threshold (or rebuild everything to reduce the size).\n", ee = "Do not warn", ne = "800MB", ie = "2GB", re = await confirmWithMessage(this, "Remote storage size threshold", _, [ ee, ne, ie ], ne, 40); + if (re == ee) { + this.settings.notifyThresholdOfRemoteStorageSize = 0; + await this.saveSettings(); + } else if (re == ne) { + this.settings.notifyThresholdOfRemoteStorageSize = 800; + await this.saveSettings(); + } else { + this.settings.notifyThresholdOfRemoteStorageSize = 2e3; + await this.saveSettings(); + } + } + if (this.settings.notifyThresholdOfRemoteStorageSize > 0) { + const ee = await (null == (_ = this.replicator) ? void 0 : _.getRemoteStatus(this.settings)); + if (ee) { + const _ = ee.estimatedSize; + if (_) { + const ee = 1024 * this.settings.notifyThresholdOfRemoteStorageSize * 1024; + if (_ > ee) { + const ne = `Remote storage size: ${sizeToHumanReadable2(_)}. It exceeds the configured value ${sizeToHumanReadable2(ee)}.\nThis may cause the storage to be full. You should enlarge the remote storage, or rebuild everything to reduce the size. \n\n**Note:** If you are new to Self-hosted LiveSync, you should enlarge the threshold. \n\n\nSelf-hosted LiveSync will not release the storage automatically even if the file is deleted. This is why they need regular maintenance.\n\n\nIf you have enough space on the remote storage, you can enlarge the threshold. Otherwise, you should rebuild everything.\n\n\nHowever, **Please make sure that all devices have been synchronised**. \n\n\n`, ie = `Enlarge to ${100 + ~~(_ / 1024 / 1024)}MB`, re = "Rebuild now", se = "Dismiss", oe = await confirmWithMessage(this, "Remote storage size exceeded", ne, [ ie, re, se ], se, 20); + if (oe == re) { + if ("yes" == await this.askYesNo("This may take a bit of a long time. Do you really want to rebuild everything now?")) { + Logger("Receiving all from the server before rebuilding", LOG_LEVEL_NOTICE); + await this.replicateAllFromServer(true); + await delay(3e3); + Logger("Obsidian will be reloaded to rebuild everything.", LOG_LEVEL_NOTICE); + await this.vaultAccess.vaultCreate(FLAGMD_REDFLAG2_HR, ""); + this.performAppReload(); + } + } else if (oe == ie) { + this.settings.notifyThresholdOfRemoteStorageSize = 100 + ~~(_ / 1024 / 1024); + Logger(`Threshold has been enlarged to ${this.settings.notifyThresholdOfRemoteStorageSize}MB`, LOG_LEVEL_NOTICE); + await this.saveSettings(); + } + Logger(`Remote storage size: ${sizeToHumanReadable2(_)} exceeded ${sizeToHumanReadable2(1024 * this.settings.notifyThresholdOfRemoteStorageSize * 1024)} `, LOG_LEVEL_INFO); + } else Logger(`Remote storage size: ${sizeToHumanReadable2(_)}`, LOG_LEVEL_INFO); + } + } + } + for await (const _ of this.localDatabase.findAllDocs({ + conflicts: true + })) if ("_conflicts" in _) ee.push({ + path: this.getPath(_), + mtime: _.mtime + }); + if (ee.length > 0) { + this.askInPopup("conflicting-detected-on-safety", 'Some files have been left conflicted! Press {HERE} to resolve them, or you can do it later by "Pick a file to resolve conflict', (_ => { + _.text = "HERE"; + _.addEventListener("click", (() => { + this.performCommand("obsidian-livesync:livesync-all-conflictcheck"); + })); + })); + Logger('Some files have been left conflicted! Please resolve them by "Pick a file to resolve conflict". The list is written in the log.', LOG_LEVEL_VERBOSE); + for (const _ of ee) Logger(`Conflicted: ${_.path}`); + } else Logger("There are no conflicted files", LOG_LEVEL_VERBOSE); + Logger("Additional safety scan done", LOG_LEVEL_VERBOSE); + } + async askEnableV2() { + const _ = "Keep v1"; + return await confirmWithMessage(this, "binary and encryption", "Since v0.20.0, Self-hosted LiveSync uses a new format for binary files and encrypted things. In the new format, files are split at meaningful delimitations, increasing the effectiveness of deduplication.\nHowever, the new format lacks compatibility with LiveSync before v0.20.0 and related projects. Basically enabling V2 is recommended. but If you are using some related products, stay in a while, please!\nNote: We can always able to read V1 format. It will be progressively converted. And, we can change this toggle later.", [ "Enable v2", _ ], _, 40) == _; + } + addUIs() { + (0, import_obsidian.addIcon)("replicate", '\n \n \n \n \n '); + (0, import_obsidian.addIcon)("view-log", '\n \n \n '); + (0, import_obsidian.addIcon)("custom-sync", '\n \n '); + this.addRibbonIcon("replicate", "Replicate", (async () => { + await this.replicate(true); + })).addClass("livesync-ribbon-replicate"); + this.addRibbonIcon("view-log", "Show log", (() => { + this.showView(VIEW_TYPE_LOG); + })).addClass("livesync-ribbon-showlog"); + this.addRibbonIcon("custom-sync", "Show Customization sync", (() => { + this.addOnConfigSync.showPluginSyncModal(); + })).addClass("livesync-ribbon-showcustom"); + this.addCommand({ + id: "view-log", + name: "Show log", + callback: () => { + this.showView(VIEW_TYPE_LOG); + } + }); + this.addCommand({ + id: "livesync-replicate", + name: "Replicate now", + callback: async () => { + await this.replicate(); + } + }); + this.addCommand({ + id: "livesync-dump", + name: "Dump information of this doc ", + callback: () => { + const _ = this.getActiveFile(); + if (_) this.localDatabase.getDBEntry(getPathFromTFile(_), {}, true, false); + } + }); + this.addCommand({ + id: "livesync-checkdoc-conflicted", + name: "Resolve if conflicted.", + editorCallback: (_, ee) => { + const ne = ee.file; + if (ne) this.queueConflictCheck(ne); + } + }); + this.addCommand({ + id: "livesync-toggle", + name: "Toggle LiveSync", + callback: async () => { + if (this.settings.liveSync) { + this.settings.liveSync = false; + Logger("LiveSync Disabled.", LOG_LEVEL_NOTICE); + } else { + this.settings.liveSync = true; + Logger("LiveSync Enabled.", LOG_LEVEL_NOTICE); + } + await this.realizeSettingSyncMode(); + this.saveSettings(); + } + }); + this.addCommand({ + id: "livesync-suspendall", + name: "Toggle All Sync.", + callback: async () => { + if (this.suspended) { + this.suspended = false; + Logger("Self-hosted LiveSync resumed", LOG_LEVEL_NOTICE); + } else { + this.suspended = true; + Logger("Self-hosted LiveSync suspended", LOG_LEVEL_NOTICE); + } + await this.realizeSettingSyncMode(); + this.saveSettings(); + } + }); + this.addCommand({ + id: "livesync-history", + name: "Show history", + callback: () => { + const _ = this.getActiveFile(); + if (_) this.showHistory(_, void 0); + } + }); + this.addCommand({ + id: "livesync-scan-files", + name: "Scan storage and database again", + callback: async () => { + await this.syncAllFiles(true); + } + }); + this.addCommand({ + id: "livesync-filehistory", + name: "Pick a file to show history", + callback: () => { + this.fileHistory(); + } + }); + this.addCommand({ + id: "livesync-conflictcheck", + name: "Pick a file to resolve conflict", + callback: () => { + this.pickFileForResolve(); + } + }); + this.addCommand({ + id: "livesync-all-conflictcheck", + name: "Resolve all conflicted files", + callback: async () => { + for (;await this.pickFileForResolve(); ) ; + } + }); + this.addCommand({ + id: "livesync-runbatch", + name: "Run pended batch processes", + callback: async () => { + await this.applyBatchChange(); + } + }); + this.addCommand({ + id: "livesync-abortsync", + name: "Abort synchronization immediately", + callback: () => { + this.replicator.terminateSync(); + } + }); + this.addCommand({ + id: "livesync-global-history", + name: "Show vault history", + callback: () => { + this.showGlobalHistory(); + } + }); + this.addCommand({ + id: "livesync-export-config", + name: "Write setting markdown manually", + checkCallback: _ => { + if (_) return "" != this.settings.settingSyncFile; + this.saveSettingData(); + } + }); + this.addCommand({ + id: "livesync-import-config", + name: "Parse setting file", + editorCheckCallback: (_, ee, ne) => { + if (_) { + const _ = ee.getValue(); + return "" != this.extractSettingFromWholeText(_).body; + } + if (ne.file) this.checkAndApplySettingFromMarkdown(ne.file.path, false); + } + }); + this.registerView(VIEW_TYPE_GLOBAL_HISTORY, (_ => new GlobalHistoryView(_, this))); + this.registerView(VIEW_TYPE_LOG, (_ => new LogPaneView(_, this))); + } + async onload() { + logStore.pipeTo(new QueueProcessor((_ => _.forEach((_ => this.addLog(_.message, _.level, _.key)))), { + suspended: false, + batchSize: 20, + concurrentLimit: 1, + delay: 0 + })).startPipeline(); + Logger("loading plugin"); + __onMissingTranslation((() => {})); + this.settingTab = new ObsidianLiveSyncSettingTab(this.app, this); + this.addSettingTab(this.settingTab); + this.addUIs(); + const _ = "0.23.20", ee = "0.23.20"; + this.manifestVersion = _; + this.packageVersion = ee; + Logger($f`Self-hosted LiveSync${" v"}${_} ${ee}`); + await this.loadSettings(); + const ne = "obsidian-live-sync-ver" + this.getVaultName(), ie = localStorage.getItem(ne); + this.observeForLogs(); + if (this.settings.showStatusOnStatusbar) { + this.statusBar = this.addStatusBarItem(); + this.statusBar.addClass("syncstatusbar"); + } + if (~~(versionNumberString2Number(_) / 1e3) > this.settings.lastReadUpdates && this.settings.isConfigured) Logger($f`Self-hosted LiveSync has undergone a major upgrade. Please open the setting dialog, and check the information pane.`, LOG_LEVEL_NOTICE); + if (this.isMobile) this.settings.disableRequestURI = true; + if (ie && Number(ie) < VER) { + this.settings.liveSync = false; + this.settings.syncOnSave = false; + this.settings.syncOnEditorSave = false; + this.settings.syncOnStart = false; + this.settings.syncOnFileOpen = false; + this.settings.syncAfterMerge = false; + this.settings.periodicReplication = false; + this.settings.versionUpFlash = $f`Self-hosted LiveSync has been upgraded and some behaviors have changed incompatibly. All automatic synchronization is now disabled temporary. Ensure that other devices are also upgraded, and enable synchronization again.`; + this.saveSettings(); + } + localStorage.setItem(ne, `${VER}`); + await this.openDatabase(); + this.watchWorkspaceOpen = this.watchWorkspaceOpen.bind(this); + this.watchEditorChange = this.watchEditorChange.bind(this); + this.watchWindowVisibility = this.watchWindowVisibility.bind(this); + this.watchOnline = this.watchOnline.bind(this); + this.realizeSettingSyncMode = this.realizeSettingSyncMode.bind(this); + this.parseReplicationResult = this.parseReplicationResult.bind(this); + this.loadQueuedFiles = this.loadQueuedFiles.bind(this); + await Promise.all(this.addOns.map((_ => _.onload()))); + this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this)); + } + async showView(_) { + const ee = this.app.workspace.getLeavesOfType(_); + if (0 == ee.length) await this.app.workspace.getLeaf(true).setViewState({ + type: _, + active: true + }); else ee[0].setViewState({ + type: _, + active: true + }); + if (ee.length > 0) this.app.workspace.revealLeaf(ee[0]); + } + showGlobalHistory() { + this.showView(VIEW_TYPE_GLOBAL_HISTORY); + } + onunload() { + var _; + terminateWorker(); + cancelAllPeriodicTask(); + cancelAllTasks(); + stopAllRunningProcessors(); + this._unloaded = true; + for (const _ of this.addOns) _.onunload(); + if (null != this.localDatabase) this.localDatabase.onunload(); + null == (_ = this.periodicSyncProcessor) || _.disable(); + if (null != this.localDatabase) { + this.replicator.closeReplication(); + this.localDatabase.close(); + } + Logger($f`unloading plugin`); + } + async openDatabase() { + if (null != this.localDatabase) await this.localDatabase.close(); + const _ = this.getVaultName(); + Logger($f`Waiting for ready...`); + this.localDatabase = new LiveSyncLocalDB(_, this); + initializeStores(_); + return await this.localDatabase.initializeDatabase(); + } + getPassphrase(_) { + const ee = { + "": () => Promise.resolve("*"), + LOCALSTORAGE: () => { + var _; + return Promise.resolve(null != (_ = localStorage.getItem("ls-setting-passphrase")) ? _ : false); + }, + ASK_AT_LAUNCH: () => askString(this.app, "Passphrase", "passphrase", "") + }, ne = _.configPassphraseStore; + return (ne in ee ? ee[ne] : ee[""])(); + } + async decryptConfigurationItem(_, ee) { + const ne = await tryDecrypt(_, ee + SALT_OF_PASSPHRASE, false); + if (ne) { + this.usedPassphrase = ee; + return ne; + } + return false; + } + tryDecodeJson(_) { + try { + if (!_) return false; else return JSON.parse(_); + } catch (_) { + return false; + } + } + async encryptConfigurationItem(_, ee) { + if ("" != this.usedPassphrase) return await encrypt(_, this.usedPassphrase + SALT_OF_PASSPHRASE, false); + const ne = await this.getPassphrase(ee); + if (false === ne) { + Logger("Could not determine passphrase to save data.json! You probably make the configuration sure again!", LOG_LEVEL_URGENT); + return ""; + } + const ie = await encrypt(_, ne + SALT_OF_PASSPHRASE, false); + if (ie) { + this.usedPassphrase = ne; + return ie; + } + return ""; + } + async loadSettings() { + const _ = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + if ("undefined" == typeof _.isConfigured) if (JSON.stringify(_) !== JSON.stringify(DEFAULT_SETTINGS)) _.isConfigured = true; else { + _.additionalSuffixOfDatabaseName = this.appId; + _.isConfigured = false; + } + const ee = await this.getPassphrase(_); + if (false === ee) Logger("Could not determine passphrase for reading data.json! DO NOT synchronize with the remote before making sure your configuration is!", LOG_LEVEL_URGENT); else { + if (_.encryptedCouchDBConnection) { + const ne = [ "couchDB_URI", "couchDB_USER", "couchDB_PASSWORD", "couchDB_DBNAME", "accessKey", "bucket", "endpoint", "region", "secretKey" ], ie = this.tryDecodeJson(await this.decryptConfigurationItem(_.encryptedCouchDBConnection, ee)); + if (ie) { + for (const ee of ne) if (ee in ie) _[ee] = ie[ee]; + } else { + Logger("Could not decrypt passphrase for reading data.json! DO NOT synchronize with the remote before making sure your configuration is!", LOG_LEVEL_URGENT); + for (const ee of ne) _[ee] = ""; + } + } + if (_.encrypt && _.encryptedPassphrase) { + const ne = _.encryptedPassphrase, ie = await this.decryptConfigurationItem(ne, ee); + if (ie) _.passphrase = ie; else { + Logger("Could not decrypt passphrase for reading data.json! DO NOT synchronize with the remote before making sure your configuration is!", LOG_LEVEL_URGENT); + _.passphrase = ""; + } + } + } + this.settings = _; + setLang(this.settings.displayLanguage); + if ("workingEncrypt" in this.settings) delete this.settings.workingEncrypt; + if ("workingPassphrase" in this.settings) delete this.settings.workingPassphrase; + this.settings.disableRequestURI = true; + this.settings.gcDelay = 0; + this.settings.useHistory = true; + const ne = "obsidian-live-sync-vaultanddevicename-" + this.getVaultName(); + if ("" != this.settings.deviceAndVaultName) if (!localStorage.getItem(ne)) { + this.deviceAndVaultName = this.settings.deviceAndVaultName; + localStorage.setItem(ne, this.deviceAndVaultName); + this.settings.deviceAndVaultName = ""; + } + if (isCloudantURI(this.settings.couchDB_URI) && 0 != this.settings.customChunkSize) { + Logger("Configuration verification founds problems with your configuration. This has been fixed automatically. But you may already have data that cannot be synchronised. If this is the case, please rebuild everything.", LOG_LEVEL_NOTICE); + this.settings.customChunkSize = 0; + } + this.deviceAndVaultName = localStorage.getItem(ne) || ""; + if ("" == this.deviceAndVaultName) if (this.settings.usePluginSync) { + Logger("Device name is not set. Plug-in sync has been disabled.", LOG_LEVEL_NOTICE); + this.settings.usePluginSync = false; + } + this.ignoreFiles = this.settings.ignoreFiles.split(",").map((_ => _.trim())); + this.settingTab.requestReload(); + } + saveDeviceAndVaultName() { + const _ = "obsidian-live-sync-vaultanddevicename-" + this.getVaultName(); + localStorage.setItem(_, this.deviceAndVaultName || ""); + } + async saveSettingData() { + this.saveDeviceAndVaultName(); + const _ = { + ...this.settings + }; + _.deviceAndVaultName = ""; + if ("" == this.usedPassphrase && !await this.getPassphrase(_)) Logger("Could not determine passphrase for saving data.json! Our data.json have insecure items!", LOG_LEVEL_NOTICE); else { + if ("" != _.couchDB_PASSWORD || "" != _.couchDB_URI || "" != _.couchDB_USER || _.couchDB_DBNAME) { + const ee = { + couchDB_DBNAME: _.couchDB_DBNAME, + couchDB_PASSWORD: _.couchDB_PASSWORD, + couchDB_URI: _.couchDB_URI, + couchDB_USER: _.couchDB_USER, + accessKey: _.accessKey, + bucket: _.bucket, + endpoint: _.endpoint, + region: _.region, + secretKey: _.secretKey, + useCustomRequestHandler: _.useCustomRequestHandler + }; + _.encryptedCouchDBConnection = await this.encryptConfigurationItem(JSON.stringify(ee), _); + _.couchDB_PASSWORD = ""; + _.couchDB_DBNAME = ""; + _.couchDB_URI = ""; + _.couchDB_USER = ""; + _.accessKey = ""; + _.bucket = ""; + _.region = ""; + _.secretKey = ""; + _.endpoint = ""; + } + if (_.encrypt && "" != _.passphrase) { + _.encryptedPassphrase = await this.encryptConfigurationItem(_.passphrase, _); + _.passphrase = ""; + } + } + await this.saveData(_); + this.localDatabase.settings = this.settings; + setLang(this.settings.displayLanguage); + this.settingTab.requestReload(); + this.ignoreFiles = this.settings.ignoreFiles.split(",").map((_ => _.trim())); + if ("" != this.settings.settingSyncFile) fireAndForget((() => this.saveSettingToMarkdown(this.settings.settingSyncFile))); + } + extractSettingFromWholeText(_) { + if (-1 === _.indexOf(SETTING_HEADER)) return { + preamble: _, + body: "", + postscript: "" + }; + const ee = _.indexOf(SETTING_HEADER), ne = -1 == ee ? _.length : ee, ie = -1 == ee ? _.length : _.indexOf(SETTING_FOOTER, ne), re = -1 == ie ? _.length : ie, se = _.substring(ne + SETTING_HEADER.length, re); + return { + preamble: _.substring(0, ne), + body: se, + postscript: _.substring(re + SETTING_FOOTER.length + 1) + }; + } + async parseSettingFromMarkdown(_, ee) { + const ne = this.vaultAccess.getAbstractFileByPath(_); + if (!(ne instanceof import_obsidian.TFile)) return { + preamble: "", + body: "", + postscript: "" + }; + if (ee) return this.extractSettingFromWholeText(ee); + const ie = null != ee ? ee : await this.vaultAccess.vaultRead(ne); + return this.extractSettingFromWholeText(ie); + } + async checkAndApplySettingFromMarkdown(_, ee) { + if (ee && !this.settings.notifyAllSettingSyncFile) if (!this.settings.settingSyncFile || this.settings.settingSyncFile != _) { + Logger(`Setting file (${_}) is not matched to the current configuration. skipped.`, LOG_LEVEL_DEBUG); + return; + } + const {body: ne} = await this.parseSettingFromMarkdown(_); + let ie = {}; + try { + ie = (0, import_obsidian.parseYaml)(ne); + } catch (_) { + Logger("Could not parse YAML", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + return; + } + if ("settingSyncFile" in ie && ie.settingSyncFile != _) { + Logger("This setting file seems to backed up one. Please fix the filename or settingSyncFile value.", ee ? LOG_LEVEL_INFO : LOG_LEVEL_NOTICE); + return; + } + let re = { + ...DEFAULT_SETTINGS + }; + re = { + ...re, + ...ie + }; + if (!(null == re ? void 0 : re.writeCredentialsForSettingSync)) { + re.couchDB_USER = this.settings.couchDB_USER; + re.couchDB_PASSWORD = this.settings.couchDB_PASSWORD; + re.passphrase = this.settings.passphrase; + } + if (!isObjectDifferent(this.generateSettingForMarkdown(this.settings, re.writeCredentialsForSettingSync), this.generateSettingForMarkdown(re))) { + Logger("Setting markdown has been detected, but not changed.", ee ? LOG_LEVEL_INFO : LOG_LEVEL_NOTICE); + return; + } + const se = this.settings.settingSyncFile != _ ? " (This is not-active file)" : ""; + this.askInPopup("apply-setting-from-md", `Setting markdown ${_}${se} has been detected. Apply this from {HERE}.`, (_ => { + _.text = "HERE"; + _.addEventListener("click", (async () => { + const _ = "Apply settings", ee = "Apply settings and restart obsidian", ne = "Apply settings and restart obsidian with red_flag_rebuild.md", ie = "Apply settings and restart obsidian with red_flag_fetch.md", se = await this.askSelectString("Ready for apply the setting.", [ ee, _, ie, ne, "Cancel" ]); + if (se == _ || se == ee || se == ne || se == ie) { + this.settings = re; + await this.saveSettingData(); + if (se == _) { + Logger("Loaded settings have been applied!", LOG_LEVEL_NOTICE); + return; + } + if (se == ne) await this.vaultAccess.vaultCreate(FLAGMD_REDFLAG2_HR, ""); + if (se == ie) await this.vaultAccess.vaultCreate(FLAGMD_REDFLAG3_HR, ""); + this.performAppReload(); + } + })); + })); + } + generateSettingForMarkdown(_, ee) { + const ne = { + ..._ ? _ : this.settings + }; + delete ne.encryptedCouchDBConnection; + delete ne.encryptedPassphrase; + if (!ne.writeCredentialsForSettingSync && !ee) { + delete ne.couchDB_USER; + delete ne.couchDB_PASSWORD; + delete ne.passphrase; + } + return ne; + } + async saveSettingToMarkdown(_) { + const ee = this.generateSettingForMarkdown(); + let ne = this.vaultAccess.getAbstractFileByPath(_); + if (!ne) { + await this.vaultAccess.ensureDirectory(_); + const ee = 'This file contains Self-hosted LiveSync settings as YAML.\nExcept for the `livesync-setting` code block, we can add a note for free.\n\nIf the name of this file matches the value of the "settingSyncFile" setting inside the `livesync-setting` block, LiveSync will tell us whenever the settings change. We can decide to accept or decline the remote setting. (In other words, we can back up this file by renaming it to another name).\n\nWe can perform a command in this file.\n- `Parse setting file` : load the setting from the file.\n\n**Note** Please handle it with all of your care if you have configured to write credentials in.\n\n\n'; + ne = await this.vaultAccess.vaultCreate(_, ee + SETTING_HEADER + "\n" + SETTING_FOOTER); + } + if (!(ne instanceof import_obsidian.TFile)) { + Logger(`Markdown Setting: ${_} already exists as a folder`, LOG_LEVEL_NOTICE); + return; + } + const ie = await this.vaultAccess.vaultRead(ne), {preamble: re, body: se, postscript: oe} = this.extractSettingFromWholeText(ie), le = (0, + import_obsidian.stringifyYaml)(ee); + if (le == se) Logger("Markdown setting: Nothing had been changed", LOG_LEVEL_VERBOSE); else { + await this.vaultAccess.vaultModify(ne, re + SETTING_HEADER + le + SETTING_FOOTER + oe); + Logger(`Markdown setting: ${_} has been updated!`, LOG_LEVEL_VERBOSE); + } + } + async saveSettings() { + await this.saveSettingData(); + fireAndForget((() => this.realizeSettingSyncMode())); + } + registerFileWatchEvents() { + this.vaultManager.beginWatch(); + this.registerEvent(this.app.workspace.on("editor-change", this.watchEditorChange)); + } + swapSaveCommand() { + var _, ee; + Logger("Modifying callback of the save command", LOG_LEVEL_VERBOSE); + const ne = null == (ee = null == (_ = this.app.commands) ? void 0 : _.commands) ? void 0 : ee["editor:save-file"], ie = null == ne ? void 0 : ne.callback; + if ("function" == typeof ie) { + this._initialCallback = ie; + ne.callback = () => { + scheduleTask("syncOnEditorSave", 250, (() => { + if (this._unloaded) { + Logger("Unload and remove the handler.", LOG_LEVEL_VERBOSE); + ne.callback = this._initialCallback; + this._initialCallback = void 0; + } else if (this.settings.syncOnEditorSave) { + Logger("Sync on Editor Save.", LOG_LEVEL_VERBOSE); + this.replicate(); + } + })); + ie(); + }; + } + const re = this; + window.CodeMirrorAdapter.commands.save = () => { + re.performCommand("editor:save-file"); + }; + } + registerWatchEvents() { + this.registerEvent(this.app.workspace.on("file-open", this.watchWorkspaceOpen)); + this.registerDomEvent(document, "visibilitychange", this.watchWindowVisibility); + this.registerDomEvent(window, "focus", (() => this.setHasFocus(true))); + this.registerDomEvent(window, "blur", (() => this.setHasFocus(false))); + this.registerDomEvent(window, "online", this.watchOnline); + this.registerDomEvent(window, "offline", this.watchOnline); + } + watchOnline() { + scheduleTask("watch-online", 500, (() => fireAndForget((() => this.watchOnlineAsync())))); + } + async watchOnlineAsync() { + if (navigator.onLine && this.localDatabase.needScanning) { + this.localDatabase.needScanning = false; + await this.syncAllFiles(); + } + } + setHasFocus(_) { + this.hasFocus = _; + this.watchWindowVisibility(); + } + watchWindowVisibility() { + scheduleTask("watch-window-visibility", 100, (() => fireAndForget((() => this.watchWindowVisibilityAsync())))); + } + async watchWindowVisibilityAsync() { + var _; + if (this.settings.suspendFileWatching) return; + if (!this.settings.isConfigured) return; + if (!this.isReady) return; + if (this.isLastHidden && !this.hasFocus) return; + const ee = document.hidden; + if (this.isLastHidden !== ee) { + this.isLastHidden = ee; + await this.applyBatchChange(); + if (ee) { + this.replicator.closeReplication(); + null == (_ = this.periodicSyncProcessor) || _.disable(); + } else { + if (this.suspended) return; + if (!this.hasFocus) return; + await Promise.all(this.addOns.map((_ => _.onResume()))); + if (this.settings.remoteType == REMOTE_COUCHDB) if (this.settings.liveSync) this.replicator.openReplication(this.settings, true, false, false); + if (!this.settings.liveSync && this.settings.syncOnStart) this.replicator.openReplication(this.settings, false, false, false); + this.periodicSyncProcessor.enable(this.settings.periodicReplication ? 1e3 * this.settings.periodicReplicationInterval : 0); + } + } + } + cancelRelativeEvent(_) { + this.vaultManager.cancelQueue(_.key); + } + async handleFileEvent(_) { + const ee = _.args.file, ne = `handleFile:${ee.path}`; + return await serialized(ne, (async () => { + const ne = `file-last-proc-${_.type}-${ee.path}`, ie = Number(await this.kvDB.get(ne) || 0); + let re = ee.mtime; + if ("DELETE" == _.type) { + await this.deleteFromDBbyPath(ee.path); + re = ee.mtime - 1; + const _ = `file-last-proc-CREATE-${ee.path}`, ne = `file-last-proc-CHANGED-${ee.path}`; + await this.kvDB.set(_, re); + await this.kvDB.set(ne, re); + } else if ("INTERNAL" == _.type) { + await this.addOnHiddenFileSync.watchVaultRawEventsAsync(ee.path); + await this.addOnConfigSync.watchVaultRawEventsAsync(ee.path); + } else { + const ne = this.vaultAccess.getAbstractFileByPath(ee.path); + if (!(ne instanceof import_obsidian.TFile)) { + Logger(`Target file was not found: ${ee.path}`, LOG_LEVEL_INFO); + return; + } + if (ee.mtime == ie) { + Logger(`File has been already scanned on ${_.type}, skip: ${ee.path}`, LOG_LEVEL_VERBOSE); + return; + } + if ("CREATE" == _.type || "CHANGED" == _.type) { + fireAndForget((() => this.checkAndApplySettingFromMarkdown(_.args.file.path, true))); + const ie = `file-last-proc-DELETED-${ee.path}`; + await this.kvDB.set(ie, re); + if (!await this.updateIntoDB(ne, void 0)) { + Logger(`STORAGE -> DB: failed, cancel the relative operations: ${ne.path}`, LOG_LEVEL_INFO); + this.cancelRelativeEvent(_); + return; + } + } + if ("RENAME" == _.type) await this.watchVaultRenameAsync(ne, _.args.oldPath); + } + await this.kvDB.set(ne, re); + })); + } + watchWorkspaceOpen(_) { + if (!this.settings.suspendFileWatching) if (this.settings.isConfigured) if (this.isReady) if (_) scheduleTask("watch-workspace-open", 500, (() => fireAndForget((() => this.watchWorkspaceOpenAsync(_))))); + } + flushFileEventQueue() { + return this.vaultManager.flushQueue(); + } + watchEditorChange(_, ee) { + if (!("path" in ee)) return; + if (!this.shouldBatchSave) return; + const ne = null == ee ? void 0 : ee.file; + if (!ne) return; + if (!this.vaultManager.isWaiting(ne.path)) return; + const ie = { + type: "CHANGED", + file: ne, + cachedData: null == ee ? void 0 : ee.data + }; + this.vaultManager.appendQueue([ ie ]); + } + async watchWorkspaceOpenAsync(_) { + if (!this.settings.suspendFileWatching) if (this.settings.isConfigured) if (this.isReady) { + await this.applyBatchChange(); + if (null != _) { + if (this.settings.syncOnFileOpen && !this.suspended) await this.replicate(); + this.queueConflictCheck(_); + } + } + } + async applyBatchChange() { + if (this.settings.batchSave && !this.settings.liveSync) return await this.flushFileEventQueue(); + } + getFilePath(_) { + if (_ instanceof import_obsidian.TFolder) if (_.isRoot()) return ""; else return this.getFilePath(_.parent) + "/" + _.name; + if (_ instanceof import_obsidian.TFile) return this.getFilePath(_.parent) + "/" + _.name; else return this.getFilePath(_.parent) + "/" + _.name; + } + async watchVaultRenameAsync(_, ee, ne) { + Logger(`${ee} renamed to ${_.path}`, LOG_LEVEL_VERBOSE); + if (_ instanceof import_obsidian.TFile) try { + if (await this.updateIntoDB(_, ne)) await this.deleteFromDBbyPath(ee); else Logger(`Could not save new file: ${_.path} `, LOG_LEVEL_NOTICE); + } catch (_) { + Logger(_); + } + } + async addLog(_, ee = LOG_LEVEL_INFO, ne = "") { + var ie, re, se; + if (ee == LOG_LEVEL_DEBUG && !isDebug) return; + if (ee < LOG_LEVEL_INFO && this.settings && this.settings.lessInformationInLog) return; + if (this.settings && !this.settings.showVerboseLog && ee == LOG_LEVEL_VERBOSE) return; + const oe = this.getVaultName(), le = new Date, ue = le.toLocaleString(), de = "string" == typeof _ ? _ : _ instanceof Error ? `${_.name}:${_.message}` : JSON.stringify(_, null, 2); + if (_ instanceof Error) console.dir(_.stack); + const fe = ue + "->" + de; + console.log(oe + ":" + fe); + if (!(null == (ie = this.settings) ? void 0 : ie.showOnlyIconsOnEditor)) this.statusLog.value = de; + if (null == (re = this.settings) ? void 0 : re.writeLogToTheFile) { + const _ = le.toISOString().split("T")[0], ee = `${PREFIXMD_LOGFILE}${_}.md`; + if (!this.vaultAccess.getAbstractFileByPath(normalizePath(ee))) this.vaultAccess.adapterAppend(normalizePath(ee), "```\n"); + this.vaultAccess.adapterAppend(normalizePath(ee), oe + ":" + fe + "\n"); + } + recentLogProcessor.enqueue(fe); + if (ee >= LOG_LEVEL_NOTICE) { + if (!ne) ne = de; + if (ne in this.notifies) { + if (!(null == (se = this.notifies[ne].notice.noticeEl) ? void 0 : se.isShown())) this.notifies[ne].notice = new import_obsidian.Notice(de, 0); + cancelTask(`notify-${ne}`); + if (ne == de) { + this.notifies[ne].count++; + this.notifies[ne].notice.setMessage(`(${this.notifies[ne].count}):${de}`); + } else this.notifies[ne].notice.setMessage(`${de}`); + } else { + const _ = new import_obsidian.Notice(de, 0); + this.notifies[ne] = { + count: 0, + notice: _ + }; + } + scheduleTask(`notify-${ne}`, 5e3, (() => { + const _ = this.notifies[ne].notice; + delete this.notifies[ne]; + try { + _.hide(); + } catch (_) {} + })); + } + } + async processEntryDoc(_, ee, ne) { + const ie = null == ee ? "create" : "modify", re = this.getPath(_); + if (shouldBeIgnored(re)) return; + if (!await this.isTargetFile(re)) return; + const se = await this.localDatabase.getDBEntry(re, { + conflicts: true + }), oe = `STORAGE <- DB (${ie}${ne ? ",force" : ""},${se ? null == se ? void 0 : se.datatype : "--"}) `; + if (se && se._conflicts) if (this.settings.writeDocumentsIfConflicted) { + Logger(`Processing: ${re}: Conflicted revision has been deleted, but there were more conflicts. `, LOG_LEVEL_INFO); + await this.processEntryDoc(_, ee, true); + return; + } else if (true != ne) { + Logger(`Processing: ${re}: Conflicted revision has been deleted, but there were more conflicts...`); + this.queueConflictCheck(re); + return; + } + if (_._deleted || _.deleted || false === se) { + if (!ee) { + Logger(`delete skipped: ${re} :Already not exist on storage`, LOG_LEVEL_VERBOSE); + return; + } + if (ee.path != re) { + Logger(`delete skipped: ${re} :Not exactly matched`, LOG_LEVEL_VERBOSE); + return; + } + if (false === se) await this.deleteVaultItem(ee); else await this.pullFile(re, void 0, true); + return; + } + const le = compareFileFreshness(ee, _), ue = se; + if (!isAnyNote(ue)) { + Logger(oe + "ERROR, Invalid type: " + re + "(" + (null == ue ? void 0 : ue.type) || "type missing)", LOG_LEVEL_NOTICE); + return; + } + if (!ne && (le == BASE_IS_NEW || le == EVEN)) return; + if (!isValidPath(re)) { + Logger(oe + "ERROR, invalid path: " + re, LOG_LEVEL_NOTICE); + return; + } + const de = readContent(ue); + await this.vaultAccess.ensureDirectory(re); + try { + let _, ne = true; + if (!ee) { + const ee = normalizePath(re); + await this.vaultAccess.vaultCreate(ee, de, { + ctime: ue.ctime, + mtime: ue.mtime + }); + _ = this.vaultAccess.getAbstractFileByPath(ee); + } else { + ne = await this.vaultAccess.vaultModify(ee, de, { + ctime: ue.ctime, + mtime: ue.mtime + }); + _ = this.vaultAccess.getAbstractFileByPath(getPathFromTFile(ee)); + } + if (ne) { + Logger(oe + re); + this.vaultAccess.touch(_); + this.vaultAccess.trigger(ie, _); + } else Logger(oe + "Skipped, the file is the same: " + re, LOG_LEVEL_VERBOSE); + } catch (_) { + Logger(oe + "ERROR, Could not write: " + re, LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + } + async deleteVaultItem(_) { + if (_ instanceof import_obsidian.TFile) if (!await this.isTargetFile(_)) return; + const ee = _.parent; + if (this.settings.trashInsteadDelete) await this.vaultAccess.trash(_, false); else await this.vaultAccess.delete(_, true); + Logger(`xxx <- STORAGE (deleted) ${_.path}`); + if (ee) { + Logger(`files: ${ee.children.length}`); + if (0 == ee.children.length) if (!this.settings.doNotDeleteFolder) { + Logger(`All files under the parent directory (${ee.path}) have been deleted, so delete this one.`); + await this.deleteVaultItem(ee); + } + } + } + queueConflictCheck(_) { + const ee = _ instanceof import_obsidian.TFile ? getPathFromTFile(_) : _; + if (this.settings.checkConflictOnlyOnOpen) { + const ne = this.getActiveFile(); + if (ne && ne.path != ee) { + Logger(`${_} is conflicted, merging process has been postponed.`, LOG_LEVEL_NOTICE); + return; + } + } + this.conflictCheckQueue.enqueue(ee); + } + saveQueuedFiles() { + this._saveQueuedFiles(); + } + async loadQueuedFiles() { + var _; + if (this.settings.suspendParseReplicationResult) return; + if (!this.settings.isConfigured) return; + const ee = arrayToChunkedArray([ ...new Set(null != (_ = await this.kvDB.get("queued-files")) ? _ : []) ], 100); + for await (const _ of ee) { + const ee = await this.localDatabase.allDocsRaw({ + keys: _, + include_docs: true, + limit: 100 + }), ne = ee.rows.filter((_ => _.doc)).map((_ => _.doc)), ie = ee.rows.filter((_ => !_.doc && !_.value.deleted)); + if (ie.length > 0) { + Logger("Some queued processes were not resurrected"); + Logger(JSON.stringify(ie), LOG_LEVEL_VERBOSE); + } + this.replicationResultProcessor.enqueueAll(ne); + await this.replicationResultProcessor.waitForAllProcessed(); + } + } + parseReplicationResult(_) { + if (this.settings.suspendParseReplicationResult && !this.replicationResultProcessor.isSuspended) this.replicationResultProcessor.suspend(); + this.replicationResultProcessor.enqueueAll(_); + if (!this.settings.suspendParseReplicationResult && this.replicationResultProcessor.isSuspended) this.replicationResultProcessor.resume(); + } + async realizeSettingSyncMode() { + var _; + this.replicator.closeReplication(); + null == (_ = this.periodicSyncProcessor) || _.disable(); + this.localDatabase.refreshSettings(); + await this.applyBatchChange(); + await Promise.all(this.addOns.map((_ => _.realizeSettingSyncMode()))); + if (this.suspended) return; + await Promise.all(this.addOns.map((_ => _.onResume()))); + if (this.settings.remoteType == REMOTE_COUCHDB) if (this.settings.liveSync) this.replicator.openReplication(this.settings, true, false, false); + const ee = activeDocument.querySelector(".livesync-ribbon-showcustom"); + null == ee || ee.toggleClass("sls-hidden", !this.settings.usePluginSync); + this.periodicSyncProcessor.enable(this.settings.periodicReplication ? 1e3 * this.settings.periodicReplicationInterval : 0); + } + observeForLogs() { + const _ = " ".repeat(10); + function padLeftSpComputed(ee, ne) { + const ie = reactiveSource(""); + let re, se = 1; + ee.onChanged((ee => { + const oe = ee.value, le = `${Math.abs(oe)}`.length + 1; + se = se < le ? le : se; + if (re) clearTimeout(re); + if (0 == oe) re = setTimeout((() => { + ie.value = ""; + se = 1; + }), 3e3); + ie.value = ` ${ne}${`${_}${oe}`.slice(-se)}`; + })); + return computed((() => ie.value)); + } + const ee = padLeftSpComputed(this.replicationResultCount, "📥"), ne = padLeftSpComputed(this.databaseQueueCount, "📄"), ie = padLeftSpComputed(this.storageApplyingCount, "💾"), re = padLeftSpComputed(collectingChunks, "🧩"), se = padLeftSpComputed(pluginScanningCount, "🔌"), oe = padLeftSpComputed(this.conflictProcessQueueCount, "🔩"), le = padLeftSpComputed(reactive((() => hiddenFilesEventCount.value + hiddenFilesProcessingCount.value)), "⚙️"), ue = reactive((() => `${ee()}${ne()}${ie()}${re()}${se()}${le()}${oe()}`)), de = computed((() => 0 != this.requestCount.value - this.responseCount.value ? "📲 " : "")), fe = computed((() => { + const _ = this.replicationStat.value, ee = _.sent, ne = _.arrived, ie = _.maxPullSeq, re = _.maxPushSeq, se = _.lastSyncPullSeq, oe = _.lastSyncPushSeq; + let le = "", ue = "", de = ""; + const fe = { + CONNECTED: "⚡", + JOURNAL_SEND: "📦↑", + JOURNAL_RECEIVE: "📦↓" + }; + switch (_.syncStatus) { + case "CLOSED": + case "COMPLETED": + case "NOT_CONNECTED": + de = "⏹"; + break; + + case "STARTED": + de = "🌀"; + break; + + case "PAUSED": + de = "💤"; + break; + + case "CONNECTED": + case "JOURNAL_SEND": + case "JOURNAL_RECEIVE": + de = fe[_.syncStatus] || "⚡"; + le = 0 == oe ? "" : oe >= re ? " (LIVE)" : ` (${re - oe})`; + ue = 0 == se ? "" : se >= ie ? " (LIVE)" : ` (${ie - se})`; + break; + + case "ERRORED": + de = "⚠"; + break; + + default: + de = "?"; + } + return { + w: de, + sent: ee, + pushLast: le, + arrived: ne, + pullLast: ue + }; + })), he = padLeftSpComputed(this.vaultManager.processing, "⏳"), pe = padLeftSpComputed(this.vaultManager.totalQueued, "🛫"), ge = padLeftSpComputed(this.vaultManager.batched, "📬"), me = computed((() => `${he()}${pe()}${ge()}`)), ye = computed((() => { + const {w: _, sent: ee, pushLast: ne, arrived: ie, pullLast: re} = fe(), se = ue.value, oe = me(); + return { + message: `${de()}Sync: ${_} ↑ ${ee}${ne} ↓ ${ie}${re}${oe}${se}` + }; + })), Se = reactive((() => { + const _ = this.isReloadingScheduled ? "WARNING! RESTARTING OBSIDIAN IS SCHEDULED!\n" : "", {message: ee} = ye(); + return { + message: ee, + status: _ + this.statusLog.value + }; + })), Ee = throttle((_ => { + const ee = _; + this.applyStatusBarText(ee.message, ee.status); + }), 20); + Se.onChanged((_ => Ee(_.value))); + } + applyStatusBarText(_, ee) { + var ne; + const ie = _.replace(/\n/g, "\\A "), re = ee.replace(/\n/g, "\\A "); + null == (ne = this.statusBar) || ne.setText(ie.split("\n")[0]); + if (this.settings.showStatusOnEditor) activeDocument.documentElement.style.setProperty("--sls-log-text", "'" + ie + "\\A " + re + "'"); + scheduleTask("log-hide", 3e3, (() => { + this.statusLog.value = ""; + })); + } + async askResolvingMismatchedTweaks() { + if (!this.replicator.tweakSettingsMismatched) return "OK"; + const _ = extractObject(TweakValuesShouldMatchedTemplate, this.replicator.preferredTweakValue), ee = extractObject(TweakValuesShouldMatchedTemplate, this.settings), ne = Object.entries(TweakValuesShouldMatchedTemplate); + let ie = "| Value name | This device | Configured | \n|: --- |: --- :|: ---- :| \n"; + for (const re of ne) { + const ne = re[0], se = escapeMarkdownValue(ee[ne]), oe = escapeMarkdownValue(_[ne]); + if (se != oe) ie += `| ${confName(ne)} | ${se} | ${oe} | \n`; + } + const re = `\nYour configuration has not been matched with the one on the remote server.\n(Which you had decided once before, or set by initially synchronised device).\n\nConfigured values:\n\n${ie}\n\nPlease select which one you want to use.\n\n- Use configured: Update settings of this device by configured one on the remote server.\n You should select this if you have changed the settings on **another device**.\n- Update with mine: Update settings on the remote server by the settings of this device.\n You should select this if you have changed the settings on **this device**.\n- Dismiss: Ignore this message and keep the current settings.\n You cannot synchronise until you resolve this issue without enabling \`Do not check configuration mismatch before replication\`.`, se = "Dismiss", oe = [ [ "Use configured", _ ], [ "Update with mine", true ], [ se, false ] ], le = Object.fromEntries(oe), ue = await confirmWithMessage(this, "Tweaks Mismatched or Changed", re, Object.keys(le), se, 60); + if (!ue) return "IGNORE"; + const de = le[ue]; + if (true === de) { + await this.replicator.setPreferredRemoteTweakSettings(this.settings); + Logger("Tweak values on the remote server have been updated. Your other device will see this message.", LOG_LEVEL_NOTICE); + return "CHECKAGAIN"; + } + if (de) { + this.settings = { + ...this.settings, + ...de + }; + await this.replicator.setPreferredRemoteTweakSettings(this.settings); + await this.saveSettingData(); + Logger("Configuration has been updated as configured by the other device.", LOG_LEVEL_NOTICE); + return "CHECKAGAIN"; + } + return "IGNORE"; + } + async replicate(_ = false) { + var ee; + if (!this.isReady) return; + if (isLockAcquired("cleanup")) { + Logger("Database cleaning up is in process. replication has been cancelled", LOG_LEVEL_NOTICE); + return; + } + if ("" != this.settings.versionUpFlash) { + Logger("Open settings and check message, please. replication has been cancelled.", LOG_LEVEL_NOTICE); + return; + } + await this.applyBatchChange(); + await Promise.all(this.addOns.map((ee => ee.beforeReplicate(_)))); + await this.loadQueuedFiles(); + const ne = await this.replicator.openReplication(this.settings, false, _, false); + if (!ne) if (this.replicator.tweakSettingsMismatched) await this.askResolvingMismatchedTweaks(); else if (null == (ee = this.replicator) ? void 0 : ee.remoteLockedAndDeviceNotAccepted) if (this.replicator.remoteCleaned && this.settings.useIndexedDBAdapter) { + Logger("The remote database has been cleaned.", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + await skipIfDuplicated("cleanup", (async () => { + const ee = `The remote database has been cleaned up.\nTo synchronize, this device must be also cleaned up. ${await purgeUnreferencedChunks(this.localDatabase.localDatabase, true)} chunk(s) will be erased from this device.\nHowever, If there are many chunks to be deleted, maybe fetching again is faster.\nWe will lose the history of this device if we fetch the remote database again.\nEven if you choose to clean up, you will see this option again if you exit Obsidian and then synchronise again.`, ne = "Fetch again", ie = "Cleanup", re = "Dismiss", se = await confirmWithMessage(this, "Cleaned", ee, [ ne, ie, re ], re, 30); + if (se == ne) await performRebuildDB(this, "localOnly"); + if (se == ie) { + const ee = this.getReplicator(); + if (!(ee instanceof LiveSyncCouchDBReplicator)) return; + const ne = await ee.connectRemoteCouchDBWithSetting(this.settings, this.getIsMobile(), true); + if ("string" == typeof ne) { + Logger(ne, LOG_LEVEL_NOTICE); + return false; + } + await purgeUnreferencedChunks(this.localDatabase.localDatabase, false); + this.localDatabase.hashCaches.clear(); + if (await this.replicator.openReplication(this.settings, false, _, true)) { + await balanceChunkPurgedDBs(this.localDatabase.localDatabase, ne.db); + await purgeUnreferencedChunks(this.localDatabase.localDatabase, false); + this.localDatabase.hashCaches.clear(); + await this.getReplicator().markRemoteResolved(this.settings); + Logger("The local database has been cleaned up.", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + } else Logger("Replication has been cancelled. Please try it again.", _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); + } + })); + } else { + const _ = "\nThe remote database has been rebuilt.\nTo synchronize, this device must fetch everything again once.\nOr if you are sure know what had been happened, we can unlock the database from the setting dialog.\n ", ee = "Fetch again", ne = "Dismiss"; + if (await confirmWithMessage(this, "Locked", _, [ ee, ne ], ne, 10) == ee) await performRebuildDB(this, "localOnly"); + } + return ne; + } + async initializeDatabase(_ = false, ee = true) { + this.isReady = false; + if (!ee || await this.openDatabase()) { + if (this.localDatabase.isReady) await this.syncAllFiles(_); + await Promise.all(this.addOns.map((ee => ee.onInitializeDatabase(_)))); + this.isReady = true; + await this.flushFileEventQueue(); + return true; + } else { + this.isReady = false; + return false; + } + } + async replicateAllToServer(_ = false) { + if (!this.isReady) return false; + await Promise.all(this.addOns.map((ee => ee.beforeReplicate(_)))); + const ee = await this.replicator.replicateAllToServer(this.settings, _); + if (ee) return true; + if (this.replicator.tweakSettingsMismatched) { + const ee = await this.askResolvingMismatchedTweaks(); + if ("OK" == ee) return true; + if ("CHECKAGAIN" == ee) return await this.replicateAllToServer(_); + if ("IGNORE" == ee) return false; + } + return ee; + } + async replicateAllFromServer(_ = false) { + if (!this.isReady) return false; + const ee = await this.replicator.replicateAllFromServer(this.settings, _); + if (ee) return true; + if (this.replicator.tweakSettingsMismatched) { + const ee = await this.askResolvingMismatchedTweaks(); + if ("OK" == ee) return true; + if ("CHECKAGAIN" == ee) return await this.replicateAllFromServer(_); + if ("IGNORE" == ee) return false; + } + return ee; + } + async markRemoteLocked(_ = false) { + return await this.replicator.markRemoteLocked(this.settings, true, _); + } + async markRemoteUnlocked() { + return await this.replicator.markRemoteLocked(this.settings, false, false); + } + async markRemoteResolved() { + return await this.replicator.markRemoteResolved(this.settings); + } + isFileSizeExceeded(_) { + if (this.settings.syncMaxSizeInMB > 0 && _ > 0) if (1024 * this.settings.syncMaxSizeInMB * 1024 < _) return true; + return false; + } + async syncAllFiles(_) { + if (!this.settings.isConfigured) { + if (_) Logger("LiveSync is not configured yet. Synchronising between the storage and the local database is now prevented.", LOG_LEVEL_NOTICE, "syncAll"); + return; + } + if (_) Logger("Initializing", LOG_LEVEL_NOTICE, "syncAll"); + Logger("Initialize and checking database files"); + Logger("Checking deleted files"); + await this.collectDeletedFiles(); + Logger("Collecting local files on the storage", LOG_LEVEL_VERBOSE); + const ee = this.vaultAccess.getFiles(), ne = []; + for (const _ of ee) if (await this.isTargetFile(_.path)) ne.push(_); + const ie = ne.map((_ => _.path)); + Logger("Collecting local files on the DB", LOG_LEVEL_VERBOSE); + const re = []; + let se = 0; + for await (const ee of this.localDatabase.findAllNormalDocs()) { + se++; + if (se % 25 == 0) Logger(`Collecting local files on the DB: ${se}`, _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, "syncAll"); + const ne = getPath2(ee); + if (isValidPath(ne) && await this.isTargetFile(ne)) re.push(ne); + } + Logger("Opening the key-value database", LOG_LEVEL_VERBOSE); + const oe = await this.kvDB.get("initialized") || false, le = ne.filter((_ => -1 == re.indexOf(getPathFromTFile(_)))), ue = re.filter((_ => -1 == ie.indexOf(_))), de = le.map((_ => _.path)), fe = ne.filter((_ => -1 == de.indexOf(_.path))); + Logger("Updating database by new files"); + const he = {}, pe = _ ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO, ge = throttle(((_, ee) => { + he[_] = ee; + Logger(Object.values(he).join("\n"), pe, "syncAll"); + }), 25), me = [], runAll = async (_, ee, ne) => { + if (0 == ee.length) { + Logger(`${_}: Nothing to do`); + return; + } + Logger(_); + if (!this.localDatabase.isReady) throw Error("Database is not ready!"); + let ie = 0, re = 0; + const se = new QueueProcessor((async ee => { + try { + await ne(ee[0]); + ie++; + } catch (ee) { + Logger(`Error while ${_}`, LOG_LEVEL_NOTICE); + Logger(ee, LOG_LEVEL_VERBOSE); + re++; + } + if ((ie + re) % 10 == 0) { + const ee = `${_}: DONE:${ie}, FAILED:${re}, LAST:${se._queue.length}`; + ge(_, ee); + } + }), { + batchSize: 1, + concurrentLimit: 10, + delay: 0, + suspended: true + }, ee); + await se.waitForAllDoneAndTerminate(); + ge(_, `${_} All done: DONE:${ie}, FAILED:${re}`); + }; + me.push(runAll("UPDATE DATABASE", le, (async _ => { + if (!this.isFileSizeExceeded(_.stat.size)) { + await this.updateIntoDB(_); + fireAndForget((() => this.checkAndApplySettingFromMarkdown(_.path, true))); + } else Logger(`UPDATE DATABASE: ${_.path} has been skipped due to file size exceeding the limit`, pe); + }))); + me.push(runAll("UPDATE STORAGE", ue, (async _ => { + const ee = await this.localDatabase.getDBEntryMeta(_, {}, true); + if (ee && !(ee.deleted || ee._deleted)) if (!this.isFileSizeExceeded(ee.size)) { + await this.pullFile(_, ne, false, void 0, false); + fireAndForget((() => this.checkAndApplySettingFromMarkdown(_, true))); + Logger(`Check or pull from db:${_} OK`); + } else Logger(`UPDATE STORAGE: ${_} has been skipped due to file size exceeding the limit`, pe); else if (ee) Logger(`Deletion history skipped: ${_}`, LOG_LEVEL_VERBOSE); else Logger(`entry not found: ${_}`); + }))); + const ye = new QueueProcessor((async _ => { + const ee = _[0]; + return [ { + file: ee, + id: await this.path2id(getPathFromTFile(ee)) + } ]; + }), { + batchSize: 1, + concurrentLimit: 10, + delay: 0, + suspended: true + }, fe); + ye.pipeTo(new QueueProcessor((async _ => { + const ee = await this.localDatabase.allDocsRaw({ + keys: _.map((_ => _.id)), + include_docs: true + }), ne = Object.fromEntries(ee.rows.map((_ => [ _.id, _.doc ]))); + return _.map((_ => ({ + file: _.file, + doc: ne[_.id] + }))); + }), { + batchSize: 100, + concurrentLimit: 1, + delay: 10, + suspended: false, + maintainDelay: true, + yieldThreshold: 100 + })).pipeTo(new QueueProcessor((async _ => { + for (const ee of _) try { + const _ = ee; + await this.syncFileBetweenDBandStorage(_.file, _.doc); + } catch (_) { + Logger("Error while syncFileBetweenDBandStorage", LOG_LEVEL_NOTICE); + Logger(_, LOG_LEVEL_VERBOSE); + } + }), { + batchSize: 5, + concurrentLimit: 10, + delay: 10, + suspended: false, + yieldThreshold: 10, + maintainDelay: true + })); + const Se = fe.length; + let Ee = Se; + ye.startPipeline().onUpdateProgress((() => (_ => { + if (Ee - _ > 25) { + ge("sync", ` CHECK AND SYNC: ${Se - _} / ${Se}`); + Ee = _; + } + })(ye.totalRemaining + ye.nowProcessing))); + me.push(ye.waitForAllDoneAndTerminate()); + await Promise.all(me); + Logger("Initialized, NOW TRACKING!"); + if (!oe) await this.kvDB.set("initialized", true); + if (_) Logger("Initialize done!", LOG_LEVEL_NOTICE, "syncAll"); + } + async getConflictedDoc(_, ee) { + try { + const ne = await this.localDatabase.getDBEntry(_, { + rev: ee + }, false, false, true); + if (false === ne) return false; + let ie = getDocData(ne.data); + if ("newnote" == ne.datatype) ie = readString(new Uint8Array(decodeBinary(ne.data))); else if ("plain" == ne.datatype) ; + return { + deleted: ne.deleted || ne._deleted, + ctime: ne.ctime, + mtime: ne.mtime, + rev: ee, + data: ie + }; + } catch (_) { + if (isErrorOfMissingDoc(_)) return false; + } + return false; + } + async mergeSensibly(_, ee, ne, ie) { + var re, se, oe, le; + const ue = await this.getConflictedDoc(_, ee), de = await this.getConflictedDoc(_, ne), fe = await this.getConflictedDoc(_, ie); + let he = false; + if (false == ue || false == de || false == fe) return false; + if (de.deleted && fe.deleted) return false; + const pe = new import_diff_match_patch.diff_match_patch, ge = pe.diff_linesToChars_(ue.data, de.data), me = pe.diff_main(ge.chars1, ge.chars2, false); + pe.diff_charsToLines_(me, ge.lineArray); + const ye = pe.diff_linesToChars_(ue.data, fe.data), Se = pe.diff_main(ye.chars1, ye.chars2, false); + pe.diff_charsToLines_(Se, ye.lineArray); + function splitDiffPiece(_) { + const ee = []; + do { + const ne = _.shift(); + if (void 0 === ne) return ee; + const ie = ne[1].split(/([^\n]*\n)/).filter((_ => "" != _)); + if ("undefined" == typeof ne) break; + if (ne[0] != import_diff_match_patch.DIFF_DELETE) ee.push(...ie.map((_ => [ ne[0], _ ]))); + if (ne[0] == import_diff_match_patch.DIFF_DELETE) { + const re = _.shift(); + if ("undefined" != typeof re) { + const _ = re[1].split(/([^\n]*\n)/).filter((_ => "" != _)); + if (re[0] == import_diff_match_patch.DIFF_INSERT) { + for (const re of ie) { + ee.push([ ne[0], re ]); + const ie = _.shift(); + if ("undefined" != typeof ie) ee.push([ import_diff_match_patch.DIFF_INSERT, ie ]); + } + ee.push(..._.map((_ => [ re[0], _ ]))); + } else { + ee.push(...ie.map((_ => [ ne[0], _ ]))); + ee.push(..._.map((_ => [ re[0], _ ]))); + } + } else ee.push(...ie.map((_ => [ 0, _ ]))); + } + } while (_.length > 0); + return ee; + } + const Ee = splitDiffPiece(me), ve = splitDiffPiece(Se); + let Ce = 0, we = 0; + const Le = []; + he = true; + e: do { + if (we >= Ee.length && Ce >= ve.length) break e; + const _ = null != (re = Ee[we]) ? re : [ 0, "" ], ee = null != (se = ve[Ce]) ? se : [ 0, "" ]; + we++; + Ce++; + if (_[0] != import_diff_match_patch.DIFF_EQUAL || ee[0] != import_diff_match_patch.DIFF_EQUAL || _[1] != ee[1]) { + if (_[0] == import_diff_match_patch.DIFF_DELETE && ee[0] == import_diff_match_patch.DIFF_DELETE && _[1] == ee[1]) { + const ee = we, ne = Ce, [ie, re] = [ null != (oe = Ee[ee]) ? oe : [ 0, "" ], null != (le = ve[ne]) ? le : [ 0, "" ] ]; + if (ie[0] == import_diff_match_patch.DIFF_INSERT && re[0] == import_diff_match_patch.DIFF_INSERT && ie[1] != re[1]) { + he = false; + break; + } else { + Le.push(_); + continue; + } + } + if (_[0] == import_diff_match_patch.DIFF_INSERT && ee[0] == import_diff_match_patch.DIFF_INSERT) if (_[1] == ee[1]) { + Le.push(_); + continue; + } else if (de.mtime <= fe.mtime) { + Le.push(_); + Le.push(ee); + continue; + } else { + Le.push(ee); + Le.push(_); + continue; + } + if (_[0] != import_diff_match_patch.DIFF_INSERT) if (ee[0] != import_diff_match_patch.DIFF_INSERT) { + if (ee[1] != _[1]) { + Logger(`MERGING PANIC:${_[0]},${_[1]} == ${ee[0]},${ee[1]}`, LOG_LEVEL_VERBOSE); + he = false; + break e; + } + if (_[0] == import_diff_match_patch.DIFF_DELETE) if (ee[0] == import_diff_match_patch.DIFF_EQUAL) { + Le.push(_); + continue; + } else { + he = false; + break e; + } + if (ee[0] == import_diff_match_patch.DIFF_DELETE) if (_[0] == import_diff_match_patch.DIFF_EQUAL) { + Le.push(ee); + continue; + } else { + he = false; + break e; + } + Logger(`Weird condition:${_[0]},${_[1]} == ${ee[0]},${ee[1]}`, LOG_LEVEL_VERBOSE); + break e; + } else { + we--; + Le.push(ee); + } else { + Ce--; + Le.push(_); + } + } else Le.push(_); + } while (we < Ee.length || Ce < ve.length); + if (he) { + Logger("Sensibly merge available", LOG_LEVEL_VERBOSE); + return Le; + } else return false; + } + async mergeObject(_, ee, ne, ie) { + try { + const re = await this.getConflictedDoc(_, ee), se = await this.getConflictedDoc(_, ne), oe = await this.getConflictedDoc(_, ie); + if (false == re || false == se || false == oe) return false; + if (se.deleted && oe.deleted) return false; + const le = { + data: tryParseJSON(re.data, {}) + }, ue = { + data: tryParseJSON(se.data, {}) + }, de = { + data: tryParseJSON(oe.data, {}) + }, fe = generatePatchObj(le, ue), he = generatePatchObj(le, de), pe = new Map(flattenObject(fe)), ge = new Map(flattenObject(he)); + for (const [_, ee] of pe) if (ge.has(_)) if (ge.get(_) == ee) ge.delete(_); + for (const [_, ee] of ge) if (pe.has(_) && pe.get(_) != ee) return false; + const me = [ { + mtime: se.mtime, + patch: fe + }, { + mtime: oe.mtime, + patch: he + } ].sort(((_, ee) => _.mtime - ee.mtime)); + let ye = { + ...le + }; + for (const _ of me) ye = applyPatch(ye, _.patch); + return JSON.stringify(ye.data); + } catch (_) { + Logger("Could not merge object"); + Logger(_, LOG_LEVEL_VERBOSE); + return false; + } + } + async checkConflictAndPerformAutoMerge(_) { + var ee, ne; + const ie = await this.localDatabase.getDBEntry(_, { + conflicts: true, + revs_info: true + }, false, false, true); + if (false === ie) return MISSING_OR_ERROR; + if (null == ie) return MISSING_OR_ERROR; + if (!ie._conflicts) return NOT_CONFLICTED; + if (0 == ie._conflicts.length) return NOT_CONFLICTED; + const re = ie._conflicts.sort(((_, ee) => Number(_.split("-")[0]) - Number(ee.split("-")[0]))); + if ((isSensibleMargeApplicable(_) || isObjectMargeApplicable(_)) && !this.settings.disableMarkdownAutoMerge) { + const se = re[0], oe = Number(se.split("-")[0]), le = null != (ne = null == (ee = ((await this.localDatabase.getRaw(await this.path2id(_), { + revs_info: true + }))._revs_info || []).filter((_ => "available" == _.status && Number(_.rev.split("-")[0]) < oe)).first()) ? void 0 : ee.rev) ? ne : ""; + let ue; + if (le) { + if (isSensibleMargeApplicable(_)) { + const ee = await this.mergeSensibly(_, le, ie._rev, se); + if (ee) { + ue = ee.filter((_ => _[0] != import_diff_match_patch.DIFF_DELETE)).map((_ => _[1])).join(""); + Logger(`Sensible merge:${_}`, LOG_LEVEL_INFO); + } else Logger("Sensible merge is not applicable.", LOG_LEVEL_VERBOSE); + } else if (isObjectMargeApplicable(_)) { + const ee = await this.mergeObject(_, le, ie._rev, se); + if (ee) { + Logger(`Object merge:${_}`, LOG_LEVEL_INFO); + ue = ee; + } else Logger("Object merge is not applicable.", LOG_LEVEL_VERBOSE); + } + if (null != ue) { + await this.localDatabase.deleteDBEntry(_, { + rev: se + }); + const ee = this.vaultAccess.getAbstractFileByPath(stripAllPrefixes(_)); + if (ee) { + if (await this.vaultAccess.vaultModify(ee, ue)) await this.updateIntoDB(ee); + } else { + const ee = await this.vaultAccess.vaultCreate(_, ue); + await this.updateIntoDB(ee); + } + await this.pullFile(_); + Logger(`Automatically merged (sensible) :${_}`, LOG_LEVEL_INFO); + return AUTO_MERGED; + } + } + } + const se = await this.getConflictedDoc(_, ie._rev), oe = await this.getConflictedDoc(_, re[0]); + if (false == se) { + Logger(`could not get current revisions:${_}`, LOG_LEVEL_NOTICE); + return MISSING_OR_ERROR; + } + if (false == oe) { + await this.localDatabase.deleteDBEntry(_, { + rev: re[0] + }); + await this.pullFile(_, void 0, true); + Logger(`could not get old revisions, automatically used newer one:${_}`, LOG_LEVEL_NOTICE); + return AUTO_MERGED; + } + const le = se.data == oe.data && se.deleted == oe.deleted, ue = !isPlainText(_), de = this.settings.resolveConflictsByNewerFile; + if (le || ue || de) { + let ee = se; + if (compareMTime(se.mtime, oe.mtime) != TARGET_IS_NEW) ee = oe; + await this.localDatabase.deleteDBEntry(_, { + rev: ee.rev + }); + await this.pullFile(_, void 0, true); + Logger(`Automatically merged (${le ? "same," : ""}${ue ? "binary," : ""}${de ? "alwaysNewer" : ""}) :${_}`, LOG_LEVEL_NOTICE); + return AUTO_MERGED; + } + const fe = new import_diff_match_patch.diff_match_patch, he = fe.diff_main(se.data, oe.data); + fe.diff_cleanupSemantic(he); + Logger(`conflict(s) found:${_}`); + return { + left: se, + right: oe, + diff: he + }; + } + async resolveConflictByUI(_, ee) { + Logger("Merge:open conflict dialog", LOG_LEVEL_VERBOSE); + const ne = new ConflictResolveModal(this.app, _, ee); + ne.open(); + const ie = await ne.waitForResult(); + if (ie === CANCELLED) { + Logger(`Merge: Cancelled ${_}`, LOG_LEVEL_INFO); + return false; + } + const re = await this.localDatabase.getDBEntry(_, { + conflicts: true + }, false, false, true); + if (false === re) { + Logger(`Merge: Could not read ${_} from the local database`, LOG_LEVEL_VERBOSE); + return false; + } + if (!re._conflicts) { + Logger(`Merge: Nothing to do ${_}`, LOG_LEVEL_VERBOSE); + return false; + } + const se = ie, oe = ee.left.rev != se ? ee.left.rev : ee.right.rev; + if (se === LEAVE_TO_SUBSEQUENT) { + const ne = ee.diff.map((_ => _[1])).join(""); + await this.localDatabase.deleteDBEntry(_, { + rev: re._conflicts[0] + }); + const ie = this.vaultAccess.getAbstractFileByPath(stripAllPrefixes(_)); + if (ie) { + if (await this.vaultAccess.vaultModify(ie, ne)) await this.updateIntoDB(ie); + } else { + const ee = await this.vaultAccess.vaultCreate(_, ne); + await this.updateIntoDB(ee); + } + await this.pullFile(_); + Logger(`Merge: Changes has been concatenated: ${_}`); + } else if ("string" == typeof se) { + await this.localDatabase.deleteDBEntry(_, { + rev: se + }); + await this.pullFile(_, void 0, true, oe); + Logger(`Conflict resolved:${_}`); + } else { + Logger(`Merge: Something went wrong: ${_}, (${se})`, LOG_LEVEL_NOTICE); + return false; + } + if (this.settings.syncAfterMerge && !this.suspended) await shareRunningResult("replication", (() => this.replicate())); + this.conflictCheckQueue.enqueue(_); + return false; + } + async pullFile(_, ee, ne, ie, re = true) { + const se = this.vaultAccess.getAbstractFileByPath(stripAllPrefixes(_)); + if (await this.isTargetFile(_)) if (null == se) { + const ee = await this.localDatabase.getDBEntry(_, ie ? { + rev: ie + } : void 0, false, re); + if (false === ee) { + Logger(`${_} Skipped`); + return; + } + await this.processEntryDoc(ee, void 0, ne); + } else if (se instanceof import_obsidian.TFile) { + const ee = se, oe = await this.localDatabase.getDBEntry(_, ie ? { + rev: ie + } : void 0, false, re); + if (false === oe) { + Logger(`${_} Skipped`); + return; + } + await this.processEntryDoc(oe, ee, ne); + } else Logger(`target files:${_} is exists as the folder`); + } + async syncFileBetweenDBandStorage(_, ee) { + if (!ee) throw new Error(`Missing doc:${_.path}`); + if (!(_ instanceof import_obsidian.TFile) && "path" in _) { + const ee = this.vaultAccess.getAbstractFileByPath(_.path); + if (ee instanceof import_obsidian.TFile) _ = ee; else throw new Error(`Missing file:${_.path}`); + } + switch (compareFileFreshness(_, ee)) { + case BASE_IS_NEW: + if (!this.isFileSizeExceeded(_.stat.size)) { + Logger("STORAGE -> DB :" + _.path); + await this.updateIntoDB(_); + fireAndForget((() => this.checkAndApplySettingFromMarkdown(_.path, true))); + } else Logger(`STORAGE -> DB : ${_.path} has been skipped due to file size exceeding the limit`, LOG_LEVEL_NOTICE); + break; + + case TARGET_IS_NEW: + if (!this.isFileSizeExceeded(ee.size)) { + Logger("STORAGE <- DB :" + _.path); + const ee = await this.localDatabase.getDBEntry(getPathFromTFile(_), void 0, false, false, true); + if (false != ee) await this.processEntryDoc(ee, _); else Logger(`STORAGE <- DB : Cloud not read ${_.path}, possibly deleted`, LOG_LEVEL_NOTICE); + return caches; + } else Logger(`STORAGE <- DB : ${_.path} has been skipped due to file size exceeding the limit`, LOG_LEVEL_NOTICE); + break; + + case EVEN: + Logger("STORAGE == DB :" + _.path, LOG_LEVEL_DEBUG); + break; + + default: + Logger("STORAGE ?? DB :" + _.path + " Something got weird"); + } + } + async updateIntoDB(_, ee, ne) { + if (!await this.isTargetFile(_)) return true; + if (shouldBeIgnored(_.path)) return true; + const ie = !isPlainText(_.name); + if (ie) Logger(`Reading : ${_.path}`, LOG_LEVEL_VERBOSE); + const re = createBlob(await this.vaultAccess.vaultReadAuto(_)), se = determineTypeFromBlob(re); + if (ie) Logger(`Processing: ${_.path}`, LOG_LEVEL_VERBOSE); + const oe = getPathFromTFile(_), le = { + _id: await this.path2id(oe), + path: getPathFromTFile(_), + data: re, + ctime: _.stat.ctime, + mtime: _.stat.mtime, + size: _.stat.size, + children: [], + datatype: se, + type: se, + eden: {} + }, ue = `STORAGE -> DB (${se}) `; + if (await serialized("file-" + oe, (async () => { + if (this.vaultAccess.recentlyTouched(_)) return true; + try { + const _ = await this.localDatabase.getDBEntry(oe, void 0, false, false); + if (false !== _) { + const ee = { + data: _.data, + deleted: _._deleted || _.deleted + }, ne = { + data: le.data, + deleted: le._deleted || le.deleted + }; + if (ee.deleted != ne.deleted) return false; + if (!await isDocContentSame(_.data, ne.data)) return false; + Logger(ue + "Skipped (not changed) " + oe + (le._deleted || le.deleted ? " (deleted)" : ""), LOG_LEVEL_VERBOSE); + markChangesAreSame(_, le.mtime, _.mtime); + return true; + } + } catch (_) { + if (ne) Logger(ue + "Error, Could not check the diff for the old one." + (ne ? "force writing." : "") + oe + (le._deleted || le.deleted ? " (deleted)" : ""), LOG_LEVEL_VERBOSE); else Logger(ue + "Error, Could not check the diff for the old one." + oe + (le._deleted || le.deleted ? " (deleted)" : ""), LOG_LEVEL_VERBOSE); + return !ne; + } + return false; + }))) { + Logger(ue + " Skip " + oe, LOG_LEVEL_VERBOSE); + return true; + } + const de = await this.localDatabase.putDBEntry(le); + if (false !== de) { + Logger(ue + oe); + this.scheduleReplicateIfSyncOnSave(); + } + return false != de; + } + scheduleReplicateIfSyncOnSave() { + if (this.settings.syncOnSave && !this.suspended) scheduleTask("perform-replicate-after-save", 250, (() => this.replicate())); + } + async deleteFromDB(_) { + if (!await this.isTargetFile(_)) return; + const ee = getPathFromTFile(_); + Logger(`deleteDB By path:${ee}`); + await this.deleteFromDBbyPath(ee); + this.scheduleReplicateIfSyncOnSave(); + } + async deleteFromDBbyPath(_) { + await this.localDatabase.deleteDBEntry(_); + this.scheduleReplicateIfSyncOnSave(); + } + async resetLocalDatabase() { + this.vaultAccess.clearTouched(); + await this.localDatabase.resetDatabase(); + } + async tryResetRemoteDatabase() { + await this.replicator.tryResetRemoteDatabase(this.settings); + } + async tryCreateRemoteDatabase() { + await this.replicator.tryCreateRemoteDatabase(this.settings); + } + filterTargetFiles(_, ee = false) { + const ne = this.settings.syncInternalFilesIgnorePatterns.replace(/\n| /g, "").split(",").filter((_ => _)).map((_ => new RegExp(_, "i"))); + return _.filter((_ => !ne.some((ee => _.path.match(ee))))).filter((_ => !ee || ee && -1 !== ee.indexOf(_.path))); + } + async resolveConflictByNewerEntry(_) { + const ee = await this.path2id(_), ne = await this.localDatabase.getRaw(ee, { + conflicts: true + }); + if (!("_conflicts" in ne) || void 0 === ne._conflicts) return false; + if (0 == ne._conflicts.length) return false; + Logger(`Hidden file conflicted:${this.getPath(ne)}`); + const ie = ne._conflicts.sort(((_, ee) => Number(_.split("-")[0]) - Number(ee.split("-")[0]))), re = ne._rev, se = ie[0], oe = await this.localDatabase.getRaw(ee, { + rev: se + }), le = ("mtime" in ne && ne.mtime || 0) < ("mtime" in oe && oe.mtime || 0) ? re : se; + await this.localDatabase.removeRevision(ee, le); + Logger(`Older one has been deleted:${this.getPath(ne)}`); + return true; + } + async readIgnoreFile(_) { + try { + const ee = (await this.vaultAccess.adapterRead(_)).split(/\r?\n/g); + this.ignoreFileCache.set(_, ee); + return ee; + } catch (ee) { + this.ignoreFileCache.set(_, false); + return false; + } + } + async getIgnoreFile(_) { + var ee; + if (this.ignoreFileCache.has(_)) return null != (ee = this.ignoreFileCache.get(_)) ? ee : false; else return await this.readIgnoreFile(_); + } + async isIgnoredByIgnoreFiles(_) { + if (!this.settings.useIgnoreFiles) return false; + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + if (this.ignoreFileCache.has(ee)) await this.readIgnoreFile(ee); + if (!await isAcceptedAll(stripAllPrefixes(ee), this.ignoreFiles, (_ => this.getIgnoreFile(_)))) return true; else return false; + } + async isTargetFile(_) { + const ee = _ instanceof import_obsidian.TFile ? _.path : _; + if (this.settings.useIgnoreFiles && await this.isIgnoredByIgnoreFiles(_)) return false; else return this.localDatabase.isTargetFile(ee); + } + async dryRunGC() { + await skipIfDuplicated("cleanup", (async () => { + const _ = this.getReplicator(); + if (!(_ instanceof LiveSyncCouchDBReplicator)) return; + const ee = await _.connectRemoteCouchDBWithSetting(this.settings, this.isMobile); + if ("string" != typeof ee) { + await purgeUnreferencedChunks(ee.db, true, this.settings, false); + await purgeUnreferencedChunks(this.localDatabase.localDatabase, true); + this.localDatabase.hashCaches.clear(); + } else Logger(ee); + })); + } + async dbGC() { + await skipIfDuplicated("cleanup", (async () => { + const _ = this.getReplicator(); + if (!(_ instanceof LiveSyncCouchDBReplicator)) return; + this.getReplicator().markRemoteLocked(this.settings, true, true); + const ee = await _.connectRemoteCouchDBWithSetting(this.settings, this.isMobile); + if ("string" != typeof ee) { + await purgeUnreferencedChunks(ee.db, false, this.settings, true); + await purgeUnreferencedChunks(this.localDatabase.localDatabase, false); + this.localDatabase.hashCaches.clear(); + await balanceChunkPurgedDBs(this.localDatabase.localDatabase, ee.db); + this.localDatabase.refreshSettings(); + Logger("The remote database has been cleaned up! Other devices will be cleaned up on the next synchronisation."); + } else Logger(ee); + })); + } + askYesNo(_) { + return askYesNo(this.app, _); + } + askSelectString(_, ee) { + return askSelectString(this.app, _, ee); + } + askInPopup(_, ee, ne) { + const ie = createFragment((_ => { + const [ie, re] = ee.split("{HERE}", 2); + _.createEl("span", void 0, (_ => { + _.appendText(ie); + _.appendChild(_.createEl("a", void 0, (_ => { + ne(_); + }))); + _.appendText(re); + })); + })), re = "popup-" + _; + scheduleTask(re, 1e3, (async () => { + var _; + const ee = await memoIfNotExist(re, (() => new import_obsidian.Notice(ie, 0))); + if (!(null == (_ = null == ee ? void 0 : ee.noticeEl) ? void 0 : _.isShown())) memoObject(re, new import_obsidian.Notice(ie, 0)); + scheduleTask(re + "-close", 2e4, (() => { + var _; + const ee = retrieveMemoObject(re); + if (ee) { + if (null == (_ = null == ee ? void 0 : ee.noticeEl) ? void 0 : _.isShown()) ee.hide(); + disposeMemoObject(re); + } + })); + })); + } + openSetting() { + this.app.setting.open(); + this.app.setting.openTabById("obsidian-livesync"); + } + performAppReload() { + this.performCommand("app:reload"); + } + performCommand(_) { + this.app.commands.executeCommandById(_); + } + get isReloadingScheduled() { + return void 0 !== this._totalProcessingCount; + } + askReload(_) { + if (!this.isReloadingScheduled) scheduleTask("configReload", 250, (async () => { + const ee = "Yes, restart immediately", ne = "Yes, schedule a restart after stabilisation", ie = await askSelectString(this.app, _ || "Do you want to restart and reload Obsidian now?", [ ne, ee, "No, Leave it to me" ]); + if (ie == ee) this.performAppReload(); else if (ie == ne) this.scheduleAppReload(); + })); else Logger("Reloading is already scheduled", LOG_LEVEL_VERBOSE); + } + scheduleAppReload() { + if (!this._totalProcessingCount) { + const _ = reactiveSource(0); + this._totalProcessingCount = reactive((() => { + const ee = this.databaseQueueCount.value, ne = this.replicationResultCount.value, ie = this.storageApplyingCount.value, re = collectingChunks.value, se = pluginScanningCount.value, oe = hiddenFilesEventCount.value + hiddenFilesProcessingCount.value, le = this.conflictProcessQueueCount.value, ue = this.pendingFileEventCount.value, de = this.processingFileEventCount.value; + _.value; + return ee + ne + ie + re + se + oe + le + ue + de; + })); + this.registerInterval(setInterval((() => { + _.value++; + }), 1e3)); + let ee = 3; + this._totalProcessingCount.onChanged((_ => { + if (0 == _.value) { + if (ee-- <= 0) this.performAppReload(); + Logger(`Obsidian will be restarted soon! (Within ${ee} seconds)`, LOG_LEVEL_NOTICE, "restart-notice"); + } else ee = 3; + })); + } + } +}; \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-livesync/manifest.json b/.obsidian/plugins/obsidian-livesync/manifest.json new file mode 100644 index 0000000..f4ab502 --- /dev/null +++ b/.obsidian/plugins/obsidian-livesync/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-livesync", + "name": "Self-hosted LiveSync", + "version": "0.23.20", + "minAppVersion": "0.9.12", + "description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.", + "author": "vorotamoroz", + "authorUrl": "https://github.com/vrtmrz", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-livesync/styles.css b/.obsidian/plugins/obsidian-livesync/styles.css new file mode 100644 index 0000000..4a0f06b --- /dev/null +++ b/.obsidian/plugins/obsidian-livesync/styles.css @@ -0,0 +1,342 @@ +.added { + color: var(--text-on-accent); + background-color: var(--text-accent); +} + +.normal { + color: var(--text-normal); +} + +.deleted { + color: var(--text-on-accent); + background-color: var(--text-muted); +} + +.op-scrollable { + overflow-y: scroll; + /* min-height: 280px; */ + max-height: 280px; + user-select: text; +} + +.op-pre { + white-space: pre-wrap; +} + +.op-warn { + border: 1px solid salmon; + padding: 2px; + border-radius: 4px; +} + +.op-warn::before { + content: "Warning"; + font-weight: bold; + color: salmon; + position: relative; + display: block; +} + +.op-warn-info { + border: 1px solid rgb(255, 209, 81); + padding: 2px; + border-radius: 4px; +} + +.op-warn-info::before { + content: "Notice"; + font-weight: bold; + color: rgb(255, 209, 81); + position: relative; + display: block; +} + +.syncstatusbar { + -webkit-filter: grayscale(100%); + filter: grayscale(100%); +} + +.tcenter { + text-align: center; +} + +.sls-plugins-wrap { + display: flex; + flex-grow: 1; + max-height: 50vh; + overflow-y: scroll; +} + +.sls-plugins-tbl { + border: 1px solid var(--background-modifier-border); + width: 100%; + max-height: 80%; +} + +.divider th { + border-top: 1px solid var(--background-modifier-border); +} + +.sls-header-button { + margin-left: 2em; +} + +.sls-hidden { + display: none; +} + +:root { + --sls-log-text: ""; +} + +.sls-troubleshoot-preview { + max-width: max-content; +} + +.sls-troubleshoot-preview img { + max-width: 100%; +} + +.CodeMirror-wrap::before, +.markdown-preview-view.cm-s-obsidian::before, +.markdown-source-view.cm-s-obsidian::before, +.canvas-wrapper::before, +.empty-state::before { + content: var(--sls-log-text, ""); + font-variant-numeric: tabular-nums; + font-variant-emoji: emoji; + tab-size: 4; + text-align: right; + white-space: pre-wrap; + position: absolute; + border-radius: 4px; + /* border:1px solid --background-modifier-border; */ + display: inline-block; + top: 8px; + color: --text-normal; + opacity: 0.5; + font-size: 80%; + -webkit-filter: grayscale(100%); + filter: grayscale(100%); +} + +.empty-state::before, +.markdown-preview-view.cm-s-obsidian::before, +.markdown-source-view.cm-s-obsidian::before { + top: var(--header-height); + right: 1em; +} + +.is-mobile .empty-state::before, +.is-mobile .markdown-preview-view.cm-s-obsidian::before, +.is-mobile .markdown-source-view.cm-s-obsidian::before { + top: var(--view-header-height); + right: 1em; +} + +.canvas-wrapper::before { + right: 48px; +} + +.CodeMirror-wrap::before { + right: 0px; +} + +.cm-s-obsidian > .cm-editor::before { + right: 16px; +} + +.sls-setting-tab { + display: none; +} + +div.sls-setting-menu-btn { + color: var(--text-normal); + background-color: var(--background-secondary-alt); + border-radius: 4px 4px 0 0; + padding: 6px 10px; + cursor: pointer; + margin-right: 12px; + font-family: "Inter", sans-serif; + outline: none; + user-select: none; + flex-grow: 1; + text-align: center; + flex-shrink: 1; +} + +.sls-setting-label.selected { + /* order: 1; */ + flex-grow: 1; + /* width: 100%; */ +} + +.sls-setting-tab:hover ~ div.sls-setting-menu-btn, +.sls-setting-label.selected .sls-setting-tab:checked ~ div.sls-setting-menu-btn { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} + +.sls-setting-menu { + display: flex; + flex-direction: row; + /* flex-wrap: wrap; */ + overflow-x: auto; +} + +.sls-setting-label { + flex-grow: 1; + display: inline-flex; + justify-content: center; +} + +.setting-collapsed { + display: none; +} + +.sls-plugins-tbl-buttons { + text-align: right; +} + +.sls-plugins-tbl-buttons button { + flex-grow: 0; + padding: 6px 10px; +} + +.sls-plugins-tbl-device-head { + background-color: var(--background-secondary-alt); + color: var(--text-accent); +} + +.op-flex { + display: flex; +} + +.op-flex input { + display: inline-flex; + flex-grow: 1; + margin-bottom: 8px; +} + +.op-info { + display: inline-flex; + flex-grow: 1; + border-bottom: 1px solid var(--background-modifier-border); + width: 100%; + margin-bottom: 4px; + padding-bottom: 4px; +} + +.history-added { + color: var(--text-on-accent); + background-color: var(--text-accent); +} + +.history-normal { + color: var(--text-normal); +} + +.history-deleted { + color: var(--text-on-accent); + background-color: var(--text-muted); + text-decoration: line-through; +} + +.ob-btn-config-fix label { + margin-right: 40px; +} + +.ob-btn-config-info { + border: 1px solid salmon; + padding: 2px; + margin: 1px; + border-radius: 4px; +} + +.ob-btn-config-head { + padding: 2px; + margin: 1px; + border-radius: 4px; +} + +.isWizard .wizardHidden { + display: none; +} + +.sls-setting:not(.isWizard) .wizardOnly { + display: none; +} + +.sls-item-dirty::before { + content: "✏"; +} + +.sls-item-dirty-help::after { + content: " ❓"; +} + +.sls-item-invalid-value { + background-color: rgba(var(--background-modifier-error-rgb), 0.3) !important; +} + +.sls-setting-disabled input[type=text], +.sls-setting-disabled input[type=number], +.sls-setting-disabled input[type=password] { + filter: brightness(80%); + color: var(--text-muted); + +} + +.sls-setting-hidden { + display: none; +} + +.password-input > .setting-item-control > input { + -webkit-text-security: disc; +} + +span.ls-mark-cr::after { + user-select: none; + content: "↲"; + color: var(--text-muted); + font-size: 0.8em; +} + +.deleted span.ls-mark-cr::after { + color: var(--text-on-accent); +} + +.ls-imgdiff-wrap { + display: flex; + justify-content: center; + align-items: center; +} + +.ls-imgdiff-wrap .overlay { + position: relative; +} + +.ls-imgdiff-wrap .overlay .img-base { + position: relative; + top: 0; + left: 0; +} +.ls-imgdiff-wrap .overlay .img-overlay { + -webkit-filter: invert(100%) opacity(50%); + filter: invert(100%) opacity(50%); + position: absolute; + top: 0; + left: 0; + animation: ls-blink-diff 0.5s cubic-bezier(0.4, 0, 1, 1) infinite alternate; +} +@keyframes ls-blink-diff { + 0% { + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} diff --git a/.obsidian/plugins/obsidian-minimal-settings/data.json b/.obsidian/plugins/obsidian-minimal-settings/data.json new file mode 100644 index 0000000..96b1adb --- /dev/null +++ b/.obsidian/plugins/obsidian-minimal-settings/data.json @@ -0,0 +1,34 @@ +{ + "lightStyle": "minimal-light", + "darkStyle": "minimal-dark", + "lightScheme": "minimal-default-light", + "darkScheme": "minimal-default-dark", + "editorFont": "", + "lineHeight": 1.5, + "lineWidth": 40, + "lineWidthWide": 50, + "maxWidth": 88, + "textNormal": 16, + "textSmall": 13, + "imgGrid": false, + "imgWidth": "img-default-width", + "tableWidth": "table-default-width", + "iframeWidth": "iframe-default-width", + "mapWidth": "map-default-width", + "chartWidth": "chart-default-width", + "colorfulHeadings": true, + "colorfulFrame": true, + "colorfulActiveStates": true, + "trimNames": true, + "labeledNav": false, + "fullWidthMedia": true, + "bordersToggle": true, + "minimalStatus": true, + "focusMode": false, + "underlineInternal": true, + "underlineExternal": true, + "folding": true, + "lineNumbers": false, + "readableLineLength": true, + "devBlockWidth": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-minimal-settings/main.js b/.obsidian/plugins/obsidian-minimal-settings/main.js new file mode 100644 index 0000000..7bcd5f7 --- /dev/null +++ b/.obsidian/plugins/obsidian-minimal-settings/main.js @@ -0,0 +1,981 @@ +/* +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 __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key of __getOwnPropNames(module2)) + if (!__hasOwnProp.call(target, key) && key !== "default") + __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); + } + return target; +}; +var __toModule = (module2) => { + return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); +}; +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// main.ts +__export(exports, { + default: () => MinimalTheme +}); +var import_obsidian = __toModule(require("obsidian")); +var MinimalTheme = class extends import_obsidian.Plugin { + onload() { + return __async(this, null, function* () { + yield this.loadSettings(); + this.addSettingTab(new MinimalSettingTab(this.app, this)); + this.loadRules(); + let settingsUpdate = () => { + const fontSize = this.app.vault.getConfig("baseFontSize"); + this.settings.textNormal = fontSize; + if (this.app.vault.getConfig("foldHeading")) { + this.settings.folding = true; + this.saveData(this.settings); + console.log("Folding is on"); + } else { + this.settings.folding = false; + this.saveData(this.settings); + console.log("Folding is off"); + } + document.body.classList.toggle("minimal-folding", this.settings.folding); + if (this.app.vault.getConfig("showLineNumber")) { + this.settings.lineNumbers = true; + this.saveData(this.settings); + console.log("Line numbers are on"); + } else { + this.settings.lineNumbers = false; + this.saveData(this.settings); + console.log("Line numbers are off"); + } + document.body.classList.toggle("minimal-line-nums", this.settings.lineNumbers); + if (this.app.vault.getConfig("readableLineLength")) { + this.settings.readableLineLength = true; + this.saveData(this.settings); + console.log("Readable line length is on"); + } else { + this.settings.readableLineLength = false; + this.saveData(this.settings); + console.log("Readable line length is off"); + } + document.body.classList.toggle("minimal-readable", this.settings.readableLineLength); + document.body.classList.toggle("minimal-readable-off", !this.settings.readableLineLength); + }; + let sidebarUpdate = () => { + const sidebarEl = document.getElementsByClassName("mod-left-split")[0]; + const ribbonEl = document.getElementsByClassName("side-dock-ribbon")[0]; + if (sidebarEl && ribbonEl && document.body.classList.contains("theme-light") && this.settings.lightStyle == "minimal-light-contrast") { + sidebarEl.addClass("theme-dark"); + ribbonEl.addClass("theme-dark"); + } else if (sidebarEl && ribbonEl) { + sidebarEl.removeClass("theme-dark"); + ribbonEl.removeClass("theme-dark"); + } + }; + this.registerEvent(app.vault.on("config-changed", settingsUpdate)); + this.registerEvent(app.workspace.on("css-change", sidebarUpdate)); + settingsUpdate(); + app.workspace.onLayoutReady(() => { + sidebarUpdate(); + }); + const lightStyles = ["minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"]; + const darkStyles = ["minimal-dark", "minimal-dark-tonal", "minimal-dark-black"]; + const imgGridStyles = ["img-grid", "img-grid-ratio", "img-nogrid"]; + const tableWidthStyles = ["table-100", "table-default-width", "table-wide", "table-max"]; + const iframeWidthStyles = ["iframe-100", "iframe-default-width", "iframe-wide", "iframe-max"]; + const imgWidthStyles = ["img-100", "img-default-width", "img-wide", "img-max"]; + const mapWidthStyles = ["map-100", "map-default-width", "map-wide", "map-max"]; + const chartWidthStyles = ["chart-100", "chart-default-width", "chart-wide", "chart-max"]; + this.addCommand({ + id: "increase-body-font-size", + name: "Increase body font size", + callback: () => { + this.settings.textNormal = this.settings.textNormal + 0.5; + this.saveData(this.settings); + this.setFontSize(); + } + }); + this.addCommand({ + id: "decrease-body-font-size", + name: "Decrease body font size", + callback: () => { + this.settings.textNormal = this.settings.textNormal - 0.5; + this.saveData(this.settings); + this.setFontSize(); + } + }); + this.addCommand({ + id: "toggle-minimal-dark-cycle", + name: "Cycle between dark mode styles", + callback: () => { + this.settings.darkStyle = darkStyles[(darkStyles.indexOf(this.settings.darkStyle) + 1) % darkStyles.length]; + this.saveData(this.settings); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-light-cycle", + name: "Cycle between light mode styles", + callback: () => { + this.settings.lightStyle = lightStyles[(lightStyles.indexOf(this.settings.lightStyle) + 1) % lightStyles.length]; + this.saveData(this.settings); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-hidden-borders", + name: "Toggle sidebar borders", + callback: () => { + this.settings.bordersToggle = !this.settings.bordersToggle; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "toggle-colorful-headings", + name: "Toggle colorful headings", + callback: () => { + this.settings.colorfulHeadings = !this.settings.colorfulHeadings; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "toggle-minimal-focus-mode", + name: "Toggle focus mode", + callback: () => { + this.settings.focusMode = !this.settings.focusMode; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "toggle-minimal-colorful-frame", + name: "Toggle colorful window frame", + callback: () => { + this.settings.colorfulFrame = !this.settings.colorfulFrame; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "cycle-minimal-table-width", + name: "Cycle between table width options", + callback: () => { + this.settings.tableWidth = tableWidthStyles[(tableWidthStyles.indexOf(this.settings.tableWidth) + 1) % tableWidthStyles.length]; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "cycle-minimal-image-width", + name: "Cycle between image width options", + callback: () => { + this.settings.imgWidth = imgWidthStyles[(imgWidthStyles.indexOf(this.settings.imgWidth) + 1) % imgWidthStyles.length]; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "cycle-minimal-iframe-width", + name: "Cycle between iframe width options", + callback: () => { + this.settings.iframeWidth = iframeWidthStyles[(iframeWidthStyles.indexOf(this.settings.iframeWidth) + 1) % iframeWidthStyles.length]; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "cycle-minimal-chart-width", + name: "Cycle between chart width options", + callback: () => { + this.settings.chartWidth = chartWidthStyles[(chartWidthStyles.indexOf(this.settings.chartWidth) + 1) % chartWidthStyles.length]; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "cycle-minimal-map-width", + name: "Cycle between map width options", + callback: () => { + this.settings.mapWidth = mapWidthStyles[(mapWidthStyles.indexOf(this.settings.mapWidth) + 1) % mapWidthStyles.length]; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "toggle-minimal-img-grid", + name: "Toggle image grids", + callback: () => { + this.settings.imgGrid = !this.settings.imgGrid; + this.saveData(this.settings); + this.refresh(); + } + }); + this.addCommand({ + id: "toggle-minimal-switch", + name: "Switch between light and dark mode", + callback: () => { + this.updateTheme(); + } + }); + this.addCommand({ + id: "toggle-minimal-light-default", + name: "Use light mode (default)", + callback: () => { + this.settings.lightStyle = "minimal-light"; + this.saveData(this.settings); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-light-white", + name: "Use light mode (all white)", + callback: () => { + this.settings.lightStyle = "minimal-light-white"; + this.saveData(this.settings); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-light-tonal", + name: "Use light mode (low contrast)", + callback: () => { + this.settings.lightStyle = "minimal-light-tonal"; + this.saveData(this.settings); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-light-contrast", + name: "Use light mode (high contrast)", + callback: () => { + this.settings.lightStyle = "minimal-light-contrast"; + this.saveData(this.settings); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-dark-default", + name: "Use dark mode (default)", + callback: () => { + this.settings.darkStyle = "minimal-dark"; + this.saveData(this.settings); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-dark-tonal", + name: "Use dark mode (low contrast)", + callback: () => { + this.settings.darkStyle = "minimal-dark-tonal"; + this.saveData(this.settings); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-dark-black", + name: "Use dark mode (true black)", + callback: () => { + this.settings.darkStyle = "minimal-dark-black"; + this.saveData(this.settings); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-atom-light", + name: "Switch light color scheme to Atom (light)", + callback: () => { + this.settings.lightScheme = "minimal-atom-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-ayu-light", + name: "Switch light color scheme to Ayu (light)", + callback: () => { + this.settings.lightScheme = "minimal-ayu-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-catppuccin-light", + name: "Switch light color scheme to Catppuccin (light)", + callback: () => { + this.settings.lightScheme = "minimal-catppuccin-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-default-light", + name: "Switch light color scheme to default (light)", + callback: () => { + this.settings.lightScheme = "minimal-default-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-gruvbox-light", + name: "Switch light color scheme to Gruvbox (light)", + callback: () => { + this.settings.lightScheme = "minimal-gruvbox-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-eink-light", + name: "Switch light color scheme to E-ink (light)", + callback: () => { + this.settings.lightScheme = "minimal-eink-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-everforest-light", + name: "Switch light color scheme to Everforest (light)", + callback: () => { + this.settings.lightScheme = "minimal-everforest-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-flexoki-light", + name: "Switch light color scheme to Flexoki (light)", + callback: () => { + this.settings.lightScheme = "minimal-flexoki-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-macos-light", + name: "Switch light color scheme to macOS (light)", + callback: () => { + this.settings.lightScheme = "minimal-macos-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-notion-light", + name: "Switch light color scheme to Sky (light)", + callback: () => { + this.settings.lightScheme = "minimal-notion-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-nord-light", + name: "Switch light color scheme to Nord (light)", + callback: () => { + this.settings.lightScheme = "minimal-nord-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-rose-pine-light", + name: "Switch light color scheme to Ros\xE9 Pine (light)", + callback: () => { + this.settings.lightScheme = "minimal-rose-pine-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-solarized-light", + name: "Switch light color scheme to Solarized (light)", + callback: () => { + this.settings.lightScheme = "minimal-solarized-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-things-light", + name: "Switch light color scheme to Things (light)", + callback: () => { + this.settings.lightScheme = "minimal-things-light"; + this.saveData(this.settings); + this.updateLightScheme(); + this.updateLightStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-atom-dark", + name: "Switch dark color scheme to Atom (dark)", + callback: () => { + this.settings.darkScheme = "minimal-atom-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-ayu-dark", + name: "Switch dark color scheme to Ayu (dark)", + callback: () => { + this.settings.darkScheme = "minimal-ayu-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-catppuccin-dark", + name: "Switch dark color scheme to Catppuccin (dark)", + callback: () => { + this.settings.darkScheme = "minimal-catppuccin-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-dracula-dark", + name: "Switch dark color scheme to Dracula (dark)", + callback: () => { + this.settings.darkScheme = "minimal-dracula-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-default-dark", + name: "Switch dark color scheme to default (dark)", + callback: () => { + this.settings.darkScheme = "minimal-default-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-eink-dark", + name: "Switch dark color scheme to E-ink (dark)", + callback: () => { + this.settings.darkScheme = "minimal-eink-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-everforest-dark", + name: "Switch dark color scheme to Everforest (dark)", + callback: () => { + this.settings.darkScheme = "minimal-everforest-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-flexoki-dark", + name: "Switch dark color scheme to Flexoki (dark)", + callback: () => { + this.settings.darkScheme = "minimal-flexoki-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-gruvbox-dark", + name: "Switch dark color scheme to Gruvbox (dark)", + callback: () => { + this.settings.darkScheme = "minimal-gruvbox-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-macos-dark", + name: "Switch dark color scheme to macOS (dark)", + callback: () => { + this.settings.darkScheme = "minimal-macos-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-nord-dark", + name: "Switch dark color scheme to Nord (dark)", + callback: () => { + this.settings.darkScheme = "minimal-nord-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-notion-dark", + name: "Switch dark color scheme to Sky (dark)", + callback: () => { + this.settings.darkScheme = "minimal-notion-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-rose-pine-dark", + name: "Switch dark color scheme to Ros\xE9 Pine (dark)", + callback: () => { + this.settings.darkScheme = "minimal-rose-pine-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-solarized-dark", + name: "Switch dark color scheme to Solarized (dark)", + callback: () => { + this.settings.darkScheme = "minimal-solarized-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-things-dark", + name: "Switch dark color scheme to Things (dark)", + callback: () => { + this.settings.darkScheme = "minimal-things-dark"; + this.saveData(this.settings); + this.updateDarkScheme(); + this.updateDarkStyle(); + } + }); + this.addCommand({ + id: "toggle-minimal-dev-block-width", + name: "Dev \u2014 Show block widths", + callback: () => { + this.settings.devBlockWidth = !this.settings.devBlockWidth; + this.saveData(this.settings); + this.refresh(); + } + }); + this.refresh(); + }); + } + onunload() { + console.log("Unloading Minimal Theme Settings plugin"); + const sidebarEl = document.getElementsByClassName("mod-left-split")[0]; + const ribbonEl = document.getElementsByClassName("side-dock-ribbon")[0]; + sidebarEl.removeClass("theme-dark"); + ribbonEl.removeClass("theme-dark"); + this.unloadRules(); + this.removeStyle(); + this.removeSettings(); + this.removeLightScheme(); + this.removeDarkScheme(); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign(DEFAULT_SETTINGS, yield this.loadData()); + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } + refresh() { + this.updateStyle(); + } + loadRules() { + const css = document.createElement("style"); + css.id = "minimal-theme"; + document.getElementsByTagName("head")[0].appendChild(css); + document.body.classList.add("minimal-theme"); + this.updateStyle(); + } + unloadRules() { + const styleElement = document.getElementById("minimal-theme"); + if (styleElement) { + styleElement.parentNode.removeChild(styleElement); + } + document.body.classList.remove("minimal-theme"); + } + setFontSize() { + this.app.vault.setConfig("baseFontSize", this.settings.textNormal); + this.app.updateFontSize(); + } + updateStyle() { + this.removeStyle(); + this.removeSettings(); + document.body.addClass(this.settings.lightStyle, this.settings.lightScheme, this.settings.darkStyle, this.settings.darkScheme); + document.body.classList.toggle("borders-none", !this.settings.bordersToggle); + document.body.classList.toggle("colorful-headings", this.settings.colorfulHeadings); + document.body.classList.toggle("colorful-frame", this.settings.colorfulFrame); + document.body.classList.toggle("colorful-active", this.settings.colorfulActiveStates); + document.body.classList.toggle("minimal-focus-mode", this.settings.focusMode); + document.body.classList.toggle("links-int-on", this.settings.underlineInternal); + document.body.classList.toggle("links-ext-on", this.settings.underlineExternal); + document.body.classList.toggle("full-width-media", this.settings.fullWidthMedia); + document.body.classList.toggle("img-grid", this.settings.imgGrid); + document.body.classList.toggle("minimal-dev-block-width", this.settings.devBlockWidth); + document.body.classList.toggle("minimal-status-off", !this.settings.minimalStatus); + document.body.classList.toggle("full-file-names", !this.settings.trimNames); + document.body.classList.toggle("labeled-nav", this.settings.labeledNav); + document.body.classList.toggle("minimal-folding", this.settings.folding); + document.body.addClass(this.settings.chartWidth, this.settings.tableWidth, this.settings.imgWidth, this.settings.iframeWidth, this.settings.mapWidth); + const el = document.getElementById("minimal-theme"); + if (!el) + throw "minimal-theme element not found!"; + else { + el.innerText = "body.minimal-theme{--font-ui-small:" + this.settings.textSmall + "px;--line-height:" + this.settings.lineHeight + ";--line-width:" + this.settings.lineWidth + "rem;--line-width-wide:" + this.settings.lineWidthWide + "rem;--max-width:" + this.settings.maxWidth + "%;--font-editor-override:" + this.settings.editorFont + ";"; + } + } + updateDarkStyle() { + document.body.removeClass("theme-light", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); + document.body.addClass("theme-dark", this.settings.darkStyle); + if (this.app.vault.getConfig("theme") !== "system") { + this.app.setTheme("obsidian"); + this.app.vault.setConfig("theme", "obsidian"); + } + this.app.workspace.trigger("css-change"); + } + updateLightStyle() { + document.body.removeClass("theme-dark", "minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"); + document.body.addClass("theme-light", this.settings.lightStyle); + if (this.app.vault.getConfig("theme") !== "system") { + this.app.setTheme("moonstone"); + this.app.vault.setConfig("theme", "moonstone"); + } + this.app.workspace.trigger("css-change"); + } + updateDarkScheme() { + this.removeDarkScheme(); + document.body.addClass(this.settings.darkScheme); + } + updateLightScheme() { + this.removeLightScheme(); + document.body.addClass(this.settings.lightScheme); + } + updateTheme() { + if (this.app.vault.getConfig("theme") === "system") { + if (document.body.classList.contains("theme-light")) { + document.body.removeClass("theme-light"); + document.body.addClass("theme-dark"); + } else { + document.body.removeClass("theme-dark"); + document.body.addClass("theme-light"); + } + } else { + if (document.body.classList.contains("theme-light")) { + document.body.removeClass("theme-light"); + document.body.addClass("theme-dark"); + } else { + document.body.removeClass("theme-dark"); + document.body.addClass("theme-light"); + } + const currentTheme = this.app.vault.getConfig("theme"); + const newTheme = currentTheme === "moonstone" ? "obsidian" : "moonstone"; + this.app.setTheme(newTheme); + this.app.vault.setConfig("theme", newTheme); + } + this.app.workspace.trigger("css-change"); + } + removeSettings() { + document.body.removeClass("borders-none", "colorful-headings", "colorful-frame", "colorful-active", "minimal-focus-mode", "links-int-on", "links-ext-on", "full-width-media", "img-grid", "minimal-dev-block-width", "minimal-status-off", "full-file-names", "labeled-nav", "minimal-folding"); + document.body.removeClass("table-wide", "table-max", "table-100", "table-default-width", "iframe-wide", "iframe-max", "iframe-100", "iframe-default-width", "img-wide", "img-max", "img-100", "img-default-width", "chart-wide", "chart-max", "chart-100", "chart-default-width", "map-wide", "map-max", "map-100", "map-default-width"); + } + removeStyle() { + document.body.removeClass("minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); + } + removeDarkScheme() { + document.body.removeClass("minimal-atom-dark", "minimal-ayu-dark", "minimal-catppuccin-dark", "minimal-default-dark", "minimal-dracula-dark", "minimal-eink-dark", "minimal-everforest-dark", "minimal-flexoki-dark", "minimal-gruvbox-dark", "minimal-macos-dark", "minimal-nord-dark", "minimal-notion-dark", "minimal-rose-pine-dark", "minimal-solarized-dark", "minimal-things-dark"); + } + removeLightScheme() { + document.body.removeClass("minimal-atom-light", "minimal-ayu-light", "minimal-catppuccin-light", "minimal-default-light", "minimal-eink-light", "minimal-everforest-light", "minimal-flexoki-light", "minimal-gruvbox-light", "minimal-macos-light", "minimal-nord-light", "minimal-notion-light", "minimal-rose-pine-light", "minimal-solarized-light", "minimal-things-light"); + } +}; +var DEFAULT_SETTINGS = { + lightStyle: "minimal-light", + darkStyle: "minimal-dark", + lightScheme: "minimal-default-light", + darkScheme: "minimal-default-dark", + editorFont: "", + lineHeight: 1.5, + lineWidth: 40, + lineWidthWide: 50, + maxWidth: 88, + textNormal: 16, + textSmall: 13, + imgGrid: false, + imgWidth: "img-default-width", + tableWidth: "table-default-width", + iframeWidth: "iframe-default-width", + mapWidth: "map-default-width", + chartWidth: "chart-default-width", + colorfulHeadings: false, + colorfulFrame: false, + colorfulActiveStates: false, + trimNames: true, + labeledNav: false, + fullWidthMedia: true, + bordersToggle: true, + minimalStatus: true, + focusMode: false, + underlineInternal: true, + underlineExternal: true, + folding: true, + lineNumbers: false, + readableLineLength: false, + devBlockWidth: false +}; +var MinimalSettingTab = class extends import_obsidian.PluginSettingTab { + constructor(app2, plugin) { + super(app2, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + const colorSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); + const colorSectionInfo = colorSection.createEl("div", { cls: "setting-item-info" }); + colorSectionInfo.createEl("div", { text: "Color scheme", cls: "setting-item-name" }); + const colorDesc = colorSectionInfo.createEl("div", { cls: "setting-item-description" }); + colorDesc.appendChild(createEl("span", { + text: "To create a custom color scheme use the " + })); + colorDesc.appendChild(createEl("a", { + text: "Style Settings", + href: "obsidian://show-plugin?id=obsidian-style-settings" + })); + colorDesc.appendText(" plugin. See "); + colorDesc.appendChild(createEl("a", { + text: "documentation", + href: "https://minimal.guide/features/color-schemes" + })); + colorDesc.appendText(" for details."); + new import_obsidian.Setting(containerEl).setName("Light mode color scheme").setDesc("Preset color options for light mode.").addDropdown((dropdown) => dropdown.addOption("minimal-default-light", "Default").addOption("minimal-atom-light", "Atom").addOption("minimal-ayu-light", "Ayu").addOption("minimal-catppuccin-light", "Catppuccin").addOption("minimal-eink-light", "E-ink (beta)").addOption("minimal-everforest-light", "Everforest").addOption("minimal-flexoki-light", "Flexoki").addOption("minimal-gruvbox-light", "Gruvbox").addOption("minimal-macos-light", "macOS").addOption("minimal-nord-light", "Nord").addOption("minimal-rose-pine-light", "Ros\xE9 Pine").addOption("minimal-notion-light", "Sky").addOption("minimal-solarized-light", "Solarized").addOption("minimal-things-light", "Things").setValue(this.plugin.settings.lightScheme).onChange((value) => { + this.plugin.settings.lightScheme = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.updateLightScheme(); + })); + new import_obsidian.Setting(containerEl).setName("Light mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown((dropdown) => dropdown.addOption("minimal-light", "Default").addOption("minimal-light-white", "All white").addOption("minimal-light-tonal", "Low contrast").addOption("minimal-light-contrast", "High contrast").setValue(this.plugin.settings.lightStyle).onChange((value) => { + this.plugin.settings.lightStyle = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.updateLightStyle(); + })); + new import_obsidian.Setting(containerEl).setName("Dark mode color scheme").setDesc("Preset colors options for dark mode.").addDropdown((dropdown) => dropdown.addOption("minimal-default-dark", "Default").addOption("minimal-atom-dark", "Atom").addOption("minimal-ayu-dark", "Ayu").addOption("minimal-catppuccin-dark", "Catppuccin").addOption("minimal-dracula-dark", "Dracula").addOption("minimal-eink-dark", "E-ink (beta)").addOption("minimal-everforest-dark", "Everforest").addOption("minimal-flexoki-dark", "Flexoki").addOption("minimal-gruvbox-dark", "Gruvbox").addOption("minimal-macos-dark", "macOS").addOption("minimal-nord-dark", "Nord").addOption("minimal-rose-pine-dark", "Ros\xE9 Pine").addOption("minimal-notion-dark", "Sky").addOption("minimal-solarized-dark", "Solarized").addOption("minimal-things-dark", "Things").setValue(this.plugin.settings.darkScheme).onChange((value) => { + this.plugin.settings.darkScheme = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.updateDarkScheme(); + })); + new import_obsidian.Setting(containerEl).setName("Dark mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown((dropdown) => dropdown.addOption("minimal-dark", "Default").addOption("minimal-dark-tonal", "Low contrast").addOption("minimal-dark-black", "True black").setValue(this.plugin.settings.darkStyle).onChange((value) => { + this.plugin.settings.darkStyle = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.updateDarkStyle(); + })); + containerEl.createEl("br"); + const featuresSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); + const featuresSectionInfo = featuresSection.createEl("div", { cls: "setting-item-info" }); + featuresSectionInfo.createEl("div", { text: "Features", cls: "setting-item-name" }); + const featuresSectionDesc = featuresSectionInfo.createEl("div", { cls: "setting-item-description" }); + featuresSectionDesc.appendChild(createEl("span", { + text: "See " + })); + featuresSectionDesc.appendChild(createEl("a", { + text: "documentation", + href: "https://minimal.guide" + })); + featuresSectionDesc.appendText(" for details."); + new import_obsidian.Setting(containerEl).setName("Text labels for primary navigation").setDesc("Navigation items in the left sidebar uses text labels.").addToggle((toggle) => toggle.setValue(this.plugin.settings.labeledNav).onChange((value) => { + this.plugin.settings.labeledNav = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Colorful window frame").setDesc("The top area of the app uses your accent color.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulFrame).onChange((value) => { + this.plugin.settings.colorfulFrame = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Colorful active states").setDesc("Active file and menu items use your accent color.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulActiveStates).onChange((value) => { + this.plugin.settings.colorfulActiveStates = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Colorful headings").setDesc("Headings use a different color for each size.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulHeadings).onChange((value) => { + this.plugin.settings.colorfulHeadings = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Minimal status bar").setDesc("Turn off to use full-width status bar.").addToggle((toggle) => toggle.setValue(this.plugin.settings.minimalStatus).onChange((value) => { + this.plugin.settings.minimalStatus = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Trim file names in sidebars").setDesc("Use ellipses to fit file names on a single line.").addToggle((toggle) => toggle.setValue(this.plugin.settings.trimNames).onChange((value) => { + this.plugin.settings.trimNames = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Workspace borders").setDesc("Display divider lines between workspace elements.").addToggle((toggle) => toggle.setValue(this.plugin.settings.bordersToggle).onChange((value) => { + this.plugin.settings.bordersToggle = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Focus mode").setDesc("Hide tab bar and status bar, hover to display. Can be toggled via hotkey.").addToggle((toggle) => toggle.setValue(this.plugin.settings.focusMode).onChange((value) => { + this.plugin.settings.focusMode = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Underline internal links").setDesc("Show underlines on internal links.").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineInternal).onChange((value) => { + this.plugin.settings.underlineInternal = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Underline external links").setDesc("Show underlines on external links.").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineExternal).onChange((value) => { + this.plugin.settings.underlineExternal = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Maximize media").setDesc("Images and videos fill the width of the line.").addToggle((toggle) => toggle.setValue(this.plugin.settings.fullWidthMedia).onChange((value) => { + this.plugin.settings.fullWidthMedia = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + containerEl.createEl("br"); + const layoutSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); + const layoutSectionInfo = layoutSection.createEl("div", { cls: "setting-item-info" }); + layoutSectionInfo.createEl("div", { text: "Layout", cls: "setting-item-name" }); + const layoutSectionDesc = layoutSectionInfo.createEl("div", { cls: "setting-item-description" }); + layoutSectionDesc.appendChild(createEl("span", { + text: "These options can also be defined on a per-file basis, see " + })); + layoutSectionDesc.appendChild(createEl("a", { + text: "documentation", + href: "https://minimal.guide/features/block-width" + })); + layoutSectionDesc.appendText(" for details."); + new import_obsidian.Setting(containerEl).setName("Image grids").setDesc("Turn consecutive images into columns \u2014 to make a new row, add an extra line break between images.").addToggle((toggle) => toggle.setValue(this.plugin.settings.imgGrid).onChange((value) => { + this.plugin.settings.imgGrid = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Chart width").setDesc("Default width for chart blocks.").addDropdown((dropdown) => dropdown.addOption("chart-default-width", "Default").addOption("chart-wide", "Wide line width").addOption("chart-max", "Maximum line width").addOption("chart-100", "100% pane width").setValue(this.plugin.settings.chartWidth).onChange((value) => { + this.plugin.settings.chartWidth = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Iframe width").setDesc("Default width for iframe blocks.").addDropdown((dropdown) => dropdown.addOption("iframe-default-width", "Default").addOption("iframe-wide", "Wide line width").addOption("iframe-max", "Maximum line width").addOption("iframe-100", "100% pane width").setValue(this.plugin.settings.iframeWidth).onChange((value) => { + this.plugin.settings.iframeWidth = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Image width").setDesc("Default width for image blocks.").addDropdown((dropdown) => dropdown.addOption("img-default-width", "Default").addOption("img-wide", "Wide line width").addOption("img-max", "Maximum line width").addOption("img-100", "100% pane width").setValue(this.plugin.settings.imgWidth).onChange((value) => { + this.plugin.settings.imgWidth = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Map width").setDesc("Default width for map blocks.").addDropdown((dropdown) => dropdown.addOption("map-default-width", "Default").addOption("map-wide", "Wide line width").addOption("map-max", "Maximum line width").addOption("map-100", "100% pane width").setValue(this.plugin.settings.mapWidth).onChange((value) => { + this.plugin.settings.mapWidth = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Table width").setDesc("Default width for table and Dataview blocks.").addDropdown((dropdown) => dropdown.addOption("table-default-width", "Default").addOption("table-wide", "Wide line width").addOption("table-max", "Maximum line width").addOption("table-100", "100% pane width").setValue(this.plugin.settings.tableWidth).onChange((value) => { + this.plugin.settings.tableWidth = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + containerEl.createEl("br"); + containerEl.createEl("div", { text: "Typography", cls: "setting-item setting-item-heading" }); + new import_obsidian.Setting(containerEl).setName("Text font size").setDesc("Used for the main text (default 16).").addText((text) => text.setPlaceholder("16").setValue((this.plugin.settings.textNormal || "") + "").onChange((value) => { + this.plugin.settings.textNormal = parseFloat(value); + this.plugin.saveData(this.plugin.settings); + this.plugin.setFontSize(); + })); + new import_obsidian.Setting(containerEl).setName("Small font size").setDesc("Used for text in the sidebars and tabs (default 13).").addText((text) => text.setPlaceholder("13").setValue((this.plugin.settings.textSmall || "") + "").onChange((value) => { + this.plugin.settings.textSmall = parseFloat(value); + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Line height").setDesc("Line height of text (default 1.5).").addText((text) => text.setPlaceholder("1.5").setValue((this.plugin.settings.lineHeight || "") + "").onChange((value) => { + this.plugin.settings.lineHeight = parseFloat(value); + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Normal line width").setDesc("Number of characters per line (default 40).").addText((text) => text.setPlaceholder("40").setValue((this.plugin.settings.lineWidth || "") + "").onChange((value) => { + this.plugin.settings.lineWidth = parseInt(value.trim()); + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Wide line width").setDesc("Number of characters per line for wide elements (default 50).").addText((text) => text.setPlaceholder("50").setValue((this.plugin.settings.lineWidthWide || "") + "").onChange((value) => { + this.plugin.settings.lineWidthWide = parseInt(value.trim()); + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Maximum line width %").setDesc("Percentage of space inside a pane that a line can fill (default 88).").addText((text) => text.setPlaceholder("88").setValue((this.plugin.settings.maxWidth || "") + "").onChange((value) => { + this.plugin.settings.maxWidth = parseInt(value.trim()); + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + new import_obsidian.Setting(containerEl).setName("Editor font").setDesc("Overrides the text font defined in Obsidian Appearance settings when in edit mode.").addText((text) => text.setPlaceholder("").setValue((this.plugin.settings.editorFont || "") + "").onChange((value) => { + this.plugin.settings.editorFont = value; + this.plugin.saveData(this.plugin.settings); + this.plugin.refresh(); + })); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBXb3Jrc3BhY2UsIE1vZGFsLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pbmltYWxUaGVtZSBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG4gIHNldHRpbmdzOiBNaW5pbWFsU2V0dGluZ3M7XHJcblxyXG4gIGFzeW5jIG9ubG9hZCgpIHtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgTWluaW1hbFNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcbiAgICB0aGlzLmxvYWRSdWxlcygpO1xyXG5cclxuICAgIC8vIENoZWNrIHN0YXRlIG9mIE9ic2lkaWFuIFNldHRpbmdzXHJcbiAgICBsZXQgc2V0dGluZ3NVcGRhdGUgPSAoKSA9PiB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ2Jhc2VGb250U2l6ZScpO1xyXG4gICAgICB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgPSBmb250U2l6ZTtcclxuXHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygnZm9sZEhlYWRpbmcnKSkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnRm9sZGluZyBpcyBvbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0ZvbGRpbmcgaXMgb2ZmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWZvbGRpbmcnLCB0aGlzLnNldHRpbmdzLmZvbGRpbmcpO1xyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3Nob3dMaW5lTnVtYmVyJykpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpbmVOdW1iZXJzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdMaW5lIG51bWJlcnMgYXJlIG9uJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saW5lTnVtYmVycyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0xpbmUgbnVtYmVycyBhcmUgb2ZmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWxpbmUtbnVtcycsIHRoaXMuc2V0dGluZ3MubGluZU51bWJlcnMpO1xyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3JlYWRhYmxlTGluZUxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlYWRhYmxlIGxpbmUgbGVuZ3RoIGlzIG9uJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWFkYWJsZSBsaW5lIGxlbmd0aCBpcyBvZmYnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLXJlYWRhYmxlJywgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtcmVhZGFibGUtb2ZmJywgIXRoaXMuc2V0dGluZ3MucmVhZGFibGVMaW5lTGVuZ3RoKTtcclxuICBcclxuICAgIH1cclxuICBcclxuICAgIGxldCBzaWRlYmFyVXBkYXRlID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBzaWRlYmFyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2QtbGVmdC1zcGxpdCcpWzBdO1xyXG4gICAgICBjb25zdCByaWJib25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NpZGUtZG9jay1yaWJib24nKVswXTtcclxuICAgICAgaWYgKHNpZGViYXJFbCAmJiByaWJib25FbCAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGhlbWUtbGlnaHQnKSAmJiB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUgPT0gJ21pbmltYWwtbGlnaHQtY29udHJhc3QnKSB7XHJcbiAgICAgICAgc2lkZWJhckVsLmFkZENsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgcmliYm9uRWwuYWRkQ2xhc3MoJ3RoZW1lLWRhcmsnKTtcclxuICAgICAgfSBlbHNlIGlmIChzaWRlYmFyRWwgJiYgcmliYm9uRWwpIHtcclxuICAgICAgICBzaWRlYmFyRWwucmVtb3ZlQ2xhc3MoJ3RoZW1lLWRhcmsnKTsgXHJcbiAgICAgICAgcmliYm9uRWwucmVtb3ZlQ2xhc3MoJ3RoZW1lLWRhcmsnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ2NvbmZpZy1jaGFuZ2VkJywgc2V0dGluZ3NVcGRhdGUpKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAud29ya3NwYWNlLm9uKCdjc3MtY2hhbmdlJywgc2lkZWJhclVwZGF0ZSkpO1xyXG5cclxuICAgIHNldHRpbmdzVXBkYXRlKCk7XHJcbiAgICBcclxuICAgIGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSgoKSA9PiB7XHJcbiAgICAgIHNpZGViYXJVcGRhdGUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGxpZ2h0U3R5bGVzID0gWydtaW5pbWFsLWxpZ2h0JywgJ21pbmltYWwtbGlnaHQtdG9uYWwnLCAnbWluaW1hbC1saWdodC1jb250cmFzdCcsICdtaW5pbWFsLWxpZ2h0LXdoaXRlJ107XHJcbiAgICBjb25zdCBkYXJrU3R5bGVzID0gWydtaW5pbWFsLWRhcmsnLCAnbWluaW1hbC1kYXJrLXRvbmFsJywgJ21pbmltYWwtZGFyay1ibGFjayddO1xyXG4gICAgY29uc3QgaW1nR3JpZFN0eWxlcyA9IFsnaW1nLWdyaWQnLCdpbWctZ3JpZC1yYXRpbycsJ2ltZy1ub2dyaWQnXTtcclxuICAgIGNvbnN0IHRhYmxlV2lkdGhTdHlsZXMgPSBbJ3RhYmxlLTEwMCcsJ3RhYmxlLWRlZmF1bHQtd2lkdGgnLCd0YWJsZS13aWRlJywndGFibGUtbWF4J107XHJcbiAgICBjb25zdCBpZnJhbWVXaWR0aFN0eWxlcyA9IFsnaWZyYW1lLTEwMCcsJ2lmcmFtZS1kZWZhdWx0LXdpZHRoJywnaWZyYW1lLXdpZGUnLCdpZnJhbWUtbWF4J107XHJcbiAgICBjb25zdCBpbWdXaWR0aFN0eWxlcyA9IFsnaW1nLTEwMCcsJ2ltZy1kZWZhdWx0LXdpZHRoJywnaW1nLXdpZGUnLCdpbWctbWF4J107XHJcbiAgICBjb25zdCBtYXBXaWR0aFN0eWxlcyA9IFsnbWFwLTEwMCcsJ21hcC1kZWZhdWx0LXdpZHRoJywnbWFwLXdpZGUnLCdtYXAtbWF4J107XHJcbiAgICBjb25zdCBjaGFydFdpZHRoU3R5bGVzID0gWydjaGFydC0xMDAnLCdjaGFydC1kZWZhdWx0LXdpZHRoJywnY2hhcnQtd2lkZScsJ2NoYXJ0LW1heCddO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnaW5jcmVhc2UtYm9keS1mb250LXNpemUnLFxyXG4gICAgICBuYW1lOiAnSW5jcmVhc2UgYm9keSBmb250IHNpemUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCA9IHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCArIDAuNTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9udFNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICdkZWNyZWFzZS1ib2R5LWZvbnQtc2l6ZScsXHJcbiAgICAgIG5hbWU6ICdEZWNyZWFzZSBib2R5IGZvbnQgc2l6ZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy50ZXh0Tm9ybWFsID0gdGhpcy5zZXR0aW5ncy50ZXh0Tm9ybWFsIC0gMC41O1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5zZXRGb250U2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTsgXHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWN5Y2xlJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gZGFyayBtb2RlIHN0eWxlcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUgPSBkYXJrU3R5bGVzWyhkYXJrU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUpICsgMSkgJSBkYXJrU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTsgIFxyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbGlnaHQtY3ljbGUnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBsaWdodCBtb2RlIHN0eWxlcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlID0gbGlnaHRTdHlsZXNbKGxpZ2h0U3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5saWdodFN0eWxlKSArIDEpICUgbGlnaHRTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1oaWRkZW4tYm9yZGVycycsXHJcbiAgICAgIG5hbWU6ICdUb2dnbGUgc2lkZWJhciBib3JkZXJzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUgPSAhdGhpcy5zZXR0aW5ncy5ib3JkZXJzVG9nZ2xlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLWNvbG9yZnVsLWhlYWRpbmdzJyxcclxuICAgICAgbmFtZTogJ1RvZ2dsZSBjb2xvcmZ1bCBoZWFkaW5ncycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jb2xvcmZ1bEhlYWRpbmdzID0gIXRoaXMuc2V0dGluZ3MuY29sb3JmdWxIZWFkaW5ncztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWZvY3VzLW1vZGUnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGZvY3VzIG1vZGUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9jdXNNb2RlID0gIXRoaXMuc2V0dGluZ3MuZm9jdXNNb2RlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtY29sb3JmdWwtZnJhbWUnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGNvbG9yZnVsIHdpbmRvdyBmcmFtZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lID0gIXRoaXMuc2V0dGluZ3MuY29sb3JmdWxGcmFtZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtdGFibGUtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiB0YWJsZSB3aWR0aCBvcHRpb25zJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGggPSB0YWJsZVdpZHRoU3R5bGVzWyh0YWJsZVdpZHRoU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy50YWJsZVdpZHRoKSArIDEpICUgdGFibGVXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1pbWFnZS13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIGltYWdlIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaW1nV2lkdGggPSBpbWdXaWR0aFN0eWxlc1soaW1nV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmltZ1dpZHRoKSArIDEpICUgaW1nV2lkdGhTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtaWZyYW1lLXdpZHRoJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gaWZyYW1lIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaWZyYW1lV2lkdGggPSBpZnJhbWVXaWR0aFN0eWxlc1soaWZyYW1lV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmlmcmFtZVdpZHRoKSArIDEpICUgaWZyYW1lV2lkdGhTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtY2hhcnQtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBjaGFydCB3aWR0aCBvcHRpb25zJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmNoYXJ0V2lkdGggPSBjaGFydFdpZHRoU3R5bGVzWyhjaGFydFdpZHRoU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5jaGFydFdpZHRoKSArIDEpICUgY2hhcnRXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1tYXAtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBtYXAgd2lkdGggb3B0aW9ucycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tYXBXaWR0aCA9IG1hcFdpZHRoU3R5bGVzWyhtYXBXaWR0aFN0eWxlcy5pbmRleE9mKHRoaXMuc2V0dGluZ3MubWFwV2lkdGgpICsgMSkgJSBtYXBXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtaW1nLWdyaWQnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGltYWdlIGdyaWRzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmltZ0dyaWQgPSAhdGhpcy5zZXR0aW5ncy5pbWdHcmlkO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtc3dpdGNoJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIG1vZGUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGhlbWUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1kZWZhdWx0JyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChkZWZhdWx0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlID0gJ21pbmltYWwtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbGlnaHQtd2hpdGUnLFxyXG4gICAgICBuYW1lOiAnVXNlIGxpZ2h0IG1vZGUgKGFsbCB3aGl0ZSknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LXdoaXRlJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWxpZ2h0LXRvbmFsJyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChsb3cgY29udHJhc3QpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSAnbWluaW1hbC1saWdodC10b25hbCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1jb250cmFzdCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgbGlnaHQgbW9kZSAoaGlnaCBjb250cmFzdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LWNvbnRyYXN0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRhcmstZGVmYXVsdCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgZGFyayBtb2RlIChkZWZhdWx0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUgPSAnbWluaW1hbC1kYXJrJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZGFyay10b25hbCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgZGFyayBtb2RlIChsb3cgY29udHJhc3QpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSA9ICdtaW5pbWFsLWRhcmstdG9uYWwnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWJsYWNrJyxcclxuICAgICAgbmFtZTogJ1VzZSBkYXJrIG1vZGUgKHRydWUgYmxhY2spJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSA9ICdtaW5pbWFsLWRhcmstYmxhY2snO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1hdG9tLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gQXRvbSAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtYXRvbS1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtYXl1LWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gQXl1IChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1heXUtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWNhdHBwdWNjaW4tbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBDYXRwcHVjY2luIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1jYXRwcHVjY2luLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kZWZhdWx0LWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gZGVmYXVsdCAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtZGVmYXVsdC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZ3J1dmJveC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEdydXZib3ggKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWdydXZib3gtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWVpbmstbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBFLWluayAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtZWluay1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEV2ZXJmb3Jlc3QgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWV2ZXJmb3Jlc3QtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWZsZXhva2ktbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBGbGV4b2tpIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1mbGV4b2tpLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIG1hY09TIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1tYWNvcy1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbm90aW9uLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gU2t5IChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1ub3Rpb24tbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLW5vcmQtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBOb3JkIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1ub3JkLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1yb3NlLXBpbmUtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBSb3NcdTAwRTkgUGluZSAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1zb2xhcml6ZWQtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBTb2xhcml6ZWQgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLXNvbGFyaXplZC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtdGhpbmdzLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gVGhpbmdzIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC10aGluZ3MtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWF0b20tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gQXRvbSAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWF0b20tZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWF5dS1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBBeXUgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1heXUtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWNhdHBwdWNjaW4tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gQ2F0cHB1Y2NpbiAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWNhdHBwdWNjaW4tZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRyYWN1bGEtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gRHJhY3VsYSAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWRyYWN1bGEtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRlZmF1bHQtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gZGVmYXVsdCAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWRlZmF1bHQtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWVpbmstZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gRS1pbmsgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1laW5rLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ldmVyZm9yZXN0LWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEV2ZXJmb3Jlc3QgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ldmVyZm9yZXN0LWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1mbGV4b2tpLWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEZsZXhva2kgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1mbGV4b2tpLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ncnV2Ym94LWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEdydXZib3ggKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ncnV2Ym94LWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBtYWNPUyAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLW1hY29zLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ub3JkLWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIE5vcmQgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ub3JkLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ub3Rpb24tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gU2t5IChkYXJrKScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU2NoZW1lID0gJ21pbmltYWwtbm90aW9uLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1yb3NlLXBpbmUtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gUm9zXHUwMEU5IFBpbmUgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1yb3NlLXBpbmUtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLXNvbGFyaXplZC1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBTb2xhcml6ZWQgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1zb2xhcml6ZWQtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLXRoaW5ncy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBUaGluZ3MgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC10aGluZ3MtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRldi1ibG9jay13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdEZXYgXHUyMDE0IFNob3cgYmxvY2sgd2lkdGhzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRldkJsb2NrV2lkdGggPSAhdGhpcy5zZXR0aW5ncy5kZXZCbG9ja1dpZHRoO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICBvbnVubG9hZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdVbmxvYWRpbmcgTWluaW1hbCBUaGVtZSBTZXR0aW5ncyBwbHVnaW4nKTtcclxuICAgIGNvbnN0IHNpZGViYXJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZC1sZWZ0LXNwbGl0JylbMF07XHJcbiAgICBjb25zdCByaWJib25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NpZGUtZG9jay1yaWJib24nKVswXTtcclxuICAgIHNpZGViYXJFbC5yZW1vdmVDbGFzcygndGhlbWUtZGFyaycpOyBcclxuICAgIHJpYmJvbkVsLnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcblxyXG4gICAgdGhpcy51bmxvYWRSdWxlcygpO1xyXG4gICAgdGhpcy5yZW1vdmVTdHlsZSgpO1xyXG4gICAgdGhpcy5yZW1vdmVTZXR0aW5ncygpO1xyXG4gICAgdGhpcy5yZW1vdmVMaWdodFNjaGVtZSgpO1xyXG4gICAgdGhpcy5yZW1vdmVEYXJrU2NoZW1lKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICB9XHJcblxyXG4gIC8vIHJlZnJlc2ggZnVuY3Rpb24gZm9yIHdoZW4gd2UgY2hhbmdlIHNldHRpbmdzXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIC8vIHJlLWxvYWQgdGhlIHN0eWxlXHJcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKClcclxuICB9XHJcblxyXG4gIC8vIGFkZCB0aGUgc3R5bGluZyBlbGVtZW50cyB3ZSBuZWVkXHJcbiAgbG9hZFJ1bGVzKCkge1xyXG4gICAgLy8gYWRkIGEgY3NzIGJsb2NrIGZvciBvdXIgc2V0dGluZ3MtZGVwZW5kZW50IHN0eWxlc1xyXG4gICAgY29uc3QgY3NzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgIGNzcy5pZCA9ICdtaW5pbWFsLXRoZW1lJztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChjc3MpO1xyXG5cclxuICAgIC8vIGFkZCB0aGUgbWFpbiBjbGFzc1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdtaW5pbWFsLXRoZW1lJyk7XHJcblxyXG4gICAgLy8gdXBkYXRlIHRoZSBzdHlsZSB3aXRoIHRoZSBzZXR0aW5ncy1kZXBlbmRlbnQgc3R5bGVzXHJcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XHJcbiAgfVxyXG4gIHVubG9hZFJ1bGVzKCkge1xyXG4gICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbmltYWwtdGhlbWUnKTtcclxuICAgIGlmIChzdHlsZUVsZW1lbnQpIHtcclxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbWluaW1hbC10aGVtZScpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9udFNpemUoKSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ2Jhc2VGb250U2l6ZScsIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC51cGRhdGVGb250U2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlIHRoZSBzdHlsZXMgKGF0IHRoZSBzdGFydCwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIHNldHRpbmdzIGNoYW5nZSlcclxuICB1cGRhdGVTdHlsZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlU3R5bGUoKTtcclxuICAgIHRoaXMucmVtb3ZlU2V0dGluZ3MoKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlLFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWVcclxuICAgICk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdib3JkZXJzLW5vbmUnLCAhdGhpcy5zZXR0aW5ncy5ib3JkZXJzVG9nZ2xlKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnY29sb3JmdWwtaGVhZGluZ3MnLCB0aGlzLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdjb2xvcmZ1bC1mcmFtZScsIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxGcmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2NvbG9yZnVsLWFjdGl2ZScsIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWZvY3VzLW1vZGUnLCB0aGlzLnNldHRpbmdzLmZvY3VzTW9kZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2xpbmtzLWludC1vbicsIHRoaXMuc2V0dGluZ3MudW5kZXJsaW5lSW50ZXJuYWwpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdsaW5rcy1leHQtb24nLCB0aGlzLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnZnVsbC13aWR0aC1tZWRpYScsIHRoaXMuc2V0dGluZ3MuZnVsbFdpZHRoTWVkaWEpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdpbWctZ3JpZCcsIHRoaXMuc2V0dGluZ3MuaW1nR3JpZCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtZGV2LWJsb2NrLXdpZHRoJywgdGhpcy5zZXR0aW5ncy5kZXZCbG9ja1dpZHRoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1zdGF0dXMtb2ZmJywgIXRoaXMuc2V0dGluZ3MubWluaW1hbFN0YXR1cyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Z1bGwtZmlsZS1uYW1lcycsICF0aGlzLnNldHRpbmdzLnRyaW1OYW1lcyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2xhYmVsZWQtbmF2JywgdGhpcy5zZXR0aW5ncy5sYWJlbGVkTmF2KTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1mb2xkaW5nJywgdGhpcy5zZXR0aW5ncy5mb2xkaW5nKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmNoYXJ0V2lkdGgsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGFibGVXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pbWdXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pZnJhbWVXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5tYXBXaWR0aFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBnZXQgdGhlIGN1c3RvbSBjc3MgZWxlbWVudFxyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluaW1hbC10aGVtZScpO1xyXG4gICAgaWYgKCFlbCkgdGhyb3cgXCJtaW5pbWFsLXRoZW1lIGVsZW1lbnQgbm90IGZvdW5kIVwiO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHNldCB0aGUgc2V0dGluZ3MtZGVwZW5kZW50IGNzc1xyXG4gICAgICBlbC5pbm5lclRleHQgPSBcclxuICAgICAgICAnYm9keS5taW5pbWFsLXRoZW1leydcclxuICAgICAgICArICctLWZvbnQtdWktc21hbGw6JyArIHRoaXMuc2V0dGluZ3MudGV4dFNtYWxsICsgJ3B4OydcclxuICAgICAgICArICctLWxpbmUtaGVpZ2h0OicgKyB0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQgKyAnOydcclxuICAgICAgICArICctLWxpbmUtd2lkdGg6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoICsgJ3JlbTsnXHJcbiAgICAgICAgKyAnLS1saW5lLXdpZHRoLXdpZGU6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoV2lkZSArICdyZW07J1xyXG4gICAgICAgICsgJy0tbWF4LXdpZHRoOicgKyB0aGlzLnNldHRpbmdzLm1heFdpZHRoICsgJyU7J1xyXG4gICAgICAgICsgJy0tZm9udC1lZGl0b3Itb3ZlcnJpZGU6JyArIHRoaXMuc2V0dGluZ3MuZWRpdG9yRm9udCArICc7JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURhcmtTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICd0aGVtZS1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1kYXJrLXRvbmFsJyxcclxuICAgICAgJ21pbmltYWwtZGFyay1ibGFjaydcclxuICAgICk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICAndGhlbWUtZGFyaycsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKSAhPT0gJ3N5c3RlbScpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZSgnb2JzaWRpYW4nKTtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ3RoZW1lJywgJ29ic2lkaWFuJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignY3NzLWNoYW5nZScpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTGlnaHRTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICd0aGVtZS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1saWdodC10b25hbCcsXHJcbiAgICAgICdtaW5pbWFsLWxpZ2h0LWNvbnRyYXN0JyxcclxuICAgICAgJ21pbmltYWwtbGlnaHQtd2hpdGUnXHJcbiAgICApO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcyhcclxuICAgICAgJ3RoZW1lLWxpZ2h0JyxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKSAhPT0gJ3N5c3RlbScpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZSgnbW9vbnN0b25lJyk7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgdGhpcy5hcHAudmF1bHQuc2V0Q29uZmlnKCd0aGVtZScsICdtb29uc3RvbmUnKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXJrU2NoZW1lKCkge1xyXG4gICAgdGhpcy5yZW1vdmVEYXJrU2NoZW1lKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMaWdodFNjaGVtZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlTGlnaHRTY2hlbWUoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUaGVtZSgpIHtcclxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3RoZW1lJykgPT09ICdzeXN0ZW0nKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aGVtZS1saWdodCcpKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcygndGhlbWUtZGFyaycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aGVtZS1saWdodCcpKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcygndGhlbWUtZGFyaycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKTtcclxuICAgICAgY29uc3QgbmV3VGhlbWUgPSBjdXJyZW50VGhlbWUgPT09ICdtb29uc3RvbmUnID8gJ29ic2lkaWFuJyA6ICdtb29uc3RvbmUnO1xyXG5cclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZShuZXdUaGVtZSk7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgdGhpcy5hcHAudmF1bHQuc2V0Q29uZmlnKCd0aGVtZScsIG5ld1RoZW1lKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZXR0aW5ncygpIHtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAnYm9yZGVycy1ub25lJyxcclxuICAgICAgJ2NvbG9yZnVsLWhlYWRpbmdzJyxcclxuICAgICAgJ2NvbG9yZnVsLWZyYW1lJyxcclxuICAgICAgJ2NvbG9yZnVsLWFjdGl2ZScsXHJcbiAgICAgICdtaW5pbWFsLWZvY3VzLW1vZGUnLFxyXG4gICAgICAnbGlua3MtaW50LW9uJyxcclxuICAgICAgJ2xpbmtzLWV4dC1vbicsXHJcbiAgICAgICdmdWxsLXdpZHRoLW1lZGlhJyxcclxuICAgICAgJ2ltZy1ncmlkJyxcclxuICAgICAgJ21pbmltYWwtZGV2LWJsb2NrLXdpZHRoJyxcclxuICAgICAgJ21pbmltYWwtc3RhdHVzLW9mZicsXHJcbiAgICAgICdmdWxsLWZpbGUtbmFtZXMnLFxyXG4gICAgICAnbGFiZWxlZC1uYXYnLFxyXG4gICAgICAnbWluaW1hbC1mb2xkaW5nJ1xyXG4gICAgKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAndGFibGUtd2lkZScsXHJcbiAgICAgICd0YWJsZS1tYXgnLFxyXG4gICAgICAndGFibGUtMTAwJyxcclxuICAgICAgJ3RhYmxlLWRlZmF1bHQtd2lkdGgnLFxyXG4gICAgICAnaWZyYW1lLXdpZGUnLFxyXG4gICAgICAnaWZyYW1lLW1heCcsXHJcbiAgICAgICdpZnJhbWUtMTAwJyxcclxuICAgICAgJ2lmcmFtZS1kZWZhdWx0LXdpZHRoJyxcclxuICAgICAgJ2ltZy13aWRlJyxcclxuICAgICAgJ2ltZy1tYXgnLFxyXG4gICAgICAnaW1nLTEwMCcsXHJcbiAgICAgICdpbWctZGVmYXVsdC13aWR0aCcsXHJcbiAgICAgICdjaGFydC13aWRlJyxcclxuICAgICAgJ2NoYXJ0LW1heCcsXHJcbiAgICAgICdjaGFydC0xMDAnLFxyXG4gICAgICAnY2hhcnQtZGVmYXVsdC13aWR0aCcsXHJcbiAgICAgICdtYXAtd2lkZScsXHJcbiAgICAgICdtYXAtbWF4JyxcclxuICAgICAgJ21hcC0xMDAnLFxyXG4gICAgICAnbWFwLWRlZmF1bHQtd2lkdGgnXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ21pbmltYWwtbGlnaHQnLCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnbWluaW1hbC1saWdodC1jb250cmFzdCcsJ21pbmltYWwtbGlnaHQtd2hpdGUnLCdtaW5pbWFsLWRhcmsnLCdtaW5pbWFsLWRhcmstdG9uYWwnLCdtaW5pbWFsLWRhcmstYmxhY2snKTtcclxuICB9XHJcbiAgcmVtb3ZlRGFya1NjaGVtZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICdtaW5pbWFsLWF0b20tZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLWF5dS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtY2F0cHB1Y2Npbi1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZGVmYXVsdC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZHJhY3VsYS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZWluay1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZXZlcmZvcmVzdC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZmxleG9raS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZ3J1dmJveC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbWFjb3MtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLW5vcmQtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLW5vdGlvbi1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtcm9zZS1waW5lLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1zb2xhcml6ZWQtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLXRoaW5ncy1kYXJrJ1xyXG4gICAgKTtcclxuICB9XHJcbiAgcmVtb3ZlTGlnaHRTY2hlbWUoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAnbWluaW1hbC1hdG9tLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtYXl1LWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtY2F0cHB1Y2Npbi1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWRlZmF1bHQtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1laW5rLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWZsZXhva2ktbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1ncnV2Ym94LWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtbWFjb3MtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1ub3JkLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtbm90aW9uLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtc29sYXJpemVkLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtdGhpbmdzLWxpZ2h0J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5pbnRlcmZhY2UgTWluaW1hbFNldHRpbmdzIHtcclxuICBsaWdodFN0eWxlOiBzdHJpbmc7XHJcbiAgZGFya1N0eWxlOiBzdHJpbmc7XHJcbiAgbGlnaHRTY2hlbWU6IHN0cmluZztcclxuICBkYXJrU2NoZW1lOiBzdHJpbmc7XHJcbiAgZWRpdG9yRm9udDogc3RyaW5nO1xyXG4gIGNvbG9yZnVsSGVhZGluZ3M6IGJvb2xlYW47XHJcbiAgY29sb3JmdWxGcmFtZTogYm9vbGVhbjtcclxuICBjb2xvcmZ1bEFjdGl2ZVN0YXRlczogYm9vbGVhbixcclxuICB0cmltTmFtZXM6IGJvb2xlYW47XHJcbiAgbGFiZWxlZE5hdjogYm9vbGVhbjtcclxuICBib3JkZXJzVG9nZ2xlOiBib29sZWFuO1xyXG4gIGZvY3VzTW9kZTogYm9vbGVhbjtcclxuICBsaW5lSGVpZ2h0OiBudW1iZXI7XHJcbiAgbGluZVdpZHRoOiBudW1iZXI7XHJcbiAgbGluZVdpZHRoV2lkZTogbnVtYmVyO1xyXG4gIG1heFdpZHRoOiBudW1iZXI7XHJcbiAgaW1nR3JpZDogYm9vbGVhbjtcclxuICBkZXZCbG9ja1dpZHRoOiBib29sZWFuO1xyXG4gIHRhYmxlV2lkdGg6IHN0cmluZztcclxuICBpZnJhbWVXaWR0aDogc3RyaW5nO1xyXG4gIGltZ1dpZHRoOiBzdHJpbmc7XHJcbiAgY2hhcnRXaWR0aDogc3RyaW5nO1xyXG4gIG1hcFdpZHRoOiBzdHJpbmc7XHJcbiAgZnVsbFdpZHRoTWVkaWE6IGJvb2xlYW4sXHJcbiAgbWluaW1hbFN0YXR1czogYm9vbGVhbixcclxuICB0ZXh0Tm9ybWFsOiBudW1iZXI7XHJcbiAgdGV4dFNtYWxsOiBudW1iZXI7XHJcbiAgdW5kZXJsaW5lSW50ZXJuYWw6IGJvb2xlYW47XHJcbiAgdW5kZXJsaW5lRXh0ZXJuYWw6IGJvb2xlYW47XHJcbiAgZm9sZGluZzogYm9vbGVhbjtcclxuICBsaW5lTnVtYmVyczogYm9vbGVhbjtcclxuICByZWFkYWJsZUxpbmVMZW5ndGg6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE1pbmltYWxTZXR0aW5ncyA9IHtcclxuICBsaWdodFN0eWxlOiAnbWluaW1hbC1saWdodCcsXHJcbiAgZGFya1N0eWxlOiAnbWluaW1hbC1kYXJrJyxcclxuICBsaWdodFNjaGVtZTogJ21pbmltYWwtZGVmYXVsdC1saWdodCcsXHJcbiAgZGFya1NjaGVtZTogJ21pbmltYWwtZGVmYXVsdC1kYXJrJyxcclxuICBlZGl0b3JGb250OiAnJyxcclxuICBsaW5lSGVpZ2h0OiAxLjUsXHJcbiAgbGluZVdpZHRoOiA0MCxcclxuICBsaW5lV2lkdGhXaWRlOiA1MCxcclxuICBtYXhXaWR0aDogODgsXHJcbiAgdGV4dE5vcm1hbDogMTYsXHJcbiAgdGV4dFNtYWxsOiAxMyxcclxuICBpbWdHcmlkOiBmYWxzZSxcclxuICBpbWdXaWR0aDogJ2ltZy1kZWZhdWx0LXdpZHRoJyxcclxuICB0YWJsZVdpZHRoOiAndGFibGUtZGVmYXVsdC13aWR0aCcsXHJcbiAgaWZyYW1lV2lkdGg6ICdpZnJhbWUtZGVmYXVsdC13aWR0aCcsXHJcbiAgbWFwV2lkdGg6ICdtYXAtZGVmYXVsdC13aWR0aCcsXHJcbiAgY2hhcnRXaWR0aDogJ2NoYXJ0LWRlZmF1bHQtd2lkdGgnLFxyXG4gIGNvbG9yZnVsSGVhZGluZ3M6IGZhbHNlLFxyXG4gIGNvbG9yZnVsRnJhbWU6IGZhbHNlLFxyXG4gIGNvbG9yZnVsQWN0aXZlU3RhdGVzOiBmYWxzZSxcclxuICB0cmltTmFtZXM6IHRydWUsXHJcbiAgbGFiZWxlZE5hdjogZmFsc2UsXHJcbiAgZnVsbFdpZHRoTWVkaWE6IHRydWUsXHJcbiAgYm9yZGVyc1RvZ2dsZTogdHJ1ZSxcclxuICBtaW5pbWFsU3RhdHVzOiB0cnVlLFxyXG4gIGZvY3VzTW9kZTogZmFsc2UsXHJcbiAgdW5kZXJsaW5lSW50ZXJuYWw6IHRydWUsXHJcbiAgdW5kZXJsaW5lRXh0ZXJuYWw6IHRydWUsXHJcbiAgZm9sZGluZzogdHJ1ZSxcclxuICBsaW5lTnVtYmVyczogZmFsc2UsXHJcbiAgcmVhZGFibGVMaW5lTGVuZ3RoOiBmYWxzZSxcclxuICBkZXZCbG9ja1dpZHRoOiBmYWxzZSxcclxufVxyXG5cclxuY2xhc3MgTWluaW1hbFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcblxyXG4gIHBsdWdpbjogTWluaW1hbFRoZW1lO1xyXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE1pbmltYWxUaGVtZSkge1xyXG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgbGV0IHtjb250YWluZXJFbH0gPSB0aGlzO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblxyXG4gICAgY29uc3QgY29sb3JTZWN0aW9uID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgY29uc3QgY29sb3JTZWN0aW9uSW5mbyA9ICBjb2xvclNlY3Rpb24uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0taW5mbyd9KTtcclxuXHJcbiAgICBjb2xvclNlY3Rpb25JbmZvLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ0NvbG9yIHNjaGVtZScsIGNsczogJ3NldHRpbmctaXRlbS1uYW1lJ30pO1xyXG5cclxuICAgIGNvbnN0IGNvbG9yRGVzYyA9IGNvbG9yU2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb24nfSk7XHJcblxyXG4gICAgICBjb2xvckRlc2MuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ3NwYW4nLCB7XHJcbiAgICAgICAgICB0ZXh0OiAnVG8gY3JlYXRlIGEgY3VzdG9tIGNvbG9yIHNjaGVtZSB1c2UgdGhlICdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgY29sb3JEZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJTdHlsZSBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgaHJlZjogXCJvYnNpZGlhbjovL3Nob3ctcGx1Z2luP2lkPW9ic2lkaWFuLXN0eWxlLXNldHRpbmdzXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgY29sb3JEZXNjLmFwcGVuZFRleHQoJyBwbHVnaW4uIFNlZSAnKTtcclxuXHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiZG9jdW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL21pbmltYWwuZ3VpZGUvZmVhdHVyZXMvY29sb3Itc2NoZW1lc1wiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRUZXh0KCcgZm9yIGRldGFpbHMuJyk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnTGlnaHQgbW9kZSBjb2xvciBzY2hlbWUnKVxyXG4gICAgICAgIC5zZXREZXNjKCdQcmVzZXQgY29sb3Igb3B0aW9ucyBmb3IgbGlnaHQgbW9kZS4nKVxyXG4gICAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1kZWZhdWx0LWxpZ2h0JywnRGVmYXVsdCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWF0b20tbGlnaHQnLCdBdG9tJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtYXl1LWxpZ2h0JywnQXl1JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtY2F0cHB1Y2Npbi1saWdodCcsJ0NhdHBwdWNjaW4nKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1laW5rLWxpZ2h0JywnRS1pbmsgKGJldGEpJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsJ0V2ZXJmb3Jlc3QnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1mbGV4b2tpLWxpZ2h0JywnRmxleG9raScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWdydXZib3gtbGlnaHQnLCdHcnV2Ym94JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbWFjb3MtbGlnaHQnLCdtYWNPUycpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vcmQtbGlnaHQnLCdOb3JkJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JywnUm9zXHUwMEU5IFBpbmUnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1ub3Rpb24tbGlnaHQnLCdTa3knKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1zb2xhcml6ZWQtbGlnaHQnLCdTb2xhcml6ZWQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC10aGluZ3MtbGlnaHQnLCdUaGluZ3MnKVxyXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U2NoZW1lKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdMaWdodCBtb2RlIGJhY2tncm91bmQgY29udHJhc3QnKVxyXG4gICAgICAgIC5zZXREZXNjKCdMZXZlbCBvZiBjb250cmFzdCBiZXR3ZWVuIHNpZGViYXIgYW5kIG1haW4gY29udGVudC4nKVxyXG4gICAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodC13aGl0ZScsJ0FsbCB3aGl0ZScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbGlnaHQtY29udHJhc3QnLCdIaWdoIGNvbnRyYXN0JylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saWdodFN0eWxlKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnRGFyayBtb2RlIGNvbG9yIHNjaGVtZScpXHJcbiAgICAgICAgLnNldERlc2MoJ1ByZXNldCBjb2xvcnMgb3B0aW9ucyBmb3IgZGFyayBtb2RlLicpXHJcbiAgICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWRlZmF1bHQtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1hdG9tLWRhcmsnLCdBdG9tJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtYXl1LWRhcmsnLCdBeXUnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1jYXRwcHVjY2luLWRhcmsnLCdDYXRwcHVjY2luJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZHJhY3VsYS1kYXJrJywnRHJhY3VsYScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWVpbmstZGFyaycsJ0UtaW5rIChiZXRhKScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWV2ZXJmb3Jlc3QtZGFyaycsJ0V2ZXJmb3Jlc3QnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1mbGV4b2tpLWRhcmsnLCdGbGV4b2tpJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZ3J1dmJveC1kYXJrJywnR3J1dmJveCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW1hY29zLWRhcmsnLCdtYWNPUycpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vcmQtZGFyaycsJ05vcmQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1yb3NlLXBpbmUtZGFyaycsJ1Jvc1x1MDBFOSBQaW5lJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbm90aW9uLWRhcmsnLCdTa3knKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1zb2xhcml6ZWQtZGFyaycsJ1NvbGFyaXplZCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLXRoaW5ncy1kYXJrJywnVGhpbmdzJylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXJrU2NoZW1lKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXJrU2NoZW1lID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4udXBkYXRlRGFya1NjaGVtZSgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgLnNldE5hbWUoJ0RhcmsgbW9kZSBiYWNrZ3JvdW5kIGNvbnRyYXN0JylcclxuICAgICAgICAuc2V0RGVzYygnTGV2ZWwgb2YgY29udHJhc3QgYmV0d2VlbiBzaWRlYmFyIGFuZCBtYWluIGNvbnRlbnQuJylcclxuICAgICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1kYXJrLXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyay1ibGFjaycsJ1RydWUgYmxhY2snKVxyXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRhcmtTdHlsZSlcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGFya1N0eWxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4udXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2JyJyk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uSW5mbyA9ICBmZWF0dXJlc1NlY3Rpb24uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0taW5mbyd9KTtcclxuXHJcbiAgICBmZWF0dXJlc1NlY3Rpb25JbmZvLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ0ZlYXR1cmVzJywgY2xzOiAnc2V0dGluZy1pdGVtLW5hbWUnfSk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uRGVzYyA9IGZlYXR1cmVzU2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb24nfSk7XHJcblxyXG4gICAgICBmZWF0dXJlc1NlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdzcGFuJywge1xyXG4gICAgICAgICAgdGV4dDogJ1NlZSAnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBmZWF0dXJlc1NlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJkb2N1bWVudGF0aW9uXCIsXHJcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vbWluaW1hbC5ndWlkZVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGZlYXR1cmVzU2VjdGlvbkRlc2MuYXBwZW5kVGV4dCgnIGZvciBkZXRhaWxzLicpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVGV4dCBsYWJlbHMgZm9yIHByaW1hcnkgbmF2aWdhdGlvbicpXHJcbiAgICAgIC5zZXREZXNjKCdOYXZpZ2F0aW9uIGl0ZW1zIGluIHRoZSBsZWZ0IHNpZGViYXIgdXNlcyB0ZXh0IGxhYmVscy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFiZWxlZE5hdilcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFiZWxlZE5hdiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NvbG9yZnVsIHdpbmRvdyBmcmFtZScpXHJcbiAgICAgIC5zZXREZXNjKCdUaGUgdG9wIGFyZWEgb2YgdGhlIGFwcCB1c2VzIHlvdXIgYWNjZW50IGNvbG9yLicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NvbG9yZnVsIGFjdGl2ZSBzdGF0ZXMnKVxyXG4gICAgICAuc2V0RGVzYygnQWN0aXZlIGZpbGUgYW5kIG1lbnUgaXRlbXMgdXNlIHlvdXIgYWNjZW50IGNvbG9yLicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEFjdGl2ZVN0YXRlcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnQ29sb3JmdWwgaGVhZGluZ3MnKVxyXG4gICAgICAuc2V0RGVzYygnSGVhZGluZ3MgdXNlIGEgZGlmZmVyZW50IGNvbG9yIGZvciBlYWNoIHNpemUuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWluaW1hbCBzdGF0dXMgYmFyJylcclxuICAgICAgLnNldERlc2MoJ1R1cm4gb2ZmIHRvIHVzZSBmdWxsLXdpZHRoIHN0YXR1cyBiYXIuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1pbmltYWxTdGF0dXMpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm1pbmltYWxTdGF0dXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUcmltIGZpbGUgbmFtZXMgaW4gc2lkZWJhcnMnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlIGVsbGlwc2VzIHRvIGZpdCBmaWxlIG5hbWVzIG9uIGEgc2luZ2xlIGxpbmUuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRyaW1OYW1lcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudHJpbU5hbWVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgLnNldE5hbWUoJ1dvcmtzcGFjZSBib3JkZXJzJylcclxuICAgICAgICAuc2V0RGVzYygnRGlzcGxheSBkaXZpZGVyIGxpbmVzIGJldHdlZW4gd29ya3NwYWNlIGVsZW1lbnRzLicpXHJcbiAgICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdGb2N1cyBtb2RlJylcclxuICAgICAgLnNldERlc2MoJ0hpZGUgdGFiIGJhciBhbmQgc3RhdHVzIGJhciwgaG92ZXIgdG8gZGlzcGxheS4gQ2FuIGJlIHRvZ2dsZWQgdmlhIGhvdGtleS4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9jdXNNb2RlKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2N1c01vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVW5kZXJsaW5lIGludGVybmFsIGxpbmtzJylcclxuICAgICAgLnNldERlc2MoJ1Nob3cgdW5kZXJsaW5lcyBvbiBpbnRlcm5hbCBsaW5rcy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudW5kZXJsaW5lSW50ZXJuYWwpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUludGVybmFsID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ1VuZGVybGluZSBleHRlcm5hbCBsaW5rcycpXHJcbiAgICAgIC5zZXREZXNjKCdTaG93IHVuZGVybGluZXMgb24gZXh0ZXJuYWwgbGlua3MuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bmRlcmxpbmVFeHRlcm5hbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdNYXhpbWl6ZSBtZWRpYScpXHJcbiAgICAgIC5zZXREZXNjKCdJbWFnZXMgYW5kIHZpZGVvcyBmaWxsIHRoZSB3aWR0aCBvZiB0aGUgbGluZS4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZnVsbFdpZHRoTWVkaWEpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZ1bGxXaWR0aE1lZGlhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdicicpO1xyXG5cclxuICAgIGNvbnN0IGxheW91dFNlY3Rpb24gPSBjb250YWluZXJFbC5jcmVhdGVFbCgnZGl2Jywge2NsczogJ3NldHRpbmctaXRlbSBzZXR0aW5nLWl0ZW0taGVhZGluZyd9KTtcclxuXHJcbiAgICBjb25zdCBsYXlvdXRTZWN0aW9uSW5mbyA9ICBsYXlvdXRTZWN0aW9uLmNyZWF0ZUVsKCdkaXYnLCB7Y2xzOiAnc2V0dGluZy1pdGVtLWluZm8nfSk7XHJcblxyXG4gICAgbGF5b3V0U2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHt0ZXh0OiAnTGF5b3V0JywgY2xzOiAnc2V0dGluZy1pdGVtLW5hbWUnfSk7XHJcblxyXG4gICAgY29uc3QgbGF5b3V0U2VjdGlvbkRlc2MgPSBsYXlvdXRTZWN0aW9uSW5mby5jcmVhdGVFbCgnZGl2Jywge2NsczogJ3NldHRpbmctaXRlbS1kZXNjcmlwdGlvbid9KTtcclxuXHJcbiAgICAgIGxheW91dFNlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdzcGFuJywge1xyXG4gICAgICAgICAgdGV4dDogJ1RoZXNlIG9wdGlvbnMgY2FuIGFsc28gYmUgZGVmaW5lZCBvbiBhIHBlci1maWxlIGJhc2lzLCBzZWUgJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICBsYXlvdXRTZWN0aW9uRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiZG9jdW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL21pbmltYWwuZ3VpZGUvZmVhdHVyZXMvYmxvY2std2lkdGhcIixcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBsYXlvdXRTZWN0aW9uRGVzYy5hcHBlbmRUZXh0KCcgZm9yIGRldGFpbHMuJyk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdJbWFnZSBncmlkcycpXHJcbiAgICAgIC5zZXREZXNjKCdUdXJuIGNvbnNlY3V0aXZlIGltYWdlcyBpbnRvIGNvbHVtbnMgXHUyMDE0IHRvIG1ha2UgYSBuZXcgcm93LCBhZGQgYW4gZXh0cmEgbGluZSBicmVhayBiZXR3ZWVuIGltYWdlcy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nR3JpZClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nR3JpZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NoYXJ0IHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGNoYXJ0IGJsb2Nrcy4nKVxyXG4gICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAuYWRkT3B0aW9uKCdjaGFydC1kZWZhdWx0LXdpZHRoJywnRGVmYXVsdCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtbWF4JywnTWF4aW11bSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdjaGFydC0xMDAnLCcxMDAlIHBhbmUgd2lkdGgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFdpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnSWZyYW1lIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGlmcmFtZSBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLWRlZmF1bHQtd2lkdGgnLCdEZWZhdWx0JylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpZnJhbWUtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLTEwMCcsJzEwMCUgcGFuZSB3aWR0aCcpXHJcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlmcmFtZVdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pZnJhbWVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0ltYWdlIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGltYWdlIGJsb2Nrcy4nKVxyXG4gICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2ltZy13aWRlJywnV2lkZSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctbWF4JywnTWF4aW11bSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nV2lkdGgpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmltZ1dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWFwIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIG1hcCBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLWRlZmF1bHQtd2lkdGgnLCdEZWZhdWx0JylcclxuICAgICAgICAuYWRkT3B0aW9uKCdtYXAtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLTEwMCcsJzEwMCUgcGFuZSB3aWR0aCcpXHJcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1hcFdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tYXBXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ1RhYmxlIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIHRhYmxlIGFuZCBEYXRhdmlldyBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnYnInKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ1R5cG9ncmFwaHknLCBjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUZXh0IGZvbnQgc2l6ZScpXHJcbiAgICAgIC5zZXREZXNjKCdVc2VkIGZvciB0aGUgbWFpbiB0ZXh0IChkZWZhdWx0IDE2KS4nKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzE2JylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLnRleHROb3JtYWwgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGV4dE5vcm1hbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0Rm9udFNpemUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdTbWFsbCBmb250IHNpemUnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlZCBmb3IgdGV4dCBpbiB0aGUgc2lkZWJhcnMgYW5kIHRhYnMgKGRlZmF1bHQgMTMpLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignMTMnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MudGV4dFNtYWxsIHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRleHRTbWFsbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0xpbmUgaGVpZ2h0JylcclxuICAgICAgLnNldERlc2MoJ0xpbmUgaGVpZ2h0IG9mIHRleHQgKGRlZmF1bHQgMS41KS4nKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzEuNScpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lSGVpZ2h0IHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdOb3JtYWwgbGluZSB3aWR0aCcpXHJcbiAgICAgIC5zZXREZXNjKCdOdW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSAoZGVmYXVsdCA0MCkuJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCc0MCcpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lV2lkdGggfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoID0gcGFyc2VJbnQodmFsdWUudHJpbSgpKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAuc2V0RGVzYygnTnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUgZm9yIHdpZGUgZWxlbWVudHMgKGRlZmF1bHQgNTApLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignNTAnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoV2lkZSB8fCAnJykgKyAnJylcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lV2lkdGhXaWRlID0gcGFyc2VJbnQodmFsdWUudHJpbSgpKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdNYXhpbXVtIGxpbmUgd2lkdGggJScpXHJcbiAgICAgIC5zZXREZXNjKCdQZXJjZW50YWdlIG9mIHNwYWNlIGluc2lkZSBhIHBhbmUgdGhhdCBhIGxpbmUgY2FuIGZpbGwgKGRlZmF1bHQgODgpLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignODgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4V2lkdGggfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4V2lkdGggPSBwYXJzZUludCh2YWx1ZS50cmltKCkpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnRWRpdG9yIGZvbnQnKVxyXG4gICAgICAuc2V0RGVzYygnT3ZlcnJpZGVzIHRoZSB0ZXh0IGZvbnQgZGVmaW5lZCBpbiBPYnNpZGlhbiBBcHBlYXJhbmNlIHNldHRpbmdzIHdoZW4gaW4gZWRpdCBtb2RlLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignJylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLmVkaXRvckZvbnQgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZWRpdG9yRm9udCA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQWlGO0FBRWpGLGlDQUEwQyx1QkFBTztBQUFBLEVBSXpDLFNBQVM7QUFBQTtBQUViLFlBQU0sS0FBSztBQUVYLFdBQUssY0FBYyxJQUFJLGtCQUFrQixLQUFLLEtBQUs7QUFFbkQsV0FBSztBQUdMLFVBQUksaUJBQWlCLE1BQU07QUFFekIsY0FBTSxXQUFXLEtBQUssSUFBSSxNQUFNLFVBQVU7QUFDMUMsYUFBSyxTQUFTLGFBQWE7QUFHM0IsWUFBSSxLQUFLLElBQUksTUFBTSxVQUFVLGdCQUFnQjtBQUMzQyxlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLFNBQVMsS0FBSztBQUNuQixrQkFBUSxJQUFJO0FBQUEsZUFDUDtBQUNMLGVBQUssU0FBUyxVQUFVO0FBQ3hCLGVBQUssU0FBUyxLQUFLO0FBQ25CLGtCQUFRLElBQUk7QUFBQTtBQUVkLGlCQUFTLEtBQUssVUFBVSxPQUFPLG1CQUFtQixLQUFLLFNBQVM7QUFFaEUsWUFBSSxLQUFLLElBQUksTUFBTSxV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 diff --git a/.obsidian/plugins/obsidian-minimal-settings/manifest.json b/.obsidian/plugins/obsidian-minimal-settings/manifest.json new file mode 100644 index 0000000..2246c40 --- /dev/null +++ b/.obsidian/plugins/obsidian-minimal-settings/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-minimal-settings", + "name": "Minimal Theme Settings", + "version": "8.0.2", + "minAppVersion": "1.1.9", + "description": "Change the colors, fonts and features of Minimal Theme.", + "author": "@kepano", + "authorUrl": "https://www.twitter.com/kepano", + "fundingUrl": "https://www.buymeacoffee.com/kepano", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-minimal-settings/styles.css b/.obsidian/plugins/obsidian-minimal-settings/styles.css new file mode 100644 index 0000000..c94e373 --- /dev/null +++ b/.obsidian/plugins/obsidian-minimal-settings/styles.css @@ -0,0 +1 @@ +/* Empty */ \ No newline at end of file diff --git a/.obsidian/plugins/webpage-html-export/data.json b/.obsidian/plugins/webpage-html-export/data.json new file mode 100644 index 0000000..24cd62c --- /dev/null +++ b/.obsidian/plugins/webpage-html-export/data.json @@ -0,0 +1,52 @@ +{ + "settingsVersion": "1.8.01", + "makeOfflineCompatible": false, + "inlineAssets": false, + "includePluginCSS": "", + "includeSvelteCSS": true, + "titleProperty": "title", + "customHeadContentPath": "", + "faviconPath": "", + "documentWidth": "40em", + "sidebarWidth": "20em", + "minOutlineCollapse": 2, + "startOutlineCollapsed": false, + "allowFoldingHeadings": true, + "allowFoldingLists": true, + "allowResizingSidebars": true, + "logLevel": "warning", + "minifyHTML": true, + "makeNamesWebStyle": true, + "onlyExportModified": true, + "deleteOldFiles": true, + "addThemeToggle": true, + "addOutline": true, + "addFileNav": true, + "addSearchBar": true, + "addGraphView": true, + "addTitle": true, + "addRSSFeed": true, + "siteURL": "", + "authorName": "", + "vaultTitle": "TTRPG", + "exportPreset": "website", + "openAfterExport": true, + "graphAttractionForce": 1, + "graphLinkLength": 10, + "graphRepulsionForce": 150, + "graphCentralForce": 3, + "graphEdgePruning": 100, + "graphMinNodeSize": 3, + "graphMaxNodeSize": 7, + "showDefaultTreeIcons": true, + "emojiStyle": "Native", + "defaultFileIcon": "lucide//file", + "defaultFolderIcon": "lucide//folder", + "defaultMediaIcon": "lucide//file-image", + "exportPath": "C:\\\\Users\\Elizabeth.Bruynooghe\\OneDrive - Gemeentebestuur Zonnebeke\\Documenten\\TTRPG\\.server", + "filesToExport": [ + [ + "all" + ] + ] +} \ No newline at end of file diff --git a/.obsidian/plugins/webpage-html-export/main.js b/.obsidian/plugins/webpage-html-export/main.js new file mode 100644 index 0000000..77c617d --- /dev/null +++ b/.obsidian/plugins/webpage-html-export/main.js @@ -0,0 +1,74822 @@ +/* +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 __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(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __toBinary = /* @__PURE__ */ (() => { + var table = new Uint8Array(128); + for (var i = 0; i < 64; i++) + table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); + for (var i2 = 0, j = 0; i2 < n; ) { + var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes[j++] = c0 << 2 | c1 >> 4; + bytes[j++] = c1 << 4 | c2 >> 2; + bytes[j++] = c2 << 6 | c3; + } + return bytes; + }; +})(); + +// node_modules/clean-css/lib/optimizer/level-0/optimize.js +var require_optimize = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-0/optimize.js"(exports, module2) { + function level0Optimize(tokens) { + return tokens; + } + module2.exports = level0Optimize; + } +}); + +// node_modules/clean-css/lib/utils/natural-compare.js +var require_natural_compare = __commonJS({ + "node_modules/clean-css/lib/utils/natural-compare.js"(exports, module2) { + var NUMBER_PATTERN = /([0-9]+)/; + function naturalCompare(value1, value2) { + var keys1 = ("" + value1).split(NUMBER_PATTERN).map(tryParseInt); + var keys2 = ("" + value2).split(NUMBER_PATTERN).map(tryParseInt); + var key1; + var key2; + var compareFirst = Math.min(keys1.length, keys2.length); + var i, l; + for (i = 0, l = compareFirst; i < l; i++) { + key1 = keys1[i]; + key2 = keys2[i]; + if (key1 != key2) { + return key1 > key2 ? 1 : -1; + } + } + return keys1.length > keys2.length ? 1 : keys1.length == keys2.length ? 0 : -1; + } + function tryParseInt(value) { + return "" + parseInt(value) == value ? parseInt(value) : value; + } + module2.exports = naturalCompare; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js +var require_sort_selectors = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js"(exports, module2) { + var naturalCompare = require_natural_compare(); + function naturalSorter(scope1, scope2) { + return naturalCompare(scope1[1], scope2[1]); + } + function standardSorter(scope1, scope2) { + return scope1[1] > scope2[1] ? 1 : -1; + } + function sortSelectors(selectors, method) { + switch (method) { + case "natural": + return selectors.sort(naturalSorter); + case "standard": + return selectors.sort(standardSorter); + case "none": + case false: + return selectors; + } + } + module2.exports = sortSelectors; + } +}); + +// node_modules/clean-css/lib/utils/override.js +var require_override = __commonJS({ + "node_modules/clean-css/lib/utils/override.js"(exports, module2) { + function override(source1, source2) { + var target = {}; + var key1; + var key2; + var item; + for (key1 in source1) { + item = source1[key1]; + if (Array.isArray(item)) { + target[key1] = item.slice(0); + } else if (typeof item == "object" && item !== null) { + target[key1] = override(item, {}); + } else { + target[key1] = item; + } + } + for (key2 in source2) { + item = source2[key2]; + if (key2 in target && Array.isArray(item)) { + target[key2] = item.slice(0); + } else if (key2 in target && typeof item == "object" && item !== null) { + target[key2] = override(target[key2], item); + } else { + target[key2] = item; + } + } + return target; + } + module2.exports = override; + } +}); + +// node_modules/clean-css/lib/options/format.js +var require_format = __commonJS({ + "node_modules/clean-css/lib/options/format.js"(exports, module2) { + var systemLineBreak = require("os").EOL; + var override = require_override(); + var Breaks = { + AfterAtRule: "afterAtRule", + AfterBlockBegins: "afterBlockBegins", + AfterBlockEnds: "afterBlockEnds", + AfterComment: "afterComment", + AfterProperty: "afterProperty", + AfterRuleBegins: "afterRuleBegins", + AfterRuleEnds: "afterRuleEnds", + BeforeBlockEnds: "beforeBlockEnds", + BetweenSelectors: "betweenSelectors" + }; + var BreakWith = { + CarriageReturnLineFeed: "\r\n", + LineFeed: "\n", + System: systemLineBreak + }; + var IndentWith = { + Space: " ", + Tab: " " + }; + var Spaces = { + AroundSelectorRelation: "aroundSelectorRelation", + BeforeBlockBegins: "beforeBlockBegins", + BeforeValue: "beforeValue" + }; + var DEFAULTS = { + breaks: breaks(false), + breakWith: BreakWith.System, + indentBy: 0, + indentWith: IndentWith.Space, + spaces: spaces(false), + wrapAt: false, + semicolonAfterLastProperty: false + }; + var BEAUTIFY_ALIAS = "beautify"; + var KEEP_BREAKS_ALIAS = "keep-breaks"; + var OPTION_SEPARATOR = ";"; + var OPTION_NAME_VALUE_SEPARATOR = ":"; + var HASH_VALUES_OPTION_SEPARATOR = ","; + var HASH_VALUES_NAME_VALUE_SEPARATOR = "="; + var FALSE_KEYWORD_1 = "false"; + var FALSE_KEYWORD_2 = "off"; + var TRUE_KEYWORD_1 = "true"; + var TRUE_KEYWORD_2 = "on"; + function breaks(value) { + var breakOptions = {}; + breakOptions[Breaks.AfterAtRule] = value; + breakOptions[Breaks.AfterBlockBegins] = value; + breakOptions[Breaks.AfterBlockEnds] = value; + breakOptions[Breaks.AfterComment] = value; + breakOptions[Breaks.AfterProperty] = value; + breakOptions[Breaks.AfterRuleBegins] = value; + breakOptions[Breaks.AfterRuleEnds] = value; + breakOptions[Breaks.BeforeBlockEnds] = value; + breakOptions[Breaks.BetweenSelectors] = value; + return breakOptions; + } + function spaces(value) { + var spaceOptions = {}; + spaceOptions[Spaces.AroundSelectorRelation] = value; + spaceOptions[Spaces.BeforeBlockBegins] = value; + spaceOptions[Spaces.BeforeValue] = value; + return spaceOptions; + } + function formatFrom(source) { + if (source === void 0 || source === false) { + return false; + } + if (typeof source == "object" && "breakWith" in source) { + source = override(source, { breakWith: mapBreakWith(source.breakWith) }); + } + if (typeof source == "object" && "indentBy" in source) { + source = override(source, { indentBy: parseInt(source.indentBy) }); + } + if (typeof source == "object" && "indentWith" in source) { + source = override(source, { indentWith: mapIndentWith(source.indentWith) }); + } + if (typeof source == "object") { + return remapBreaks(override(DEFAULTS, source)); + } + if (typeof source == "string" && source == BEAUTIFY_ALIAS) { + return remapBreaks(override(DEFAULTS, { + breaks: breaks(true), + indentBy: 2, + spaces: spaces(true) + })); + } + if (typeof source == "string" && source == KEEP_BREAKS_ALIAS) { + return remapBreaks(override(DEFAULTS, { + breaks: { + afterAtRule: true, + afterBlockBegins: true, + afterBlockEnds: true, + afterComment: true, + afterRuleEnds: true, + beforeBlockEnds: true + } + })); + } + if (typeof source == "string") { + return remapBreaks(override(DEFAULTS, toHash(source))); + } + return DEFAULTS; + } + function toHash(string) { + return string.split(OPTION_SEPARATOR).reduce(function(accumulator, directive) { + var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR); + var name = parts[0]; + var value = parts[1]; + if (name == "breaks" || name == "spaces") { + accumulator[name] = hashValuesToHash(value); + } else if (name == "indentBy" || name == "wrapAt") { + accumulator[name] = parseInt(value); + } else if (name == "indentWith") { + accumulator[name] = mapIndentWith(value); + } else if (name == "breakWith") { + accumulator[name] = mapBreakWith(value); + } + return accumulator; + }, {}); + } + function hashValuesToHash(string) { + return string.split(HASH_VALUES_OPTION_SEPARATOR).reduce(function(accumulator, directive) { + var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR); + var name = parts[0]; + var value = parts[1]; + accumulator[name] = normalizeValue(value); + return accumulator; + }, {}); + } + function normalizeValue(value) { + switch (value) { + case FALSE_KEYWORD_1: + case FALSE_KEYWORD_2: + return false; + case TRUE_KEYWORD_1: + case TRUE_KEYWORD_2: + return true; + default: + return value; + } + } + function mapBreakWith(value) { + switch (value) { + case "windows": + case "crlf": + case BreakWith.CarriageReturnLineFeed: + return BreakWith.CarriageReturnLineFeed; + case "unix": + case "lf": + case BreakWith.LineFeed: + return BreakWith.LineFeed; + default: + return systemLineBreak; + } + } + function mapIndentWith(value) { + switch (value) { + case "space": + return IndentWith.Space; + case "tab": + return IndentWith.Tab; + default: + return value; + } + } + function remapBreaks(source) { + for (var key in Breaks) { + var breakName = Breaks[key]; + var breakValue = source.breaks[breakName]; + if (breakValue === true) { + source.breaks[breakName] = source.breakWith; + } else if (breakValue === false) { + source.breaks[breakName] = ""; + } else { + source.breaks[breakName] = source.breakWith.repeat(parseInt(breakValue)); + } + } + return source; + } + module2.exports = { + Breaks, + Spaces, + formatFrom + }; + } +}); + +// node_modules/clean-css/lib/tokenizer/marker.js +var require_marker = __commonJS({ + "node_modules/clean-css/lib/tokenizer/marker.js"(exports, module2) { + var Marker = { + ASTERISK: "*", + AT: "@", + BACK_SLASH: "\\", + CARRIAGE_RETURN: "\r", + CLOSE_CURLY_BRACKET: "}", + CLOSE_ROUND_BRACKET: ")", + CLOSE_SQUARE_BRACKET: "]", + COLON: ":", + COMMA: ",", + DOUBLE_QUOTE: '"', + EXCLAMATION: "!", + FORWARD_SLASH: "/", + INTERNAL: "-clean-css-", + NEW_LINE_NIX: "\n", + OPEN_CURLY_BRACKET: "{", + OPEN_ROUND_BRACKET: "(", + OPEN_SQUARE_BRACKET: "[", + SEMICOLON: ";", + SINGLE_QUOTE: "'", + SPACE: " ", + TAB: " ", + UNDERSCORE: "_" + }; + module2.exports = Marker; + } +}); + +// node_modules/clean-css/lib/utils/format-position.js +var require_format_position = __commonJS({ + "node_modules/clean-css/lib/utils/format-position.js"(exports, module2) { + function formatPosition(metadata) { + var line = metadata[0]; + var column = metadata[1]; + var source = metadata[2]; + return source ? source + ":" + line + ":" + column : line + ":" + column; + } + module2.exports = formatPosition; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js +var require_tidy_rules = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js"(exports, module2) { + var Spaces = require_format().Spaces; + var Marker = require_marker(); + var formatPosition = require_format_position(); + var CASE_ATTRIBUTE_PATTERN = /[\s"'][iI]\s*\]/; + var CASE_RESTORE_PATTERN = /([\d\w])([iI])\]/g; + var DOUBLE_QUOTE_CASE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g; + var DOUBLE_QUOTE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g; + var HTML_COMMENT_PATTERN = /^(?:(?:)\s*)+/; + var SINGLE_QUOTE_CASE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g; + var SINGLE_QUOTE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g; + var RELATION_PATTERN = /[>+~]/; + var WHITESPACE_PATTERN = /\s/; + var ASTERISK_PLUS_HTML_HACK = "*+html "; + var ASTERISK_FIRST_CHILD_PLUS_HTML_HACK = "*:first-child+html "; + var LESS_THAN = "<"; + var PSEUDO_CLASSES_WITH_SELECTORS = [ + ":current", + ":future", + ":has", + ":host", + ":host-context", + ":is", + ":not", + ":past", + ":where" + ]; + function hasInvalidCharacters(value) { + var isEscaped; + var isInvalid = false; + var character; + var isQuote = false; + var i, l; + for (i = 0, l = value.length; i < l; i++) { + character = value[i]; + if (isEscaped) { + } else if (character == Marker.SINGLE_QUOTE || character == Marker.DOUBLE_QUOTE) { + isQuote = !isQuote; + } else if (!isQuote && (character == Marker.CLOSE_CURLY_BRACKET || character == Marker.EXCLAMATION || character == LESS_THAN || character == Marker.SEMICOLON)) { + isInvalid = true; + break; + } else if (!isQuote && i === 0 && RELATION_PATTERN.test(character)) { + isInvalid = true; + break; + } + isEscaped = character == Marker.BACK_SLASH; + } + return isInvalid; + } + function removeWhitespace(value, format) { + var stripped = []; + var character; + var isNewLineNix; + var isNewLineWin; + var isEscaped; + var wasEscaped; + var isQuoted; + var isSingleQuoted; + var isDoubleQuoted; + var isAttribute; + var isRelation; + var isWhitespace; + var isSpaceAwarePseudoClass; + var roundBracketLevel = 0; + var wasComma = false; + var wasRelation = false; + var wasWhitespace = false; + var withCaseAttribute = CASE_ATTRIBUTE_PATTERN.test(value); + var spaceAroundRelation = format && format.spaces[Spaces.AroundSelectorRelation]; + var i, l; + for (i = 0, l = value.length; i < l; i++) { + character = value[i]; + isNewLineNix = character == Marker.NEW_LINE_NIX; + isNewLineWin = character == Marker.NEW_LINE_NIX && value[i - 1] == Marker.CARRIAGE_RETURN; + isQuoted = isSingleQuoted || isDoubleQuoted; + isRelation = !isAttribute && !isEscaped && roundBracketLevel === 0 && RELATION_PATTERN.test(character); + isWhitespace = WHITESPACE_PATTERN.test(character); + isSpaceAwarePseudoClass = roundBracketLevel == 1 && character == Marker.CLOSE_ROUND_BRACKET ? false : isSpaceAwarePseudoClass || roundBracketLevel === 0 && character == Marker.COLON && isPseudoClassWithSelectors(value, i); + if (wasEscaped && isQuoted && isNewLineWin) { + stripped.pop(); + stripped.pop(); + } else if (isEscaped && isQuoted && isNewLineNix) { + stripped.pop(); + } else if (isEscaped) { + stripped.push(character); + } else if (character == Marker.OPEN_SQUARE_BRACKET && !isQuoted) { + stripped.push(character); + isAttribute = true; + } else if (character == Marker.CLOSE_SQUARE_BRACKET && !isQuoted) { + stripped.push(character); + isAttribute = false; + } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted) { + stripped.push(character); + roundBracketLevel++; + } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted) { + stripped.push(character); + roundBracketLevel--; + } else if (character == Marker.SINGLE_QUOTE && !isQuoted) { + stripped.push(character); + isSingleQuoted = true; + } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) { + stripped.push(character); + isDoubleQuoted = true; + } else if (character == Marker.SINGLE_QUOTE && isQuoted) { + stripped.push(character); + isSingleQuoted = false; + } else if (character == Marker.DOUBLE_QUOTE && isQuoted) { + stripped.push(character); + isDoubleQuoted = false; + } else if (isWhitespace && wasRelation && !spaceAroundRelation) { + continue; + } else if (!isWhitespace && wasRelation && spaceAroundRelation) { + stripped.push(Marker.SPACE); + stripped.push(character); + } else if (isWhitespace && !wasWhitespace && wasComma && roundBracketLevel > 0 && isSpaceAwarePseudoClass) { + } else if (isWhitespace && !wasWhitespace && roundBracketLevel > 0 && isSpaceAwarePseudoClass) { + stripped.push(character); + } else if (isWhitespace && (isAttribute || roundBracketLevel > 0) && !isQuoted) { + } else if (isWhitespace && wasWhitespace && !isQuoted) { + } else if ((isNewLineWin || isNewLineNix) && (isAttribute || roundBracketLevel > 0) && isQuoted) { + } else if (isRelation && wasWhitespace && !spaceAroundRelation) { + stripped.pop(); + stripped.push(character); + } else if (isRelation && !wasWhitespace && spaceAroundRelation) { + stripped.push(Marker.SPACE); + stripped.push(character); + } else if (isWhitespace) { + stripped.push(Marker.SPACE); + } else { + stripped.push(character); + } + wasEscaped = isEscaped; + isEscaped = character == Marker.BACK_SLASH; + wasRelation = isRelation; + wasWhitespace = isWhitespace; + wasComma = character == Marker.COMMA; + } + return withCaseAttribute ? stripped.join("").replace(CASE_RESTORE_PATTERN, "$1 $2]") : stripped.join(""); + } + function isPseudoClassWithSelectors(value, colonPosition) { + var pseudoClass = value.substring(colonPosition, value.indexOf(Marker.OPEN_ROUND_BRACKET, colonPosition)); + return PSEUDO_CLASSES_WITH_SELECTORS.indexOf(pseudoClass) > -1; + } + function removeQuotes(value) { + if (value.indexOf("'") == -1 && value.indexOf('"') == -1) { + return value; + } + return value.replace(SINGLE_QUOTE_CASE_PATTERN, "=$1 $2").replace(SINGLE_QUOTE_PATTERN, "=$1$2").replace(DOUBLE_QUOTE_CASE_PATTERN, "=$1 $2").replace(DOUBLE_QUOTE_PATTERN, "=$1$2"); + } + function replacePseudoClasses(value) { + return value.replace("nth-child(1)", "first-child").replace("nth-of-type(1)", "first-of-type").replace("nth-of-type(even)", "nth-of-type(2n)").replace("nth-child(even)", "nth-child(2n)").replace("nth-of-type(2n+1)", "nth-of-type(odd)").replace("nth-child(2n+1)", "nth-child(odd)").replace("nth-last-child(1)", "last-child").replace("nth-last-of-type(1)", "last-of-type").replace("nth-last-of-type(even)", "nth-last-of-type(2n)").replace("nth-last-child(even)", "nth-last-child(2n)").replace("nth-last-of-type(2n+1)", "nth-last-of-type(odd)").replace("nth-last-child(2n+1)", "nth-last-child(odd)"); + } + function tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) { + var list = []; + var repeated = []; + function removeHTMLComment(rule2, match) { + warnings.push("HTML comment '" + match + "' at " + formatPosition(rule2[2][0]) + ". Removing."); + return ""; + } + for (var i = 0, l = rules.length; i < l; i++) { + var rule = rules[i]; + var reduced = rule[1]; + reduced = reduced.replace(HTML_COMMENT_PATTERN, removeHTMLComment.bind(null, rule)); + if (hasInvalidCharacters(reduced)) { + warnings.push("Invalid selector '" + rule[1] + "' at " + formatPosition(rule[2][0]) + ". Ignoring."); + continue; + } + reduced = removeWhitespace(reduced, format); + reduced = removeQuotes(reduced); + if (adjacentSpace && reduced.indexOf("nav") > 0) { + reduced = reduced.replace(/\+nav(\S|$)/, "+ nav$1"); + } + if (removeUnsupported && reduced.indexOf(ASTERISK_PLUS_HTML_HACK) > -1) { + continue; + } + if (removeUnsupported && reduced.indexOf(ASTERISK_FIRST_CHILD_PLUS_HTML_HACK) > -1) { + continue; + } + if (reduced.indexOf("*") > -1) { + reduced = reduced.replace(/\*([:#.[])/g, "$1").replace(/^(:first-child)?\+html/, "*$1+html"); + } + if (repeated.indexOf(reduced) > -1) { + continue; + } + reduced = replacePseudoClasses(reduced); + rule[1] = reduced; + repeated.push(reduced); + list.push(rule); + } + if (list.length == 1 && list[0][1].length === 0) { + warnings.push("Empty selector '" + list[0][1] + "' at " + formatPosition(list[0][2][0]) + ". Ignoring."); + list = []; + } + return list; + } + module2.exports = tidyRules; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/tidy-block.js +var require_tidy_block = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/tidy-block.js"(exports, module2) { + var SUPPORTED_COMPACT_BLOCK_MATCHER = /^@media\W/; + var SUPPORTED_QUOTE_REMOVAL_MATCHER = /^@(?:keyframes|-moz-keyframes|-o-keyframes|-webkit-keyframes)\W/; + function tidyBlock(values, spaceAfterClosingBrace) { + var withoutSpaceAfterClosingBrace; + var withoutQuotes; + var i; + for (i = values.length - 1; i >= 0; i--) { + withoutSpaceAfterClosingBrace = !spaceAfterClosingBrace && SUPPORTED_COMPACT_BLOCK_MATCHER.test(values[i][1]); + withoutQuotes = SUPPORTED_QUOTE_REMOVAL_MATCHER.test(values[i][1]); + values[i][1] = values[i][1].replace(/\n|\r\n/g, " ").replace(/\s+/g, " ").replace(/(,|:|\() /g, "$1").replace(/ \)/g, ")"); + if (withoutQuotes) { + values[i][1] = values[i][1].replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/, "$1").replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/, "$1"); + } + if (withoutSpaceAfterClosingBrace) { + values[i][1] = values[i][1].replace(/\) /g, ")"); + } + } + return values; + } + module2.exports = tidyBlock; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js +var require_tidy_at_rule = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js"(exports, module2) { + function tidyAtRule(value) { + return value.replace(/\s+/g, " ").replace(/url\(\s+/g, "url(").replace(/\s+\)/g, ")").trim(); + } + module2.exports = tidyAtRule; + } +}); + +// node_modules/clean-css/lib/optimizer/hack.js +var require_hack = __commonJS({ + "node_modules/clean-css/lib/optimizer/hack.js"(exports, module2) { + var Hack = { + ASTERISK: "asterisk", + BANG: "bang", + BACKSLASH: "backslash", + UNDERSCORE: "underscore" + }; + module2.exports = Hack; + } +}); + +// node_modules/clean-css/lib/optimizer/remove-unused.js +var require_remove_unused = __commonJS({ + "node_modules/clean-css/lib/optimizer/remove-unused.js"(exports, module2) { + function removeUnused(properties) { + for (var i = properties.length - 1; i >= 0; i--) { + var property = properties[i]; + if (property.unused) { + property.all.splice(property.position, 1); + } + } + } + module2.exports = removeUnused; + } +}); + +// node_modules/clean-css/lib/optimizer/restore-from-optimizing.js +var require_restore_from_optimizing = __commonJS({ + "node_modules/clean-css/lib/optimizer/restore-from-optimizing.js"(exports, module2) { + var Hack = require_hack(); + var Marker = require_marker(); + var ASTERISK_HACK = "*"; + var BACKSLASH_HACK = "\\"; + var IMPORTANT_TOKEN = "!important"; + var UNDERSCORE_HACK = "_"; + var BANG_HACK = "!ie"; + function restoreFromOptimizing(properties, restoreCallback) { + var property; + var restored; + var current; + var i; + for (i = properties.length - 1; i >= 0; i--) { + property = properties[i]; + if (property.dynamic && property.important) { + restoreImportant(property); + continue; + } + if (property.dynamic) { + continue; + } + if (property.unused) { + continue; + } + if (!property.dirty && !property.important && !property.hack) { + continue; + } + if (property.optimizable && restoreCallback) { + restored = restoreCallback(property); + property.value = restored; + } else { + restored = property.value; + } + if (property.important) { + restoreImportant(property); + } + if (property.hack) { + restoreHack(property); + } + if ("all" in property) { + current = property.all[property.position]; + current[1][1] = property.name; + current.splice(2, current.length - 1); + Array.prototype.push.apply(current, restored); + } + } + } + function restoreImportant(property) { + property.value[property.value.length - 1][1] += IMPORTANT_TOKEN; + } + function restoreHack(property) { + if (property.hack[0] == Hack.UNDERSCORE) { + property.name = UNDERSCORE_HACK + property.name; + } else if (property.hack[0] == Hack.ASTERISK) { + property.name = ASTERISK_HACK + property.name; + } else if (property.hack[0] == Hack.BACKSLASH) { + property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1]; + } else if (property.hack[0] == Hack.BANG) { + property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK; + } + } + module2.exports = restoreFromOptimizing; + } +}); + +// node_modules/clean-css/lib/tokenizer/token.js +var require_token = __commonJS({ + "node_modules/clean-css/lib/tokenizer/token.js"(exports, module2) { + var Token = { + AT_RULE: "at-rule", + AT_RULE_BLOCK: "at-rule-block", + AT_RULE_BLOCK_SCOPE: "at-rule-block-scope", + COMMENT: "comment", + NESTED_BLOCK: "nested-block", + NESTED_BLOCK_SCOPE: "nested-block-scope", + PROPERTY: "property", + PROPERTY_BLOCK: "property-block", + PROPERTY_NAME: "property-name", + PROPERTY_VALUE: "property-value", + RAW: "raw", + RULE: "rule", + RULE_SCOPE: "rule-scope" + }; + module2.exports = Token; + } +}); + +// node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js +var require_wrap_for_optimizing = __commonJS({ + "node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js"(exports, module2) { + var Hack = require_hack(); + var Marker = require_marker(); + var Token = require_token(); + var Match = { + ASTERISK: "*", + BACKSLASH: "\\", + BANG: "!", + BANG_SUFFIX_PATTERN: /!\w+$/, + IMPORTANT_TOKEN: "!important", + IMPORTANT_TOKEN_PATTERN: new RegExp("!important$", "i"), + IMPORTANT_WORD: "important", + IMPORTANT_WORD_PATTERN: new RegExp("important$", "i"), + SUFFIX_BANG_PATTERN: /!$/, + UNDERSCORE: "_", + VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/ + }; + function wrapAll(properties, skipProperties) { + var wrapped = []; + var single; + var property; + var i; + for (i = properties.length - 1; i >= 0; i--) { + property = properties[i]; + if (property[0] != Token.PROPERTY) { + continue; + } + if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) { + continue; + } + single = wrapSingle(property); + single.all = properties; + single.position = i; + wrapped.unshift(single); + } + return wrapped; + } + function someVariableReferences(property) { + var i, l; + var value; + for (i = 2, l = property.length; i < l; i++) { + value = property[i]; + if (value[0] != Token.PROPERTY_VALUE) { + continue; + } + if (isVariableReference(value[1])) { + return true; + } + } + return false; + } + function isVariableReference(value) { + return Match.VARIABLE_REFERENCE_PATTERN.test(value); + } + function isMultiplex(property) { + var value; + var i, l; + for (i = 3, l = property.length; i < l; i++) { + value = property[i]; + if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) { + return true; + } + } + return false; + } + function hackFrom(property) { + var match = false; + var name = property[1][1]; + var lastValue = property[property.length - 1]; + if (name[0] == Match.UNDERSCORE) { + match = [Hack.UNDERSCORE]; + } else if (name[0] == Match.ASTERISK) { + match = [Hack.ASTERISK]; + } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) { + match = [Hack.BANG]; + } else if (lastValue[1].indexOf(Match.BANG) > 0 && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN) && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) { + match = [Hack.BANG]; + } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0 && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) { + match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)]; + } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) { + match = [Hack.BACKSLASH, lastValue[1].substring(1)]; + } + return match; + } + function isImportant(property) { + if (property.length < 3) { + return false; + } + var lastValue = property[property.length - 1]; + if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) { + return true; + } + if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1]) && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) { + return true; + } + return false; + } + function stripImportant(property) { + var lastValue = property[property.length - 1]; + var oneButLastValue = property[property.length - 2]; + if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) { + lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, ""); + } else { + lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, ""); + oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, ""); + } + if (lastValue[1].length === 0) { + property.pop(); + } + if (oneButLastValue[1].length === 0) { + property.pop(); + } + } + function stripPrefixHack(property) { + property[1][1] = property[1][1].substring(1); + } + function stripSuffixHack(property, hackFrom2) { + var lastValue = property[property.length - 1]; + lastValue[1] = lastValue[1].substring(0, lastValue[1].indexOf(hackFrom2[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG)).trim(); + if (lastValue[1].length === 0) { + property.pop(); + } + } + function wrapSingle(property) { + var importantProperty = isImportant(property); + if (importantProperty) { + stripImportant(property); + } + var whichHack = hackFrom(property); + if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) { + stripPrefixHack(property); + } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) { + stripSuffixHack(property, whichHack); + } + return { + block: property[2] && property[2][0] == Token.PROPERTY_BLOCK, + components: [], + dirty: false, + dynamic: someVariableReferences(property), + hack: whichHack, + important: importantProperty, + name: property[1][1], + multiplex: property.length > 3 ? isMultiplex(property) : false, + optimizable: true, + position: 0, + shorthand: false, + unused: false, + value: property.slice(2) + }; + } + module2.exports = { + all: wrapAll, + single: wrapSingle + }; + } +}); + +// node_modules/clean-css/lib/optimizer/invalid-property-error.js +var require_invalid_property_error = __commonJS({ + "node_modules/clean-css/lib/optimizer/invalid-property-error.js"(exports, module2) { + function InvalidPropertyError(message) { + this.name = "InvalidPropertyError"; + this.message = message; + this.stack = new Error().stack; + } + InvalidPropertyError.prototype = Object.create(Error.prototype); + InvalidPropertyError.prototype.constructor = InvalidPropertyError; + module2.exports = InvalidPropertyError; + } +}); + +// node_modules/clean-css/lib/optimizer/configuration/break-up.js +var require_break_up = __commonJS({ + "node_modules/clean-css/lib/optimizer/configuration/break-up.js"(exports, module2) { + var InvalidPropertyError = require_invalid_property_error(); + var wrapSingle = require_wrap_for_optimizing().single; + var Token = require_token(); + var Marker = require_marker(); + var formatPosition = require_format_position(); + function _anyIsInherit(values) { + var i, l; + for (i = 0, l = values.length; i < l; i++) { + if (values[i][1] == "inherit") { + return true; + } + } + return false; + } + function _colorFilter(validator) { + return function(value) { + return value[1] == "invert" || validator.isColor(value[1]) || validator.isPrefixed(value[1]); + }; + } + function _styleFilter(validator) { + return function(value) { + return value[1] != "inherit" && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]); + }; + } + function _wrapDefault(name, property, configuration) { + var descriptor = configuration[name]; + if (descriptor.doubleValues && descriptor.defaultValue.length == 2) { + return wrapSingle([ + Token.PROPERTY, + [Token.PROPERTY_NAME, name], + [Token.PROPERTY_VALUE, descriptor.defaultValue[0]], + [Token.PROPERTY_VALUE, descriptor.defaultValue[1]] + ]); + } + if (descriptor.doubleValues && descriptor.defaultValue.length == 1) { + return wrapSingle([ + Token.PROPERTY, + [Token.PROPERTY_NAME, name], + [Token.PROPERTY_VALUE, descriptor.defaultValue[0]] + ]); + } + return wrapSingle([ + Token.PROPERTY, + [Token.PROPERTY_NAME, name], + [Token.PROPERTY_VALUE, descriptor.defaultValue] + ]); + } + function _widthFilter(validator) { + return function(value) { + return value[1] != "inherit" && (validator.isWidth(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) && !validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]); + }; + } + function animation(property, configuration, validator) { + var duration = _wrapDefault(property.name + "-duration", property, configuration); + var timing = _wrapDefault(property.name + "-timing-function", property, configuration); + var delay = _wrapDefault(property.name + "-delay", property, configuration); + var iteration = _wrapDefault(property.name + "-iteration-count", property, configuration); + var direction = _wrapDefault(property.name + "-direction", property, configuration); + var fill = _wrapDefault(property.name + "-fill-mode", property, configuration); + var play = _wrapDefault(property.name + "-play-state", property, configuration); + var name = _wrapDefault(property.name + "-name", property, configuration); + var components = [duration, timing, delay, iteration, direction, fill, play, name]; + var values = property.value; + var value; + var durationSet = false; + var timingSet = false; + var delaySet = false; + var iterationSet = false; + var directionSet = false; + var fillSet = false; + var playSet = false; + var nameSet = false; + var i; + var l; + if (property.value.length == 1 && property.value[0][1] == "inherit") { + duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value; + return components; + } + if (values.length > 1 && _anyIsInherit(values)) { + throw new InvalidPropertyError("Invalid animation values at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + if (validator.isTime(value[1]) && !durationSet) { + duration.value = [value]; + durationSet = true; + } else if (validator.isTime(value[1]) && !delaySet) { + delay.value = [value]; + delaySet = true; + } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { + timing.value = [value]; + timingSet = true; + } else if ((validator.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) { + iteration.value = [value]; + iterationSet = true; + } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) { + direction.value = [value]; + directionSet = true; + } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) { + fill.value = [value]; + fillSet = true; + } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) { + play.value = [value]; + playSet = true; + } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) { + name.value = [value]; + nameSet = true; + } else { + throw new InvalidPropertyError("Invalid animation value at " + formatPosition(value[2][0]) + ". Ignoring."); + } + } + return components; + } + function background(property, configuration, validator) { + var image = _wrapDefault("background-image", property, configuration); + var position = _wrapDefault("background-position", property, configuration); + var size = _wrapDefault("background-size", property, configuration); + var repeat = _wrapDefault("background-repeat", property, configuration); + var attachment = _wrapDefault("background-attachment", property, configuration); + var origin = _wrapDefault("background-origin", property, configuration); + var clip = _wrapDefault("background-clip", property, configuration); + var color = _wrapDefault("background-color", property, configuration); + var components = [image, position, size, repeat, attachment, origin, clip, color]; + var values = property.value; + var positionSet = false; + var clipSet = false; + var originSet = false; + var repeatSet = false; + var anyValueSet = false; + if (property.value.length == 1 && property.value[0][1] == "inherit") { + color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value; + return components; + } + if (property.value.length == 1 && property.value[0][1] == "0 0") { + return components; + } + for (var i = values.length - 1; i >= 0; i--) { + var value = values[i]; + if (validator.isBackgroundAttachmentKeyword(value[1])) { + attachment.value = [value]; + anyValueSet = true; + } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) { + if (clipSet) { + origin.value = [value]; + originSet = true; + } else { + clip.value = [value]; + clipSet = true; + } + anyValueSet = true; + } else if (validator.isBackgroundRepeatKeyword(value[1])) { + if (repeatSet) { + repeat.value.unshift(value); + } else { + repeat.value = [value]; + repeatSet = true; + } + anyValueSet = true; + } else if (validator.isBackgroundPositionKeyword(value[1]) || validator.isBackgroundSizeKeyword(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) { + if (i > 0) { + var previousValue = values[i - 1]; + if (previousValue[1] == Marker.FORWARD_SLASH) { + size.value = [value]; + } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) { + size.value = [previousValue, value]; + i -= 2; + } else { + if (!positionSet) { + position.value = []; + } + position.value.unshift(value); + positionSet = true; + } + } else { + if (!positionSet) { + position.value = []; + } + position.value.unshift(value); + positionSet = true; + } + anyValueSet = true; + } else if ((color.value[0][1] == configuration[color.name].defaultValue || color.value[0][1] == "none") && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) { + color.value = [value]; + anyValueSet = true; + } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) { + image.value = [value]; + anyValueSet = true; + } + } + if (clipSet && !originSet) { + origin.value = clip.value.slice(0); + } + if (!anyValueSet) { + throw new InvalidPropertyError("Invalid background value at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + return components; + } + function borderRadius(property, configuration) { + var values = property.value; + var splitAt = -1; + for (var i = 0, l = values.length; i < l; i++) { + if (values[i][1] == Marker.FORWARD_SLASH) { + splitAt = i; + break; + } + } + if (splitAt === 0 || splitAt === values.length - 1) { + throw new InvalidPropertyError("Invalid border-radius value at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + var target = _wrapDefault(property.name, property, configuration); + target.value = splitAt > -1 ? values.slice(0, splitAt) : values.slice(0); + target.components = fourValues(target, configuration); + var remainder = _wrapDefault(property.name, property, configuration); + remainder.value = splitAt > -1 ? values.slice(splitAt + 1) : values.slice(0); + remainder.components = fourValues(remainder, configuration); + for (var j = 0; j < 4; j++) { + target.components[j].multiplex = true; + target.components[j].value = target.components[j].value.concat(remainder.components[j].value); + } + return target.components; + } + function font(property, configuration, validator) { + var style = _wrapDefault("font-style", property, configuration); + var variant = _wrapDefault("font-variant", property, configuration); + var weight = _wrapDefault("font-weight", property, configuration); + var stretch = _wrapDefault("font-stretch", property, configuration); + var size = _wrapDefault("font-size", property, configuration); + var height = _wrapDefault("line-height", property, configuration); + var family = _wrapDefault("font-family", property, configuration); + var components = [style, variant, weight, stretch, size, height, family]; + var values = property.value; + var fuzzyMatched = 4; + var index = 0; + var isStretchSet = false; + var isStretchValid; + var isStyleSet = false; + var isStyleValid; + var isVariantSet = false; + var isVariantValid; + var isWeightSet = false; + var isWeightValid; + var appendableFamilyName = false; + if (!values[index]) { + throw new InvalidPropertyError("Missing font values at " + formatPosition(property.all[property.position][1][2][0]) + ". Ignoring."); + } + if (values.length == 1 && values[0][1] == "inherit") { + style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values; + return components; + } + if (values.length == 1 && (validator.isFontKeyword(values[0][1]) || validator.isGlobal(values[0][1]) || validator.isPrefixed(values[0][1]))) { + values[0][1] = Marker.INTERNAL + values[0][1]; + style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values; + return components; + } + if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) { + throw new InvalidPropertyError("Invalid font values at " + formatPosition(property.all[property.position][1][2][0]) + ". Ignoring."); + } + if (values.length > 1 && _anyIsInherit(values)) { + throw new InvalidPropertyError("Invalid font values at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + while (index < fuzzyMatched) { + isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]); + isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]); + isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]); + isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]); + if (isStyleValid && !isStyleSet) { + style.value = [values[index]]; + isStyleSet = true; + } else if (isVariantValid && !isVariantSet) { + variant.value = [values[index]]; + isVariantSet = true; + } else if (isWeightValid && !isWeightSet) { + weight.value = [values[index]]; + isWeightSet = true; + } else if (isStretchValid && !isStretchSet) { + stretch.value = [values[index]]; + isStretchSet = true; + } else if (isStyleValid && isStyleSet || isVariantValid && isVariantSet || isWeightValid && isWeightSet || isStretchValid && isStretchSet) { + throw new InvalidPropertyError("Invalid font style / variant / weight / stretch value at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } else { + break; + } + index++; + } + if (validator.isFontSizeKeyword(values[index][1]) || validator.isUnit(values[index][1]) && !validator.isDynamicUnit(values[index][1])) { + size.value = [values[index]]; + index++; + } else { + throw new InvalidPropertyError("Missing font size at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + if (!values[index]) { + throw new InvalidPropertyError("Missing font family at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + if (values[index] && values[index][1] == Marker.FORWARD_SLASH && values[index + 1] && (validator.isLineHeightKeyword(values[index + 1][1]) || validator.isUnit(values[index + 1][1]) || validator.isNumber(values[index + 1][1]))) { + height.value = [values[index + 1]]; + index++; + index++; + } + family.value = []; + while (values[index]) { + if (values[index][1] == Marker.COMMA) { + appendableFamilyName = false; + } else { + if (appendableFamilyName) { + family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1]; + } else { + family.value.push(values[index]); + } + appendableFamilyName = true; + } + index++; + } + if (family.value.length === 0) { + throw new InvalidPropertyError("Missing font family at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + return components; + } + function _anyIsFontSize(values, validator) { + var value; + var i, l; + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + if (validator.isFontSizeKeyword(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1]) || validator.isFunction(value[1])) { + return true; + } + } + return false; + } + function _anyIsFontFamily(values, validator) { + var value; + var i, l; + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + if (validator.isIdentifier(value[1]) || validator.isQuotedText(value[1])) { + return true; + } + } + return false; + } + function fourValues(property, configuration) { + var componentNames = configuration[property.name].components; + var components = []; + var value = property.value; + if (value.length < 1) { + return []; + } + if (value.length < 2) { + value[1] = value[0].slice(0); + } + if (value.length < 3) { + value[2] = value[0].slice(0); + } + if (value.length < 4) { + value[3] = value[1].slice(0); + } + for (var i = componentNames.length - 1; i >= 0; i--) { + var component = wrapSingle([ + Token.PROPERTY, + [Token.PROPERTY_NAME, componentNames[i]] + ]); + component.value = [value[i]]; + components.unshift(component); + } + return components; + } + function multiplex(splitWith) { + return function(property, configuration, validator) { + var splitsAt = []; + var values = property.value; + var i, j, l, m; + for (i = 0, l = values.length; i < l; i++) { + if (values[i][1] == ",") { + splitsAt.push(i); + } + } + if (splitsAt.length === 0) { + return splitWith(property, configuration, validator); + } + var splitComponents = []; + for (i = 0, l = splitsAt.length; i <= l; i++) { + var from = i === 0 ? 0 : splitsAt[i - 1] + 1; + var to = i < l ? splitsAt[i] : values.length; + var _property = _wrapDefault(property.name, property, configuration); + _property.value = values.slice(from, to); + if (_property.value.length > 0) { + splitComponents.push(splitWith(_property, configuration, validator)); + } + } + var components = splitComponents[0]; + for (i = 0, l = components.length; i < l; i++) { + components[i].multiplex = true; + for (j = 1, m = splitComponents.length; j < m; j++) { + components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]); + Array.prototype.push.apply(components[i].value, splitComponents[j][i].value); + } + } + return components; + }; + } + function listStyle(property, configuration, validator) { + var type = _wrapDefault("list-style-type", property, configuration); + var position = _wrapDefault("list-style-position", property, configuration); + var image = _wrapDefault("list-style-image", property, configuration); + var components = [type, position, image]; + if (property.value.length == 1 && property.value[0][1] == "inherit") { + type.value = position.value = image.value = [property.value[0]]; + return components; + } + var values = property.value.slice(0); + var total = values.length; + var index = 0; + for (index = 0, total = values.length; index < total; index++) { + if (validator.isUrl(values[index][1]) || values[index][1] == "0") { + image.value = [values[index]]; + values.splice(index, 1); + break; + } + } + for (index = 0, total = values.length; index < total; index++) { + if (validator.isListStylePositionKeyword(values[index][1])) { + position.value = [values[index]]; + values.splice(index, 1); + break; + } + } + if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) { + type.value = [values[0]]; + } + return components; + } + function transition(property, configuration, validator) { + var prop = _wrapDefault(property.name + "-property", property, configuration); + var duration = _wrapDefault(property.name + "-duration", property, configuration); + var timing = _wrapDefault(property.name + "-timing-function", property, configuration); + var delay = _wrapDefault(property.name + "-delay", property, configuration); + var components = [prop, duration, timing, delay]; + var values = property.value; + var value; + var durationSet = false; + var delaySet = false; + var propSet = false; + var timingSet = false; + var i; + var l; + if (property.value.length == 1 && property.value[0][1] == "inherit") { + prop.value = duration.value = timing.value = delay.value = property.value; + return components; + } + if (values.length > 1 && _anyIsInherit(values)) { + throw new InvalidPropertyError("Invalid animation values at " + formatPosition(values[0][2][0]) + ". Ignoring."); + } + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + if (validator.isTime(value[1]) && !durationSet) { + duration.value = [value]; + durationSet = true; + } else if (validator.isTime(value[1]) && !delaySet) { + delay.value = [value]; + delaySet = true; + } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { + timing.value = [value]; + timingSet = true; + } else if (validator.isIdentifier(value[1]) && !propSet) { + prop.value = [value]; + propSet = true; + } else { + throw new InvalidPropertyError("Invalid animation value at " + formatPosition(value[2][0]) + ". Ignoring."); + } + } + return components; + } + function widthStyleColor(property, configuration, validator) { + var descriptor = configuration[property.name]; + var components = [ + _wrapDefault(descriptor.components[0], property, configuration), + _wrapDefault(descriptor.components[1], property, configuration), + _wrapDefault(descriptor.components[2], property, configuration) + ]; + var color, style, width; + for (var i = 0; i < 3; i++) { + var component = components[i]; + if (component.name.indexOf("color") > 0) { + color = component; + } else if (component.name.indexOf("style") > 0) { + style = component; + } else { + width = component; + } + } + if (property.value.length == 1 && property.value[0][1] == "inherit" || property.value.length == 3 && property.value[0][1] == "inherit" && property.value[1][1] == "inherit" && property.value[2][1] == "inherit") { + color.value = style.value = width.value = [property.value[0]]; + return components; + } + var values = property.value.slice(0); + var match, matches; + if (values.length > 0) { + matches = values.filter(_widthFilter(validator)); + match = matches.length > 1 && (matches[0][1] == "none" || matches[0][1] == "auto") ? matches[1] : matches[0]; + if (match) { + width.value = [match]; + values.splice(values.indexOf(match), 1); + } + } + if (values.length > 0) { + match = values.filter(_styleFilter(validator))[0]; + if (match) { + style.value = [match]; + values.splice(values.indexOf(match), 1); + } + } + if (values.length > 0) { + match = values.filter(_colorFilter(validator))[0]; + if (match) { + color.value = [match]; + values.splice(values.indexOf(match), 1); + } + } + return components; + } + module2.exports = { + animation, + background, + border: widthStyleColor, + borderRadius, + font, + fourValues, + listStyle, + multiplex, + outline: widthStyleColor, + transition + }; + } +}); + +// node_modules/clean-css/lib/optimizer/vendor-prefixes.js +var require_vendor_prefixes = __commonJS({ + "node_modules/clean-css/lib/optimizer/vendor-prefixes.js"(exports, module2) { + var VENDOR_PREFIX_PATTERN = /(?:^|\W)(-\w+-)/g; + function unique(value) { + var prefixes = []; + var match; + while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) { + if (prefixes.indexOf(match[0]) == -1) { + prefixes.push(match[0]); + } + } + return prefixes; + } + function same(value1, value2) { + return unique(value1).sort().join(",") == unique(value2).sort().join(","); + } + module2.exports = { + unique, + same + }; + } +}); + +// node_modules/clean-css/lib/optimizer/configuration/properties/understandable.js +var require_understandable = __commonJS({ + "node_modules/clean-css/lib/optimizer/configuration/properties/understandable.js"(exports, module2) { + var sameVendorPrefixes = require_vendor_prefixes().same; + function understandable(validator, value1, value2, _position, isPaired) { + if (!sameVendorPrefixes(value1, value2)) { + return false; + } + if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) { + return false; + } + return true; + } + module2.exports = understandable; + } +}); + +// node_modules/clean-css/lib/optimizer/configuration/can-override.js +var require_can_override = __commonJS({ + "node_modules/clean-css/lib/optimizer/configuration/can-override.js"(exports, module2) { + var understandable = require_understandable(); + function animationIterationCount(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2); + } + function animationName(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2); + } + function areSameFunction(validator, value1, value2) { + if (!validator.isFunction(value1) || !validator.isFunction(value2)) { + return false; + } + var function1Name = value1.substring(0, value1.indexOf("(")); + var function2Name = value2.substring(0, value2.indexOf("(")); + var function1Value = value1.substring(function1Name.length + 1, value1.length - 1); + var function2Value = value2.substring(function2Name.length + 1, value2.length - 1); + if (validator.isFunction(function1Value) || validator.isFunction(function2Value)) { + return function1Name === function2Name && areSameFunction(validator, function1Value, function2Value); + } + return function1Name === function2Name; + } + function backgroundPosition(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) { + return true; + } + return unit(validator, value1, value2); + } + function backgroundSize(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) { + return true; + } + return unit(validator, value1, value2); + } + function color(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) { + return false; + } + if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) { + return false; + } + if (!validator.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(value2))) { + return false; + } + if (validator.isColor(value1) && validator.isColor(value2)) { + return true; + } + return sameFunctionOrValue(validator, value1, value2); + } + function components(overrideCheckers) { + return function(validator, value1, value2, position) { + return overrideCheckers[position](validator, value1, value2); + }; + } + function fontFamily(validator, value1, value2) { + return understandable(validator, value1, value2, 0, true); + } + function image(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (validator.isImage(value2)) { + return true; + } + if (validator.isImage(value1)) { + return false; + } + return sameFunctionOrValue(validator, value1, value2); + } + function keyword(propertyName2) { + return function(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName2)(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isKeyword(propertyName2)(value2); + }; + } + function keywordWithGlobal(propertyName2) { + return function(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isKeyword(propertyName2)(value2) || validator.isGlobal(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isKeyword(propertyName2)(value2) || validator.isGlobal(value2); + }; + } + function propertyName(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isIdentifier(value2); + } + function sameFunctionOrValue(validator, value1, value2) { + return areSameFunction(validator, value1, value2) ? true : value1 === value2; + } + function textShadow(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2); + } + function time(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (validator.isTime(value1) && !validator.isTime(value2)) { + return false; + } + if (validator.isTime(value2)) { + return true; + } + if (validator.isTime(value1)) { + return false; + } + if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { + return true; + } + return sameFunctionOrValue(validator, value1, value2); + } + function timingFunction(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isTimingFunction(value2) || validator.isGlobal(value2); + } + function unit(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if (validator.isUnit(value1) && !validator.isUnit(value2)) { + return false; + } + if (validator.isUnit(value2)) { + return true; + } + if (validator.isUnit(value1)) { + return false; + } + if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { + return true; + } + return sameFunctionOrValue(validator, value1, value2); + } + function unitOrKeywordWithGlobal(propertyName2) { + var byKeyword = keywordWithGlobal(propertyName2); + return function(validator, value1, value2) { + return unit(validator, value1, value2) || byKeyword(validator, value1, value2); + }; + } + function unitOrNumber(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isNumber(value2))) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + if ((validator.isUnit(value1) || validator.isNumber(value1)) && !(validator.isUnit(value2) || validator.isNumber(value2))) { + return false; + } + if (validator.isUnit(value2) || validator.isNumber(value2)) { + return true; + } + if (validator.isUnit(value1) || validator.isNumber(value1)) { + return false; + } + if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { + return true; + } + return sameFunctionOrValue(validator, value1, value2); + } + function zIndex(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) { + return false; + } + if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + return validator.isZIndex(value2); + } + module2.exports = { + generic: { + color, + components, + image, + propertyName, + time, + timingFunction, + unit, + unitOrNumber + }, + property: { + animationDirection: keywordWithGlobal("animation-direction"), + animationFillMode: keyword("animation-fill-mode"), + animationIterationCount, + animationName, + animationPlayState: keywordWithGlobal("animation-play-state"), + backgroundAttachment: keyword("background-attachment"), + backgroundClip: keywordWithGlobal("background-clip"), + backgroundOrigin: keyword("background-origin"), + backgroundPosition, + backgroundRepeat: keyword("background-repeat"), + backgroundSize, + bottom: unitOrKeywordWithGlobal("bottom"), + borderCollapse: keyword("border-collapse"), + borderStyle: keywordWithGlobal("*-style"), + clear: keywordWithGlobal("clear"), + cursor: keywordWithGlobal("cursor"), + display: keywordWithGlobal("display"), + float: keywordWithGlobal("float"), + left: unitOrKeywordWithGlobal("left"), + fontFamily, + fontStretch: keywordWithGlobal("font-stretch"), + fontStyle: keywordWithGlobal("font-style"), + fontVariant: keywordWithGlobal("font-variant"), + fontWeight: keywordWithGlobal("font-weight"), + listStyleType: keywordWithGlobal("list-style-type"), + listStylePosition: keywordWithGlobal("list-style-position"), + outlineStyle: keywordWithGlobal("*-style"), + overflow: keywordWithGlobal("overflow"), + position: keywordWithGlobal("position"), + right: unitOrKeywordWithGlobal("right"), + textAlign: keywordWithGlobal("text-align"), + textDecoration: keywordWithGlobal("text-decoration"), + textOverflow: keywordWithGlobal("text-overflow"), + textShadow, + top: unitOrKeywordWithGlobal("top"), + transform: sameFunctionOrValue, + verticalAlign: unitOrKeywordWithGlobal("vertical-align"), + visibility: keywordWithGlobal("visibility"), + whiteSpace: keywordWithGlobal("white-space"), + zIndex + } + }; + } +}); + +// node_modules/clean-css/lib/optimizer/clone.js +var require_clone = __commonJS({ + "node_modules/clean-css/lib/optimizer/clone.js"(exports, module2) { + var wrapSingle = require_wrap_for_optimizing().single; + var Token = require_token(); + function deep(property) { + var cloned = shallow(property); + for (var i = property.components.length - 1; i >= 0; i--) { + var component = shallow(property.components[i]); + component.value = property.components[i].value.slice(0); + cloned.components.unshift(component); + } + cloned.dirty = true; + cloned.value = property.value.slice(0); + return cloned; + } + function shallow(property) { + var cloned = wrapSingle([ + Token.PROPERTY, + [Token.PROPERTY_NAME, property.name] + ]); + cloned.important = property.important; + cloned.hack = property.hack; + cloned.unused = false; + return cloned; + } + module2.exports = { + deep, + shallow + }; + } +}); + +// node_modules/clean-css/lib/optimizer/configuration/restore.js +var require_restore = __commonJS({ + "node_modules/clean-css/lib/optimizer/configuration/restore.js"(exports, module2) { + var shallowClone = require_clone().shallow; + var Token = require_token(); + var Marker = require_marker(); + function isInheritOnly(values) { + for (var i = 0, l = values.length; i < l; i++) { + var value = values[i][1]; + if (value != "inherit" && value != Marker.COMMA && value != Marker.FORWARD_SLASH) { + return false; + } + } + return true; + } + function background(property, configuration, lastInMultiplex) { + var components = property.components; + var restored = []; + var needsOne, needsBoth; + function restoreValue(component2) { + Array.prototype.unshift.apply(restored, component2.value); + } + function isDefaultValue(component2) { + var descriptor = configuration[component2.name]; + if (descriptor.doubleValues && descriptor.defaultValue.length == 1) { + return component2.value[0][1] == descriptor.defaultValue[0] && (component2.value[1] ? component2.value[1][1] == descriptor.defaultValue[0] : true); + } + if (descriptor.doubleValues && descriptor.defaultValue.length != 1) { + return component2.value[0][1] == descriptor.defaultValue[0] && (component2.value[1] ? component2.value[1][1] : component2.value[0][1]) == descriptor.defaultValue[1]; + } + return component2.value[0][1] == descriptor.defaultValue; + } + for (var i = components.length - 1; i >= 0; i--) { + var component = components[i]; + var isDefault2 = isDefaultValue(component); + if (component.name == "background-clip") { + var originComponent = components[i - 1]; + var isOriginDefault = isDefaultValue(originComponent); + needsOne = component.value[0][1] == originComponent.value[0][1]; + needsBoth = !needsOne && (isOriginDefault && !isDefault2 || !isOriginDefault && !isDefault2 || !isOriginDefault && isDefault2 && component.value[0][1] != originComponent.value[0][1]); + if (needsOne) { + restoreValue(originComponent); + } else if (needsBoth) { + restoreValue(component); + restoreValue(originComponent); + } + i--; + } else if (component.name == "background-size") { + var positionComponent = components[i - 1]; + var isPositionDefault = isDefaultValue(positionComponent); + needsOne = !isPositionDefault && isDefault2; + needsBoth = !needsOne && (isPositionDefault && !isDefault2 || !isPositionDefault && !isDefault2); + if (needsOne) { + restoreValue(positionComponent); + } else if (needsBoth) { + restoreValue(component); + restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]); + restoreValue(positionComponent); + } else if (positionComponent.value.length == 1) { + restoreValue(positionComponent); + } + i--; + } else { + if (isDefault2 || configuration[component.name].multiplexLastOnly && !lastInMultiplex) { + continue; + } + restoreValue(component); + } + } + if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == "0") { + restored.push(property.value[0]); + } + if (restored.length === 0) { + restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); + } + if (isInheritOnly(restored)) { + return [restored[0]]; + } + return restored; + } + function borderRadius(property) { + if (property.multiplex) { + var horizontal = shallowClone(property); + var vertical = shallowClone(property); + for (var i = 0; i < 4; i++) { + var component = property.components[i]; + var horizontalComponent = shallowClone(property); + horizontalComponent.value = [component.value[0]]; + horizontal.components.push(horizontalComponent); + var verticalComponent = shallowClone(property); + verticalComponent.value = [component.value[1] || component.value[0]]; + vertical.components.push(verticalComponent); + } + var horizontalValues = fourValues(horizontal); + var verticalValues = fourValues(vertical); + if (horizontalValues.length == verticalValues.length && horizontalValues[0][1] == verticalValues[0][1] && (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) && (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) && (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) { + return horizontalValues; + } + return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues); + } + return fourValues(property); + } + function font(property, configuration) { + var components = property.components; + var restored = []; + var component; + var componentIndex = 0; + var fontFamilyIndex = 0; + if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) { + property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length); + return property.value; + } + while (componentIndex < 4) { + component = components[componentIndex]; + if (component.value[0][1] != configuration[component.name].defaultValue) { + Array.prototype.push.apply(restored, component.value); + } + componentIndex++; + } + Array.prototype.push.apply(restored, components[componentIndex].value); + componentIndex++; + if (components[componentIndex].value[0][1] != configuration[components[componentIndex].name].defaultValue) { + Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]); + Array.prototype.push.apply(restored, components[componentIndex].value); + } + componentIndex++; + while (components[componentIndex].value[fontFamilyIndex]) { + restored.push(components[componentIndex].value[fontFamilyIndex]); + if (components[componentIndex].value[fontFamilyIndex + 1]) { + restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); + } + fontFamilyIndex++; + } + if (isInheritOnly(restored)) { + return [restored[0]]; + } + return restored; + } + function fourValues(property) { + var components = property.components; + var value1 = components[0].value[0]; + var value2 = components[1].value[0]; + var value3 = components[2].value[0]; + var value4 = components[3].value[0]; + if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) { + return [value1]; + } + if (value1[1] == value3[1] && value2[1] == value4[1]) { + return [value1, value2]; + } + if (value2[1] == value4[1]) { + return [value1, value2, value3]; + } + return [value1, value2, value3, value4]; + } + function multiplex(restoreWith) { + return function(property, configuration) { + if (!property.multiplex) { + return restoreWith(property, configuration, true); + } + var multiplexSize = 0; + var restored = []; + var componentMultiplexSoFar = {}; + var i, l; + for (i = 0, l = property.components[0].value.length; i < l; i++) { + if (property.components[0].value[i][1] == Marker.COMMA) { + multiplexSize++; + } + } + for (i = 0; i <= multiplexSize; i++) { + var _property = shallowClone(property); + for (var j = 0, m = property.components.length; j < m; j++) { + var componentToClone = property.components[j]; + var _component = shallowClone(componentToClone); + _property.components.push(_component); + for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) { + if (componentToClone.value[k][1] == Marker.COMMA) { + componentMultiplexSoFar[_component.name] = k + 1; + break; + } + _component.value.push(componentToClone.value[k]); + } + } + var lastInMultiplex = i == multiplexSize; + var _restored = restoreWith(_property, configuration, lastInMultiplex); + Array.prototype.push.apply(restored, _restored); + if (i < multiplexSize) { + restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); + } + } + return restored; + }; + } + function withoutDefaults(property, configuration) { + var components = property.components; + var restored = []; + for (var i = components.length - 1; i >= 0; i--) { + var component = components[i]; + var descriptor = configuration[component.name]; + if (component.value[0][1] != descriptor.defaultValue || "keepUnlessDefault" in descriptor && !isDefault(components, configuration, descriptor.keepUnlessDefault)) { + restored.unshift(component.value[0]); + } + } + if (restored.length === 0) { + restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); + } + if (isInheritOnly(restored)) { + return [restored[0]]; + } + return restored; + } + function isDefault(components, configuration, propertyName) { + var component; + var i, l; + for (i = 0, l = components.length; i < l; i++) { + component = components[i]; + if (component.name == propertyName && component.value[0][1] == configuration[propertyName].defaultValue) { + return true; + } + } + return false; + } + module2.exports = { + background, + borderRadius, + font, + fourValues, + multiplex, + withoutDefaults + }; + } +}); + +// node_modules/clean-css/lib/options/rounding-precision.js +var require_rounding_precision = __commonJS({ + "node_modules/clean-css/lib/options/rounding-precision.js"(exports, module2) { + var override = require_override(); + var INTEGER_PATTERN = /^\d+$/; + var ALL_UNITS = ["*", "all"]; + var DEFAULT_PRECISION = "off"; + var DIRECTIVES_SEPARATOR = ","; + var DIRECTIVE_VALUE_SEPARATOR = "="; + function roundingPrecisionFrom(source) { + return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source)); + } + function defaults(value) { + return { + ch: value, + cm: value, + em: value, + ex: value, + in: value, + mm: value, + pc: value, + pt: value, + px: value, + q: value, + rem: value, + vh: value, + vmax: value, + vmin: value, + vw: value, + "%": value + }; + } + function buildPrecisionFrom(source) { + if (source === null || source === void 0) { + return {}; + } + if (typeof source == "boolean") { + return {}; + } + if (typeof source == "number" && source == -1) { + return defaults(DEFAULT_PRECISION); + } + if (typeof source == "number") { + return defaults(source); + } + if (typeof source == "string" && INTEGER_PATTERN.test(source)) { + return defaults(parseInt(source)); + } + if (typeof source == "string" && source == DEFAULT_PRECISION) { + return defaults(DEFAULT_PRECISION); + } + if (typeof source == "object") { + return source; + } + return source.split(DIRECTIVES_SEPARATOR).reduce(function(accumulator, directive) { + var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR); + var name = directiveParts[0]; + var value = parseInt(directiveParts[1]); + if (Number.isNaN(value) || value == -1) { + value = DEFAULT_PRECISION; + } + if (ALL_UNITS.indexOf(name) > -1) { + accumulator = override(accumulator, defaults(value)); + } else { + accumulator[name] = value; + } + return accumulator; + }, {}); + } + module2.exports = { + DEFAULT: DEFAULT_PRECISION, + roundingPrecisionFrom + }; + } +}); + +// node_modules/clean-css/lib/options/optimization-level.js +var require_optimization_level = __commonJS({ + "node_modules/clean-css/lib/options/optimization-level.js"(exports, module2) { + var roundingPrecisionFrom = require_rounding_precision().roundingPrecisionFrom; + var override = require_override(); + var OptimizationLevel = { + Zero: "0", + One: "1", + Two: "2" + }; + var DEFAULTS = {}; + DEFAULTS[OptimizationLevel.Zero] = {}; + DEFAULTS[OptimizationLevel.One] = { + cleanupCharsets: true, + normalizeUrls: true, + optimizeBackground: true, + optimizeBorderRadius: true, + optimizeFilter: true, + optimizeFontWeight: true, + optimizeOutline: true, + removeEmpty: true, + removeNegativePaddings: true, + removeQuotes: true, + removeWhitespace: true, + replaceMultipleZeros: true, + replaceTimeUnits: true, + replaceZeroUnits: true, + roundingPrecision: roundingPrecisionFrom(void 0), + selectorsSortingMethod: "standard", + specialComments: "all", + tidyAtRules: true, + tidyBlockScopes: true, + tidySelectors: true, + variableValueOptimizers: [] + }; + DEFAULTS[OptimizationLevel.Two] = { + mergeAdjacentRules: true, + mergeIntoShorthands: true, + mergeMedia: true, + mergeNonAdjacentRules: true, + mergeSemantically: false, + overrideProperties: true, + removeEmpty: true, + reduceNonAdjacentRules: true, + removeDuplicateFontRules: true, + removeDuplicateMediaBlocks: true, + removeDuplicateRules: true, + removeUnusedAtRules: false, + restructureRules: false, + skipProperties: [] + }; + var ALL_KEYWORD_1 = "*"; + var ALL_KEYWORD_2 = "all"; + var FALSE_KEYWORD_1 = "false"; + var FALSE_KEYWORD_2 = "off"; + var TRUE_KEYWORD_1 = "true"; + var TRUE_KEYWORD_2 = "on"; + var LIST_VALUE_SEPARATOR = ","; + var OPTION_SEPARATOR = ";"; + var OPTION_VALUE_SEPARATOR = ":"; + function optimizationLevelFrom(source) { + var level = override(DEFAULTS, {}); + var Zero = OptimizationLevel.Zero; + var One = OptimizationLevel.One; + var Two = OptimizationLevel.Two; + if (source === void 0) { + delete level[Two]; + return level; + } + if (typeof source == "string") { + source = parseInt(source); + } + if (typeof source == "number" && source === parseInt(Two)) { + return level; + } + if (typeof source == "number" && source === parseInt(One)) { + delete level[Two]; + return level; + } + if (typeof source == "number" && source === parseInt(Zero)) { + delete level[Two]; + delete level[One]; + return level; + } + if (typeof source == "object") { + source = covertValuesToHashes(source); + } + if (One in source && "roundingPrecision" in source[One]) { + source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision); + } + if (Two in source && "skipProperties" in source[Two] && typeof source[Two].skipProperties == "string") { + source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR); + } + if (Zero in source || One in source || Two in source) { + level[Zero] = override(level[Zero], source[Zero]); + } + if (One in source && ALL_KEYWORD_1 in source[One]) { + level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1]))); + delete source[One][ALL_KEYWORD_1]; + } + if (One in source && ALL_KEYWORD_2 in source[One]) { + level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2]))); + delete source[One][ALL_KEYWORD_2]; + } + if (One in source || Two in source) { + level[One] = override(level[One], source[One]); + } else { + delete level[One]; + } + if (Two in source && ALL_KEYWORD_1 in source[Two]) { + level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1]))); + delete source[Two][ALL_KEYWORD_1]; + } + if (Two in source && ALL_KEYWORD_2 in source[Two]) { + level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2]))); + delete source[Two][ALL_KEYWORD_2]; + } + if (Two in source) { + level[Two] = override(level[Two], source[Two]); + } else { + delete level[Two]; + } + return level; + } + function defaults(level, value) { + var options = override(DEFAULTS[level], {}); + var key; + for (key in options) { + if (typeof options[key] == "boolean") { + options[key] = value; + } + } + return options; + } + function normalizeValue(value) { + switch (value) { + case FALSE_KEYWORD_1: + case FALSE_KEYWORD_2: + return false; + case TRUE_KEYWORD_1: + case TRUE_KEYWORD_2: + return true; + default: + return value; + } + } + function covertValuesToHashes(source) { + var clonedSource = override(source, {}); + var level; + var i; + for (i = 0; i <= 2; i++) { + level = "" + i; + if (level in clonedSource && (clonedSource[level] === void 0 || clonedSource[level] === false)) { + delete clonedSource[level]; + } + if (level in clonedSource && clonedSource[level] === true) { + clonedSource[level] = {}; + } + if (level in clonedSource && typeof clonedSource[level] == "string") { + clonedSource[level] = covertToHash(clonedSource[level], level); + } + } + return clonedSource; + } + function covertToHash(asString, level) { + return asString.split(OPTION_SEPARATOR).reduce(function(accumulator, directive) { + var parts = directive.split(OPTION_VALUE_SEPARATOR); + var name = parts[0]; + var value = parts[1]; + var normalizedValue = normalizeValue(value); + if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) { + accumulator = override(accumulator, defaults(level, normalizedValue)); + } else { + accumulator[name] = normalizedValue; + } + return accumulator; + }, {}); + } + module2.exports = { + OptimizationLevel, + optimizationLevelFrom + }; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/background.js +var require_background = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/background.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var plugin = { + level1: { + property: function background(_rule, property, options) { + var values = property.value; + if (!options.level[OptimizationLevel.One].optimizeBackground) { + return; + } + if (values.length == 1 && values[0][1] == "none") { + values[0][1] = "0 0"; + } + if (values.length == 1 && values[0][1] == "transparent") { + values[0][1] = "0 0"; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/box-shadow.js +var require_box_shadow = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/box-shadow.js"(exports, module2) { + var plugin = { + level1: { + property: function boxShadow(_rule, property) { + var values = property.value; + if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") { + property.value.splice(2); + property.dirty = true; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/border-radius.js +var require_border_radius = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/border-radius.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var plugin = { + level1: { + property: function borderRadius(_rule, property, options) { + var values = property.value; + if (!options.level[OptimizationLevel.One].optimizeBorderRadius) { + return; + } + if (values.length == 3 && values[1][1] == "/" && values[0][1] == values[2][1]) { + property.value.splice(1); + property.dirty = true; + } else if (values.length == 5 && values[2][1] == "/" && values[0][1] == values[3][1] && values[1][1] == values[4][1]) { + property.value.splice(2); + property.dirty = true; + } else if (values.length == 7 && values[3][1] == "/" && values[0][1] == values[4][1] && values[1][1] == values[5][1] && values[2][1] == values[6][1]) { + property.value.splice(3); + property.dirty = true; + } else if (values.length == 9 && values[4][1] == "/" && values[0][1] == values[5][1] && values[1][1] == values[6][1] && values[2][1] == values[7][1] && values[3][1] == values[8][1]) { + property.value.splice(4); + property.dirty = true; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/filter.js +var require_filter = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/filter.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var ALPHA_OR_CHROMA_FILTER_PATTERN = /progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/; + var NO_SPACE_AFTER_COMMA_PATTERN = /,(\S)/g; + var WHITESPACE_AROUND_EQUALS_PATTERN = / ?= ?/g; + var plugin = { + level1: { + property: function filter(_rule, property, options) { + if (!options.compatibility.properties.ieFilters) { + return; + } + if (!options.level[OptimizationLevel.One].optimizeFilter) { + return; + } + if (property.value.length == 1) { + property.value[0][1] = property.value[0][1].replace(ALPHA_OR_CHROMA_FILTER_PATTERN, function(match, filter2, suffix) { + return filter2.toLowerCase() + suffix; + }); + } + property.value[0][1] = property.value[0][1].replace(NO_SPACE_AFTER_COMMA_PATTERN, ", $1").replace(WHITESPACE_AROUND_EQUALS_PATTERN, "="); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/font-weight.js +var require_font_weight = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/font-weight.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var plugin = { + level1: { + property: function fontWeight(_rule, property, options) { + var value = property.value[0][1]; + if (!options.level[OptimizationLevel.One].optimizeFontWeight) { + return; + } + if (value == "normal") { + value = "400"; + } else if (value == "bold") { + value = "700"; + } + property.value[0][1] = value; + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/margin.js +var require_margin = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/margin.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var plugin = { + level1: { + property: function margin(_rule, property, options) { + var values = property.value; + if (!options.level[OptimizationLevel.One].replaceMultipleZeros) { + return; + } + if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") { + property.value.splice(1); + property.dirty = true; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/outline.js +var require_outline = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/outline.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var plugin = { + level1: { + property: function outline(_rule, property, options) { + var values = property.value; + if (!options.level[OptimizationLevel.One].optimizeOutline) { + return; + } + if (values.length == 1 && values[0][1] == "none") { + values[0][1] = "0"; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/padding.js +var require_padding = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/padding.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + function isNegative(value) { + return value && value[1][0] == "-" && parseFloat(value[1]) < 0; + } + var plugin = { + level1: { + property: function padding(_rule, property, options) { + var values = property.value; + if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") { + property.value.splice(1); + property.dirty = true; + } + if (options.level[OptimizationLevel.One].removeNegativePaddings && (isNegative(property.value[0]) || isNegative(property.value[1]) || isNegative(property.value[2]) || isNegative(property.value[3]))) { + property.unused = true; + } + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/property-optimizers.js +var require_property_optimizers = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/property-optimizers.js"(exports, module2) { + module2.exports = { + background: require_background().level1.property, + boxShadow: require_box_shadow().level1.property, + borderRadius: require_border_radius().level1.property, + filter: require_filter().level1.property, + fontWeight: require_font_weight().level1.property, + margin: require_margin().level1.property, + outline: require_outline().level1.property, + padding: require_padding().level1.property + }; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hex.js +var require_shorten_hex = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hex.js"(exports, module2) { + var COLORS = { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#0ff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000", + blanchedalmond: "#ffebcd", + blue: "#00f", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#0ff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkgrey: "#a9a9a9", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkslategrey: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dimgrey: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#f0f", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + grey: "#808080", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgray: "#d3d3d3", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightslategrey: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#0f0", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + rebeccapurple: "#663399", + red: "#f00", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + slategrey: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#fff", + whitesmoke: "#f5f5f5", + yellow: "#ff0", + yellowgreen: "#9acd32" + }; + var toHex = {}; + var toName = {}; + for (name in COLORS) { + hex = COLORS[name]; + if (name.length < hex.length) { + toName[hex] = name; + } else { + toHex[name] = hex; + } + } + var hex; + var name; + var toHexPattern = new RegExp("(^| |,|\\))(" + Object.keys(toHex).join("|") + ")( |,|\\)|$)", "ig"); + var toNamePattern = new RegExp("(" + Object.keys(toName).join("|") + ")([^a-f0-9]|$)", "ig"); + function hexConverter(match, prefix, colorValue, suffix) { + return prefix + toHex[colorValue.toLowerCase()] + suffix; + } + function nameConverter(match, colorValue, suffix) { + return toName[colorValue.toLowerCase()] + suffix; + } + function shortenHex(value) { + var hasHex = value.indexOf("#") > -1; + var shortened = value.replace(toHexPattern, hexConverter); + if (shortened != value) { + shortened = shortened.replace(toHexPattern, hexConverter); + } + return hasHex ? shortened.replace(toNamePattern, nameConverter) : shortened; + } + module2.exports = shortenHex; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js +var require_shorten_hsl = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js"(exports, module2) { + function hslToRgb(h, s, l) { + var r, g, b; + h %= 360; + if (h < 0) { + h += 360; + } + h = ~~h / 360; + if (s < 0) { + s = 0; + } else if (s > 100) { + s = 100; + } + s = ~~s / 100; + if (l < 0) { + l = 0; + } else if (l > 100) { + l = 100; + } + l = ~~l / 100; + if (s === 0) { + r = g = b = l; + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hueToRgb(p, q, h + 1 / 3); + g = hueToRgb(p, q, h); + b = hueToRgb(p, q, h - 1 / 3); + } + return [~~(r * 255), ~~(g * 255), ~~(b * 255)]; + } + function hueToRgb(p, q, t) { + if (t < 0) { + t += 1; + } + if (t > 1) { + t -= 1; + } + if (t < 1 / 6) { + return p + (q - p) * 6 * t; + } + if (t < 1 / 2) { + return q; + } + if (t < 2 / 3) { + return p + (q - p) * (2 / 3 - t) * 6; + } + return p; + } + function shortenHsl(hue, saturation, lightness) { + var asRgb = hslToRgb(hue, saturation, lightness); + var redAsHex = asRgb[0].toString(16); + var greenAsHex = asRgb[1].toString(16); + var blueAsHex = asRgb[2].toString(16); + return "#" + ((redAsHex.length == 1 ? "0" : "") + redAsHex) + ((greenAsHex.length == 1 ? "0" : "") + greenAsHex) + ((blueAsHex.length == 1 ? "0" : "") + blueAsHex); + } + module2.exports = shortenHsl; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-rgb.js +var require_shorten_rgb = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-rgb.js"(exports, module2) { + function shortenRgb(red, green, blue) { + var normalizedRed = Math.max(0, Math.min(parseInt(red), 255)); + var normalizedGreen = Math.max(0, Math.min(parseInt(green), 255)); + var normalizedBlue = Math.max(0, Math.min(parseInt(blue), 255)); + return "#" + ("00000" + (normalizedRed << 16 | normalizedGreen << 8 | normalizedBlue).toString(16)).slice(-6); + } + module2.exports = shortenRgb; + } +}); + +// node_modules/clean-css/lib/utils/split.js +var require_split = __commonJS({ + "node_modules/clean-css/lib/utils/split.js"(exports, module2) { + var Marker = require_marker(); + function is(value, separator, isSeparatorRegex) { + return isSeparatorRegex ? separator.test(value) : value === separator; + } + function split(value, separator) { + var openLevel = Marker.OPEN_ROUND_BRACKET; + var closeLevel = Marker.CLOSE_ROUND_BRACKET; + var level = 0; + var cursor = 0; + var lastStart = 0; + var lastValue; + var lastCharacter; + var len = value.length; + var parts = []; + var isSeparatorRegex = typeof separator == "object" && "exec" in separator; + if (!isSeparatorRegex && value.indexOf(separator) == -1) { + return [value]; + } + if (value.indexOf(openLevel) == -1) { + return value.split(separator); + } + while (cursor < len) { + if (value[cursor] == openLevel) { + level++; + } else if (value[cursor] == closeLevel) { + level--; + } + if (level === 0 && cursor > 0 && cursor + 1 < len && is(value[cursor], separator, isSeparatorRegex)) { + parts.push(value.substring(lastStart, cursor)); + if (isSeparatorRegex && separator.exec(value[cursor]).length > 1) { + parts.push(value[cursor]); + } + lastStart = cursor + 1; + } + cursor++; + } + if (lastStart < cursor + 1) { + lastValue = value.substring(lastStart); + lastCharacter = lastValue[lastValue.length - 1]; + if (is(lastCharacter, separator, isSeparatorRegex)) { + lastValue = lastValue.substring(0, lastValue.length - 1); + } + parts.push(lastValue); + } + return parts; + } + module2.exports = split; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color.js +var require_color = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color.js"(exports, module2) { + var shortenHex = require_shorten_hex(); + var shortenHsl = require_shorten_hsl(); + var shortenRgb = require_shorten_rgb(); + var split = require_split(); + var ANY_COLOR_FUNCTION_PATTERN = /(rgb|rgba|hsl|hsla)\(([^()]+)\)/gi; + var COLOR_PREFIX_PATTERN = /#|rgb|hsl/gi; + var HEX_LONG_PATTERN = /(^|[^='"])#([0-9a-f]{6})/gi; + var HEX_SHORT_PATTERN = /(^|[^='"])#([0-9a-f]{3})/gi; + var HEX_VALUE_PATTERN = /[0-9a-f]/i; + var HSL_PATTERN = /hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/gi; + var RGBA_HSLA_PATTERN = /(rgb|hsl)a?\((-?\d+),(-?\d+%?),(-?\d+%?),(0*[1-9]+[0-9]*(\.?\d*)?)\)/gi; + var RGB_PATTERN = /rgb\((-?\d+),(-?\d+),(-?\d+)\)/gi; + var TRANSPARENT_FUNCTION_PATTERN = /(?:rgba|hsla)\(0,0%?,0%?,0\)/g; + var plugin = { + level1: { + value: function color(name, value, options) { + if (!options.compatibility.properties.colors) { + return value; + } + if (!value.match(COLOR_PREFIX_PATTERN)) { + return shortenHex(value); + } + value = value.replace(RGBA_HSLA_PATTERN, function(match, colorFn, p1, p2, p3, alpha) { + return parseInt(alpha) >= 1 ? colorFn + "(" + [p1, p2, p3].join(",") + ")" : match; + }).replace(RGB_PATTERN, function(match, red, green, blue) { + return shortenRgb(red, green, blue); + }).replace(HSL_PATTERN, function(match, hue, saturation, lightness) { + return shortenHsl(hue, saturation, lightness); + }).replace(HEX_LONG_PATTERN, function(match, prefix, color2, at, inputValue) { + var suffix = inputValue[at + match.length]; + if (suffix && HEX_VALUE_PATTERN.test(suffix)) { + return match; + } + if (color2[0] == color2[1] && color2[2] == color2[3] && color2[4] == color2[5]) { + return (prefix + "#" + color2[0] + color2[2] + color2[4]).toLowerCase(); + } + return (prefix + "#" + color2).toLowerCase(); + }).replace(HEX_SHORT_PATTERN, function(match, prefix, color2) { + return prefix + "#" + color2.toLowerCase(); + }).replace(ANY_COLOR_FUNCTION_PATTERN, function(match, colorFunction, colorDef) { + var tokens = colorDef.split(","); + var colorFnLowercase = colorFunction && colorFunction.toLowerCase(); + var applies = colorFnLowercase == "hsl" && tokens.length == 3 || colorFnLowercase == "hsla" && tokens.length == 4 || colorFnLowercase == "rgb" && tokens.length === 3 && colorDef.indexOf("%") > 0 || colorFnLowercase == "rgba" && tokens.length == 4 && tokens[0].indexOf("%") > 0; + if (!applies) { + return match; + } + if (tokens[1].indexOf("%") == -1) { + tokens[1] += "%"; + } + if (tokens[2].indexOf("%") == -1) { + tokens[2] += "%"; + } + return colorFunction + "(" + tokens.join(",") + ")"; + }); + if (options.compatibility.colors.opacity && name.indexOf("background") == -1) { + value = value.replace(TRANSPARENT_FUNCTION_PATTERN, function(match) { + if (split(value, ",").pop().indexOf("gradient(") > -1) { + return match; + } + return "transparent"; + }); + } + return shortenHex(value); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/degrees.js +var require_degrees = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/degrees.js"(exports, module2) { + var ZERO_DEG_PATTERN = /\(0deg\)/g; + var plugin = { + level1: { + value: function degrees(_name, value, options) { + if (!options.compatibility.properties.zeroUnits) { + return value; + } + if (value.indexOf("0deg") == -1) { + return value; + } + return value.replace(ZERO_DEG_PATTERN, "(0)"); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/starts-as-url.js +var require_starts_as_url = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/starts-as-url.js"(exports, module2) { + var URL_PREFIX_PATTERN = /^url\(/i; + function startsAsUrl(value) { + return URL_PREFIX_PATTERN.test(value); + } + module2.exports = startsAsUrl; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/fraction.js +var require_fraction = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/fraction.js"(exports, module2) { + var split = require_split(); + var startsAsUrl = require_starts_as_url(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var EXPRESSION_PATTERN = /^expression\(.*\)$/; + var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/; + var TOKEN_SEPARATOR_PATTERN = /([\s,/])/; + var DOT_ZERO_PATTERN = /(^|\D)\.0+(\D|$)/g; + var FRACTION_PATTERN = /\.([1-9]*)0+(\D|$)/g; + var LEADING_ZERO_FRACTION_PATTERN = /(^|\D)0\.(\d)/g; + var MINUS_ZERO_FRACTION_PATTERN = /([^\w\d-]|^)-0([^.]|$)/g; + var ZERO_PREFIXED_UNIT_PATTERN = /(^|\s)0+([1-9])/g; + function optimizeRecursively(value) { + var functionTokens; + var tokens; + if (startsAsUrl(value)) { + return value; + } + if (EXPRESSION_PATTERN.test(value)) { + return value; + } + functionTokens = ANY_FUNCTION_PATTERN.exec(value); + if (!functionTokens) { + return optimizeFractions(value); + } + tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN).map(function(token) { + return optimizeRecursively(token); + }); + return functionTokens[1] + "(" + tokens.join("") + ")"; + } + function optimizeFractions(value) { + if (value.indexOf("0") == -1) { + return value; + } + if (value.indexOf("-") > -1) { + value = value.replace(MINUS_ZERO_FRACTION_PATTERN, "$10$2").replace(MINUS_ZERO_FRACTION_PATTERN, "$10$2"); + } + return value.replace(ZERO_PREFIXED_UNIT_PATTERN, "$1$2").replace(DOT_ZERO_PATTERN, "$10$2").replace(FRACTION_PATTERN, function(match, nonZeroPart, suffix) { + return (nonZeroPart.length > 0 ? "." : "") + nonZeroPart + suffix; + }).replace(LEADING_ZERO_FRACTION_PATTERN, "$1.$2"); + } + var plugin = { + level1: { + value: function fraction(name, value, options) { + if (!options.level[OptimizationLevel.One].replaceZeroUnits) { + return value; + } + return optimizeRecursively(value); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/precision.js +var require_precision = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/precision.js"(exports, module2) { + var plugin = { + level1: { + value: function precision(_name, value, options) { + if (!options.precision.enabled || value.indexOf(".") === -1) { + return value; + } + return value.replace(options.precision.decimalPointMatcher, "$1$2$3").replace(options.precision.zeroMatcher, function(match, integerPart, fractionPart, unit) { + var multiplier = options.precision.units[unit].multiplier; + var parsedInteger = parseInt(integerPart); + var integer = Number.isNaN(parsedInteger) ? 0 : parsedInteger; + var fraction = parseFloat(fractionPart); + return Math.round((integer + fraction) * multiplier) / multiplier + unit; + }); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/text-quotes.js +var require_text_quotes = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/text-quotes.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var LOCAL_PREFIX_PATTERN = /^local\(/i; + var QUOTED_PATTERN = /^('.*'|".*")$/; + var QUOTED_BUT_SAFE_PATTERN = /^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/; + var GENERIC_FONT_FAMILY_PATTERN = /^['"](?:cursive|default|emoji|fangsong|fantasy|inherit|initial|math|monospace|revert|revert-layer|sans-serif|serif|system-ui|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|unset)['"]$/; + var plugin = { + level1: { + value: function textQuotes(name, value, options) { + if ((name == "font-family" || name == "font") && GENERIC_FONT_FAMILY_PATTERN.test(value)) { + return value; + } + if (!options.level[OptimizationLevel.One].removeQuotes) { + return value; + } + if (!QUOTED_PATTERN.test(value) && !LOCAL_PREFIX_PATTERN.test(value)) { + return value; + } + return QUOTED_BUT_SAFE_PATTERN.test(value) ? value.substring(1, value.length - 1) : value; + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/time.js +var require_time = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/time.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var TIME_VALUE = /^(-?[\d.]+)(m?s)$/; + var plugin = { + level1: { + value: function time(name, value, options) { + if (!options.level[OptimizationLevel.One].replaceTimeUnits) { + return value; + } + if (!TIME_VALUE.test(value)) { + return value; + } + return value.replace(TIME_VALUE, function(match, val, unit) { + var newValue; + if (unit == "ms") { + newValue = parseInt(val) / 1e3 + "s"; + } else if (unit == "s") { + newValue = parseFloat(val) * 1e3 + "ms"; + } + return newValue.length < match.length ? newValue : match; + }); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/unit.js +var require_unit = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/unit.js"(exports, module2) { + var WHOLE_PIXEL_VALUE = /(?:^|\s|\()(-?\d+)px/; + var plugin = { + level1: { + value: function unit(_name, value, options) { + if (!WHOLE_PIXEL_VALUE.test(value)) { + return value; + } + return value.replace(WHOLE_PIXEL_VALUE, function(match, val) { + var newValue; + var intVal = parseInt(val); + if (intVal === 0) { + return match; + } + if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.pt && intVal * 3 % 4 === 0) { + newValue = intVal * 3 / 4 + "pt"; + } + if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.pc && intVal % 16 === 0) { + newValue = intVal / 16 + "pc"; + } + if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.in && intVal % 96 === 0) { + newValue = intVal / 96 + "in"; + } + if (newValue) { + newValue = match.substring(0, match.indexOf(val)) + newValue; + } + return newValue && newValue.length < match.length ? newValue : match; + }); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-prefix.js +var require_url_prefix = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-prefix.js"(exports, module2) { + var startsAsUrl = require_starts_as_url(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var URL_PREFIX_PATTERN = /^url\(/i; + var plugin = { + level1: { + value: function urlPrefix(_name, value, options) { + if (!options.level[OptimizationLevel.One].normalizeUrls) { + return value; + } + if (!startsAsUrl(value)) { + return value; + } + return value.replace(URL_PREFIX_PATTERN, "url("); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-quotes.js +var require_url_quotes = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-quotes.js"(exports, module2) { + var QUOTED_URL_PATTERN = /^url\(['"].+['"]\)$/; + var QUOTED_URL_WITH_WHITESPACE_PATTERN = /^url\(['"].*[*\s()'"].*['"]\)$/; + var QUOTES_PATTERN = /["']/g; + var URL_DATA_PATTERN = /^url\(['"]data:[^;]+;charset/; + var plugin = { + level1: { + value: function urlQuotes(_name, value, options) { + if (options.compatibility.properties.urlQuotes) { + return value; + } + return QUOTED_URL_PATTERN.test(value) && !QUOTED_URL_WITH_WHITESPACE_PATTERN.test(value) && !URL_DATA_PATTERN.test(value) ? value.replace(QUOTES_PATTERN, "") : value; + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-whitespace.js +var require_url_whitespace = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-whitespace.js"(exports, module2) { + var startsAsUrl = require_starts_as_url(); + var WHITESPACE_PATTERN = /\\?\n|\\?\r\n/g; + var WHITESPACE_PREFIX_PATTERN = /(\()\s+/g; + var WHITESPACE_SUFFIX_PATTERN = /\s+(\))/g; + var plugin = { + level1: { + value: function urlWhitespace(_name, value) { + if (!startsAsUrl(value)) { + return value; + } + return value.replace(WHITESPACE_PATTERN, "").replace(WHITESPACE_PREFIX_PATTERN, "$1").replace(WHITESPACE_SUFFIX_PATTERN, "$1"); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/whitespace.js +var require_whitespace = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/whitespace.js"(exports, module2) { + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var Marker = require_marker(); + var CALC_DIVISION_WHITESPACE_PATTERN = /\) ?\/ ?/g; + var COMMA_AND_SPACE_PATTERN = /, /g; + var LINE_BREAK_PATTERN = /\r?\n/g; + var MULTI_WHITESPACE_PATTERN = /\s+/g; + var FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN = /\s+(;?\))/g; + var FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN = /(\(;?)\s+/g; + var VARIABLE_NAME_PATTERN = /^--\S+$/; + var VARIABLE_VALUE_PATTERN = /^var\(\s*--\S+\s*\)$/; + var plugin = { + level1: { + value: function whitespace(name, value, options) { + if (!options.level[OptimizationLevel.One].removeWhitespace) { + return value; + } + if (VARIABLE_NAME_PATTERN.test(name) && !VARIABLE_VALUE_PATTERN.test(value)) { + return value; + } + if (value.indexOf(" ") == -1 && value.indexOf("\n") == -1 || value.indexOf("expression") === 0) { + return value; + } + if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) { + return value; + } + value = value.replace(LINE_BREAK_PATTERN, ""); + value = value.replace(MULTI_WHITESPACE_PATTERN, " "); + if (value.indexOf("calc") > -1) { + value = value.replace(CALC_DIVISION_WHITESPACE_PATTERN, ")/ "); + } + return value.replace(FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN, "$1").replace(FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN, "$1").replace(COMMA_AND_SPACE_PATTERN, ","); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/zero.js +var require_zero = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/zero.js"(exports, module2) { + var split = require_split(); + var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/; + var SKIP_FUNCTION_PATTERN = /^(?:-moz-calc|-webkit-calc|calc|rgb|hsl|rgba|hsla|min|max|clamp|expression)\(/; + var TOKEN_SEPARATOR_PATTERN = /([\s,/])/; + function removeRecursively(value, options) { + var functionTokens; + var tokens; + if (SKIP_FUNCTION_PATTERN.test(value)) { + return value; + } + functionTokens = ANY_FUNCTION_PATTERN.exec(value); + if (!functionTokens) { + return removeZeros(value, options); + } + tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN).map(function(token) { + return removeRecursively(token, options); + }); + return functionTokens[1] + "(" + tokens.join("") + ")"; + } + function removeZeros(value, options) { + return value.replace(options.unitsRegexp, "$10$2").replace(options.unitsRegexp, "$10$2"); + } + var plugin = { + level1: { + value: function zero(name, value, options) { + if (!options.compatibility.properties.zeroUnits) { + return value; + } + if (value.indexOf("%") > 0 && (name == "height" || name == "max-height" || name == "width" || name == "max-width")) { + return value; + } + return removeRecursively(value, options); + } + } + }; + module2.exports = plugin; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/value-optimizers.js +var require_value_optimizers = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/value-optimizers.js"(exports, module2) { + module2.exports = { + color: require_color().level1.value, + degrees: require_degrees().level1.value, + fraction: require_fraction().level1.value, + precision: require_precision().level1.value, + textQuotes: require_text_quotes().level1.value, + time: require_time().level1.value, + unit: require_unit().level1.value, + urlPrefix: require_url_prefix().level1.value, + urlQuotes: require_url_quotes().level1.value, + urlWhiteSpace: require_url_whitespace().level1.value, + whiteSpace: require_whitespace().level1.value, + zero: require_zero().level1.value + }; + } +}); + +// node_modules/clean-css/lib/optimizer/configuration.js +var require_configuration = __commonJS({ + "node_modules/clean-css/lib/optimizer/configuration.js"(exports, module2) { + var breakUp = require_break_up(); + var canOverride = require_can_override(); + var restore = require_restore(); + var propertyOptimizers = require_property_optimizers(); + var valueOptimizers = require_value_optimizers(); + var override = require_override(); + var configuration = { + animation: { + canOverride: canOverride.generic.components([ + canOverride.generic.time, + canOverride.generic.timingFunction, + canOverride.generic.time, + canOverride.property.animationIterationCount, + canOverride.property.animationDirection, + canOverride.property.animationFillMode, + canOverride.property.animationPlayState, + canOverride.property.animationName + ]), + components: [ + "animation-duration", + "animation-timing-function", + "animation-delay", + "animation-iteration-count", + "animation-direction", + "animation-fill-mode", + "animation-play-state", + "animation-name" + ], + breakUp: breakUp.multiplex(breakUp.animation), + defaultValue: "none", + restore: restore.multiplex(restore.withoutDefaults), + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.textQuotes, + valueOptimizers.time, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-delay": { + canOverride: canOverride.generic.time, + componentOf: [ + "animation" + ], + defaultValue: "0s", + intoMultiplexMode: "real", + valueOptimizers: [ + valueOptimizers.time, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-direction": { + canOverride: canOverride.property.animationDirection, + componentOf: [ + "animation" + ], + defaultValue: "normal", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-duration": { + canOverride: canOverride.generic.time, + componentOf: [ + "animation" + ], + defaultValue: "0s", + intoMultiplexMode: "real", + keepUnlessDefault: "animation-delay", + valueOptimizers: [ + valueOptimizers.time, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-fill-mode": { + canOverride: canOverride.property.animationFillMode, + componentOf: [ + "animation" + ], + defaultValue: "none", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-iteration-count": { + canOverride: canOverride.property.animationIterationCount, + componentOf: [ + "animation" + ], + defaultValue: "1", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-name": { + canOverride: canOverride.property.animationName, + componentOf: [ + "animation" + ], + defaultValue: "none", + intoMultiplexMode: "real", + valueOptimizers: [ + valueOptimizers.textQuotes + ], + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-play-state": { + canOverride: canOverride.property.animationPlayState, + componentOf: [ + "animation" + ], + defaultValue: "running", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + "animation-timing-function": { + canOverride: canOverride.generic.timingFunction, + componentOf: [ + "animation" + ], + defaultValue: "ease", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-o-", + "-webkit-" + ] + }, + background: { + canOverride: canOverride.generic.components([ + canOverride.generic.image, + canOverride.property.backgroundPosition, + canOverride.property.backgroundSize, + canOverride.property.backgroundRepeat, + canOverride.property.backgroundAttachment, + canOverride.property.backgroundOrigin, + canOverride.property.backgroundClip, + canOverride.generic.color + ]), + components: [ + "background-image", + "background-position", + "background-size", + "background-repeat", + "background-attachment", + "background-origin", + "background-clip", + "background-color" + ], + breakUp: breakUp.multiplex(breakUp.background), + defaultValue: "0 0", + propertyOptimizer: propertyOptimizers.background, + restore: restore.multiplex(restore.background), + shortestValue: "0", + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.urlWhiteSpace, + valueOptimizers.fraction, + valueOptimizers.zero, + valueOptimizers.color, + valueOptimizers.urlPrefix, + valueOptimizers.urlQuotes + ] + }, + "background-attachment": { + canOverride: canOverride.property.backgroundAttachment, + componentOf: [ + "background" + ], + defaultValue: "scroll", + intoMultiplexMode: "real" + }, + "background-clip": { + canOverride: canOverride.property.backgroundClip, + componentOf: [ + "background" + ], + defaultValue: "border-box", + intoMultiplexMode: "real", + shortestValue: "border-box" + }, + "background-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "background" + ], + defaultValue: "transparent", + intoMultiplexMode: "real", + multiplexLastOnly: true, + nonMergeableValue: "none", + shortestValue: "red", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "background-image": { + canOverride: canOverride.generic.image, + componentOf: [ + "background" + ], + defaultValue: "none", + intoMultiplexMode: "default", + valueOptimizers: [ + valueOptimizers.urlWhiteSpace, + valueOptimizers.urlPrefix, + valueOptimizers.urlQuotes, + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero, + valueOptimizers.color + ] + }, + "background-origin": { + canOverride: canOverride.property.backgroundOrigin, + componentOf: [ + "background" + ], + defaultValue: "padding-box", + intoMultiplexMode: "real", + shortestValue: "border-box" + }, + "background-position": { + canOverride: canOverride.property.backgroundPosition, + componentOf: [ + "background" + ], + defaultValue: ["0", "0"], + doubleValues: true, + intoMultiplexMode: "real", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "background-repeat": { + canOverride: canOverride.property.backgroundRepeat, + componentOf: [ + "background" + ], + defaultValue: ["repeat"], + doubleValues: true, + intoMultiplexMode: "real" + }, + "background-size": { + canOverride: canOverride.property.backgroundSize, + componentOf: [ + "background" + ], + defaultValue: ["auto"], + doubleValues: true, + intoMultiplexMode: "real", + shortestValue: "0 0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + bottom: { + canOverride: canOverride.property.bottom, + defaultValue: "auto", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + border: { + breakUp: breakUp.border, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.property.borderStyle, + canOverride.generic.color + ]), + components: [ + "border-width", + "border-style", + "border-color" + ], + defaultValue: "none", + overridesShorthands: [ + "border-bottom", + "border-left", + "border-right", + "border-top" + ], + restore: restore.withoutDefaults, + shorthand: true, + shorthandComponents: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.zero, + valueOptimizers.color + ] + }, + "border-bottom": { + breakUp: breakUp.border, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.property.borderStyle, + canOverride.generic.color + ]), + components: [ + "border-bottom-width", + "border-bottom-style", + "border-bottom-color" + ], + defaultValue: "none", + restore: restore.withoutDefaults, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.zero, + valueOptimizers.color + ] + }, + "border-bottom-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "border-bottom", + "border-color" + ], + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-bottom-left-radius": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-radius" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.borderRadius, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-" + ] + }, + "border-bottom-right-radius": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-radius" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.borderRadius, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-" + ] + }, + "border-bottom-style": { + canOverride: canOverride.property.borderStyle, + componentOf: [ + "border-bottom", + "border-style" + ], + defaultValue: "none" + }, + "border-bottom-width": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-bottom", + "border-width" + ], + defaultValue: "medium", + oppositeTo: "border-top-width", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "border-collapse": { + canOverride: canOverride.property.borderCollapse, + defaultValue: "separate" + }, + "border-color": { + breakUp: breakUp.fourValues, + canOverride: canOverride.generic.components([ + canOverride.generic.color, + canOverride.generic.color, + canOverride.generic.color, + canOverride.generic.color + ]), + componentOf: [ + "border" + ], + components: [ + "border-top-color", + "border-right-color", + "border-bottom-color", + "border-left-color" + ], + defaultValue: "none", + restore: restore.fourValues, + shortestValue: "red", + shorthand: true, + singleTypeComponents: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-left": { + breakUp: breakUp.border, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.property.borderStyle, + canOverride.generic.color + ]), + components: [ + "border-left-width", + "border-left-style", + "border-left-color" + ], + defaultValue: "none", + restore: restore.withoutDefaults, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.zero, + valueOptimizers.color + ] + }, + "border-left-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "border-color", + "border-left" + ], + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-left-style": { + canOverride: canOverride.property.borderStyle, + componentOf: [ + "border-left", + "border-style" + ], + defaultValue: "none" + }, + "border-left-width": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-left", + "border-width" + ], + defaultValue: "medium", + oppositeTo: "border-right-width", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "border-radius": { + breakUp: breakUp.borderRadius, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit + ]), + components: [ + "border-top-left-radius", + "border-top-right-radius", + "border-bottom-right-radius", + "border-bottom-left-radius" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.borderRadius, + restore: restore.borderRadius, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-" + ] + }, + "border-right": { + breakUp: breakUp.border, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.property.borderStyle, + canOverride.generic.color + ]), + components: [ + "border-right-width", + "border-right-style", + "border-right-color" + ], + defaultValue: "none", + restore: restore.withoutDefaults, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-right-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "border-color", + "border-right" + ], + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-right-style": { + canOverride: canOverride.property.borderStyle, + componentOf: [ + "border-right", + "border-style" + ], + defaultValue: "none" + }, + "border-right-width": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-right", + "border-width" + ], + defaultValue: "medium", + oppositeTo: "border-left-width", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "border-style": { + breakUp: breakUp.fourValues, + canOverride: canOverride.generic.components([ + canOverride.property.borderStyle, + canOverride.property.borderStyle, + canOverride.property.borderStyle, + canOverride.property.borderStyle + ]), + componentOf: [ + "border" + ], + components: [ + "border-top-style", + "border-right-style", + "border-bottom-style", + "border-left-style" + ], + defaultValue: "none", + restore: restore.fourValues, + shorthand: true, + singleTypeComponents: true + }, + "border-top": { + breakUp: breakUp.border, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.property.borderStyle, + canOverride.generic.color + ]), + components: [ + "border-top-width", + "border-top-style", + "border-top-color" + ], + defaultValue: "none", + restore: restore.withoutDefaults, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.zero, + valueOptimizers.color, + valueOptimizers.unit + ] + }, + "border-top-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "border-color", + "border-top" + ], + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "border-top-left-radius": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-radius" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.borderRadius, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-" + ] + }, + "border-top-right-radius": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-radius" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.borderRadius, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-o-" + ] + }, + "border-top-style": { + canOverride: canOverride.property.borderStyle, + componentOf: [ + "border-style", + "border-top" + ], + defaultValue: "none" + }, + "border-top-width": { + canOverride: canOverride.generic.unit, + componentOf: [ + "border-top", + "border-width" + ], + defaultValue: "medium", + oppositeTo: "border-bottom-width", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "border-width": { + breakUp: breakUp.fourValues, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit + ]), + componentOf: [ + "border" + ], + components: [ + "border-top-width", + "border-right-width", + "border-bottom-width", + "border-left-width" + ], + defaultValue: "medium", + restore: restore.fourValues, + shortestValue: "0", + shorthand: true, + singleTypeComponents: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "box-shadow": { + propertyOptimizer: propertyOptimizers.boxShadow, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero, + valueOptimizers.color + ], + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + clear: { + canOverride: canOverride.property.clear, + defaultValue: "none" + }, + clip: { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + color: { + canOverride: canOverride.generic.color, + defaultValue: "transparent", + shortestValue: "red", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "column-gap": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + cursor: { + canOverride: canOverride.property.cursor, + defaultValue: "auto" + }, + display: { canOverride: canOverride.property.display }, + filter: { + propertyOptimizer: propertyOptimizers.filter, + valueOptimizers: [ + valueOptimizers.fraction + ] + }, + float: { + canOverride: canOverride.property.float, + defaultValue: "none" + }, + font: { + breakUp: breakUp.font, + canOverride: canOverride.generic.components([ + canOverride.property.fontStyle, + canOverride.property.fontVariant, + canOverride.property.fontWeight, + canOverride.property.fontStretch, + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.property.fontFamily + ]), + components: [ + "font-style", + "font-variant", + "font-weight", + "font-stretch", + "font-size", + "line-height", + "font-family" + ], + restore: restore.font, + shorthand: true, + valueOptimizers: [ + valueOptimizers.textQuotes + ] + }, + "font-family": { + canOverride: canOverride.property.fontFamily, + defaultValue: "user|agent|specific", + valueOptimizers: [ + valueOptimizers.textQuotes + ] + }, + "font-size": { + canOverride: canOverride.generic.unit, + defaultValue: "medium", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.fraction + ] + }, + "font-stretch": { + canOverride: canOverride.property.fontStretch, + defaultValue: "normal" + }, + "font-style": { + canOverride: canOverride.property.fontStyle, + defaultValue: "normal" + }, + "font-variant": { + canOverride: canOverride.property.fontVariant, + defaultValue: "normal" + }, + "font-weight": { + canOverride: canOverride.property.fontWeight, + defaultValue: "normal", + propertyOptimizer: propertyOptimizers.fontWeight, + shortestValue: "400" + }, + gap: { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + height: { + canOverride: canOverride.generic.unit, + defaultValue: "auto", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + left: { + canOverride: canOverride.property.left, + defaultValue: "auto", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "letter-spacing": { + valueOptimizers: [ + valueOptimizers.fraction, + valueOptimizers.zero + ] + }, + "line-height": { + canOverride: canOverride.generic.unitOrNumber, + defaultValue: "normal", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.fraction, + valueOptimizers.zero + ] + }, + "list-style": { + canOverride: canOverride.generic.components([ + canOverride.property.listStyleType, + canOverride.property.listStylePosition, + canOverride.property.listStyleImage + ]), + components: [ + "list-style-type", + "list-style-position", + "list-style-image" + ], + breakUp: breakUp.listStyle, + restore: restore.withoutDefaults, + defaultValue: "outside", + shortestValue: "none", + shorthand: true + }, + "list-style-image": { + canOverride: canOverride.generic.image, + componentOf: [ + "list-style" + ], + defaultValue: "none" + }, + "list-style-position": { + canOverride: canOverride.property.listStylePosition, + componentOf: [ + "list-style" + ], + defaultValue: "outside", + shortestValue: "inside" + }, + "list-style-type": { + canOverride: canOverride.property.listStyleType, + componentOf: [ + "list-style" + ], + defaultValue: "decimal|disc", + shortestValue: "none" + }, + margin: { + breakUp: breakUp.fourValues, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit + ]), + components: [ + "margin-top", + "margin-right", + "margin-bottom", + "margin-left" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.margin, + restore: restore.fourValues, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-bottom": { + canOverride: canOverride.generic.unit, + componentOf: [ + "margin" + ], + defaultValue: "0", + oppositeTo: "margin-top", + propertyOptimizer: propertyOptimizers.margin, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-inline-end": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-inline-start": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-left": { + canOverride: canOverride.generic.unit, + componentOf: [ + "margin" + ], + defaultValue: "0", + oppositeTo: "margin-right", + propertyOptimizer: propertyOptimizers.margin, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-right": { + canOverride: canOverride.generic.unit, + componentOf: [ + "margin" + ], + defaultValue: "0", + oppositeTo: "margin-left", + propertyOptimizer: propertyOptimizers.margin, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "margin-top": { + canOverride: canOverride.generic.unit, + componentOf: [ + "margin" + ], + defaultValue: "0", + oppositeTo: "margin-bottom", + propertyOptimizer: propertyOptimizers.margin, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "max-height": { + canOverride: canOverride.generic.unit, + defaultValue: "none", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "max-width": { + canOverride: canOverride.generic.unit, + defaultValue: "none", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "min-height": { + canOverride: canOverride.generic.unit, + defaultValue: "0", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "min-width": { + canOverride: canOverride.generic.unit, + defaultValue: "0", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + opacity: { + valueOptimizers: [ + valueOptimizers.fraction, + valueOptimizers.precision + ] + }, + outline: { + canOverride: canOverride.generic.components([ + canOverride.generic.color, + canOverride.property.outlineStyle, + canOverride.generic.unit + ]), + components: [ + "outline-color", + "outline-style", + "outline-width" + ], + breakUp: breakUp.outline, + restore: restore.withoutDefaults, + defaultValue: "0", + propertyOptimizer: propertyOptimizers.outline, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "outline-color": { + canOverride: canOverride.generic.color, + componentOf: [ + "outline" + ], + defaultValue: "invert", + shortestValue: "red", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.color + ] + }, + "outline-style": { + canOverride: canOverride.property.outlineStyle, + componentOf: [ + "outline" + ], + defaultValue: "none" + }, + "outline-width": { + canOverride: canOverride.generic.unit, + componentOf: [ + "outline" + ], + defaultValue: "medium", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + overflow: { + canOverride: canOverride.property.overflow, + defaultValue: "visible" + }, + "overflow-x": { + canOverride: canOverride.property.overflow, + defaultValue: "visible" + }, + "overflow-y": { + canOverride: canOverride.property.overflow, + defaultValue: "visible" + }, + padding: { + breakUp: breakUp.fourValues, + canOverride: canOverride.generic.components([ + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit, + canOverride.generic.unit + ]), + components: [ + "padding-top", + "padding-right", + "padding-bottom", + "padding-left" + ], + defaultValue: "0", + propertyOptimizer: propertyOptimizers.padding, + restore: restore.fourValues, + shorthand: true, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "padding-bottom": { + canOverride: canOverride.generic.unit, + componentOf: [ + "padding" + ], + defaultValue: "0", + oppositeTo: "padding-top", + propertyOptimizer: propertyOptimizers.padding, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "padding-left": { + canOverride: canOverride.generic.unit, + componentOf: [ + "padding" + ], + defaultValue: "0", + oppositeTo: "padding-right", + propertyOptimizer: propertyOptimizers.padding, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "padding-right": { + canOverride: canOverride.generic.unit, + componentOf: [ + "padding" + ], + defaultValue: "0", + oppositeTo: "padding-left", + propertyOptimizer: propertyOptimizers.padding, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "padding-top": { + canOverride: canOverride.generic.unit, + componentOf: [ + "padding" + ], + defaultValue: "0", + oppositeTo: "padding-bottom", + propertyOptimizer: propertyOptimizers.padding, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + position: { + canOverride: canOverride.property.position, + defaultValue: "static" + }, + right: { + canOverride: canOverride.property.right, + defaultValue: "auto", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "row-gap": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + src: { + valueOptimizers: [ + valueOptimizers.urlWhiteSpace, + valueOptimizers.urlPrefix, + valueOptimizers.urlQuotes + ] + }, + "stroke-width": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "text-align": { + canOverride: canOverride.property.textAlign, + defaultValue: "left|right" + }, + "text-decoration": { + canOverride: canOverride.property.textDecoration, + defaultValue: "none" + }, + "text-indent": { + canOverride: canOverride.property.textOverflow, + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.fraction, + valueOptimizers.zero + ] + }, + "text-overflow": { + canOverride: canOverride.property.textOverflow, + defaultValue: "none" + }, + "text-shadow": { + canOverride: canOverride.property.textShadow, + defaultValue: "none", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.zero, + valueOptimizers.color + ] + }, + top: { + canOverride: canOverride.property.top, + defaultValue: "auto", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + transform: { + canOverride: canOverride.property.transform, + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.degrees, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ], + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + transition: { + breakUp: breakUp.multiplex(breakUp.transition), + canOverride: canOverride.generic.components([ + canOverride.property.transitionProperty, + canOverride.generic.time, + canOverride.generic.timingFunction, + canOverride.generic.time + ]), + components: [ + "transition-property", + "transition-duration", + "transition-timing-function", + "transition-delay" + ], + defaultValue: "none", + restore: restore.multiplex(restore.withoutDefaults), + shorthand: true, + valueOptimizers: [ + valueOptimizers.time, + valueOptimizers.fraction + ], + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + "transition-delay": { + canOverride: canOverride.generic.time, + componentOf: [ + "transition" + ], + defaultValue: "0s", + intoMultiplexMode: "real", + valueOptimizers: [ + valueOptimizers.time + ], + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + "transition-duration": { + canOverride: canOverride.generic.time, + componentOf: [ + "transition" + ], + defaultValue: "0s", + intoMultiplexMode: "real", + keepUnlessDefault: "transition-delay", + valueOptimizers: [ + valueOptimizers.time, + valueOptimizers.fraction + ], + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + "transition-property": { + canOverride: canOverride.generic.propertyName, + componentOf: [ + "transition" + ], + defaultValue: "all", + intoMultiplexMode: "placeholder", + placeholderValue: "_", + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + "transition-timing-function": { + canOverride: canOverride.generic.timingFunction, + componentOf: [ + "transition" + ], + defaultValue: "ease", + intoMultiplexMode: "real", + vendorPrefixes: [ + "-moz-", + "-ms-", + "-o-", + "-webkit-" + ] + }, + "vertical-align": { + canOverride: canOverride.property.verticalAlign, + defaultValue: "baseline", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + visibility: { + canOverride: canOverride.property.visibility, + defaultValue: "visible" + }, + "-webkit-tap-highlight-color": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.color + ] + }, + "-webkit-margin-end": { + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "white-space": { + canOverride: canOverride.property.whiteSpace, + defaultValue: "normal" + }, + width: { + canOverride: canOverride.generic.unit, + defaultValue: "auto", + shortestValue: "0", + valueOptimizers: [ + valueOptimizers.whiteSpace, + valueOptimizers.fraction, + valueOptimizers.precision, + valueOptimizers.unit, + valueOptimizers.zero + ] + }, + "z-index": { + canOverride: canOverride.property.zIndex, + defaultValue: "auto" + } + }; + var vendorPrefixedConfiguration = {}; + function cloneDescriptor(propertyName2, prefix2) { + var clonedDescriptor2 = override(configuration[propertyName2], {}); + if ("componentOf" in clonedDescriptor2) { + clonedDescriptor2.componentOf = clonedDescriptor2.componentOf.map(function(shorthandName) { + return prefix2 + shorthandName; + }); + } + if ("components" in clonedDescriptor2) { + clonedDescriptor2.components = clonedDescriptor2.components.map(function(longhandName) { + return prefix2 + longhandName; + }); + } + if ("keepUnlessDefault" in clonedDescriptor2) { + clonedDescriptor2.keepUnlessDefault = prefix2 + clonedDescriptor2.keepUnlessDefault; + } + return clonedDescriptor2; + } + for (propertyName in configuration) { + descriptor = configuration[propertyName]; + if (!("vendorPrefixes" in descriptor)) { + continue; + } + for (i = 0; i < descriptor.vendorPrefixes.length; i++) { + prefix = descriptor.vendorPrefixes[i]; + clonedDescriptor = cloneDescriptor(propertyName, prefix); + delete clonedDescriptor.vendorPrefixes; + vendorPrefixedConfiguration[prefix + propertyName] = clonedDescriptor; + } + delete descriptor.vendorPrefixes; + } + var descriptor; + var prefix; + var clonedDescriptor; + var i; + var propertyName; + module2.exports = override(configuration, vendorPrefixedConfiguration); + } +}); + +// node_modules/clean-css/lib/writer/helpers.js +var require_helpers = __commonJS({ + "node_modules/clean-css/lib/writer/helpers.js"(exports, module2) { + var emptyCharacter = ""; + var Breaks = require_format().Breaks; + var Spaces = require_format().Spaces; + var Marker = require_marker(); + var Token = require_token(); + function supportsAfterClosingBrace(token) { + return token[1][1] == "background" || token[1][1] == "transform" || token[1][1] == "src"; + } + function afterClosingBrace(token, valueIndex) { + return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET; + } + function afterComma(token, valueIndex) { + return token[valueIndex][1] == Marker.COMMA; + } + function afterSlash(token, valueIndex) { + return token[valueIndex][1] == Marker.FORWARD_SLASH; + } + function beforeComma(token, valueIndex) { + return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA; + } + function beforeSlash(token, valueIndex) { + return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH; + } + function inFilter(token) { + return token[1][1] == "filter" || token[1][1] == "-ms-filter"; + } + function disallowsSpace(context, token, valueIndex) { + return !context.spaceAfterClosingBrace && supportsAfterClosingBrace(token) && afterClosingBrace(token, valueIndex) || beforeSlash(token, valueIndex) || afterSlash(token, valueIndex) || beforeComma(token, valueIndex) || afterComma(token, valueIndex); + } + function rules(context, tokens) { + var store = context.store; + for (var i = 0, l = tokens.length; i < l; i++) { + store(context, tokens[i]); + if (i < l - 1) { + store(context, comma(context)); + } + } + } + function body(context, tokens) { + var lastPropertyAt = lastPropertyIndex(tokens); + for (var i = 0, l = tokens.length; i < l; i++) { + property(context, tokens, i, lastPropertyAt); + } + } + function lastPropertyIndex(tokens) { + var index = tokens.length - 1; + for (; index >= 0; index--) { + if (tokens[index][0] != Token.COMMENT) { + break; + } + } + return index; + } + function property(context, tokens, position, lastPropertyAt) { + var store = context.store; + var token = tokens[position]; + var propertyValue = token[2]; + var isPropertyBlock = propertyValue && propertyValue[0] === Token.PROPERTY_BLOCK; + var needsSemicolon; + if (context.format) { + if (context.format.semicolonAfterLastProperty || isPropertyBlock) { + needsSemicolon = true; + } else if (position < lastPropertyAt) { + needsSemicolon = true; + } else { + needsSemicolon = false; + } + } else { + needsSemicolon = position < lastPropertyAt || isPropertyBlock; + } + var isLast = position === lastPropertyAt; + switch (token[0]) { + case Token.AT_RULE: + store(context, token); + store(context, semicolon(context, Breaks.AfterProperty, false)); + break; + case Token.AT_RULE_BLOCK: + rules(context, token[1]); + store(context, openBrace(context, Breaks.AfterRuleBegins, true)); + body(context, token[2]); + store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); + break; + case Token.COMMENT: + store(context, token); + store(context, breakFor(context, Breaks.AfterComment) + context.indentWith); + break; + case Token.PROPERTY: + store(context, token[1]); + store(context, colon(context)); + if (propertyValue) { + value(context, token); + } + store(context, needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter); + break; + case Token.RAW: + store(context, token); + } + } + function value(context, token) { + var store = context.store; + var j, m; + if (token[2][0] == Token.PROPERTY_BLOCK) { + store(context, openBrace(context, Breaks.AfterBlockBegins, false)); + body(context, token[2][1]); + store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true)); + } else { + for (j = 2, m = token.length; j < m; j++) { + store(context, token[j]); + if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) { + store(context, Marker.SPACE); + } + } + } + } + function breakFor(context, where) { + return context.format ? context.format.breaks[where] : emptyCharacter; + } + function allowsSpace(context, where) { + return context.format && context.format.spaces[where]; + } + function openBrace(context, where, needsPrefixSpace) { + if (context.format) { + context.indentBy += context.format.indentBy; + context.indentWith = context.format.indentWith.repeat(context.indentBy); + return (needsPrefixSpace && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter) + Marker.OPEN_CURLY_BRACKET + breakFor(context, where) + context.indentWith; + } + return Marker.OPEN_CURLY_BRACKET; + } + function closeBrace(context, where, beforeBlockEnd, isLast) { + if (context.format) { + context.indentBy -= context.format.indentBy; + context.indentWith = context.format.indentWith.repeat(context.indentBy); + return (beforeBlockEnd ? breakFor(context, Breaks.BeforeBlockEnds) : breakFor(context, Breaks.AfterProperty)) + context.indentWith + Marker.CLOSE_CURLY_BRACKET + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith); + } + return Marker.CLOSE_CURLY_BRACKET; + } + function colon(context) { + return context.format ? Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter) : Marker.COLON; + } + function semicolon(context, where, isLast) { + return context.format ? Marker.SEMICOLON + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith) : Marker.SEMICOLON; + } + function comma(context) { + return context.format ? Marker.COMMA + breakFor(context, Breaks.BetweenSelectors) + context.indentWith : Marker.COMMA; + } + function all(context, tokens) { + var store = context.store; + var token; + var isLast; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + isLast = i == l - 1; + switch (token[0]) { + case Token.AT_RULE: + store(context, token); + store(context, semicolon(context, Breaks.AfterAtRule, isLast)); + break; + case Token.AT_RULE_BLOCK: + rules(context, token[1]); + store(context, openBrace(context, Breaks.AfterRuleBegins, true)); + body(context, token[2]); + store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); + break; + case Token.NESTED_BLOCK: + rules(context, token[1]); + store(context, openBrace(context, Breaks.AfterBlockBegins, true)); + all(context, token[2]); + store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast)); + break; + case Token.COMMENT: + store(context, token); + store(context, breakFor(context, Breaks.AfterComment) + context.indentWith); + break; + case Token.RAW: + store(context, token); + break; + case Token.RULE: + rules(context, token[1]); + store(context, openBrace(context, Breaks.AfterRuleBegins, true)); + body(context, token[2]); + store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); + break; + } + } + } + module2.exports = { + all, + body, + property, + rules, + value + }; + } +}); + +// node_modules/clean-css/lib/writer/one-time.js +var require_one_time = __commonJS({ + "node_modules/clean-css/lib/writer/one-time.js"(exports, module2) { + var helpers = require_helpers(); + function store(serializeContext, token) { + serializeContext.output.push(typeof token == "string" ? token : token[1]); + } + function context() { + var newContext = { + output: [], + store + }; + return newContext; + } + function all(tokens) { + var oneTimeContext = context(); + helpers.all(oneTimeContext, tokens); + return oneTimeContext.output.join(""); + } + function body(tokens) { + var oneTimeContext = context(); + helpers.body(oneTimeContext, tokens); + return oneTimeContext.output.join(""); + } + function property(tokens, position) { + var oneTimeContext = context(); + helpers.property(oneTimeContext, tokens, position, true); + return oneTimeContext.output.join(""); + } + function rules(tokens) { + var oneTimeContext = context(); + helpers.rules(oneTimeContext, tokens); + return oneTimeContext.output.join(""); + } + function value(tokens) { + var oneTimeContext = context(); + helpers.value(oneTimeContext, tokens); + return oneTimeContext.output.join(""); + } + module2.exports = { + all, + body, + property, + rules, + value + }; + } +}); + +// node_modules/clean-css/lib/optimizer/level-1/optimize.js +var require_optimize2 = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-1/optimize.js"(exports, module2) { + var sortSelectors = require_sort_selectors(); + var tidyRules = require_tidy_rules(); + var tidyBlock = require_tidy_block(); + var tidyAtRule = require_tidy_at_rule(); + var Hack = require_hack(); + var removeUnused = require_remove_unused(); + var restoreFromOptimizing = require_restore_from_optimizing(); + var wrapForOptimizing = require_wrap_for_optimizing().all; + var configuration = require_configuration(); + var optimizers = require_value_optimizers(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var Token = require_token(); + var Marker = require_marker(); + var formatPosition = require_format_position(); + var serializeRules = require_one_time().rules; + var CHARSET_TOKEN = "@charset"; + var CHARSET_REGEXP = new RegExp("^" + CHARSET_TOKEN, "i"); + var DEFAULT_ROUNDING_PRECISION = require_rounding_precision().DEFAULT; + var VARIABLE_PROPERTY_NAME_PATTERN = /^--\S+$/; + var PROPERTY_NAME_PATTERN = /^(?:-chrome-|-[\w-]+\w|\w[\w-]+\w|\w{1,})$/; + var IMPORT_PREFIX_PATTERN = /^@import/i; + var URL_PREFIX_PATTERN = /^url\(/i; + function startsAsUrl(value) { + return URL_PREFIX_PATTERN.test(value); + } + function isImport(token) { + return IMPORT_PREFIX_PATTERN.test(token[1]); + } + function isLegacyFilter(property) { + var value; + if (property.name == "filter" || property.name == "-ms-filter") { + value = property.value[0][1]; + return value.indexOf("progid") > -1 || value.indexOf("alpha") === 0 || value.indexOf("chroma") === 0; + } + return false; + } + function noop() { + } + function noopValueOptimizer(_name, value, _options) { + return value; + } + function optimizeBody(rule, properties, context) { + var options = context.options; + var valueOptimizers; + var property, name, type, value; + var propertyToken; + var propertyOptimizer; + var serializedRule = serializeRules(rule); + var _properties = wrapForOptimizing(properties); + var pluginValueOptimizers = context.options.plugins.level1Value; + var pluginPropertyOptimizers = context.options.plugins.level1Property; + var isVariable; + var i, l; + for (i = 0, l = _properties.length; i < l; i++) { + var j, k, m, n; + property = _properties[i]; + name = property.name; + propertyOptimizer = configuration[name] && configuration[name].propertyOptimizer || noop; + valueOptimizers = configuration[name] && configuration[name].valueOptimizers || [optimizers.whiteSpace]; + isVariable = VARIABLE_PROPERTY_NAME_PATTERN.test(name); + if (isVariable) { + valueOptimizers = options.variableOptimizers.length > 0 ? options.variableOptimizers : [optimizers.whiteSpace]; + } + if (!isVariable && !PROPERTY_NAME_PATTERN.test(name)) { + propertyToken = property.all[property.position]; + context.warnings.push("Invalid property name '" + name + "' at " + formatPosition(propertyToken[1][2][0]) + ". Ignoring."); + property.unused = true; + continue; + } + if (property.value.length === 0) { + propertyToken = property.all[property.position]; + context.warnings.push("Empty property '" + name + "' at " + formatPosition(propertyToken[1][2][0]) + ". Ignoring."); + property.unused = true; + continue; + } + if (property.hack && ((property.hack[0] == Hack.ASTERISK || property.hack[0] == Hack.UNDERSCORE) && !options.compatibility.properties.iePrefixHack || property.hack[0] == Hack.BACKSLASH && !options.compatibility.properties.ieSuffixHack || property.hack[0] == Hack.BANG && !options.compatibility.properties.ieBangHack)) { + property.unused = true; + continue; + } + if (!options.compatibility.properties.ieFilters && isLegacyFilter(property)) { + property.unused = true; + continue; + } + if (property.block) { + optimizeBody(rule, property.value[0][1], context); + continue; + } + for (j = 0, m = property.value.length; j < m; j++) { + type = property.value[j][0]; + value = property.value[j][1]; + if (type == Token.PROPERTY_BLOCK) { + property.unused = true; + context.warnings.push("Invalid value token at " + formatPosition(value[0][1][2][0]) + ". Ignoring."); + break; + } + if (startsAsUrl(value) && !context.validator.isUrl(value)) { + property.unused = true; + context.warnings.push("Broken URL '" + value + "' at " + formatPosition(property.value[j][2][0]) + ". Ignoring."); + break; + } + for (k = 0, n = valueOptimizers.length; k < n; k++) { + value = valueOptimizers[k](name, value, options); + } + for (k = 0, n = pluginValueOptimizers.length; k < n; k++) { + value = pluginValueOptimizers[k](name, value, options); + } + property.value[j][1] = value; + } + propertyOptimizer(serializedRule, property, options); + for (j = 0, m = pluginPropertyOptimizers.length; j < m; j++) { + pluginPropertyOptimizers[j](serializedRule, property, options); + } + } + restoreFromOptimizing(_properties); + removeUnused(_properties); + removeComments(properties, options); + } + function removeComments(tokens, options) { + var token; + var i; + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + if (token[0] != Token.COMMENT) { + continue; + } + optimizeComment(token, options); + if (token[1].length === 0) { + tokens.splice(i, 1); + i--; + } + } + } + function optimizeComment(token, options) { + if (token[1][2] == Marker.EXCLAMATION && (options.level[OptimizationLevel.One].specialComments == "all" || options.commentsKept < options.level[OptimizationLevel.One].specialComments)) { + options.commentsKept++; + return; + } + token[1] = []; + } + function cleanupCharsets(tokens) { + var hasCharset = false; + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + if (token[0] != Token.AT_RULE) { + continue; + } + if (!CHARSET_REGEXP.test(token[1])) { + continue; + } + if (hasCharset || token[1].indexOf(CHARSET_TOKEN) == -1) { + tokens.splice(i, 1); + i--; + l--; + } else { + hasCharset = true; + tokens.splice(i, 1); + tokens.unshift([Token.AT_RULE, token[1].replace(CHARSET_REGEXP, CHARSET_TOKEN)]); + } + } + } + function buildUnitRegexp(options) { + var units = ["px", "em", "ex", "cm", "mm", "in", "pt", "pc", "%"]; + var otherUnits = ["ch", "rem", "vh", "vm", "vmax", "vmin", "vw"]; + otherUnits.forEach(function(unit) { + if (options.compatibility.units[unit]) { + units.push(unit); + } + }); + return new RegExp("(^|\\s|\\(|,)0(?:" + units.join("|") + ")(\\W|$)", "g"); + } + function buildPrecisionOptions(roundingPrecision) { + var precisionOptions = { + matcher: null, + units: {} + }; + var optimizable = []; + var unit; + var value; + for (unit in roundingPrecision) { + value = roundingPrecision[unit]; + if (value != DEFAULT_ROUNDING_PRECISION) { + precisionOptions.units[unit] = {}; + precisionOptions.units[unit].value = value; + precisionOptions.units[unit].multiplier = 10 ** value; + optimizable.push(unit); + } + } + if (optimizable.length > 0) { + precisionOptions.enabled = true; + precisionOptions.decimalPointMatcher = new RegExp("(\\d)\\.($|" + optimizable.join("|") + ")($|\\W)", "g"); + precisionOptions.zeroMatcher = new RegExp("(\\d*)(\\.\\d+)(" + optimizable.join("|") + ")", "g"); + } + return precisionOptions; + } + function buildVariableOptimizers(options) { + return options.level[OptimizationLevel.One].variableValueOptimizers.map(function(optimizer) { + if (typeof optimizer == "string") { + return optimizers[optimizer] || noopValueOptimizer; + } + return optimizer; + }); + } + function level1Optimize(tokens, context) { + var options = context.options; + var levelOptions = options.level[OptimizationLevel.One]; + var ie7Hack = options.compatibility.selectors.ie7Hack; + var adjacentSpace = options.compatibility.selectors.adjacentSpace; + var spaceAfterClosingBrace = options.compatibility.properties.spaceAfterClosingBrace; + var format = options.format; + var mayHaveCharset = false; + var afterRules = false; + options.unitsRegexp = options.unitsRegexp || buildUnitRegexp(options); + options.precision = options.precision || buildPrecisionOptions(levelOptions.roundingPrecision); + options.commentsKept = options.commentsKept || 0; + options.variableOptimizers = options.variableOptimizers || buildVariableOptimizers(options); + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + switch (token[0]) { + case Token.AT_RULE: + token[1] = isImport(token) && afterRules ? "" : token[1]; + token[1] = levelOptions.tidyAtRules ? tidyAtRule(token[1]) : token[1]; + mayHaveCharset = true; + break; + case Token.AT_RULE_BLOCK: + optimizeBody(token[1], token[2], context); + afterRules = true; + break; + case Token.NESTED_BLOCK: + token[1] = levelOptions.tidyBlockScopes ? tidyBlock(token[1], spaceAfterClosingBrace) : token[1]; + level1Optimize(token[2], context); + afterRules = true; + break; + case Token.COMMENT: + optimizeComment(token, options); + break; + case Token.RULE: + token[1] = levelOptions.tidySelectors ? tidyRules(token[1], !ie7Hack, adjacentSpace, format, context.warnings) : token[1]; + token[1] = token[1].length > 1 ? sortSelectors(token[1], levelOptions.selectorsSortingMethod) : token[1]; + optimizeBody(token[1], token[2], context); + afterRules = true; + break; + } + if (token[0] == Token.COMMENT && token[1].length === 0 || levelOptions.removeEmpty && (token[1].length === 0 || token[2] && token[2].length === 0)) { + tokens.splice(i, 1); + i--; + l--; + } + } + if (levelOptions.cleanupCharsets && mayHaveCharset) { + cleanupCharsets(tokens); + } + return tokens; + } + module2.exports = level1Optimize; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js +var require_is_mergeable = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js"(exports, module2) { + var Marker = require_marker(); + var split = require_split(); + var DEEP_SELECTOR_PATTERN = /\/deep\//; + var DOUBLE_COLON_PATTERN = /^::/; + var VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/; + var NOT_PSEUDO = ":not"; + var PSEUDO_CLASSES_WITH_ARGUMENTS = [ + ":dir", + ":lang", + ":not", + ":nth-child", + ":nth-last-child", + ":nth-last-of-type", + ":nth-of-type" + ]; + var RELATION_PATTERN = /[>+~]/; + var UNMIXABLE_PSEUDO_CLASSES = [ + ":after", + ":before", + ":first-letter", + ":first-line", + ":lang" + ]; + var UNMIXABLE_PSEUDO_ELEMENTS = [ + "::after", + "::before", + "::first-letter", + "::first-line" + ]; + var Level = { + DOUBLE_QUOTE: "double-quote", + SINGLE_QUOTE: "single-quote", + ROOT: "root" + }; + function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) { + var singleSelectors = split(selector, Marker.COMMA); + var singleSelector; + var i, l; + for (i = 0, l = singleSelectors.length; i < l; i++) { + singleSelector = singleSelectors[i]; + if (singleSelector.length === 0 || isDeepSelector(singleSelector) || isVendorPrefixed(singleSelector) || singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) { + return false; + } + } + return true; + } + function isDeepSelector(selector) { + return DEEP_SELECTOR_PATTERN.test(selector); + } + function isVendorPrefixed(selector) { + return VENDOR_PREFIXED_PATTERN.test(selector); + } + function extractPseudoFrom(selector) { + var list = []; + var character; + var buffer = []; + var level = Level.ROOT; + var roundBracketLevel = 0; + var isQuoted; + var isEscaped; + var isPseudo = false; + var isRelation; + var wasColon = false; + var index; + var len; + for (index = 0, len = selector.length; index < len; index++) { + character = selector[index]; + isRelation = !isEscaped && RELATION_PATTERN.test(character); + isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE; + if (isEscaped) { + buffer.push(character); + } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) { + buffer.push(character); + level = Level.DOUBLE_QUOTE; + } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) { + buffer.push(character); + level = Level.ROOT; + } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) { + buffer.push(character); + level = Level.SINGLE_QUOTE; + } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) { + buffer.push(character); + level = Level.ROOT; + } else if (isQuoted) { + buffer.push(character); + } else if (character == Marker.OPEN_ROUND_BRACKET) { + buffer.push(character); + roundBracketLevel++; + } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) { + buffer.push(character); + list.push(buffer.join("")); + roundBracketLevel--; + buffer = []; + isPseudo = false; + } else if (character == Marker.CLOSE_ROUND_BRACKET) { + buffer.push(character); + roundBracketLevel--; + } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) { + list.push(buffer.join("")); + buffer = []; + buffer.push(character); + } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) { + buffer = []; + buffer.push(character); + isPseudo = true; + } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) { + list.push(buffer.join("")); + buffer = []; + isPseudo = false; + } else if (isRelation && roundBracketLevel === 0 && isPseudo) { + list.push(buffer.join("")); + buffer = []; + isPseudo = false; + } else { + buffer.push(character); + } + isEscaped = character == Marker.BACK_SLASH; + wasColon = character == Marker.COLON; + } + if (buffer.length > 0 && isPseudo) { + list.push(buffer.join("")); + } + return list; + } + function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) { + return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) && needArguments(matches) && (matches.length < 2 || !someIncorrectlyChained(selector, matches)) && (matches.length < 2 || multiplePseudoMerging && allMixable(matches)); + } + function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) { + var match; + var name; + var i, l; + for (i = 0, l = matches.length; i < l; i++) { + match = matches[i]; + name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match; + if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) { + return false; + } + } + return true; + } + function needArguments(matches) { + var match; + var name; + var bracketOpensAt; + var hasArguments; + var i, l; + for (i = 0, l = matches.length; i < l; i++) { + match = matches[i]; + bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET); + hasArguments = bracketOpensAt > -1; + name = hasArguments ? match.substring(0, bracketOpensAt) : match; + if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) { + return false; + } + if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) { + return false; + } + } + return true; + } + function someIncorrectlyChained(selector, matches) { + var positionInSelector = 0; + var match; + var matchAt; + var nextMatch; + var nextMatchAt; + var name; + var nextName; + var areChained; + var i, l; + for (i = 0, l = matches.length; i < l; i++) { + match = matches[i]; + nextMatch = matches[i + 1]; + if (!nextMatch) { + break; + } + matchAt = selector.indexOf(match, positionInSelector); + nextMatchAt = selector.indexOf(match, matchAt + 1); + positionInSelector = nextMatchAt; + areChained = matchAt + match.length == nextMatchAt; + if (areChained) { + name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match; + nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET)) : nextMatch; + if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) { + return true; + } + } + } + return false; + } + function allMixable(matches) { + var unmixableMatches = 0; + var match; + var i, l; + for (i = 0, l = matches.length; i < l; i++) { + match = matches[i]; + if (isPseudoElement(match)) { + unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0; + } else { + unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0; + } + if (unmixableMatches > 1) { + return false; + } + } + return true; + } + function isPseudoElement(pseudo) { + return DOUBLE_COLON_PATTERN.test(pseudo); + } + module2.exports = isMergeable; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js +var require_every_values_pair = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js"(exports, module2) { + var Marker = require_marker(); + function everyValuesPair(fn, left, right) { + var leftSize = left.value.length; + var rightSize = right.value.length; + var total = Math.max(leftSize, rightSize); + var lowerBound = Math.min(leftSize, rightSize) - 1; + var leftValue; + var rightValue; + var position; + for (position = 0; position < total; position++) { + leftValue = left.value[position] && left.value[position][1] || leftValue; + rightValue = right.value[position] && right.value[position][1] || rightValue; + if (leftValue == Marker.COMMA || rightValue == Marker.COMMA) { + continue; + } + if (!fn(leftValue, rightValue, position, position <= lowerBound)) { + return false; + } + } + return true; + } + module2.exports = everyValuesPair; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js +var require_has_inherit = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js"(exports, module2) { + function hasInherit(property) { + for (var i = property.value.length - 1; i >= 0; i--) { + if (property.value[i][1] == "inherit") { + return true; + } + } + return false; + } + module2.exports = hasInherit; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js +var require_has_same_values = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js"(exports, module2) { + function hasSameValues(property) { + var firstValue = property.value[0][1]; + var i, l; + for (i = 1, l = property.value.length; i < l; i++) { + if (property.value[i][1] != firstValue) { + return false; + } + } + return true; + } + module2.exports = hasSameValues; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js +var require_populate_components = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js"(exports, module2) { + var configuration = require_configuration(); + var InvalidPropertyError = require_invalid_property_error(); + function populateComponents(properties, validator, warnings) { + var component; + var j, m; + for (var i = properties.length - 1; i >= 0; i--) { + var property = properties[i]; + var descriptor = configuration[property.name]; + if (!property.dynamic && descriptor && descriptor.shorthand) { + if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) { + property.optimizable = false; + continue; + } + property.shorthand = true; + property.dirty = true; + try { + property.components = descriptor.breakUp(property, configuration, validator); + if (descriptor.shorthandComponents) { + for (j = 0, m = property.components.length; j < m; j++) { + component = property.components[j]; + component.components = configuration[component.name].breakUp(component, configuration, validator); + } + } + } catch (e) { + if (e instanceof InvalidPropertyError) { + property.components = []; + warnings.push(e.message); + } else { + throw e; + } + } + if (property.components.length > 0) { + property.multiplex = property.components[0].multiplex; + } else { + property.unused = true; + } + } + } + } + function onlyValueIsVariable(property, validator) { + return property.value.length == 1 && validator.isVariable(property.value[0][1]); + } + function moreThanOneValueIsVariable(property, validator) { + return property.value.length > 1 && property.value.filter(function(value) { + return validator.isVariable(value[1]); + }).length > 1; + } + module2.exports = populateComponents; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js +var require_restore_with_components = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js"(exports, module2) { + var configuration = require_configuration(); + function restoreWithComponents(property) { + var descriptor = configuration[property.name]; + if (descriptor && descriptor.shorthand) { + return descriptor.restore(property, configuration); + } + return property.value; + } + module2.exports = restoreWithComponents; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js +var require_merge_into_shorthands = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js"(exports, module2) { + var everyValuesPair = require_every_values_pair(); + var hasInherit = require_has_inherit(); + var hasSameValues = require_has_same_values(); + var populateComponents = require_populate_components(); + var configuration = require_configuration(); + var deepClone = require_clone().deep; + var restoreWithComponents = require_restore_with_components(); + var restoreFromOptimizing = require_restore_from_optimizing(); + var wrapSingle = require_wrap_for_optimizing().single; + var serializeBody = require_one_time().body; + var Token = require_token(); + function mergeIntoShorthands(properties, validator) { + var candidates = {}; + var descriptor; + var componentOf; + var property; + var i, l; + var j, m; + if (properties.length < 3) { + return; + } + for (i = 0, l = properties.length; i < l; i++) { + property = properties[i]; + descriptor = configuration[property.name]; + if (property.dynamic) { + continue; + } + if (property.unused) { + continue; + } + if (property.hack) { + continue; + } + if (property.block) { + continue; + } + if (descriptor && descriptor.singleTypeComponents && !hasSameValues(property)) { + continue; + } + invalidateOrCompact(properties, i, candidates, validator); + if (descriptor && descriptor.componentOf) { + for (j = 0, m = descriptor.componentOf.length; j < m; j++) { + componentOf = descriptor.componentOf[j]; + candidates[componentOf] = candidates[componentOf] || {}; + candidates[componentOf][property.name] = property; + } + } + } + invalidateOrCompact(properties, i, candidates, validator); + } + function invalidateOrCompact(properties, position, candidates, validator) { + var invalidatedBy = properties[position]; + var shorthandName; + var shorthandDescriptor; + var candidateComponents; + var replacedCandidates = []; + var i; + for (shorthandName in candidates) { + if (invalidatedBy !== void 0 && shorthandName == invalidatedBy.name) { + continue; + } + shorthandDescriptor = configuration[shorthandName]; + candidateComponents = candidates[shorthandName]; + if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) { + delete candidates[shorthandName]; + continue; + } + if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) { + continue; + } + if (mixedImportance(candidateComponents)) { + continue; + } + if (!overridable(candidateComponents, shorthandName, validator)) { + continue; + } + if (!mergeable(candidateComponents)) { + continue; + } + if (mixedInherit(candidateComponents)) { + replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator); + } else { + replaceWithShorthand(properties, candidateComponents, shorthandName, validator); + } + replacedCandidates.push(shorthandName); + } + for (i = replacedCandidates.length - 1; i >= 0; i--) { + delete candidates[replacedCandidates[i]]; + } + } + function invalidates(candidates, shorthandName, invalidatedBy) { + var shorthandDescriptor = configuration[shorthandName]; + var invalidatedByDescriptor = configuration[invalidatedBy.name]; + var componentName; + if ("overridesShorthands" in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) { + return true; + } + if (invalidatedByDescriptor && "componentOf" in invalidatedByDescriptor) { + for (componentName in candidates[shorthandName]) { + if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) { + return true; + } + } + } + return false; + } + function mixedImportance(components) { + var important; + var componentName; + for (componentName in components) { + if (important !== void 0 && components[componentName].important != important) { + return true; + } + important = components[componentName].important; + } + return false; + } + function overridable(components, shorthandName, validator) { + var descriptor = configuration[shorthandName]; + var newValuePlaceholder = [ + Token.PROPERTY, + [Token.PROPERTY_NAME, shorthandName], + [Token.PROPERTY_VALUE, descriptor.defaultValue] + ]; + var newProperty = wrapSingle(newValuePlaceholder); + var component; + var mayOverride; + var i, l; + populateComponents([newProperty], validator, []); + for (i = 0, l = descriptor.components.length; i < l; i++) { + component = components[descriptor.components[i]]; + mayOverride = configuration[component.name].canOverride || sameValue; + if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) { + return false; + } + } + return true; + } + function sameValue(_validator, value1, value2) { + return value1 === value2; + } + function mergeable(components) { + var lastCount = null; + var currentCount; + var componentName; + var component; + var descriptor; + var values; + for (componentName in components) { + component = components[componentName]; + descriptor = configuration[componentName]; + if (!("restore" in descriptor)) { + continue; + } + restoreFromOptimizing([component.all[component.position]], restoreWithComponents); + values = descriptor.restore(component, configuration); + currentCount = values.length; + if (lastCount !== null && currentCount !== lastCount) { + return false; + } + lastCount = currentCount; + } + return true; + } + function mixedInherit(components) { + var componentName; + var lastValue = null; + var currentValue; + for (componentName in components) { + currentValue = hasInherit(components[componentName]); + if (lastValue !== null && lastValue !== currentValue) { + return true; + } + lastValue = currentValue; + } + return false; + } + function replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) { + var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator); + var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator); + var longhandTokensSequence = viaLonghands[0]; + var shorthandTokensSequence = viaShorthand[0]; + var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length; + var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence; + var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1]; + var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2]; + var lastComponent = candidateComponents[Object.keys(candidateComponents).pop()]; + var all = lastComponent.all; + var insertAt = lastComponent.position; + var componentName; + var oldComponent; + var newComponent; + var newToken; + newProperty.position = insertAt; + newProperty.shorthand = true; + newProperty.important = lastComponent.important; + newProperty.multiplex = false; + newProperty.dirty = true; + newProperty.all = all; + newProperty.all[insertAt] = newTokensSequence[0]; + properties.splice(insertAt, 1, newProperty); + for (componentName in candidateComponents) { + oldComponent = candidateComponents[componentName]; + oldComponent.unused = true; + newProperty.multiplex = newProperty.multiplex || oldComponent.multiplex; + if (oldComponent.name in newComponents) { + newComponent = newComponents[oldComponent.name]; + newToken = findTokenIn(newTokensSequence, componentName); + newComponent.position = all.length; + newComponent.all = all; + newComponent.all.push(newToken); + properties.push(newComponent); + } + } + } + function buildSequenceWithInheritLonghands(components, shorthandName, validator) { + var tokensSequence = []; + var inheritComponents = {}; + var nonInheritComponents = {}; + var descriptor = configuration[shorthandName]; + var shorthandToken = [ + Token.PROPERTY, + [Token.PROPERTY_NAME, shorthandName], + [Token.PROPERTY_VALUE, descriptor.defaultValue] + ]; + var newProperty = wrapSingle(shorthandToken); + var component; + var longhandToken; + var newComponent; + var nameMetadata; + var i, l; + populateComponents([newProperty], validator, []); + for (i = 0, l = descriptor.components.length; i < l; i++) { + component = components[descriptor.components[i]]; + if (hasInherit(component)) { + longhandToken = component.all[component.position].slice(0, 2); + Array.prototype.push.apply(longhandToken, component.value); + tokensSequence.push(longhandToken); + newComponent = deepClone(component); + newComponent.value = inferComponentValue(components, newComponent.name); + newProperty.components[i] = newComponent; + inheritComponents[component.name] = deepClone(component); + } else { + newComponent = deepClone(component); + newComponent.all = component.all; + newProperty.components[i] = newComponent; + nonInheritComponents[component.name] = component; + } + } + newProperty.important = components[Object.keys(components).pop()].important; + nameMetadata = joinMetadata(nonInheritComponents, 1); + shorthandToken[1].push(nameMetadata); + restoreFromOptimizing([newProperty], restoreWithComponents); + shorthandToken = shorthandToken.slice(0, 2); + Array.prototype.push.apply(shorthandToken, newProperty.value); + tokensSequence.unshift(shorthandToken); + return [tokensSequence, newProperty, inheritComponents]; + } + function inferComponentValue(components, propertyName) { + var descriptor = configuration[propertyName]; + if ("oppositeTo" in descriptor) { + return components[descriptor.oppositeTo].value; + } + return [[Token.PROPERTY_VALUE, descriptor.defaultValue]]; + } + function joinMetadata(components, at) { + var metadata = []; + var component; + var originalValue; + var componentMetadata; + var componentName; + for (componentName in components) { + component = components[componentName]; + originalValue = component.all[component.position]; + componentMetadata = originalValue[at][originalValue[at].length - 1]; + Array.prototype.push.apply(metadata, componentMetadata); + } + return metadata.sort(metadataSorter); + } + function metadataSorter(metadata1, metadata2) { + var line1 = metadata1[0]; + var line2 = metadata2[0]; + var column1 = metadata1[1]; + var column2 = metadata2[1]; + if (line1 < line2) { + return -1; + } + if (line1 === line2) { + return column1 < column2 ? -1 : 1; + } + return 1; + } + function buildSequenceWithInheritShorthand(components, shorthandName, validator) { + var tokensSequence = []; + var inheritComponents = {}; + var nonInheritComponents = {}; + var descriptor = configuration[shorthandName]; + var shorthandToken = [ + Token.PROPERTY, + [Token.PROPERTY_NAME, shorthandName], + [Token.PROPERTY_VALUE, "inherit"] + ]; + var newProperty = wrapSingle(shorthandToken); + var component; + var longhandToken; + var nameMetadata; + var valueMetadata; + var i, l; + populateComponents([newProperty], validator, []); + for (i = 0, l = descriptor.components.length; i < l; i++) { + component = components[descriptor.components[i]]; + if (hasInherit(component)) { + inheritComponents[component.name] = component; + } else { + longhandToken = component.all[component.position].slice(0, 2); + Array.prototype.push.apply(longhandToken, component.value); + tokensSequence.push(longhandToken); + nonInheritComponents[component.name] = deepClone(component); + } + } + nameMetadata = joinMetadata(inheritComponents, 1); + shorthandToken[1].push(nameMetadata); + valueMetadata = joinMetadata(inheritComponents, 2); + shorthandToken[2].push(valueMetadata); + tokensSequence.unshift(shorthandToken); + return [tokensSequence, newProperty, nonInheritComponents]; + } + function findTokenIn(tokens, componentName) { + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + if (tokens[i][1][1] == componentName) { + return tokens[i]; + } + } + } + function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) { + var descriptor = configuration[shorthandName]; + var nameMetadata; + var valueMetadata; + var newValuePlaceholder = [ + Token.PROPERTY, + [Token.PROPERTY_NAME, shorthandName], + [Token.PROPERTY_VALUE, descriptor.defaultValue] + ]; + var all; + var insertAt = inferInsertAtFrom(properties, candidateComponents, shorthandName); + var newProperty = wrapSingle(newValuePlaceholder); + newProperty.shorthand = true; + newProperty.dirty = true; + newProperty.multiplex = false; + populateComponents([newProperty], validator, []); + for (var i = 0, l = descriptor.components.length; i < l; i++) { + var component = candidateComponents[descriptor.components[i]]; + newProperty.components[i] = deepClone(component); + newProperty.important = component.important; + newProperty.multiplex = newProperty.multiplex || component.multiplex; + all = component.all; + } + for (var componentName in candidateComponents) { + candidateComponents[componentName].unused = true; + } + nameMetadata = joinMetadata(candidateComponents, 1); + newValuePlaceholder[1].push(nameMetadata); + valueMetadata = joinMetadata(candidateComponents, 2); + newValuePlaceholder[2].push(valueMetadata); + newProperty.position = insertAt; + newProperty.all = all; + newProperty.all[insertAt] = newValuePlaceholder; + properties.splice(insertAt, 1, newProperty); + } + function inferInsertAtFrom(properties, candidateComponents, shorthandName) { + var candidateComponentNames = Object.keys(candidateComponents); + var firstCandidatePosition = candidateComponents[candidateComponentNames[0]].position; + var lastCandidatePosition = candidateComponents[candidateComponentNames[candidateComponentNames.length - 1]].position; + if (shorthandName == "border" && traversesVia(properties.slice(firstCandidatePosition, lastCandidatePosition), "border-image")) { + return firstCandidatePosition; + } + return lastCandidatePosition; + } + function traversesVia(properties, propertyName) { + for (var i = properties.length - 1; i >= 0; i--) { + if (properties[i].name == propertyName) { + return true; + } + } + return false; + } + module2.exports = mergeIntoShorthands; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js +var require_has_unset = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js"(exports, module2) { + function hasUnset(property) { + for (var i = property.value.length - 1; i >= 0; i--) { + if (property.value[i][1] == "unset") { + return true; + } + } + return false; + } + module2.exports = hasUnset; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js +var require_find_component_in = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js"(exports, module2) { + var configuration = require_configuration(); + function findComponentIn(shorthand, longhand) { + var comparator = nameComparator(longhand); + return findInDirectComponents(shorthand, comparator) || findInSubComponents(shorthand, comparator); + } + function nameComparator(to) { + return function(property) { + return to.name === property.name; + }; + } + function findInDirectComponents(shorthand, comparator) { + return shorthand.components.filter(comparator)[0]; + } + function findInSubComponents(shorthand, comparator) { + var shorthandComponent; + var longhandMatch; + var i, l; + if (!configuration[shorthand.name].shorthandComponents) { + return; + } + for (i = 0, l = shorthand.components.length; i < l; i++) { + shorthandComponent = shorthand.components[i]; + longhandMatch = findInDirectComponents(shorthandComponent, comparator); + if (longhandMatch) { + return longhandMatch; + } + } + } + module2.exports = findComponentIn; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js +var require_is_component_of = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js"(exports, module2) { + var configuration = require_configuration(); + function isComponentOf(property1, property2, shallow) { + return isDirectComponentOf(property1, property2) || !shallow && !!configuration[property1.name].shorthandComponents && isSubComponentOf(property1, property2); + } + function isDirectComponentOf(property1, property2) { + var descriptor = configuration[property1.name]; + return "components" in descriptor && descriptor.components.indexOf(property2.name) > -1; + } + function isSubComponentOf(property1, property2) { + return property1.components.some(function(component) { + return isDirectComponentOf(component, property2); + }); + } + module2.exports = isComponentOf; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js +var require_is_mergeable_shorthand = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js"(exports, module2) { + var Marker = require_marker(); + function isMergeableShorthand(shorthand) { + if (shorthand.name != "font") { + return true; + } + return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1; + } + module2.exports = isMergeableShorthand; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js +var require_overrides_non_component_shorthand = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js"(exports, module2) { + var configuration = require_configuration(); + function overridesNonComponentShorthand(property1, property2) { + return property1.name in configuration && "overridesShorthands" in configuration[property1.name] && configuration[property1.name].overridesShorthands.indexOf(property2.name) > -1; + } + module2.exports = overridesNonComponentShorthand; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js +var require_override_properties = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js"(exports, module2) { + var hasInherit = require_has_inherit(); + var hasUnset = require_has_unset(); + var everyValuesPair = require_every_values_pair(); + var findComponentIn = require_find_component_in(); + var isComponentOf = require_is_component_of(); + var isMergeableShorthand = require_is_mergeable_shorthand(); + var overridesNonComponentShorthand = require_overrides_non_component_shorthand(); + var sameVendorPrefixesIn = require_vendor_prefixes().same; + var configuration = require_configuration(); + var deepClone = require_clone().deep; + var restoreWithComponents = require_restore_with_components(); + var shallowClone = require_clone().shallow; + var restoreFromOptimizing = require_restore_from_optimizing(); + var Token = require_token(); + var Marker = require_marker(); + var serializeProperty = require_one_time().property; + function sameValue(_validator, value1, value2) { + return value1 === value2; + } + function wouldBreakCompatibility(property, validator) { + for (var i = 0; i < property.components.length; i++) { + var component = property.components[i]; + var descriptor = configuration[component.name]; + var canOverride = descriptor && descriptor.canOverride || sameValue; + var _component = shallowClone(component); + _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]]; + if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) { + return true; + } + } + return false; + } + function overrideIntoMultiplex(property, by) { + by.unused = true; + turnIntoMultiplex(by, multiplexSize(property)); + property.value = by.value; + } + function overrideByMultiplex(property, by) { + by.unused = true; + property.multiplex = true; + property.value = by.value; + } + function overrideSimple(property, by) { + by.unused = true; + property.value = by.value; + } + function override(property, by) { + if (by.multiplex) { + overrideByMultiplex(property, by); + } else if (property.multiplex) { + overrideIntoMultiplex(property, by); + } else { + overrideSimple(property, by); + } + } + function overrideShorthand(property, by) { + by.unused = true; + for (var i = 0, l = property.components.length; i < l; i++) { + override(property.components[i], by.components[i]); + } + } + function turnIntoMultiplex(property, size) { + property.multiplex = true; + if (configuration[property.name].shorthand) { + turnShorthandValueIntoMultiplex(property, size); + } else { + turnLonghandValueIntoMultiplex(property, size); + } + } + function turnShorthandValueIntoMultiplex(property, size) { + var component; + var i, l; + for (i = 0, l = property.components.length; i < l; i++) { + component = property.components[i]; + if (!component.multiplex) { + turnLonghandValueIntoMultiplex(component, size); + } + } + } + function turnLonghandValueIntoMultiplex(property, size) { + var descriptor = configuration[property.name]; + var withRealValue = descriptor.intoMultiplexMode == "real"; + var withValue = descriptor.intoMultiplexMode == "real" ? property.value.slice(0) : descriptor.intoMultiplexMode == "placeholder" ? descriptor.placeholderValue : descriptor.defaultValue; + var i = multiplexSize(property); + var j; + var m = withValue.length; + for (; i < size; i++) { + property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]); + if (Array.isArray(withValue)) { + for (j = 0; j < m; j++) { + property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]); + } + } else { + property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]); + } + } + } + function multiplexSize(component) { + var size = 0; + for (var i = 0, l = component.value.length; i < l; i++) { + if (component.value[i][1] == Marker.COMMA) { + size++; + } + } + return size + 1; + } + function lengthOf(property) { + var fakeAsArray = [ + Token.PROPERTY, + [Token.PROPERTY_NAME, property.name] + ].concat(property.value); + return serializeProperty([fakeAsArray], 0).length; + } + function moreSameShorthands(properties, startAt, name) { + var count = 0; + for (var i = startAt; i >= 0; i--) { + if (properties[i].name == name && !properties[i].unused) { + count++; + } + if (count > 1) { + break; + } + } + return count > 1; + } + function overridingFunction(shorthand, validator) { + for (var i = 0, l = shorthand.components.length; i < l; i++) { + if (!anyValue(validator.isUrl, shorthand.components[i]) && anyValue(validator.isFunction, shorthand.components[i])) { + return true; + } + } + return false; + } + function anyValue(fn, property) { + for (var i = 0, l = property.value.length; i < l; i++) { + if (property.value[i][1] == Marker.COMMA) { + continue; + } + if (fn(property.value[i][1])) { + return true; + } + } + return false; + } + function wouldResultInLongerValue(left, right) { + if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex) { + return false; + } + var multiplex = left.multiplex ? left : right; + var simple = left.multiplex ? right : left; + var component; + var multiplexClone = deepClone(multiplex); + restoreFromOptimizing([multiplexClone], restoreWithComponents); + var simpleClone = deepClone(simple); + restoreFromOptimizing([simpleClone], restoreWithComponents); + var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone); + if (left.multiplex) { + component = findComponentIn(multiplexClone, simpleClone); + overrideIntoMultiplex(component, simpleClone); + } else { + component = findComponentIn(simpleClone, multiplexClone); + turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone)); + overrideByMultiplex(component, multiplexClone); + } + restoreFromOptimizing([simpleClone], restoreWithComponents); + var lengthAfter = lengthOf(simpleClone); + return lengthBefore <= lengthAfter; + } + function isCompactable(property) { + return property.name in configuration; + } + function noneOverrideHack(left, right) { + return !left.multiplex && (left.name == "background" || left.name == "background-image") && right.multiplex && (right.name == "background" || right.name == "background-image") && anyLayerIsNone(right.value); + } + function anyLayerIsNone(values) { + var layers = intoLayers(values); + for (var i = 0, l = layers.length; i < l; i++) { + if (layers[i].length == 1 && layers[i][0][1] == "none") { + return true; + } + } + return false; + } + function intoLayers(values) { + var layers = []; + for (var i = 0, layer = [], l = values.length; i < l; i++) { + var value = values[i]; + if (value[1] == Marker.COMMA) { + layers.push(layer); + layer = []; + } else { + layer.push(value); + } + } + layers.push(layer); + return layers; + } + function overrideProperties(properties, withMerging, compatibility, validator) { + var mayOverride, right, left, component; + var overriddenComponents; + var overriddenComponent; + var overridingComponent; + var overridable; + var i, j, k; + propertyLoop: + for (i = properties.length - 1; i >= 0; i--) { + right = properties[i]; + if (!isCompactable(right)) { + continue; + } + if (right.block) { + continue; + } + mayOverride = configuration[right.name].canOverride || sameValue; + traverseLoop: + for (j = i - 1; j >= 0; j--) { + left = properties[j]; + if (!isCompactable(left)) { + continue; + } + if (left.block) { + continue; + } + if (left.dynamic || right.dynamic) { + continue; + } + if (left.unused || right.unused) { + continue; + } + if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack) { + continue; + } + if (left.important == right.important && left.hack[0] != right.hack[0]) { + continue; + } + if (left.important == right.important && (left.hack[0] != right.hack[0] || left.hack[1] && left.hack[1] != right.hack[1])) { + continue; + } + if (hasInherit(right)) { + continue; + } + if (noneOverrideHack(left, right)) { + continue; + } + if (right.shorthand && isComponentOf(right, left)) { + if (!right.important && left.important) { + continue; + } + if (!sameVendorPrefixesIn([left], right.components)) { + continue; + } + if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) { + continue; + } + if (!isMergeableShorthand(right)) { + left.unused = true; + continue; + } + component = findComponentIn(right, left); + mayOverride = configuration[left.name].canOverride || sameValue; + if (everyValuesPair(mayOverride.bind(null, validator), left, component)) { + left.unused = true; + } + } else if (right.shorthand && overridesNonComponentShorthand(right, left)) { + if (!right.important && left.important) { + continue; + } + if (!sameVendorPrefixesIn([left], right.components)) { + continue; + } + if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) { + continue; + } + overriddenComponents = left.shorthand ? left.components : [left]; + for (k = overriddenComponents.length - 1; k >= 0; k--) { + overriddenComponent = overriddenComponents[k]; + overridingComponent = findComponentIn(right, overriddenComponent); + mayOverride = configuration[overriddenComponent.name].canOverride || sameValue; + if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) { + continue traverseLoop; + } + } + left.unused = true; + } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) { + if (right.important && !left.important) { + continue; + } + if (!right.important && left.important) { + right.unused = true; + continue; + } + if (moreSameShorthands(properties, i - 1, left.name)) { + continue; + } + if (overridingFunction(left, validator)) { + continue; + } + if (!isMergeableShorthand(left)) { + continue; + } + if (hasUnset(left) || hasUnset(right)) { + continue; + } + component = findComponentIn(left, right); + if (everyValuesPair(mayOverride.bind(null, validator), component, right)) { + var disabledBackgroundMerging = !compatibility.properties.backgroundClipMerging && component.name.indexOf("background-clip") > -1 || !compatibility.properties.backgroundOriginMerging && component.name.indexOf("background-origin") > -1 || !compatibility.properties.backgroundSizeMerging && component.name.indexOf("background-size") > -1; + var nonMergeableValue = configuration[right.name].nonMergeableValue === right.value[0][1]; + if (disabledBackgroundMerging || nonMergeableValue) { + continue; + } + if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator)) { + continue; + } + if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right))) { + continue; + } + if (wouldResultInLongerValue(left, right)) { + continue; + } + if (!left.multiplex && right.multiplex) { + turnIntoMultiplex(left, multiplexSize(right)); + } + override(component, right); + left.dirty = true; + } + } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) { + if (!left.multiplex && right.multiplex) { + continue; + } + if (!right.important && left.important) { + right.unused = true; + continue propertyLoop; + } + if (right.important && !left.important) { + left.unused = true; + continue; + } + if (!isMergeableShorthand(right)) { + left.unused = true; + continue; + } + for (k = left.components.length - 1; k >= 0; k--) { + var leftComponent = left.components[k]; + var rightComponent = right.components[k]; + mayOverride = configuration[leftComponent.name].canOverride || sameValue; + if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent)) { + continue propertyLoop; + } + } + overrideShorthand(left, right); + left.dirty = true; + } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) { + if (!left.important && right.important) { + continue; + } + component = findComponentIn(left, right); + mayOverride = configuration[right.name].canOverride || sameValue; + if (!everyValuesPair(mayOverride.bind(null, validator), component, right)) { + continue; + } + if (left.important && !right.important) { + right.unused = true; + continue; + } + var rightRestored = configuration[right.name].restore(right, configuration); + if (rightRestored.length > 1) { + continue; + } + component = findComponentIn(left, right); + override(component, right); + right.dirty = true; + } else if (left.name == right.name) { + overridable = true; + if (right.shorthand) { + for (k = right.components.length - 1; k >= 0 && overridable; k--) { + overriddenComponent = left.components[k]; + overridingComponent = right.components[k]; + mayOverride = configuration[overridingComponent.name].canOverride || sameValue; + overridable = everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent); + } + } else { + mayOverride = configuration[right.name].canOverride || sameValue; + overridable = everyValuesPair(mayOverride.bind(null, validator), left, right); + } + if (left.important && !right.important && overridable) { + right.unused = true; + continue; + } + if (!left.important && right.important && overridable) { + left.unused = true; + continue; + } + if (!overridable) { + continue; + } + left.unused = true; + } + } + } + } + module2.exports = overrideProperties; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js +var require_optimize3 = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js"(exports, module2) { + var mergeIntoShorthands = require_merge_into_shorthands(); + var overrideProperties = require_override_properties(); + var populateComponents = require_populate_components(); + var restoreWithComponents = require_restore_with_components(); + var wrapForOptimizing = require_wrap_for_optimizing().all; + var removeUnused = require_remove_unused(); + var restoreFromOptimizing = require_restore_from_optimizing(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + function optimizeProperties(properties, withOverriding, withMerging, context) { + var levelOptions = context.options.level[OptimizationLevel.Two]; + var _properties = wrapForOptimizing(properties, levelOptions.skipProperties); + var _property; + var i, l; + populateComponents(_properties, context.validator, context.warnings); + for (i = 0, l = _properties.length; i < l; i++) { + _property = _properties[i]; + if (_property.block) { + optimizeProperties(_property.value[0][1], withOverriding, withMerging, context); + } + } + if (withMerging && levelOptions.mergeIntoShorthands) { + mergeIntoShorthands(_properties, context.validator); + } + if (withOverriding && levelOptions.overrideProperties) { + overrideProperties(_properties, withMerging, context.options.compatibility, context.validator); + } + restoreFromOptimizing(_properties, restoreWithComponents); + removeUnused(_properties); + } + module2.exports = optimizeProperties; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js +var require_merge_adjacent = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js"(exports, module2) { + var isMergeable = require_is_mergeable(); + var optimizeProperties = require_optimize3(); + var sortSelectors = require_sort_selectors(); + var tidyRules = require_tidy_rules(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var serializeBody = require_one_time().body; + var serializeRules = require_one_time().rules; + var Token = require_token(); + function mergeAdjacent(tokens, context) { + var lastToken = [null, [], []]; + var options = context.options; + var adjacentSpace = options.compatibility.selectors.adjacentSpace; + var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod; + var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; + var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; + var mergeLimit = options.compatibility.selectors.mergeLimit; + var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + if (token[0] != Token.RULE) { + lastToken = [null, [], []]; + continue; + } + if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) { + Array.prototype.push.apply(lastToken[2], token[2]); + optimizeProperties(lastToken[2], true, true, context); + token[2] = []; + } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(lastToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && lastToken[1].length < mergeLimit) { + lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings); + lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1]; + token[2] = []; + } else { + lastToken = token; + } + } + } + module2.exports = mergeAdjacent; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js +var require_rules_overlap = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js"(exports, module2) { + var MODIFIER_PATTERN = /--.+$/; + function rulesOverlap(rule1, rule2, bemMode) { + var scope1; + var scope2; + var i, l; + var j, m; + for (i = 0, l = rule1.length; i < l; i++) { + scope1 = rule1[i][1]; + for (j = 0, m = rule2.length; j < m; j++) { + scope2 = rule2[j][1]; + if (scope1 == scope2) { + return true; + } + if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) { + return true; + } + } + } + return false; + } + function withoutModifiers(scope) { + return scope.replace(MODIFIER_PATTERN, ""); + } + module2.exports = rulesOverlap; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/specificity.js +var require_specificity = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/specificity.js"(exports, module2) { + var Marker = require_marker(); + var Selector = { + ADJACENT_SIBLING: "+", + DESCENDANT: ">", + DOT: ".", + HASH: "#", + NON_ADJACENT_SIBLING: "~", + PSEUDO: ":" + }; + var LETTER_PATTERN = /[a-zA-Z]/; + var NOT_PREFIX = ":not("; + var SEPARATOR_PATTERN = /[\s,(>~+]/; + function specificity(selector) { + var result = [0, 0, 0]; + var character; + var isEscaped; + var isSingleQuoted; + var isDoubleQuoted; + var roundBracketLevel = 0; + var couldIntroduceNewTypeSelector; + var withinNotPseudoClass = false; + var wasPseudoClass = false; + var i, l; + for (i = 0, l = selector.length; i < l; i++) { + character = selector[i]; + if (isEscaped) { + } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) { + isSingleQuoted = true; + } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) { + isSingleQuoted = false; + } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) { + isDoubleQuoted = true; + } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) { + isDoubleQuoted = false; + } else if (isSingleQuoted || isDoubleQuoted) { + continue; + } else if (roundBracketLevel > 0 && !withinNotPseudoClass) { + } else if (character == Marker.OPEN_ROUND_BRACKET) { + roundBracketLevel++; + } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) { + roundBracketLevel--; + withinNotPseudoClass = false; + } else if (character == Marker.CLOSE_ROUND_BRACKET) { + roundBracketLevel--; + } else if (character == Selector.HASH) { + result[0]++; + } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) { + result[1]++; + } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) { + result[1]++; + withinNotPseudoClass = false; + } else if (character == Selector.PSEUDO) { + withinNotPseudoClass = true; + } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) { + result[2]++; + } + isEscaped = character == Marker.BACK_SLASH; + wasPseudoClass = character == Selector.PSEUDO; + couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character); + } + return result; + } + function isNotPseudoClass(selector, index) { + return selector.indexOf(NOT_PREFIX, index) === index; + } + module2.exports = specificity; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js +var require_specificities_overlap = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js"(exports, module2) { + var specificity = require_specificity(); + function specificitiesOverlap(selector1, selector2, cache) { + var specificity1; + var specificity2; + var i, l; + var j, m; + for (i = 0, l = selector1.length; i < l; i++) { + specificity1 = findSpecificity(selector1[i][1], cache); + for (j = 0, m = selector2.length; j < m; j++) { + specificity2 = findSpecificity(selector2[j][1], cache); + if (specificity1[0] === specificity2[0] && specificity1[1] === specificity2[1] && specificity1[2] === specificity2[2]) { + return true; + } + } + } + return false; + } + function findSpecificity(selector, cache) { + var value; + if (!(selector in cache)) { + cache[selector] = value = specificity(selector); + } + return value || cache[selector]; + } + module2.exports = specificitiesOverlap; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/reorderable.js +var require_reorderable = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/reorderable.js"(exports, module2) { + var rulesOverlap = require_rules_overlap(); + var specificitiesOverlap = require_specificities_overlap(); + var FLEX_PROPERTIES = /align-items|box-align|box-pack|flex|justify/; + var BORDER_PROPERTIES = /^border-(top|right|bottom|left|color|style|width|radius)/; + function canReorder(left, right, cache) { + for (var i = right.length - 1; i >= 0; i--) { + for (var j = left.length - 1; j >= 0; j--) { + if (!canReorderSingle(left[j], right[i], cache)) { + return false; + } + } + } + return true; + } + function canReorderSingle(left, right, cache) { + var leftName = left[0]; + var leftValue = left[1]; + var leftNameRoot = left[2]; + var leftSelector = left[5]; + var leftInSpecificSelector = left[6]; + var rightName = right[0]; + var rightValue = right[1]; + var rightNameRoot = right[2]; + var rightSelector = right[5]; + var rightInSpecificSelector = right[6]; + if (leftName == "font" && rightName == "line-height" || rightName == "font" && leftName == "line-height") { + return false; + } + if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName)) { + return false; + } + if (leftNameRoot == rightNameRoot && unprefixed(leftName) == unprefixed(rightName) && vendorPrefixed(leftName) ^ vendorPrefixed(rightName)) { + return false; + } + if (leftNameRoot == "border" && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == "border" || leftName == rightNameRoot || leftValue != rightValue && sameBorderComponent(leftName, rightName))) { + return false; + } + if (rightNameRoot == "border" && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == "border" || rightName == leftNameRoot || leftValue != rightValue && sameBorderComponent(leftName, rightName))) { + return false; + } + if (leftNameRoot == "border" && rightNameRoot == "border" && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName))) { + return false; + } + if (leftNameRoot != rightNameRoot) { + return true; + } + if (leftName == rightName && leftNameRoot == rightNameRoot && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue))) { + return true; + } + if (leftName != rightName && leftNameRoot == rightNameRoot && leftName != leftNameRoot && rightName != rightNameRoot) { + return true; + } + if (leftName != rightName && leftNameRoot == rightNameRoot && leftValue == rightValue) { + return true; + } + if (rightInSpecificSelector && leftInSpecificSelector && !inheritable(leftNameRoot) && !inheritable(rightNameRoot) && !rulesOverlap(rightSelector, leftSelector, false)) { + return true; + } + if (!specificitiesOverlap(leftSelector, rightSelector, cache)) { + return true; + } + return false; + } + function vendorPrefixed(name) { + return /^-(?:moz|webkit|ms|o)-/.test(name); + } + function unprefixed(name) { + return name.replace(/^-(?:moz|webkit|ms|o)-/, ""); + } + function sameBorderComponent(name1, name2) { + return name1.split("-").pop() == name2.split("-").pop(); + } + function isSideBorder(name) { + return name == "border-top" || name == "border-right" || name == "border-bottom" || name == "border-left"; + } + function isStyleBorder(name) { + return name == "border-color" || name == "border-style" || name == "border-width"; + } + function withDifferentVendorPrefix(value1, value2) { + return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split("-")[1] != value2.split("-")[2]; + } + function inheritable(name) { + return name == "font" || name == "line-height" || name == "list-style"; + } + module2.exports = { + canReorder, + canReorderSingle + }; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/extract-properties.js +var require_extract_properties = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/extract-properties.js"(exports, module2) { + var Token = require_token(); + var serializeRules = require_one_time().rules; + var serializeValue = require_one_time().value; + function extractProperties(token) { + var properties = []; + var inSpecificSelector; + var property; + var name; + var value; + var i, l; + if (token[0] == Token.RULE) { + inSpecificSelector = !/[.+>~]/.test(serializeRules(token[1])); + for (i = 0, l = token[2].length; i < l; i++) { + property = token[2][i]; + if (property[0] != Token.PROPERTY) { + continue; + } + name = property[1][1]; + if (name.length === 0) { + continue; + } + value = serializeValue(property, i); + properties.push([ + name, + value, + findNameRoot(name), + token[2][i], + name + ":" + value, + token[1], + inSpecificSelector + ]); + } + } else if (token[0] == Token.NESTED_BLOCK) { + for (i = 0, l = token[2].length; i < l; i++) { + properties = properties.concat(extractProperties(token[2][i])); + } + } + return properties; + } + function findNameRoot(name) { + if (name == "list-style") { + return name; + } + if (name.indexOf("-radius") > 0) { + return "border-radius"; + } + if (name == "border-collapse" || name == "border-spacing" || name == "border-image") { + return name; + } + if (name.indexOf("border-") === 0 && /^border-\w+-\w+$/.test(name)) { + return name.match(/border-\w+/)[0]; + } + if (name.indexOf("border-") === 0 && /^border-\w+$/.test(name)) { + return "border"; + } + if (name.indexOf("text-") === 0) { + return name; + } + if (name == "-chrome-") { + return name; + } + return name.replace(/^-\w+-/, "").match(/([a-zA-Z]+)/)[0].toLowerCase(); + } + module2.exports = extractProperties; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js +var require_merge_media_queries = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js"(exports, module2) { + var canReorder = require_reorderable().canReorder; + var canReorderSingle = require_reorderable().canReorderSingle; + var extractProperties = require_extract_properties(); + var rulesOverlap = require_rules_overlap(); + var serializeRules = require_one_time().rules; + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var Token = require_token(); + function mergeMediaQueries(tokens, context) { + var mergeSemantically = context.options.level[OptimizationLevel.Two].mergeSemantically; + var specificityCache = context.cache.specificity; + var candidates = {}; + var reduced = []; + for (var i = tokens.length - 1; i >= 0; i--) { + var token = tokens[i]; + if (token[0] != Token.NESTED_BLOCK) { + continue; + } + var key = serializeRules(token[1]); + var candidate = candidates[key]; + if (!candidate) { + candidate = []; + candidates[key] = candidate; + } + candidate.push(i); + } + for (var name in candidates) { + var positions = candidates[name]; + positionLoop: + for (var j = positions.length - 1; j > 0; j--) { + var positionOne = positions[j]; + var tokenOne = tokens[positionOne]; + var positionTwo = positions[j - 1]; + var tokenTwo = tokens[positionTwo]; + directionLoop: + for (var direction = 1; direction >= -1; direction -= 2) { + var topToBottom = direction == 1; + var from = topToBottom ? positionOne + 1 : positionTwo - 1; + var to = topToBottom ? positionTwo : positionOne; + var delta = topToBottom ? 1 : -1; + var source = topToBottom ? tokenOne : tokenTwo; + var target = topToBottom ? tokenTwo : tokenOne; + var movedProperties = extractProperties(source); + while (from != to) { + var traversedProperties = extractProperties(tokens[from]); + from += delta; + if (mergeSemantically && allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache)) { + continue; + } + if (!canReorder(movedProperties, traversedProperties, specificityCache)) { + continue directionLoop; + } + } + target[2] = topToBottom ? source[2].concat(target[2]) : target[2].concat(source[2]); + source[2] = []; + reduced.push(target); + continue positionLoop; + } + } + } + return reduced; + } + function allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache) { + var movedProperty; + var movedRule; + var traversedProperty; + var traversedRule; + var i, l; + var j, m; + for (i = 0, l = movedProperties.length; i < l; i++) { + movedProperty = movedProperties[i]; + movedRule = movedProperty[5]; + for (j = 0, m = traversedProperties.length; j < m; j++) { + traversedProperty = traversedProperties[j]; + traversedRule = traversedProperty[5]; + if (rulesOverlap(movedRule, traversedRule, true) && !canReorderSingle(movedProperty, traversedProperty, specificityCache)) { + return false; + } + } + } + return true; + } + module2.exports = mergeMediaQueries; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js +var require_merge_non_adjacent_by_body = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js"(exports, module2) { + var isMergeable = require_is_mergeable(); + var sortSelectors = require_sort_selectors(); + var tidyRules = require_tidy_rules(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var serializeBody = require_one_time().body; + var serializeRules = require_one_time().rules; + var Token = require_token(); + function unsafeSelector(value) { + return /\.|\*| :/.test(value); + } + function isBemElement(token) { + var asString = serializeRules(token[1]); + return asString.indexOf("__") > -1 || asString.indexOf("--") > -1; + } + function withoutModifier(selector) { + return selector.replace(/--[^ ,>+~:]+/g, ""); + } + function removeAnyUnsafeElements(left, candidates) { + var leftSelector = withoutModifier(serializeRules(left[1])); + for (var body in candidates) { + var right = candidates[body]; + var rightSelector = withoutModifier(serializeRules(right[1])); + if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1) { + delete candidates[body]; + } + } + } + function mergeNonAdjacentByBody(tokens, context) { + var options = context.options; + var mergeSemantically = options.level[OptimizationLevel.Two].mergeSemantically; + var adjacentSpace = options.compatibility.selectors.adjacentSpace; + var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod; + var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; + var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; + var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; + var candidates = {}; + for (var i = tokens.length - 1; i >= 0; i--) { + var token = tokens[i]; + if (token[0] != Token.RULE) { + continue; + } + if (token[2].length > 0 && (!mergeSemantically && unsafeSelector(serializeRules(token[1])))) { + candidates = {}; + } + if (token[2].length > 0 && mergeSemantically && isBemElement(token)) { + removeAnyUnsafeElements(token, candidates); + } + var candidateBody = serializeBody(token[2]); + var oldToken = candidates[candidateBody]; + if (oldToken && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(oldToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) { + if (token[2].length > 0) { + token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings); + token[1] = token[1].length > 1 ? sortSelectors(token[1], selectorsSortingMethod) : token[1]; + } else { + token[1] = oldToken[1].concat(token[1]); + } + oldToken[2] = []; + candidates[candidateBody] = null; + } + candidates[serializeBody(token[2])] = token; + } + } + module2.exports = mergeNonAdjacentByBody; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js +var require_merge_non_adjacent_by_selector = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js"(exports, module2) { + var canReorder = require_reorderable().canReorder; + var extractProperties = require_extract_properties(); + var optimizeProperties = require_optimize3(); + var serializeRules = require_one_time().rules; + var Token = require_token(); + function mergeNonAdjacentBySelector(tokens, context) { + var specificityCache = context.cache.specificity; + var allSelectors = {}; + var repeatedSelectors = []; + var i; + for (i = tokens.length - 1; i >= 0; i--) { + if (tokens[i][0] != Token.RULE) { + continue; + } + if (tokens[i][2].length === 0) { + continue; + } + var selector = serializeRules(tokens[i][1]); + allSelectors[selector] = [i].concat(allSelectors[selector] || []); + if (allSelectors[selector].length == 2) { + repeatedSelectors.push(selector); + } + } + for (i = repeatedSelectors.length - 1; i >= 0; i--) { + var positions = allSelectors[repeatedSelectors[i]]; + selectorIterator: + for (var j = positions.length - 1; j > 0; j--) { + var positionOne = positions[j - 1]; + var tokenOne = tokens[positionOne]; + var positionTwo = positions[j]; + var tokenTwo = tokens[positionTwo]; + directionIterator: + for (var direction = 1; direction >= -1; direction -= 2) { + var topToBottom = direction == 1; + var from = topToBottom ? positionOne + 1 : positionTwo - 1; + var to = topToBottom ? positionTwo : positionOne; + var delta = topToBottom ? 1 : -1; + var moved = topToBottom ? tokenOne : tokenTwo; + var target = topToBottom ? tokenTwo : tokenOne; + var movedProperties = extractProperties(moved); + while (from != to) { + var traversedProperties = extractProperties(tokens[from]); + from += delta; + var reorderable = topToBottom ? canReorder(movedProperties, traversedProperties, specificityCache) : canReorder(traversedProperties, movedProperties, specificityCache); + if (!reorderable && !topToBottom) { + continue selectorIterator; + } + if (!reorderable && topToBottom) { + continue directionIterator; + } + } + if (topToBottom) { + Array.prototype.push.apply(moved[2], target[2]); + target[2] = moved[2]; + } else { + Array.prototype.push.apply(target[2], moved[2]); + } + optimizeProperties(target[2], true, true, context); + moved[2] = []; + } + } + } + } + module2.exports = mergeNonAdjacentBySelector; + } +}); + +// node_modules/clean-css/lib/utils/clone-array.js +var require_clone_array = __commonJS({ + "node_modules/clean-css/lib/utils/clone-array.js"(exports, module2) { + function cloneArray(array) { + var cloned = array.slice(0); + for (var i = 0, l = cloned.length; i < l; i++) { + if (Array.isArray(cloned[i])) { + cloned[i] = cloneArray(cloned[i]); + } + } + return cloned; + } + module2.exports = cloneArray; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js +var require_reduce_non_adjacent = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js"(exports, module2) { + var isMergeable = require_is_mergeable(); + var optimizeProperties = require_optimize3(); + var cloneArray = require_clone_array(); + var Token = require_token(); + var serializeBody = require_one_time().body; + var serializeRules = require_one_time().rules; + function reduceNonAdjacent(tokens, context) { + var options = context.options; + var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; + var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; + var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; + var candidates = {}; + var repeated = []; + for (var i = tokens.length - 1; i >= 0; i--) { + var token = tokens[i]; + if (token[0] != Token.RULE) { + continue; + } else if (token[2].length === 0) { + continue; + } + var selectorAsString = serializeRules(token[1]); + var isComplexAndNotSpecial = token[1].length > 1 && isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging); + var wrappedSelectors = wrappedSelectorsFrom(token[1]); + var selectors = isComplexAndNotSpecial ? [selectorAsString].concat(wrappedSelectors) : [selectorAsString]; + for (var j = 0, m = selectors.length; j < m; j++) { + var selector = selectors[j]; + if (!candidates[selector]) { + candidates[selector] = []; + } else { + repeated.push(selector); + } + candidates[selector].push({ + where: i, + list: wrappedSelectors, + isPartial: isComplexAndNotSpecial && j > 0, + isComplex: isComplexAndNotSpecial && j === 0 + }); + } + } + reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context); + reduceComplexNonAdjacentCases(tokens, candidates, options, context); + } + function wrappedSelectorsFrom(list) { + var wrapped = []; + for (var i = 0; i < list.length; i++) { + wrapped.push([list[i][1]]); + } + return wrapped; + } + function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) { + function filterOut(idx, bodies) { + return data[idx].isPartial && bodies.length === 0; + } + function reduceBody(token, newBody, processedCount, tokenIdx) { + if (!data[processedCount - tokenIdx - 1].isPartial) { + token[2] = newBody; + } + } + for (var i = 0, l = repeated.length; i < l; i++) { + var selector = repeated[i]; + var data = candidates[selector]; + reduceSelector(tokens, data, { + filterOut, + callback: reduceBody + }, options, context); + } + } + function reduceComplexNonAdjacentCases(tokens, candidates, options, context) { + var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; + var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; + var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; + var localContext = {}; + function filterOut(idx) { + return localContext.data[idx].where < localContext.intoPosition; + } + function collectReducedBodies(token, newBody, processedCount, tokenIdx) { + if (tokenIdx === 0) { + localContext.reducedBodies.push(newBody); + } + } + allSelectors: + for (var complexSelector in candidates) { + var into = candidates[complexSelector]; + if (!into[0].isComplex) { + continue; + } + var intoPosition = into[into.length - 1].where; + var intoToken = tokens[intoPosition]; + var reducedBodies = []; + var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) ? into[0].list : [complexSelector]; + localContext.intoPosition = intoPosition; + localContext.reducedBodies = reducedBodies; + for (var j = 0, m = selectors.length; j < m; j++) { + var selector = selectors[j]; + var data = candidates[selector]; + if (data.length < 2) { + continue allSelectors; + } + localContext.data = data; + reduceSelector(tokens, data, { + filterOut, + callback: collectReducedBodies + }, options, context); + if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) { + continue allSelectors; + } + } + intoToken[2] = reducedBodies[0]; + } + } + function reduceSelector(tokens, data, context, options, outerContext) { + var bodies = []; + var bodiesAsList = []; + var processedTokens = []; + for (var j = data.length - 1; j >= 0; j--) { + if (context.filterOut(j, bodies)) { + continue; + } + var where = data[j].where; + var token = tokens[where]; + var clonedBody = cloneArray(token[2]); + bodies = bodies.concat(clonedBody); + bodiesAsList.push(clonedBody); + processedTokens.push(where); + } + optimizeProperties(bodies, true, false, outerContext); + var processedCount = processedTokens.length; + var propertyIdx = bodies.length - 1; + var tokenIdx = processedCount - 1; + while (tokenIdx >= 0) { + if ((tokenIdx === 0 || bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1) && propertyIdx > -1) { + propertyIdx--; + continue; + } + var newBody = bodies.splice(propertyIdx + 1); + context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx); + tokenIdx--; + } + } + module2.exports = reduceNonAdjacent; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js +var require_remove_duplicate_font_at_rules = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js"(exports, module2) { + var Token = require_token(); + var serializeAll = require_one_time().all; + var FONT_FACE_SCOPE = "@font-face"; + function removeDuplicateFontAtRules(tokens) { + var fontAtRules = []; + var token; + var key; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) { + continue; + } + key = serializeAll([token]); + if (fontAtRules.indexOf(key) > -1) { + token[2] = []; + } else { + fontAtRules.push(key); + } + } + } + module2.exports = removeDuplicateFontAtRules; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js +var require_remove_duplicate_media_queries = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js"(exports, module2) { + var Token = require_token(); + var serializeAll = require_one_time().all; + var serializeRules = require_one_time().rules; + function removeDuplicateMediaQueries(tokens) { + var candidates = {}; + var candidate; + var token; + var key; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + if (token[0] != Token.NESTED_BLOCK) { + continue; + } + key = serializeRules(token[1]) + "%" + serializeAll(token[2]); + candidate = candidates[key]; + if (candidate) { + candidate[2] = []; + } + candidates[key] = token; + } + } + module2.exports = removeDuplicateMediaQueries; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js +var require_remove_duplicates = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js"(exports, module2) { + var Token = require_token(); + var serializeBody = require_one_time().body; + var serializeRules = require_one_time().rules; + function removeDuplicates(tokens) { + var matched = {}; + var moreThanOnce = []; + var id, token; + var body, bodies; + for (var i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + if (token[0] != Token.RULE) { + continue; + } + id = serializeRules(token[1]); + if (matched[id] && matched[id].length == 1) { + moreThanOnce.push(id); + } else { + matched[id] = matched[id] || []; + } + matched[id].push(i); + } + for (i = 0, l = moreThanOnce.length; i < l; i++) { + id = moreThanOnce[i]; + bodies = []; + for (var j = matched[id].length - 1; j >= 0; j--) { + token = tokens[matched[id][j]]; + body = serializeBody(token[2]); + if (bodies.indexOf(body) > -1) { + token[2] = []; + } else { + bodies.push(body); + } + } + } + } + module2.exports = removeDuplicates; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js +var require_remove_unused_at_rules = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js"(exports, module2) { + var populateComponents = require_populate_components(); + var wrapForOptimizing = require_wrap_for_optimizing().single; + var restoreFromOptimizing = require_restore_from_optimizing(); + var Token = require_token(); + var animationNameRegex = /^(-moz-|-o-|-webkit-)?animation-name$/; + var animationRegex = /^(-moz-|-o-|-webkit-)?animation$/; + var keyframeRegex = /^@(-moz-|-o-|-webkit-)?keyframes /; + var importantRegex = /\s{0,31}!important$/; + var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/; + function normalize(value) { + return value.replace(optionalMatchingQuotesRegex, "$2").replace(importantRegex, ""); + } + function removeUnusedAtRules(tokens, context) { + removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context); + removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context); + removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context); + removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context); + } + function removeUnusedAtRule(tokens, matchCallback, markCallback, context) { + var atRules = {}; + var atRule; + var atRuleTokens; + var atRuleToken; + var zeroAt; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + matchCallback(tokens[i], atRules); + } + if (Object.keys(atRules).length === 0) { + return; + } + markUsedAtRules(tokens, markCallback, atRules, context); + for (atRule in atRules) { + atRuleTokens = atRules[atRule]; + for (i = 0, l = atRuleTokens.length; i < l; i++) { + atRuleToken = atRuleTokens[i]; + zeroAt = atRuleToken[0] == Token.AT_RULE ? 1 : 2; + atRuleToken[zeroAt] = []; + } + } + } + function markUsedAtRules(tokens, markCallback, atRules, context) { + var boundMarkCallback = markCallback(atRules); + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + switch (tokens[i][0]) { + case Token.RULE: + boundMarkCallback(tokens[i], context); + break; + case Token.NESTED_BLOCK: + markUsedAtRules(tokens[i][2], markCallback, atRules, context); + } + } + } + function matchCounterStyle(token, atRules) { + var match; + if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf("@counter-style") === 0) { + match = token[1][0][1].split(" ")[1]; + atRules[match] = atRules[match] || []; + atRules[match].push(token); + } + } + function markCounterStylesAsUsed(atRules) { + return function(token, context) { + var property; + var wrappedProperty; + var i, l; + for (i = 0, l = token[2].length; i < l; i++) { + property = token[2][i]; + if (property[1][1] == "list-style") { + wrappedProperty = wrapForOptimizing(property); + populateComponents([wrappedProperty], context.validator, context.warnings); + if (wrappedProperty.components[0].value[0][1] in atRules) { + delete atRules[property[2][1]]; + } + restoreFromOptimizing([wrappedProperty]); + } + if (property[1][1] == "list-style-type" && property[2][1] in atRules) { + delete atRules[property[2][1]]; + } + } + }; + } + function matchFontFace(token, atRules) { + var property; + var match; + var i, l; + if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == "@font-face") { + for (i = 0, l = token[2].length; i < l; i++) { + property = token[2][i]; + if (property[1][1] == "font-family") { + match = normalize(property[2][1].toLowerCase()); + atRules[match] = atRules[match] || []; + atRules[match].push(token); + break; + } + } + } + } + function markFontFacesAsUsed(atRules) { + return function(token, context) { + var property; + var wrappedProperty; + var component; + var normalizedMatch; + var i, l; + var j, m; + for (i = 0, l = token[2].length; i < l; i++) { + property = token[2][i]; + if (property[1][1] == "font") { + wrappedProperty = wrapForOptimizing(property); + populateComponents([wrappedProperty], context.validator, context.warnings); + component = wrappedProperty.components[6]; + for (j = 0, m = component.value.length; j < m; j++) { + normalizedMatch = normalize(component.value[j][1].toLowerCase()); + if (normalizedMatch in atRules) { + delete atRules[normalizedMatch]; + } + } + restoreFromOptimizing([wrappedProperty]); + } + if (property[1][1] == "font-family") { + for (j = 2, m = property.length; j < m; j++) { + normalizedMatch = normalize(property[j][1].toLowerCase()); + if (normalizedMatch in atRules) { + delete atRules[normalizedMatch]; + } + } + } + } + }; + } + function matchKeyframe(token, atRules) { + var match; + if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) { + match = token[1][0][1].split(" ")[1]; + atRules[match] = atRules[match] || []; + atRules[match].push(token); + } + } + function markKeyframesAsUsed(atRules) { + return function(token, context) { + var property; + var wrappedProperty; + var component; + var i, l; + var j, m; + for (i = 0, l = token[2].length; i < l; i++) { + property = token[2][i]; + if (animationRegex.test(property[1][1])) { + wrappedProperty = wrapForOptimizing(property); + populateComponents([wrappedProperty], context.validator, context.warnings); + component = wrappedProperty.components[7]; + for (j = 0, m = component.value.length; j < m; j++) { + if (component.value[j][1] in atRules) { + delete atRules[component.value[j][1]]; + } + } + restoreFromOptimizing([wrappedProperty]); + } + if (animationNameRegex.test(property[1][1])) { + for (j = 2, m = property.length; j < m; j++) { + if (property[j][1] in atRules) { + delete atRules[property[j][1]]; + } + } + } + } + }; + } + function matchNamespace(token, atRules) { + var match; + if (token[0] == Token.AT_RULE && token[1].indexOf("@namespace") === 0) { + match = token[1].split(" ")[1]; + atRules[match] = atRules[match] || []; + atRules[match].push(token); + } + } + function markNamespacesAsUsed(atRules) { + var namespaceRegex = new RegExp(Object.keys(atRules).join("\\||") + "\\|", "g"); + return function(token) { + var match; + var scope; + var normalizedMatch; + var i, l; + var j, m; + for (i = 0, l = token[1].length; i < l; i++) { + scope = token[1][i]; + match = scope[1].match(namespaceRegex); + for (j = 0, m = match.length; j < m; j++) { + normalizedMatch = match[j].substring(0, match[j].length - 1); + if (normalizedMatch in atRules) { + delete atRules[normalizedMatch]; + } + } + } + }; + } + module2.exports = removeUnusedAtRules; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js +var require_tidy_rule_duplicates = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js"(exports, module2) { + function ruleSorter(s1, s2) { + return s1[1] > s2[1] ? 1 : -1; + } + function tidyRuleDuplicates(rules) { + var list = []; + var repeated = []; + for (var i = 0, l = rules.length; i < l; i++) { + var rule = rules[i]; + if (repeated.indexOf(rule[1]) == -1) { + repeated.push(rule[1]); + list.push(rule); + } + } + return list.sort(ruleSorter); + } + module2.exports = tidyRuleDuplicates; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/restructure.js +var require_restructure = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/restructure.js"(exports, module2) { + var canReorderSingle = require_reorderable().canReorderSingle; + var extractProperties = require_extract_properties(); + var isMergeable = require_is_mergeable(); + var tidyRuleDuplicates = require_tidy_rule_duplicates(); + var Token = require_token(); + var cloneArray = require_clone_array(); + var serializeBody = require_one_time().body; + var serializeRules = require_one_time().rules; + function naturalSorter(a, b) { + return a > b ? 1 : -1; + } + function cloneAndMergeSelectors(propertyA, propertyB) { + var cloned = cloneArray(propertyA); + cloned[5] = cloned[5].concat(propertyB[5]); + return cloned; + } + function restructure(tokens, context) { + var options = context.options; + var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; + var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; + var mergeLimit = options.compatibility.selectors.mergeLimit; + var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; + var specificityCache = context.cache.specificity; + var movableTokens = {}; + var movedProperties = []; + var multiPropertyMoveCache = {}; + var movedToBeDropped = []; + var maxCombinationsLevel = 2; + var ID_JOIN_CHARACTER = "%"; + function sendToMultiPropertyMoveCache(position2, movedProperty2, allFits) { + for (var i2 = allFits.length - 1; i2 >= 0; i2--) { + var fit = allFits[i2][0]; + var id = addToCache(movedProperty2, fit); + if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position2, multiPropertyMoveCache[id])) { + removeAllMatchingFromCache(id); + break; + } + } + } + function addToCache(movedProperty2, fit) { + var id = cacheId(fit); + multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || []; + multiPropertyMoveCache[id].push([movedProperty2, fit]); + return id; + } + function removeAllMatchingFromCache(matchId) { + var matchSelectors = matchId.split(ID_JOIN_CHARACTER); + var forRemoval = []; + var i2; + for (var id in multiPropertyMoveCache) { + var selectors = id.split(ID_JOIN_CHARACTER); + for (i2 = selectors.length - 1; i2 >= 0; i2--) { + if (matchSelectors.indexOf(selectors[i2]) > -1) { + forRemoval.push(id); + break; + } + } + } + for (i2 = forRemoval.length - 1; i2 >= 0; i2--) { + delete multiPropertyMoveCache[forRemoval[i2]]; + } + } + function cacheId(cachedTokens) { + var id = []; + for (var i2 = 0, l = cachedTokens.length; i2 < l; i2++) { + id.push(serializeRules(cachedTokens[i2][1])); + } + return id.join(ID_JOIN_CHARACTER); + } + function tokensToMerge(sourceTokens) { + var uniqueTokensWithBody = []; + var mergeableTokens = []; + for (var i2 = sourceTokens.length - 1; i2 >= 0; i2--) { + if (!isMergeable(serializeRules(sourceTokens[i2][1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) { + continue; + } + mergeableTokens.unshift(sourceTokens[i2]); + if (sourceTokens[i2][2].length > 0 && uniqueTokensWithBody.indexOf(sourceTokens[i2]) == -1) { + uniqueTokensWithBody.push(sourceTokens[i2]); + } + } + return uniqueTokensWithBody.length > 1 ? mergeableTokens : []; + } + function shortenIfPossible(position2, movedProperty2) { + var name = movedProperty2[0]; + var value = movedProperty2[1]; + var key2 = movedProperty2[4]; + var valueSize = name.length + value.length + 1; + var allSelectors = []; + var qualifiedTokens = []; + var mergeableTokens = tokensToMerge(movableTokens[key2]); + if (mergeableTokens.length < 2) { + return; + } + var allFits = findAllFits(mergeableTokens, valueSize, 1); + var bestFit = allFits[0]; + if (bestFit[1] > 0) { + return sendToMultiPropertyMoveCache(position2, movedProperty2, allFits); + } + for (var i2 = bestFit[0].length - 1; i2 >= 0; i2--) { + allSelectors = bestFit[0][i2][1].concat(allSelectors); + qualifiedTokens.unshift(bestFit[0][i2]); + } + allSelectors = tidyRuleDuplicates(allSelectors); + dropAsNewTokenAt(position2, [movedProperty2], allSelectors, qualifiedTokens); + } + function fitSorter(fit1, fit2) { + return fit1[1] > fit2[1] ? 1 : fit1[1] == fit2[1] ? 0 : -1; + } + function findAllFits(mergeableTokens, propertySize, propertiesCount) { + var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1); + return combinations.sort(fitSorter); + } + function allCombinations(tokensVariant, propertySize, propertiesCount, level) { + var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]]; + if (tokensVariant.length > 2 && level > 0) { + for (var i2 = tokensVariant.length - 1; i2 >= 0; i2--) { + var subVariant = Array.prototype.slice.call(tokensVariant, 0); + subVariant.splice(i2, 1); + differenceVariants = differenceVariants.concat(allCombinations(subVariant, propertySize, propertiesCount, level - 1)); + } + } + return differenceVariants; + } + function sizeDifference(tokensVariant, propertySize, propertiesCount) { + var allSelectorsSize = 0; + for (var i2 = tokensVariant.length - 1; i2 >= 0; i2--) { + allSelectorsSize += tokensVariant[i2][2].length > propertiesCount ? serializeRules(tokensVariant[i2][1]).length : -1; + } + return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1; + } + function dropAsNewTokenAt(position2, properties2, allSelectors, mergeableTokens) { + var i2, j2, k2, m2; + var allProperties = []; + for (i2 = mergeableTokens.length - 1; i2 >= 0; i2--) { + var mergeableToken = mergeableTokens[i2]; + for (j2 = mergeableToken[2].length - 1; j2 >= 0; j2--) { + var mergeableProperty = mergeableToken[2][j2]; + for (k2 = 0, m2 = properties2.length; k2 < m2; k2++) { + var property2 = properties2[k2]; + var mergeablePropertyName = mergeableProperty[1][1]; + var propertyName = property2[0]; + var propertyBody = property2[4]; + if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) { + mergeableToken[2].splice(j2, 1); + break; + } + } + } + } + for (i2 = properties2.length - 1; i2 >= 0; i2--) { + allProperties.unshift(properties2[i2][3]); + } + var newToken = [Token.RULE, allSelectors, allProperties]; + tokens.splice(position2, 0, newToken); + } + function dropPropertiesAt(position2, movedProperty2) { + var key2 = movedProperty2[4]; + var toMove = movableTokens[key2]; + if (toMove && toMove.length > 1) { + if (!shortenMultiMovesIfPossible(position2, movedProperty2)) { + shortenIfPossible(position2, movedProperty2); + } + } + } + function shortenMultiMovesIfPossible(position2, movedProperty2) { + var candidates = []; + var propertiesAndMergableTokens = []; + var key2 = movedProperty2[4]; + var j2, k2; + var mergeableTokens = tokensToMerge(movableTokens[key2]); + if (mergeableTokens.length < 2) { + return; + } + movableLoop: + for (var value in movableTokens) { + var tokensList = movableTokens[value]; + for (j2 = mergeableTokens.length - 1; j2 >= 0; j2--) { + if (tokensList.indexOf(mergeableTokens[j2]) == -1) { + continue movableLoop; + } + } + candidates.push(value); + } + if (candidates.length < 2) { + return false; + } + for (j2 = candidates.length - 1; j2 >= 0; j2--) { + for (k2 = movedProperties.length - 1; k2 >= 0; k2--) { + if (movedProperties[k2][4] == candidates[j2]) { + propertiesAndMergableTokens.unshift([movedProperties[k2], mergeableTokens]); + break; + } + } + } + return processMultiPropertyMove(position2, propertiesAndMergableTokens); + } + function processMultiPropertyMove(position2, propertiesAndMergableTokens) { + var valueSize = 0; + var properties2 = []; + var property2; + for (var i2 = propertiesAndMergableTokens.length - 1; i2 >= 0; i2--) { + property2 = propertiesAndMergableTokens[i2][0]; + var fullValue = property2[4]; + valueSize += fullValue.length + (i2 > 0 ? 1 : 0); + properties2.push(property2); + } + var mergeableTokens = propertiesAndMergableTokens[0][1]; + var bestFit = findAllFits(mergeableTokens, valueSize, properties2.length)[0]; + if (bestFit[1] > 0) { + return false; + } + var allSelectors = []; + var qualifiedTokens = []; + for (i2 = bestFit[0].length - 1; i2 >= 0; i2--) { + allSelectors = bestFit[0][i2][1].concat(allSelectors); + qualifiedTokens.unshift(bestFit[0][i2]); + } + allSelectors = tidyRuleDuplicates(allSelectors); + dropAsNewTokenAt(position2, properties2, allSelectors, qualifiedTokens); + for (i2 = properties2.length - 1; i2 >= 0; i2--) { + property2 = properties2[i2]; + var index = movedProperties.indexOf(property2); + delete movableTokens[property2[4]]; + if (index > -1 && movedToBeDropped.indexOf(index) == -1) { + movedToBeDropped.push(index); + } + } + return true; + } + function boundToAnotherPropertyInCurrrentToken(property2, movedProperty2, token2) { + var propertyName = property2[0]; + var movedPropertyName = movedProperty2[0]; + if (propertyName != movedPropertyName) { + return false; + } + var key2 = movedProperty2[4]; + var toMove = movableTokens[key2]; + return toMove && toMove.indexOf(token2) > -1; + } + for (var i = tokens.length - 1; i >= 0; i--) { + var token = tokens[i]; + var isRule; + var j, k, m; + var samePropertyAt; + if (token[0] == Token.RULE) { + isRule = true; + } else if (token[0] == Token.NESTED_BLOCK) { + isRule = false; + } else { + continue; + } + var movedCount = movedProperties.length; + var properties = extractProperties(token); + movedToBeDropped = []; + var unmovableInCurrentToken = []; + for (j = properties.length - 1; j >= 0; j--) { + for (k = j - 1; k >= 0; k--) { + if (!canReorderSingle(properties[j], properties[k], specificityCache)) { + unmovableInCurrentToken.push(j); + break; + } + } + } + for (j = properties.length - 1; j >= 0; j--) { + var property = properties[j]; + var movedSameProperty = false; + for (k = 0; k < movedCount; k++) { + var movedProperty = movedProperties[k]; + if (movedToBeDropped.indexOf(k) == -1 && (!canReorderSingle(property, movedProperty, specificityCache) && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) || movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)) { + dropPropertiesAt(i + 1, movedProperty); + if (movedToBeDropped.indexOf(k) == -1) { + movedToBeDropped.push(k); + delete movableTokens[movedProperty[4]]; + } + } + if (!movedSameProperty) { + movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1]; + if (movedSameProperty) { + samePropertyAt = k; + } + } + } + if (!isRule || unmovableInCurrentToken.indexOf(j) > -1) { + continue; + } + var key = property[4]; + if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) { + dropPropertiesAt(i + 1, movedProperties[samePropertyAt]); + movedProperties.splice(samePropertyAt, 1); + movableTokens[key] = [token]; + movedSameProperty = false; + } else { + movableTokens[key] = movableTokens[key] || []; + movableTokens[key].push(token); + } + if (movedSameProperty) { + movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property); + } else { + movedProperties.push(property); + } + } + movedToBeDropped = movedToBeDropped.sort(naturalSorter); + for (j = 0, m = movedToBeDropped.length; j < m; j++) { + var dropAt = movedToBeDropped[j] - j; + movedProperties.splice(dropAt, 1); + } + } + var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf("@charset") === 0 ? 1 : 0; + for (; position < tokens.length - 1; position++) { + var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf("@import") === 0; + var isComment = tokens[position][0] === Token.COMMENT; + if (!(isImportRule || isComment)) { + break; + } + } + for (i = 0; i < movedProperties.length; i++) { + dropPropertiesAt(position, movedProperties[i]); + } + } + module2.exports = restructure; + } +}); + +// node_modules/clean-css/lib/optimizer/level-2/optimize.js +var require_optimize4 = __commonJS({ + "node_modules/clean-css/lib/optimizer/level-2/optimize.js"(exports, module2) { + var mergeAdjacent = require_merge_adjacent(); + var mergeMediaQueries = require_merge_media_queries(); + var mergeNonAdjacentByBody = require_merge_non_adjacent_by_body(); + var mergeNonAdjacentBySelector = require_merge_non_adjacent_by_selector(); + var reduceNonAdjacent = require_reduce_non_adjacent(); + var removeDuplicateFontAtRules = require_remove_duplicate_font_at_rules(); + var removeDuplicateMediaQueries = require_remove_duplicate_media_queries(); + var removeDuplicates = require_remove_duplicates(); + var removeUnusedAtRules = require_remove_unused_at_rules(); + var restructure = require_restructure(); + var optimizeProperties = require_optimize3(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var Token = require_token(); + function removeEmpty(tokens) { + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + var isEmpty = false; + switch (token[0]) { + case Token.RULE: + isEmpty = token[1].length === 0 || token[2].length === 0; + break; + case Token.NESTED_BLOCK: + removeEmpty(token[2]); + isEmpty = token[2].length === 0; + break; + case Token.AT_RULE: + isEmpty = token[1].length === 0; + break; + case Token.AT_RULE_BLOCK: + isEmpty = token[2].length === 0; + } + if (isEmpty) { + tokens.splice(i, 1); + i--; + l--; + } + } + } + function recursivelyOptimizeBlocks(tokens, context) { + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + if (token[0] == Token.NESTED_BLOCK) { + var isKeyframes = /@(-moz-|-o-|-webkit-)?keyframes/.test(token[1][0][1]); + level2Optimize(token[2], context, !isKeyframes); + } + } + } + function recursivelyOptimizeProperties(tokens, context) { + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + switch (token[0]) { + case Token.RULE: + optimizeProperties(token[2], true, true, context); + break; + case Token.NESTED_BLOCK: + recursivelyOptimizeProperties(token[2], context); + } + } + } + function level2Optimize(tokens, context, withRestructuring) { + var levelOptions = context.options.level[OptimizationLevel.Two]; + var level2Plugins = context.options.plugins.level2Block; + var reduced; + var i; + recursivelyOptimizeBlocks(tokens, context); + recursivelyOptimizeProperties(tokens, context); + if (levelOptions.removeDuplicateRules) { + removeDuplicates(tokens, context); + } + if (levelOptions.mergeAdjacentRules) { + mergeAdjacent(tokens, context); + } + if (levelOptions.reduceNonAdjacentRules) { + reduceNonAdjacent(tokens, context); + } + if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != "body") { + mergeNonAdjacentBySelector(tokens, context); + } + if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != "selector") { + mergeNonAdjacentByBody(tokens, context); + } + if (levelOptions.restructureRules && levelOptions.mergeAdjacentRules && withRestructuring) { + restructure(tokens, context); + mergeAdjacent(tokens, context); + } + if (levelOptions.restructureRules && !levelOptions.mergeAdjacentRules && withRestructuring) { + restructure(tokens, context); + } + if (levelOptions.removeDuplicateFontRules) { + removeDuplicateFontAtRules(tokens, context); + } + if (levelOptions.removeDuplicateMediaBlocks) { + removeDuplicateMediaQueries(tokens, context); + } + if (levelOptions.removeUnusedAtRules) { + removeUnusedAtRules(tokens, context); + } + if (levelOptions.mergeMedia) { + reduced = mergeMediaQueries(tokens, context); + for (i = reduced.length - 1; i >= 0; i--) { + level2Optimize(reduced[i][2], context, false); + } + } + for (i = 0; i < level2Plugins.length; i++) { + level2Plugins[i](tokens); + } + if (levelOptions.removeEmpty) { + removeEmpty(tokens); + } + return tokens; + } + module2.exports = level2Optimize; + } +}); + +// node_modules/clean-css/lib/optimizer/validator.js +var require_validator = __commonJS({ + "node_modules/clean-css/lib/optimizer/validator.js"(exports, module2) { + var functionNoVendorRegexStr = "[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)"; + var functionVendorRegexStr = "\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)"; + var variableRegexStr = "var\\(\\-\\-[^\\)]+\\)"; + var functionAnyRegexStr = "(" + variableRegexStr + "|" + functionNoVendorRegexStr + "|" + functionVendorRegexStr + ")"; + var calcRegex = new RegExp("^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$", "i"); + var decimalRegex = /[0-9]/; + var functionAnyRegex = new RegExp("^" + functionAnyRegexStr + "$", "i"); + var hexAlphaColorRegex = /^#(?:[0-9a-f]{4}|[0-9a-f]{8})$/i; + var hslColorRegex = /^hsl\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\.?\d+\s{0,31}\)$/; + var hslColorWithSpacesRegex = /^hsl\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{1,31}\/\s{1,31}\d*\.?\d+%?\s{0,31}\)$/; + var identifierRegex = /^(-[a-z0-9_][a-z0-9\-_]*|[a-z_][a-z0-9\-_]*)$/i; + var namedEntityRegex = /^[a-z]+$/i; + var prefixRegex = /^-([a-z0-9]|-)*$/i; + var quotedTextRegex = /^("[^"]*"|'[^']*')$/i; + var rgbColorRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[.\d]+\s{0,31}\)$/i; + var rgbColorWithSpacesRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}\/\s{1,31}[\d]*\.?[.\d]+%?\s{0,31}\)$/i; + var timeUnitPattern = /\d+(s|ms)/; + var timingFunctionRegex = /^(cubic-bezier|steps)\([^)]+\)$/; + var validTimeUnits = ["ms", "s"]; + var urlRegex = /^url\([\s\S]+\)$/i; + var variableRegex = new RegExp("^" + variableRegexStr + "$", "i"); + var eightValueColorRegex = /^#[0-9a-f]{8}$/i; + var fourValueColorRegex = /^#[0-9a-f]{4}$/i; + var sixValueColorRegex = /^#[0-9a-f]{6}$/i; + var threeValueColorRegex = /^#[0-9a-f]{3}$/i; + var DECIMAL_DOT = "."; + var MINUS_SIGN = "-"; + var PLUS_SIGN = "+"; + var Keywords = { + "^": [ + "inherit", + "initial", + "unset" + ], + "*-style": [ + "auto", + "dashed", + "dotted", + "double", + "groove", + "hidden", + "inset", + "none", + "outset", + "ridge", + "solid" + ], + "*-timing-function": [ + "ease", + "ease-in", + "ease-in-out", + "ease-out", + "linear", + "step-end", + "step-start" + ], + "animation-direction": [ + "alternate", + "alternate-reverse", + "normal", + "reverse" + ], + "animation-fill-mode": [ + "backwards", + "both", + "forwards", + "none" + ], + "animation-iteration-count": [ + "infinite" + ], + "animation-name": [ + "none" + ], + "animation-play-state": [ + "paused", + "running" + ], + "background-attachment": [ + "fixed", + "inherit", + "local", + "scroll" + ], + "background-clip": [ + "border-box", + "content-box", + "inherit", + "padding-box", + "text" + ], + "background-origin": [ + "border-box", + "content-box", + "inherit", + "padding-box" + ], + "background-position": [ + "bottom", + "center", + "left", + "right", + "top" + ], + "background-repeat": [ + "no-repeat", + "inherit", + "repeat", + "repeat-x", + "repeat-y", + "round", + "space" + ], + "background-size": [ + "auto", + "cover", + "contain" + ], + "border-collapse": [ + "collapse", + "inherit", + "separate" + ], + bottom: [ + "auto" + ], + clear: [ + "both", + "left", + "none", + "right" + ], + color: [ + "transparent" + ], + cursor: [ + "all-scroll", + "auto", + "col-resize", + "crosshair", + "default", + "e-resize", + "help", + "move", + "n-resize", + "ne-resize", + "no-drop", + "not-allowed", + "nw-resize", + "pointer", + "progress", + "row-resize", + "s-resize", + "se-resize", + "sw-resize", + "text", + "vertical-text", + "w-resize", + "wait" + ], + display: [ + "block", + "inline", + "inline-block", + "inline-table", + "list-item", + "none", + "table", + "table-caption", + "table-cell", + "table-column", + "table-column-group", + "table-footer-group", + "table-header-group", + "table-row", + "table-row-group" + ], + float: [ + "left", + "none", + "right" + ], + left: [ + "auto" + ], + font: [ + "caption", + "icon", + "menu", + "message-box", + "small-caption", + "status-bar", + "unset" + ], + "font-size": [ + "large", + "larger", + "medium", + "small", + "smaller", + "x-large", + "x-small", + "xx-large", + "xx-small" + ], + "font-stretch": [ + "condensed", + "expanded", + "extra-condensed", + "extra-expanded", + "normal", + "semi-condensed", + "semi-expanded", + "ultra-condensed", + "ultra-expanded" + ], + "font-style": [ + "italic", + "normal", + "oblique" + ], + "font-variant": [ + "normal", + "small-caps" + ], + "font-weight": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900", + "bold", + "bolder", + "lighter", + "normal" + ], + "line-height": [ + "normal" + ], + "list-style-position": [ + "inside", + "outside" + ], + "list-style-type": [ + "armenian", + "circle", + "decimal", + "decimal-leading-zero", + "disc", + "decimal|disc", + "georgian", + "lower-alpha", + "lower-greek", + "lower-latin", + "lower-roman", + "none", + "square", + "upper-alpha", + "upper-latin", + "upper-roman" + ], + overflow: [ + "auto", + "hidden", + "scroll", + "visible" + ], + position: [ + "absolute", + "fixed", + "relative", + "static" + ], + right: [ + "auto" + ], + "text-align": [ + "center", + "justify", + "left", + "left|right", + "right" + ], + "text-decoration": [ + "line-through", + "none", + "overline", + "underline" + ], + "text-overflow": [ + "clip", + "ellipsis" + ], + top: [ + "auto" + ], + "vertical-align": [ + "baseline", + "bottom", + "middle", + "sub", + "super", + "text-bottom", + "text-top", + "top" + ], + visibility: [ + "collapse", + "hidden", + "visible" + ], + "white-space": [ + "normal", + "nowrap", + "pre" + ], + width: [ + "inherit", + "initial", + "medium", + "thick", + "thin" + ] + }; + var Units = [ + "%", + "ch", + "cm", + "em", + "ex", + "in", + "mm", + "pc", + "pt", + "px", + "rem", + "vh", + "vm", + "vmax", + "vmin", + "vw" + ]; + function isColor(value) { + return value != "auto" && (isKeyword("color")(value) || isHexColor(value) || isColorFunction(value) || isNamedEntity(value)); + } + function isColorFunction(value) { + return isRgbColor(value) || isHslColor(value); + } + function isDynamicUnit(value) { + return calcRegex.test(value); + } + function isFunction(value) { + return functionAnyRegex.test(value); + } + function isHexColor(value) { + return threeValueColorRegex.test(value) || fourValueColorRegex.test(value) || sixValueColorRegex.test(value) || eightValueColorRegex.test(value); + } + function isHslColor(value) { + return hslColorRegex.test(value) || hslColorWithSpacesRegex.test(value); + } + function isHexAlphaColor(value) { + return hexAlphaColorRegex.test(value); + } + function isIdentifier(value) { + return identifierRegex.test(value); + } + function isQuotedText(value) { + return quotedTextRegex.test(value); + } + function isImage(value) { + return value == "none" || value == "inherit" || isUrl(value); + } + function isKeyword(propertyName) { + return function(value) { + return Keywords[propertyName].indexOf(value) > -1; + }; + } + function isNamedEntity(value) { + return namedEntityRegex.test(value); + } + function isNumber(value) { + return scanForNumber(value) == value.length; + } + function isRgbColor(value) { + return rgbColorRegex.test(value) || rgbColorWithSpacesRegex.test(value); + } + function isPrefixed(value) { + return prefixRegex.test(value); + } + function isPositiveNumber(value) { + return isNumber(value) && parseFloat(value) >= 0; + } + function isVariable(value) { + return variableRegex.test(value); + } + function isTime(value) { + var numberUpTo = scanForNumber(value); + return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validTimeUnits.indexOf(value.slice(numberUpTo + 1)) > -1 || isCalculatedTime(value); + } + function isCalculatedTime(value) { + return isFunction(value) && timeUnitPattern.test(value); + } + function isTimingFunction() { + var isTimingFunctionKeyword = isKeyword("*-timing-function"); + return function(value) { + return isTimingFunctionKeyword(value) || timingFunctionRegex.test(value); + }; + } + function isUnit(validUnits, value) { + var numberUpTo = scanForNumber(value); + return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validUnits.indexOf(value.slice(numberUpTo + 1).toLowerCase()) > -1 || value == "auto" || value == "inherit"; + } + function isUrl(value) { + return urlRegex.test(value); + } + function isZIndex(value) { + return value == "auto" || isNumber(value) || isKeyword("^")(value); + } + function scanForNumber(value) { + var hasDot = false; + var hasSign = false; + var character; + var i, l; + for (i = 0, l = value.length; i < l; i++) { + character = value[i]; + if (i === 0 && (character == PLUS_SIGN || character == MINUS_SIGN)) { + hasSign = true; + } else if (i > 0 && hasSign && (character == PLUS_SIGN || character == MINUS_SIGN)) { + return i - 1; + } else if (character == DECIMAL_DOT && !hasDot) { + hasDot = true; + } else if (character == DECIMAL_DOT && hasDot) { + return i - 1; + } else if (decimalRegex.test(character)) { + continue; + } else { + return i - 1; + } + } + return i; + } + function validator(compatibility) { + var validUnits = Units.slice(0).filter(function(value) { + return !(value in compatibility.units) || compatibility.units[value] === true; + }); + if (compatibility.customUnits.rpx) { + validUnits.push("rpx"); + } + return { + colorOpacity: compatibility.colors.opacity, + colorHexAlpha: compatibility.colors.hexAlpha, + isAnimationDirectionKeyword: isKeyword("animation-direction"), + isAnimationFillModeKeyword: isKeyword("animation-fill-mode"), + isAnimationIterationCountKeyword: isKeyword("animation-iteration-count"), + isAnimationNameKeyword: isKeyword("animation-name"), + isAnimationPlayStateKeyword: isKeyword("animation-play-state"), + isTimingFunction: isTimingFunction(), + isBackgroundAttachmentKeyword: isKeyword("background-attachment"), + isBackgroundClipKeyword: isKeyword("background-clip"), + isBackgroundOriginKeyword: isKeyword("background-origin"), + isBackgroundPositionKeyword: isKeyword("background-position"), + isBackgroundRepeatKeyword: isKeyword("background-repeat"), + isBackgroundSizeKeyword: isKeyword("background-size"), + isColor, + isColorFunction, + isDynamicUnit, + isFontKeyword: isKeyword("font"), + isFontSizeKeyword: isKeyword("font-size"), + isFontStretchKeyword: isKeyword("font-stretch"), + isFontStyleKeyword: isKeyword("font-style"), + isFontVariantKeyword: isKeyword("font-variant"), + isFontWeightKeyword: isKeyword("font-weight"), + isFunction, + isGlobal: isKeyword("^"), + isHexAlphaColor, + isHslColor, + isIdentifier, + isImage, + isKeyword, + isLineHeightKeyword: isKeyword("line-height"), + isListStylePositionKeyword: isKeyword("list-style-position"), + isListStyleTypeKeyword: isKeyword("list-style-type"), + isNumber, + isPrefixed, + isPositiveNumber, + isQuotedText, + isRgbColor, + isStyleKeyword: isKeyword("*-style"), + isTime, + isUnit: isUnit.bind(null, validUnits), + isUrl, + isVariable, + isWidth: isKeyword("width"), + isZIndex + }; + } + module2.exports = validator; + } +}); + +// node_modules/clean-css/lib/options/compatibility.js +var require_compatibility = __commonJS({ + "node_modules/clean-css/lib/options/compatibility.js"(exports, module2) { + var DEFAULTS = { + "*": { + colors: { + hexAlpha: false, + opacity: true + }, + customUnits: { rpx: false }, + properties: { + backgroundClipMerging: true, + backgroundOriginMerging: true, + backgroundSizeMerging: true, + colors: true, + ieBangHack: false, + ieFilters: false, + iePrefixHack: false, + ieSuffixHack: false, + merging: true, + shorterLengthUnits: false, + spaceAfterClosingBrace: true, + urlQuotes: true, + zeroUnits: true + }, + selectors: { + adjacentSpace: false, + ie7Hack: false, + mergeablePseudoClasses: [ + ":active", + ":after", + ":before", + ":empty", + ":checked", + ":disabled", + ":empty", + ":enabled", + ":first-child", + ":first-letter", + ":first-line", + ":first-of-type", + ":focus", + ":hover", + ":lang", + ":last-child", + ":last-of-type", + ":link", + ":not", + ":nth-child", + ":nth-last-child", + ":nth-last-of-type", + ":nth-of-type", + ":only-child", + ":only-of-type", + ":root", + ":target", + ":visited" + ], + mergeablePseudoElements: [ + "::after", + "::before", + "::first-letter", + "::first-line" + ], + mergeLimit: 8191, + multiplePseudoMerging: true + }, + units: { + ch: true, + in: true, + pc: true, + pt: true, + rem: true, + vh: true, + vm: true, + vmax: true, + vmin: true, + vw: true + } + } + }; + DEFAULTS.ie11 = merge2(DEFAULTS["*"], { properties: { ieSuffixHack: true } }); + DEFAULTS.ie10 = merge2(DEFAULTS["*"], { properties: { ieSuffixHack: true } }); + DEFAULTS.ie9 = merge2(DEFAULTS["*"], { + properties: { + ieFilters: true, + ieSuffixHack: true + } + }); + DEFAULTS.ie8 = merge2(DEFAULTS.ie9, { + colors: { opacity: false }, + properties: { + backgroundClipMerging: false, + backgroundOriginMerging: false, + backgroundSizeMerging: false, + iePrefixHack: true, + merging: false + }, + selectors: { + mergeablePseudoClasses: [ + ":after", + ":before", + ":first-child", + ":first-letter", + ":focus", + ":hover", + ":visited" + ], + mergeablePseudoElements: [] + }, + units: { + ch: false, + rem: false, + vh: false, + vm: false, + vmax: false, + vmin: false, + vw: false + } + }); + DEFAULTS.ie7 = merge2(DEFAULTS.ie8, { + properties: { ieBangHack: true }, + selectors: { + ie7Hack: true, + mergeablePseudoClasses: [ + ":first-child", + ":first-letter", + ":hover", + ":visited" + ] + } + }); + function compatibilityFrom(source) { + return merge2(DEFAULTS["*"], calculateSource(source)); + } + function merge2(source, target) { + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + var value = source[key]; + if (Object.prototype.hasOwnProperty.call(target, key) && typeof value === "object" && !Array.isArray(value)) { + target[key] = merge2(value, target[key] || {}); + } else { + target[key] = key in target ? target[key] : value; + } + } + } + return target; + } + function calculateSource(source) { + if (typeof source == "object") { + return source; + } + if (!/[,+-]/.test(source)) { + return DEFAULTS[source] || DEFAULTS["*"]; + } + var parts = source.split(","); + var template = parts[0] in DEFAULTS ? DEFAULTS[parts.shift()] : DEFAULTS["*"]; + source = {}; + parts.forEach(function(part) { + var isAdd = part[0] == "+"; + var key = part.substring(1).split("."); + var group = key[0]; + var option = key[1]; + source[group] = source[group] || {}; + source[group][option] = isAdd; + }); + return merge2(template, source); + } + module2.exports = compatibilityFrom; + } +}); + +// node_modules/clean-css/lib/utils/is-http-resource.js +var require_is_http_resource = __commonJS({ + "node_modules/clean-css/lib/utils/is-http-resource.js"(exports, module2) { + var HTTP_RESOURCE_PATTERN = /^http:\/\//; + function isHttpResource(uri) { + return HTTP_RESOURCE_PATTERN.test(uri); + } + module2.exports = isHttpResource; + } +}); + +// node_modules/clean-css/lib/utils/is-https-resource.js +var require_is_https_resource = __commonJS({ + "node_modules/clean-css/lib/utils/is-https-resource.js"(exports, module2) { + var HTTPS_RESOURCE_PATTERN = /^https:\/\//; + function isHttpsResource(uri) { + return HTTPS_RESOURCE_PATTERN.test(uri); + } + module2.exports = isHttpsResource; + } +}); + +// node_modules/clean-css/lib/reader/load-remote-resource.js +var require_load_remote_resource = __commonJS({ + "node_modules/clean-css/lib/reader/load-remote-resource.js"(exports, module2) { + var http = require("http"); + var https = require("https"); + var url = require("url"); + var isHttpResource = require_is_http_resource(); + var isHttpsResource = require_is_https_resource(); + var override = require_override(); + var HTTP_PROTOCOL = "http:"; + function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) { + var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname; + var errorHandled = false; + var requestOptions; + var fetch2; + requestOptions = override(url.parse(uri), inlineRequest || {}); + if (inlineRequest.hostname !== void 0) { + requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL; + requestOptions.path = requestOptions.href; + } + fetch2 = proxyProtocol && !isHttpsResource(proxyProtocol) || isHttpResource(uri) ? http.get : https.get; + fetch2(requestOptions, function(res) { + var chunks = []; + var movedUri; + if (errorHandled) { + return; + } + if (res.statusCode < 200 || res.statusCode > 399) { + return callback(res.statusCode, null); + } + if (res.statusCode > 299) { + movedUri = url.resolve(uri, res.headers.location); + return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback); + } + res.on("data", function(chunk) { + chunks.push(chunk.toString()); + }); + res.on("end", function() { + var body = chunks.join(""); + callback(null, body); + }); + }).on("error", function(res) { + if (errorHandled) { + return; + } + errorHandled = true; + callback(res.message, null); + }).on("timeout", function() { + if (errorHandled) { + return; + } + errorHandled = true; + callback("timeout", null); + }).setTimeout(inlineTimeout); + } + module2.exports = loadRemoteResource; + } +}); + +// node_modules/clean-css/lib/options/fetch.js +var require_fetch = __commonJS({ + "node_modules/clean-css/lib/options/fetch.js"(exports, module2) { + var loadRemoteResource = require_load_remote_resource(); + function fetchFrom(callback) { + return callback || loadRemoteResource; + } + module2.exports = fetchFrom; + } +}); + +// node_modules/clean-css/lib/options/inline.js +var require_inline = __commonJS({ + "node_modules/clean-css/lib/options/inline.js"(exports, module2) { + function inlineOptionsFrom(rules) { + if (Array.isArray(rules)) { + return rules; + } + if (rules === false) { + return ["none"]; + } + return rules === void 0 ? ["local"] : rules.split(","); + } + module2.exports = inlineOptionsFrom; + } +}); + +// node_modules/clean-css/lib/options/inline-request.js +var require_inline_request = __commonJS({ + "node_modules/clean-css/lib/options/inline-request.js"(exports, module2) { + var url = require("url"); + var override = require_override(); + function inlineRequestFrom(option) { + return override(proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy), option || {}); + } + function proxyOptionsFrom(httpProxy) { + return httpProxy ? { + hostname: url.parse(httpProxy).hostname, + port: parseInt(url.parse(httpProxy).port) + } : {}; + } + module2.exports = inlineRequestFrom; + } +}); + +// node_modules/clean-css/lib/options/inline-timeout.js +var require_inline_timeout = __commonJS({ + "node_modules/clean-css/lib/options/inline-timeout.js"(exports, module2) { + var DEFAULT_TIMEOUT = 5e3; + function inlineTimeoutFrom(option) { + return option || DEFAULT_TIMEOUT; + } + module2.exports = inlineTimeoutFrom; + } +}); + +// node_modules/clean-css/lib/options/plugins.js +var require_plugins = __commonJS({ + "node_modules/clean-css/lib/options/plugins.js"(exports, module2) { + function pluginsFrom(plugins) { + var flatPlugins = { + level1Value: [], + level1Property: [], + level2Block: [] + }; + plugins = plugins || []; + flatPlugins.level1Value = plugins.map(function(plugin) { + return plugin.level1 && plugin.level1.value; + }).filter(function(plugin) { + return plugin != null; + }); + flatPlugins.level1Property = plugins.map(function(plugin) { + return plugin.level1 && plugin.level1.property; + }).filter(function(plugin) { + return plugin != null; + }); + flatPlugins.level2Block = plugins.map(function(plugin) { + return plugin.level2 && plugin.level2.block; + }).filter(function(plugin) { + return plugin != null; + }); + return flatPlugins; + } + module2.exports = pluginsFrom; + } +}); + +// node_modules/clean-css/lib/options/rebase.js +var require_rebase = __commonJS({ + "node_modules/clean-css/lib/options/rebase.js"(exports, module2) { + function rebaseFrom(rebaseOption, rebaseToOption) { + if (rebaseToOption !== void 0) { + return true; + } + if (rebaseOption === void 0) { + return false; + } + return !!rebaseOption; + } + module2.exports = rebaseFrom; + } +}); + +// node_modules/clean-css/lib/options/rebase-to.js +var require_rebase_to = __commonJS({ + "node_modules/clean-css/lib/options/rebase-to.js"(exports, module2) { + var path = require("path"); + function rebaseToFrom(option) { + return option ? path.resolve(option) : process.cwd(); + } + module2.exports = rebaseToFrom; + } +}); + +// node_modules/source-map/lib/base64.js +var require_base64 = __commonJS({ + "node_modules/source-map/lib/base64.js"(exports) { + var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); + exports.encode = function(number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + exports.decode = function(charCode) { + var bigA = 65; + var bigZ = 90; + var littleA = 97; + var littleZ = 122; + var zero = 48; + var nine = 57; + var plus = 43; + var slash = 47; + var littleOffset = 26; + var numberOffset = 52; + if (bigA <= charCode && charCode <= bigZ) { + return charCode - bigA; + } + if (littleA <= charCode && charCode <= littleZ) { + return charCode - littleA + littleOffset; + } + if (zero <= charCode && charCode <= nine) { + return charCode - zero + numberOffset; + } + if (charCode == plus) { + return 62; + } + if (charCode == slash) { + return 63; + } + return -1; + }; + } +}); + +// node_modules/source-map/lib/base64-vlq.js +var require_base64_vlq = __commonJS({ + "node_modules/source-map/lib/base64-vlq.js"(exports) { + var base64 = require_base64(); + var VLQ_BASE_SHIFT = 5; + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + var VLQ_BASE_MASK = VLQ_BASE - 1; + var VLQ_CONTINUATION_BIT = VLQ_BASE; + function toVLQSigned(aValue) { + return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0; + } + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative ? -shifted : shifted; + } + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + var vlq = toVLQSigned(aValue); + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + return encoded; + }; + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + } +}); + +// node_modules/source-map/lib/util.js +var require_util = __commonJS({ + "node_modules/source-map/lib/util.js"(exports) { + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + function urlGenerate(aParsedUrl) { + var url = ""; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ":"; + } + url += "//"; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + "@"; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port; + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === ".") { + parts.splice(i, 1); + } else if (part === "..") { + up++; + } else if (up > 0) { + if (part === "") { + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join("/"); + if (path === "") { + path = isAbsolute ? "/" : "."; + } + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || "/"; + } + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + var joined = aPath.charAt(0) === "/" ? aPath : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath); + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + exports.isAbsolute = function(aPath) { + return aPath.charAt(0) === "/" || urlRegexp.test(aPath); + }; + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + aRoot = aRoot.replace(/\/$/, ""); + var level = 0; + while (aPath.indexOf(aRoot + "/") !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + ++level; + } + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + var supportsNullProto = function() { + var obj = /* @__PURE__ */ Object.create(null); + return !("__proto__" in obj); + }(); + function identity(s) { + return s; + } + function toSetString(aStr) { + if (isProtoString(aStr)) { + return "$" + aStr; + } + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + function isProtoString(s) { + if (!s) { + return false; + } + var length = s.length; + if (length < 9) { + return false; + } + if (s.charCodeAt(length - 1) !== 95 || s.charCodeAt(length - 2) !== 95 || s.charCodeAt(length - 3) !== 111 || s.charCodeAt(length - 4) !== 116 || s.charCodeAt(length - 5) !== 111 || s.charCodeAt(length - 6) !== 114 || s.charCodeAt(length - 7) !== 112 || s.charCodeAt(length - 8) !== 95 || s.charCodeAt(length - 9) !== 95) { + return false; + } + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36) { + return false; + } + } + return true; + } + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByOriginalPositions = compareByOriginalPositions; + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + if (aStr1 === null) { + return 1; + } + if (aStr2 === null) { + return -1; + } + if (aStr1 > aStr2) { + return 1; + } + return -1; + } + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, "")); + } + exports.parseSourceMapInput = parseSourceMapInput; + function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ""; + if (sourceRoot) { + if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") { + sourceRoot += "/"; + } + sourceURL = sourceRoot + sourceURL; + } + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + var index = parsed.path.lastIndexOf("/"); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + return normalize(sourceURL); + } + exports.computeSourceURL = computeSourceURL; + } +}); + +// node_modules/source-map/lib/array-set.js +var require_array_set = __commonJS({ + "node_modules/source-map/lib/array-set.js"(exports) { + var util = require_util(); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? /* @__PURE__ */ new Map() : /* @__PURE__ */ Object.create(null); + } + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + throw new Error('"' + aStr + '" is not in the set.'); + }; + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error("No element indexed by " + aIdx); + }; + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + exports.ArraySet = ArraySet; + } +}); + +// node_modules/source-map/lib/mapping-list.js +var require_mapping_list = __commonJS({ + "node_modules/source-map/lib/mapping-list.js"(exports) { + var util = require_util(); + function generatedPositionAfter(mappingA, mappingB) { + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + function MappingList() { + this._array = []; + this._sorted = true; + this._last = { generatedLine: -1, generatedColumn: 0 }; + } + MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + exports.MappingList = MappingList; + } +}); + +// node_modules/source-map/lib/source-map-generator.js +var require_source_map_generator = __commonJS({ + "node_modules/source-map/lib/source-map-generator.js"(exports) { + var base64VLQ = require_base64_vlq(); + var util = require_util(); + var ArraySet = require_array_set().ArraySet; + var MappingList = require_mapping_list().MappingList; + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, "file", null); + this._sourceRoot = util.getArg(aArgs, "sourceRoot", null); + this._skipValidation = util.getArg(aArgs, "skipValidation", false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + SourceMapGenerator.prototype._version = 3; + SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot + }); + aSourceMapConsumer.eachMapping(function(mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function(sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, "generated"); + var original = util.getArg(aArgs, "original", null); + var source = util.getArg(aArgs, "source", null); + var name = util.getArg(aArgs, "name", null); + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source, + name + }); + }; + SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + if (aSourceContent != null) { + if (!this._sourcesContents) { + this._sourcesContents = /* @__PURE__ */ Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + var newSources = new ArraySet(); + var newNames = new ArraySet(); + this._mappings.unsortedForEach(function(mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source); + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + }, this); + this._sources = newSources; + this._names = newNames; + aSourceMapConsumer.sources.forEach(function(sourceFile2) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile2); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile2 = util.join(aSourceMapPath, sourceFile2); + } + if (sourceRoot != null) { + sourceFile2 = util.relative(sourceRoot, sourceFile2); + } + this.setSourceContent(sourceFile2, content); + } + }, this); + }; + SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) { + if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") { + throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values."); + } + if (aGenerated && "line" in aGenerated && "column" in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) { + return; + } else if (aGenerated && "line" in aGenerated && "column" in aGenerated && aOriginal && "line" in aOriginal && "column" in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) { + return; + } else { + throw new Error("Invalid mapping: " + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ""; + var next; + var mapping; + var nameIdx; + var sourceIdx; + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = ""; + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ";"; + previousGeneratedLine++; + } + } else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ","; + } + } + next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + result += next; + } + return result; + }; + SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function(source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null; + }, this); + }; + SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + return map; + }; + SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + exports.SourceMapGenerator = SourceMapGenerator; + } +}); + +// node_modules/source-map/lib/binary-search.js +var require_binary_search = __commonJS({ + "node_modules/source-map/lib/binary-search.js"(exports) { + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + return mid; + } else if (cmp > 0) { + if (aHigh - mid > 1) { + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } else { + if (mid - aLow > 1) { + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + return index; + }; + } +}); + +// node_modules/source-map/lib/quick-sort.js +var require_quick_sort = __commonJS({ + "node_modules/source-map/lib/quick-sort.js"(exports) { + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + function randomIntInRange(low, high) { + return Math.round(low + Math.random() * (high - low)); + } + function doQuickSort(ary, comparator, p, r) { + if (p < r) { + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + swap(ary, pivotIndex, r); + var pivot = ary[r]; + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + swap(ary, i + 1, j); + var q = i + 1; + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + exports.quickSort = function(ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + } +}); + +// node_modules/source-map/lib/source-map-consumer.js +var require_source_map_consumer = __commonJS({ + "node_modules/source-map/lib/source-map-consumer.js"(exports) { + var util = require_util(); + var binarySearch = require_binary_search(); + var ArraySet = require_array_set().ArraySet; + var base64VLQ = require_base64_vlq(); + var quickSort = require_quick_sort().quickSort; + function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === "string") { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); + } + SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); + }; + SourceMapConsumer.prototype._version = 3; + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, "_generatedMappings", { + configurable: true, + enumerable: true, + get: function() { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + return this.__generatedMappings; + } + }); + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, "_originalMappings", { + configurable: true, + enumerable: true, + get: function() { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + return this.__originalMappings; + } + }); + SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + var sourceRoot = this.sourceRoot; + mappings.map(function(mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, "line"); + var needle = { + source: util.getArg(aArgs, "source"), + originalLine: line, + originalColumn: util.getArg(aArgs, "column", 0) + }; + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + var mappings = []; + var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + if (aArgs.column === void 0) { + var originalLine = mapping.originalLine; + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, "generatedLine", null), + column: util.getArg(mapping, "generatedColumn", null), + lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) + }); + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, "generatedLine", null), + column: util.getArg(mapping, "generatedColumn", null), + lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) + }); + mapping = this._originalMappings[++index]; + } + } + } + return mappings; + }; + exports.SourceMapConsumer = SourceMapConsumer; + function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === "string") { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + var version = util.getArg(sourceMap, "version"); + var sources = util.getArg(sourceMap, "sources"); + var names = util.getArg(sourceMap, "names", []); + var sourceRoot = util.getArg(sourceMap, "sourceRoot", null); + var sourcesContent = util.getArg(sourceMap, "sourcesContent", null); + var mappings = util.getArg(sourceMap, "mappings"); + var file = util.getArg(sourceMap, "file", null); + if (version != this._version) { + throw new Error("Unsupported version: " + version); + } + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + sources = sources.map(String).map(util.normalize).map(function(source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source; + }); + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + this._absoluteSources = this._sources.toArray().map(function(s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; + } + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + return -1; + }; + BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function(s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping(); + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + destOriginalMappings.push(destMapping); + } + destGeneratedMappings.push(destMapping); + } + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + return smc; + }; + BasicSourceMapConsumer.prototype._version = 3; + Object.defineProperty(BasicSourceMapConsumer.prototype, "sources", { + get: function() { + return this._absoluteSources.slice(); + } + }); + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + while (index < length) { + if (aStr.charAt(index) === ";") { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } else if (aStr.charAt(index) === ",") { + index++; + } else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + if (segment.length === 2) { + throw new Error("Found a source, but no line and column"); + } + if (segment.length === 3) { + throw new Error("Found a source and line, but no column"); + } + cachedSegments[str] = segment; + } + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + if (segment.length > 1) { + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + mapping.originalLine += 1; + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + if (segment.length > 4) { + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + generatedMappings.push(mapping); + if (typeof mapping.originalLine === "number") { + originalMappings.push(mapping); + } + } + } + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) { + if (aNeedle[aLineName] <= 0) { + throw new TypeError("Line must be greater than or equal to 1, got " + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError("Column must be greater than or equal to 0, got " + aNeedle[aColumnName]); + } + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + mapping.lastGeneratedColumn = Infinity; + } + }; + BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, "line"), + generatedColumn: util.getArg(aArgs, "column") + }; + var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)); + if (index >= 0) { + var mapping = this._generatedMappings[index]; + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, "source", null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, "name", null); + if (name !== null) { + name = this._names.at(name); + } + return { + source, + line: util.getArg(mapping, "originalLine", null), + column: util.getArg(mapping, "originalColumn", null), + name + }; + } + } + return { + source: null, + line: null, + column: null, + name: null + }; + }; + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function(sc) { + return sc == null; + }); + }; + BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + var url; + if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) { + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]; + } + if ((!url.path || url.path == "/") && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + if (nullOnMissing) { + return null; + } else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, "source"); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + var needle = { + source, + originalLine: util.getArg(aArgs, "line"), + originalColumn: util.getArg(aArgs, "column") + }; + var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)); + if (index >= 0) { + var mapping = this._originalMappings[index]; + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, "generatedLine", null), + column: util.getArg(mapping, "generatedColumn", null), + lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) + }; + } + } + return { + line: null, + column: null, + lastColumn: null + }; + }; + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === "string") { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + var version = util.getArg(sourceMap, "version"); + var sections = util.getArg(sourceMap, "sections"); + if (version != this._version) { + throw new Error("Unsupported version: " + version); + } + this._sources = new ArraySet(); + this._names = new ArraySet(); + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function(s) { + if (s.url) { + throw new Error("Support for url field in sections not implemented."); + } + var offset = util.getArg(s, "offset"); + var offsetLine = util.getArg(offset, "line"); + var offsetColumn = util.getArg(offset, "column"); + if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) { + throw new Error("Section offsets must be ordered and non-overlapping."); + } + lastOffset = offset; + return { + generatedOffset: { + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL) + }; + }); + } + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + IndexedSourceMapConsumer.prototype._version = 3; + Object.defineProperty(IndexedSourceMapConsumer.prototype, "sources", { + get: function() { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, "line"), + generatedColumn: util.getArg(aArgs, "column") + }; + var sectionIndex = binarySearch.search(needle, this._sections, function(needle2, section2) { + var cmp = needle2.generatedLine - section2.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + return needle2.generatedColumn - section2.generatedOffset.generatedColumn; + }); + var section = this._sections[sectionIndex]; + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + return section.consumer.originalPositionFor({ + line: needle.generatedLine - (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), + bias: aArgs.bias + }); + }; + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function(s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + if (section.consumer._findSourceIndex(util.getArg(aArgs, "source")) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0) + }; + return ret; + } + } + return { + line: null, + column: null + }; + }; + IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + var adjustedMapping = { + source, + generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name + }; + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === "number") { + this.__originalMappings.push(adjustedMapping); + } + } + } + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + } +}); + +// node_modules/source-map/lib/source-node.js +var require_source_node = __commonJS({ + "node_modules/source-map/lib/source-node.js"(exports) { + var SourceMapGenerator = require_source_map_generator().SourceMapGenerator; + var util = require_util(); + var REGEX_NEWLINE = /(\r?\n)/; + var NEWLINE_CODE = 10; + var isSourceNode = "$$$isSourceNode$$$"; + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) + this.add(aChunks); + } + SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + var node = new SourceNode(); + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + var newLine = getNextLine() || ""; + return lineContents + newLine; + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : void 0; + } + }; + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + var lastMapping = null; + aSourceMapConsumer.eachMapping(function(mapping) { + if (lastMapping !== null) { + if (lastGeneratedLine < mapping.generatedLine) { + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + } else { + var nextLine = remainingLines[remainingLinesIndex] || ""; + var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + lastMapping = mapping; + return; + } + } + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ""; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + addMappingWithCode(lastMapping, shiftNextLine()); + } + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + aSourceMapConsumer.sources.forEach(function(sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + return node; + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === void 0) { + node.add(code); + } else { + var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source; + node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name)); + } + } + }; + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function(chunk) { + this.add(chunk); + }, this); + } else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } else { + throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); + } + return this; + }; + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length - 1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } else { + throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); + } + return this; + }; + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } else { + if (chunk !== "") { + aFn(chunk, { + source: this.source, + line: this.line, + column: this.column, + name: this.name + }); + } + } + } + }; + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len - 1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } else if (typeof lastChild === "string") { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } else { + this.children.push("".replace(aPattern, aReplacement)); + } + return this; + }; + SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function(chunk) { + str += chunk; + }); + return str; + }; + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function(chunk, original) { + generated.code += chunk; + if (original.source !== null && original.line !== null && original.column !== null) { + if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function(sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + return { code: generated.code, map }; + }; + exports.SourceNode = SourceNode; + } +}); + +// node_modules/source-map/source-map.js +var require_source_map = __commonJS({ + "node_modules/source-map/source-map.js"(exports) { + exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator; + exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer; + exports.SourceNode = require_source_node().SourceNode; + } +}); + +// node_modules/clean-css/lib/reader/input-source-map-tracker.js +var require_input_source_map_tracker = __commonJS({ + "node_modules/clean-css/lib/reader/input-source-map-tracker.js"(exports, module2) { + var SourceMapConsumer = require_source_map().SourceMapConsumer; + function inputSourceMapTracker() { + var maps = {}; + return { + all: all.bind(null, maps), + isTracking: isTracking.bind(null, maps), + originalPositionFor: originalPositionFor.bind(null, maps), + track: track.bind(null, maps) + }; + } + function all(maps) { + return maps; + } + function isTracking(maps, source) { + return source in maps; + } + function originalPositionFor(maps, metadata, range, selectorFallbacks) { + var line = metadata[0]; + var column = metadata[1]; + var source = metadata[2]; + var position = { + line, + column: column + range + }; + var originalPosition; + while (!originalPosition && position.column > column) { + position.column--; + originalPosition = maps[source].originalPositionFor(position); + } + if (!originalPosition || originalPosition.column < 0) { + return metadata; + } + if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) { + return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1); + } + return originalPosition.line !== null ? toMetadata(originalPosition) : metadata; + } + function toMetadata(asHash) { + return [asHash.line, asHash.column, asHash.source]; + } + function track(maps, source, data) { + maps[source] = new SourceMapConsumer(data); + } + module2.exports = inputSourceMapTracker; + } +}); + +// node_modules/clean-css/lib/utils/is-remote-resource.js +var require_is_remote_resource = __commonJS({ + "node_modules/clean-css/lib/utils/is-remote-resource.js"(exports, module2) { + var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/; + var FILE_RESOURCE_PATTERN = /^file:\/\//; + function isRemoteResource(uri) { + return REMOTE_RESOURCE_PATTERN.test(uri) && !FILE_RESOURCE_PATTERN.test(uri); + } + module2.exports = isRemoteResource; + } +}); + +// node_modules/clean-css/lib/utils/has-protocol.js +var require_has_protocol = __commonJS({ + "node_modules/clean-css/lib/utils/has-protocol.js"(exports, module2) { + var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//; + function hasProtocol(uri) { + return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri); + } + module2.exports = hasProtocol; + } +}); + +// node_modules/clean-css/lib/reader/is-allowed-resource.js +var require_is_allowed_resource = __commonJS({ + "node_modules/clean-css/lib/reader/is-allowed-resource.js"(exports, module2) { + var path = require("path"); + var url = require("url"); + var isRemoteResource = require_is_remote_resource(); + var hasProtocol = require_has_protocol(); + var HTTP_PROTOCOL = "http:"; + function isAllowedResource(uri, isRemote, rules) { + var match; + var absoluteUri; + var allowed = !isRemote; + var rule; + var isNegated; + var normalizedRule; + var i; + if (rules.length === 0) { + return false; + } + if (isRemote && !hasProtocol(uri)) { + uri = HTTP_PROTOCOL + uri; + } + match = isRemote ? url.parse(uri).host : uri; + absoluteUri = isRemote ? uri : path.resolve(uri); + for (i = 0; i < rules.length; i++) { + rule = rules[i]; + isNegated = rule[0] == "!"; + normalizedRule = rule.substring(1); + if (isNegated && isRemote && isRemoteRule(normalizedRule)) { + allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]); + } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) { + allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]); + } else if (isNegated) { + allowed = allowed && true; + } else if (rule == "all") { + allowed = true; + } else if (isRemote && rule == "local") { + allowed = allowed || false; + } else if (isRemote && rule == "remote") { + allowed = true; + } else if (!isRemote && rule == "remote") { + allowed = false; + } else if (!isRemote && rule == "local") { + allowed = true; + } else if (rule === match) { + allowed = true; + } else if (rule === uri) { + allowed = true; + } else if (isRemote && absoluteUri.indexOf(rule) === 0) { + allowed = true; + } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) { + allowed = true; + } else if (isRemote != isRemoteRule(normalizedRule)) { + allowed = allowed && true; + } else { + allowed = false; + } + } + return allowed; + } + function isRemoteRule(rule) { + return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + "//" + rule).host == rule; + } + module2.exports = isAllowedResource; + } +}); + +// node_modules/clean-css/lib/reader/match-data-uri.js +var require_match_data_uri = __commonJS({ + "node_modules/clean-css/lib/reader/match-data-uri.js"(exports, module2) { + var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/; + function matchDataUri(uri) { + return DATA_URI_PATTERN.exec(uri); + } + module2.exports = matchDataUri; + } +}); + +// node_modules/clean-css/lib/reader/rebase-local-map.js +var require_rebase_local_map = __commonJS({ + "node_modules/clean-css/lib/reader/rebase-local-map.js"(exports, module2) { + var path = require("path"); + function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) { + var currentPath = path.resolve(""); + var absoluteUri = path.resolve(currentPath, sourceUri); + var absoluteUriDirectory = path.dirname(absoluteUri); + sourceMap.sources = sourceMap.sources.map(function(source) { + return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source)); + }); + return sourceMap; + } + module2.exports = rebaseLocalMap; + } +}); + +// node_modules/clean-css/lib/reader/rebase-remote-map.js +var require_rebase_remote_map = __commonJS({ + "node_modules/clean-css/lib/reader/rebase-remote-map.js"(exports, module2) { + var path = require("path"); + var url = require("url"); + function rebaseRemoteMap(sourceMap, sourceUri) { + var sourceDirectory = path.dirname(sourceUri); + sourceMap.sources = sourceMap.sources.map(function(source) { + return url.resolve(sourceDirectory, source); + }); + return sourceMap; + } + module2.exports = rebaseRemoteMap; + } +}); + +// node_modules/clean-css/lib/utils/is-data-uri-resource.js +var require_is_data_uri_resource = __commonJS({ + "node_modules/clean-css/lib/utils/is-data-uri-resource.js"(exports, module2) { + var DATA_URI_PATTERN = /^data:(\S{0,31}?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/; + function isDataUriResource(uri) { + return DATA_URI_PATTERN.test(uri); + } + module2.exports = isDataUriResource; + } +}); + +// node_modules/clean-css/lib/reader/apply-source-maps.js +var require_apply_source_maps = __commonJS({ + "node_modules/clean-css/lib/reader/apply-source-maps.js"(exports, module2) { + var fs2 = require("fs"); + var path = require("path"); + var isAllowedResource = require_is_allowed_resource(); + var matchDataUri = require_match_data_uri(); + var rebaseLocalMap = require_rebase_local_map(); + var rebaseRemoteMap = require_rebase_remote_map(); + var Token = require_token(); + var hasProtocol = require_has_protocol(); + var isDataUriResource = require_is_data_uri_resource(); + var isRemoteResource = require_is_remote_resource(); + var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/; + function applySourceMaps(tokens, context, callback) { + var applyContext = { + callback, + fetch: context.options.fetch, + index: 0, + inline: context.options.inline, + inlineRequest: context.options.inlineRequest, + inlineTimeout: context.options.inlineTimeout, + inputSourceMapTracker: context.inputSourceMapTracker, + localOnly: context.localOnly, + processedTokens: [], + rebaseTo: context.options.rebaseTo, + sourceTokens: tokens, + warnings: context.warnings + }; + return context.options.sourceMap && tokens.length > 0 ? doApplySourceMaps(applyContext) : callback(tokens); + } + function doApplySourceMaps(applyContext) { + var singleSourceTokens = []; + var lastSource = findTokenSource(applyContext.sourceTokens[0]); + var source; + var token; + var l; + for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) { + token = applyContext.sourceTokens[applyContext.index]; + source = findTokenSource(token); + if (source != lastSource) { + singleSourceTokens = []; + lastSource = source; + } + singleSourceTokens.push(token); + applyContext.processedTokens.push(token); + if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) { + return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext); + } + } + return applyContext.callback(applyContext.processedTokens); + } + function findTokenSource(token) { + var scope; + var metadata; + if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT || token[0] == Token.RAW) { + metadata = token[2][0]; + } else { + scope = token[1][0]; + metadata = scope[2][0]; + } + return metadata[2]; + } + function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) { + return extractInputSourceMapFrom(sourceMapComment, applyContext, function(inputSourceMap) { + if (inputSourceMap) { + applyContext.inputSourceMapTracker.track(source, inputSourceMap); + applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker); + } + applyContext.index++; + return doApplySourceMaps(applyContext); + }); + } + function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) { + var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1]; + var absoluteUri; + var sourceMap; + var rebasedMap; + if (isDataUriResource(uri)) { + sourceMap = extractInputSourceMapFromDataUri(uri); + return whenSourceMapReady(sourceMap); + } + if (isRemoteResource(uri)) { + return loadInputSourceMapFromRemoteUri(uri, applyContext, function(sourceMap2) { + var parsedMap; + if (sourceMap2) { + parsedMap = JSON.parse(sourceMap2); + rebasedMap = rebaseRemoteMap(parsedMap, uri); + whenSourceMapReady(rebasedMap); + } else { + whenSourceMapReady(null); + } + }); + } + absoluteUri = path.resolve(applyContext.rebaseTo, uri); + sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext); + if (sourceMap) { + rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo); + return whenSourceMapReady(rebasedMap); + } + return whenSourceMapReady(null); + } + function extractInputSourceMapFromDataUri(uri) { + var dataUriMatch = matchDataUri(uri); + var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : "us-ascii"; + var encoding = dataUriMatch[3] ? dataUriMatch[3].split(";")[1] : "utf8"; + var data = encoding == "utf8" ? global.unescape(dataUriMatch[4]) : dataUriMatch[4]; + var buffer = Buffer.from(data, encoding); + buffer.charset = charset; + return JSON.parse(buffer.toString()); + } + function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) { + var isAllowed = isAllowedResource(uri, true, applyContext.inline); + var isRuntimeResource = !hasProtocol(uri); + if (applyContext.localOnly) { + applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.'); + return whenLoaded(null); + } + if (isRuntimeResource) { + applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.'); + return whenLoaded(null); + } + if (!isAllowed) { + applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); + return whenLoaded(null); + } + applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function(error, body) { + if (error) { + applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error); + return whenLoaded(null); + } + whenLoaded(body); + }); + } + function loadInputSourceMapFromLocalUri(uri, applyContext) { + var isAllowed = isAllowedResource(uri, false, applyContext.inline); + var sourceMap; + if (!fs2.existsSync(uri) || !fs2.statSync(uri).isFile()) { + applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.'); + return null; + } + if (!isAllowed) { + applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); + return null; + } + if (!fs2.statSync(uri).size) { + applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is empty.'); + return null; + } + sourceMap = fs2.readFileSync(uri, "utf-8"); + return JSON.parse(sourceMap); + } + function applySourceMapRecursively(tokens, inputSourceMapTracker) { + var token; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + switch (token[0]) { + case Token.AT_RULE: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.AT_RULE_BLOCK: + applySourceMapRecursively(token[1], inputSourceMapTracker); + applySourceMapRecursively(token[2], inputSourceMapTracker); + break; + case Token.AT_RULE_BLOCK_SCOPE: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.NESTED_BLOCK: + applySourceMapRecursively(token[1], inputSourceMapTracker); + applySourceMapRecursively(token[2], inputSourceMapTracker); + break; + case Token.NESTED_BLOCK_SCOPE: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.COMMENT: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.PROPERTY: + applySourceMapRecursively(token, inputSourceMapTracker); + break; + case Token.PROPERTY_BLOCK: + applySourceMapRecursively(token[1], inputSourceMapTracker); + break; + case Token.PROPERTY_NAME: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.PROPERTY_VALUE: + applySourceMapTo(token, inputSourceMapTracker); + break; + case Token.RULE: + applySourceMapRecursively(token[1], inputSourceMapTracker); + applySourceMapRecursively(token[2], inputSourceMapTracker); + break; + case Token.RULE_SCOPE: + applySourceMapTo(token, inputSourceMapTracker); + } + } + return tokens; + } + function applySourceMapTo(token, inputSourceMapTracker) { + var value = token[1]; + var metadata = token[2]; + var newMetadata = []; + var i, l; + for (i = 0, l = metadata.length; i < l; i++) { + newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length)); + } + token[2] = newMetadata; + } + module2.exports = applySourceMaps; + } +}); + +// node_modules/clean-css/lib/reader/extract-import-url-and-media.js +var require_extract_import_url_and_media = __commonJS({ + "node_modules/clean-css/lib/reader/extract-import-url-and-media.js"(exports, module2) { + var split = require_split(); + var BRACE_PREFIX = /^\(/; + var BRACE_SUFFIX = /\)$/; + var IMPORT_PREFIX_PATTERN = /^@import/i; + var QUOTE_PREFIX_PATTERN = /['"]\s{0,31}/; + var QUOTE_SUFFIX_PATTERN = /\s{0,31}['"]/; + var URL_PREFIX_PATTERN = /^url\(\s{0,31}/i; + var URL_SUFFIX_PATTERN = /\s{0,31}\)/i; + function extractImportUrlAndMedia(atRuleValue) { + var uri; + var mediaQuery; + var normalized; + var parts; + normalized = atRuleValue.replace(IMPORT_PREFIX_PATTERN, "").trim().replace(URL_PREFIX_PATTERN, "(").replace(URL_SUFFIX_PATTERN, ") ").replace(QUOTE_PREFIX_PATTERN, "").replace(QUOTE_SUFFIX_PATTERN, ""); + parts = split(normalized, " "); + uri = parts[0].replace(BRACE_PREFIX, "").replace(BRACE_SUFFIX, ""); + mediaQuery = parts.slice(1).join(" "); + return [uri, mediaQuery]; + } + module2.exports = extractImportUrlAndMedia; + } +}); + +// node_modules/clean-css/lib/reader/load-original-sources.js +var require_load_original_sources = __commonJS({ + "node_modules/clean-css/lib/reader/load-original-sources.js"(exports, module2) { + var fs2 = require("fs"); + var path = require("path"); + var isAllowedResource = require_is_allowed_resource(); + var hasProtocol = require_has_protocol(); + var isRemoteResource = require_is_remote_resource(); + function loadOriginalSources(context, callback) { + var loadContext = { + callback, + fetch: context.options.fetch, + index: 0, + inline: context.options.inline, + inlineRequest: context.options.inlineRequest, + inlineTimeout: context.options.inlineTimeout, + localOnly: context.localOnly, + rebaseTo: context.options.rebaseTo, + sourcesContent: context.sourcesContent, + uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()), + warnings: context.warnings + }; + return context.options.sourceMap && context.options.sourceMapInlineSources ? doLoadOriginalSources(loadContext) : callback(); + } + function uriToSourceMapping(allSourceMapConsumers) { + var mapping = {}; + var consumer; + var uri; + var source; + var i, l; + for (source in allSourceMapConsumers) { + consumer = allSourceMapConsumers[source]; + for (i = 0, l = consumer.sources.length; i < l; i++) { + uri = consumer.sources[i]; + source = consumer.sourceContentFor(uri, true); + mapping[uri] = source; + } + } + return mapping; + } + function doLoadOriginalSources(loadContext) { + var uris = Object.keys(loadContext.uriToSource); + var uri; + var source; + var total; + for (total = uris.length; loadContext.index < total; loadContext.index++) { + uri = uris[loadContext.index]; + source = loadContext.uriToSource[uri]; + if (source) { + loadContext.sourcesContent[uri] = source; + } else { + return loadOriginalSource(uri, loadContext); + } + } + return loadContext.callback(); + } + function loadOriginalSource(uri, loadContext) { + var content; + if (isRemoteResource(uri)) { + return loadOriginalSourceFromRemoteUri(uri, loadContext, function(content2) { + loadContext.index++; + loadContext.sourcesContent[uri] = content2; + return doLoadOriginalSources(loadContext); + }); + } + content = loadOriginalSourceFromLocalUri(uri, loadContext); + loadContext.index++; + loadContext.sourcesContent[uri] = content; + return doLoadOriginalSources(loadContext); + } + function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) { + var isAllowed = isAllowedResource(uri, true, loadContext.inline); + var isRuntimeResource = !hasProtocol(uri); + if (loadContext.localOnly) { + loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.'); + return whenLoaded(null); + } + if (isRuntimeResource) { + loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.'); + return whenLoaded(null); + } + if (!isAllowed) { + loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); + return whenLoaded(null); + } + loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function(error, content) { + if (error) { + loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error); + } + whenLoaded(content); + }); + } + function loadOriginalSourceFromLocalUri(relativeUri, loadContext) { + var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline); + var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri); + if (!fs2.existsSync(absoluteUri) || !fs2.statSync(absoluteUri).isFile()) { + loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.'); + return null; + } + if (!isAllowed) { + loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.'); + return null; + } + var result = fs2.readFileSync(absoluteUri, "utf8"); + if (result.charCodeAt(0) === 65279) { + result = result.substring(1); + } + return result; + } + module2.exports = loadOriginalSources; + } +}); + +// node_modules/clean-css/lib/reader/normalize-path.js +var require_normalize_path = __commonJS({ + "node_modules/clean-css/lib/reader/normalize-path.js"(exports, module2) { + var UNIX_SEPARATOR = "/"; + var WINDOWS_SEPARATOR_PATTERN = /\\/g; + function normalizePath(path) { + return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR); + } + module2.exports = normalizePath; + } +}); + +// node_modules/clean-css/lib/reader/restore-import.js +var require_restore_import = __commonJS({ + "node_modules/clean-css/lib/reader/restore-import.js"(exports, module2) { + function restoreImport(uri, mediaQuery) { + return ("@import " + uri + " " + mediaQuery).trim(); + } + module2.exports = restoreImport; + } +}); + +// node_modules/clean-css/lib/reader/rewrite-url.js +var require_rewrite_url = __commonJS({ + "node_modules/clean-css/lib/reader/rewrite-url.js"(exports, module2) { + var path = require("path"); + var url = require("url"); + var isDataUriResource = require_is_data_uri_resource(); + var DOUBLE_QUOTE = '"'; + var SINGLE_QUOTE = "'"; + var URL_PREFIX = "url("; + var URL_SUFFIX = ")"; + var PROTOCOL_LESS_PREFIX_PATTERN = /^[^\w\d]*\/\//; + var QUOTE_PREFIX_PATTERN = /^["']/; + var QUOTE_SUFFIX_PATTERN = /["']$/; + var ROUND_BRACKETS_PATTERN = /[()]/; + var URL_PREFIX_PATTERN = /^url\(/i; + var URL_SUFFIX_PATTERN = /\)$/; + var WHITESPACE_PATTERN = /\s/; + var isWindows = process.platform == "win32"; + function rebase(uri, rebaseConfig) { + if (!rebaseConfig) { + return uri; + } + if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) { + return uri; + } + if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri) || isDataUriResource(uri)) { + return uri; + } + if (isRemote(rebaseConfig.toBase)) { + return url.resolve(rebaseConfig.toBase, uri); + } + return rebaseConfig.absolute ? normalize(absolute(uri, rebaseConfig)) : normalize(relative(uri, rebaseConfig)); + } + function isAbsolute(uri) { + return path.isAbsolute(uri); + } + function isSVGMarker(uri) { + return uri[0] == "#"; + } + function isInternal(uri) { + return /^\w+:\w+/.test(uri); + } + function isRemote(uri) { + return /^[^:]+?:\/\//.test(uri) || PROTOCOL_LESS_PREFIX_PATTERN.test(uri); + } + function absolute(uri, rebaseConfig) { + return path.resolve(path.join(rebaseConfig.fromBase || "", uri)).replace(rebaseConfig.toBase, ""); + } + function relative(uri, rebaseConfig) { + return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || "", uri)); + } + function normalize(uri) { + return isWindows ? uri.replace(/\\/g, "/") : uri; + } + function quoteFor(unquotedUrl) { + if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) { + return DOUBLE_QUOTE; + } + if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) { + return SINGLE_QUOTE; + } + if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) { + return SINGLE_QUOTE; + } + return ""; + } + function hasWhitespace(url2) { + return WHITESPACE_PATTERN.test(url2); + } + function hasRoundBrackets(url2) { + return ROUND_BRACKETS_PATTERN.test(url2); + } + function rewriteUrl(originalUrl, rebaseConfig, pathOnly) { + var strippedUrl = originalUrl.replace(URL_PREFIX_PATTERN, "").replace(URL_SUFFIX_PATTERN, "").trim(); + var unquotedUrl = strippedUrl.replace(QUOTE_PREFIX_PATTERN, "").replace(QUOTE_SUFFIX_PATTERN, "").trim(); + var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE ? strippedUrl[0] : quoteFor(unquotedUrl); + return pathOnly ? rebase(unquotedUrl, rebaseConfig) : URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX; + } + module2.exports = rewriteUrl; + } +}); + +// node_modules/clean-css/lib/utils/is-import.js +var require_is_import = __commonJS({ + "node_modules/clean-css/lib/utils/is-import.js"(exports, module2) { + var IMPORT_PREFIX_PATTERN = /^@import/i; + function isImport(value) { + return IMPORT_PREFIX_PATTERN.test(value); + } + module2.exports = isImport; + } +}); + +// node_modules/clean-css/lib/reader/rebase.js +var require_rebase2 = __commonJS({ + "node_modules/clean-css/lib/reader/rebase.js"(exports, module2) { + var extractImportUrlAndMedia = require_extract_import_url_and_media(); + var restoreImport = require_restore_import(); + var rewriteUrl = require_rewrite_url(); + var Token = require_token(); + var isImport = require_is_import(); + var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/; + function rebase(tokens, rebaseAll, validator, rebaseConfig) { + return rebaseAll ? rebaseEverything(tokens, validator, rebaseConfig) : rebaseAtRules(tokens, validator, rebaseConfig); + } + function rebaseEverything(tokens, validator, rebaseConfig) { + var token; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + switch (token[0]) { + case Token.AT_RULE: + rebaseAtRule(token, validator, rebaseConfig); + break; + case Token.AT_RULE_BLOCK: + rebaseProperties(token[2], validator, rebaseConfig); + break; + case Token.COMMENT: + rebaseSourceMapComment(token, rebaseConfig); + break; + case Token.NESTED_BLOCK: + rebaseEverything(token[2], validator, rebaseConfig); + break; + case Token.RULE: + rebaseProperties(token[2], validator, rebaseConfig); + break; + } + } + return tokens; + } + function rebaseAtRules(tokens, validator, rebaseConfig) { + var token; + var i, l; + for (i = 0, l = tokens.length; i < l; i++) { + token = tokens[i]; + switch (token[0]) { + case Token.AT_RULE: + rebaseAtRule(token, validator, rebaseConfig); + break; + } + } + return tokens; + } + function rebaseAtRule(token, validator, rebaseConfig) { + if (!isImport(token[1])) { + return; + } + var uriAndMediaQuery = extractImportUrlAndMedia(token[1]); + var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig); + var mediaQuery = uriAndMediaQuery[1]; + token[1] = restoreImport(newUrl, mediaQuery); + } + function rebaseSourceMapComment(token, rebaseConfig) { + var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]); + if (matches && matches[1].indexOf("data:") === -1) { + token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true)); + } + } + function rebaseProperties(properties, validator, rebaseConfig) { + var property; + var value; + var i, l; + var j, m; + for (i = 0, l = properties.length; i < l; i++) { + property = properties[i]; + for (j = 2, m = property.length; j < m; j++) { + value = property[j][1]; + if (validator.isUrl(value)) { + property[j][1] = rewriteUrl(value, rebaseConfig); + } + } + } + } + module2.exports = rebase; + } +}); + +// node_modules/clean-css/lib/tokenizer/tokenize.js +var require_tokenize = __commonJS({ + "node_modules/clean-css/lib/tokenizer/tokenize.js"(exports, module2) { + var Marker = require_marker(); + var Token = require_token(); + var formatPosition = require_format_position(); + var Level = { + BLOCK: "block", + COMMENT: "comment", + DOUBLE_QUOTE: "double-quote", + RULE: "rule", + SINGLE_QUOTE: "single-quote" + }; + var AT_RULES = [ + "@charset", + "@import" + ]; + var BLOCK_RULES = [ + "@-moz-document", + "@document", + "@-moz-keyframes", + "@-ms-keyframes", + "@-o-keyframes", + "@-webkit-keyframes", + "@keyframes", + "@media", + "@supports", + "@container", + "@layer" + ]; + var IGNORE_END_COMMENT_PATTERN = /\/\* clean-css ignore:end \*\/$/; + var IGNORE_START_COMMENT_PATTERN = /^\/\* clean-css ignore:start \*\//; + var PAGE_MARGIN_BOXES = [ + "@bottom-center", + "@bottom-left", + "@bottom-left-corner", + "@bottom-right", + "@bottom-right-corner", + "@left-bottom", + "@left-middle", + "@left-top", + "@right-bottom", + "@right-middle", + "@right-top", + "@top-center", + "@top-left", + "@top-left-corner", + "@top-right", + "@top-right-corner" + ]; + var EXTRA_PAGE_BOXES = [ + "@footnote", + "@footnotes", + "@left", + "@page-float-bottom", + "@page-float-top", + "@right" + ]; + var REPEAT_PATTERN = /^\[\s{0,31}\d+\s{0,31}\]$/; + var TAIL_BROKEN_VALUE_PATTERN = /([^}])\}*$/; + var RULE_WORD_SEPARATOR_PATTERN = /[\s(]/; + function tokenize(source, externalContext) { + var internalContext = { + level: Level.BLOCK, + position: { + source: externalContext.source || void 0, + line: 1, + column: 0, + index: 0 + } + }; + return intoTokens(source, externalContext, internalContext, false); + } + function intoTokens(source, externalContext, internalContext, isNested) { + var allTokens = []; + var newTokens = allTokens; + var lastToken; + var ruleToken; + var ruleTokens = []; + var propertyToken; + var metadata; + var metadatas = []; + var level = internalContext.level; + var levels = []; + var buffer = []; + var buffers = []; + var isBufferEmpty = true; + var serializedBuffer; + var serializedBufferPart; + var roundBracketLevel = 0; + var isQuoted; + var isSpace; + var isNewLineNix; + var isNewLineWin; + var isCarriageReturn; + var isCommentStart; + var wasCommentStart = false; + var isCommentEnd; + var wasCommentEnd = false; + var isCommentEndMarker; + var isEscaped; + var wasEscaped = false; + var characterWithNoSpecialMeaning; + var isPreviousDash = false; + var isVariable = false; + var isRaw = false; + var seekingValue = false; + var seekingPropertyBlockClosing = false; + var position = internalContext.position; + var lastCommentStartAt; + for (; position.index < source.length; position.index++) { + var character = source[position.index]; + isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE; + isSpace = character == Marker.SPACE || character == Marker.TAB; + isNewLineNix = character == Marker.NEW_LINE_NIX; + isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.CARRIAGE_RETURN; + isCarriageReturn = character == Marker.CARRIAGE_RETURN && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX; + isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH; + isCommentEndMarker = !wasCommentStart && !isQuoted && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK; + isCommentEnd = level == Level.COMMENT && isCommentEndMarker; + characterWithNoSpecialMeaning = !isSpace && !isCarriageReturn && (character >= "A" && character <= "Z" || character >= "a" && character <= "z" || character >= "0" && character <= "9" || character == "-"); + isVariable = isVariable || level != Level.COMMENT && !seekingValue && isPreviousDash && character === "-" && buffer.length === 1; + isPreviousDash = character === "-"; + roundBracketLevel = Math.max(roundBracketLevel, 0); + metadata = isBufferEmpty ? [position.line, position.column, position.source] : metadata; + if (isEscaped) { + buffer.push(character); + isBufferEmpty = false; + } else if (characterWithNoSpecialMeaning) { + buffer.push(character); + isBufferEmpty = false; + } else if ((isSpace || isNewLineNix && !isNewLineWin) && (isQuoted || level == Level.COMMENT)) { + buffer.push(character); + isBufferEmpty = false; + } else if ((isSpace || isNewLineNix && !isNewLineWin) && isBufferEmpty) { + } else if (!isCommentEnd && level == Level.COMMENT) { + buffer.push(character); + isBufferEmpty = false; + } else if (!isCommentStart && !isCommentEnd && isRaw) { + buffer.push(character); + isBufferEmpty = false; + } else if (isCommentStart && isVariable && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) { + buffer.push(character); + isBufferEmpty = false; + levels.push(level); + level = Level.COMMENT; + } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) { + metadatas.push(metadata); + buffer.push(character); + buffers.push(buffer.slice(0, -2)); + isBufferEmpty = false; + buffer = buffer.slice(-2); + metadata = [position.line, position.column - 1, position.source]; + levels.push(level); + level = Level.COMMENT; + } else if (isCommentStart) { + levels.push(level); + level = Level.COMMENT; + buffer.push(character); + isBufferEmpty = false; + } else if (isCommentEnd && isVariable) { + buffer.push(character); + level = levels.pop(); + } else if (isCommentEnd && isIgnoreStartComment(buffer)) { + serializedBuffer = buffer.join("").trim() + character; + lastToken = [ + Token.COMMENT, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]; + newTokens.push(lastToken); + isRaw = true; + metadata = metadatas.pop() || null; + buffer = buffers.pop() || []; + isBufferEmpty = buffer.length === 0; + } else if (isCommentEnd && isIgnoreEndComment(buffer)) { + serializedBuffer = buffer.join("") + character; + lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK); + serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt); + lastToken = [ + Token.RAW, + serializedBufferPart, + [originalMetadata(metadata, serializedBufferPart, externalContext)] + ]; + newTokens.push(lastToken); + serializedBufferPart = serializedBuffer.substring(lastCommentStartAt); + metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source]; + lastToken = [ + Token.COMMENT, + serializedBufferPart, + [originalMetadata(metadata, serializedBufferPart, externalContext)] + ]; + newTokens.push(lastToken); + isRaw = false; + level = levels.pop(); + metadata = metadatas.pop() || null; + buffer = buffers.pop() || []; + isBufferEmpty = buffer.length === 0; + } else if (isCommentEnd) { + serializedBuffer = buffer.join("").trim() + character; + lastToken = [ + Token.COMMENT, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]; + newTokens.push(lastToken); + level = levels.pop(); + metadata = metadatas.pop() || null; + buffer = buffers.pop() || []; + isBufferEmpty = buffer.length === 0; + } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) { + externalContext.warnings.push("Unexpected '*/' at " + formatPosition([position.line, position.column, position.source]) + "."); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.SINGLE_QUOTE && !isQuoted) { + levels.push(level); + level = Level.SINGLE_QUOTE; + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) { + level = levels.pop(); + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) { + levels.push(level); + level = Level.DOUBLE_QUOTE; + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) { + level = levels.pop(); + buffer.push(character); + isBufferEmpty = false; + } else if (character != Marker.CLOSE_ROUND_BRACKET && character != Marker.OPEN_ROUND_BRACKET && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) { + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) { + buffer.push(character); + isBufferEmpty = false; + roundBracketLevel++; + } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) { + buffer.push(character); + isBufferEmpty = false; + roundBracketLevel--; + } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) { + serializedBuffer = buffer.join("").trim(); + allTokens.push([ + Token.AT_RULE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) { + serializedBuffer = buffer.join("").trim(); + ruleToken[1].push([ + tokenScopeFrom(ruleToken[0]), + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) { + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.COMMA && level == Level.BLOCK) { + ruleToken = [tokenTypeFrom(buffer), [], []]; + serializedBuffer = buffer.join("").trim(); + ruleToken[1].push([ + tokenScopeFrom(ruleToken[0]), + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext, 0)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && ruleToken && ruleToken[0] == Token.NESTED_BLOCK) { + serializedBuffer = buffer.join("").trim(); + ruleToken[1].push([ + Token.NESTED_BLOCK_SCOPE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + allTokens.push(ruleToken); + levels.push(level); + position.column++; + position.index++; + buffer = []; + isBufferEmpty = true; + ruleToken[2] = intoTokens(source, externalContext, internalContext, true); + ruleToken = null; + } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) { + serializedBuffer = buffer.join("").trim(); + ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []]; + ruleToken[1].push([ + Token.NESTED_BLOCK_SCOPE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + allTokens.push(ruleToken); + levels.push(level); + position.column++; + position.index++; + buffer = []; + isBufferEmpty = true; + isVariable = false; + ruleToken[2] = intoTokens(source, externalContext, internalContext, true); + ruleToken = null; + } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) { + serializedBuffer = buffer.join("").trim(); + ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []]; + ruleToken[1].push([ + tokenScopeFrom(ruleToken[0]), + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)] + ]); + newTokens = ruleToken[2]; + allTokens.push(ruleToken); + levels.push(level); + level = Level.RULE; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) { + ruleTokens.push(ruleToken); + ruleToken = [Token.PROPERTY_BLOCK, []]; + propertyToken.push(ruleToken); + newTokens = ruleToken[1]; + levels.push(level); + level = Level.RULE; + seekingValue = false; + } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) { + serializedBuffer = buffer.join("").trim(); + ruleTokens.push(ruleToken); + ruleToken = [Token.AT_RULE_BLOCK, [], []]; + ruleToken[1].push([ + Token.AT_RULE_BLOCK_SCOPE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + newTokens.push(ruleToken); + newTokens = ruleToken[2]; + levels.push(level); + level = Level.RULE; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) { + serializedBuffer = buffer.join("").trim(); + propertyToken = [ + Token.PROPERTY, + [ + Token.PROPERTY_NAME, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ] + ]; + newTokens.push(propertyToken); + seekingValue = true; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && ruleTokens.length > 0 && !isBufferEmpty && buffer[0] == Marker.AT) { + serializedBuffer = buffer.join("").trim(); + ruleToken[1].push([ + Token.AT_RULE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && !isBufferEmpty) { + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken = null; + seekingValue = false; + buffer = []; + isBufferEmpty = true; + isVariable = false; + } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty && isVariable && !propertyToken[2]) { + propertyToken.push([Token.PROPERTY_VALUE, " ", [originalMetadata(metadata, " ", externalContext)]]); + isVariable = false; + propertyToken = null; + seekingValue = false; + } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty) { + propertyToken = null; + seekingValue = false; + } else if (character == Marker.SEMICOLON && level == Level.RULE && !isBufferEmpty && buffer[0] == Marker.AT) { + serializedBuffer = buffer.join(""); + newTokens.push([ + Token.AT_RULE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + seekingValue = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) { + seekingPropertyBlockClosing = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.SEMICOLON && level == Level.RULE && isBufferEmpty) { + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && seekingValue && !isBufferEmpty && ruleTokens.length > 0) { + serializedBuffer = buffer.join(""); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken = null; + ruleToken = ruleTokens.pop(); + newTokens = ruleToken[2]; + level = levels.pop(); + seekingValue = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && !isBufferEmpty && buffer[0] == Marker.AT && ruleTokens.length > 0) { + serializedBuffer = buffer.join(""); + ruleToken[1].push([ + Token.AT_RULE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken = null; + ruleToken = ruleTokens.pop(); + newTokens = ruleToken[2]; + level = levels.pop(); + seekingValue = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && ruleTokens.length > 0) { + propertyToken = null; + ruleToken = ruleTokens.pop(); + newTokens = ruleToken[2]; + level = levels.pop(); + seekingValue = false; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && !isBufferEmpty) { + serializedBuffer = buffer.join(""); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken = null; + ruleToken = ruleTokens.pop(); + newTokens = allTokens; + level = levels.pop(); + seekingValue = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && !isBufferEmpty && buffer[0] == Marker.AT) { + propertyToken = null; + ruleToken = null; + serializedBuffer = buffer.join("").trim(); + newTokens.push([ + Token.AT_RULE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + newTokens = allTokens; + level = levels.pop(); + seekingValue = false; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && levels[levels.length - 1] == Level.RULE) { + propertyToken = null; + ruleToken = ruleTokens.pop(); + newTokens = ruleToken[2]; + level = levels.pop(); + seekingValue = false; + seekingPropertyBlockClosing = true; + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && isVariable && propertyToken && !propertyToken[2]) { + propertyToken.push([Token.PROPERTY_VALUE, " ", [originalMetadata(metadata, " ", externalContext)]]); + isVariable = false; + propertyToken = null; + ruleToken = null; + newTokens = allTokens; + level = levels.pop(); + seekingValue = false; + isVariable = false; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) { + propertyToken = null; + ruleToken = null; + newTokens = allTokens; + level = levels.pop(); + seekingValue = false; + isVariable = false; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK && !isNested && position.index <= source.length - 1) { + externalContext.warnings.push("Unexpected '}' at " + formatPosition([position.line, position.column, position.source]) + "."); + buffer.push(character); + isBufferEmpty = false; + } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) { + break; + } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) { + buffer.push(character); + isBufferEmpty = false; + roundBracketLevel++; + } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue && roundBracketLevel == 1) { + buffer.push(character); + isBufferEmpty = false; + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + roundBracketLevel--; + buffer = []; + isBufferEmpty = true; + isVariable = false; + } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) { + buffer.push(character); + isBufferEmpty = false; + isVariable = false; + roundBracketLevel--; + } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue && !isBufferEmpty) { + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken.push([ + Token.PROPERTY_VALUE, + character, + [[position.line, position.column, position.source]] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue) { + propertyToken.push([ + Token.PROPERTY_VALUE, + character, + [[position.line, position.column, position.source]] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && !isBufferEmpty) { + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + propertyToken.push([ + Token.PROPERTY_VALUE, + character, + [[position.line, position.column, position.source]] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) { + propertyToken.push([ + Token.PROPERTY_VALUE, + character, + [[position.line, position.column, position.source]] + ]); + buffer = []; + isBufferEmpty = true; + } else if (character == Marker.CLOSE_SQUARE_BRACKET && propertyToken && propertyToken.length > 1 && !isBufferEmpty && isRepeatToken(buffer)) { + buffer.push(character); + serializedBuffer = buffer.join("").trim(); + propertyToken[propertyToken.length - 1][1] += serializedBuffer; + buffer = []; + isBufferEmpty = true; + } else if ((isSpace || isNewLineNix && !isNewLineWin) && level == Level.RULE && seekingValue && propertyToken && !isBufferEmpty) { + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) { + serializedBuffer = buffer.join("").trim(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + buffer = []; + isBufferEmpty = true; + } else if (isNewLineWin && level == Level.RULE && seekingValue) { + buffer = []; + isBufferEmpty = true; + } else if (isNewLineWin && buffer.length == 1) { + buffer.pop(); + isBufferEmpty = buffer.length === 0; + } else if (!isBufferEmpty || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) { + buffer.push(character); + isBufferEmpty = false; + } + wasEscaped = isEscaped; + isEscaped = !wasEscaped && character == Marker.BACK_SLASH; + wasCommentStart = isCommentStart; + wasCommentEnd = isCommentEnd; + position.line = isNewLineWin || isNewLineNix || isCarriageReturn ? position.line + 1 : position.line; + position.column = isNewLineWin || isNewLineNix || isCarriageReturn ? 0 : position.column + 1; + } + if (seekingValue) { + externalContext.warnings.push("Missing '}' at " + formatPosition([position.line, position.column, position.source]) + "."); + } + if (seekingValue && buffer.length > 0) { + serializedBuffer = buffer.join("").trimRight().replace(TAIL_BROKEN_VALUE_PATTERN, "$1").trimRight(); + propertyToken.push([ + Token.PROPERTY_VALUE, + serializedBuffer, + [originalMetadata(metadata, serializedBuffer, externalContext)] + ]); + buffer = []; + } + if (buffer.length > 0) { + externalContext.warnings.push("Invalid character(s) '" + buffer.join("") + "' at " + formatPosition(metadata) + ". Ignoring."); + } + return allTokens; + } + function isIgnoreStartComment(buffer) { + return IGNORE_START_COMMENT_PATTERN.test(buffer.join("") + Marker.FORWARD_SLASH); + } + function isIgnoreEndComment(buffer) { + return IGNORE_END_COMMENT_PATTERN.test(buffer.join("") + Marker.FORWARD_SLASH); + } + function originalMetadata(metadata, value, externalContext, selectorFallbacks) { + var source = metadata[2]; + return externalContext.inputSourceMapTracker.isTracking(source) ? externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks) : metadata; + } + function tokenTypeFrom(buffer) { + var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE; + var ruleWord = buffer.join("").split(RULE_WORD_SEPARATOR_PATTERN)[0]; + if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) { + return Token.NESTED_BLOCK; + } + if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) { + return Token.AT_RULE; + } + if (isAtRule) { + return Token.AT_RULE_BLOCK; + } + return Token.RULE; + } + function tokenScopeFrom(tokenType) { + if (tokenType == Token.RULE) { + return Token.RULE_SCOPE; + } + if (tokenType == Token.NESTED_BLOCK) { + return Token.NESTED_BLOCK_SCOPE; + } + if (tokenType == Token.AT_RULE_BLOCK) { + return Token.AT_RULE_BLOCK_SCOPE; + } + } + function isPageMarginBox(buffer) { + var serializedBuffer = buffer.join("").trim(); + return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1; + } + function isRepeatToken(buffer) { + return REPEAT_PATTERN.test(buffer.join("") + Marker.CLOSE_SQUARE_BRACKET); + } + module2.exports = tokenize; + } +}); + +// node_modules/clean-css/lib/reader/read-sources.js +var require_read_sources = __commonJS({ + "node_modules/clean-css/lib/reader/read-sources.js"(exports, module2) { + var fs2 = require("fs"); + var path = require("path"); + var applySourceMaps = require_apply_source_maps(); + var extractImportUrlAndMedia = require_extract_import_url_and_media(); + var isAllowedResource = require_is_allowed_resource(); + var loadOriginalSources = require_load_original_sources(); + var normalizePath = require_normalize_path(); + var rebase = require_rebase2(); + var rebaseLocalMap = require_rebase_local_map(); + var rebaseRemoteMap = require_rebase_remote_map(); + var restoreImport = require_restore_import(); + var tokenize = require_tokenize(); + var Token = require_token(); + var Marker = require_marker(); + var hasProtocol = require_has_protocol(); + var isImport = require_is_import(); + var isRemoteResource = require_is_remote_resource(); + var UNKNOWN_URI = "uri:unknown"; + var FILE_RESOURCE_PROTOCOL = "file://"; + function readSources(input, context, callback) { + return doReadSources(input, context, function(tokens) { + return applySourceMaps(tokens, context, function() { + return loadOriginalSources(context, function() { + return callback(tokens); + }); + }); + }); + } + function doReadSources(input, context, callback) { + if (typeof input == "string") { + return fromString(input, context, callback); + } + if (Buffer.isBuffer(input)) { + return fromString(input.toString(), context, callback); + } + if (Array.isArray(input)) { + return fromArray(input, context, callback); + } + if (typeof input == "object") { + return fromHash(input, context, callback); + } + } + function fromString(input, context, callback) { + context.source = void 0; + context.sourcesContent[void 0] = input; + context.stats.originalSize += input.length; + return fromStyles(input, context, { inline: context.options.inline }, callback); + } + function fromArray(input, context, callback) { + var inputAsImports = input.reduce(function(accumulator, uriOrHash) { + if (typeof uriOrHash === "string") { + return addStringSource(uriOrHash, accumulator); + } + return addHashSource(uriOrHash, context, accumulator); + }, []); + return fromStyles(inputAsImports.join(""), context, { inline: ["all"] }, callback); + } + function fromHash(input, context, callback) { + var inputAsImports = addHashSource(input, context, []); + return fromStyles(inputAsImports.join(""), context, { inline: ["all"] }, callback); + } + function addStringSource(input, imports) { + imports.push(restoreAsImport(normalizeUri(input))); + return imports; + } + function addHashSource(input, context, imports) { + var uri; + var normalizedUri; + var source; + for (uri in input) { + source = input[uri]; + normalizedUri = normalizeUri(uri); + imports.push(restoreAsImport(normalizedUri)); + context.sourcesContent[normalizedUri] = source.styles; + if (source.sourceMap) { + trackSourceMap(source.sourceMap, normalizedUri, context); + } + } + return imports; + } + function normalizeUri(uri) { + var currentPath = path.resolve(""); + var absoluteUri; + var relativeToCurrentPath; + var normalizedUri; + if (isRemoteResource(uri)) { + return uri; + } + absoluteUri = path.isAbsolute(uri) ? uri : path.resolve(uri); + relativeToCurrentPath = path.relative(currentPath, absoluteUri); + normalizedUri = normalizePath(relativeToCurrentPath); + return normalizedUri; + } + function trackSourceMap(sourceMap, uri, context) { + var parsedMap = typeof sourceMap == "string" ? JSON.parse(sourceMap) : sourceMap; + var rebasedMap = isRemoteResource(uri) ? rebaseRemoteMap(parsedMap, uri) : rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo); + context.inputSourceMapTracker.track(uri, rebasedMap); + } + function restoreAsImport(uri) { + return restoreImport("url(" + uri + ")", "") + Marker.SEMICOLON; + } + function fromStyles(styles, context, parentInlinerContext, callback) { + var tokens; + var rebaseConfig = {}; + if (!context.source) { + rebaseConfig.fromBase = path.resolve(""); + rebaseConfig.toBase = context.options.rebaseTo; + } else if (isRemoteResource(context.source)) { + rebaseConfig.fromBase = context.source; + rebaseConfig.toBase = context.source; + } else if (path.isAbsolute(context.source)) { + rebaseConfig.fromBase = path.dirname(context.source); + rebaseConfig.toBase = context.options.rebaseTo; + } else { + rebaseConfig.fromBase = path.dirname(path.resolve(context.source)); + rebaseConfig.toBase = context.options.rebaseTo; + } + tokens = tokenize(styles, context); + tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig); + return allowsAnyImports(parentInlinerContext.inline) ? inline(tokens, context, parentInlinerContext, callback) : callback(tokens); + } + function allowsAnyImports(inline2) { + return !(inline2.length == 1 && inline2[0] == "none"); + } + function inline(tokens, externalContext, parentInlinerContext, callback) { + var inlinerContext = { + afterContent: false, + callback, + errors: externalContext.errors, + externalContext, + fetch: externalContext.options.fetch, + inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets, + inline: parentInlinerContext.inline, + inlineRequest: externalContext.options.inlineRequest, + inlineTimeout: externalContext.options.inlineTimeout, + isRemote: parentInlinerContext.isRemote || false, + localOnly: externalContext.localOnly, + outputTokens: [], + rebaseTo: externalContext.options.rebaseTo, + sourceTokens: tokens, + warnings: externalContext.warnings + }; + return doInlineImports(inlinerContext); + } + function doInlineImports(inlinerContext) { + var token; + var i, l; + for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) { + token = inlinerContext.sourceTokens[i]; + if (token[0] == Token.AT_RULE && isImport(token[1])) { + inlinerContext.sourceTokens.splice(0, i); + return inlineStylesheet(token, inlinerContext); + } + if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) { + inlinerContext.outputTokens.push(token); + } else { + inlinerContext.outputTokens.push(token); + inlinerContext.afterContent = true; + } + } + inlinerContext.sourceTokens = []; + return inlinerContext.callback(inlinerContext.outputTokens); + } + function inlineStylesheet(token, inlinerContext) { + var uriAndMediaQuery = extractImportUrlAndMedia(token[1]); + var uri = uriAndMediaQuery[0]; + var mediaQuery = uriAndMediaQuery[1]; + var metadata = token[2]; + return isRemoteResource(uri) ? inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) : inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext); + } + function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) { + var isAllowed = isAllowedResource(uri, true, inlinerContext.inline); + var originalUri = uri; + var isLoaded = uri in inlinerContext.externalContext.sourcesContent; + var isRuntimeResource = !hasProtocol(uri); + if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) { + inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.'); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + if (inlinerContext.localOnly && inlinerContext.afterContent) { + inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.'); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + if (isRuntimeResource) { + inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.'); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + if (inlinerContext.localOnly && !isLoaded) { + inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.'); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + if (!isAllowed && inlinerContext.afterContent) { + inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.'); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + if (!isAllowed) { + inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.'); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + inlinerContext.inlinedStylesheets.push(uri); + function whenLoaded(error, importedStyles) { + if (error) { + inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error); + return process.nextTick(function() { + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + doInlineImports(inlinerContext); + }); + } + inlinerContext.inline = inlinerContext.externalContext.options.inline; + inlinerContext.isRemote = true; + inlinerContext.externalContext.source = originalUri; + inlinerContext.externalContext.sourcesContent[uri] = importedStyles; + inlinerContext.externalContext.stats.originalSize += importedStyles.length; + return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) { + importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + }); + } + return isLoaded ? whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri]) : inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded); + } + function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) { + var protocolLessUri = uri.replace(FILE_RESOURCE_PROTOCOL, ""); + var currentPath = path.resolve(""); + var absoluteUri = path.isAbsolute(protocolLessUri) ? path.resolve(currentPath, protocolLessUri[0] == "/" ? protocolLessUri.substring(1) : protocolLessUri) : path.resolve(inlinerContext.rebaseTo, protocolLessUri); + var relativeToCurrentPath = path.relative(currentPath, absoluteUri); + var importedStyles; + var isAllowed = isAllowedResource(protocolLessUri, false, inlinerContext.inline); + var normalizedPath = normalizePath(relativeToCurrentPath); + var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent; + if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) { + inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as it has already been imported.'); + } else if (isAllowed && !isLoaded && (!fs2.existsSync(absoluteUri) || !fs2.statSync(absoluteUri).isFile())) { + inlinerContext.errors.push('Ignoring local @import of "' + protocolLessUri + '" as resource is missing.'); + } else if (!isAllowed && inlinerContext.afterContent) { + inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as resource is not allowed and after other content.'); + } else if (inlinerContext.afterContent) { + inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as after other content.'); + } else if (!isAllowed) { + inlinerContext.warnings.push('Skipping local @import of "' + protocolLessUri + '" as resource is not allowed.'); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); + } else { + importedStyles = isLoaded ? inlinerContext.externalContext.sourcesContent[normalizedPath] : fs2.readFileSync(absoluteUri, "utf-8"); + if (importedStyles.charCodeAt(0) === 65279) { + importedStyles = importedStyles.substring(1); + } + inlinerContext.inlinedStylesheets.push(absoluteUri); + inlinerContext.inline = inlinerContext.externalContext.options.inline; + inlinerContext.externalContext.source = normalizedPath; + inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles; + inlinerContext.externalContext.stats.originalSize += importedStyles.length; + return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) { + importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata); + inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens); + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + }); + } + inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); + return doInlineImports(inlinerContext); + } + function wrapInMedia(tokens, mediaQuery, metadata) { + if (mediaQuery) { + return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, "@media " + mediaQuery, metadata]], tokens]]; + } + return tokens; + } + module2.exports = readSources; + } +}); + +// node_modules/clean-css/lib/writer/simple.js +var require_simple = __commonJS({ + "node_modules/clean-css/lib/writer/simple.js"(exports, module2) { + var all = require_helpers().all; + function store(serializeContext, token) { + var value = typeof token == "string" ? token : token[1]; + var wrap2 = serializeContext.wrap; + wrap2(serializeContext, value); + track(serializeContext, value); + serializeContext.output.push(value); + } + function wrap(serializeContext, value) { + if (serializeContext.column + value.length > serializeContext.format.wrapAt) { + track(serializeContext, serializeContext.format.breakWith); + serializeContext.output.push(serializeContext.format.breakWith); + } + } + function track(serializeContext, value) { + var parts = value.split("\n"); + serializeContext.line += parts.length - 1; + serializeContext.column = parts.length > 1 ? 0 : serializeContext.column + parts.pop().length; + } + function serializeStyles(tokens, context) { + var serializeContext = { + column: 0, + format: context.options.format, + indentBy: 0, + indentWith: "", + line: 1, + output: [], + spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace, + store, + wrap: context.options.format.wrapAt ? wrap : function() { + } + }; + all(serializeContext, tokens); + return { styles: serializeContext.output.join("") }; + } + module2.exports = serializeStyles; + } +}); + +// node_modules/clean-css/lib/writer/source-maps.js +var require_source_maps = __commonJS({ + "node_modules/clean-css/lib/writer/source-maps.js"(exports, module2) { + var SourceMapGenerator = require_source_map().SourceMapGenerator; + var all = require_helpers().all; + var isRemoteResource = require_is_remote_resource(); + var isWindows = process.platform == "win32"; + var NIX_SEPARATOR_PATTERN = /\//g; + var UNKNOWN_SOURCE = "$stdin"; + var WINDOWS_SEPARATOR = "\\"; + function store(serializeContext, element) { + var fromString = typeof element == "string"; + var value = fromString ? element : element[1]; + var mappings = fromString ? null : element[2]; + var wrap2 = serializeContext.wrap; + wrap2(serializeContext, value); + track(serializeContext, value, mappings); + serializeContext.output.push(value); + } + function wrap(serializeContext, value) { + if (serializeContext.column + value.length > serializeContext.format.wrapAt) { + track(serializeContext, serializeContext.format.breakWith, false); + serializeContext.output.push(serializeContext.format.breakWith); + } + } + function track(serializeContext, value, mappings) { + var parts = value.split("\n"); + if (mappings) { + trackAllMappings(serializeContext, mappings); + } + serializeContext.line += parts.length - 1; + serializeContext.column = parts.length > 1 ? 0 : serializeContext.column + parts.pop().length; + } + function trackAllMappings(serializeContext, mappings) { + for (var i = 0, l = mappings.length; i < l; i++) { + trackMapping(serializeContext, mappings[i]); + } + } + function trackMapping(serializeContext, mapping) { + var line = mapping[0]; + var column = mapping[1]; + var originalSource = mapping[2]; + var source = originalSource; + var storedSource = source || UNKNOWN_SOURCE; + if (isWindows && source && !isRemoteResource(source)) { + storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR); + } + serializeContext.outputMap.addMapping({ + generated: { + line: serializeContext.line, + column: serializeContext.column + }, + source: storedSource, + original: { + line, + column + } + }); + if (serializeContext.inlineSources && originalSource in serializeContext.sourcesContent) { + serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]); + } + } + function serializeStylesAndSourceMap(tokens, context) { + var serializeContext = { + column: 0, + format: context.options.format, + indentBy: 0, + indentWith: "", + inlineSources: context.options.sourceMapInlineSources, + line: 1, + output: [], + outputMap: new SourceMapGenerator(), + sourcesContent: context.sourcesContent, + spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace, + store, + wrap: context.options.format.wrapAt ? wrap : function() { + } + }; + all(serializeContext, tokens); + return { + sourceMap: serializeContext.outputMap, + styles: serializeContext.output.join("") + }; + } + module2.exports = serializeStylesAndSourceMap; + } +}); + +// node_modules/clean-css/lib/clean.js +var require_clean = __commonJS({ + "node_modules/clean-css/lib/clean.js"(exports, module2) { + var level0Optimize = require_optimize(); + var level1Optimize = require_optimize2(); + var level2Optimize = require_optimize4(); + var validator = require_validator(); + var compatibilityFrom = require_compatibility(); + var fetchFrom = require_fetch(); + var formatFrom = require_format().formatFrom; + var inlineFrom = require_inline(); + var inlineRequestFrom = require_inline_request(); + var inlineTimeoutFrom = require_inline_timeout(); + var OptimizationLevel = require_optimization_level().OptimizationLevel; + var optimizationLevelFrom = require_optimization_level().optimizationLevelFrom; + var pluginsFrom = require_plugins(); + var rebaseFrom = require_rebase(); + var rebaseToFrom = require_rebase_to(); + var inputSourceMapTracker = require_input_source_map_tracker(); + var readSources = require_read_sources(); + var serializeStyles = require_simple(); + var serializeStylesAndSourceMap = require_source_maps(); + var CleanCSS = module2.exports = function CleanCSS2(options) { + options = options || {}; + this.options = { + batch: !!options.batch, + compatibility: compatibilityFrom(options.compatibility), + explicitRebaseTo: "rebaseTo" in options, + fetch: fetchFrom(options.fetch), + format: formatFrom(options.format), + inline: inlineFrom(options.inline), + inlineRequest: inlineRequestFrom(options.inlineRequest), + inlineTimeout: inlineTimeoutFrom(options.inlineTimeout), + level: optimizationLevelFrom(options.level), + plugins: pluginsFrom(options.plugins), + rebase: rebaseFrom(options.rebase, options.rebaseTo), + rebaseTo: rebaseToFrom(options.rebaseTo), + returnPromise: !!options.returnPromise, + sourceMap: !!options.sourceMap, + sourceMapInlineSources: !!options.sourceMapInlineSources + }; + }; + CleanCSS.process = function(input, opts) { + var cleanCss; + var optsTo = opts.to; + delete opts.to; + cleanCss = new CleanCSS(Object.assign({ + returnPromise: true, + rebaseTo: optsTo + }, opts)); + return cleanCss.minify(input).then(function(output) { + return { css: output.styles }; + }); + }; + CleanCSS.prototype.minify = function(input, maybeSourceMap, maybeCallback) { + var options = this.options; + if (options.returnPromise) { + return new Promise(function(resolve, reject) { + minifyAll(input, options, maybeSourceMap, function(errors, output) { + return errors ? reject(errors) : resolve(output); + }); + }); + } + return minifyAll(input, options, maybeSourceMap, maybeCallback); + }; + function minifyAll(input, options, maybeSourceMap, maybeCallback) { + if (options.batch && Array.isArray(input)) { + return minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback); + } + if (options.batch && typeof input == "object") { + return minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback); + } + return minify2(input, options, maybeSourceMap, maybeCallback); + } + function minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback) { + var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null; + var errors = []; + var outputAsHash = {}; + var inputValue; + var i, l; + function whenHashBatchDone(innerErrors, output) { + outputAsHash = Object.assign(outputAsHash, output); + if (innerErrors !== null) { + errors = errors.concat(innerErrors); + } + } + for (i = 0, l = input.length; i < l; i++) { + if (typeof input[i] == "object") { + minifyInBatchesFromHash(input[i], options, whenHashBatchDone); + } else { + inputValue = input[i]; + outputAsHash[inputValue] = minify2([inputValue], options); + errors = errors.concat(outputAsHash[inputValue].errors); + } + } + return callback ? callback(errors.length > 0 ? errors : null, outputAsHash) : outputAsHash; + } + function minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback) { + var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null; + var errors = []; + var outputAsHash = {}; + var inputKey; + var inputValue; + for (inputKey in input) { + inputValue = input[inputKey]; + outputAsHash[inputKey] = minify2(inputValue.styles, options, inputValue.sourceMap); + errors = errors.concat(outputAsHash[inputKey].errors); + } + return callback ? callback(errors.length > 0 ? errors : null, outputAsHash) : outputAsHash; + } + function minify2(input, options, maybeSourceMap, maybeCallback) { + var sourceMap = typeof maybeSourceMap != "function" ? maybeSourceMap : null; + var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null; + var context = { + stats: { + efficiency: 0, + minifiedSize: 0, + originalSize: 0, + startedAt: Date.now(), + timeSpent: 0 + }, + cache: { specificity: {} }, + errors: [], + inlinedStylesheets: [], + inputSourceMapTracker: inputSourceMapTracker(), + localOnly: !callback, + options, + source: null, + sourcesContent: {}, + validator: validator(options.compatibility), + warnings: [] + }; + var implicitRebaseToWarning; + if (sourceMap) { + context.inputSourceMapTracker.track(void 0, sourceMap); + } + if (options.rebase && !options.explicitRebaseTo) { + implicitRebaseToWarning = "You have set `rebase: true` without giving `rebaseTo` option, which, in this case, defaults to the current working directory. You are then warned this can lead to unexpected URL rebasing (aka here be dragons)! If you are OK with the clean-css output, then you can get rid of this warning by giving clean-css a `rebaseTo: process.cwd()` option."; + context.warnings.push(implicitRebaseToWarning); + } + return runner(context.localOnly)(function() { + return readSources(input, context, function(tokens) { + var serialize = context.options.sourceMap ? serializeStylesAndSourceMap : serializeStyles; + var optimizedTokens = optimize(tokens, context); + var optimizedStyles = serialize(optimizedTokens, context); + var output = withMetadata(optimizedStyles, context); + return callback ? callback(context.errors.length > 0 ? context.errors : null, output) : output; + }); + }); + } + function runner(localOnly) { + return localOnly ? function(callback) { + return callback(); + } : process.nextTick; + } + function optimize(tokens, context) { + var optimized = level0Optimize(tokens, context); + optimized = OptimizationLevel.One in context.options.level ? level1Optimize(tokens, context) : tokens; + optimized = OptimizationLevel.Two in context.options.level ? level2Optimize(tokens, context, true) : optimized; + return optimized; + } + function withMetadata(output, context) { + output.stats = calculateStatsFrom(output.styles, context); + output.errors = context.errors; + output.inlinedStylesheets = context.inlinedStylesheets; + output.warnings = context.warnings; + return output; + } + function calculateStatsFrom(styles, context) { + var finishedAt = Date.now(); + var timeSpent = finishedAt - context.stats.startedAt; + delete context.stats.startedAt; + context.stats.timeSpent = timeSpent; + context.stats.efficiency = 1 - styles.length / context.stats.originalSize; + context.stats.minifiedSize = styles.length; + return context.stats; + } + } +}); + +// node_modules/clean-css/index.js +var require_clean_css = __commonJS({ + "node_modules/clean-css/index.js"(exports, module2) { + module2.exports = require_clean(); + } +}); + +// node_modules/entities/lib/generated/decode-data-html.js +var require_decode_data_html = __commonJS({ + "node_modules/entities/lib/generated/decode-data-html.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(c) { + return c.charCodeAt(0); + })); + } +}); + +// node_modules/entities/lib/generated/decode-data-xml.js +var require_decode_data_xml = __commonJS({ + "node_modules/entities/lib/generated/decode-data-xml.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(c) { + return c.charCodeAt(0); + })); + } +}); + +// node_modules/entities/lib/decode_codepoint.js +var require_decode_codepoint = __commonJS({ + "node_modules/entities/lib/decode_codepoint.js"(exports) { + "use strict"; + var _a2; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.replaceCodePoint = exports.fromCodePoint = void 0; + var decodeMap = /* @__PURE__ */ new Map([ + [0, 65533], + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376] + ]); + exports.fromCodePoint = (_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) { + var output = ""; + if (codePoint > 65535) { + codePoint -= 65536; + output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296); + codePoint = 56320 | codePoint & 1023; + } + output += String.fromCharCode(codePoint); + return output; + }; + function replaceCodePoint(codePoint) { + var _a3; + if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) { + return 65533; + } + return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint; + } + exports.replaceCodePoint = replaceCodePoint; + function decodeCodePoint(codePoint) { + return (0, exports.fromCodePoint)(replaceCodePoint(codePoint)); + } + exports.default = decodeCodePoint; + } +}); + +// node_modules/entities/lib/decode.js +var require_decode = __commonJS({ + "node_modules/entities/lib/decode.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + } : function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + o[k2] = m[k]; + }); + var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + } : function(o, v) { + o["default"] = v; + }); + var __importStar = exports && exports.__importStar || function(mod) { + if (mod && mod.__esModule) + return mod; + var result = {}; + if (mod != null) { + for (var k in mod) + if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) + __createBinding(result, mod, k); + } + __setModuleDefault(result, mod); + return result; + }; + var __importDefault = exports && exports.__importDefault || function(mod) { + return mod && mod.__esModule ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; + var decode_data_html_js_1 = __importDefault(require_decode_data_html()); + exports.htmlDecodeTree = decode_data_html_js_1.default; + var decode_data_xml_js_1 = __importDefault(require_decode_data_xml()); + exports.xmlDecodeTree = decode_data_xml_js_1.default; + var decode_codepoint_js_1 = __importStar(require_decode_codepoint()); + exports.decodeCodePoint = decode_codepoint_js_1.default; + var decode_codepoint_js_2 = require_decode_codepoint(); + Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function() { + return decode_codepoint_js_2.replaceCodePoint; + } }); + Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function() { + return decode_codepoint_js_2.fromCodePoint; + } }); + var CharCodes; + (function(CharCodes2) { + CharCodes2[CharCodes2["NUM"] = 35] = "NUM"; + CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI"; + CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS"; + CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO"; + CharCodes2[CharCodes2["NINE"] = 57] = "NINE"; + CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A"; + CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F"; + CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X"; + CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z"; + CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A"; + CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F"; + CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z"; + })(CharCodes || (CharCodes = {})); + var TO_LOWER_BIT = 32; + var BinTrieFlags; + (function(BinTrieFlags2) { + BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; + BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; + BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE"; + })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); + function isNumber(code) { + return code >= CharCodes.ZERO && code <= CharCodes.NINE; + } + function isHexadecimalCharacter(code) { + return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F; + } + function isAsciiAlphaNumeric(code) { + return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code); + } + function isEntityInAttributeInvalidEnd(code) { + return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code); + } + var EntityDecoderState; + (function(EntityDecoderState2) { + EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart"; + EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart"; + EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal"; + EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex"; + EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity"; + })(EntityDecoderState || (EntityDecoderState = {})); + var DecodingMode; + (function(DecodingMode2) { + DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy"; + DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict"; + DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute"; + })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); + var EntityDecoder = function() { + function EntityDecoder2(decodeTree, emitCodePoint, errors) { + this.decodeTree = decodeTree; + this.emitCodePoint = emitCodePoint; + this.errors = errors; + this.state = EntityDecoderState.EntityStart; + this.consumed = 1; + this.result = 0; + this.treeIndex = 0; + this.excess = 1; + this.decodeMode = DecodingMode.Strict; + } + EntityDecoder2.prototype.startEntity = function(decodeMode) { + this.decodeMode = decodeMode; + this.state = EntityDecoderState.EntityStart; + this.result = 0; + this.treeIndex = 0; + this.excess = 1; + this.consumed = 1; + }; + EntityDecoder2.prototype.write = function(str, offset) { + switch (this.state) { + case EntityDecoderState.EntityStart: { + if (str.charCodeAt(offset) === CharCodes.NUM) { + this.state = EntityDecoderState.NumericStart; + this.consumed += 1; + return this.stateNumericStart(str, offset + 1); + } + this.state = EntityDecoderState.NamedEntity; + return this.stateNamedEntity(str, offset); + } + case EntityDecoderState.NumericStart: { + return this.stateNumericStart(str, offset); + } + case EntityDecoderState.NumericDecimal: { + return this.stateNumericDecimal(str, offset); + } + case EntityDecoderState.NumericHex: { + return this.stateNumericHex(str, offset); + } + case EntityDecoderState.NamedEntity: { + return this.stateNamedEntity(str, offset); + } + } + }; + EntityDecoder2.prototype.stateNumericStart = function(str, offset) { + if (offset >= str.length) { + return -1; + } + if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { + this.state = EntityDecoderState.NumericHex; + this.consumed += 1; + return this.stateNumericHex(str, offset + 1); + } + this.state = EntityDecoderState.NumericDecimal; + return this.stateNumericDecimal(str, offset); + }; + EntityDecoder2.prototype.addToNumericResult = function(str, start, end, base) { + if (start !== end) { + var digitCount = end - start; + this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base); + this.consumed += digitCount; + } + }; + EntityDecoder2.prototype.stateNumericHex = function(str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char) || isHexadecimalCharacter(char)) { + offset += 1; + } else { + this.addToNumericResult(str, startIdx, offset, 16); + return this.emitNumericEntity(char, 3); + } + } + this.addToNumericResult(str, startIdx, offset, 16); + return -1; + }; + EntityDecoder2.prototype.stateNumericDecimal = function(str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char)) { + offset += 1; + } else { + this.addToNumericResult(str, startIdx, offset, 10); + return this.emitNumericEntity(char, 2); + } + } + this.addToNumericResult(str, startIdx, offset, 10); + return -1; + }; + EntityDecoder2.prototype.emitNumericEntity = function(lastCp, expectedLength) { + var _a2; + if (this.consumed <= expectedLength) { + (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + if (lastCp === CharCodes.SEMI) { + this.consumed += 1; + } else if (this.decodeMode === DecodingMode.Strict) { + return 0; + } + this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed); + if (this.errors) { + if (lastCp !== CharCodes.SEMI) { + this.errors.missingSemicolonAfterCharacterReference(); + } + this.errors.validateNumericCharacterReference(this.result); + } + return this.consumed; + }; + EntityDecoder2.prototype.stateNamedEntity = function(str, offset) { + var decodeTree = this.decodeTree; + var current = decodeTree[this.treeIndex]; + var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + for (; offset < str.length; offset++, this.excess++) { + var char = str.charCodeAt(offset); + this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); + if (this.treeIndex < 0) { + return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity(); + } + current = decodeTree[this.treeIndex]; + valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + if (valueLength !== 0) { + if (char === CharCodes.SEMI) { + return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); + } + if (this.decodeMode !== DecodingMode.Strict) { + this.result = this.treeIndex; + this.consumed += this.excess; + this.excess = 0; + } + } + } + return -1; + }; + EntityDecoder2.prototype.emitNotTerminatedNamedEntity = function() { + var _a2; + var _b = this, result = _b.result, decodeTree = _b.decodeTree; + var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; + this.emitNamedEntityData(result, valueLength, this.consumed); + (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference(); + return this.consumed; + }; + EntityDecoder2.prototype.emitNamedEntityData = function(result, valueLength, consumed) { + var decodeTree = this.decodeTree; + this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed); + if (valueLength === 3) { + this.emitCodePoint(decodeTree[result + 2], consumed); + } + return consumed; + }; + EntityDecoder2.prototype.end = function() { + var _a2; + switch (this.state) { + case EntityDecoderState.NamedEntity: { + return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0; + } + case EntityDecoderState.NumericDecimal: { + return this.emitNumericEntity(0, 2); + } + case EntityDecoderState.NumericHex: { + return this.emitNumericEntity(0, 3); + } + case EntityDecoderState.NumericStart: { + (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + case EntityDecoderState.EntityStart: { + return 0; + } + } + }; + return EntityDecoder2; + }(); + exports.EntityDecoder = EntityDecoder; + function getDecoder(decodeTree) { + var ret = ""; + var decoder = new EntityDecoder(decodeTree, function(str) { + return ret += (0, decode_codepoint_js_1.fromCodePoint)(str); + }); + return function decodeWithTrie(str, decodeMode) { + var lastIndex = 0; + var offset = 0; + while ((offset = str.indexOf("&", offset)) >= 0) { + ret += str.slice(lastIndex, offset); + decoder.startEntity(decodeMode); + var len = decoder.write(str, offset + 1); + if (len < 0) { + lastIndex = offset + decoder.end(); + break; + } + lastIndex = offset + len; + offset = len === 0 ? lastIndex + 1 : lastIndex; + } + var result = ret + str.slice(lastIndex); + ret = ""; + return result; + }; + } + function determineBranch(decodeTree, current, nodeIdx, char) { + var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; + var jumpOffset = current & BinTrieFlags.JUMP_TABLE; + if (branchCount === 0) { + return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; + } + if (jumpOffset) { + var value = char - jumpOffset; + return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1; + } + var lo = nodeIdx; + var hi = lo + branchCount - 1; + while (lo <= hi) { + var mid = lo + hi >>> 1; + var midVal = decodeTree[mid]; + if (midVal < char) { + lo = mid + 1; + } else if (midVal > char) { + hi = mid - 1; + } else { + return decodeTree[mid + branchCount]; + } + } + return -1; + } + exports.determineBranch = determineBranch; + var htmlDecoder = getDecoder(decode_data_html_js_1.default); + var xmlDecoder = getDecoder(decode_data_xml_js_1.default); + function decodeHTML(str, mode) { + if (mode === void 0) { + mode = DecodingMode.Legacy; + } + return htmlDecoder(str, mode); + } + exports.decodeHTML = decodeHTML; + function decodeHTMLAttribute(str) { + return htmlDecoder(str, DecodingMode.Attribute); + } + exports.decodeHTMLAttribute = decodeHTMLAttribute; + function decodeHTMLStrict(str) { + return htmlDecoder(str, DecodingMode.Strict); + } + exports.decodeHTMLStrict = decodeHTMLStrict; + function decodeXML(str) { + return xmlDecoder(str, DecodingMode.Strict); + } + exports.decodeXML = decodeXML; + } +}); + +// node_modules/entities/lib/generated/encode-html.js +var require_encode_html = __commonJS({ + "node_modules/entities/lib/generated/encode-html.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + function restoreDiff(arr) { + for (var i = 1; i < arr.length; i++) { + arr[i][0] += arr[i - 1][0] + 1; + } + return arr; + } + exports.default = new Map(/* @__PURE__ */ restoreDiff([[9, " "], [0, " "], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [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, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [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, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [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, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [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, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [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, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])); + } +}); + +// node_modules/entities/lib/escape.js +var require_escape = __commonJS({ + "node_modules/entities/lib/escape.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0; + exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; + var xmlCodeMap = /* @__PURE__ */ new Map([ + [34, """], + [38, "&"], + [39, "'"], + [60, "<"], + [62, ">"] + ]); + exports.getCodePoint = String.prototype.codePointAt != null ? function(str, index) { + return str.codePointAt(index); + } : function(c, index) { + return (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index); + }; + function encodeXML(str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = exports.xmlReplacer.exec(str)) !== null) { + var i = match.index; + var char = str.charCodeAt(i); + var next = xmlCodeMap.get(char); + if (next !== void 0) { + ret += str.substring(lastIdx, i) + next; + lastIdx = i + 1; + } else { + ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); + lastIdx = exports.xmlReplacer.lastIndex += Number((char & 64512) === 55296); + } + } + return ret + str.substr(lastIdx); + } + exports.encodeXML = encodeXML; + exports.escape = encodeXML; + function getEscaper(regex, map) { + return function escape2(data) { + var match; + var lastIdx = 0; + var result = ""; + while (match = regex.exec(data)) { + if (lastIdx !== match.index) { + result += data.substring(lastIdx, match.index); + } + result += map.get(match[0].charCodeAt(0)); + lastIdx = match.index + 1; + } + return result + data.substring(lastIdx); + }; + } + exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); + exports.escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([ + [34, """], + [38, "&"], + [160, " "] + ])); + exports.escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([ + [38, "&"], + [60, "<"], + [62, ">"], + [160, " "] + ])); + } +}); + +// node_modules/entities/lib/encode.js +var require_encode = __commonJS({ + "node_modules/entities/lib/encode.js"(exports) { + "use strict"; + var __importDefault = exports && exports.__importDefault || function(mod) { + return mod && mod.__esModule ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.encodeNonAsciiHTML = exports.encodeHTML = void 0; + var encode_html_js_1 = __importDefault(require_encode_html()); + var escape_js_1 = require_escape(); + var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; + function encodeHTML(data) { + return encodeHTMLTrieRe(htmlReplacer, data); + } + exports.encodeHTML = encodeHTML; + function encodeNonAsciiHTML(data) { + return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data); + } + exports.encodeNonAsciiHTML = encodeNonAsciiHTML; + function encodeHTMLTrieRe(regExp, str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = regExp.exec(str)) !== null) { + var i = match.index; + ret += str.substring(lastIdx, i); + var char = str.charCodeAt(i); + var next = encode_html_js_1.default.get(char); + if (typeof next === "object") { + if (i + 1 < str.length) { + var nextChar = str.charCodeAt(i + 1); + var value = typeof next.n === "number" ? next.n === nextChar ? next.o : void 0 : next.n.get(nextChar); + if (value !== void 0) { + ret += value; + lastIdx = regExp.lastIndex += 1; + continue; + } + } + next = next.v; + } + if (next !== void 0) { + ret += next; + lastIdx = i + 1; + } else { + var cp = (0, escape_js_1.getCodePoint)(str, i); + ret += "&#x".concat(cp.toString(16), ";"); + lastIdx = regExp.lastIndex += Number(cp !== char); + } + } + return ret + str.substr(lastIdx); + } + } +}); + +// node_modules/entities/lib/index.js +var require_lib = __commonJS({ + "node_modules/entities/lib/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0; + var decode_js_1 = require_decode(); + var encode_js_1 = require_encode(); + var escape_js_1 = require_escape(); + var EntityLevel; + (function(EntityLevel2) { + EntityLevel2[EntityLevel2["XML"] = 0] = "XML"; + EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML"; + })(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); + var EncodingMode; + (function(EncodingMode2) { + EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8"; + EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII"; + EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive"; + EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute"; + EncodingMode2[EncodingMode2["Text"] = 4] = "Text"; + })(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); + function decode(data, options) { + if (options === void 0) { + options = EntityLevel.XML; + } + var level = typeof options === "number" ? options : options.level; + if (level === EntityLevel.HTML) { + var mode = typeof options === "object" ? options.mode : void 0; + return (0, decode_js_1.decodeHTML)(data, mode); + } + return (0, decode_js_1.decodeXML)(data); + } + exports.decode = decode; + function decodeStrict(data, options) { + var _a2; + if (options === void 0) { + options = EntityLevel.XML; + } + var opts = typeof options === "number" ? { level: options } : options; + (_a2 = opts.mode) !== null && _a2 !== void 0 ? _a2 : opts.mode = decode_js_1.DecodingMode.Strict; + return decode(data, opts); + } + exports.decodeStrict = decodeStrict; + function encode(data, options) { + if (options === void 0) { + options = EntityLevel.XML; + } + var opts = typeof options === "number" ? { level: options } : options; + if (opts.mode === EncodingMode.UTF8) + return (0, escape_js_1.escapeUTF8)(data); + if (opts.mode === EncodingMode.Attribute) + return (0, escape_js_1.escapeAttribute)(data); + if (opts.mode === EncodingMode.Text) + return (0, escape_js_1.escapeText)(data); + if (opts.level === EntityLevel.HTML) { + if (opts.mode === EncodingMode.ASCII) { + return (0, encode_js_1.encodeNonAsciiHTML)(data); + } + return (0, encode_js_1.encodeHTML)(data); + } + return (0, escape_js_1.encodeXML)(data); + } + exports.encode = encode; + var escape_js_2 = require_escape(); + Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function() { + return escape_js_2.encodeXML; + } }); + Object.defineProperty(exports, "escape", { enumerable: true, get: function() { + return escape_js_2.escape; + } }); + Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function() { + return escape_js_2.escapeUTF8; + } }); + Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function() { + return escape_js_2.escapeAttribute; + } }); + Object.defineProperty(exports, "escapeText", { enumerable: true, get: function() { + return escape_js_2.escapeText; + } }); + var encode_js_2 = require_encode(); + Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function() { + return encode_js_2.encodeHTML; + } }); + Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function() { + return encode_js_2.encodeNonAsciiHTML; + } }); + Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function() { + return encode_js_2.encodeHTML; + } }); + Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function() { + return encode_js_2.encodeHTML; + } }); + var decode_js_2 = require_decode(); + Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function() { + return decode_js_2.EntityDecoder; + } }); + Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function() { + return decode_js_2.DecodingMode; + } }); + Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function() { + return decode_js_2.decodeXML; + } }); + Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function() { + return decode_js_2.decodeHTML; + } }); + Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function() { + return decode_js_2.decodeHTMLStrict; + } }); + Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function() { + return decode_js_2.decodeHTMLAttribute; + } }); + Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function() { + return decode_js_2.decodeHTML; + } }); + Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function() { + return decode_js_2.decodeHTML; + } }); + Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function() { + return decode_js_2.decodeHTMLStrict; + } }); + Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function() { + return decode_js_2.decodeHTMLStrict; + } }); + Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function() { + return decode_js_2.decodeXML; + } }); + } +}); + +// node_modules/relateurl/lib/constants.js +var require_constants = __commonJS({ + "node_modules/relateurl/lib/constants.js"(exports, module2) { + "use strict"; + module2.exports = { + ABSOLUTE: "absolute", + PATH_RELATIVE: "pathRelative", + ROOT_RELATIVE: "rootRelative", + SHORTEST: "shortest" + }; + } +}); + +// node_modules/relateurl/lib/format.js +var require_format2 = __commonJS({ + "node_modules/relateurl/lib/format.js"(exports, module2) { + "use strict"; + var constants = require_constants(); + function formatAuth(urlObj, options) { + if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE)) { + return urlObj.auth + "@"; + } + return ""; + } + function formatHash(urlObj, options) { + return urlObj.hash ? urlObj.hash : ""; + } + function formatHost(urlObj, options) { + if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output === constants.ABSOLUTE)) { + return urlObj.host.full; + } + return ""; + } + function formatPath(urlObj, options) { + var str = ""; + var absolutePath = urlObj.path.absolute.string; + var relativePath = urlObj.path.relative.string; + var resource = showResource(urlObj, options); + if (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE || options.output === constants.ROOT_RELATIVE) { + str = absolutePath; + } else if (relativePath.length <= absolutePath.length && options.output === constants.SHORTEST || options.output === constants.PATH_RELATIVE) { + str = relativePath; + if (str === "") { + var query = showQuery(urlObj, options) && !!getQuery(urlObj, options); + if (urlObj.extra.relation.maximumPath && !resource) { + str = "./"; + } else if (urlObj.extra.relation.overridesQuery && !resource && !query) { + str = "./"; + } + } + } else { + str = absolutePath; + } + if (str === "/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output === constants.ABSOLUTE)) { + str = ""; + } + return str; + } + function formatPort(urlObj, options) { + if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost) { + return ":" + urlObj.port; + } + return ""; + } + function formatQuery(urlObj, options) { + return showQuery(urlObj, options) ? getQuery(urlObj, options) : ""; + } + function formatResource(urlObj, options) { + return showResource(urlObj, options) ? urlObj.resource : ""; + } + function formatScheme(urlObj, options) { + var str = ""; + if (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE) { + if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output === constants.ABSOLUTE) { + str += urlObj.scheme + "://"; + } else { + str += "//"; + } + } + return str; + } + function formatUrl(urlObj, options) { + var url = ""; + url += formatScheme(urlObj, options); + url += formatAuth(urlObj, options); + url += formatHost(urlObj, options); + url += formatPort(urlObj, options); + url += formatPath(urlObj, options); + url += formatResource(urlObj, options); + url += formatQuery(urlObj, options); + url += formatHash(urlObj, options); + return url; + } + function getQuery(urlObj, options) { + var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort; + return urlObj.query.string[stripQuery ? "stripped" : "full"]; + } + function showQuery(urlObj, options) { + return !urlObj.extra.relation.minimumQuery || options.output === constants.ABSOLUTE || options.output === constants.ROOT_RELATIVE; + } + function showResource(urlObj, options) { + var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex; + var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output !== constants.ABSOLUTE && options.output !== constants.ROOT_RELATIVE; + return !!urlObj.resource && !removeMatchingResource && !removeIndex; + } + module2.exports = formatUrl; + } +}); + +// node_modules/relateurl/lib/util/object.js +var require_object = __commonJS({ + "node_modules/relateurl/lib/util/object.js"(exports, module2) { + "use strict"; + function clone(obj) { + if (obj instanceof Object) { + var clonedObj = obj instanceof Array ? [] : {}; + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + clonedObj[i] = clone(obj[i]); + } + } + return clonedObj; + } + return obj; + } + function isPlainObject(obj) { + return !!obj && typeof obj === "object" && obj.constructor === Object; + } + function shallowMerge(target, source) { + if (target instanceof Object && source instanceof Object) { + for (var i in source) { + if (source.hasOwnProperty(i)) { + target[i] = source[i]; + } + } + } + return target; + } + module2.exports = { + clone, + isPlainObject, + shallowMerge + }; + } +}); + +// node_modules/relateurl/lib/options.js +var require_options = __commonJS({ + "node_modules/relateurl/lib/options.js"(exports, module2) { + "use strict"; + var objUtils = require_object(); + function getOptions(options, defaults) { + if (objUtils.isPlainObject(options)) { + var newOptions = {}; + for (var i in defaults) { + if (defaults.hasOwnProperty(i)) { + if (options[i] !== void 0) { + newOptions[i] = mergeOption(options[i], defaults[i]); + } else { + newOptions[i] = defaults[i]; + } + } + } + return newOptions; + } else { + return defaults; + } + } + function mergeOption(newValues, defaultValues) { + if (defaultValues instanceof Object && newValues instanceof Object) { + if (defaultValues instanceof Array && newValues instanceof Array) { + return defaultValues.concat(newValues); + } else { + return objUtils.shallowMerge(newValues, defaultValues); + } + } + return newValues; + } + module2.exports = getOptions; + } +}); + +// node_modules/relateurl/lib/parse/hrefInfo.js +var require_hrefInfo = __commonJS({ + "node_modules/relateurl/lib/parse/hrefInfo.js"(exports, module2) { + "use strict"; + function hrefInfo(urlObj) { + var minimumPathOnly = !urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port; + var minimumResourceOnly = minimumPathOnly && !urlObj.path.absolute.string; + var minimumQueryOnly = minimumResourceOnly && !urlObj.resource; + var minimumHashOnly = minimumQueryOnly && !urlObj.query.string.full.length; + var empty = minimumHashOnly && !urlObj.hash; + urlObj.extra.hrefInfo.minimumPathOnly = minimumPathOnly; + urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly; + urlObj.extra.hrefInfo.minimumQueryOnly = minimumQueryOnly; + urlObj.extra.hrefInfo.minimumHashOnly = minimumHashOnly; + urlObj.extra.hrefInfo.empty = empty; + } + module2.exports = hrefInfo; + } +}); + +// node_modules/relateurl/lib/parse/host.js +var require_host = __commonJS({ + "node_modules/relateurl/lib/parse/host.js"(exports, module2) { + "use strict"; + function parseHost(urlObj, options) { + if (options.ignore_www) { + var host = urlObj.host.full; + if (host) { + var stripped = host; + if (host.indexOf("www.") === 0) { + stripped = host.substr(4); + } + urlObj.host.stripped = stripped; + } + } + } + module2.exports = parseHost; + } +}); + +// node_modules/relateurl/lib/parse/path.js +var require_path = __commonJS({ + "node_modules/relateurl/lib/parse/path.js"(exports, module2) { + "use strict"; + function isDirectoryIndex(resource, options) { + var verdict = false; + options.directoryIndexes.every(function(index) { + if (index === resource) { + verdict = true; + return false; + } + return true; + }); + return verdict; + } + function parsePath(urlObj, options) { + var path = urlObj.path.absolute.string; + if (path) { + var lastSlash = path.lastIndexOf("/"); + if (lastSlash > -1) { + if (++lastSlash < path.length) { + var resource = path.substr(lastSlash); + if (resource !== "." && resource !== "..") { + urlObj.resource = resource; + path = path.substr(0, lastSlash); + } else { + path += "/"; + } + } + urlObj.path.absolute.string = path; + urlObj.path.absolute.array = splitPath(path); + } else if (path === "." || path === "..") { + path += "/"; + urlObj.path.absolute.string = path; + urlObj.path.absolute.array = splitPath(path); + } else { + urlObj.resource = path; + urlObj.path.absolute.string = null; + } + urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options); + } + } + function splitPath(path) { + if (path !== "/") { + var cleaned = []; + path.split("/").forEach(function(dir) { + if (dir !== "") { + cleaned.push(dir); + } + }); + return cleaned; + } else { + return []; + } + } + module2.exports = parsePath; + } +}); + +// node_modules/relateurl/lib/parse/port.js +var require_port = __commonJS({ + "node_modules/relateurl/lib/parse/port.js"(exports, module2) { + "use strict"; + function parsePort(urlObj, options) { + var defaultPort = -1; + for (var i in options.defaultPorts) { + if (i === urlObj.scheme && options.defaultPorts.hasOwnProperty(i)) { + defaultPort = options.defaultPorts[i]; + break; + } + } + if (defaultPort > -1) { + defaultPort = defaultPort.toString(); + if (urlObj.port === null) { + urlObj.port = defaultPort; + } + urlObj.extra.portIsDefault = urlObj.port === defaultPort; + } + } + module2.exports = parsePort; + } +}); + +// node_modules/relateurl/lib/parse/query.js +var require_query = __commonJS({ + "node_modules/relateurl/lib/parse/query.js"(exports, module2) { + "use strict"; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function parseQuery(urlObj, options) { + urlObj.query.string.full = stringify(urlObj.query.object, false); + if (options.removeEmptyQueries) { + urlObj.query.string.stripped = stringify(urlObj.query.object, true); + } + } + function stringify(queryObj, removeEmptyQueries) { + var count = 0; + var str = ""; + for (var i in queryObj) { + if (i !== "" && hasOwnProperty.call(queryObj, i) === true) { + var value = queryObj[i]; + if (value !== "" || !removeEmptyQueries) { + str += ++count === 1 ? "?" : "&"; + i = encodeURIComponent(i); + if (value !== "") { + str += i + "=" + encodeURIComponent(value).replace(/%20/g, "+"); + } else { + str += i; + } + } + } + } + return str; + } + module2.exports = parseQuery; + } +}); + +// node_modules/relateurl/lib/parse/urlstring.js +var require_urlstring = __commonJS({ + "node_modules/relateurl/lib/parse/urlstring.js"(exports, module2) { + "use strict"; + var _parseUrl = require("url").parse; + function clean(urlObj) { + var scheme = urlObj.protocol; + if (scheme) { + if (scheme.indexOf(":") === scheme.length - 1) { + scheme = scheme.substr(0, scheme.length - 1); + } + } + urlObj.host = { + full: urlObj.hostname, + stripped: null + }; + urlObj.path = { + absolute: { + array: null, + string: urlObj.pathname + }, + relative: { + array: null, + string: null + } + }; + urlObj.query = { + object: urlObj.query, + string: { + full: null, + stripped: null + } + }; + urlObj.extra = { + hrefInfo: { + minimumPathOnly: null, + minimumResourceOnly: null, + minimumQueryOnly: null, + minimumHashOnly: null, + empty: null, + separatorOnlyQuery: urlObj.search === "?" + }, + portIsDefault: null, + relation: { + maximumScheme: null, + maximumAuth: null, + maximumHost: null, + maximumPort: null, + maximumPath: null, + maximumResource: null, + maximumQuery: null, + maximumHash: null, + minimumScheme: null, + minimumAuth: null, + minimumHost: null, + minimumPort: null, + minimumPath: null, + minimumResource: null, + minimumQuery: null, + minimumHash: null, + overridesQuery: null + }, + resourceIsIndex: null, + slashes: urlObj.slashes + }; + urlObj.resource = null; + urlObj.scheme = scheme; + delete urlObj.hostname; + delete urlObj.pathname; + delete urlObj.protocol; + delete urlObj.search; + delete urlObj.slashes; + return urlObj; + } + function validScheme(url, options) { + var valid = true; + options.rejectedSchemes.every(function(rejectedScheme) { + valid = !(url.indexOf(rejectedScheme + ":") === 0); + return valid; + }); + return valid; + } + function parseUrlString(url, options) { + if (validScheme(url, options)) { + return clean(_parseUrl(url, true, options.slashesDenoteHost)); + } else { + return { href: url, valid: false }; + } + } + module2.exports = parseUrlString; + } +}); + +// node_modules/relateurl/lib/util/path.js +var require_path2 = __commonJS({ + "node_modules/relateurl/lib/util/path.js"(exports, module2) { + "use strict"; + function joinPath(pathArray) { + if (pathArray.length > 0) { + return pathArray.join("/") + "/"; + } else { + return ""; + } + } + function resolveDotSegments(pathArray) { + var pathAbsolute = []; + pathArray.forEach(function(dir) { + if (dir !== "..") { + if (dir !== ".") { + pathAbsolute.push(dir); + } + } else { + if (pathAbsolute.length > 0) { + pathAbsolute.splice(pathAbsolute.length - 1, 1); + } + } + }); + return pathAbsolute; + } + module2.exports = { + join: joinPath, + resolveDotSegments + }; + } +}); + +// node_modules/relateurl/lib/parse/index.js +var require_parse = __commonJS({ + "node_modules/relateurl/lib/parse/index.js"(exports, module2) { + "use strict"; + var hrefInfo = require_hrefInfo(); + var parseHost = require_host(); + var parsePath = require_path(); + var parsePort = require_port(); + var parseQuery = require_query(); + var parseUrlString = require_urlstring(); + var pathUtils = require_path2(); + function parseFromUrl(url, options, fallback) { + if (url) { + var urlObj = parseUrl(url, options); + var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array); + urlObj.path.absolute.array = pathArray; + urlObj.path.absolute.string = "/" + pathUtils.join(pathArray); + return urlObj; + } else { + return fallback; + } + } + function parseUrl(url, options) { + var urlObj = parseUrlString(url, options); + if (urlObj.valid === false) + return urlObj; + parseHost(urlObj, options); + parsePort(urlObj, options); + parsePath(urlObj, options); + parseQuery(urlObj, options); + hrefInfo(urlObj); + return urlObj; + } + module2.exports = { + from: parseFromUrl, + to: parseUrl + }; + } +}); + +// node_modules/relateurl/lib/relate/findRelation.js +var require_findRelation = __commonJS({ + "node_modules/relateurl/lib/relate/findRelation.js"(exports, module2) { + "use strict"; + function findRelation_upToPath(urlObj, siteUrlObj, options) { + var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly; + var minimumScheme = urlObj.scheme === siteUrlObj.scheme || !urlObj.scheme; + var minimumAuth = minimumScheme && (urlObj.auth === siteUrlObj.auth || options.removeAuth || pathOnly); + var www = options.ignore_www ? "stripped" : "full"; + var minimumHost = minimumAuth && (urlObj.host[www] === siteUrlObj.host[www] || pathOnly); + var minimumPort = minimumHost && (urlObj.port === siteUrlObj.port || pathOnly); + urlObj.extra.relation.minimumScheme = minimumScheme; + urlObj.extra.relation.minimumAuth = minimumAuth; + urlObj.extra.relation.minimumHost = minimumHost; + urlObj.extra.relation.minimumPort = minimumPort; + urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth; + urlObj.extra.relation.maximumAuth = !minimumScheme || minimumScheme && !minimumHost; + urlObj.extra.relation.maximumHost = !minimumScheme || minimumScheme && !minimumPort; + } + function findRelation_pathOn(urlObj, siteUrlObj, options) { + var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly; + var hashOnly = urlObj.extra.hrefInfo.minimumHashOnly; + var empty = urlObj.extra.hrefInfo.empty; + var minimumPort = urlObj.extra.relation.minimumPort; + var minimumScheme = urlObj.extra.relation.minimumScheme; + var minimumPath = minimumPort && urlObj.path.absolute.string === siteUrlObj.path.absolute.string; + var matchingResource = urlObj.resource === siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex || options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource; + var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty); + var query = options.removeEmptyQueries ? "stripped" : "full"; + var urlQuery = urlObj.query.string[query]; + var siteUrlQuery = siteUrlObj.query.string[query]; + var minimumQuery = minimumResource && !!urlQuery && urlQuery === siteUrlQuery || (hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery; + var minimumHash = minimumQuery && urlObj.hash === siteUrlObj.hash; + urlObj.extra.relation.minimumPath = minimumPath; + urlObj.extra.relation.minimumResource = minimumResource; + urlObj.extra.relation.minimumQuery = minimumQuery; + urlObj.extra.relation.minimumHash = minimumHash; + urlObj.extra.relation.maximumPort = !minimumScheme || minimumScheme && !minimumPath; + urlObj.extra.relation.maximumPath = !minimumScheme || minimumScheme && !minimumResource; + urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery; + urlObj.extra.relation.maximumQuery = !minimumScheme || minimumScheme && !minimumHash; + urlObj.extra.relation.maximumHash = !minimumScheme || minimumScheme && !minimumHash; + urlObj.extra.relation.overridesQuery = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery; + } + module2.exports = { + pathOn: findRelation_pathOn, + upToPath: findRelation_upToPath + }; + } +}); + +// node_modules/relateurl/lib/relate/absolutize.js +var require_absolutize = __commonJS({ + "node_modules/relateurl/lib/relate/absolutize.js"(exports, module2) { + "use strict"; + var findRelation = require_findRelation(); + var objUtils = require_object(); + var pathUtils = require_path2(); + function absolutize(urlObj, siteUrlObj, options) { + findRelation.upToPath(urlObj, siteUrlObj, options); + if (urlObj.extra.relation.minimumScheme) + urlObj.scheme = siteUrlObj.scheme; + if (urlObj.extra.relation.minimumAuth) + urlObj.auth = siteUrlObj.auth; + if (urlObj.extra.relation.minimumHost) + urlObj.host = objUtils.clone(siteUrlObj.host); + if (urlObj.extra.relation.minimumPort) + copyPort(urlObj, siteUrlObj); + if (urlObj.extra.relation.minimumScheme) + copyPath(urlObj, siteUrlObj); + findRelation.pathOn(urlObj, siteUrlObj, options); + if (urlObj.extra.relation.minimumResource) + copyResource(urlObj, siteUrlObj); + if (urlObj.extra.relation.minimumQuery) + urlObj.query = objUtils.clone(siteUrlObj.query); + if (urlObj.extra.relation.minimumHash) + urlObj.hash = siteUrlObj.hash; + } + function copyPath(urlObj, siteUrlObj) { + if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly) { + var pathArray = urlObj.path.absolute.array; + var pathString = "/"; + if (pathArray) { + if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/") !== 0) { + pathArray = siteUrlObj.path.absolute.array.concat(pathArray); + } + pathArray = pathUtils.resolveDotSegments(pathArray); + pathString += pathUtils.join(pathArray); + } else { + pathArray = []; + } + urlObj.path.absolute.array = pathArray; + urlObj.path.absolute.string = pathString; + } else { + urlObj.path = objUtils.clone(siteUrlObj.path); + } + } + function copyPort(urlObj, siteUrlObj) { + urlObj.port = siteUrlObj.port; + urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault; + } + function copyResource(urlObj, siteUrlObj) { + urlObj.resource = siteUrlObj.resource; + urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex; + } + module2.exports = absolutize; + } +}); + +// node_modules/relateurl/lib/relate/relativize.js +var require_relativize = __commonJS({ + "node_modules/relateurl/lib/relate/relativize.js"(exports, module2) { + "use strict"; + var pathUtils = require_path2(); + function relatePath(absolutePath, siteAbsolutePath) { + var relativePath = []; + var related = true; + var parentIndex = -1; + siteAbsolutePath.forEach(function(siteAbsoluteDir, i) { + if (related) { + if (absolutePath[i] !== siteAbsoluteDir) { + related = false; + } else { + parentIndex = i; + } + } + if (!related) { + relativePath.push(".."); + } + }); + absolutePath.forEach(function(dir, i) { + if (i > parentIndex) { + relativePath.push(dir); + } + }); + return relativePath; + } + function relativize(urlObj, siteUrlObj, options) { + if (urlObj.extra.relation.minimumScheme) { + var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array); + urlObj.path.relative.array = pathArray; + urlObj.path.relative.string = pathUtils.join(pathArray); + } + } + module2.exports = relativize; + } +}); + +// node_modules/relateurl/lib/relate/index.js +var require_relate = __commonJS({ + "node_modules/relateurl/lib/relate/index.js"(exports, module2) { + "use strict"; + var absolutize = require_absolutize(); + var relativize = require_relativize(); + function relateUrl(siteUrlObj, urlObj, options) { + absolutize(urlObj, siteUrlObj, options); + relativize(urlObj, siteUrlObj, options); + return urlObj; + } + module2.exports = relateUrl; + } +}); + +// node_modules/relateurl/lib/index.js +var require_lib2 = __commonJS({ + "node_modules/relateurl/lib/index.js"(exports, module2) { + "use strict"; + var constants = require_constants(); + var formatUrl = require_format2(); + var getOptions = require_options(); + var objUtils = require_object(); + var parseUrl = require_parse(); + var relateUrl = require_relate(); + function RelateUrl(from, options) { + this.options = getOptions(options, { + defaultPorts: { ftp: 21, http: 80, https: 443 }, + directoryIndexes: ["index.html"], + ignore_www: false, + output: RelateUrl.SHORTEST, + rejectedSchemes: ["data", "javascript", "mailto"], + removeAuth: false, + removeDirectoryIndexes: true, + removeEmptyQueries: false, + removeRootTrailingSlash: true, + schemeRelative: true, + site: void 0, + slashesDenoteHost: true + }); + this.from = parseUrl.from(from, this.options, null); + } + RelateUrl.prototype.relate = function(from, to, options) { + if (objUtils.isPlainObject(to)) { + options = to; + to = from; + from = null; + } else if (!to) { + to = from; + from = null; + } + options = getOptions(options, this.options); + from = from || options.site; + from = parseUrl.from(from, options, this.from); + if (!from || !from.href) { + throw new Error("from value not defined."); + } else if (from.extra.hrefInfo.minimumPathOnly) { + throw new Error("from value supplied is not absolute: " + from.href); + } + to = parseUrl.to(to, options); + if (to.valid === false) + return to.href; + to = relateUrl(from, to, options); + to = formatUrl(to, options); + return to; + }; + RelateUrl.relate = function(from, to, options) { + return new RelateUrl().relate(from, to, options); + }; + objUtils.shallowMerge(RelateUrl, constants); + module2.exports = RelateUrl; + } +}); + +// node_modules/@jridgewell/source-map/dist/source-map.umd.js +var require_source_map_umd = __commonJS({ + "node_modules/@jridgewell/source-map/dist/source-map.umd.js"(exports, module2) { + (function(global2, factory) { + typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.sourceMap = {})); + })(exports, function(exports2) { + "use strict"; + const comma = ",".charCodeAt(0); + const semicolon = ";".charCodeAt(0); + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const intToChar = new Uint8Array(64); + const charToInteger = new Uint8Array(128); + for (let i = 0; i < chars.length; i++) { + const c = chars.charCodeAt(i); + charToInteger[c] = i; + intToChar[i] = c; + } + const td = typeof TextDecoder !== "undefined" ? new TextDecoder() : typeof Buffer !== "undefined" ? { + decode(buf) { + const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); + return out.toString(); + } + } : { + decode(buf) { + let out = ""; + for (let i = 0; i < buf.length; i++) { + out += String.fromCharCode(buf[i]); + } + return out; + } + }; + function decode(mappings) { + const state = new Int32Array(5); + const decoded = []; + let line = []; + let sorted = true; + let lastCol = 0; + for (let i = 0; i < mappings.length; ) { + const c = mappings.charCodeAt(i); + if (c === comma) { + i++; + } else if (c === semicolon) { + state[0] = lastCol = 0; + if (!sorted) + sort(line); + sorted = true; + decoded.push(line); + line = []; + i++; + } else { + i = decodeInteger(mappings, i, state, 0); + const col = state[0]; + if (col < lastCol) + sorted = false; + lastCol = col; + if (!hasMoreSegments(mappings, i)) { + line.push([col]); + continue; + } + i = decodeInteger(mappings, i, state, 1); + i = decodeInteger(mappings, i, state, 2); + i = decodeInteger(mappings, i, state, 3); + if (!hasMoreSegments(mappings, i)) { + line.push([col, state[1], state[2], state[3]]); + continue; + } + i = decodeInteger(mappings, i, state, 4); + line.push([col, state[1], state[2], state[3], state[4]]); + } + } + if (!sorted) + sort(line); + decoded.push(line); + return decoded; + } + function decodeInteger(mappings, pos, state, j) { + let value = 0; + let shift = 0; + let integer = 0; + do { + const c = mappings.charCodeAt(pos++); + integer = charToInteger[c]; + value |= (integer & 31) << shift; + shift += 5; + } while (integer & 32); + const shouldNegate = value & 1; + value >>>= 1; + if (shouldNegate) { + value = -2147483648 | -value; + } + state[j] += value; + return pos; + } + function hasMoreSegments(mappings, i) { + if (i >= mappings.length) + return false; + const c = mappings.charCodeAt(i); + if (c === comma || c === semicolon) + return false; + return true; + } + function sort(line) { + line.sort(sortComparator$1); + } + function sortComparator$1(a, b) { + return a[0] - b[0]; + } + function encode(decoded) { + const state = new Int32Array(5); + let buf = new Uint8Array(1024); + let pos = 0; + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + if (i > 0) { + buf = reserve(buf, pos, 1); + buf[pos++] = semicolon; + } + if (line.length === 0) + continue; + state[0] = 0; + for (let j = 0; j < line.length; j++) { + const segment = line[j]; + buf = reserve(buf, pos, 36); + if (j > 0) + buf[pos++] = comma; + pos = encodeInteger(buf, pos, state, segment, 0); + if (segment.length === 1) + continue; + pos = encodeInteger(buf, pos, state, segment, 1); + pos = encodeInteger(buf, pos, state, segment, 2); + pos = encodeInteger(buf, pos, state, segment, 3); + if (segment.length === 4) + continue; + pos = encodeInteger(buf, pos, state, segment, 4); + } + } + return td.decode(buf.subarray(0, pos)); + } + function reserve(buf, pos, count) { + if (buf.length > pos + count) + return buf; + const swap = new Uint8Array(buf.length * 2); + swap.set(buf); + return swap; + } + function encodeInteger(buf, pos, state, segment, j) { + const next = segment[j]; + let num = next - state[j]; + state[j] = next; + num = num < 0 ? -num << 1 | 1 : num << 1; + do { + let clamped = num & 31; + num >>>= 5; + if (num > 0) + clamped |= 32; + buf[pos++] = intToChar[clamped]; + } while (num > 0); + return pos; + } + const schemeRegex = /^[\w+.-]+:\/\//; + const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?/; + const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/]*)?)?(\/?.*)/i; + function isAbsoluteUrl(input) { + return schemeRegex.test(input); + } + function isSchemeRelativeUrl(input) { + return input.startsWith("//"); + } + function isAbsolutePath(input) { + return input.startsWith("/"); + } + function isFileUrl(input) { + return input.startsWith("file:"); + } + function parseAbsoluteUrl(input) { + const match = urlRegex.exec(input); + return makeUrl(match[1], match[2] || "", match[3], match[4] || "", match[5] || "/"); + } + function parseFileUrl(input) { + const match = fileRegex.exec(input); + const path = match[2]; + return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path) ? path : "/" + path); + } + function makeUrl(scheme, user, host, port, path) { + return { + scheme, + user, + host, + port, + path, + relativePath: false + }; + } + function parseUrl(input) { + if (isSchemeRelativeUrl(input)) { + const url2 = parseAbsoluteUrl("http:" + input); + url2.scheme = ""; + return url2; + } + if (isAbsolutePath(input)) { + const url2 = parseAbsoluteUrl("http://foo.com" + input); + url2.scheme = ""; + url2.host = ""; + return url2; + } + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl("http://foo.com/" + input); + url.scheme = ""; + url.host = ""; + url.relativePath = true; + return url; + } + function stripPathFilename(path) { + if (path.endsWith("/..")) + return path; + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); + } + function mergePaths(url, base) { + if (!url.relativePath) + return; + normalizePath(base); + if (url.path === "/") { + url.path = base.path; + } else { + url.path = stripPathFilename(base.path) + url.path; + } + url.relativePath = base.relativePath; + } + function normalizePath(url) { + const { relativePath } = url; + const pieces = url.path.split("/"); + let pointer = 1; + let positive = 0; + let addTrailingSlash = false; + for (let i = 1; i < pieces.length; i++) { + const piece = pieces[i]; + if (!piece) { + addTrailingSlash = true; + continue; + } + addTrailingSlash = false; + if (piece === ".") + continue; + if (piece === "..") { + if (positive) { + addTrailingSlash = true; + positive--; + pointer--; + } else if (relativePath) { + pieces[pointer++] = piece; + } + continue; + } + pieces[pointer++] = piece; + positive++; + } + let path = ""; + for (let i = 1; i < pointer; i++) { + path += "/" + pieces[i]; + } + if (!path || addTrailingSlash && !path.endsWith("/..")) { + path += "/"; + } + url.path = path; + } + function resolve$1(input, base) { + if (!input && !base) + return ""; + const url = parseUrl(input); + if (base && !url.scheme) { + const baseUrl = parseUrl(base); + url.scheme = baseUrl.scheme; + if (!url.host) { + url.user = baseUrl.user; + url.host = baseUrl.host; + url.port = baseUrl.port; + } + mergePaths(url, baseUrl); + } + normalizePath(url); + if (url.relativePath) { + const path = url.path.slice(1); + if (!path) + return "."; + const keepRelative = (base || input).startsWith("."); + return !keepRelative || path.startsWith(".") ? path : "./" + path; + } + if (!url.scheme && !url.host) + return url.path; + return `${url.scheme}//${url.user}${url.host}${url.port}${url.path}`; + } + function resolve(input, base) { + if (base && !base.endsWith("/")) + base += "/"; + return resolve$1(input, base); + } + function stripFilename(path) { + if (!path) + return ""; + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); + } + const COLUMN$1 = 0; + const SOURCES_INDEX$1 = 1; + const SOURCE_LINE$1 = 2; + const SOURCE_COLUMN$1 = 3; + const NAMES_INDEX$1 = 4; + function maybeSort(mappings, owned) { + const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); + if (unsortedIndex === mappings.length) + return mappings; + if (!owned) + mappings = mappings.slice(); + for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { + mappings[i] = sortSegments(mappings[i], owned); + } + return mappings; + } + function nextUnsortedSegmentLine(mappings, start) { + for (let i = start; i < mappings.length; i++) { + if (!isSorted(mappings[i])) + return i; + } + return mappings.length; + } + function isSorted(line) { + for (let j = 1; j < line.length; j++) { + if (line[j][COLUMN$1] < line[j - 1][COLUMN$1]) { + return false; + } + } + return true; + } + function sortSegments(line, owned) { + if (!owned) + line = line.slice(); + return line.sort(sortComparator); + } + function sortComparator(a, b) { + return a[COLUMN$1] - b[COLUMN$1]; + } + let found = false; + function binarySearch(haystack, needle, low, high) { + while (low <= high) { + const mid = low + (high - low >> 1); + const cmp = haystack[mid][COLUMN$1] - needle; + if (cmp === 0) { + found = true; + return mid; + } + if (cmp < 0) { + low = mid + 1; + } else { + high = mid - 1; + } + } + found = false; + return low - 1; + } + function upperBound(haystack, needle, index) { + for (let i = index + 1; i < haystack.length; i++, index++) { + if (haystack[i][COLUMN$1] !== needle) + break; + } + return index; + } + function lowerBound(haystack, needle, index) { + for (let i = index - 1; i >= 0; i--, index--) { + if (haystack[i][COLUMN$1] !== needle) + break; + } + return index; + } + function memoizedState() { + return { + lastKey: -1, + lastNeedle: -1, + lastIndex: -1 + }; + } + function memoizedBinarySearch(haystack, needle, state, key) { + const { lastKey, lastNeedle, lastIndex } = state; + let low = 0; + let high = haystack.length - 1; + if (key === lastKey) { + if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN$1] === needle; + return lastIndex; + } + if (needle >= lastNeedle) { + low = lastIndex === -1 ? 0 : lastIndex; + } else { + high = lastIndex; + } + } + state.lastKey = key; + state.lastNeedle = needle; + return state.lastIndex = binarySearch(haystack, needle, low, high); + } + const AnyMap = function(map, mapUrl) { + const parsed = typeof map === "string" ? JSON.parse(map) : map; + if (!("sections" in parsed)) + return new TraceMap(parsed, mapUrl); + const mappings = []; + const sources = []; + const sourcesContent = []; + const names = []; + const { sections } = parsed; + let i = 0; + for (; i < sections.length - 1; i++) { + const no = sections[i + 1].offset; + addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, no.line, no.column); + } + if (sections.length > 0) { + addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, Infinity, Infinity); + } + const joined = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings + }; + return presortedDecodedMap(joined); + }; + function addSection(section, mapUrl, mappings, sources, sourcesContent, names, stopLine, stopColumn) { + const map = AnyMap(section.map, mapUrl); + const { line: lineOffset, column: columnOffset } = section.offset; + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = decodedMappings(map); + const { resolvedSources } = map; + append(sources, resolvedSources); + append(sourcesContent, map.sourcesContent || fillSourcesContent(resolvedSources.length)); + append(names, map.names); + for (let i = mappings.length; i <= lineOffset; i++) + mappings.push([]); + const stopI = stopLine - lineOffset; + const len = Math.min(decoded.length, stopI + 1); + for (let i = 0; i < len; i++) { + const line = decoded[i]; + const out = i === 0 ? mappings[lineOffset] : mappings[lineOffset + i] = []; + const cOffset = i === 0 ? columnOffset : 0; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN$1]; + if (i === stopI && column >= stopColumn) + break; + if (seg.length === 1) { + out.push([column]); + continue; + } + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX$1]; + const sourceLine = seg[SOURCE_LINE$1]; + const sourceColumn = seg[SOURCE_COLUMN$1]; + if (seg.length === 4) { + out.push([column, sourcesIndex, sourceLine, sourceColumn]); + continue; + } + out.push([column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX$1]]); + } + } + } + function append(arr, other) { + for (let i = 0; i < other.length; i++) + arr.push(other[i]); + } + function fillSourcesContent(len) { + const sourcesContent = []; + for (let i = 0; i < len; i++) + sourcesContent[i] = null; + return sourcesContent; + } + const INVALID_ORIGINAL_MAPPING = Object.freeze({ + source: null, + line: null, + column: null, + name: null + }); + Object.freeze({ + line: null, + column: null + }); + const LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; + const COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; + const LEAST_UPPER_BOUND = -1; + const GREATEST_LOWER_BOUND = 1; + let decodedMappings; + let originalPositionFor; + let presortedDecodedMap; + class TraceMap { + constructor(map, mapUrl) { + this._decodedMemo = memoizedState(); + this._bySources = void 0; + this._bySourceMemos = void 0; + const isString = typeof map === "string"; + if (!isString && map.constructor === TraceMap) + return map; + const parsed = isString ? JSON.parse(map) : map; + const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; + this.version = version; + this.file = file; + this.names = names; + this.sourceRoot = sourceRoot; + this.sources = sources; + this.sourcesContent = sourcesContent; + if (sourceRoot || mapUrl) { + const from = resolve(sourceRoot || "", stripFilename(mapUrl)); + this.resolvedSources = sources.map((s) => resolve(s || "", from)); + } else { + this.resolvedSources = sources.map((s) => s || ""); + } + const { mappings } = parsed; + if (typeof mappings === "string") { + this._encoded = mappings; + this._decoded = void 0; + } else { + this._encoded = void 0; + this._decoded = maybeSort(mappings, isString); + } + } + } + (() => { + decodedMappings = (map) => { + return map._decoded || (map._decoded = decode(map._encoded)); + }; + originalPositionFor = (map, { line, column, bias }) => { + line--; + if (line < 0) + throw new Error(LINE_GTR_ZERO); + if (column < 0) + throw new Error(COL_GTR_EQ_ZERO); + const decoded = decodedMappings(map); + if (line >= decoded.length) + return INVALID_ORIGINAL_MAPPING; + const segment = traceSegmentInternal(decoded[line], map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); + if (segment == null) + return INVALID_ORIGINAL_MAPPING; + if (segment.length == 1) + return INVALID_ORIGINAL_MAPPING; + const { names, resolvedSources } = map; + return { + source: resolvedSources[segment[SOURCES_INDEX$1]], + line: segment[SOURCE_LINE$1] + 1, + column: segment[SOURCE_COLUMN$1], + name: segment.length === 5 ? names[segment[NAMES_INDEX$1]] : null + }; + }; + presortedDecodedMap = (map, mapUrl) => { + const clone = Object.assign({}, map); + clone.mappings = []; + const tracer = new TraceMap(clone, mapUrl); + tracer._decoded = map.mappings; + return tracer; + }; + })(); + function traceSegmentInternal(segments, memo, line, column, bias) { + let index = memoizedBinarySearch(segments, column, memo, line); + if (found) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } else if (bias === LEAST_UPPER_BOUND) + index++; + if (index === -1 || index === segments.length) + return null; + return segments[index]; + } + let get; + let put; + class SetArray { + constructor() { + this._indexes = { __proto__: null }; + this.array = []; + } + } + (() => { + get = (strarr, key) => strarr._indexes[key]; + put = (strarr, key) => { + const index = get(strarr, key); + if (index !== void 0) + return index; + const { array, _indexes: indexes } = strarr; + return indexes[key] = array.push(key) - 1; + }; + })(); + const COLUMN = 0; + const SOURCES_INDEX = 1; + const SOURCE_LINE = 2; + const SOURCE_COLUMN = 3; + const NAMES_INDEX = 4; + const NO_NAME = -1; + let maybeAddMapping; + let setSourceContent; + let toDecodedMap; + let toEncodedMap; + let addSegmentInternal; + class GenMapping { + constructor({ file, sourceRoot } = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + } + } + (() => { + maybeAddMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping); + }; + setSourceContent = (map, source, content) => { + const { _sources: sources, _sourcesContent: sourcesContent } = map; + sourcesContent[put(sources, source)] = content; + }; + toDecodedMap = (map) => { + const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = map; + removeEmptyFinalLines(mappings); + return { + version: 3, + file: file || void 0, + names: names.array, + sourceRoot: sourceRoot || void 0, + sources: sources.array, + sourcesContent, + mappings + }; + }; + toEncodedMap = (map) => { + const decoded = toDecodedMap(map); + return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) }); + }; + addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name) => { + const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = map; + const line = getLine(mappings, genLine); + const index = getColumnIndex(line, genColumn); + if (!source) { + if (skipable && skipSourceless(line, index)) + return; + return insert(line, index, [genColumn]); + } + const sourcesIndex = put(sources, source); + const namesIndex = name ? put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) + sourcesContent[sourcesIndex] = null; + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + return insert(line, index, name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]); + }; + })(); + function getLine(mappings, index) { + for (let i = mappings.length; i <= index; i++) { + mappings[i] = []; + } + return mappings[index]; + } + function getColumnIndex(line, genColumn) { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) + break; + } + return index; + } + function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; + } + function removeEmptyFinalLines(mappings) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) + break; + } + if (len < length) + mappings.length = len; + } + function skipSourceless(line, index) { + if (index === 0) + return true; + const prev = line[index - 1]; + return prev.length === 1; + } + function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + if (index === 0) + return false; + const prev = line[index - 1]; + if (prev.length === 1) + return false; + return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME); + } + function addMappingInternal(skipable, map, mapping) { + const { generated, source, original, name } = mapping; + if (!source) { + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null); + } + const s = source; + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name); + } + class SourceMapConsumer { + constructor(map, mapUrl) { + const trace = this._map = new AnyMap(map, mapUrl); + this.file = trace.file; + this.names = trace.names; + this.sourceRoot = trace.sourceRoot; + this.sources = trace.resolvedSources; + this.sourcesContent = trace.sourcesContent; + } + originalPositionFor(needle) { + return originalPositionFor(this._map, needle); + } + destroy() { + } + } + class SourceMapGenerator { + constructor(opts) { + this._map = new GenMapping(opts); + } + addMapping(mapping) { + maybeAddMapping(this._map, mapping); + } + setSourceContent(source, content) { + setSourceContent(this._map, source, content); + } + toJSON() { + return toEncodedMap(this._map); + } + toDecodedMap() { + return toDecodedMap(this._map); + } + } + exports2.SourceMapConsumer = SourceMapConsumer; + exports2.SourceMapGenerator = SourceMapGenerator; + Object.defineProperty(exports2, "__esModule", { value: true }); + }); + } +}); + +// node_modules/acorn/dist/acorn.js +var require_acorn = __commonJS({ + "node_modules/acorn/dist/acorn.js"(exports, module2) { + (function(global2, factory) { + typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.acorn = {})); + })(exports, function(exports2) { + "use strict"; + var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191]; + var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECE\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA8FF-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F"; + var nonASCIIidentifierStartChars = "\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC"; + var reservedWords = { + 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile", + 5: "class enum extends super const export import", + 6: "enum", + strict: "implements interface let package private protected public static yield", + strictBind: "eval arguments" + }; + var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this"; + var keywords$1 = { + 5: ecma5AndLessKeywords, + "5module": ecma5AndLessKeywords + " export import", + 6: ecma5AndLessKeywords + " const class extends export import super" + }; + var keywordRelationalOperator = /^in(stanceof)?$/; + var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); + var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); + function isInAstralSet(code, set) { + var pos = 65536; + for (var i2 = 0; i2 < set.length; i2 += 2) { + pos += set[i2]; + if (pos > code) { + return false; + } + pos += set[i2 + 1]; + if (pos >= code) { + return true; + } + } + return false; + } + function isIdentifierStart(code, astral) { + if (code < 65) { + return code === 36; + } + if (code < 91) { + return true; + } + if (code < 97) { + return code === 95; + } + if (code < 123) { + return true; + } + if (code <= 65535) { + return code >= 170 && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } + if (astral === false) { + return false; + } + return isInAstralSet(code, astralIdentifierStartCodes); + } + function isIdentifierChar(code, astral) { + if (code < 48) { + return code === 36; + } + if (code < 58) { + return true; + } + if (code < 65) { + return false; + } + if (code < 91) { + return true; + } + if (code < 97) { + return code === 95; + } + if (code < 123) { + return true; + } + if (code <= 65535) { + return code >= 170 && nonASCIIidentifier.test(String.fromCharCode(code)); + } + if (astral === false) { + return false; + } + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); + } + var TokenType = function TokenType2(label, conf) { + if (conf === void 0) + conf = {}; + this.label = label; + this.keyword = conf.keyword; + this.beforeExpr = !!conf.beforeExpr; + this.startsExpr = !!conf.startsExpr; + this.isLoop = !!conf.isLoop; + this.isAssign = !!conf.isAssign; + this.prefix = !!conf.prefix; + this.postfix = !!conf.postfix; + this.binop = conf.binop || null; + this.updateContext = null; + }; + function binop(name, prec) { + return new TokenType(name, { beforeExpr: true, binop: prec }); + } + var beforeExpr = { beforeExpr: true }, startsExpr = { startsExpr: true }; + var keywords = {}; + function kw(name, options) { + if (options === void 0) + options = {}; + options.keyword = name; + return keywords[name] = new TokenType(name, options); + } + var types$1 = { + num: new TokenType("num", startsExpr), + regexp: new TokenType("regexp", startsExpr), + string: new TokenType("string", startsExpr), + name: new TokenType("name", startsExpr), + privateId: new TokenType("privateId", startsExpr), + eof: new TokenType("eof"), + bracketL: new TokenType("[", { beforeExpr: true, startsExpr: true }), + bracketR: new TokenType("]"), + braceL: new TokenType("{", { beforeExpr: true, startsExpr: true }), + braceR: new TokenType("}"), + parenL: new TokenType("(", { beforeExpr: true, startsExpr: true }), + parenR: new TokenType(")"), + comma: new TokenType(",", beforeExpr), + semi: new TokenType(";", beforeExpr), + colon: new TokenType(":", beforeExpr), + dot: new TokenType("."), + question: new TokenType("?", beforeExpr), + questionDot: new TokenType("?."), + arrow: new TokenType("=>", beforeExpr), + template: new TokenType("template"), + invalidTemplate: new TokenType("invalidTemplate"), + ellipsis: new TokenType("...", beforeExpr), + backQuote: new TokenType("`", startsExpr), + dollarBraceL: new TokenType("${", { beforeExpr: true, startsExpr: true }), + eq: new TokenType("=", { beforeExpr: true, isAssign: true }), + assign: new TokenType("_=", { beforeExpr: true, isAssign: true }), + incDec: new TokenType("++/--", { prefix: true, postfix: true, startsExpr: true }), + prefix: new TokenType("!/~", { beforeExpr: true, prefix: true, startsExpr: true }), + logicalOR: binop("||", 1), + logicalAND: binop("&&", 2), + bitwiseOR: binop("|", 3), + bitwiseXOR: binop("^", 4), + bitwiseAND: binop("&", 5), + equality: binop("==/!=/===/!==", 6), + relational: binop("/<=/>=", 7), + bitShift: binop("<>/>>>", 8), + plusMin: new TokenType("+/-", { beforeExpr: true, binop: 9, prefix: true, startsExpr: true }), + modulo: binop("%", 10), + star: binop("*", 10), + slash: binop("/", 10), + starstar: new TokenType("**", { beforeExpr: true }), + coalesce: binop("??", 1), + _break: kw("break"), + _case: kw("case", beforeExpr), + _catch: kw("catch"), + _continue: kw("continue"), + _debugger: kw("debugger"), + _default: kw("default", beforeExpr), + _do: kw("do", { isLoop: true, beforeExpr: true }), + _else: kw("else", beforeExpr), + _finally: kw("finally"), + _for: kw("for", { isLoop: true }), + _function: kw("function", startsExpr), + _if: kw("if"), + _return: kw("return", beforeExpr), + _switch: kw("switch"), + _throw: kw("throw", beforeExpr), + _try: kw("try"), + _var: kw("var"), + _const: kw("const"), + _while: kw("while", { isLoop: true }), + _with: kw("with"), + _new: kw("new", { beforeExpr: true, startsExpr: true }), + _this: kw("this", startsExpr), + _super: kw("super", startsExpr), + _class: kw("class", startsExpr), + _extends: kw("extends", beforeExpr), + _export: kw("export"), + _import: kw("import", startsExpr), + _null: kw("null", startsExpr), + _true: kw("true", startsExpr), + _false: kw("false", startsExpr), + _in: kw("in", { beforeExpr: true, binop: 7 }), + _instanceof: kw("instanceof", { beforeExpr: true, binop: 7 }), + _typeof: kw("typeof", { beforeExpr: true, prefix: true, startsExpr: true }), + _void: kw("void", { beforeExpr: true, prefix: true, startsExpr: true }), + _delete: kw("delete", { beforeExpr: true, prefix: true, startsExpr: true }) + }; + var lineBreak = /\r\n?|\n|\u2028|\u2029/; + var lineBreakG = new RegExp(lineBreak.source, "g"); + function isNewLine(code) { + return code === 10 || code === 13 || code === 8232 || code === 8233; + } + function nextLineBreak(code, from, end) { + if (end === void 0) + end = code.length; + for (var i2 = from; i2 < end; i2++) { + var next = code.charCodeAt(i2); + if (isNewLine(next)) { + return i2 < end - 1 && next === 13 && code.charCodeAt(i2 + 1) === 10 ? i2 + 2 : i2 + 1; + } + } + return -1; + } + var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/; + var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; + var ref = Object.prototype; + var hasOwnProperty = ref.hasOwnProperty; + var toString = ref.toString; + var hasOwn = Object.hasOwn || function(obj, propName) { + return hasOwnProperty.call(obj, propName); + }; + var isArray = Array.isArray || function(obj) { + return toString.call(obj) === "[object Array]"; + }; + function wordsRegexp(words) { + return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$"); + } + function codePointToString(code) { + if (code <= 65535) { + return String.fromCharCode(code); + } + code -= 65536; + return String.fromCharCode((code >> 10) + 55296, (code & 1023) + 56320); + } + var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/; + var Position = function Position2(line, col) { + this.line = line; + this.column = col; + }; + Position.prototype.offset = function offset(n) { + return new Position(this.line, this.column + n); + }; + var SourceLocation = function SourceLocation2(p, start, end) { + this.start = start; + this.end = end; + if (p.sourceFile !== null) { + this.source = p.sourceFile; + } + }; + function getLineInfo(input, offset) { + for (var line = 1, cur = 0; ; ) { + var nextBreak = nextLineBreak(input, cur, offset); + if (nextBreak < 0) { + return new Position(line, offset - cur); + } + ++line; + cur = nextBreak; + } + } + var defaultOptions2 = { + ecmaVersion: null, + sourceType: "script", + onInsertedSemicolon: null, + onTrailingComma: null, + allowReserved: null, + allowReturnOutsideFunction: false, + allowImportExportEverywhere: false, + allowAwaitOutsideFunction: null, + allowSuperOutsideMethod: null, + allowHashBang: false, + checkPrivateFields: true, + locations: false, + onToken: null, + onComment: null, + ranges: false, + program: null, + sourceFile: null, + directSourceFile: null, + preserveParens: false + }; + var warnedAboutEcmaVersion = false; + function getOptions(opts) { + var options = {}; + for (var opt in defaultOptions2) { + options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions2[opt]; + } + if (options.ecmaVersion === "latest") { + options.ecmaVersion = 1e8; + } else if (options.ecmaVersion == null) { + if (!warnedAboutEcmaVersion && typeof console === "object" && console.warn) { + warnedAboutEcmaVersion = true; + console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future."); + } + options.ecmaVersion = 11; + } else if (options.ecmaVersion >= 2015) { + options.ecmaVersion -= 2009; + } + if (options.allowReserved == null) { + options.allowReserved = options.ecmaVersion < 5; + } + if (!opts || opts.allowHashBang == null) { + options.allowHashBang = options.ecmaVersion >= 14; + } + if (isArray(options.onToken)) { + var tokens = options.onToken; + options.onToken = function(token) { + return tokens.push(token); + }; + } + if (isArray(options.onComment)) { + options.onComment = pushComment(options, options.onComment); + } + return options; + } + function pushComment(options, array) { + return function(block, text, start, end, startLoc, endLoc) { + var comment = { + type: block ? "Block" : "Line", + value: text, + start, + end + }; + if (options.locations) { + comment.loc = new SourceLocation(this, startLoc, endLoc); + } + if (options.ranges) { + comment.range = [start, end]; + } + array.push(comment); + }; + } + var SCOPE_TOP = 1, SCOPE_FUNCTION = 2, SCOPE_ASYNC = 4, SCOPE_GENERATOR = 8, SCOPE_ARROW = 16, SCOPE_SIMPLE_CATCH = 32, SCOPE_SUPER = 64, SCOPE_DIRECT_SUPER = 128, SCOPE_CLASS_STATIC_BLOCK = 256, SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK; + function functionFlags(async, generator) { + return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0); + } + var BIND_NONE = 0, BIND_VAR = 1, BIND_LEXICAL = 2, BIND_FUNCTION = 3, BIND_SIMPLE_CATCH = 4, BIND_OUTSIDE = 5; + var Parser = function Parser2(options, input, startPos) { + this.options = options = getOptions(options); + this.sourceFile = options.sourceFile; + this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]); + var reserved = ""; + if (options.allowReserved !== true) { + reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3]; + if (options.sourceType === "module") { + reserved += " await"; + } + } + this.reservedWords = wordsRegexp(reserved); + var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict; + this.reservedWordsStrict = wordsRegexp(reservedStrict); + this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind); + this.input = String(input); + this.containsEsc = false; + if (startPos) { + this.pos = startPos; + this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1; + this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length; + } else { + this.pos = this.lineStart = 0; + this.curLine = 1; + } + this.type = types$1.eof; + this.value = null; + this.start = this.end = this.pos; + this.startLoc = this.endLoc = this.curPosition(); + this.lastTokEndLoc = this.lastTokStartLoc = null; + this.lastTokStart = this.lastTokEnd = this.pos; + this.context = this.initialContext(); + this.exprAllowed = true; + this.inModule = options.sourceType === "module"; + this.strict = this.inModule || this.strictDirective(this.pos); + this.potentialArrowAt = -1; + this.potentialArrowInForAwait = false; + this.yieldPos = this.awaitPos = this.awaitIdentPos = 0; + this.labels = []; + this.undefinedExports = /* @__PURE__ */ Object.create(null); + if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!") { + this.skipLineComment(2); + } + this.scopeStack = []; + this.enterScope(SCOPE_TOP); + this.regexpState = null; + this.privateNameStack = []; + }; + var prototypeAccessors = { inFunction: { configurable: true }, inGenerator: { configurable: true }, inAsync: { configurable: true }, canAwait: { configurable: true }, allowSuper: { configurable: true }, allowDirectSuper: { configurable: true }, treatFunctionsAsVar: { configurable: true }, allowNewDotTarget: { configurable: true }, inClassStaticBlock: { configurable: true } }; + Parser.prototype.parse = function parse2() { + var node = this.options.program || this.startNode(); + this.nextToken(); + return this.parseTopLevel(node); + }; + prototypeAccessors.inFunction.get = function() { + return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0; + }; + prototypeAccessors.inGenerator.get = function() { + return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit; + }; + prototypeAccessors.inAsync.get = function() { + return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit; + }; + prototypeAccessors.canAwait.get = function() { + for (var i2 = this.scopeStack.length - 1; i2 >= 0; i2--) { + var scope = this.scopeStack[i2]; + if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { + return false; + } + if (scope.flags & SCOPE_FUNCTION) { + return (scope.flags & SCOPE_ASYNC) > 0; + } + } + return this.inModule && this.options.ecmaVersion >= 13 || this.options.allowAwaitOutsideFunction; + }; + prototypeAccessors.allowSuper.get = function() { + var ref2 = this.currentThisScope(); + var flags = ref2.flags; + var inClassFieldInit = ref2.inClassFieldInit; + return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod; + }; + prototypeAccessors.allowDirectSuper.get = function() { + return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0; + }; + prototypeAccessors.treatFunctionsAsVar.get = function() { + return this.treatFunctionsAsVarInScope(this.currentScope()); + }; + prototypeAccessors.allowNewDotTarget.get = function() { + var ref2 = this.currentThisScope(); + var flags = ref2.flags; + var inClassFieldInit = ref2.inClassFieldInit; + return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit; + }; + prototypeAccessors.inClassStaticBlock.get = function() { + return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0; + }; + Parser.extend = function extend() { + var plugins = [], len = arguments.length; + while (len--) + plugins[len] = arguments[len]; + var cls = this; + for (var i2 = 0; i2 < plugins.length; i2++) { + cls = plugins[i2](cls); + } + return cls; + }; + Parser.parse = function parse2(input, options) { + return new this(options, input).parse(); + }; + Parser.parseExpressionAt = function parseExpressionAt2(input, pos, options) { + var parser = new this(options, input, pos); + parser.nextToken(); + return parser.parseExpression(); + }; + Parser.tokenizer = function tokenizer2(input, options) { + return new this(options, input); + }; + Object.defineProperties(Parser.prototype, prototypeAccessors); + var pp$9 = Parser.prototype; + var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/; + pp$9.strictDirective = function(start) { + if (this.options.ecmaVersion < 5) { + return false; + } + for (; ; ) { + skipWhiteSpace.lastIndex = start; + start += skipWhiteSpace.exec(this.input)[0].length; + var match = literal.exec(this.input.slice(start)); + if (!match) { + return false; + } + if ((match[1] || match[2]) === "use strict") { + skipWhiteSpace.lastIndex = start + match[0].length; + var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length; + var next = this.input.charAt(end); + return next === ";" || next === "}" || lineBreak.test(spaceAfter[0]) && !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "="); + } + start += match[0].length; + skipWhiteSpace.lastIndex = start; + start += skipWhiteSpace.exec(this.input)[0].length; + if (this.input[start] === ";") { + start++; + } + } + }; + pp$9.eat = function(type) { + if (this.type === type) { + this.next(); + return true; + } else { + return false; + } + }; + pp$9.isContextual = function(name) { + return this.type === types$1.name && this.value === name && !this.containsEsc; + }; + pp$9.eatContextual = function(name) { + if (!this.isContextual(name)) { + return false; + } + this.next(); + return true; + }; + pp$9.expectContextual = function(name) { + if (!this.eatContextual(name)) { + this.unexpected(); + } + }; + pp$9.canInsertSemicolon = function() { + return this.type === types$1.eof || this.type === types$1.braceR || lineBreak.test(this.input.slice(this.lastTokEnd, this.start)); + }; + pp$9.insertSemicolon = function() { + if (this.canInsertSemicolon()) { + if (this.options.onInsertedSemicolon) { + this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); + } + return true; + } + }; + pp$9.semicolon = function() { + if (!this.eat(types$1.semi) && !this.insertSemicolon()) { + this.unexpected(); + } + }; + pp$9.afterTrailingComma = function(tokType, notNext) { + if (this.type === tokType) { + if (this.options.onTrailingComma) { + this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); + } + if (!notNext) { + this.next(); + } + return true; + } + }; + pp$9.expect = function(type) { + this.eat(type) || this.unexpected(); + }; + pp$9.unexpected = function(pos) { + this.raise(pos != null ? pos : this.start, "Unexpected token"); + }; + var DestructuringErrors = function DestructuringErrors2() { + this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1; + }; + pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) { + if (!refDestructuringErrors) { + return; + } + if (refDestructuringErrors.trailingComma > -1) { + this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); + } + var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind; + if (parens > -1) { + this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); + } + }; + pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) { + if (!refDestructuringErrors) { + return false; + } + var shorthandAssign = refDestructuringErrors.shorthandAssign; + var doubleProto = refDestructuringErrors.doubleProto; + if (!andThrow) { + return shorthandAssign >= 0 || doubleProto >= 0; + } + if (shorthandAssign >= 0) { + this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); + } + if (doubleProto >= 0) { + this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); + } + }; + pp$9.checkYieldAwaitInDefaultParams = function() { + if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) { + this.raise(this.yieldPos, "Yield expression cannot be a default value"); + } + if (this.awaitPos) { + this.raise(this.awaitPos, "Await expression cannot be a default value"); + } + }; + pp$9.isSimpleAssignTarget = function(expr) { + if (expr.type === "ParenthesizedExpression") { + return this.isSimpleAssignTarget(expr.expression); + } + return expr.type === "Identifier" || expr.type === "MemberExpression"; + }; + var pp$8 = Parser.prototype; + pp$8.parseTopLevel = function(node) { + var exports3 = /* @__PURE__ */ Object.create(null); + if (!node.body) { + node.body = []; + } + while (this.type !== types$1.eof) { + var stmt = this.parseStatement(null, true, exports3); + node.body.push(stmt); + } + if (this.inModule) { + for (var i2 = 0, list2 = Object.keys(this.undefinedExports); i2 < list2.length; i2 += 1) { + var name = list2[i2]; + this.raiseRecoverable(this.undefinedExports[name].start, "Export '" + name + "' is not defined"); + } + } + this.adaptDirectivePrologue(node.body); + this.next(); + node.sourceType = this.options.sourceType; + return this.finishNode(node, "Program"); + }; + var loopLabel = { kind: "loop" }, switchLabel = { kind: "switch" }; + pp$8.isLet = function(context) { + if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { + return false; + } + skipWhiteSpace.lastIndex = this.pos; + var skip = skipWhiteSpace.exec(this.input); + var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next); + if (nextCh === 91 || nextCh === 92) { + return true; + } + if (context) { + return false; + } + if (nextCh === 123 || nextCh > 55295 && nextCh < 56320) { + return true; + } + if (isIdentifierStart(nextCh, true)) { + var pos = next + 1; + while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { + ++pos; + } + if (nextCh === 92 || nextCh > 55295 && nextCh < 56320) { + return true; + } + var ident = this.input.slice(next, pos); + if (!keywordRelationalOperator.test(ident)) { + return true; + } + } + return false; + }; + pp$8.isAsyncFunction = function() { + if (this.options.ecmaVersion < 8 || !this.isContextual("async")) { + return false; + } + skipWhiteSpace.lastIndex = this.pos; + var skip = skipWhiteSpace.exec(this.input); + var next = this.pos + skip[0].length, after; + return !lineBreak.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === "function" && (next + 8 === this.input.length || !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 55295 && after < 56320)); + }; + pp$8.parseStatement = function(context, topLevel, exports3) { + var starttype = this.type, node = this.startNode(), kind; + if (this.isLet(context)) { + starttype = types$1._var; + kind = "let"; + } + switch (starttype) { + case types$1._break: + case types$1._continue: + return this.parseBreakContinueStatement(node, starttype.keyword); + case types$1._debugger: + return this.parseDebuggerStatement(node); + case types$1._do: + return this.parseDoStatement(node); + case types$1._for: + return this.parseForStatement(node); + case types$1._function: + if (context && (this.strict || context !== "if" && context !== "label") && this.options.ecmaVersion >= 6) { + this.unexpected(); + } + return this.parseFunctionStatement(node, false, !context); + case types$1._class: + if (context) { + this.unexpected(); + } + return this.parseClass(node, true); + case types$1._if: + return this.parseIfStatement(node); + case types$1._return: + return this.parseReturnStatement(node); + case types$1._switch: + return this.parseSwitchStatement(node); + case types$1._throw: + return this.parseThrowStatement(node); + case types$1._try: + return this.parseTryStatement(node); + case types$1._const: + case types$1._var: + kind = kind || this.value; + if (context && kind !== "var") { + this.unexpected(); + } + return this.parseVarStatement(node, kind); + case types$1._while: + return this.parseWhileStatement(node); + case types$1._with: + return this.parseWithStatement(node); + case types$1.braceL: + return this.parseBlock(true, node); + case types$1.semi: + return this.parseEmptyStatement(node); + case types$1._export: + case types$1._import: + if (this.options.ecmaVersion > 10 && starttype === types$1._import) { + skipWhiteSpace.lastIndex = this.pos; + var skip = skipWhiteSpace.exec(this.input); + var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next); + if (nextCh === 40 || nextCh === 46) { + return this.parseExpressionStatement(node, this.parseExpression()); + } + } + if (!this.options.allowImportExportEverywhere) { + if (!topLevel) { + this.raise(this.start, "'import' and 'export' may only appear at the top level"); + } + if (!this.inModule) { + this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); + } + } + return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports3); + default: + if (this.isAsyncFunction()) { + if (context) { + this.unexpected(); + } + this.next(); + return this.parseFunctionStatement(node, true, !context); + } + var maybeName = this.value, expr = this.parseExpression(); + if (starttype === types$1.name && expr.type === "Identifier" && this.eat(types$1.colon)) { + return this.parseLabeledStatement(node, maybeName, expr, context); + } else { + return this.parseExpressionStatement(node, expr); + } + } + }; + pp$8.parseBreakContinueStatement = function(node, keyword) { + var isBreak = keyword === "break"; + this.next(); + if (this.eat(types$1.semi) || this.insertSemicolon()) { + node.label = null; + } else if (this.type !== types$1.name) { + this.unexpected(); + } else { + node.label = this.parseIdent(); + this.semicolon(); + } + var i2 = 0; + for (; i2 < this.labels.length; ++i2) { + var lab = this.labels[i2]; + if (node.label == null || lab.name === node.label.name) { + if (lab.kind != null && (isBreak || lab.kind === "loop")) { + break; + } + if (node.label && isBreak) { + break; + } + } + } + if (i2 === this.labels.length) { + this.raise(node.start, "Unsyntactic " + keyword); + } + return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement"); + }; + pp$8.parseDebuggerStatement = function(node) { + this.next(); + this.semicolon(); + return this.finishNode(node, "DebuggerStatement"); + }; + pp$8.parseDoStatement = function(node) { + this.next(); + this.labels.push(loopLabel); + node.body = this.parseStatement("do"); + this.labels.pop(); + this.expect(types$1._while); + node.test = this.parseParenExpression(); + if (this.options.ecmaVersion >= 6) { + this.eat(types$1.semi); + } else { + this.semicolon(); + } + return this.finishNode(node, "DoWhileStatement"); + }; + pp$8.parseForStatement = function(node) { + this.next(); + var awaitAt = this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual("await") ? this.lastTokStart : -1; + this.labels.push(loopLabel); + this.enterScope(0); + this.expect(types$1.parenL); + if (this.type === types$1.semi) { + if (awaitAt > -1) { + this.unexpected(awaitAt); + } + return this.parseFor(node, null); + } + var isLet = this.isLet(); + if (this.type === types$1._var || this.type === types$1._const || isLet) { + var init$1 = this.startNode(), kind = isLet ? "let" : this.value; + this.next(); + this.parseVar(init$1, true, kind); + this.finishNode(init$1, "VariableDeclaration"); + if ((this.type === types$1._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) && init$1.declarations.length === 1) { + if (this.options.ecmaVersion >= 9) { + if (this.type === types$1._in) { + if (awaitAt > -1) { + this.unexpected(awaitAt); + } + } else { + node.await = awaitAt > -1; + } + } + return this.parseForIn(node, init$1); + } + if (awaitAt > -1) { + this.unexpected(awaitAt); + } + return this.parseFor(node, init$1); + } + var startsWithLet = this.isContextual("let"), isForOf = false; + var refDestructuringErrors = new DestructuringErrors(); + var init = this.parseExpression(awaitAt > -1 ? "await" : true, refDestructuringErrors); + if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual("of"))) { + if (this.options.ecmaVersion >= 9) { + if (this.type === types$1._in) { + if (awaitAt > -1) { + this.unexpected(awaitAt); + } + } else { + node.await = awaitAt > -1; + } + } + if (startsWithLet && isForOf) { + this.raise(init.start, "The left-hand side of a for-of loop may not start with 'let'."); + } + this.toAssignable(init, false, refDestructuringErrors); + this.checkLValPattern(init); + return this.parseForIn(node, init); + } else { + this.checkExpressionErrors(refDestructuringErrors, true); + } + if (awaitAt > -1) { + this.unexpected(awaitAt); + } + return this.parseFor(node, init); + }; + pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) { + this.next(); + return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync); + }; + pp$8.parseIfStatement = function(node) { + this.next(); + node.test = this.parseParenExpression(); + node.consequent = this.parseStatement("if"); + node.alternate = this.eat(types$1._else) ? this.parseStatement("if") : null; + return this.finishNode(node, "IfStatement"); + }; + pp$8.parseReturnStatement = function(node) { + if (!this.inFunction && !this.options.allowReturnOutsideFunction) { + this.raise(this.start, "'return' outside of function"); + } + this.next(); + if (this.eat(types$1.semi) || this.insertSemicolon()) { + node.argument = null; + } else { + node.argument = this.parseExpression(); + this.semicolon(); + } + return this.finishNode(node, "ReturnStatement"); + }; + pp$8.parseSwitchStatement = function(node) { + this.next(); + node.discriminant = this.parseParenExpression(); + node.cases = []; + this.expect(types$1.braceL); + this.labels.push(switchLabel); + this.enterScope(0); + var cur; + for (var sawDefault = false; this.type !== types$1.braceR; ) { + if (this.type === types$1._case || this.type === types$1._default) { + var isCase = this.type === types$1._case; + if (cur) { + this.finishNode(cur, "SwitchCase"); + } + node.cases.push(cur = this.startNode()); + cur.consequent = []; + this.next(); + if (isCase) { + cur.test = this.parseExpression(); + } else { + if (sawDefault) { + this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); + } + sawDefault = true; + cur.test = null; + } + this.expect(types$1.colon); + } else { + if (!cur) { + this.unexpected(); + } + cur.consequent.push(this.parseStatement(null)); + } + } + this.exitScope(); + if (cur) { + this.finishNode(cur, "SwitchCase"); + } + this.next(); + this.labels.pop(); + return this.finishNode(node, "SwitchStatement"); + }; + pp$8.parseThrowStatement = function(node) { + this.next(); + if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) { + this.raise(this.lastTokEnd, "Illegal newline after throw"); + } + node.argument = this.parseExpression(); + this.semicolon(); + return this.finishNode(node, "ThrowStatement"); + }; + var empty$1 = []; + pp$8.parseCatchClauseParam = function() { + var param = this.parseBindingAtom(); + var simple = param.type === "Identifier"; + this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0); + this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL); + this.expect(types$1.parenR); + return param; + }; + pp$8.parseTryStatement = function(node) { + this.next(); + node.block = this.parseBlock(); + node.handler = null; + if (this.type === types$1._catch) { + var clause = this.startNode(); + this.next(); + if (this.eat(types$1.parenL)) { + clause.param = this.parseCatchClauseParam(); + } else { + if (this.options.ecmaVersion < 10) { + this.unexpected(); + } + clause.param = null; + this.enterScope(0); + } + clause.body = this.parseBlock(false); + this.exitScope(); + node.handler = this.finishNode(clause, "CatchClause"); + } + node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null; + if (!node.handler && !node.finalizer) { + this.raise(node.start, "Missing catch or finally clause"); + } + return this.finishNode(node, "TryStatement"); + }; + pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) { + this.next(); + this.parseVar(node, false, kind, allowMissingInitializer); + this.semicolon(); + return this.finishNode(node, "VariableDeclaration"); + }; + pp$8.parseWhileStatement = function(node) { + this.next(); + node.test = this.parseParenExpression(); + this.labels.push(loopLabel); + node.body = this.parseStatement("while"); + this.labels.pop(); + return this.finishNode(node, "WhileStatement"); + }; + pp$8.parseWithStatement = function(node) { + if (this.strict) { + this.raise(this.start, "'with' in strict mode"); + } + this.next(); + node.object = this.parseParenExpression(); + node.body = this.parseStatement("with"); + return this.finishNode(node, "WithStatement"); + }; + pp$8.parseEmptyStatement = function(node) { + this.next(); + return this.finishNode(node, "EmptyStatement"); + }; + pp$8.parseLabeledStatement = function(node, maybeName, expr, context) { + for (var i$1 = 0, list2 = this.labels; i$1 < list2.length; i$1 += 1) { + var label = list2[i$1]; + if (label.name === maybeName) { + this.raise(expr.start, "Label '" + maybeName + "' is already declared"); + } + } + var kind = this.type.isLoop ? "loop" : this.type === types$1._switch ? "switch" : null; + for (var i2 = this.labels.length - 1; i2 >= 0; i2--) { + var label$1 = this.labels[i2]; + if (label$1.statementStart === node.start) { + label$1.statementStart = this.start; + label$1.kind = kind; + } else { + break; + } + } + this.labels.push({ name: maybeName, kind, statementStart: this.start }); + node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label"); + this.labels.pop(); + node.label = expr; + return this.finishNode(node, "LabeledStatement"); + }; + pp$8.parseExpressionStatement = function(node, expr) { + node.expression = expr; + this.semicolon(); + return this.finishNode(node, "ExpressionStatement"); + }; + pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) { + if (createNewLexicalScope === void 0) + createNewLexicalScope = true; + if (node === void 0) + node = this.startNode(); + node.body = []; + this.expect(types$1.braceL); + if (createNewLexicalScope) { + this.enterScope(0); + } + while (this.type !== types$1.braceR) { + var stmt = this.parseStatement(null); + node.body.push(stmt); + } + if (exitStrict) { + this.strict = false; + } + this.next(); + if (createNewLexicalScope) { + this.exitScope(); + } + return this.finishNode(node, "BlockStatement"); + }; + pp$8.parseFor = function(node, init) { + node.init = init; + this.expect(types$1.semi); + node.test = this.type === types$1.semi ? null : this.parseExpression(); + this.expect(types$1.semi); + node.update = this.type === types$1.parenR ? null : this.parseExpression(); + this.expect(types$1.parenR); + node.body = this.parseStatement("for"); + this.exitScope(); + this.labels.pop(); + return this.finishNode(node, "ForStatement"); + }; + pp$8.parseForIn = function(node, init) { + var isForIn = this.type === types$1._in; + this.next(); + if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || this.options.ecmaVersion < 8 || this.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) { + this.raise(init.start, (isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer"); + } + node.left = init; + node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign(); + this.expect(types$1.parenR); + node.body = this.parseStatement("for"); + this.exitScope(); + this.labels.pop(); + return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement"); + }; + pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) { + node.declarations = []; + node.kind = kind; + for (; ; ) { + var decl = this.startNode(); + this.parseVarId(decl, kind); + if (this.eat(types$1.eq)) { + decl.init = this.parseMaybeAssign(isFor); + } else if (!allowMissingInitializer && kind === "const" && !(this.type === types$1._in || this.options.ecmaVersion >= 6 && this.isContextual("of"))) { + this.unexpected(); + } else if (!allowMissingInitializer && decl.id.type !== "Identifier" && !(isFor && (this.type === types$1._in || this.isContextual("of")))) { + this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value"); + } else { + decl.init = null; + } + node.declarations.push(this.finishNode(decl, "VariableDeclarator")); + if (!this.eat(types$1.comma)) { + break; + } + } + return node; + }; + pp$8.parseVarId = function(decl, kind) { + decl.id = this.parseBindingAtom(); + this.checkLValPattern(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false); + }; + var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4; + pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) { + this.initFunction(node); + if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) { + if (this.type === types$1.star && statement & FUNC_HANGING_STATEMENT) { + this.unexpected(); + } + node.generator = this.eat(types$1.star); + } + if (this.options.ecmaVersion >= 8) { + node.async = !!isAsync; + } + if (statement & FUNC_STATEMENT) { + node.id = statement & FUNC_NULLABLE_ID && this.type !== types$1.name ? null : this.parseIdent(); + if (node.id && !(statement & FUNC_HANGING_STATEMENT)) { + this.checkLValSimple(node.id, this.strict || node.generator || node.async ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); + } + } + var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + this.enterScope(functionFlags(node.async, node.generator)); + if (!(statement & FUNC_STATEMENT)) { + node.id = this.type === types$1.name ? this.parseIdent() : null; + } + this.parseFunctionParams(node); + this.parseFunctionBody(node, allowExpressionBody, false, forInit); + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, statement & FUNC_STATEMENT ? "FunctionDeclaration" : "FunctionExpression"); + }; + pp$8.parseFunctionParams = function(node) { + this.expect(types$1.parenL); + node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8); + this.checkYieldAwaitInDefaultParams(); + }; + pp$8.parseClass = function(node, isStatement) { + this.next(); + var oldStrict = this.strict; + this.strict = true; + this.parseClassId(node, isStatement); + this.parseClassSuper(node); + var privateNameMap = this.enterClassBody(); + var classBody = this.startNode(); + var hadConstructor = false; + classBody.body = []; + this.expect(types$1.braceL); + while (this.type !== types$1.braceR) { + var element = this.parseClassElement(node.superClass !== null); + if (element) { + classBody.body.push(element); + if (element.type === "MethodDefinition" && element.kind === "constructor") { + if (hadConstructor) { + this.raiseRecoverable(element.start, "Duplicate constructor in the same class"); + } + hadConstructor = true; + } else if (element.key && element.key.type === "PrivateIdentifier" && isPrivateNameConflicted(privateNameMap, element)) { + this.raiseRecoverable(element.key.start, "Identifier '#" + element.key.name + "' has already been declared"); + } + } + } + this.strict = oldStrict; + this.next(); + node.body = this.finishNode(classBody, "ClassBody"); + this.exitClassBody(); + return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression"); + }; + pp$8.parseClassElement = function(constructorAllowsSuper) { + if (this.eat(types$1.semi)) { + return null; + } + var ecmaVersion2 = this.options.ecmaVersion; + var node = this.startNode(); + var keyName = ""; + var isGenerator = false; + var isAsync = false; + var kind = "method"; + var isStatic = false; + if (this.eatContextual("static")) { + if (ecmaVersion2 >= 13 && this.eat(types$1.braceL)) { + this.parseClassStaticBlock(node); + return node; + } + if (this.isClassElementNameStart() || this.type === types$1.star) { + isStatic = true; + } else { + keyName = "static"; + } + } + node.static = isStatic; + if (!keyName && ecmaVersion2 >= 8 && this.eatContextual("async")) { + if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) { + isAsync = true; + } else { + keyName = "async"; + } + } + if (!keyName && (ecmaVersion2 >= 9 || !isAsync) && this.eat(types$1.star)) { + isGenerator = true; + } + if (!keyName && !isAsync && !isGenerator) { + var lastValue = this.value; + if (this.eatContextual("get") || this.eatContextual("set")) { + if (this.isClassElementNameStart()) { + kind = lastValue; + } else { + keyName = lastValue; + } + } + } + if (keyName) { + node.computed = false; + node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc); + node.key.name = keyName; + this.finishNode(node.key, "Identifier"); + } else { + this.parseClassElementName(node); + } + if (ecmaVersion2 < 13 || this.type === types$1.parenL || kind !== "method" || isGenerator || isAsync) { + var isConstructor = !node.static && checkKeyName(node, "constructor"); + var allowsDirectSuper = isConstructor && constructorAllowsSuper; + if (isConstructor && kind !== "method") { + this.raise(node.key.start, "Constructor can't have get/set modifier"); + } + node.kind = isConstructor ? "constructor" : kind; + this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper); + } else { + this.parseClassField(node); + } + return node; + }; + pp$8.isClassElementNameStart = function() { + return this.type === types$1.name || this.type === types$1.privateId || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword; + }; + pp$8.parseClassElementName = function(element) { + if (this.type === types$1.privateId) { + if (this.value === "constructor") { + this.raise(this.start, "Classes can't have an element named '#constructor'"); + } + element.computed = false; + element.key = this.parsePrivateIdent(); + } else { + this.parsePropertyName(element); + } + }; + pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) { + var key = method.key; + if (method.kind === "constructor") { + if (isGenerator) { + this.raise(key.start, "Constructor can't be a generator"); + } + if (isAsync) { + this.raise(key.start, "Constructor can't be an async method"); + } + } else if (method.static && checkKeyName(method, "prototype")) { + this.raise(key.start, "Classes may not have a static property named prototype"); + } + var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper); + if (method.kind === "get" && value.params.length !== 0) { + this.raiseRecoverable(value.start, "getter should have no params"); + } + if (method.kind === "set" && value.params.length !== 1) { + this.raiseRecoverable(value.start, "setter should have exactly one param"); + } + if (method.kind === "set" && value.params[0].type === "RestElement") { + this.raiseRecoverable(value.params[0].start, "Setter cannot use rest params"); + } + return this.finishNode(method, "MethodDefinition"); + }; + pp$8.parseClassField = function(field) { + if (checkKeyName(field, "constructor")) { + this.raise(field.key.start, "Classes can't have a field named 'constructor'"); + } else if (field.static && checkKeyName(field, "prototype")) { + this.raise(field.key.start, "Classes can't have a static field named 'prototype'"); + } + if (this.eat(types$1.eq)) { + var scope = this.currentThisScope(); + var inClassFieldInit = scope.inClassFieldInit; + scope.inClassFieldInit = true; + field.value = this.parseMaybeAssign(); + scope.inClassFieldInit = inClassFieldInit; + } else { + field.value = null; + } + this.semicolon(); + return this.finishNode(field, "PropertyDefinition"); + }; + pp$8.parseClassStaticBlock = function(node) { + node.body = []; + var oldLabels = this.labels; + this.labels = []; + this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER); + while (this.type !== types$1.braceR) { + var stmt = this.parseStatement(null); + node.body.push(stmt); + } + this.next(); + this.exitScope(); + this.labels = oldLabels; + return this.finishNode(node, "StaticBlock"); + }; + pp$8.parseClassId = function(node, isStatement) { + if (this.type === types$1.name) { + node.id = this.parseIdent(); + if (isStatement) { + this.checkLValSimple(node.id, BIND_LEXICAL, false); + } + } else { + if (isStatement === true) { + this.unexpected(); + } + node.id = null; + } + }; + pp$8.parseClassSuper = function(node) { + node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null; + }; + pp$8.enterClassBody = function() { + var element = { declared: /* @__PURE__ */ Object.create(null), used: [] }; + this.privateNameStack.push(element); + return element.declared; + }; + pp$8.exitClassBody = function() { + var ref2 = this.privateNameStack.pop(); + var declared = ref2.declared; + var used = ref2.used; + if (!this.options.checkPrivateFields) { + return; + } + var len = this.privateNameStack.length; + var parent = len === 0 ? null : this.privateNameStack[len - 1]; + for (var i2 = 0; i2 < used.length; ++i2) { + var id = used[i2]; + if (!hasOwn(declared, id.name)) { + if (parent) { + parent.used.push(id); + } else { + this.raiseRecoverable(id.start, "Private field '#" + id.name + "' must be declared in an enclosing class"); + } + } + } + }; + function isPrivateNameConflicted(privateNameMap, element) { + var name = element.key.name; + var curr = privateNameMap[name]; + var next = "true"; + if (element.type === "MethodDefinition" && (element.kind === "get" || element.kind === "set")) { + next = (element.static ? "s" : "i") + element.kind; + } + if (curr === "iget" && next === "iset" || curr === "iset" && next === "iget" || curr === "sget" && next === "sset" || curr === "sset" && next === "sget") { + privateNameMap[name] = "true"; + return false; + } else if (!curr) { + privateNameMap[name] = next; + return false; + } else { + return true; + } + } + function checkKeyName(node, name) { + var computed = node.computed; + var key = node.key; + return !computed && (key.type === "Identifier" && key.name === name || key.type === "Literal" && key.value === name); + } + pp$8.parseExportAllDeclaration = function(node, exports3) { + if (this.options.ecmaVersion >= 11) { + if (this.eatContextual("as")) { + node.exported = this.parseModuleExportName(); + this.checkExport(exports3, node.exported, this.lastTokStart); + } else { + node.exported = null; + } + } + this.expectContextual("from"); + if (this.type !== types$1.string) { + this.unexpected(); + } + node.source = this.parseExprAtom(); + this.semicolon(); + return this.finishNode(node, "ExportAllDeclaration"); + }; + pp$8.parseExport = function(node, exports3) { + this.next(); + if (this.eat(types$1.star)) { + return this.parseExportAllDeclaration(node, exports3); + } + if (this.eat(types$1._default)) { + this.checkExport(exports3, "default", this.lastTokStart); + node.declaration = this.parseExportDefaultDeclaration(); + return this.finishNode(node, "ExportDefaultDeclaration"); + } + if (this.shouldParseExportStatement()) { + node.declaration = this.parseExportDeclaration(node); + if (node.declaration.type === "VariableDeclaration") { + this.checkVariableExport(exports3, node.declaration.declarations); + } else { + this.checkExport(exports3, node.declaration.id, node.declaration.id.start); + } + node.specifiers = []; + node.source = null; + } else { + node.declaration = null; + node.specifiers = this.parseExportSpecifiers(exports3); + if (this.eatContextual("from")) { + if (this.type !== types$1.string) { + this.unexpected(); + } + node.source = this.parseExprAtom(); + } else { + for (var i2 = 0, list2 = node.specifiers; i2 < list2.length; i2 += 1) { + var spec = list2[i2]; + this.checkUnreserved(spec.local); + this.checkLocalExport(spec.local); + if (spec.local.type === "Literal") { + this.raise(spec.local.start, "A string literal cannot be used as an exported binding without `from`."); + } + } + node.source = null; + } + this.semicolon(); + } + return this.finishNode(node, "ExportNamedDeclaration"); + }; + pp$8.parseExportDeclaration = function(node) { + return this.parseStatement(null); + }; + pp$8.parseExportDefaultDeclaration = function() { + var isAsync; + if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) { + var fNode = this.startNode(); + this.next(); + if (isAsync) { + this.next(); + } + return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync); + } else if (this.type === types$1._class) { + var cNode = this.startNode(); + return this.parseClass(cNode, "nullableID"); + } else { + var declaration = this.parseMaybeAssign(); + this.semicolon(); + return declaration; + } + }; + pp$8.checkExport = function(exports3, name, pos) { + if (!exports3) { + return; + } + if (typeof name !== "string") { + name = name.type === "Identifier" ? name.name : name.value; + } + if (hasOwn(exports3, name)) { + this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); + } + exports3[name] = true; + }; + pp$8.checkPatternExport = function(exports3, pat) { + var type = pat.type; + if (type === "Identifier") { + this.checkExport(exports3, pat, pat.start); + } else if (type === "ObjectPattern") { + for (var i2 = 0, list2 = pat.properties; i2 < list2.length; i2 += 1) { + var prop = list2[i2]; + this.checkPatternExport(exports3, prop); + } + } else if (type === "ArrayPattern") { + for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) { + var elt = list$1[i$1]; + if (elt) { + this.checkPatternExport(exports3, elt); + } + } + } else if (type === "Property") { + this.checkPatternExport(exports3, pat.value); + } else if (type === "AssignmentPattern") { + this.checkPatternExport(exports3, pat.left); + } else if (type === "RestElement") { + this.checkPatternExport(exports3, pat.argument); + } else if (type === "ParenthesizedExpression") { + this.checkPatternExport(exports3, pat.expression); + } + }; + pp$8.checkVariableExport = function(exports3, decls) { + if (!exports3) { + return; + } + for (var i2 = 0, list2 = decls; i2 < list2.length; i2 += 1) { + var decl = list2[i2]; + this.checkPatternExport(exports3, decl.id); + } + }; + pp$8.shouldParseExportStatement = function() { + return this.type.keyword === "var" || this.type.keyword === "const" || this.type.keyword === "class" || this.type.keyword === "function" || this.isLet() || this.isAsyncFunction(); + }; + pp$8.parseExportSpecifier = function(exports3) { + var node = this.startNode(); + node.local = this.parseModuleExportName(); + node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local; + this.checkExport(exports3, node.exported, node.exported.start); + return this.finishNode(node, "ExportSpecifier"); + }; + pp$8.parseExportSpecifiers = function(exports3) { + var nodes = [], first = true; + this.expect(types$1.braceL); + while (!this.eat(types$1.braceR)) { + if (!first) { + this.expect(types$1.comma); + if (this.afterTrailingComma(types$1.braceR)) { + break; + } + } else { + first = false; + } + nodes.push(this.parseExportSpecifier(exports3)); + } + return nodes; + }; + pp$8.parseImport = function(node) { + this.next(); + if (this.type === types$1.string) { + node.specifiers = empty$1; + node.source = this.parseExprAtom(); + } else { + node.specifiers = this.parseImportSpecifiers(); + this.expectContextual("from"); + node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected(); + } + this.semicolon(); + return this.finishNode(node, "ImportDeclaration"); + }; + pp$8.parseImportSpecifier = function() { + var node = this.startNode(); + node.imported = this.parseModuleExportName(); + if (this.eatContextual("as")) { + node.local = this.parseIdent(); + } else { + this.checkUnreserved(node.imported); + node.local = node.imported; + } + this.checkLValSimple(node.local, BIND_LEXICAL); + return this.finishNode(node, "ImportSpecifier"); + }; + pp$8.parseImportDefaultSpecifier = function() { + var node = this.startNode(); + node.local = this.parseIdent(); + this.checkLValSimple(node.local, BIND_LEXICAL); + return this.finishNode(node, "ImportDefaultSpecifier"); + }; + pp$8.parseImportNamespaceSpecifier = function() { + var node = this.startNode(); + this.next(); + this.expectContextual("as"); + node.local = this.parseIdent(); + this.checkLValSimple(node.local, BIND_LEXICAL); + return this.finishNode(node, "ImportNamespaceSpecifier"); + }; + pp$8.parseImportSpecifiers = function() { + var nodes = [], first = true; + if (this.type === types$1.name) { + nodes.push(this.parseImportDefaultSpecifier()); + if (!this.eat(types$1.comma)) { + return nodes; + } + } + if (this.type === types$1.star) { + nodes.push(this.parseImportNamespaceSpecifier()); + return nodes; + } + this.expect(types$1.braceL); + while (!this.eat(types$1.braceR)) { + if (!first) { + this.expect(types$1.comma); + if (this.afterTrailingComma(types$1.braceR)) { + break; + } + } else { + first = false; + } + nodes.push(this.parseImportSpecifier()); + } + return nodes; + }; + pp$8.parseModuleExportName = function() { + if (this.options.ecmaVersion >= 13 && this.type === types$1.string) { + var stringLiteral = this.parseLiteral(this.value); + if (loneSurrogate.test(stringLiteral.value)) { + this.raise(stringLiteral.start, "An export name cannot include a lone surrogate."); + } + return stringLiteral; + } + return this.parseIdent(true); + }; + pp$8.adaptDirectivePrologue = function(statements) { + for (var i2 = 0; i2 < statements.length && this.isDirectiveCandidate(statements[i2]); ++i2) { + statements[i2].directive = statements[i2].expression.raw.slice(1, -1); + } + }; + pp$8.isDirectiveCandidate = function(statement) { + return this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && (this.input[statement.start] === '"' || this.input[statement.start] === "'"); + }; + var pp$7 = Parser.prototype; + pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) { + if (this.options.ecmaVersion >= 6 && node) { + switch (node.type) { + case "Identifier": + if (this.inAsync && node.name === "await") { + this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); + } + break; + case "ObjectPattern": + case "ArrayPattern": + case "AssignmentPattern": + case "RestElement": + break; + case "ObjectExpression": + node.type = "ObjectPattern"; + if (refDestructuringErrors) { + this.checkPatternErrors(refDestructuringErrors, true); + } + for (var i2 = 0, list2 = node.properties; i2 < list2.length; i2 += 1) { + var prop = list2[i2]; + this.toAssignable(prop, isBinding); + if (prop.type === "RestElement" && (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")) { + this.raise(prop.argument.start, "Unexpected token"); + } + } + break; + case "Property": + if (node.kind !== "init") { + this.raise(node.key.start, "Object pattern can't contain getter or setter"); + } + this.toAssignable(node.value, isBinding); + break; + case "ArrayExpression": + node.type = "ArrayPattern"; + if (refDestructuringErrors) { + this.checkPatternErrors(refDestructuringErrors, true); + } + this.toAssignableList(node.elements, isBinding); + break; + case "SpreadElement": + node.type = "RestElement"; + this.toAssignable(node.argument, isBinding); + if (node.argument.type === "AssignmentPattern") { + this.raise(node.argument.start, "Rest elements cannot have a default value"); + } + break; + case "AssignmentExpression": + if (node.operator !== "=") { + this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); + } + node.type = "AssignmentPattern"; + delete node.operator; + this.toAssignable(node.left, isBinding); + break; + case "ParenthesizedExpression": + this.toAssignable(node.expression, isBinding, refDestructuringErrors); + break; + case "ChainExpression": + this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side"); + break; + case "MemberExpression": + if (!isBinding) { + break; + } + default: + this.raise(node.start, "Assigning to rvalue"); + } + } else if (refDestructuringErrors) { + this.checkPatternErrors(refDestructuringErrors, true); + } + return node; + }; + pp$7.toAssignableList = function(exprList, isBinding) { + var end = exprList.length; + for (var i2 = 0; i2 < end; i2++) { + var elt = exprList[i2]; + if (elt) { + this.toAssignable(elt, isBinding); + } + } + if (end) { + var last2 = exprList[end - 1]; + if (this.options.ecmaVersion === 6 && isBinding && last2 && last2.type === "RestElement" && last2.argument.type !== "Identifier") { + this.unexpected(last2.argument.start); + } + } + return exprList; + }; + pp$7.parseSpread = function(refDestructuringErrors) { + var node = this.startNode(); + this.next(); + node.argument = this.parseMaybeAssign(false, refDestructuringErrors); + return this.finishNode(node, "SpreadElement"); + }; + pp$7.parseRestBinding = function() { + var node = this.startNode(); + this.next(); + if (this.options.ecmaVersion === 6 && this.type !== types$1.name) { + this.unexpected(); + } + node.argument = this.parseBindingAtom(); + return this.finishNode(node, "RestElement"); + }; + pp$7.parseBindingAtom = function() { + if (this.options.ecmaVersion >= 6) { + switch (this.type) { + case types$1.bracketL: + var node = this.startNode(); + this.next(); + node.elements = this.parseBindingList(types$1.bracketR, true, true); + return this.finishNode(node, "ArrayPattern"); + case types$1.braceL: + return this.parseObj(true); + } + } + return this.parseIdent(); + }; + pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) { + var elts = [], first = true; + while (!this.eat(close)) { + if (first) { + first = false; + } else { + this.expect(types$1.comma); + } + if (allowEmpty && this.type === types$1.comma) { + elts.push(null); + } else if (allowTrailingComma && this.afterTrailingComma(close)) { + break; + } else if (this.type === types$1.ellipsis) { + var rest = this.parseRestBinding(); + this.parseBindingListItem(rest); + elts.push(rest); + if (this.type === types$1.comma) { + this.raiseRecoverable(this.start, "Comma is not permitted after the rest element"); + } + this.expect(close); + break; + } else { + elts.push(this.parseAssignableListItem(allowModifiers)); + } + } + return elts; + }; + pp$7.parseAssignableListItem = function(allowModifiers) { + var elem = this.parseMaybeDefault(this.start, this.startLoc); + this.parseBindingListItem(elem); + return elem; + }; + pp$7.parseBindingListItem = function(param) { + return param; + }; + pp$7.parseMaybeDefault = function(startPos, startLoc, left) { + left = left || this.parseBindingAtom(); + if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { + return left; + } + var node = this.startNodeAt(startPos, startLoc); + node.left = left; + node.right = this.parseMaybeAssign(); + return this.finishNode(node, "AssignmentPattern"); + }; + pp$7.checkLValSimple = function(expr, bindingType, checkClashes) { + if (bindingType === void 0) + bindingType = BIND_NONE; + var isBind = bindingType !== BIND_NONE; + switch (expr.type) { + case "Identifier": + if (this.strict && this.reservedWordsStrictBind.test(expr.name)) { + this.raiseRecoverable(expr.start, (isBind ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); + } + if (isBind) { + if (bindingType === BIND_LEXICAL && expr.name === "let") { + this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); + } + if (checkClashes) { + if (hasOwn(checkClashes, expr.name)) { + this.raiseRecoverable(expr.start, "Argument name clash"); + } + checkClashes[expr.name] = true; + } + if (bindingType !== BIND_OUTSIDE) { + this.declareName(expr.name, bindingType, expr.start); + } + } + break; + case "ChainExpression": + this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side"); + break; + case "MemberExpression": + if (isBind) { + this.raiseRecoverable(expr.start, "Binding member expression"); + } + break; + case "ParenthesizedExpression": + if (isBind) { + this.raiseRecoverable(expr.start, "Binding parenthesized expression"); + } + return this.checkLValSimple(expr.expression, bindingType, checkClashes); + default: + this.raise(expr.start, (isBind ? "Binding" : "Assigning to") + " rvalue"); + } + }; + pp$7.checkLValPattern = function(expr, bindingType, checkClashes) { + if (bindingType === void 0) + bindingType = BIND_NONE; + switch (expr.type) { + case "ObjectPattern": + for (var i2 = 0, list2 = expr.properties; i2 < list2.length; i2 += 1) { + var prop = list2[i2]; + this.checkLValInnerPattern(prop, bindingType, checkClashes); + } + break; + case "ArrayPattern": + for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) { + var elem = list$1[i$1]; + if (elem) { + this.checkLValInnerPattern(elem, bindingType, checkClashes); + } + } + break; + default: + this.checkLValSimple(expr, bindingType, checkClashes); + } + }; + pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) { + if (bindingType === void 0) + bindingType = BIND_NONE; + switch (expr.type) { + case "Property": + this.checkLValInnerPattern(expr.value, bindingType, checkClashes); + break; + case "AssignmentPattern": + this.checkLValPattern(expr.left, bindingType, checkClashes); + break; + case "RestElement": + this.checkLValPattern(expr.argument, bindingType, checkClashes); + break; + default: + this.checkLValPattern(expr, bindingType, checkClashes); + } + }; + var TokContext = function TokContext2(token, isExpr, preserveSpace, override, generator) { + this.token = token; + this.isExpr = !!isExpr; + this.preserveSpace = !!preserveSpace; + this.override = override; + this.generator = !!generator; + }; + var types = { + b_stat: new TokContext("{", false), + b_expr: new TokContext("{", true), + b_tmpl: new TokContext("${", false), + p_stat: new TokContext("(", false), + p_expr: new TokContext("(", true), + q_tmpl: new TokContext("`", true, true, function(p) { + return p.tryReadTemplateToken(); + }), + f_stat: new TokContext("function", false), + f_expr: new TokContext("function", true), + f_expr_gen: new TokContext("function", true, false, null, true), + f_gen: new TokContext("function", false, false, null, true) + }; + var pp$6 = Parser.prototype; + pp$6.initialContext = function() { + return [types.b_stat]; + }; + pp$6.curContext = function() { + return this.context[this.context.length - 1]; + }; + pp$6.braceIsBlock = function(prevType) { + var parent = this.curContext(); + if (parent === types.f_expr || parent === types.f_stat) { + return true; + } + if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr)) { + return !parent.isExpr; + } + if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed) { + return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)); + } + if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow) { + return true; + } + if (prevType === types$1.braceL) { + return parent === types.b_stat; + } + if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name) { + return false; + } + return !this.exprAllowed; + }; + pp$6.inGeneratorContext = function() { + for (var i2 = this.context.length - 1; i2 >= 1; i2--) { + var context = this.context[i2]; + if (context.token === "function") { + return context.generator; + } + } + return false; + }; + pp$6.updateContext = function(prevType) { + var update, type = this.type; + if (type.keyword && prevType === types$1.dot) { + this.exprAllowed = false; + } else if (update = type.updateContext) { + update.call(this, prevType); + } else { + this.exprAllowed = type.beforeExpr; + } + }; + pp$6.overrideContext = function(tokenCtx) { + if (this.curContext() !== tokenCtx) { + this.context[this.context.length - 1] = tokenCtx; + } + }; + types$1.parenR.updateContext = types$1.braceR.updateContext = function() { + if (this.context.length === 1) { + this.exprAllowed = true; + return; + } + var out = this.context.pop(); + if (out === types.b_stat && this.curContext().token === "function") { + out = this.context.pop(); + } + this.exprAllowed = !out.isExpr; + }; + types$1.braceL.updateContext = function(prevType) { + this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr); + this.exprAllowed = true; + }; + types$1.dollarBraceL.updateContext = function() { + this.context.push(types.b_tmpl); + this.exprAllowed = true; + }; + types$1.parenL.updateContext = function(prevType) { + var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while; + this.context.push(statementParens ? types.p_stat : types.p_expr); + this.exprAllowed = true; + }; + types$1.incDec.updateContext = function() { + }; + types$1._function.updateContext = types$1._class.updateContext = function(prevType) { + if (prevType.beforeExpr && prevType !== types$1._else && !(prevType === types$1.semi && this.curContext() !== types.p_stat) && !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat)) { + this.context.push(types.f_expr); + } else { + this.context.push(types.f_stat); + } + this.exprAllowed = false; + }; + types$1.backQuote.updateContext = function() { + if (this.curContext() === types.q_tmpl) { + this.context.pop(); + } else { + this.context.push(types.q_tmpl); + } + this.exprAllowed = false; + }; + types$1.star.updateContext = function(prevType) { + if (prevType === types$1._function) { + var index = this.context.length - 1; + if (this.context[index] === types.f_expr) { + this.context[index] = types.f_expr_gen; + } else { + this.context[index] = types.f_gen; + } + } + this.exprAllowed = true; + }; + types$1.name.updateContext = function(prevType) { + var allowed = false; + if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) { + if (this.value === "of" && !this.exprAllowed || this.value === "yield" && this.inGeneratorContext()) { + allowed = true; + } + } + this.exprAllowed = allowed; + }; + var pp$5 = Parser.prototype; + pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) { + if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement") { + return; + } + if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) { + return; + } + var key = prop.key; + var name; + switch (key.type) { + case "Identifier": + name = key.name; + break; + case "Literal": + name = String(key.value); + break; + default: + return; + } + var kind = prop.kind; + if (this.options.ecmaVersion >= 6) { + if (name === "__proto__" && kind === "init") { + if (propHash.proto) { + if (refDestructuringErrors) { + if (refDestructuringErrors.doubleProto < 0) { + refDestructuringErrors.doubleProto = key.start; + } + } else { + this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); + } + } + propHash.proto = true; + } + return; + } + name = "$" + name; + var other = propHash[name]; + if (other) { + var redefinition; + if (kind === "init") { + redefinition = this.strict && other.init || other.get || other.set; + } else { + redefinition = other.init || other[kind]; + } + if (redefinition) { + this.raiseRecoverable(key.start, "Redefinition of property"); + } + } else { + other = propHash[name] = { + init: false, + get: false, + set: false + }; + } + other[kind] = true; + }; + pp$5.parseExpression = function(forInit, refDestructuringErrors) { + var startPos = this.start, startLoc = this.startLoc; + var expr = this.parseMaybeAssign(forInit, refDestructuringErrors); + if (this.type === types$1.comma) { + var node = this.startNodeAt(startPos, startLoc); + node.expressions = [expr]; + while (this.eat(types$1.comma)) { + node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); + } + return this.finishNode(node, "SequenceExpression"); + } + return expr; + }; + pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) { + if (this.isContextual("yield")) { + if (this.inGenerator) { + return this.parseYield(forInit); + } else { + this.exprAllowed = false; + } + } + var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1; + if (refDestructuringErrors) { + oldParenAssign = refDestructuringErrors.parenthesizedAssign; + oldTrailingComma = refDestructuringErrors.trailingComma; + oldDoubleProto = refDestructuringErrors.doubleProto; + refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1; + } else { + refDestructuringErrors = new DestructuringErrors(); + ownDestructuringErrors = true; + } + var startPos = this.start, startLoc = this.startLoc; + if (this.type === types$1.parenL || this.type === types$1.name) { + this.potentialArrowAt = this.start; + this.potentialArrowInForAwait = forInit === "await"; + } + var left = this.parseMaybeConditional(forInit, refDestructuringErrors); + if (afterLeftParse) { + left = afterLeftParse.call(this, left, startPos, startLoc); + } + if (this.type.isAssign) { + var node = this.startNodeAt(startPos, startLoc); + node.operator = this.value; + if (this.type === types$1.eq) { + left = this.toAssignable(left, false, refDestructuringErrors); + } + if (!ownDestructuringErrors) { + refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1; + } + if (refDestructuringErrors.shorthandAssign >= left.start) { + refDestructuringErrors.shorthandAssign = -1; + } + if (this.type === types$1.eq) { + this.checkLValPattern(left); + } else { + this.checkLValSimple(left); + } + node.left = left; + this.next(); + node.right = this.parseMaybeAssign(forInit); + if (oldDoubleProto > -1) { + refDestructuringErrors.doubleProto = oldDoubleProto; + } + return this.finishNode(node, "AssignmentExpression"); + } else { + if (ownDestructuringErrors) { + this.checkExpressionErrors(refDestructuringErrors, true); + } + } + if (oldParenAssign > -1) { + refDestructuringErrors.parenthesizedAssign = oldParenAssign; + } + if (oldTrailingComma > -1) { + refDestructuringErrors.trailingComma = oldTrailingComma; + } + return left; + }; + pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) { + var startPos = this.start, startLoc = this.startLoc; + var expr = this.parseExprOps(forInit, refDestructuringErrors); + if (this.checkExpressionErrors(refDestructuringErrors)) { + return expr; + } + if (this.eat(types$1.question)) { + var node = this.startNodeAt(startPos, startLoc); + node.test = expr; + node.consequent = this.parseMaybeAssign(); + this.expect(types$1.colon); + node.alternate = this.parseMaybeAssign(forInit); + return this.finishNode(node, "ConditionalExpression"); + } + return expr; + }; + pp$5.parseExprOps = function(forInit, refDestructuringErrors) { + var startPos = this.start, startLoc = this.startLoc; + var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit); + if (this.checkExpressionErrors(refDestructuringErrors)) { + return expr; + } + return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit); + }; + pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) { + var prec = this.type.binop; + if (prec != null && (!forInit || this.type !== types$1._in)) { + if (prec > minPrec) { + var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND; + var coalesce = this.type === types$1.coalesce; + if (coalesce) { + prec = types$1.logicalAND.binop; + } + var op = this.value; + this.next(); + var startPos = this.start, startLoc = this.startLoc; + var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit); + var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce); + if (logical && this.type === types$1.coalesce || coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND)) { + this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses"); + } + return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit); + } + } + return left; + }; + pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) { + if (right.type === "PrivateIdentifier") { + this.raise(right.start, "Private identifier can only be left side of binary expression"); + } + var node = this.startNodeAt(startPos, startLoc); + node.left = left; + node.operator = op; + node.right = right; + return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression"); + }; + pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) { + var startPos = this.start, startLoc = this.startLoc, expr; + if (this.isContextual("await") && this.canAwait) { + expr = this.parseAwait(forInit); + sawUnary = true; + } else if (this.type.prefix) { + var node = this.startNode(), update = this.type === types$1.incDec; + node.operator = this.value; + node.prefix = true; + this.next(); + node.argument = this.parseMaybeUnary(null, true, update, forInit); + this.checkExpressionErrors(refDestructuringErrors, true); + if (update) { + this.checkLValSimple(node.argument); + } else if (this.strict && node.operator === "delete" && node.argument.type === "Identifier") { + this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); + } else if (node.operator === "delete" && isPrivateFieldAccess(node.argument)) { + this.raiseRecoverable(node.start, "Private fields can not be deleted"); + } else { + sawUnary = true; + } + expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression"); + } else if (!sawUnary && this.type === types$1.privateId) { + if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { + this.unexpected(); + } + expr = this.parsePrivateIdent(); + if (this.type !== types$1._in) { + this.unexpected(); + } + } else { + expr = this.parseExprSubscripts(refDestructuringErrors, forInit); + if (this.checkExpressionErrors(refDestructuringErrors)) { + return expr; + } + while (this.type.postfix && !this.canInsertSemicolon()) { + var node$1 = this.startNodeAt(startPos, startLoc); + node$1.operator = this.value; + node$1.prefix = false; + node$1.argument = expr; + this.checkLValSimple(expr); + this.next(); + expr = this.finishNode(node$1, "UpdateExpression"); + } + } + if (!incDec && this.eat(types$1.starstar)) { + if (sawUnary) { + this.unexpected(this.lastTokStart); + } else { + return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), "**", false); + } + } else { + return expr; + } + }; + function isPrivateFieldAccess(node) { + return node.type === "MemberExpression" && node.property.type === "PrivateIdentifier" || node.type === "ChainExpression" && isPrivateFieldAccess(node.expression); + } + pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) { + var startPos = this.start, startLoc = this.startLoc; + var expr = this.parseExprAtom(refDestructuringErrors, forInit); + if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")") { + return expr; + } + var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit); + if (refDestructuringErrors && result.type === "MemberExpression") { + if (refDestructuringErrors.parenthesizedAssign >= result.start) { + refDestructuringErrors.parenthesizedAssign = -1; + } + if (refDestructuringErrors.parenthesizedBind >= result.start) { + refDestructuringErrors.parenthesizedBind = -1; + } + if (refDestructuringErrors.trailingComma >= result.start) { + refDestructuringErrors.trailingComma = -1; + } + } + return result; + }; + pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) { + var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start; + var optionalChained = false; + while (true) { + var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit); + if (element.optional) { + optionalChained = true; + } + if (element === base || element.type === "ArrowFunctionExpression") { + if (optionalChained) { + var chainNode = this.startNodeAt(startPos, startLoc); + chainNode.expression = element; + element = this.finishNode(chainNode, "ChainExpression"); + } + return element; + } + base = element; + } + }; + pp$5.shouldParseAsyncArrow = function() { + return !this.canInsertSemicolon() && this.eat(types$1.arrow); + }; + pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) { + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit); + }; + pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) { + var optionalSupported = this.options.ecmaVersion >= 11; + var optional = optionalSupported && this.eat(types$1.questionDot); + if (noCalls && optional) { + this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions"); + } + var computed = this.eat(types$1.bracketL); + if (computed || optional && this.type !== types$1.parenL && this.type !== types$1.backQuote || this.eat(types$1.dot)) { + var node = this.startNodeAt(startPos, startLoc); + node.object = base; + if (computed) { + node.property = this.parseExpression(); + this.expect(types$1.bracketR); + } else if (this.type === types$1.privateId && base.type !== "Super") { + node.property = this.parsePrivateIdent(); + } else { + node.property = this.parseIdent(this.options.allowReserved !== "never"); + } + node.computed = !!computed; + if (optionalSupported) { + node.optional = optional; + } + base = this.finishNode(node, "MemberExpression"); + } else if (!noCalls && this.eat(types$1.parenL)) { + var refDestructuringErrors = new DestructuringErrors(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors); + if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) { + this.checkPatternErrors(refDestructuringErrors, false); + this.checkYieldAwaitInDefaultParams(); + if (this.awaitIdentPos > 0) { + this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); + } + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit); + } + this.checkExpressionErrors(refDestructuringErrors, true); + this.yieldPos = oldYieldPos || this.yieldPos; + this.awaitPos = oldAwaitPos || this.awaitPos; + this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos; + var node$1 = this.startNodeAt(startPos, startLoc); + node$1.callee = base; + node$1.arguments = exprList; + if (optionalSupported) { + node$1.optional = optional; + } + base = this.finishNode(node$1, "CallExpression"); + } else if (this.type === types$1.backQuote) { + if (optional || optionalChained) { + this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions"); + } + var node$2 = this.startNodeAt(startPos, startLoc); + node$2.tag = base; + node$2.quasi = this.parseTemplate({ isTagged: true }); + base = this.finishNode(node$2, "TaggedTemplateExpression"); + } + return base; + }; + pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) { + if (this.type === types$1.slash) { + this.readRegexp(); + } + var node, canBeArrow = this.potentialArrowAt === this.start; + switch (this.type) { + case types$1._super: + if (!this.allowSuper) { + this.raise(this.start, "'super' keyword outside a method"); + } + node = this.startNode(); + this.next(); + if (this.type === types$1.parenL && !this.allowDirectSuper) { + this.raise(node.start, "super() call outside constructor of a subclass"); + } + if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL) { + this.unexpected(); + } + return this.finishNode(node, "Super"); + case types$1._this: + node = this.startNode(); + this.next(); + return this.finishNode(node, "ThisExpression"); + case types$1.name: + var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc; + var id = this.parseIdent(false); + if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types$1._function)) { + this.overrideContext(types.f_expr); + return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit); + } + if (canBeArrow && !this.canInsertSemicolon()) { + if (this.eat(types$1.arrow)) { + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit); + } + if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types$1.name && !containsEsc && (!this.potentialArrowInForAwait || this.value !== "of" || this.containsEsc)) { + id = this.parseIdent(false); + if (this.canInsertSemicolon() || !this.eat(types$1.arrow)) { + this.unexpected(); + } + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit); + } + } + return id; + case types$1.regexp: + var value = this.value; + node = this.parseLiteral(value.value); + node.regex = { pattern: value.pattern, flags: value.flags }; + return node; + case types$1.num: + case types$1.string: + return this.parseLiteral(this.value); + case types$1._null: + case types$1._true: + case types$1._false: + node = this.startNode(); + node.value = this.type === types$1._null ? null : this.type === types$1._true; + node.raw = this.type.keyword; + this.next(); + return this.finishNode(node, "Literal"); + case types$1.parenL: + var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit); + if (refDestructuringErrors) { + if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) { + refDestructuringErrors.parenthesizedAssign = start; + } + if (refDestructuringErrors.parenthesizedBind < 0) { + refDestructuringErrors.parenthesizedBind = start; + } + } + return expr; + case types$1.bracketL: + node = this.startNode(); + this.next(); + node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors); + return this.finishNode(node, "ArrayExpression"); + case types$1.braceL: + this.overrideContext(types.b_expr); + return this.parseObj(false, refDestructuringErrors); + case types$1._function: + node = this.startNode(); + this.next(); + return this.parseFunction(node, 0); + case types$1._class: + return this.parseClass(this.startNode(), false); + case types$1._new: + return this.parseNew(); + case types$1.backQuote: + return this.parseTemplate(); + case types$1._import: + if (this.options.ecmaVersion >= 11) { + return this.parseExprImport(forNew); + } else { + return this.unexpected(); + } + default: + return this.parseExprAtomDefault(); + } + }; + pp$5.parseExprAtomDefault = function() { + this.unexpected(); + }; + pp$5.parseExprImport = function(forNew) { + var node = this.startNode(); + if (this.containsEsc) { + this.raiseRecoverable(this.start, "Escape sequence in keyword import"); + } + var meta = this.parseIdent(true); + if (this.type === types$1.parenL && !forNew) { + return this.parseDynamicImport(node); + } else if (this.type === types$1.dot) { + node.meta = meta; + return this.parseImportMeta(node); + } else { + this.unexpected(); + } + }; + pp$5.parseDynamicImport = function(node) { + this.next(); + node.source = this.parseMaybeAssign(); + if (!this.eat(types$1.parenR)) { + var errorPos = this.start; + if (this.eat(types$1.comma) && this.eat(types$1.parenR)) { + this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()"); + } else { + this.unexpected(errorPos); + } + } + return this.finishNode(node, "ImportExpression"); + }; + pp$5.parseImportMeta = function(node) { + this.next(); + var containsEsc = this.containsEsc; + node.property = this.parseIdent(true); + if (node.property.name !== "meta") { + this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'"); + } + if (containsEsc) { + this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters"); + } + if (this.options.sourceType !== "module" && !this.options.allowImportExportEverywhere) { + this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module"); + } + return this.finishNode(node, "MetaProperty"); + }; + pp$5.parseLiteral = function(value) { + var node = this.startNode(); + node.value = value; + node.raw = this.input.slice(this.start, this.end); + if (node.raw.charCodeAt(node.raw.length - 1) === 110) { + node.bigint = node.raw.slice(0, -1).replace(/_/g, ""); + } + this.next(); + return this.finishNode(node, "Literal"); + }; + pp$5.parseParenExpression = function() { + this.expect(types$1.parenL); + var val = this.parseExpression(); + this.expect(types$1.parenR); + return val; + }; + pp$5.shouldParseArrow = function(exprList) { + return !this.canInsertSemicolon(); + }; + pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) { + var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8; + if (this.options.ecmaVersion >= 6) { + this.next(); + var innerStartPos = this.start, innerStartLoc = this.startLoc; + var exprList = [], first = true, lastIsComma = false; + var refDestructuringErrors = new DestructuringErrors(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart; + this.yieldPos = 0; + this.awaitPos = 0; + while (this.type !== types$1.parenR) { + first ? first = false : this.expect(types$1.comma); + if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) { + lastIsComma = true; + break; + } else if (this.type === types$1.ellipsis) { + spreadStart = this.start; + exprList.push(this.parseParenItem(this.parseRestBinding())); + if (this.type === types$1.comma) { + this.raiseRecoverable(this.start, "Comma is not permitted after the rest element"); + } + break; + } else { + exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem)); + } + } + var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc; + this.expect(types$1.parenR); + if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) { + this.checkPatternErrors(refDestructuringErrors, false); + this.checkYieldAwaitInDefaultParams(); + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + return this.parseParenArrowList(startPos, startLoc, exprList, forInit); + } + if (!exprList.length || lastIsComma) { + this.unexpected(this.lastTokStart); + } + if (spreadStart) { + this.unexpected(spreadStart); + } + this.checkExpressionErrors(refDestructuringErrors, true); + this.yieldPos = oldYieldPos || this.yieldPos; + this.awaitPos = oldAwaitPos || this.awaitPos; + if (exprList.length > 1) { + val = this.startNodeAt(innerStartPos, innerStartLoc); + val.expressions = exprList; + this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc); + } else { + val = exprList[0]; + } + } else { + val = this.parseParenExpression(); + } + if (this.options.preserveParens) { + var par = this.startNodeAt(startPos, startLoc); + par.expression = val; + return this.finishNode(par, "ParenthesizedExpression"); + } else { + return val; + } + }; + pp$5.parseParenItem = function(item) { + return item; + }; + pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) { + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit); + }; + var empty = []; + pp$5.parseNew = function() { + if (this.containsEsc) { + this.raiseRecoverable(this.start, "Escape sequence in keyword new"); + } + var node = this.startNode(); + var meta = this.parseIdent(true); + if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) { + node.meta = meta; + var containsEsc = this.containsEsc; + node.property = this.parseIdent(true); + if (node.property.name !== "target") { + this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'"); + } + if (containsEsc) { + this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters"); + } + if (!this.allowNewDotTarget) { + this.raiseRecoverable(node.start, "'new.target' can only be used in functions and class static block"); + } + return this.finishNode(node, "MetaProperty"); + } + var startPos = this.start, startLoc = this.startLoc; + node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false); + if (this.eat(types$1.parenL)) { + node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); + } else { + node.arguments = empty; + } + return this.finishNode(node, "NewExpression"); + }; + pp$5.parseTemplateElement = function(ref2) { + var isTagged = ref2.isTagged; + var elem = this.startNode(); + if (this.type === types$1.invalidTemplate) { + if (!isTagged) { + this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal"); + } + elem.value = { + raw: this.value, + cooked: null + }; + } else { + elem.value = { + raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"), + cooked: this.value + }; + } + this.next(); + elem.tail = this.type === types$1.backQuote; + return this.finishNode(elem, "TemplateElement"); + }; + pp$5.parseTemplate = function(ref2) { + if (ref2 === void 0) + ref2 = {}; + var isTagged = ref2.isTagged; + if (isTagged === void 0) + isTagged = false; + var node = this.startNode(); + this.next(); + node.expressions = []; + var curElt = this.parseTemplateElement({ isTagged }); + node.quasis = [curElt]; + while (!curElt.tail) { + if (this.type === types$1.eof) { + this.raise(this.pos, "Unterminated template literal"); + } + this.expect(types$1.dollarBraceL); + node.expressions.push(this.parseExpression()); + this.expect(types$1.braceR); + node.quasis.push(curElt = this.parseTemplateElement({ isTagged })); + } + this.next(); + return this.finishNode(node, "TemplateLiteral"); + }; + pp$5.isAsyncProp = function(prop) { + return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" && (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === types$1.star) && !lineBreak.test(this.input.slice(this.lastTokEnd, this.start)); + }; + pp$5.parseObj = function(isPattern, refDestructuringErrors) { + var node = this.startNode(), first = true, propHash = {}; + node.properties = []; + this.next(); + while (!this.eat(types$1.braceR)) { + if (!first) { + this.expect(types$1.comma); + if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { + break; + } + } else { + first = false; + } + var prop = this.parseProperty(isPattern, refDestructuringErrors); + if (!isPattern) { + this.checkPropClash(prop, propHash, refDestructuringErrors); + } + node.properties.push(prop); + } + return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression"); + }; + pp$5.parseProperty = function(isPattern, refDestructuringErrors) { + var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc; + if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) { + if (isPattern) { + prop.argument = this.parseIdent(false); + if (this.type === types$1.comma) { + this.raiseRecoverable(this.start, "Comma is not permitted after the rest element"); + } + return this.finishNode(prop, "RestElement"); + } + prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); + if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) { + refDestructuringErrors.trailingComma = this.start; + } + return this.finishNode(prop, "SpreadElement"); + } + if (this.options.ecmaVersion >= 6) { + prop.method = false; + prop.shorthand = false; + if (isPattern || refDestructuringErrors) { + startPos = this.start; + startLoc = this.startLoc; + } + if (!isPattern) { + isGenerator = this.eat(types$1.star); + } + } + var containsEsc = this.containsEsc; + this.parsePropertyName(prop); + if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) { + isAsync = true; + isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star); + this.parsePropertyName(prop); + } else { + isAsync = false; + } + this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc); + return this.finishNode(prop, "Property"); + }; + pp$5.parseGetterSetter = function(prop) { + prop.kind = prop.key.name; + this.parsePropertyName(prop); + prop.value = this.parseMethod(false); + var paramCount = prop.kind === "get" ? 0 : 1; + if (prop.value.params.length !== paramCount) { + var start = prop.value.start; + if (prop.kind === "get") { + this.raiseRecoverable(start, "getter should have no params"); + } else { + this.raiseRecoverable(start, "setter should have exactly one param"); + } + } else { + if (prop.kind === "set" && prop.value.params[0].type === "RestElement") { + this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); + } + } + }; + pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) { + if ((isGenerator || isAsync) && this.type === types$1.colon) { + this.unexpected(); + } + if (this.eat(types$1.colon)) { + prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors); + prop.kind = "init"; + } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) { + if (isPattern) { + this.unexpected(); + } + prop.kind = "init"; + prop.method = true; + prop.value = this.parseMethod(isGenerator, isAsync); + } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) { + if (isGenerator || isAsync) { + this.unexpected(); + } + this.parseGetterSetter(prop); + } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { + if (isGenerator || isAsync) { + this.unexpected(); + } + this.checkUnreserved(prop.key); + if (prop.key.name === "await" && !this.awaitIdentPos) { + this.awaitIdentPos = startPos; + } + prop.kind = "init"; + if (isPattern) { + prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key)); + } else if (this.type === types$1.eq && refDestructuringErrors) { + if (refDestructuringErrors.shorthandAssign < 0) { + refDestructuringErrors.shorthandAssign = this.start; + } + prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key)); + } else { + prop.value = this.copyNode(prop.key); + } + prop.shorthand = true; + } else { + this.unexpected(); + } + }; + pp$5.parsePropertyName = function(prop) { + if (this.options.ecmaVersion >= 6) { + if (this.eat(types$1.bracketL)) { + prop.computed = true; + prop.key = this.parseMaybeAssign(); + this.expect(types$1.bracketR); + return prop.key; + } else { + prop.computed = false; + } + } + return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never"); + }; + pp$5.initFunction = function(node) { + node.id = null; + if (this.options.ecmaVersion >= 6) { + node.generator = node.expression = false; + } + if (this.options.ecmaVersion >= 8) { + node.async = false; + } + }; + pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) { + var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.initFunction(node); + if (this.options.ecmaVersion >= 6) { + node.generator = isGenerator; + } + if (this.options.ecmaVersion >= 8) { + node.async = !!isAsync; + } + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)); + this.expect(types$1.parenL); + node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8); + this.checkYieldAwaitInDefaultParams(); + this.parseFunctionBody(node, false, true, false); + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, "FunctionExpression"); + }; + pp$5.parseArrowExpression = function(node, params, isAsync, forInit) { + var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW); + this.initFunction(node); + if (this.options.ecmaVersion >= 8) { + node.async = !!isAsync; + } + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + node.params = this.toAssignableList(params, true); + this.parseFunctionBody(node, true, false, forInit); + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, "ArrowFunctionExpression"); + }; + pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) { + var isExpression = isArrowFunction && this.type !== types$1.braceL; + var oldStrict = this.strict, useStrict = false; + if (isExpression) { + node.body = this.parseMaybeAssign(forInit); + node.expression = true; + this.checkParams(node, false); + } else { + var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params); + if (!oldStrict || nonSimple) { + useStrict = this.strictDirective(this.end); + if (useStrict && nonSimple) { + this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); + } + } + var oldLabels = this.labels; + this.labels = []; + if (useStrict) { + this.strict = true; + } + this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params)); + if (this.strict && node.id) { + this.checkLValSimple(node.id, BIND_OUTSIDE); + } + node.body = this.parseBlock(false, void 0, useStrict && !oldStrict); + node.expression = false; + this.adaptDirectivePrologue(node.body.body); + this.labels = oldLabels; + } + this.exitScope(); + }; + pp$5.isSimpleParamList = function(params) { + for (var i2 = 0, list2 = params; i2 < list2.length; i2 += 1) { + var param = list2[i2]; + if (param.type !== "Identifier") { + return false; + } + } + return true; + }; + pp$5.checkParams = function(node, allowDuplicates) { + var nameHash = /* @__PURE__ */ Object.create(null); + for (var i2 = 0, list2 = node.params; i2 < list2.length; i2 += 1) { + var param = list2[i2]; + this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash); + } + }; + pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) { + var elts = [], first = true; + while (!this.eat(close)) { + if (!first) { + this.expect(types$1.comma); + if (allowTrailingComma && this.afterTrailingComma(close)) { + break; + } + } else { + first = false; + } + var elt = void 0; + if (allowEmpty && this.type === types$1.comma) { + elt = null; + } else if (this.type === types$1.ellipsis) { + elt = this.parseSpread(refDestructuringErrors); + if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0) { + refDestructuringErrors.trailingComma = this.start; + } + } else { + elt = this.parseMaybeAssign(false, refDestructuringErrors); + } + elts.push(elt); + } + return elts; + }; + pp$5.checkUnreserved = function(ref2) { + var start = ref2.start; + var end = ref2.end; + var name = ref2.name; + if (this.inGenerator && name === "yield") { + this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); + } + if (this.inAsync && name === "await") { + this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); + } + if (this.currentThisScope().inClassFieldInit && name === "arguments") { + this.raiseRecoverable(start, "Cannot use 'arguments' in class field initializer"); + } + if (this.inClassStaticBlock && (name === "arguments" || name === "await")) { + this.raise(start, "Cannot use " + name + " in class static initialization block"); + } + if (this.keywords.test(name)) { + this.raise(start, "Unexpected keyword '" + name + "'"); + } + if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf("\\") !== -1) { + return; + } + var re = this.strict ? this.reservedWordsStrict : this.reservedWords; + if (re.test(name)) { + if (!this.inAsync && name === "await") { + this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); + } + this.raiseRecoverable(start, "The keyword '" + name + "' is reserved"); + } + }; + pp$5.parseIdent = function(liberal) { + var node = this.parseIdentNode(); + this.next(!!liberal); + this.finishNode(node, "Identifier"); + if (!liberal) { + this.checkUnreserved(node); + if (node.name === "await" && !this.awaitIdentPos) { + this.awaitIdentPos = node.start; + } + } + return node; + }; + pp$5.parseIdentNode = function() { + var node = this.startNode(); + if (this.type === types$1.name) { + node.name = this.value; + } else if (this.type.keyword) { + node.name = this.type.keyword; + if ((node.name === "class" || node.name === "function") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) { + this.context.pop(); + } + } else { + this.unexpected(); + } + return node; + }; + pp$5.parsePrivateIdent = function() { + var node = this.startNode(); + if (this.type === types$1.privateId) { + node.name = this.value; + } else { + this.unexpected(); + } + this.next(); + this.finishNode(node, "PrivateIdentifier"); + if (this.options.checkPrivateFields) { + if (this.privateNameStack.length === 0) { + this.raise(node.start, "Private field '#" + node.name + "' must be declared in an enclosing class"); + } else { + this.privateNameStack[this.privateNameStack.length - 1].used.push(node); + } + } + return node; + }; + pp$5.parseYield = function(forInit) { + if (!this.yieldPos) { + this.yieldPos = this.start; + } + var node = this.startNode(); + this.next(); + if (this.type === types$1.semi || this.canInsertSemicolon() || this.type !== types$1.star && !this.type.startsExpr) { + node.delegate = false; + node.argument = null; + } else { + node.delegate = this.eat(types$1.star); + node.argument = this.parseMaybeAssign(forInit); + } + return this.finishNode(node, "YieldExpression"); + }; + pp$5.parseAwait = function(forInit) { + if (!this.awaitPos) { + this.awaitPos = this.start; + } + var node = this.startNode(); + this.next(); + node.argument = this.parseMaybeUnary(null, true, false, forInit); + return this.finishNode(node, "AwaitExpression"); + }; + var pp$4 = Parser.prototype; + pp$4.raise = function(pos, message) { + var loc = getLineInfo(this.input, pos); + message += " (" + loc.line + ":" + loc.column + ")"; + var err = new SyntaxError(message); + err.pos = pos; + err.loc = loc; + err.raisedAt = this.pos; + throw err; + }; + pp$4.raiseRecoverable = pp$4.raise; + pp$4.curPosition = function() { + if (this.options.locations) { + return new Position(this.curLine, this.pos - this.lineStart); + } + }; + var pp$3 = Parser.prototype; + var Scope = function Scope2(flags) { + this.flags = flags; + this.var = []; + this.lexical = []; + this.functions = []; + this.inClassFieldInit = false; + }; + pp$3.enterScope = function(flags) { + this.scopeStack.push(new Scope(flags)); + }; + pp$3.exitScope = function() { + this.scopeStack.pop(); + }; + pp$3.treatFunctionsAsVarInScope = function(scope) { + return scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_TOP; + }; + pp$3.declareName = function(name, bindingType, pos) { + var redeclared = false; + if (bindingType === BIND_LEXICAL) { + var scope = this.currentScope(); + redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1; + scope.lexical.push(name); + if (this.inModule && scope.flags & SCOPE_TOP) { + delete this.undefinedExports[name]; + } + } else if (bindingType === BIND_SIMPLE_CATCH) { + var scope$1 = this.currentScope(); + scope$1.lexical.push(name); + } else if (bindingType === BIND_FUNCTION) { + var scope$2 = this.currentScope(); + if (this.treatFunctionsAsVar) { + redeclared = scope$2.lexical.indexOf(name) > -1; + } else { + redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; + } + scope$2.functions.push(name); + } else { + for (var i2 = this.scopeStack.length - 1; i2 >= 0; --i2) { + var scope$3 = this.scopeStack[i2]; + if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & SCOPE_SIMPLE_CATCH && scope$3.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) { + redeclared = true; + break; + } + scope$3.var.push(name); + if (this.inModule && scope$3.flags & SCOPE_TOP) { + delete this.undefinedExports[name]; + } + if (scope$3.flags & SCOPE_VAR) { + break; + } + } + } + if (redeclared) { + this.raiseRecoverable(pos, "Identifier '" + name + "' has already been declared"); + } + }; + pp$3.checkLocalExport = function(id) { + if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1) { + this.undefinedExports[id.name] = id; + } + }; + pp$3.currentScope = function() { + return this.scopeStack[this.scopeStack.length - 1]; + }; + pp$3.currentVarScope = function() { + for (var i2 = this.scopeStack.length - 1; ; i2--) { + var scope = this.scopeStack[i2]; + if (scope.flags & SCOPE_VAR) { + return scope; + } + } + }; + pp$3.currentThisScope = function() { + for (var i2 = this.scopeStack.length - 1; ; i2--) { + var scope = this.scopeStack[i2]; + if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { + return scope; + } + } + }; + var Node2 = function Node3(parser, pos, loc) { + this.type = ""; + this.start = pos; + this.end = 0; + if (parser.options.locations) { + this.loc = new SourceLocation(parser, loc); + } + if (parser.options.directSourceFile) { + this.sourceFile = parser.options.directSourceFile; + } + if (parser.options.ranges) { + this.range = [pos, 0]; + } + }; + var pp$2 = Parser.prototype; + pp$2.startNode = function() { + return new Node2(this, this.start, this.startLoc); + }; + pp$2.startNodeAt = function(pos, loc) { + return new Node2(this, pos, loc); + }; + function finishNodeAt(node, type, pos, loc) { + node.type = type; + node.end = pos; + if (this.options.locations) { + node.loc.end = loc; + } + if (this.options.ranges) { + node.range[1] = pos; + } + return node; + } + pp$2.finishNode = function(node, type) { + return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc); + }; + pp$2.finishNodeAt = function(node, type, pos, loc) { + return finishNodeAt.call(this, node, type, pos, loc); + }; + pp$2.copyNode = function(node) { + var newNode = new Node2(this, node.start, this.startLoc); + for (var prop in node) { + newNode[prop] = node[prop]; + } + return newNode; + }; + var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS"; + var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic"; + var ecma11BinaryProperties = ecma10BinaryProperties; + var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict"; + var ecma13BinaryProperties = ecma12BinaryProperties; + var ecma14BinaryProperties = ecma13BinaryProperties; + var unicodeBinaryProperties = { + 9: ecma9BinaryProperties, + 10: ecma10BinaryProperties, + 11: ecma11BinaryProperties, + 12: ecma12BinaryProperties, + 13: ecma13BinaryProperties, + 14: ecma14BinaryProperties + }; + var ecma14BinaryPropertiesOfStrings = "Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji"; + var unicodeBinaryPropertiesOfStrings = { + 9: "", + 10: "", + 11: "", + 12: "", + 13: "", + 14: ecma14BinaryPropertiesOfStrings + }; + var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu"; + var ecma9ScriptValues = "Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; + var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd"; + var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho"; + var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi"; + var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith"; + var ecma14ScriptValues = ecma13ScriptValues + " Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz"; + var unicodeScriptValues = { + 9: ecma9ScriptValues, + 10: ecma10ScriptValues, + 11: ecma11ScriptValues, + 12: ecma12ScriptValues, + 13: ecma13ScriptValues, + 14: ecma14ScriptValues + }; + var data = {}; + function buildUnicodeData(ecmaVersion2) { + var d = data[ecmaVersion2] = { + binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion2] + " " + unicodeGeneralCategoryValues), + binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion2]), + nonBinary: { + General_Category: wordsRegexp(unicodeGeneralCategoryValues), + Script: wordsRegexp(unicodeScriptValues[ecmaVersion2]) + } + }; + d.nonBinary.Script_Extensions = d.nonBinary.Script; + d.nonBinary.gc = d.nonBinary.General_Category; + d.nonBinary.sc = d.nonBinary.Script; + d.nonBinary.scx = d.nonBinary.Script_Extensions; + } + for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) { + var ecmaVersion = list[i]; + buildUnicodeData(ecmaVersion); + } + var pp$1 = Parser.prototype; + var RegExpValidationState = function RegExpValidationState2(parser) { + this.parser = parser; + this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "") + (parser.options.ecmaVersion >= 15 ? "v" : ""); + this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion]; + this.source = ""; + this.flags = ""; + this.start = 0; + this.switchU = false; + this.switchV = false; + this.switchN = false; + this.pos = 0; + this.lastIntValue = 0; + this.lastStringValue = ""; + this.lastAssertionIsQuantifiable = false; + this.numCapturingParens = 0; + this.maxBackReference = 0; + this.groupNames = []; + this.backReferenceNames = []; + }; + RegExpValidationState.prototype.reset = function reset(start, pattern, flags) { + var unicodeSets = flags.indexOf("v") !== -1; + var unicode = flags.indexOf("u") !== -1; + this.start = start | 0; + this.source = pattern + ""; + this.flags = flags; + if (unicodeSets && this.parser.options.ecmaVersion >= 15) { + this.switchU = true; + this.switchV = true; + this.switchN = true; + } else { + this.switchU = unicode && this.parser.options.ecmaVersion >= 6; + this.switchV = false; + this.switchN = unicode && this.parser.options.ecmaVersion >= 9; + } + }; + RegExpValidationState.prototype.raise = function raise(message) { + this.parser.raiseRecoverable(this.start, "Invalid regular expression: /" + this.source + "/: " + message); + }; + RegExpValidationState.prototype.at = function at(i2, forceU) { + if (forceU === void 0) + forceU = false; + var s = this.source; + var l = s.length; + if (i2 >= l) { + return -1; + } + var c = s.charCodeAt(i2); + if (!(forceU || this.switchU) || c <= 55295 || c >= 57344 || i2 + 1 >= l) { + return c; + } + var next = s.charCodeAt(i2 + 1); + return next >= 56320 && next <= 57343 ? (c << 10) + next - 56613888 : c; + }; + RegExpValidationState.prototype.nextIndex = function nextIndex(i2, forceU) { + if (forceU === void 0) + forceU = false; + var s = this.source; + var l = s.length; + if (i2 >= l) { + return l; + } + var c = s.charCodeAt(i2), next; + if (!(forceU || this.switchU) || c <= 55295 || c >= 57344 || i2 + 1 >= l || (next = s.charCodeAt(i2 + 1)) < 56320 || next > 57343) { + return i2 + 1; + } + return i2 + 2; + }; + RegExpValidationState.prototype.current = function current(forceU) { + if (forceU === void 0) + forceU = false; + return this.at(this.pos, forceU); + }; + RegExpValidationState.prototype.lookahead = function lookahead(forceU) { + if (forceU === void 0) + forceU = false; + return this.at(this.nextIndex(this.pos, forceU), forceU); + }; + RegExpValidationState.prototype.advance = function advance(forceU) { + if (forceU === void 0) + forceU = false; + this.pos = this.nextIndex(this.pos, forceU); + }; + RegExpValidationState.prototype.eat = function eat(ch, forceU) { + if (forceU === void 0) + forceU = false; + if (this.current(forceU) === ch) { + this.advance(forceU); + return true; + } + return false; + }; + RegExpValidationState.prototype.eatChars = function eatChars(chs, forceU) { + if (forceU === void 0) + forceU = false; + var pos = this.pos; + for (var i2 = 0, list2 = chs; i2 < list2.length; i2 += 1) { + var ch = list2[i2]; + var current = this.at(pos, forceU); + if (current === -1 || current !== ch) { + return false; + } + pos = this.nextIndex(pos, forceU); + } + this.pos = pos; + return true; + }; + pp$1.validateRegExpFlags = function(state) { + var validFlags = state.validFlags; + var flags = state.flags; + var u = false; + var v = false; + for (var i2 = 0; i2 < flags.length; i2++) { + var flag = flags.charAt(i2); + if (validFlags.indexOf(flag) === -1) { + this.raise(state.start, "Invalid regular expression flag"); + } + if (flags.indexOf(flag, i2 + 1) > -1) { + this.raise(state.start, "Duplicate regular expression flag"); + } + if (flag === "u") { + u = true; + } + if (flag === "v") { + v = true; + } + } + if (this.options.ecmaVersion >= 15 && u && v) { + this.raise(state.start, "Invalid regular expression flag"); + } + }; + pp$1.validateRegExpPattern = function(state) { + this.regexp_pattern(state); + if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) { + state.switchN = true; + this.regexp_pattern(state); + } + }; + pp$1.regexp_pattern = function(state) { + state.pos = 0; + state.lastIntValue = 0; + state.lastStringValue = ""; + state.lastAssertionIsQuantifiable = false; + state.numCapturingParens = 0; + state.maxBackReference = 0; + state.groupNames.length = 0; + state.backReferenceNames.length = 0; + this.regexp_disjunction(state); + if (state.pos !== state.source.length) { + if (state.eat(41)) { + state.raise("Unmatched ')'"); + } + if (state.eat(93) || state.eat(125)) { + state.raise("Lone quantifier brackets"); + } + } + if (state.maxBackReference > state.numCapturingParens) { + state.raise("Invalid escape"); + } + for (var i2 = 0, list2 = state.backReferenceNames; i2 < list2.length; i2 += 1) { + var name = list2[i2]; + if (state.groupNames.indexOf(name) === -1) { + state.raise("Invalid named capture referenced"); + } + } + }; + pp$1.regexp_disjunction = function(state) { + this.regexp_alternative(state); + while (state.eat(124)) { + this.regexp_alternative(state); + } + if (this.regexp_eatQuantifier(state, true)) { + state.raise("Nothing to repeat"); + } + if (state.eat(123)) { + state.raise("Lone quantifier brackets"); + } + }; + pp$1.regexp_alternative = function(state) { + while (state.pos < state.source.length && this.regexp_eatTerm(state)) { + } + }; + pp$1.regexp_eatTerm = function(state) { + if (this.regexp_eatAssertion(state)) { + if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) { + if (state.switchU) { + state.raise("Invalid quantifier"); + } + } + return true; + } + if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) { + this.regexp_eatQuantifier(state); + return true; + } + return false; + }; + pp$1.regexp_eatAssertion = function(state) { + var start = state.pos; + state.lastAssertionIsQuantifiable = false; + if (state.eat(94) || state.eat(36)) { + return true; + } + if (state.eat(92)) { + if (state.eat(66) || state.eat(98)) { + return true; + } + state.pos = start; + } + if (state.eat(40) && state.eat(63)) { + var lookbehind = false; + if (this.options.ecmaVersion >= 9) { + lookbehind = state.eat(60); + } + if (state.eat(61) || state.eat(33)) { + this.regexp_disjunction(state); + if (!state.eat(41)) { + state.raise("Unterminated group"); + } + state.lastAssertionIsQuantifiable = !lookbehind; + return true; + } + } + state.pos = start; + return false; + }; + pp$1.regexp_eatQuantifier = function(state, noError) { + if (noError === void 0) + noError = false; + if (this.regexp_eatQuantifierPrefix(state, noError)) { + state.eat(63); + return true; + } + return false; + }; + pp$1.regexp_eatQuantifierPrefix = function(state, noError) { + return state.eat(42) || state.eat(43) || state.eat(63) || this.regexp_eatBracedQuantifier(state, noError); + }; + pp$1.regexp_eatBracedQuantifier = function(state, noError) { + var start = state.pos; + if (state.eat(123)) { + var min = 0, max = -1; + if (this.regexp_eatDecimalDigits(state)) { + min = state.lastIntValue; + if (state.eat(44) && this.regexp_eatDecimalDigits(state)) { + max = state.lastIntValue; + } + if (state.eat(125)) { + if (max !== -1 && max < min && !noError) { + state.raise("numbers out of order in {} quantifier"); + } + return true; + } + } + if (state.switchU && !noError) { + state.raise("Incomplete quantifier"); + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatAtom = function(state) { + return this.regexp_eatPatternCharacters(state) || state.eat(46) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state); + }; + pp$1.regexp_eatReverseSolidusAtomEscape = function(state) { + var start = state.pos; + if (state.eat(92)) { + if (this.regexp_eatAtomEscape(state)) { + return true; + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatUncapturingGroup = function(state) { + var start = state.pos; + if (state.eat(40)) { + if (state.eat(63) && state.eat(58)) { + this.regexp_disjunction(state); + if (state.eat(41)) { + return true; + } + state.raise("Unterminated group"); + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatCapturingGroup = function(state) { + if (state.eat(40)) { + if (this.options.ecmaVersion >= 9) { + this.regexp_groupSpecifier(state); + } else if (state.current() === 63) { + state.raise("Invalid group"); + } + this.regexp_disjunction(state); + if (state.eat(41)) { + state.numCapturingParens += 1; + return true; + } + state.raise("Unterminated group"); + } + return false; + }; + pp$1.regexp_eatExtendedAtom = function(state) { + return state.eat(46) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state); + }; + pp$1.regexp_eatInvalidBracedQuantifier = function(state) { + if (this.regexp_eatBracedQuantifier(state, true)) { + state.raise("Nothing to repeat"); + } + return false; + }; + pp$1.regexp_eatSyntaxCharacter = function(state) { + var ch = state.current(); + if (isSyntaxCharacter(ch)) { + state.lastIntValue = ch; + state.advance(); + return true; + } + return false; + }; + function isSyntaxCharacter(ch) { + return ch === 36 || ch >= 40 && ch <= 43 || ch === 46 || ch === 63 || ch >= 91 && ch <= 94 || ch >= 123 && ch <= 125; + } + pp$1.regexp_eatPatternCharacters = function(state) { + var start = state.pos; + var ch = 0; + while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) { + state.advance(); + } + return state.pos !== start; + }; + pp$1.regexp_eatExtendedPatternCharacter = function(state) { + var ch = state.current(); + if (ch !== -1 && ch !== 36 && !(ch >= 40 && ch <= 43) && ch !== 46 && ch !== 63 && ch !== 91 && ch !== 94 && ch !== 124) { + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_groupSpecifier = function(state) { + if (state.eat(63)) { + if (this.regexp_eatGroupName(state)) { + if (state.groupNames.indexOf(state.lastStringValue) !== -1) { + state.raise("Duplicate capture group name"); + } + state.groupNames.push(state.lastStringValue); + return; + } + state.raise("Invalid group"); + } + }; + pp$1.regexp_eatGroupName = function(state) { + state.lastStringValue = ""; + if (state.eat(60)) { + if (this.regexp_eatRegExpIdentifierName(state) && state.eat(62)) { + return true; + } + state.raise("Invalid capture group name"); + } + return false; + }; + pp$1.regexp_eatRegExpIdentifierName = function(state) { + state.lastStringValue = ""; + if (this.regexp_eatRegExpIdentifierStart(state)) { + state.lastStringValue += codePointToString(state.lastIntValue); + while (this.regexp_eatRegExpIdentifierPart(state)) { + state.lastStringValue += codePointToString(state.lastIntValue); + } + return true; + } + return false; + }; + pp$1.regexp_eatRegExpIdentifierStart = function(state) { + var start = state.pos; + var forceU = this.options.ecmaVersion >= 11; + var ch = state.current(forceU); + state.advance(forceU); + if (ch === 92 && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) { + ch = state.lastIntValue; + } + if (isRegExpIdentifierStart(ch)) { + state.lastIntValue = ch; + return true; + } + state.pos = start; + return false; + }; + function isRegExpIdentifierStart(ch) { + return isIdentifierStart(ch, true) || ch === 36 || ch === 95; + } + pp$1.regexp_eatRegExpIdentifierPart = function(state) { + var start = state.pos; + var forceU = this.options.ecmaVersion >= 11; + var ch = state.current(forceU); + state.advance(forceU); + if (ch === 92 && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) { + ch = state.lastIntValue; + } + if (isRegExpIdentifierPart(ch)) { + state.lastIntValue = ch; + return true; + } + state.pos = start; + return false; + }; + function isRegExpIdentifierPart(ch) { + return isIdentifierChar(ch, true) || ch === 36 || ch === 95 || ch === 8204 || ch === 8205; + } + pp$1.regexp_eatAtomEscape = function(state) { + if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) { + return true; + } + if (state.switchU) { + if (state.current() === 99) { + state.raise("Invalid unicode escape"); + } + state.raise("Invalid escape"); + } + return false; + }; + pp$1.regexp_eatBackReference = function(state) { + var start = state.pos; + if (this.regexp_eatDecimalEscape(state)) { + var n = state.lastIntValue; + if (state.switchU) { + if (n > state.maxBackReference) { + state.maxBackReference = n; + } + return true; + } + if (n <= state.numCapturingParens) { + return true; + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatKGroupName = function(state) { + if (state.eat(107)) { + if (this.regexp_eatGroupName(state)) { + state.backReferenceNames.push(state.lastStringValue); + return true; + } + state.raise("Invalid named reference"); + } + return false; + }; + pp$1.regexp_eatCharacterEscape = function(state) { + return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state); + }; + pp$1.regexp_eatCControlLetter = function(state) { + var start = state.pos; + if (state.eat(99)) { + if (this.regexp_eatControlLetter(state)) { + return true; + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatZero = function(state) { + if (state.current() === 48 && !isDecimalDigit(state.lookahead())) { + state.lastIntValue = 0; + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_eatControlEscape = function(state) { + var ch = state.current(); + if (ch === 116) { + state.lastIntValue = 9; + state.advance(); + return true; + } + if (ch === 110) { + state.lastIntValue = 10; + state.advance(); + return true; + } + if (ch === 118) { + state.lastIntValue = 11; + state.advance(); + return true; + } + if (ch === 102) { + state.lastIntValue = 12; + state.advance(); + return true; + } + if (ch === 114) { + state.lastIntValue = 13; + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_eatControlLetter = function(state) { + var ch = state.current(); + if (isControlLetter(ch)) { + state.lastIntValue = ch % 32; + state.advance(); + return true; + } + return false; + }; + function isControlLetter(ch) { + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122; + } + pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) { + if (forceU === void 0) + forceU = false; + var start = state.pos; + var switchU = forceU || state.switchU; + if (state.eat(117)) { + if (this.regexp_eatFixedHexDigits(state, 4)) { + var lead = state.lastIntValue; + if (switchU && lead >= 55296 && lead <= 56319) { + var leadSurrogateEnd = state.pos; + if (state.eat(92) && state.eat(117) && this.regexp_eatFixedHexDigits(state, 4)) { + var trail = state.lastIntValue; + if (trail >= 56320 && trail <= 57343) { + state.lastIntValue = (lead - 55296) * 1024 + (trail - 56320) + 65536; + return true; + } + } + state.pos = leadSurrogateEnd; + state.lastIntValue = lead; + } + return true; + } + if (switchU && state.eat(123) && this.regexp_eatHexDigits(state) && state.eat(125) && isValidUnicode(state.lastIntValue)) { + return true; + } + if (switchU) { + state.raise("Invalid unicode escape"); + } + state.pos = start; + } + return false; + }; + function isValidUnicode(ch) { + return ch >= 0 && ch <= 1114111; + } + pp$1.regexp_eatIdentityEscape = function(state) { + if (state.switchU) { + if (this.regexp_eatSyntaxCharacter(state)) { + return true; + } + if (state.eat(47)) { + state.lastIntValue = 47; + return true; + } + return false; + } + var ch = state.current(); + if (ch !== 99 && (!state.switchN || ch !== 107)) { + state.lastIntValue = ch; + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_eatDecimalEscape = function(state) { + state.lastIntValue = 0; + var ch = state.current(); + if (ch >= 49 && ch <= 57) { + do { + state.lastIntValue = 10 * state.lastIntValue + (ch - 48); + state.advance(); + } while ((ch = state.current()) >= 48 && ch <= 57); + return true; + } + return false; + }; + var CharSetNone = 0; + var CharSetOk = 1; + var CharSetString = 2; + pp$1.regexp_eatCharacterClassEscape = function(state) { + var ch = state.current(); + if (isCharacterClassEscape(ch)) { + state.lastIntValue = -1; + state.advance(); + return CharSetOk; + } + var negate = false; + if (state.switchU && this.options.ecmaVersion >= 9 && ((negate = ch === 80) || ch === 112)) { + state.lastIntValue = -1; + state.advance(); + var result; + if (state.eat(123) && (result = this.regexp_eatUnicodePropertyValueExpression(state)) && state.eat(125)) { + if (negate && result === CharSetString) { + state.raise("Invalid property name"); + } + return result; + } + state.raise("Invalid property name"); + } + return CharSetNone; + }; + function isCharacterClassEscape(ch) { + return ch === 100 || ch === 68 || ch === 115 || ch === 83 || ch === 119 || ch === 87; + } + pp$1.regexp_eatUnicodePropertyValueExpression = function(state) { + var start = state.pos; + if (this.regexp_eatUnicodePropertyName(state) && state.eat(61)) { + var name = state.lastStringValue; + if (this.regexp_eatUnicodePropertyValue(state)) { + var value = state.lastStringValue; + this.regexp_validateUnicodePropertyNameAndValue(state, name, value); + return CharSetOk; + } + } + state.pos = start; + if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) { + var nameOrValue = state.lastStringValue; + return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue); + } + return CharSetNone; + }; + pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { + if (!hasOwn(state.unicodeProperties.nonBinary, name)) { + state.raise("Invalid property name"); + } + if (!state.unicodeProperties.nonBinary[name].test(value)) { + state.raise("Invalid property value"); + } + }; + pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) { + if (state.unicodeProperties.binary.test(nameOrValue)) { + return CharSetOk; + } + if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { + return CharSetString; + } + state.raise("Invalid property name"); + }; + pp$1.regexp_eatUnicodePropertyName = function(state) { + var ch = 0; + state.lastStringValue = ""; + while (isUnicodePropertyNameCharacter(ch = state.current())) { + state.lastStringValue += codePointToString(ch); + state.advance(); + } + return state.lastStringValue !== ""; + }; + function isUnicodePropertyNameCharacter(ch) { + return isControlLetter(ch) || ch === 95; + } + pp$1.regexp_eatUnicodePropertyValue = function(state) { + var ch = 0; + state.lastStringValue = ""; + while (isUnicodePropertyValueCharacter(ch = state.current())) { + state.lastStringValue += codePointToString(ch); + state.advance(); + } + return state.lastStringValue !== ""; + }; + function isUnicodePropertyValueCharacter(ch) { + return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch); + } + pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) { + return this.regexp_eatUnicodePropertyValue(state); + }; + pp$1.regexp_eatCharacterClass = function(state) { + if (state.eat(91)) { + var negate = state.eat(94); + var result = this.regexp_classContents(state); + if (!state.eat(93)) { + state.raise("Unterminated character class"); + } + if (negate && result === CharSetString) { + state.raise("Negated character class may contain strings"); + } + return true; + } + return false; + }; + pp$1.regexp_classContents = function(state) { + if (state.current() === 93) { + return CharSetOk; + } + if (state.switchV) { + return this.regexp_classSetExpression(state); + } + this.regexp_nonEmptyClassRanges(state); + return CharSetOk; + }; + pp$1.regexp_nonEmptyClassRanges = function(state) { + while (this.regexp_eatClassAtom(state)) { + var left = state.lastIntValue; + if (state.eat(45) && this.regexp_eatClassAtom(state)) { + var right = state.lastIntValue; + if (state.switchU && (left === -1 || right === -1)) { + state.raise("Invalid character class"); + } + if (left !== -1 && right !== -1 && left > right) { + state.raise("Range out of order in character class"); + } + } + } + }; + pp$1.regexp_eatClassAtom = function(state) { + var start = state.pos; + if (state.eat(92)) { + if (this.regexp_eatClassEscape(state)) { + return true; + } + if (state.switchU) { + var ch$1 = state.current(); + if (ch$1 === 99 || isOctalDigit(ch$1)) { + state.raise("Invalid class escape"); + } + state.raise("Invalid escape"); + } + state.pos = start; + } + var ch = state.current(); + if (ch !== 93) { + state.lastIntValue = ch; + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_eatClassEscape = function(state) { + var start = state.pos; + if (state.eat(98)) { + state.lastIntValue = 8; + return true; + } + if (state.switchU && state.eat(45)) { + state.lastIntValue = 45; + return true; + } + if (!state.switchU && state.eat(99)) { + if (this.regexp_eatClassControlLetter(state)) { + return true; + } + state.pos = start; + } + return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state); + }; + pp$1.regexp_classSetExpression = function(state) { + var result = CharSetOk, subResult; + if (this.regexp_eatClassSetRange(state)) + ; + else if (subResult = this.regexp_eatClassSetOperand(state)) { + if (subResult === CharSetString) { + result = CharSetString; + } + var start = state.pos; + while (state.eatChars([38, 38])) { + if (state.current() !== 38 && (subResult = this.regexp_eatClassSetOperand(state))) { + if (subResult !== CharSetString) { + result = CharSetOk; + } + continue; + } + state.raise("Invalid character in character class"); + } + if (start !== state.pos) { + return result; + } + while (state.eatChars([45, 45])) { + if (this.regexp_eatClassSetOperand(state)) { + continue; + } + state.raise("Invalid character in character class"); + } + if (start !== state.pos) { + return result; + } + } else { + state.raise("Invalid character in character class"); + } + for (; ; ) { + if (this.regexp_eatClassSetRange(state)) { + continue; + } + subResult = this.regexp_eatClassSetOperand(state); + if (!subResult) { + return result; + } + if (subResult === CharSetString) { + result = CharSetString; + } + } + }; + pp$1.regexp_eatClassSetRange = function(state) { + var start = state.pos; + if (this.regexp_eatClassSetCharacter(state)) { + var left = state.lastIntValue; + if (state.eat(45) && this.regexp_eatClassSetCharacter(state)) { + var right = state.lastIntValue; + if (left !== -1 && right !== -1 && left > right) { + state.raise("Range out of order in character class"); + } + return true; + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatClassSetOperand = function(state) { + if (this.regexp_eatClassSetCharacter(state)) { + return CharSetOk; + } + return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state); + }; + pp$1.regexp_eatNestedClass = function(state) { + var start = state.pos; + if (state.eat(91)) { + var negate = state.eat(94); + var result = this.regexp_classContents(state); + if (state.eat(93)) { + if (negate && result === CharSetString) { + state.raise("Negated character class may contain strings"); + } + return result; + } + state.pos = start; + } + if (state.eat(92)) { + var result$1 = this.regexp_eatCharacterClassEscape(state); + if (result$1) { + return result$1; + } + state.pos = start; + } + return null; + }; + pp$1.regexp_eatClassStringDisjunction = function(state) { + var start = state.pos; + if (state.eatChars([92, 113])) { + if (state.eat(123)) { + var result = this.regexp_classStringDisjunctionContents(state); + if (state.eat(125)) { + return result; + } + } else { + state.raise("Invalid escape"); + } + state.pos = start; + } + return null; + }; + pp$1.regexp_classStringDisjunctionContents = function(state) { + var result = this.regexp_classString(state); + while (state.eat(124)) { + if (this.regexp_classString(state) === CharSetString) { + result = CharSetString; + } + } + return result; + }; + pp$1.regexp_classString = function(state) { + var count = 0; + while (this.regexp_eatClassSetCharacter(state)) { + count++; + } + return count === 1 ? CharSetOk : CharSetString; + }; + pp$1.regexp_eatClassSetCharacter = function(state) { + var start = state.pos; + if (state.eat(92)) { + if (this.regexp_eatCharacterEscape(state) || this.regexp_eatClassSetReservedPunctuator(state)) { + return true; + } + if (state.eat(98)) { + state.lastIntValue = 8; + return true; + } + state.pos = start; + return false; + } + var ch = state.current(); + if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { + return false; + } + if (isClassSetSyntaxCharacter(ch)) { + return false; + } + state.advance(); + state.lastIntValue = ch; + return true; + }; + function isClassSetReservedDoublePunctuatorCharacter(ch) { + return ch === 33 || ch >= 35 && ch <= 38 || ch >= 42 && ch <= 44 || ch === 46 || ch >= 58 && ch <= 64 || ch === 94 || ch === 96 || ch === 126; + } + function isClassSetSyntaxCharacter(ch) { + return ch === 40 || ch === 41 || ch === 45 || ch === 47 || ch >= 91 && ch <= 93 || ch >= 123 && ch <= 125; + } + pp$1.regexp_eatClassSetReservedPunctuator = function(state) { + var ch = state.current(); + if (isClassSetReservedPunctuator(ch)) { + state.lastIntValue = ch; + state.advance(); + return true; + } + return false; + }; + function isClassSetReservedPunctuator(ch) { + return ch === 33 || ch === 35 || ch === 37 || ch === 38 || ch === 44 || ch === 45 || ch >= 58 && ch <= 62 || ch === 64 || ch === 96 || ch === 126; + } + pp$1.regexp_eatClassControlLetter = function(state) { + var ch = state.current(); + if (isDecimalDigit(ch) || ch === 95) { + state.lastIntValue = ch % 32; + state.advance(); + return true; + } + return false; + }; + pp$1.regexp_eatHexEscapeSequence = function(state) { + var start = state.pos; + if (state.eat(120)) { + if (this.regexp_eatFixedHexDigits(state, 2)) { + return true; + } + if (state.switchU) { + state.raise("Invalid escape"); + } + state.pos = start; + } + return false; + }; + pp$1.regexp_eatDecimalDigits = function(state) { + var start = state.pos; + var ch = 0; + state.lastIntValue = 0; + while (isDecimalDigit(ch = state.current())) { + state.lastIntValue = 10 * state.lastIntValue + (ch - 48); + state.advance(); + } + return state.pos !== start; + }; + function isDecimalDigit(ch) { + return ch >= 48 && ch <= 57; + } + pp$1.regexp_eatHexDigits = function(state) { + var start = state.pos; + var ch = 0; + state.lastIntValue = 0; + while (isHexDigit(ch = state.current())) { + state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); + state.advance(); + } + return state.pos !== start; + }; + function isHexDigit(ch) { + return ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102; + } + function hexToInt(ch) { + if (ch >= 65 && ch <= 70) { + return 10 + (ch - 65); + } + if (ch >= 97 && ch <= 102) { + return 10 + (ch - 97); + } + return ch - 48; + } + pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) { + if (this.regexp_eatOctalDigit(state)) { + var n1 = state.lastIntValue; + if (this.regexp_eatOctalDigit(state)) { + var n2 = state.lastIntValue; + if (n1 <= 3 && this.regexp_eatOctalDigit(state)) { + state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue; + } else { + state.lastIntValue = n1 * 8 + n2; + } + } else { + state.lastIntValue = n1; + } + return true; + } + return false; + }; + pp$1.regexp_eatOctalDigit = function(state) { + var ch = state.current(); + if (isOctalDigit(ch)) { + state.lastIntValue = ch - 48; + state.advance(); + return true; + } + state.lastIntValue = 0; + return false; + }; + function isOctalDigit(ch) { + return ch >= 48 && ch <= 55; + } + pp$1.regexp_eatFixedHexDigits = function(state, length) { + var start = state.pos; + state.lastIntValue = 0; + for (var i2 = 0; i2 < length; ++i2) { + var ch = state.current(); + if (!isHexDigit(ch)) { + state.pos = start; + return false; + } + state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); + state.advance(); + } + return true; + }; + var Token = function Token2(p) { + this.type = p.type; + this.value = p.value; + this.start = p.start; + this.end = p.end; + if (p.options.locations) { + this.loc = new SourceLocation(p, p.startLoc, p.endLoc); + } + if (p.options.ranges) { + this.range = [p.start, p.end]; + } + }; + var pp = Parser.prototype; + pp.next = function(ignoreEscapeSequenceInKeyword) { + if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) { + this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword); + } + if (this.options.onToken) { + this.options.onToken(new Token(this)); + } + this.lastTokEnd = this.end; + this.lastTokStart = this.start; + this.lastTokEndLoc = this.endLoc; + this.lastTokStartLoc = this.startLoc; + this.nextToken(); + }; + pp.getToken = function() { + this.next(); + return new Token(this); + }; + if (typeof Symbol !== "undefined") { + pp[Symbol.iterator] = function() { + var this$1$1 = this; + return { + next: function() { + var token = this$1$1.getToken(); + return { + done: token.type === types$1.eof, + value: token + }; + } + }; + }; + } + pp.nextToken = function() { + var curContext = this.curContext(); + if (!curContext || !curContext.preserveSpace) { + this.skipSpace(); + } + this.start = this.pos; + if (this.options.locations) { + this.startLoc = this.curPosition(); + } + if (this.pos >= this.input.length) { + return this.finishToken(types$1.eof); + } + if (curContext.override) { + return curContext.override(this); + } else { + this.readToken(this.fullCharCodeAtPos()); + } + }; + pp.readToken = function(code) { + if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92) { + return this.readWord(); + } + return this.getTokenFromCode(code); + }; + pp.fullCharCodeAtPos = function() { + var code = this.input.charCodeAt(this.pos); + if (code <= 55295 || code >= 56320) { + return code; + } + var next = this.input.charCodeAt(this.pos + 1); + return next <= 56319 || next >= 57344 ? code : (code << 10) + next - 56613888; + }; + pp.skipBlockComment = function() { + var startLoc = this.options.onComment && this.curPosition(); + var start = this.pos, end = this.input.indexOf("*/", this.pos += 2); + if (end === -1) { + this.raise(this.pos - 2, "Unterminated comment"); + } + this.pos = end + 2; + if (this.options.locations) { + for (var nextBreak = void 0, pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1; ) { + ++this.curLine; + pos = this.lineStart = nextBreak; + } + } + if (this.options.onComment) { + this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition()); + } + }; + pp.skipLineComment = function(startSkip) { + var start = this.pos; + var startLoc = this.options.onComment && this.curPosition(); + var ch = this.input.charCodeAt(this.pos += startSkip); + while (this.pos < this.input.length && !isNewLine(ch)) { + ch = this.input.charCodeAt(++this.pos); + } + if (this.options.onComment) { + this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition()); + } + }; + pp.skipSpace = function() { + loop: + while (this.pos < this.input.length) { + var ch = this.input.charCodeAt(this.pos); + switch (ch) { + case 32: + case 160: + ++this.pos; + break; + case 13: + if (this.input.charCodeAt(this.pos + 1) === 10) { + ++this.pos; + } + case 10: + case 8232: + case 8233: + ++this.pos; + if (this.options.locations) { + ++this.curLine; + this.lineStart = this.pos; + } + break; + case 47: + switch (this.input.charCodeAt(this.pos + 1)) { + case 42: + this.skipBlockComment(); + break; + case 47: + this.skipLineComment(2); + break; + default: + break loop; + } + break; + default: + if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { + ++this.pos; + } else { + break loop; + } + } + } + }; + pp.finishToken = function(type, val) { + this.end = this.pos; + if (this.options.locations) { + this.endLoc = this.curPosition(); + } + var prevType = this.type; + this.type = type; + this.value = val; + this.updateContext(prevType); + }; + pp.readToken_dot = function() { + var next = this.input.charCodeAt(this.pos + 1); + if (next >= 48 && next <= 57) { + return this.readNumber(true); + } + var next2 = this.input.charCodeAt(this.pos + 2); + if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { + this.pos += 3; + return this.finishToken(types$1.ellipsis); + } else { + ++this.pos; + return this.finishToken(types$1.dot); + } + }; + pp.readToken_slash = function() { + var next = this.input.charCodeAt(this.pos + 1); + if (this.exprAllowed) { + ++this.pos; + return this.readRegexp(); + } + if (next === 61) { + return this.finishOp(types$1.assign, 2); + } + return this.finishOp(types$1.slash, 1); + }; + pp.readToken_mult_modulo_exp = function(code) { + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + var tokentype = code === 42 ? types$1.star : types$1.modulo; + if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) { + ++size; + tokentype = types$1.starstar; + next = this.input.charCodeAt(this.pos + 2); + } + if (next === 61) { + return this.finishOp(types$1.assign, size + 1); + } + return this.finishOp(tokentype, size); + }; + pp.readToken_pipe_amp = function(code) { + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) { + if (this.options.ecmaVersion >= 12) { + var next2 = this.input.charCodeAt(this.pos + 2); + if (next2 === 61) { + return this.finishOp(types$1.assign, 3); + } + } + return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2); + } + if (next === 61) { + return this.finishOp(types$1.assign, 2); + } + return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1); + }; + pp.readToken_caret = function() { + var next = this.input.charCodeAt(this.pos + 1); + if (next === 61) { + return this.finishOp(types$1.assign, 2); + } + return this.finishOp(types$1.bitwiseXOR, 1); + }; + pp.readToken_plus_min = function(code) { + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) { + if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) { + this.skipLineComment(3); + this.skipSpace(); + return this.nextToken(); + } + return this.finishOp(types$1.incDec, 2); + } + if (next === 61) { + return this.finishOp(types$1.assign, 2); + } + return this.finishOp(types$1.plusMin, 1); + }; + pp.readToken_lt_gt = function(code) { + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(this.pos + size) === 61) { + return this.finishOp(types$1.assign, size + 1); + } + return this.finishOp(types$1.bitShift, size); + } + if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) { + this.skipLineComment(4); + this.skipSpace(); + return this.nextToken(); + } + if (next === 61) { + size = 2; + } + return this.finishOp(types$1.relational, size); + }; + pp.readToken_eq_excl = function(code) { + var next = this.input.charCodeAt(this.pos + 1); + if (next === 61) { + return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2); + } + if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { + this.pos += 2; + return this.finishToken(types$1.arrow); + } + return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1); + }; + pp.readToken_question = function() { + var ecmaVersion2 = this.options.ecmaVersion; + if (ecmaVersion2 >= 11) { + var next = this.input.charCodeAt(this.pos + 1); + if (next === 46) { + var next2 = this.input.charCodeAt(this.pos + 2); + if (next2 < 48 || next2 > 57) { + return this.finishOp(types$1.questionDot, 2); + } + } + if (next === 63) { + if (ecmaVersion2 >= 12) { + var next2$1 = this.input.charCodeAt(this.pos + 2); + if (next2$1 === 61) { + return this.finishOp(types$1.assign, 3); + } + } + return this.finishOp(types$1.coalesce, 2); + } + } + return this.finishOp(types$1.question, 1); + }; + pp.readToken_numberSign = function() { + var ecmaVersion2 = this.options.ecmaVersion; + var code = 35; + if (ecmaVersion2 >= 13) { + ++this.pos; + code = this.fullCharCodeAtPos(); + if (isIdentifierStart(code, true) || code === 92) { + return this.finishToken(types$1.privateId, this.readWord1()); + } + } + this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'"); + }; + pp.getTokenFromCode = function(code) { + switch (code) { + case 46: + return this.readToken_dot(); + case 40: + ++this.pos; + return this.finishToken(types$1.parenL); + case 41: + ++this.pos; + return this.finishToken(types$1.parenR); + case 59: + ++this.pos; + return this.finishToken(types$1.semi); + case 44: + ++this.pos; + return this.finishToken(types$1.comma); + case 91: + ++this.pos; + return this.finishToken(types$1.bracketL); + case 93: + ++this.pos; + return this.finishToken(types$1.bracketR); + case 123: + ++this.pos; + return this.finishToken(types$1.braceL); + case 125: + ++this.pos; + return this.finishToken(types$1.braceR); + case 58: + ++this.pos; + return this.finishToken(types$1.colon); + case 96: + if (this.options.ecmaVersion < 6) { + break; + } + ++this.pos; + return this.finishToken(types$1.backQuote); + case 48: + var next = this.input.charCodeAt(this.pos + 1); + if (next === 120 || next === 88) { + return this.readRadixNumber(16); + } + if (this.options.ecmaVersion >= 6) { + if (next === 111 || next === 79) { + return this.readRadixNumber(8); + } + if (next === 98 || next === 66) { + return this.readRadixNumber(2); + } + } + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + return this.readNumber(false); + case 34: + case 39: + return this.readString(code); + case 47: + return this.readToken_slash(); + case 37: + case 42: + return this.readToken_mult_modulo_exp(code); + case 124: + case 38: + return this.readToken_pipe_amp(code); + case 94: + return this.readToken_caret(); + case 43: + case 45: + return this.readToken_plus_min(code); + case 60: + case 62: + return this.readToken_lt_gt(code); + case 61: + case 33: + return this.readToken_eq_excl(code); + case 63: + return this.readToken_question(); + case 126: + return this.finishOp(types$1.prefix, 1); + case 35: + return this.readToken_numberSign(); + } + this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'"); + }; + pp.finishOp = function(type, size) { + var str = this.input.slice(this.pos, this.pos + size); + this.pos += size; + return this.finishToken(type, str); + }; + pp.readRegexp = function() { + var escaped, inClass, start = this.pos; + for (; ; ) { + if (this.pos >= this.input.length) { + this.raise(start, "Unterminated regular expression"); + } + var ch = this.input.charAt(this.pos); + if (lineBreak.test(ch)) { + this.raise(start, "Unterminated regular expression"); + } + if (!escaped) { + if (ch === "[") { + inClass = true; + } else if (ch === "]" && inClass) { + inClass = false; + } else if (ch === "/" && !inClass) { + break; + } + escaped = ch === "\\"; + } else { + escaped = false; + } + ++this.pos; + } + var pattern = this.input.slice(start, this.pos); + ++this.pos; + var flagsStart = this.pos; + var flags = this.readWord1(); + if (this.containsEsc) { + this.unexpected(flagsStart); + } + var state = this.regexpState || (this.regexpState = new RegExpValidationState(this)); + state.reset(start, pattern, flags); + this.validateRegExpFlags(state); + this.validateRegExpPattern(state); + var value = null; + try { + value = new RegExp(pattern, flags); + } catch (e) { + } + return this.finishToken(types$1.regexp, { pattern, flags, value }); + }; + pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) { + var allowSeparators = this.options.ecmaVersion >= 12 && len === void 0; + var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48; + var start = this.pos, total = 0, lastCode = 0; + for (var i2 = 0, e = len == null ? Infinity : len; i2 < e; ++i2, ++this.pos) { + var code = this.input.charCodeAt(this.pos), val = void 0; + if (allowSeparators && code === 95) { + if (isLegacyOctalNumericLiteral) { + this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals"); + } + if (lastCode === 95) { + this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore"); + } + if (i2 === 0) { + this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits"); + } + lastCode = code; + continue; + } + if (code >= 97) { + val = code - 97 + 10; + } else if (code >= 65) { + val = code - 65 + 10; + } else if (code >= 48 && code <= 57) { + val = code - 48; + } else { + val = Infinity; + } + if (val >= radix) { + break; + } + lastCode = code; + total = total * radix + val; + } + if (allowSeparators && lastCode === 95) { + this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits"); + } + if (this.pos === start || len != null && this.pos - start !== len) { + return null; + } + return total; + }; + function stringToNumber(str, isLegacyOctalNumericLiteral) { + if (isLegacyOctalNumericLiteral) { + return parseInt(str, 8); + } + return parseFloat(str.replace(/_/g, "")); + } + function stringToBigInt(str) { + if (typeof BigInt !== "function") { + return null; + } + return BigInt(str.replace(/_/g, "")); + } + pp.readRadixNumber = function(radix) { + var start = this.pos; + this.pos += 2; + var val = this.readInt(radix); + if (val == null) { + this.raise(this.start + 2, "Expected number in radix " + radix); + } + if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) { + val = stringToBigInt(this.input.slice(start, this.pos)); + ++this.pos; + } else if (isIdentifierStart(this.fullCharCodeAtPos())) { + this.raise(this.pos, "Identifier directly after number"); + } + return this.finishToken(types$1.num, val); + }; + pp.readNumber = function(startsWithDot) { + var start = this.pos; + if (!startsWithDot && this.readInt(10, void 0, true) === null) { + this.raise(start, "Invalid number"); + } + var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48; + if (octal && this.strict) { + this.raise(start, "Invalid number"); + } + var next = this.input.charCodeAt(this.pos); + if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) { + var val$1 = stringToBigInt(this.input.slice(start, this.pos)); + ++this.pos; + if (isIdentifierStart(this.fullCharCodeAtPos())) { + this.raise(this.pos, "Identifier directly after number"); + } + return this.finishToken(types$1.num, val$1); + } + if (octal && /[89]/.test(this.input.slice(start, this.pos))) { + octal = false; + } + if (next === 46 && !octal) { + ++this.pos; + this.readInt(10); + next = this.input.charCodeAt(this.pos); + } + if ((next === 69 || next === 101) && !octal) { + next = this.input.charCodeAt(++this.pos); + if (next === 43 || next === 45) { + ++this.pos; + } + if (this.readInt(10) === null) { + this.raise(start, "Invalid number"); + } + } + if (isIdentifierStart(this.fullCharCodeAtPos())) { + this.raise(this.pos, "Identifier directly after number"); + } + var val = stringToNumber(this.input.slice(start, this.pos), octal); + return this.finishToken(types$1.num, val); + }; + pp.readCodePoint = function() { + var ch = this.input.charCodeAt(this.pos), code; + if (ch === 123) { + if (this.options.ecmaVersion < 6) { + this.unexpected(); + } + var codePos = ++this.pos; + code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos); + ++this.pos; + if (code > 1114111) { + this.invalidStringToken(codePos, "Code point out of bounds"); + } + } else { + code = this.readHexChar(4); + } + return code; + }; + pp.readString = function(quote) { + var out = "", chunkStart = ++this.pos; + for (; ; ) { + if (this.pos >= this.input.length) { + this.raise(this.start, "Unterminated string constant"); + } + var ch = this.input.charCodeAt(this.pos); + if (ch === quote) { + break; + } + if (ch === 92) { + out += this.input.slice(chunkStart, this.pos); + out += this.readEscapedChar(false); + chunkStart = this.pos; + } else if (ch === 8232 || ch === 8233) { + if (this.options.ecmaVersion < 10) { + this.raise(this.start, "Unterminated string constant"); + } + ++this.pos; + if (this.options.locations) { + this.curLine++; + this.lineStart = this.pos; + } + } else { + if (isNewLine(ch)) { + this.raise(this.start, "Unterminated string constant"); + } + ++this.pos; + } + } + out += this.input.slice(chunkStart, this.pos++); + return this.finishToken(types$1.string, out); + }; + var INVALID_TEMPLATE_ESCAPE_ERROR = {}; + pp.tryReadTemplateToken = function() { + this.inTemplateElement = true; + try { + this.readTmplToken(); + } catch (err) { + if (err === INVALID_TEMPLATE_ESCAPE_ERROR) { + this.readInvalidTemplateToken(); + } else { + throw err; + } + } + this.inTemplateElement = false; + }; + pp.invalidStringToken = function(position, message) { + if (this.inTemplateElement && this.options.ecmaVersion >= 9) { + throw INVALID_TEMPLATE_ESCAPE_ERROR; + } else { + this.raise(position, message); + } + }; + pp.readTmplToken = function() { + var out = "", chunkStart = this.pos; + for (; ; ) { + if (this.pos >= this.input.length) { + this.raise(this.start, "Unterminated template"); + } + var ch = this.input.charCodeAt(this.pos); + if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { + if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) { + if (ch === 36) { + this.pos += 2; + return this.finishToken(types$1.dollarBraceL); + } else { + ++this.pos; + return this.finishToken(types$1.backQuote); + } + } + out += this.input.slice(chunkStart, this.pos); + return this.finishToken(types$1.template, out); + } + if (ch === 92) { + out += this.input.slice(chunkStart, this.pos); + out += this.readEscapedChar(true); + chunkStart = this.pos; + } else if (isNewLine(ch)) { + out += this.input.slice(chunkStart, this.pos); + ++this.pos; + switch (ch) { + case 13: + if (this.input.charCodeAt(this.pos) === 10) { + ++this.pos; + } + case 10: + out += "\n"; + break; + default: + out += String.fromCharCode(ch); + break; + } + if (this.options.locations) { + ++this.curLine; + this.lineStart = this.pos; + } + chunkStart = this.pos; + } else { + ++this.pos; + } + } + }; + pp.readInvalidTemplateToken = function() { + for (; this.pos < this.input.length; this.pos++) { + switch (this.input[this.pos]) { + case "\\": + ++this.pos; + break; + case "$": + if (this.input[this.pos + 1] !== "{") { + break; + } + case "`": + return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos)); + } + } + this.raise(this.start, "Unterminated template"); + }; + pp.readEscapedChar = function(inTemplate) { + var ch = this.input.charCodeAt(++this.pos); + ++this.pos; + switch (ch) { + case 110: + return "\n"; + case 114: + return "\r"; + case 120: + return String.fromCharCode(this.readHexChar(2)); + case 117: + return codePointToString(this.readCodePoint()); + case 116: + return " "; + case 98: + return "\b"; + case 118: + return "\v"; + case 102: + return "\f"; + case 13: + if (this.input.charCodeAt(this.pos) === 10) { + ++this.pos; + } + case 10: + if (this.options.locations) { + this.lineStart = this.pos; + ++this.curLine; + } + return ""; + case 56: + case 57: + if (this.strict) { + this.invalidStringToken(this.pos - 1, "Invalid escape sequence"); + } + if (inTemplate) { + var codePos = this.pos - 1; + this.invalidStringToken(codePos, "Invalid escape sequence in template string"); + } + default: + if (ch >= 48 && ch <= 55) { + var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0]; + var octal = parseInt(octalStr, 8); + if (octal > 255) { + octalStr = octalStr.slice(0, -1); + octal = parseInt(octalStr, 8); + } + this.pos += octalStr.length - 1; + ch = this.input.charCodeAt(this.pos); + if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) { + this.invalidStringToken(this.pos - 1 - octalStr.length, inTemplate ? "Octal literal in template string" : "Octal literal in strict mode"); + } + return String.fromCharCode(octal); + } + if (isNewLine(ch)) { + return ""; + } + return String.fromCharCode(ch); + } + }; + pp.readHexChar = function(len) { + var codePos = this.pos; + var n = this.readInt(16, len); + if (n === null) { + this.invalidStringToken(codePos, "Bad character escape sequence"); + } + return n; + }; + pp.readWord1 = function() { + this.containsEsc = false; + var word = "", first = true, chunkStart = this.pos; + var astral = this.options.ecmaVersion >= 6; + while (this.pos < this.input.length) { + var ch = this.fullCharCodeAtPos(); + if (isIdentifierChar(ch, astral)) { + this.pos += ch <= 65535 ? 1 : 2; + } else if (ch === 92) { + this.containsEsc = true; + word += this.input.slice(chunkStart, this.pos); + var escStart = this.pos; + if (this.input.charCodeAt(++this.pos) !== 117) { + this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); + } + ++this.pos; + var esc = this.readCodePoint(); + if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral)) { + this.invalidStringToken(escStart, "Invalid Unicode escape"); + } + word += codePointToString(esc); + chunkStart = this.pos; + } else { + break; + } + first = false; + } + return word + this.input.slice(chunkStart, this.pos); + }; + pp.readWord = function() { + var word = this.readWord1(); + var type = types$1.name; + if (this.keywords.test(word)) { + type = keywords[word]; + } + return this.finishToken(type, word); + }; + var version = "8.10.0"; + Parser.acorn = { + Parser, + version, + defaultOptions: defaultOptions2, + Position, + SourceLocation, + getLineInfo, + Node: Node2, + TokenType, + tokTypes: types$1, + keywordTypes: keywords, + TokContext, + tokContexts: types, + isIdentifierChar, + isIdentifierStart, + Token, + isNewLine, + lineBreak, + lineBreakG, + nonASCIIwhitespace + }; + function parse(input, options) { + return Parser.parse(input, options); + } + function parseExpressionAt(input, pos, options) { + return Parser.parseExpressionAt(input, pos, options); + } + function tokenizer(input, options) { + return Parser.tokenizer(input, options); + } + exports2.Node = Node2; + exports2.Parser = Parser; + exports2.Position = Position; + exports2.SourceLocation = SourceLocation; + exports2.TokContext = TokContext; + exports2.Token = Token; + exports2.TokenType = TokenType; + exports2.defaultOptions = defaultOptions2; + exports2.getLineInfo = getLineInfo; + exports2.isIdentifierChar = isIdentifierChar; + exports2.isIdentifierStart = isIdentifierStart; + exports2.isNewLine = isNewLine; + exports2.keywordTypes = keywords; + exports2.lineBreak = lineBreak; + exports2.lineBreakG = lineBreakG; + exports2.nonASCIIwhitespace = nonASCIIwhitespace; + exports2.parse = parse; + exports2.parseExpressionAt = parseExpressionAt; + exports2.tokContexts = types; + exports2.tokTypes = types$1; + exports2.tokenizer = tokenizer; + exports2.version = version; + }); + } +}); + +// node_modules/terser/dist/bundle.min.js +var require_bundle_min = __commonJS({ + "node_modules/terser/dist/bundle.min.js"(exports, module2) { + (function(global2, factory) { + typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports, require_source_map_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/source-map"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.Terser = {}, global2.sourceMap)); + })(exports, function(exports2, sourceMap) { + "use strict"; + function characters(str) { + return str.split(""); + } + function member(name, array) { + return array.includes(name); + } + class DefaultsError extends Error { + constructor(msg, defs) { + super(); + this.name = "DefaultsError"; + this.message = msg; + this.defs = defs; + } + } + function defaults(args, defs, croak) { + if (args === true) { + args = {}; + } else if (args != null && typeof args === "object") { + args = { ...args }; + } + const ret = args || {}; + if (croak) { + for (const i in ret) + if (HOP(ret, i) && !HOP(defs, i)) { + throw new DefaultsError("`" + i + "` is not a supported option", defs); + } + } + for (const i in defs) + if (HOP(defs, i)) { + if (!args || !HOP(args, i)) { + ret[i] = defs[i]; + } else if (i === "ecma") { + let ecma = args[i] | 0; + if (ecma > 5 && ecma < 2015) + ecma += 2009; + ret[i] = ecma; + } else { + ret[i] = args && HOP(args, i) ? args[i] : defs[i]; + } + } + return ret; + } + function noop() { + } + function return_false() { + return false; + } + function return_true() { + return true; + } + function return_this() { + return this; + } + function return_null() { + return null; + } + var MAP = function() { + function MAP2(a, tw, allow_splicing = true) { + const new_a = []; + for (let i = 0; i < a.length; ++i) { + let item = a[i]; + let ret = item.transform(tw, allow_splicing); + if (ret instanceof AST_Node) { + new_a.push(ret); + } else if (ret instanceof Splice) { + new_a.push(...ret.v); + } + } + return new_a; + } + MAP2.splice = function(val) { + return new Splice(val); + }; + MAP2.skip = {}; + function Splice(val) { + this.v = val; + } + return MAP2; + }(); + function make_node(ctor, orig, props) { + if (!props) + props = {}; + if (orig) { + if (!props.start) + props.start = orig.start; + if (!props.end) + props.end = orig.end; + } + return new ctor(props); + } + function push_uniq(array, el) { + if (!array.includes(el)) + array.push(el); + } + function string_template(text, props) { + return text.replace(/{(.+?)}/g, function(str, p) { + return props && props[p]; + }); + } + function remove2(array, el) { + for (var i = array.length; --i >= 0; ) { + if (array[i] === el) + array.splice(i, 1); + } + } + function mergeSort(array, cmp) { + if (array.length < 2) + return array.slice(); + function merge2(a, b) { + var r = [], ai = 0, bi = 0, i = 0; + while (ai < a.length && bi < b.length) { + cmp(a[ai], b[bi]) <= 0 ? r[i++] = a[ai++] : r[i++] = b[bi++]; + } + if (ai < a.length) + r.push.apply(r, a.slice(ai)); + if (bi < b.length) + r.push.apply(r, b.slice(bi)); + return r; + } + function _ms(a) { + if (a.length <= 1) + return a; + var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m); + left = _ms(left); + right = _ms(right); + return merge2(left, right); + } + return _ms(array); + } + function makePredicate(words) { + if (!Array.isArray(words)) + words = words.split(" "); + return new Set(words.sort()); + } + function map_add(map, key, value) { + if (map.has(key)) { + map.get(key).push(value); + } else { + map.set(key, [value]); + } + } + function map_from_object(obj) { + var map = /* @__PURE__ */ new Map(); + for (var key in obj) { + if (HOP(obj, key) && key.charAt(0) === "$") { + map.set(key.substr(1), obj[key]); + } + } + return map; + } + function map_to_object(map) { + var obj = /* @__PURE__ */ Object.create(null); + map.forEach(function(value, key) { + obj["$" + key] = value; + }); + return obj; + } + function HOP(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + function keep_name(keep_setting, name) { + return keep_setting === true || keep_setting instanceof RegExp && keep_setting.test(name); + } + var lineTerminatorEscape = { + "\0": "0", + "\n": "n", + "\r": "r", + "\u2028": "u2028", + "\u2029": "u2029" + }; + function regexp_source_fix(source) { + return source.replace(/[\0\n\r\u2028\u2029]/g, function(match, offset) { + var escaped = source[offset - 1] == "\\" && (source[offset - 2] != "\\" || /(?:^|[^\\])(?:\\{2})*$/.test(source.slice(0, offset - 1))); + return (escaped ? "" : "\\") + lineTerminatorEscape[match]; + }); + } + const re_safe_regexp = /^[\\/|\0\s\w^$.[\]()]*$/; + const regexp_is_safe = (source) => re_safe_regexp.test(source); + const all_flags = "dgimsuyv"; + function sort_regexp_flags(flags) { + const existing_flags = new Set(flags.split("")); + let out = ""; + for (const flag of all_flags) { + if (existing_flags.has(flag)) { + out += flag; + existing_flags.delete(flag); + } + } + if (existing_flags.size) { + existing_flags.forEach((flag) => { + out += flag; + }); + } + return out; + } + function has_annotation(node, annotation) { + return node._annotations & annotation; + } + function set_annotation(node, annotation) { + node._annotations |= annotation; + } + function clear_annotation(node, annotation) { + node._annotations &= ~annotation; + } + var LATEST_RAW = ""; + var TEMPLATE_RAWS = /* @__PURE__ */ new Map(); + var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with"; + var KEYWORDS_ATOM = "false null true"; + var RESERVED_WORDS = "enum import super this " + KEYWORDS_ATOM + " " + KEYWORDS; + var ALL_RESERVED_WORDS = "implements interface package private protected public static " + RESERVED_WORDS; + var KEYWORDS_BEFORE_EXPRESSION = "return new delete throw else case yield await"; + KEYWORDS = makePredicate(KEYWORDS); + RESERVED_WORDS = makePredicate(RESERVED_WORDS); + KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION); + KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM); + ALL_RESERVED_WORDS = makePredicate(ALL_RESERVED_WORDS); + var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^")); + var RE_NUM_LITERAL = /[0-9a-f]/i; + var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i; + var RE_OCT_NUMBER = /^0[0-7]+$/; + var RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i; + var RE_BIN_NUMBER = /^0b[01]+$/i; + var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i; + var RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i; + var OPERATORS = makePredicate([ + "in", + "instanceof", + "typeof", + "new", + "void", + "delete", + "++", + "--", + "+", + "-", + "!", + "~", + "&", + "|", + "^", + "*", + "**", + "/", + "%", + ">>", + "<<", + ">>>", + "<", + ">", + "<=", + ">=", + "==", + "===", + "!=", + "!==", + "?", + "=", + "+=", + "-=", + "||=", + "&&=", + "??=", + "/=", + "*=", + "**=", + "%=", + ">>=", + "<<=", + ">>>=", + "|=", + "^=", + "&=", + "&&", + "??", + "||" + ]); + var WHITESPACE_CHARS = makePredicate(characters(" \xA0\n\r \f\v\u200B\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF")); + var NEWLINE_CHARS = makePredicate(characters("\n\r\u2028\u2029")); + var PUNC_AFTER_EXPRESSION = makePredicate(characters(";]),:")); + var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,;:")); + var PUNC_CHARS = makePredicate(characters("[]{}(),;:")); + var UNICODE = { + ID_Start: /[$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, + ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/ + }; + try { + UNICODE = { + ID_Start: new RegExp("[_$\\p{ID_Start}]", "u"), + ID_Continue: new RegExp("[$\\u200C\\u200D\\p{ID_Continue}]+", "u") + }; + } catch (e) { + } + function get_full_char(str, pos) { + if (is_surrogate_pair_head(str.charCodeAt(pos))) { + if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) { + return str.charAt(pos) + str.charAt(pos + 1); + } + } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) { + if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) { + return str.charAt(pos - 1) + str.charAt(pos); + } + } + return str.charAt(pos); + } + function get_full_char_code(str, pos) { + if (is_surrogate_pair_head(str.charCodeAt(pos))) { + return 65536 + (str.charCodeAt(pos) - 55296 << 10) + str.charCodeAt(pos + 1) - 56320; + } + return str.charCodeAt(pos); + } + function get_full_char_length(str) { + var surrogates = 0; + for (var i = 0; i < str.length; i++) { + if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) { + surrogates++; + i++; + } + } + return str.length - surrogates; + } + function from_char_code(code) { + if (code > 65535) { + code -= 65536; + return String.fromCharCode((code >> 10) + 55296) + String.fromCharCode(code % 1024 + 56320); + } + return String.fromCharCode(code); + } + function is_surrogate_pair_head(code) { + return code >= 55296 && code <= 56319; + } + function is_surrogate_pair_tail(code) { + return code >= 56320 && code <= 57343; + } + function is_digit(code) { + return code >= 48 && code <= 57; + } + function is_identifier_start(ch) { + return UNICODE.ID_Start.test(ch); + } + function is_identifier_char(ch) { + return UNICODE.ID_Continue.test(ch); + } + const BASIC_IDENT = /^[a-z_$][a-z0-9_$]*$/i; + function is_basic_identifier_string(str) { + return BASIC_IDENT.test(str); + } + function is_identifier_string(str, allow_surrogates) { + if (BASIC_IDENT.test(str)) { + return true; + } + if (!allow_surrogates && /[\ud800-\udfff]/.test(str)) { + return false; + } + var match = UNICODE.ID_Start.exec(str); + if (!match || match.index !== 0) { + return false; + } + str = str.slice(match[0].length); + if (!str) { + return true; + } + match = UNICODE.ID_Continue.exec(str); + return !!match && match[0].length === str.length; + } + function parse_js_number(num, allow_e = true) { + if (!allow_e && num.includes("e")) { + return NaN; + } + if (RE_HEX_NUMBER.test(num)) { + return parseInt(num.substr(2), 16); + } else if (RE_OCT_NUMBER.test(num)) { + return parseInt(num.substr(1), 8); + } else if (RE_ES6_OCT_NUMBER.test(num)) { + return parseInt(num.substr(2), 8); + } else if (RE_BIN_NUMBER.test(num)) { + return parseInt(num.substr(2), 2); + } else if (RE_DEC_NUMBER.test(num)) { + return parseFloat(num); + } else { + var val = parseFloat(num); + if (val == num) + return val; + } + } + class JS_Parse_Error extends Error { + constructor(message, filename, line, col, pos) { + super(); + this.name = "SyntaxError"; + this.message = message; + this.filename = filename; + this.line = line; + this.col = col; + this.pos = pos; + } + } + function js_error(message, filename, line, col, pos) { + throw new JS_Parse_Error(message, filename, line, col, pos); + } + function is_token(token, type, val) { + return token.type == type && (val == null || token.value == val); + } + var EX_EOF = {}; + function tokenizer($TEXT, filename, html5_comments, shebang) { + var S = { + text: $TEXT, + filename, + pos: 0, + tokpos: 0, + line: 1, + tokline: 0, + col: 0, + tokcol: 0, + newline_before: false, + regex_allowed: false, + brace_counter: 0, + template_braces: [], + comments_before: [], + directives: {}, + directive_stack: [] + }; + function peek() { + return get_full_char(S.text, S.pos); + } + function is_option_chain_op() { + const must_be_dot = S.text.charCodeAt(S.pos + 1) === 46; + if (!must_be_dot) + return false; + const cannot_be_digit = S.text.charCodeAt(S.pos + 2); + return cannot_be_digit < 48 || cannot_be_digit > 57; + } + function next(signal_eof, in_string) { + var ch = get_full_char(S.text, S.pos++); + if (signal_eof && !ch) + throw EX_EOF; + if (NEWLINE_CHARS.has(ch)) { + S.newline_before = S.newline_before || !in_string; + ++S.line; + S.col = 0; + if (ch == "\r" && peek() == "\n") { + ++S.pos; + ch = "\n"; + } + } else { + if (ch.length > 1) { + ++S.pos; + ++S.col; + } + ++S.col; + } + return ch; + } + function forward(i) { + while (i--) + next(); + } + function looking_at(str) { + return S.text.substr(S.pos, str.length) == str; + } + function find_eol() { + var text = S.text; + for (var i = S.pos, n = S.text.length; i < n; ++i) { + var ch = text[i]; + if (NEWLINE_CHARS.has(ch)) + return i; + } + return -1; + } + function find(what, signal_eof) { + var pos = S.text.indexOf(what, S.pos); + if (signal_eof && pos == -1) + throw EX_EOF; + return pos; + } + function start_token() { + S.tokline = S.line; + S.tokcol = S.col; + S.tokpos = S.pos; + } + var prev_was_dot = false; + var previous_token = null; + function token(type, value, is_comment) { + S.regex_allowed = type == "operator" && !UNARY_POSTFIX.has(value) || type == "keyword" && KEYWORDS_BEFORE_EXPRESSION.has(value) || type == "punc" && PUNC_BEFORE_EXPRESSION.has(value) || type == "arrow"; + if (type == "punc" && (value == "." || value == "?.")) { + prev_was_dot = true; + } else if (!is_comment) { + prev_was_dot = false; + } + const line = S.tokline; + const col = S.tokcol; + const pos = S.tokpos; + const nlb = S.newline_before; + const file = filename; + let comments_before = []; + let comments_after = []; + if (!is_comment) { + comments_before = S.comments_before; + comments_after = S.comments_before = []; + } + S.newline_before = false; + const tok = new AST_Token(type, value, line, col, pos, nlb, comments_before, comments_after, file); + if (!is_comment) + previous_token = tok; + return tok; + } + function skip_whitespace() { + while (WHITESPACE_CHARS.has(peek())) + next(); + } + function read_while(pred) { + var ret = "", ch, i = 0; + while ((ch = peek()) && pred(ch, i++)) + ret += next(); + return ret; + } + function parse_error(err) { + js_error(err, filename, S.tokline, S.tokcol, S.tokpos); + } + function read_num(prefix) { + var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".", is_big_int = false, numeric_separator = false; + var num = read_while(function(ch, i) { + if (is_big_int) + return false; + var code = ch.charCodeAt(0); + switch (code) { + case 95: + return numeric_separator = true; + case 98: + case 66: + return has_x = true; + case 111: + case 79: + case 120: + case 88: + return has_x ? false : has_x = true; + case 101: + case 69: + return has_x ? true : has_e ? false : has_e = after_e = true; + case 45: + return after_e || i == 0 && !prefix; + case 43: + return after_e; + case (after_e = false, 46): + return !has_dot && !has_x && !has_e ? has_dot = true : false; + } + if (ch === "n") { + is_big_int = true; + return true; + } + return RE_NUM_LITERAL.test(ch); + }); + if (prefix) + num = prefix + num; + LATEST_RAW = num; + if (RE_OCT_NUMBER.test(num) && next_token.has_directive("use strict")) { + parse_error("Legacy octal literals are not allowed in strict mode"); + } + if (numeric_separator) { + if (num.endsWith("_")) { + parse_error("Numeric separators are not allowed at the end of numeric literals"); + } else if (num.includes("__")) { + parse_error("Only one underscore is allowed as numeric separator"); + } + num = num.replace(/_/g, ""); + } + if (num.endsWith("n")) { + const without_n = num.slice(0, -1); + const allow_e = RE_HEX_NUMBER.test(without_n); + const valid2 = parse_js_number(without_n, allow_e); + if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid2)) + return token("big_int", without_n); + parse_error("Invalid or unexpected token"); + } + var valid = parse_js_number(num); + if (!isNaN(valid)) { + return token("num", valid); + } else { + parse_error("Invalid syntax: " + num); + } + } + function is_octal(ch) { + return ch >= "0" && ch <= "7"; + } + function read_escaped_char(in_string, strict_hex, template_string) { + var ch = next(true, in_string); + switch (ch.charCodeAt(0)) { + case 110: + return "\n"; + case 114: + return "\r"; + case 116: + return " "; + case 98: + return "\b"; + case 118: + return "\v"; + case 102: + return "\f"; + case 120: + return String.fromCharCode(hex_bytes(2, strict_hex)); + case 117: + if (peek() == "{") { + next(true); + if (peek() === "}") + parse_error("Expecting hex-character between {}"); + while (peek() == "0") + next(true); + var result, length = find("}", true) - S.pos; + if (length > 6 || (result = hex_bytes(length, strict_hex)) > 1114111) { + parse_error("Unicode reference out of bounds"); + } + next(true); + return from_char_code(result); + } + return String.fromCharCode(hex_bytes(4, strict_hex)); + case 10: + return ""; + case 13: + if (peek() == "\n") { + next(true, in_string); + return ""; + } + } + if (is_octal(ch)) { + if (template_string && strict_hex) { + const represents_null_character = ch === "0" && !is_octal(peek()); + if (!represents_null_character) { + parse_error("Octal escape sequences are not allowed in template strings"); + } + } + return read_octal_escape_sequence(ch, strict_hex); + } + return ch; + } + function read_octal_escape_sequence(ch, strict_octal) { + var p = peek(); + if (p >= "0" && p <= "7") { + ch += next(true); + if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7") + ch += next(true); + } + if (ch === "0") + return "\0"; + if (ch.length > 0 && next_token.has_directive("use strict") && strict_octal) + parse_error("Legacy octal escape sequences are not allowed in strict mode"); + return String.fromCharCode(parseInt(ch, 8)); + } + function hex_bytes(n, strict_hex) { + var num = 0; + for (; n > 0; --n) { + if (!strict_hex && isNaN(parseInt(peek(), 16))) { + return parseInt(num, 16) || ""; + } + var digit = next(true); + if (isNaN(parseInt(digit, 16))) + parse_error("Invalid hex-character pattern in string"); + num += digit; + } + return parseInt(num, 16); + } + var read_string = with_eof_error("Unterminated string constant", function() { + const start_pos = S.pos; + var quote = next(), ret = []; + for (; ; ) { + var ch = next(true, true); + if (ch == "\\") + ch = read_escaped_char(true, true); + else if (ch == "\r" || ch == "\n") + parse_error("Unterminated string constant"); + else if (ch == quote) + break; + ret.push(ch); + } + var tok = token("string", ret.join("")); + LATEST_RAW = S.text.slice(start_pos, S.pos); + tok.quote = quote; + return tok; + }); + var read_template_characters = with_eof_error("Unterminated template", function(begin) { + if (begin) { + S.template_braces.push(S.brace_counter); + } + var content = "", raw = "", ch, tok; + next(true, true); + while ((ch = next(true, true)) != "`") { + if (ch == "\r") { + if (peek() == "\n") + ++S.pos; + ch = "\n"; + } else if (ch == "$" && peek() == "{") { + next(true, true); + S.brace_counter++; + tok = token(begin ? "template_head" : "template_substitution", content); + TEMPLATE_RAWS.set(tok, raw); + tok.template_end = false; + return tok; + } + raw += ch; + if (ch == "\\") { + var tmp = S.pos; + var prev_is_tag = previous_token && (previous_token.type === "name" || previous_token.type === "punc" && (previous_token.value === ")" || previous_token.value === "]")); + ch = read_escaped_char(true, !prev_is_tag, true); + raw += S.text.substr(tmp, S.pos - tmp); + } + content += ch; + } + S.template_braces.pop(); + tok = token(begin ? "template_head" : "template_substitution", content); + TEMPLATE_RAWS.set(tok, raw); + tok.template_end = true; + return tok; + }); + function skip_line_comment(type) { + var regex_allowed = S.regex_allowed; + var i = find_eol(), ret; + if (i == -1) { + ret = S.text.substr(S.pos); + S.pos = S.text.length; + } else { + ret = S.text.substring(S.pos, i); + S.pos = i; + } + S.col = S.tokcol + (S.pos - S.tokpos); + S.comments_before.push(token(type, ret, true)); + S.regex_allowed = regex_allowed; + return next_token; + } + var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function() { + var regex_allowed = S.regex_allowed; + var i = find("*/", true); + var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, "\n"); + forward(get_full_char_length(text) + 2); + S.comments_before.push(token("comment2", text, true)); + S.newline_before = S.newline_before || text.includes("\n"); + S.regex_allowed = regex_allowed; + return next_token; + }); + var read_name = with_eof_error("Unterminated identifier name", function() { + var name = [], ch, escaped = false; + var read_escaped_identifier_char = function() { + escaped = true; + next(); + if (peek() !== "u") { + parse_error("Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}"); + } + return read_escaped_char(false, true); + }; + if ((ch = peek()) === "\\") { + ch = read_escaped_identifier_char(); + if (!is_identifier_start(ch)) { + parse_error("First identifier char is an invalid identifier char"); + } + } else if (is_identifier_start(ch)) { + next(); + } else { + return ""; + } + name.push(ch); + while ((ch = peek()) != null) { + if ((ch = peek()) === "\\") { + ch = read_escaped_identifier_char(); + if (!is_identifier_char(ch)) { + parse_error("Invalid escaped identifier char"); + } + } else { + if (!is_identifier_char(ch)) { + break; + } + next(); + } + name.push(ch); + } + const name_str = name.join(""); + if (RESERVED_WORDS.has(name_str) && escaped) { + parse_error("Escaped characters are not allowed in keywords"); + } + return name_str; + }); + var read_regexp = with_eof_error("Unterminated regular expression", function(source) { + var prev_backslash = false, ch, in_class = false; + while (ch = next(true)) + if (NEWLINE_CHARS.has(ch)) { + parse_error("Unexpected line terminator"); + } else if (prev_backslash) { + source += "\\" + ch; + prev_backslash = false; + } else if (ch == "[") { + in_class = true; + source += ch; + } else if (ch == "]" && in_class) { + in_class = false; + source += ch; + } else if (ch == "/" && !in_class) { + break; + } else if (ch == "\\") { + prev_backslash = true; + } else { + source += ch; + } + const flags = read_name(); + return token("regexp", "/" + source + "/" + flags); + }); + function read_operator(prefix) { + function grow(op) { + if (!peek()) + return op; + var bigger = op + peek(); + if (OPERATORS.has(bigger)) { + next(); + return grow(bigger); + } else { + return op; + } + } + return token("operator", grow(prefix || next())); + } + function handle_slash() { + next(); + switch (peek()) { + case "/": + next(); + return skip_line_comment("comment1"); + case "*": + next(); + return skip_multiline_comment(); + } + return S.regex_allowed ? read_regexp("") : read_operator("/"); + } + function handle_eq_sign() { + next(); + if (peek() === ">") { + next(); + return token("arrow", "=>"); + } else { + return read_operator("="); + } + } + function handle_dot() { + next(); + if (is_digit(peek().charCodeAt(0))) { + return read_num("."); + } + if (peek() === ".") { + next(); + next(); + return token("expand", "..."); + } + return token("punc", "."); + } + function read_word() { + var word = read_name(); + if (prev_was_dot) + return token("name", word); + return KEYWORDS_ATOM.has(word) ? token("atom", word) : !KEYWORDS.has(word) ? token("name", word) : OPERATORS.has(word) ? token("operator", word) : token("keyword", word); + } + function read_private_word() { + next(); + return token("privatename", read_name()); + } + function with_eof_error(eof_error, cont) { + return function(x) { + try { + return cont(x); + } catch (ex) { + if (ex === EX_EOF) + parse_error(eof_error); + else + throw ex; + } + }; + } + function next_token(force_regexp) { + if (force_regexp != null) + return read_regexp(force_regexp); + if (shebang && S.pos == 0 && looking_at("#!")) { + start_token(); + forward(2); + skip_line_comment("comment5"); + } + for (; ; ) { + skip_whitespace(); + start_token(); + if (html5_comments) { + if (looking_at("") && S.newline_before) { + forward(3); + skip_line_comment("comment4"); + continue; + } + } + var ch = peek(); + if (!ch) + return token("eof"); + var code = ch.charCodeAt(0); + switch (code) { + case 34: + case 39: + return read_string(); + case 46: + return handle_dot(); + case 47: { + var tok = handle_slash(); + if (tok === next_token) + continue; + return tok; + } + case 61: + return handle_eq_sign(); + case 63: { + if (!is_option_chain_op()) + break; + next(); + next(); + return token("punc", "?."); + } + case 96: + return read_template_characters(true); + case 123: + S.brace_counter++; + break; + case 125: + S.brace_counter--; + if (S.template_braces.length > 0 && S.template_braces[S.template_braces.length - 1] === S.brace_counter) + return read_template_characters(false); + break; + } + if (is_digit(code)) + return read_num(); + if (PUNC_CHARS.has(ch)) + return token("punc", next()); + if (OPERATOR_CHARS.has(ch)) + return read_operator(); + if (code == 92 || is_identifier_start(ch)) + return read_word(); + if (code == 35) + return read_private_word(); + break; + } + parse_error("Unexpected character '" + ch + "'"); + } + next_token.next = next; + next_token.peek = peek; + next_token.context = function(nc) { + if (nc) + S = nc; + return S; + }; + next_token.add_directive = function(directive) { + S.directive_stack[S.directive_stack.length - 1].push(directive); + if (S.directives[directive] === void 0) { + S.directives[directive] = 1; + } else { + S.directives[directive]++; + } + }; + next_token.push_directives_stack = function() { + S.directive_stack.push([]); + }; + next_token.pop_directives_stack = function() { + var directives2 = S.directive_stack[S.directive_stack.length - 1]; + for (var i = 0; i < directives2.length; i++) { + S.directives[directives2[i]]--; + } + S.directive_stack.pop(); + }; + next_token.has_directive = function(directive) { + return S.directives[directive] > 0; + }; + return next_token; + } + var UNARY_PREFIX = makePredicate([ + "typeof", + "void", + "delete", + "--", + "++", + "!", + "~", + "-", + "+" + ]); + var UNARY_POSTFIX = makePredicate(["--", "++"]); + var ASSIGNMENT = makePredicate(["=", "+=", "-=", "??=", "&&=", "||=", "/=", "*=", "**=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="]); + var LOGICAL_ASSIGNMENT = makePredicate(["??=", "&&=", "||="]); + var PRECEDENCE = function(a, ret) { + for (var i = 0; i < a.length; ++i) { + var b = a[i]; + for (var j = 0; j < b.length; ++j) { + ret[b[j]] = i + 1; + } + } + return ret; + }([ + ["||"], + ["??"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!=="], + ["<", ">", "<=", ">=", "in", "instanceof"], + [">>", "<<", ">>>"], + ["+", "-"], + ["*", "/", "%"], + ["**"] + ], {}); + var ATOMIC_START_TOKEN = makePredicate(["atom", "num", "big_int", "string", "regexp", "name"]); + function parse($TEXT, options) { + const outer_comments_before_counts = /* @__PURE__ */ new WeakMap(); + options = defaults(options, { + bare_returns: false, + ecma: null, + expression: false, + filename: null, + html5_comments: true, + module: false, + shebang: true, + strict: false, + toplevel: null + }, true); + var S = { + input: typeof $TEXT == "string" ? tokenizer($TEXT, options.filename, options.html5_comments, options.shebang) : $TEXT, + token: null, + prev: null, + peeked: null, + in_function: 0, + in_async: -1, + in_generator: -1, + in_directives: true, + in_loop: 0, + labels: [] + }; + S.token = next(); + function is(type, value) { + return is_token(S.token, type, value); + } + function peek() { + return S.peeked || (S.peeked = S.input()); + } + function next() { + S.prev = S.token; + if (!S.peeked) + peek(); + S.token = S.peeked; + S.peeked = null; + S.in_directives = S.in_directives && (S.token.type == "string" || is("punc", ";")); + return S.token; + } + function prev() { + return S.prev; + } + function croak(msg, line, col, pos) { + var ctx = S.input.context(); + js_error(msg, ctx.filename, line != null ? line : ctx.tokline, col != null ? col : ctx.tokcol, pos != null ? pos : ctx.tokpos); + } + function token_error(token, msg) { + croak(msg, token.line, token.col); + } + function unexpected(token) { + if (token == null) + token = S.token; + token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); + } + function expect_token(type, val) { + if (is(type, val)) { + return next(); + } + token_error(S.token, "Unexpected token " + S.token.type + " \xAB" + S.token.value + "\xBB, expected " + type + " \xAB" + val + "\xBB"); + } + function expect(punc) { + return expect_token("punc", punc); + } + function has_newline_before(token) { + return token.nlb || !token.comments_before.every((comment) => !comment.nlb); + } + function can_insert_semicolon() { + return !options.strict && (is("eof") || is("punc", "}") || has_newline_before(S.token)); + } + function is_in_generator() { + return S.in_generator === S.in_function; + } + function is_in_async() { + return S.in_async === S.in_function; + } + function can_await() { + return S.in_async === S.in_function || S.in_function === 0 && S.input.has_directive("use strict"); + } + function semicolon(optional) { + if (is("punc", ";")) + next(); + else if (!optional && !can_insert_semicolon()) + unexpected(); + } + function parenthesised() { + expect("("); + var exp = expression(true); + expect(")"); + return exp; + } + function embed_tokens(parser) { + return function _embed_tokens_wrapper(...args) { + const start = S.token; + const expr = parser(...args); + expr.start = start; + expr.end = prev(); + return expr; + }; + } + function handle_regexp() { + if (is("operator", "/") || is("operator", "/=")) { + S.peeked = null; + S.token = S.input(S.token.value.substr(1)); + } + } + var statement = embed_tokens(function statement2(is_export_default, is_for_body, is_if_body) { + handle_regexp(); + switch (S.token.type) { + case "string": + if (S.in_directives) { + var token = peek(); + if (!LATEST_RAW.includes("\\") && (is_token(token, "punc", ";") || is_token(token, "punc", "}") || has_newline_before(token) || is_token(token, "eof"))) { + S.input.add_directive(S.token.value); + } else { + S.in_directives = false; + } + } + var dir = S.in_directives, stat = simple_statement(); + return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat; + case "template_head": + case "num": + case "big_int": + case "regexp": + case "operator": + case "atom": + return simple_statement(); + case "name": + case "privatename": + if (is("privatename") && !S.in_class) + croak("Private field must be used in an enclosing class"); + if (S.token.value == "async" && is_token(peek(), "keyword", "function")) { + next(); + next(); + if (is_for_body) { + croak("functions are not allowed as the body of a loop"); + } + return function_(AST_Defun, false, true, is_export_default); + } + if (S.token.value == "import" && !is_token(peek(), "punc", "(") && !is_token(peek(), "punc", ".")) { + next(); + var node = import_statement(); + semicolon(); + return node; + } + return is_token(peek(), "punc", ":") ? labeled_statement() : simple_statement(); + case "punc": + switch (S.token.value) { + case "{": + return new AST_BlockStatement({ + start: S.token, + body: block_(), + end: prev() + }); + case "[": + case "(": + return simple_statement(); + case ";": + S.in_directives = false; + next(); + return new AST_EmptyStatement(); + default: + unexpected(); + } + case "keyword": + switch (S.token.value) { + case "break": + next(); + return break_cont(AST_Break); + case "continue": + next(); + return break_cont(AST_Continue); + case "debugger": + next(); + semicolon(); + return new AST_Debugger(); + case "do": + next(); + var body = in_loop(statement2); + expect_token("keyword", "while"); + var condition = parenthesised(); + semicolon(true); + return new AST_Do({ + body, + condition + }); + case "while": + next(); + return new AST_While({ + condition: parenthesised(), + body: in_loop(function() { + return statement2(false, true); + }) + }); + case "for": + next(); + return for_(); + case "class": + next(); + if (is_for_body) { + croak("classes are not allowed as the body of a loop"); + } + if (is_if_body) { + croak("classes are not allowed as the body of an if"); + } + return class_(AST_DefClass, is_export_default); + case "function": + next(); + if (is_for_body) { + croak("functions are not allowed as the body of a loop"); + } + return function_(AST_Defun, false, false, is_export_default); + case "if": + next(); + return if_(); + case "return": + if (S.in_function == 0 && !options.bare_returns) + croak("'return' outside of function"); + next(); + var value = null; + if (is("punc", ";")) { + next(); + } else if (!can_insert_semicolon()) { + value = expression(true); + semicolon(); + } + return new AST_Return({ + value + }); + case "switch": + next(); + return new AST_Switch({ + expression: parenthesised(), + body: in_loop(switch_body_) + }); + case "throw": + next(); + if (has_newline_before(S.token)) + croak("Illegal newline after 'throw'"); + var value = expression(true); + semicolon(); + return new AST_Throw({ + value + }); + case "try": + next(); + return try_(); + case "var": + next(); + var node = var_(); + semicolon(); + return node; + case "let": + next(); + var node = let_(); + semicolon(); + return node; + case "const": + next(); + var node = const_(); + semicolon(); + return node; + case "with": + if (S.input.has_directive("use strict")) { + croak("Strict mode may not include a with statement"); + } + next(); + return new AST_With({ + expression: parenthesised(), + body: statement2() + }); + case "export": + if (!is_token(peek(), "punc", "(")) { + next(); + var node = export_statement(); + if (is("punc", ";")) + semicolon(); + return node; + } + } + } + unexpected(); + }); + function labeled_statement() { + var label = as_symbol(AST_Label); + if (label.name === "await" && is_in_async()) { + token_error(S.prev, "await cannot be used as label inside async function"); + } + if (S.labels.some((l) => l.name === label.name)) { + croak("Label " + label.name + " defined twice"); + } + expect(":"); + S.labels.push(label); + var stat = statement(); + S.labels.pop(); + if (!(stat instanceof AST_IterationStatement)) { + label.references.forEach(function(ref) { + if (ref instanceof AST_Continue) { + ref = ref.label.start; + croak("Continue label `" + label.name + "` refers to non-IterationStatement.", ref.line, ref.col, ref.pos); + } + }); + } + return new AST_LabeledStatement({ body: stat, label }); + } + function simple_statement(tmp) { + return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) }); + } + function break_cont(type) { + var label = null, ldef; + if (!can_insert_semicolon()) { + label = as_symbol(AST_LabelRef, true); + } + if (label != null) { + ldef = S.labels.find((l) => l.name === label.name); + if (!ldef) + croak("Undefined label " + label.name); + label.thedef = ldef; + } else if (S.in_loop == 0) + croak(type.TYPE + " not inside a loop or switch"); + semicolon(); + var stat = new type({ label }); + if (ldef) + ldef.references.push(stat); + return stat; + } + function for_() { + var for_await_error = "`for await` invalid in this context"; + var await_tok = S.token; + if (await_tok.type == "name" && await_tok.value == "await") { + if (!can_await()) { + token_error(await_tok, for_await_error); + } + next(); + } else { + await_tok = false; + } + expect("("); + var init = null; + if (!is("punc", ";")) { + init = is("keyword", "var") ? (next(), var_(true)) : is("keyword", "let") ? (next(), let_(true)) : is("keyword", "const") ? (next(), const_(true)) : expression(true, true); + var is_in = is("operator", "in"); + var is_of = is("name", "of"); + if (await_tok && !is_of) { + token_error(await_tok, for_await_error); + } + if (is_in || is_of) { + if (init instanceof AST_Definitions) { + if (init.definitions.length > 1) + token_error(init.start, "Only one variable declaration allowed in for..in loop"); + } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) { + token_error(init.start, "Invalid left-hand side in for..in loop"); + } + next(); + if (is_in) { + return for_in(init); + } else { + return for_of(init, !!await_tok); + } + } + } else if (await_tok) { + token_error(await_tok, for_await_error); + } + return regular_for(init); + } + function regular_for(init) { + expect(";"); + var test = is("punc", ";") ? null : expression(true); + expect(";"); + var step = is("punc", ")") ? null : expression(true); + expect(")"); + return new AST_For({ + init, + condition: test, + step, + body: in_loop(function() { + return statement(false, true); + }) + }); + } + function for_of(init, is_await) { + var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null; + var obj = expression(true); + expect(")"); + return new AST_ForOf({ + await: is_await, + init, + name: lhs, + object: obj, + body: in_loop(function() { + return statement(false, true); + }) + }); + } + function for_in(init) { + var obj = expression(true); + expect(")"); + return new AST_ForIn({ + init, + object: obj, + body: in_loop(function() { + return statement(false, true); + }) + }); + } + var arrow_function = function(start, argnames, is_async) { + if (has_newline_before(S.token)) { + croak("Unexpected newline before arrow (=>)"); + } + expect_token("arrow", "=>"); + var body = _function_body(is("punc", "{"), false, is_async); + var end = body instanceof Array && body.length ? body[body.length - 1].end : body instanceof Array ? start : body.end; + return new AST_Arrow({ + start, + end, + async: is_async, + argnames, + body + }); + }; + var function_ = function(ctor, is_generator_property, is_async, is_export_default) { + var in_statement = ctor === AST_Defun; + var is_generator = is("operator", "*"); + if (is_generator) { + next(); + } + var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null; + if (in_statement && !name) { + if (is_export_default) { + ctor = AST_Function; + } else { + unexpected(); + } + } + if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration)) + unexpected(prev()); + var args = []; + var body = _function_body(true, is_generator || is_generator_property, is_async, name, args); + return new ctor({ + start: args.start, + end: body.end, + is_generator, + async: is_async, + name, + argnames: args, + body + }); + }; + class UsedParametersTracker { + constructor(is_parameter, strict, duplicates_ok = false) { + this.is_parameter = is_parameter; + this.duplicates_ok = duplicates_ok; + this.parameters = /* @__PURE__ */ new Set(); + this.duplicate = null; + this.default_assignment = false; + this.spread = false; + this.strict_mode = !!strict; + } + add_parameter(token) { + if (this.parameters.has(token.value)) { + if (this.duplicate === null) { + this.duplicate = token; + } + this.check_strict(); + } else { + this.parameters.add(token.value); + if (this.is_parameter) { + switch (token.value) { + case "arguments": + case "eval": + case "yield": + if (this.strict_mode) { + token_error(token, "Unexpected " + token.value + " identifier as parameter inside strict mode"); + } + break; + default: + if (RESERVED_WORDS.has(token.value)) { + unexpected(); + } + } + } + } + } + mark_default_assignment(token) { + if (this.default_assignment === false) { + this.default_assignment = token; + } + } + mark_spread(token) { + if (this.spread === false) { + this.spread = token; + } + } + mark_strict_mode() { + this.strict_mode = true; + } + is_strict() { + return this.default_assignment !== false || this.spread !== false || this.strict_mode; + } + check_strict() { + if (this.is_strict() && this.duplicate !== null && !this.duplicates_ok) { + token_error(this.duplicate, "Parameter " + this.duplicate.value + " was used already"); + } + } + } + function parameters(params) { + var used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict")); + expect("("); + while (!is("punc", ")")) { + var param = parameter(used_parameters); + params.push(param); + if (!is("punc", ")")) { + expect(","); + } + if (param instanceof AST_Expansion) { + break; + } + } + next(); + } + function parameter(used_parameters, symbol_type) { + var param; + var expand = false; + if (used_parameters === void 0) { + used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict")); + } + if (is("expand", "...")) { + expand = S.token; + used_parameters.mark_spread(S.token); + next(); + } + param = binding_element(used_parameters, symbol_type); + if (is("operator", "=") && expand === false) { + used_parameters.mark_default_assignment(S.token); + next(); + param = new AST_DefaultAssign({ + start: param.start, + left: param, + operator: "=", + right: expression(false), + end: S.token + }); + } + if (expand !== false) { + if (!is("punc", ")")) { + unexpected(); + } + param = new AST_Expansion({ + start: expand, + expression: param, + end: expand + }); + } + used_parameters.check_strict(); + return param; + } + function binding_element(used_parameters, symbol_type) { + var elements = []; + var first = true; + var is_expand = false; + var expand_token; + var first_token = S.token; + if (used_parameters === void 0) { + const strict = S.input.has_directive("use strict"); + const duplicates_ok = symbol_type === AST_SymbolVar; + used_parameters = new UsedParametersTracker(false, strict, duplicates_ok); + } + symbol_type = symbol_type === void 0 ? AST_SymbolFunarg : symbol_type; + if (is("punc", "[")) { + next(); + while (!is("punc", "]")) { + if (first) { + first = false; + } else { + expect(","); + } + if (is("expand", "...")) { + is_expand = true; + expand_token = S.token; + used_parameters.mark_spread(S.token); + next(); + } + if (is("punc")) { + switch (S.token.value) { + case ",": + elements.push(new AST_Hole({ + start: S.token, + end: S.token + })); + continue; + case "]": + break; + case "[": + case "{": + elements.push(binding_element(used_parameters, symbol_type)); + break; + default: + unexpected(); + } + } else if (is("name")) { + used_parameters.add_parameter(S.token); + elements.push(as_symbol(symbol_type)); + } else { + croak("Invalid function parameter"); + } + if (is("operator", "=") && is_expand === false) { + used_parameters.mark_default_assignment(S.token); + next(); + elements[elements.length - 1] = new AST_DefaultAssign({ + start: elements[elements.length - 1].start, + left: elements[elements.length - 1], + operator: "=", + right: expression(false), + end: S.token + }); + } + if (is_expand) { + if (!is("punc", "]")) { + croak("Rest element must be last element"); + } + elements[elements.length - 1] = new AST_Expansion({ + start: expand_token, + expression: elements[elements.length - 1], + end: expand_token + }); + } + } + expect("]"); + used_parameters.check_strict(); + return new AST_Destructuring({ + start: first_token, + names: elements, + is_array: true, + end: prev() + }); + } else if (is("punc", "{")) { + next(); + while (!is("punc", "}")) { + if (first) { + first = false; + } else { + expect(","); + } + if (is("expand", "...")) { + is_expand = true; + expand_token = S.token; + used_parameters.mark_spread(S.token); + next(); + } + if (is("name") && (is_token(peek(), "punc") || is_token(peek(), "operator")) && [",", "}", "="].includes(peek().value)) { + used_parameters.add_parameter(S.token); + var start = prev(); + var value = as_symbol(symbol_type); + if (is_expand) { + elements.push(new AST_Expansion({ + start: expand_token, + expression: value, + end: value.end + })); + } else { + elements.push(new AST_ObjectKeyVal({ + start, + key: value.name, + value, + end: value.end + })); + } + } else if (is("punc", "}")) { + continue; + } else { + var property_token = S.token; + var property = as_property_name(); + if (property === null) { + unexpected(prev()); + } else if (prev().type === "name" && !is("punc", ":")) { + elements.push(new AST_ObjectKeyVal({ + start: prev(), + key: property, + value: new symbol_type({ + start: prev(), + name: property, + end: prev() + }), + end: prev() + })); + } else { + expect(":"); + elements.push(new AST_ObjectKeyVal({ + start: property_token, + quote: property_token.quote, + key: property, + value: binding_element(used_parameters, symbol_type), + end: prev() + })); + } + } + if (is_expand) { + if (!is("punc", "}")) { + croak("Rest element must be last element"); + } + } else if (is("operator", "=")) { + used_parameters.mark_default_assignment(S.token); + next(); + elements[elements.length - 1].value = new AST_DefaultAssign({ + start: elements[elements.length - 1].value.start, + left: elements[elements.length - 1].value, + operator: "=", + right: expression(false), + end: S.token + }); + } + } + expect("}"); + used_parameters.check_strict(); + return new AST_Destructuring({ + start: first_token, + names: elements, + is_array: false, + end: prev() + }); + } else if (is("name")) { + used_parameters.add_parameter(S.token); + return as_symbol(symbol_type); + } else { + croak("Invalid function parameter"); + } + } + function params_or_seq_(allow_arrows, maybe_sequence) { + var spread_token; + var invalid_sequence; + var trailing_comma; + var a = []; + expect("("); + while (!is("punc", ")")) { + if (spread_token) + unexpected(spread_token); + if (is("expand", "...")) { + spread_token = S.token; + if (maybe_sequence) + invalid_sequence = S.token; + next(); + a.push(new AST_Expansion({ + start: prev(), + expression: expression(), + end: S.token + })); + } else { + a.push(expression()); + } + if (!is("punc", ")")) { + expect(","); + if (is("punc", ")")) { + trailing_comma = prev(); + if (maybe_sequence) + invalid_sequence = trailing_comma; + } + } + } + expect(")"); + if (allow_arrows && is("arrow", "=>")) { + if (spread_token && trailing_comma) + unexpected(trailing_comma); + } else if (invalid_sequence) { + unexpected(invalid_sequence); + } + return a; + } + function _function_body(block, generator, is_async, name, args) { + var loop = S.in_loop; + var labels = S.labels; + var current_generator = S.in_generator; + var current_async = S.in_async; + ++S.in_function; + if (generator) + S.in_generator = S.in_function; + if (is_async) + S.in_async = S.in_function; + if (args) + parameters(args); + if (block) + S.in_directives = true; + S.in_loop = 0; + S.labels = []; + if (block) { + S.input.push_directives_stack(); + var a = block_(); + if (name) + _verify_symbol(name); + if (args) + args.forEach(_verify_symbol); + S.input.pop_directives_stack(); + } else { + var a = [new AST_Return({ + start: S.token, + value: expression(false), + end: S.token + })]; + } + --S.in_function; + S.in_loop = loop; + S.labels = labels; + S.in_generator = current_generator; + S.in_async = current_async; + return a; + } + function _await_expression() { + if (!can_await()) { + croak("Unexpected await expression outside async function", S.prev.line, S.prev.col, S.prev.pos); + } + return new AST_Await({ + start: prev(), + end: S.token, + expression: maybe_unary(true) + }); + } + function _yield_expression() { + if (!is_in_generator()) { + croak("Unexpected yield expression outside generator function", S.prev.line, S.prev.col, S.prev.pos); + } + var start = S.token; + var star = false; + var has_expression = true; + if (can_insert_semicolon() || is("punc") && PUNC_AFTER_EXPRESSION.has(S.token.value)) { + has_expression = false; + } else if (is("operator", "*")) { + star = true; + next(); + } + return new AST_Yield({ + start, + is_star: star, + expression: has_expression ? expression() : null, + end: prev() + }); + } + function if_() { + var cond = parenthesised(), body = statement(false, false, true), belse = null; + if (is("keyword", "else")) { + next(); + belse = statement(false, false, true); + } + return new AST_If({ + condition: cond, + body, + alternative: belse + }); + } + function block_() { + expect("{"); + var a = []; + while (!is("punc", "}")) { + if (is("eof")) + unexpected(); + a.push(statement()); + } + next(); + return a; + } + function switch_body_() { + expect("{"); + var a = [], cur = null, branch = null, tmp; + while (!is("punc", "}")) { + if (is("eof")) + unexpected(); + if (is("keyword", "case")) { + if (branch) + branch.end = prev(); + cur = []; + branch = new AST_Case({ + start: (tmp = S.token, next(), tmp), + expression: expression(true), + body: cur + }); + a.push(branch); + expect(":"); + } else if (is("keyword", "default")) { + if (branch) + branch.end = prev(); + cur = []; + branch = new AST_Default({ + start: (tmp = S.token, next(), expect(":"), tmp), + body: cur + }); + a.push(branch); + } else { + if (!cur) + unexpected(); + cur.push(statement()); + } + } + if (branch) + branch.end = prev(); + next(); + return a; + } + function try_() { + var body, bcatch = null, bfinally = null; + body = new AST_TryBlock({ + start: S.token, + body: block_(), + end: prev() + }); + if (is("keyword", "catch")) { + var start = S.token; + next(); + if (is("punc", "{")) { + var name = null; + } else { + expect("("); + var name = parameter(void 0, AST_SymbolCatch); + expect(")"); + } + bcatch = new AST_Catch({ + start, + argname: name, + body: block_(), + end: prev() + }); + } + if (is("keyword", "finally")) { + var start = S.token; + next(); + bfinally = new AST_Finally({ + start, + body: block_(), + end: prev() + }); + } + if (!bcatch && !bfinally) + croak("Missing catch/finally blocks"); + return new AST_Try({ + body, + bcatch, + bfinally + }); + } + function vardefs(no_in, kind) { + var var_defs = []; + var def; + for (; ; ) { + var sym_type = kind === "var" ? AST_SymbolVar : kind === "const" ? AST_SymbolConst : kind === "let" ? AST_SymbolLet : null; + if (is("punc", "{") || is("punc", "[")) { + def = new AST_VarDef({ + start: S.token, + name: binding_element(void 0, sym_type), + value: is("operator", "=") ? (expect_token("operator", "="), expression(false, no_in)) : null, + end: prev() + }); + } else { + def = new AST_VarDef({ + start: S.token, + name: as_symbol(sym_type), + value: is("operator", "=") ? (next(), expression(false, no_in)) : !no_in && kind === "const" ? croak("Missing initializer in const declaration") : null, + end: prev() + }); + if (def.name.name == "import") + croak("Unexpected token: import"); + } + var_defs.push(def); + if (!is("punc", ",")) + break; + next(); + } + return var_defs; + } + var var_ = function(no_in) { + return new AST_Var({ + start: prev(), + definitions: vardefs(no_in, "var"), + end: prev() + }); + }; + var let_ = function(no_in) { + return new AST_Let({ + start: prev(), + definitions: vardefs(no_in, "let"), + end: prev() + }); + }; + var const_ = function(no_in) { + return new AST_Const({ + start: prev(), + definitions: vardefs(no_in, "const"), + end: prev() + }); + }; + var new_ = function(allow_calls) { + var start = S.token; + expect_token("operator", "new"); + if (is("punc", ".")) { + next(); + expect_token("name", "target"); + return subscripts(new AST_NewTarget({ + start, + end: prev() + }), allow_calls); + } + var newexp = expr_atom(false), args; + if (is("punc", "(")) { + next(); + args = expr_list(")", true); + } else { + args = []; + } + var call = new AST_New({ + start, + expression: newexp, + args, + end: prev() + }); + annotate(call); + return subscripts(call, allow_calls); + }; + function as_atom_node() { + var tok = S.token, ret; + switch (tok.type) { + case "name": + ret = _make_symbol(AST_SymbolRef); + break; + case "num": + ret = new AST_Number({ + start: tok, + end: tok, + value: tok.value, + raw: LATEST_RAW + }); + break; + case "big_int": + ret = new AST_BigInt({ start: tok, end: tok, value: tok.value }); + break; + case "string": + ret = new AST_String({ + start: tok, + end: tok, + value: tok.value, + quote: tok.quote + }); + annotate(ret); + break; + case "regexp": + const [_, source, flags] = tok.value.match(/^\/(.*)\/(\w*)$/); + ret = new AST_RegExp({ start: tok, end: tok, value: { source, flags } }); + break; + case "atom": + switch (tok.value) { + case "false": + ret = new AST_False({ start: tok, end: tok }); + break; + case "true": + ret = new AST_True({ start: tok, end: tok }); + break; + case "null": + ret = new AST_Null({ start: tok, end: tok }); + break; + } + break; + } + next(); + return ret; + } + function to_fun_args(ex, default_seen_above) { + var insert_default = function(ex2, default_value) { + if (default_value) { + return new AST_DefaultAssign({ + start: ex2.start, + left: ex2, + operator: "=", + right: default_value, + end: default_value.end + }); + } + return ex2; + }; + if (ex instanceof AST_Object) { + return insert_default(new AST_Destructuring({ + start: ex.start, + end: ex.end, + is_array: false, + names: ex.properties.map((prop) => to_fun_args(prop)) + }), default_seen_above); + } else if (ex instanceof AST_ObjectKeyVal) { + ex.value = to_fun_args(ex.value); + return insert_default(ex, default_seen_above); + } else if (ex instanceof AST_Hole) { + return ex; + } else if (ex instanceof AST_Destructuring) { + ex.names = ex.names.map((name) => to_fun_args(name)); + return insert_default(ex, default_seen_above); + } else if (ex instanceof AST_SymbolRef) { + return insert_default(new AST_SymbolFunarg({ + name: ex.name, + start: ex.start, + end: ex.end + }), default_seen_above); + } else if (ex instanceof AST_Expansion) { + ex.expression = to_fun_args(ex.expression); + return insert_default(ex, default_seen_above); + } else if (ex instanceof AST_Array) { + return insert_default(new AST_Destructuring({ + start: ex.start, + end: ex.end, + is_array: true, + names: ex.elements.map((elm) => to_fun_args(elm)) + }), default_seen_above); + } else if (ex instanceof AST_Assign) { + return insert_default(to_fun_args(ex.left, ex.right), default_seen_above); + } else if (ex instanceof AST_DefaultAssign) { + ex.left = to_fun_args(ex.left); + return ex; + } else { + croak("Invalid function parameter", ex.start.line, ex.start.col); + } + } + var expr_atom = function(allow_calls, allow_arrows) { + if (is("operator", "new")) { + return new_(allow_calls); + } + if (is("name", "import") && is_token(peek(), "punc", ".")) { + return import_meta(allow_calls); + } + var start = S.token; + var peeked; + var async = is("name", "async") && (peeked = peek()).value != "[" && peeked.type != "arrow" && as_atom_node(); + if (is("punc")) { + switch (S.token.value) { + case "(": + if (async && !allow_calls) + break; + var exprs = params_or_seq_(allow_arrows, !async); + if (allow_arrows && is("arrow", "=>")) { + return arrow_function(start, exprs.map((e) => to_fun_args(e)), !!async); + } + var ex = async ? new AST_Call({ + expression: async, + args: exprs + }) : to_expr_or_sequence(start, exprs); + if (ex.start) { + const outer_comments_before = start.comments_before.length; + outer_comments_before_counts.set(start, outer_comments_before); + ex.start.comments_before.unshift(...start.comments_before); + start.comments_before = ex.start.comments_before; + if (outer_comments_before == 0 && start.comments_before.length > 0) { + var comment = start.comments_before[0]; + if (!comment.nlb) { + comment.nlb = start.nlb; + start.nlb = false; + } + } + start.comments_after = ex.start.comments_after; + } + ex.start = start; + var end = prev(); + if (ex.end) { + end.comments_before = ex.end.comments_before; + ex.end.comments_after.push(...end.comments_after); + end.comments_after = ex.end.comments_after; + } + ex.end = end; + if (ex instanceof AST_Call) + annotate(ex); + return subscripts(ex, allow_calls); + case "[": + return subscripts(array_(), allow_calls); + case "{": + return subscripts(object_or_destructuring_(), allow_calls); + } + if (!async) + unexpected(); + } + if (allow_arrows && is("name") && is_token(peek(), "arrow")) { + var param = new AST_SymbolFunarg({ + name: S.token.value, + start, + end: start + }); + next(); + return arrow_function(start, [param], !!async); + } + if (is("keyword", "function")) { + next(); + var func = function_(AST_Function, false, !!async); + func.start = start; + func.end = prev(); + return subscripts(func, allow_calls); + } + if (async) + return subscripts(async, allow_calls); + if (is("keyword", "class")) { + next(); + var cls = class_(AST_ClassExpression); + cls.start = start; + cls.end = prev(); + return subscripts(cls, allow_calls); + } + if (is("template_head")) { + return subscripts(template_string(), allow_calls); + } + if (is("privatename")) { + if (!S.in_class) { + croak("Private field must be used in an enclosing class"); + } + const start2 = S.token; + const key = new AST_SymbolPrivateProperty({ + start: start2, + name: start2.value, + end: start2 + }); + next(); + expect_token("operator", "in"); + const private_in = new AST_PrivateIn({ + start: start2, + key, + value: subscripts(as_atom_node(), allow_calls), + end: prev() + }); + return subscripts(private_in, allow_calls); + } + if (ATOMIC_START_TOKEN.has(S.token.type)) { + return subscripts(as_atom_node(), allow_calls); + } + unexpected(); + }; + function template_string() { + var segments = [], start = S.token; + segments.push(new AST_TemplateSegment({ + start: S.token, + raw: TEMPLATE_RAWS.get(S.token), + value: S.token.value, + end: S.token + })); + while (!S.token.template_end) { + next(); + handle_regexp(); + segments.push(expression(true)); + segments.push(new AST_TemplateSegment({ + start: S.token, + raw: TEMPLATE_RAWS.get(S.token), + value: S.token.value, + end: S.token + })); + } + next(); + return new AST_TemplateString({ + start, + segments, + end: S.token + }); + } + function expr_list(closing, allow_trailing_comma, allow_empty) { + var first = true, a = []; + while (!is("punc", closing)) { + if (first) + first = false; + else + expect(","); + if (allow_trailing_comma && is("punc", closing)) + break; + if (is("punc", ",") && allow_empty) { + a.push(new AST_Hole({ start: S.token, end: S.token })); + } else if (is("expand", "...")) { + next(); + a.push(new AST_Expansion({ start: prev(), expression: expression(), end: S.token })); + } else { + a.push(expression(false)); + } + } + next(); + return a; + } + var array_ = embed_tokens(function() { + expect("["); + return new AST_Array({ + elements: expr_list("]", !options.strict, true) + }); + }); + var create_accessor = embed_tokens((is_generator, is_async) => { + return function_(AST_Accessor, is_generator, is_async); + }); + var object_or_destructuring_ = embed_tokens(function object_or_destructuring_2() { + var start = S.token, first = true, a = []; + expect("{"); + while (!is("punc", "}")) { + if (first) + first = false; + else + expect(","); + if (!options.strict && is("punc", "}")) + break; + start = S.token; + if (start.type == "expand") { + next(); + a.push(new AST_Expansion({ + start, + expression: expression(false), + end: prev() + })); + continue; + } + if (is("privatename")) { + croak("private fields are not allowed in an object"); + } + var name = as_property_name(); + var value; + if (!is("punc", ":")) { + var concise = concise_method_or_getset(name, start); + if (concise) { + a.push(concise); + continue; + } + value = new AST_SymbolRef({ + start: prev(), + name, + end: prev() + }); + } else if (name === null) { + unexpected(prev()); + } else { + next(); + value = expression(false); + } + if (is("operator", "=")) { + next(); + value = new AST_Assign({ + start, + left: value, + operator: "=", + right: expression(false), + logical: false, + end: prev() + }); + } + const kv = new AST_ObjectKeyVal({ + start, + quote: start.quote, + key: name instanceof AST_Node ? name : "" + name, + value, + end: prev() + }); + a.push(annotate(kv)); + } + next(); + return new AST_Object({ properties: a }); + }); + function class_(KindOfClass, is_export_default) { + var start, method, class_name, extends_, a = []; + S.input.push_directives_stack(); + S.input.add_directive("use strict"); + if (S.token.type == "name" && S.token.value != "extends") { + class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass); + } + if (KindOfClass === AST_DefClass && !class_name) { + if (is_export_default) { + KindOfClass = AST_ClassExpression; + } else { + unexpected(); + } + } + if (S.token.value == "extends") { + next(); + extends_ = expression(true); + } + expect("{"); + const save_in_class = S.in_class; + S.in_class = true; + while (is("punc", ";")) { + next(); + } + while (!is("punc", "}")) { + start = S.token; + method = concise_method_or_getset(as_property_name(), start, true); + if (!method) { + unexpected(); + } + a.push(method); + while (is("punc", ";")) { + next(); + } + } + S.in_class = save_in_class; + S.input.pop_directives_stack(); + next(); + return new KindOfClass({ + start, + name: class_name, + extends: extends_, + properties: a, + end: prev() + }); + } + function concise_method_or_getset(name, start, is_class) { + const get_symbol_ast = (name2, SymbolClass = AST_SymbolMethod) => { + if (typeof name2 === "string" || typeof name2 === "number") { + return new SymbolClass({ + start, + name: "" + name2, + end: prev() + }); + } else if (name2 === null) { + unexpected(); + } + return name2; + }; + const is_not_method_start = () => !is("punc", "(") && !is("punc", ",") && !is("punc", "}") && !is("punc", ";") && !is("operator", "="); + var is_async = false; + var is_static = false; + var is_generator = false; + var is_private = false; + var accessor_type = null; + if (is_class && name === "static" && is_not_method_start()) { + const static_block = class_static_block(); + if (static_block != null) { + return static_block; + } + is_static = true; + name = as_property_name(); + } + if (name === "async" && is_not_method_start()) { + is_async = true; + name = as_property_name(); + } + if (prev().type === "operator" && prev().value === "*") { + is_generator = true; + name = as_property_name(); + } + if ((name === "get" || name === "set") && is_not_method_start()) { + accessor_type = name; + name = as_property_name(); + } + if (prev().type === "privatename") { + is_private = true; + } + const property_token = prev(); + if (accessor_type != null) { + if (!is_private) { + const AccessorClass = accessor_type === "get" ? AST_ObjectGetter : AST_ObjectSetter; + name = get_symbol_ast(name); + return annotate(new AccessorClass({ + start, + static: is_static, + key: name, + quote: name instanceof AST_SymbolMethod ? property_token.quote : void 0, + value: create_accessor(), + end: prev() + })); + } else { + const AccessorClass = accessor_type === "get" ? AST_PrivateGetter : AST_PrivateSetter; + return annotate(new AccessorClass({ + start, + static: is_static, + key: get_symbol_ast(name), + value: create_accessor(), + end: prev() + })); + } + } + if (is("punc", "(")) { + name = get_symbol_ast(name); + const AST_MethodVariant = is_private ? AST_PrivateMethod : AST_ConciseMethod; + var node = new AST_MethodVariant({ + start, + static: is_static, + is_generator, + async: is_async, + key: name, + quote: name instanceof AST_SymbolMethod ? property_token.quote : void 0, + value: create_accessor(is_generator, is_async), + end: prev() + }); + return annotate(node); + } + if (is_class) { + const key = get_symbol_ast(name, AST_SymbolClassProperty); + const quote = key instanceof AST_SymbolClassProperty ? property_token.quote : void 0; + const AST_ClassPropertyVariant = is_private ? AST_ClassPrivateProperty : AST_ClassProperty; + if (is("operator", "=")) { + next(); + return annotate(new AST_ClassPropertyVariant({ + start, + static: is_static, + quote, + key, + value: expression(false), + end: prev() + })); + } else if (is("name") || is("privatename") || is("operator", "*") || is("punc", ";") || is("punc", "}")) { + return annotate(new AST_ClassPropertyVariant({ + start, + static: is_static, + quote, + key, + end: prev() + })); + } + } + } + function class_static_block() { + if (!is("punc", "{")) { + return null; + } + const start = S.token; + const body = []; + next(); + while (!is("punc", "}")) { + body.push(statement()); + } + next(); + return new AST_ClassStaticBlock({ start, body, end: prev() }); + } + function maybe_import_assertion() { + if (is("name", "assert") && !has_newline_before(S.token)) { + next(); + return object_or_destructuring_(); + } + return null; + } + function import_statement() { + var start = prev(); + var imported_name; + var imported_names; + if (is("name")) { + imported_name = as_symbol(AST_SymbolImport); + } + if (is("punc", ",")) { + next(); + } + imported_names = map_names(true); + if (imported_names || imported_name) { + expect_token("name", "from"); + } + var mod_str = S.token; + if (mod_str.type !== "string") { + unexpected(); + } + next(); + const assert_clause = maybe_import_assertion(); + return new AST_Import({ + start, + imported_name, + imported_names, + module_name: new AST_String({ + start: mod_str, + value: mod_str.value, + quote: mod_str.quote, + end: mod_str + }), + assert_clause, + end: S.token + }); + } + function import_meta(allow_calls) { + var start = S.token; + expect_token("name", "import"); + expect_token("punc", "."); + expect_token("name", "meta"); + return subscripts(new AST_ImportMeta({ + start, + end: prev() + }), allow_calls); + } + function map_name(is_import) { + function make_symbol(type2, quote) { + return new type2({ + name: as_property_name(), + quote: quote || void 0, + start: prev(), + end: prev() + }); + } + var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign; + var type = is_import ? AST_SymbolImport : AST_SymbolExport; + var start = S.token; + var foreign_name; + var name; + if (is_import) { + foreign_name = make_symbol(foreign_type, start.quote); + } else { + name = make_symbol(type, start.quote); + } + if (is("name", "as")) { + next(); + if (is_import) { + name = make_symbol(type); + } else { + foreign_name = make_symbol(foreign_type, S.token.quote); + } + } else if (is_import) { + name = new type(foreign_name); + } else { + foreign_name = new foreign_type(name); + } + return new AST_NameMapping({ + start, + foreign_name, + name, + end: prev() + }); + } + function map_nameAsterisk(is_import, import_or_export_foreign_name) { + var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign; + var type = is_import ? AST_SymbolImport : AST_SymbolExport; + var start = S.token; + var name, foreign_name; + var end = prev(); + if (is_import) { + name = import_or_export_foreign_name; + } else { + foreign_name = import_or_export_foreign_name; + } + name = name || new type({ + start, + name: "*", + end + }); + foreign_name = foreign_name || new foreign_type({ + start, + name: "*", + end + }); + return new AST_NameMapping({ + start, + foreign_name, + name, + end + }); + } + function map_names(is_import) { + var names; + if (is("punc", "{")) { + next(); + names = []; + while (!is("punc", "}")) { + names.push(map_name(is_import)); + if (is("punc", ",")) { + next(); + } + } + next(); + } else if (is("operator", "*")) { + var name; + next(); + if (is("name", "as")) { + next(); + name = is_import ? as_symbol(AST_SymbolImport) : as_symbol_or_string(AST_SymbolExportForeign); + } + names = [map_nameAsterisk(is_import, name)]; + } + return names; + } + function export_statement() { + var start = S.token; + var is_default; + var exported_names; + if (is("keyword", "default")) { + is_default = true; + next(); + } else if (exported_names = map_names(false)) { + if (is("name", "from")) { + next(); + var mod_str = S.token; + if (mod_str.type !== "string") { + unexpected(); + } + next(); + const assert_clause = maybe_import_assertion(); + return new AST_Export({ + start, + is_default, + exported_names, + module_name: new AST_String({ + start: mod_str, + value: mod_str.value, + quote: mod_str.quote, + end: mod_str + }), + end: prev(), + assert_clause + }); + } else { + return new AST_Export({ + start, + is_default, + exported_names, + end: prev() + }); + } + } + var node; + var exported_value; + var exported_definition; + if (is("punc", "{") || is_default && (is("keyword", "class") || is("keyword", "function")) && is_token(peek(), "punc")) { + exported_value = expression(false); + semicolon(); + } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) { + unexpected(node.start); + } else if (node instanceof AST_Definitions || node instanceof AST_Defun || node instanceof AST_DefClass) { + exported_definition = node; + } else if (node instanceof AST_ClassExpression || node instanceof AST_Function) { + exported_value = node; + } else if (node instanceof AST_SimpleStatement) { + exported_value = node.body; + } else { + unexpected(node.start); + } + return new AST_Export({ + start, + is_default, + exported_value, + exported_definition, + end: prev(), + assert_clause: null + }); + } + function as_property_name() { + var tmp = S.token; + switch (tmp.type) { + case "punc": + if (tmp.value === "[") { + next(); + var ex = expression(false); + expect("]"); + return ex; + } else + unexpected(tmp); + case "operator": + if (tmp.value === "*") { + next(); + return null; + } + if (!["delete", "in", "instanceof", "new", "typeof", "void"].includes(tmp.value)) { + unexpected(tmp); + } + case "name": + case "privatename": + case "string": + case "num": + case "big_int": + case "keyword": + case "atom": + next(); + return tmp.value; + default: + unexpected(tmp); + } + } + function as_name() { + var tmp = S.token; + if (tmp.type != "name" && tmp.type != "privatename") + unexpected(); + next(); + return tmp.value; + } + function _make_symbol(type) { + var name = S.token.value; + return new (name == "this" ? AST_This : name == "super" ? AST_Super : type)({ + name: String(name), + start: S.token, + end: S.token + }); + } + function _verify_symbol(sym) { + var name = sym.name; + if (is_in_generator() && name == "yield") { + token_error(sym.start, "Yield cannot be used as identifier inside generators"); + } + if (S.input.has_directive("use strict")) { + if (name == "yield") { + token_error(sym.start, "Unexpected yield identifier inside strict mode"); + } + if (sym instanceof AST_SymbolDeclaration && (name == "arguments" || name == "eval")) { + token_error(sym.start, "Unexpected " + name + " in strict mode"); + } + } + } + function as_symbol(type, noerror) { + if (!is("name")) { + if (!noerror) + croak("Name expected"); + return null; + } + var sym = _make_symbol(type); + _verify_symbol(sym); + next(); + return sym; + } + function as_symbol_or_string(type) { + if (!is("name")) { + if (!is("string")) { + croak("Name or string expected"); + } + var tok = S.token; + var ret = new type({ + start: tok, + end: tok, + name: tok.value, + quote: tok.quote + }); + next(); + return ret; + } + var sym = _make_symbol(type); + _verify_symbol(sym); + next(); + return sym; + } + function annotate(node, before_token = node.start) { + var comments = before_token.comments_before; + const comments_outside_parens = outer_comments_before_counts.get(before_token); + var i = comments_outside_parens != null ? comments_outside_parens : comments.length; + while (--i >= 0) { + var comment = comments[i]; + if (/[@#]__/.test(comment.value)) { + if (/[@#]__PURE__/.test(comment.value)) { + set_annotation(node, _PURE); + break; + } + if (/[@#]__INLINE__/.test(comment.value)) { + set_annotation(node, _INLINE); + break; + } + if (/[@#]__NOINLINE__/.test(comment.value)) { + set_annotation(node, _NOINLINE); + break; + } + if (/[@#]__KEY__/.test(comment.value)) { + set_annotation(node, _KEY); + break; + } + if (/[@#]__MANGLE_PROP__/.test(comment.value)) { + set_annotation(node, _MANGLEPROP); + break; + } + } + } + return node; + } + var subscripts = function(expr, allow_calls, is_chain) { + var start = expr.start; + if (is("punc", ".")) { + next(); + if (is("privatename") && !S.in_class) + croak("Private field must be used in an enclosing class"); + const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot; + return annotate(subscripts(new AST_DotVariant({ + start, + expression: expr, + optional: false, + property: as_name(), + end: prev() + }), allow_calls, is_chain)); + } + if (is("punc", "[")) { + next(); + var prop = expression(true); + expect("]"); + return annotate(subscripts(new AST_Sub({ + start, + expression: expr, + optional: false, + property: prop, + end: prev() + }), allow_calls, is_chain)); + } + if (allow_calls && is("punc", "(")) { + next(); + var call = new AST_Call({ + start, + expression: expr, + optional: false, + args: call_args(), + end: prev() + }); + annotate(call); + return subscripts(call, true, is_chain); + } + if (is("punc", "?.")) { + next(); + let chain_contents; + if (allow_calls && is("punc", "(")) { + next(); + const call2 = new AST_Call({ + start, + optional: true, + expression: expr, + args: call_args(), + end: prev() + }); + annotate(call2); + chain_contents = subscripts(call2, true, true); + } else if (is("name") || is("privatename")) { + if (is("privatename") && !S.in_class) + croak("Private field must be used in an enclosing class"); + const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot; + chain_contents = annotate(subscripts(new AST_DotVariant({ + start, + expression: expr, + optional: true, + property: as_name(), + end: prev() + }), allow_calls, true)); + } else if (is("punc", "[")) { + next(); + const property = expression(true); + expect("]"); + chain_contents = annotate(subscripts(new AST_Sub({ + start, + expression: expr, + optional: true, + property, + end: prev() + }), allow_calls, true)); + } + if (!chain_contents) + unexpected(); + if (chain_contents instanceof AST_Chain) + return chain_contents; + return new AST_Chain({ + start, + expression: chain_contents, + end: prev() + }); + } + if (is("template_head")) { + if (is_chain) { + unexpected(); + } + return subscripts(new AST_PrefixedTemplateString({ + start, + prefix: expr, + template_string: template_string(), + end: prev() + }), allow_calls); + } + return expr; + }; + function call_args() { + var args = []; + while (!is("punc", ")")) { + if (is("expand", "...")) { + next(); + args.push(new AST_Expansion({ + start: prev(), + expression: expression(false), + end: prev() + })); + } else { + args.push(expression(false)); + } + if (!is("punc", ")")) { + expect(","); + } + } + next(); + return args; + } + var maybe_unary = function(allow_calls, allow_arrows) { + var start = S.token; + if (start.type == "name" && start.value == "await" && can_await()) { + next(); + return _await_expression(); + } + if (is("operator") && UNARY_PREFIX.has(start.value)) { + next(); + handle_regexp(); + var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls)); + ex.start = start; + ex.end = prev(); + return ex; + } + var val = expr_atom(allow_calls, allow_arrows); + while (is("operator") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) { + if (val instanceof AST_Arrow) + unexpected(); + val = make_unary(AST_UnaryPostfix, S.token, val); + val.start = start; + val.end = S.token; + next(); + } + return val; + }; + function make_unary(ctor, token, expr) { + var op = token.value; + switch (op) { + case "++": + case "--": + if (!is_assignable(expr)) + croak("Invalid use of " + op + " operator", token.line, token.col, token.pos); + break; + case "delete": + if (expr instanceof AST_SymbolRef && S.input.has_directive("use strict")) + croak("Calling delete on expression not allowed in strict mode", expr.start.line, expr.start.col, expr.start.pos); + break; + } + return new ctor({ operator: op, expression: expr }); + } + var expr_op = function(left, min_prec, no_in) { + var op = is("operator") ? S.token.value : null; + if (op == "in" && no_in) + op = null; + if (op == "**" && left instanceof AST_UnaryPrefix && !is_token(left.start, "punc", "(") && left.operator !== "--" && left.operator !== "++") + unexpected(left.start); + var prec = op != null ? PRECEDENCE[op] : null; + if (prec != null && (prec > min_prec || op === "**" && min_prec === prec)) { + next(); + var right = expr_op(maybe_unary(true), prec, no_in); + return expr_op(new AST_Binary({ + start: left.start, + left, + operator: op, + right, + end: right.end + }), min_prec, no_in); + } + return left; + }; + function expr_ops(no_in) { + return expr_op(maybe_unary(true, true), 0, no_in); + } + var maybe_conditional = function(no_in) { + var start = S.token; + var expr = expr_ops(no_in); + if (is("operator", "?")) { + next(); + var yes = expression(false); + expect(":"); + return new AST_Conditional({ + start, + condition: expr, + consequent: yes, + alternative: expression(false, no_in), + end: prev() + }); + } + return expr; + }; + function is_assignable(expr) { + return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef; + } + function to_destructuring(node) { + if (node instanceof AST_Object) { + node = new AST_Destructuring({ + start: node.start, + names: node.properties.map(to_destructuring), + is_array: false, + end: node.end + }); + } else if (node instanceof AST_Array) { + var names = []; + for (var i = 0; i < node.elements.length; i++) { + if (node.elements[i] instanceof AST_Expansion) { + if (i + 1 !== node.elements.length) { + token_error(node.elements[i].start, "Spread must the be last element in destructuring array"); + } + node.elements[i].expression = to_destructuring(node.elements[i].expression); + } + names.push(to_destructuring(node.elements[i])); + } + node = new AST_Destructuring({ + start: node.start, + names, + is_array: true, + end: node.end + }); + } else if (node instanceof AST_ObjectProperty) { + node.value = to_destructuring(node.value); + } else if (node instanceof AST_Assign) { + node = new AST_DefaultAssign({ + start: node.start, + left: node.left, + operator: "=", + right: node.right, + end: node.end + }); + } + return node; + } + var maybe_assign = function(no_in) { + handle_regexp(); + var start = S.token; + if (start.type == "name" && start.value == "yield") { + if (is_in_generator()) { + next(); + return _yield_expression(); + } else if (S.input.has_directive("use strict")) { + token_error(S.token, "Unexpected yield identifier inside strict mode"); + } + } + var left = maybe_conditional(no_in); + var val = S.token.value; + if (is("operator") && ASSIGNMENT.has(val)) { + if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) { + next(); + return new AST_Assign({ + start, + left, + operator: val, + right: maybe_assign(no_in), + logical: LOGICAL_ASSIGNMENT.has(val), + end: prev() + }); + } + croak("Invalid assignment"); + } + return left; + }; + var to_expr_or_sequence = function(start, exprs) { + if (exprs.length === 1) { + return exprs[0]; + } else if (exprs.length > 1) { + return new AST_Sequence({ start, expressions: exprs, end: peek() }); + } else { + croak("Invalid parenthesized expression"); + } + }; + var expression = function(commas, no_in) { + var start = S.token; + var exprs = []; + while (true) { + exprs.push(maybe_assign(no_in)); + if (!commas || !is("punc", ",")) + break; + next(); + commas = true; + } + return to_expr_or_sequence(start, exprs); + }; + function in_loop(cont) { + ++S.in_loop; + var ret = cont(); + --S.in_loop; + return ret; + } + if (options.expression) { + return expression(true); + } + return function parse_toplevel() { + var start = S.token; + var body = []; + S.input.push_directives_stack(); + if (options.module) + S.input.add_directive("use strict"); + while (!is("eof")) { + body.push(statement()); + } + S.input.pop_directives_stack(); + var end = prev(); + var toplevel = options.toplevel; + if (toplevel) { + toplevel.body = toplevel.body.concat(body); + toplevel.end = end; + } else { + toplevel = new AST_Toplevel({ start, body, end }); + } + TEMPLATE_RAWS = /* @__PURE__ */ new Map(); + return toplevel; + }(); + } + function DEFNODE(type, props, ctor, methods, base = AST_Node) { + if (!props) + props = []; + else + props = props.split(/\s+/); + var self_props = props; + if (base && base.PROPS) + props = props.concat(base.PROPS); + const proto = base && Object.create(base.prototype); + if (proto) { + ctor.prototype = proto; + ctor.BASE = base; + } + if (base) + base.SUBCLASSES.push(ctor); + ctor.prototype.CTOR = ctor; + ctor.prototype.constructor = ctor; + ctor.PROPS = props || null; + ctor.SELF_PROPS = self_props; + ctor.SUBCLASSES = []; + if (type) { + ctor.prototype.TYPE = ctor.TYPE = type; + } + if (methods) { + for (let i in methods) + if (HOP(methods, i)) { + if (i[0] === "$") { + ctor[i.substr(1)] = methods[i]; + } else { + ctor.prototype[i] = methods[i]; + } + } + } + ctor.DEFMETHOD = function(name, method) { + this.prototype[name] = method; + }; + return ctor; + } + const has_tok_flag = (tok, flag) => Boolean(tok.flags & flag); + const set_tok_flag = (tok, flag, truth) => { + if (truth) { + tok.flags |= flag; + } else { + tok.flags &= ~flag; + } + }; + const TOK_FLAG_NLB = 1; + const TOK_FLAG_QUOTE_SINGLE = 2; + const TOK_FLAG_QUOTE_EXISTS = 4; + const TOK_FLAG_TEMPLATE_END = 8; + class AST_Token { + constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) { + this.flags = nlb ? 1 : 0; + this.type = type; + this.value = value; + this.line = line; + this.col = col; + this.pos = pos; + this.comments_before = comments_before; + this.comments_after = comments_after; + this.file = file; + Object.seal(this); + } + [Symbol.for("nodejs.util.inspect.custom")](_depth, options) { + const special = (str) => options.stylize(str, "special"); + const quote = typeof this.value === "string" && this.value.includes("`") ? "'" : "`"; + const value = `${quote}${this.value}${quote}`; + return `${special("[AST_Token")} ${value} at ${this.line}:${this.col}${special("]")}`; + } + get nlb() { + return has_tok_flag(this, TOK_FLAG_NLB); + } + set nlb(new_nlb) { + set_tok_flag(this, TOK_FLAG_NLB, new_nlb); + } + get quote() { + return !has_tok_flag(this, TOK_FLAG_QUOTE_EXISTS) ? "" : has_tok_flag(this, TOK_FLAG_QUOTE_SINGLE) ? "'" : '"'; + } + set quote(quote_type) { + set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'"); + set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type); + } + get template_end() { + return has_tok_flag(this, TOK_FLAG_TEMPLATE_END); + } + set template_end(new_template_end) { + set_tok_flag(this, TOK_FLAG_TEMPLATE_END, new_template_end); + } + } + var AST_Node = DEFNODE("Node", "start end", function AST_Node2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + _clone: function(deep) { + if (deep) { + var self2 = this.clone(); + return self2.transform(new TreeTransformer(function(node) { + if (node !== self2) { + return node.clone(true); + } + })); + } + return new this.CTOR(this); + }, + clone: function(deep) { + return this._clone(deep); + }, + $documentation: "Base class of all AST nodes", + $propdoc: { + start: "[AST_Token] The first token of this node", + end: "[AST_Token] The last token of this node" + }, + _walk: function(visitor) { + return visitor._visit(this); + }, + walk: function(visitor) { + return this._walk(visitor); + }, + _children_backwards: () => { + } + }, null); + var AST_Statement = DEFNODE("Statement", null, function AST_Statement2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class of all statements" + }); + var AST_Debugger = DEFNODE("Debugger", null, function AST_Debugger2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Represents a debugger statement" + }, AST_Statement); + var AST_Directive = DEFNODE("Directive", "value quote", function AST_Directive2(props) { + if (props) { + this.value = props.value; + this.quote = props.quote; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: 'Represents a directive, like "use strict";', + $propdoc: { + value: "[string] The value of this directive as a plain string (it's not an AST_String!)", + quote: "[string] the original quote character" + } + }, AST_Statement); + var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", function AST_SimpleStatement2(props) { + if (props) { + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A statement consisting of an expression, i.e. a = 1 + 2", + $propdoc: { + body: "[AST_Node] an expression node (should not be instanceof AST_Statement)" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + } + }, AST_Statement); + function walk_body(node, visitor) { + const body = node.body; + for (var i = 0, len = body.length; i < len; i++) { + body[i]._walk(visitor); + } + } + function clone_block_scope(deep) { + var clone = this._clone(deep); + if (this.block_scope) { + clone.block_scope = this.block_scope.clone(); + } + return clone; + } + var AST_Block = DEFNODE("Block", "body block_scope", function AST_Block2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A body of statements (usually braced)", + $propdoc: { + body: "[AST_Statement*] an array of statements", + block_scope: "[AST_Scope] the block scope" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + }, + clone: clone_block_scope + }, AST_Statement); + var AST_BlockStatement = DEFNODE("BlockStatement", null, function AST_BlockStatement2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A block statement" + }, AST_Block); + var AST_EmptyStatement = DEFNODE("EmptyStatement", null, function AST_EmptyStatement2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The empty statement (empty block or simply a semicolon)" + }, AST_Statement); + var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", function AST_StatementWithBody2(props) { + if (props) { + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`", + $propdoc: { + body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement" + } + }, AST_Statement); + var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", function AST_LabeledStatement2(props) { + if (props) { + this.label = props.label; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Statement with a label", + $propdoc: { + label: "[AST_Label] a label definition" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.label._walk(visitor); + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + push2(this.label); + }, + clone: function(deep) { + var node = this._clone(deep); + if (deep) { + var label = node.label; + var def = this.label; + node.walk(new TreeWalker(function(node2) { + if (node2 instanceof AST_LoopControl && node2.label && node2.label.thedef === def) { + node2.label.thedef = label; + label.references.push(node2); + } + })); + } + return node; + } + }, AST_StatementWithBody); + var AST_IterationStatement = DEFNODE("IterationStatement", "block_scope", function AST_IterationStatement2(props) { + if (props) { + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Internal class. All loops inherit from it.", + $propdoc: { + block_scope: "[AST_Scope] the block scope for this iteration statement." + }, + clone: clone_block_scope + }, AST_StatementWithBody); + var AST_DWLoop = DEFNODE("DWLoop", "condition", function AST_DWLoop2(props) { + if (props) { + this.condition = props.condition; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for do/while statements", + $propdoc: { + condition: "[AST_Node] the loop condition. Should not be instanceof AST_Statement" + } + }, AST_IterationStatement); + var AST_Do = DEFNODE("Do", null, function AST_Do2(props) { + if (props) { + this.condition = props.condition; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `do` statement", + _walk: function(visitor) { + return visitor._visit(this, function() { + this.body._walk(visitor); + this.condition._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.condition); + push2(this.body); + } + }, AST_DWLoop); + var AST_While = DEFNODE("While", null, function AST_While2(props) { + if (props) { + this.condition = props.condition; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `while` statement", + _walk: function(visitor) { + return visitor._visit(this, function() { + this.condition._walk(visitor); + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + push2(this.condition); + } + }, AST_DWLoop); + var AST_For = DEFNODE("For", "init condition step", function AST_For2(props) { + if (props) { + this.init = props.init; + this.condition = props.condition; + this.step = props.step; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `for` statement", + $propdoc: { + init: "[AST_Node?] the `for` initialization code, or null if empty", + condition: "[AST_Node?] the `for` termination clause, or null if empty", + step: "[AST_Node?] the `for` update clause, or null if empty" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.init) + this.init._walk(visitor); + if (this.condition) + this.condition._walk(visitor); + if (this.step) + this.step._walk(visitor); + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + if (this.step) + push2(this.step); + if (this.condition) + push2(this.condition); + if (this.init) + push2(this.init); + } + }, AST_IterationStatement); + var AST_ForIn = DEFNODE("ForIn", "init object", function AST_ForIn2(props) { + if (props) { + this.init = props.init; + this.object = props.object; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `for ... in` statement", + $propdoc: { + init: "[AST_Node] the `for/in` initialization code", + object: "[AST_Node] the object that we're looping through" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.init._walk(visitor); + this.object._walk(visitor); + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + if (this.object) + push2(this.object); + if (this.init) + push2(this.init); + } + }, AST_IterationStatement); + var AST_ForOf = DEFNODE("ForOf", "await", function AST_ForOf2(props) { + if (props) { + this.await = props.await; + this.init = props.init; + this.object = props.object; + this.block_scope = props.block_scope; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `for ... of` statement" + }, AST_ForIn); + var AST_With = DEFNODE("With", "expression", function AST_With2(props) { + if (props) { + this.expression = props.expression; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `with` statement", + $propdoc: { + expression: "[AST_Node] the `with` expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + this.body._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.body); + push2(this.expression); + } + }, AST_StatementWithBody); + var AST_Scope = DEFNODE("Scope", "variables uses_with uses_eval parent_scope enclosed cname", function AST_Scope2(props) { + if (props) { + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for all statements introducing a lexical scope", + $propdoc: { + variables: "[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope", + uses_with: "[boolean/S] tells whether this scope uses the `with` statement", + uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`", + parent_scope: "[AST_Scope?/S] link to the parent scope", + enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes", + cname: "[integer/S] current index for mangling variables (used internally by the mangler)" + }, + get_defun_scope: function() { + var self2 = this; + while (self2.is_block_scope()) { + self2 = self2.parent_scope; + } + return self2; + }, + clone: function(deep, toplevel) { + var node = this._clone(deep); + if (deep && this.variables && toplevel && !this._block_scope) { + node.figure_out_scope({}, { + toplevel, + parent_scope: this.parent_scope + }); + } else { + if (this.variables) + node.variables = new Map(this.variables); + if (this.enclosed) + node.enclosed = this.enclosed.slice(); + if (this._block_scope) + node._block_scope = this._block_scope; + } + return node; + }, + pinned: function() { + return this.uses_eval || this.uses_with; + } + }, AST_Block); + var AST_Toplevel = DEFNODE("Toplevel", "globals", function AST_Toplevel2(props) { + if (props) { + this.globals = props.globals; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The toplevel scope", + $propdoc: { + globals: "[Map/S] a map of name -> SymbolDef for all undeclared names" + }, + wrap_commonjs: function(name) { + var body = this.body; + var wrapped_tl = "(function(exports){'$ORIG';})(typeof " + name + "=='undefined'?(" + name + "={}):" + name + ");"; + wrapped_tl = parse(wrapped_tl); + wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) { + if (node instanceof AST_Directive && node.value == "$ORIG") { + return MAP.splice(body); + } + })); + return wrapped_tl; + }, + wrap_enclose: function(args_values) { + if (typeof args_values != "string") + args_values = ""; + var index = args_values.indexOf(":"); + if (index < 0) + index = args_values.length; + var body = this.body; + return parse([ + "(function(", + args_values.slice(0, index), + '){"$ORIG"})(', + args_values.slice(index + 1), + ")" + ].join("")).transform(new TreeTransformer(function(node) { + if (node instanceof AST_Directive && node.value == "$ORIG") { + return MAP.splice(body); + } + })); + } + }, AST_Scope); + var AST_Expansion = DEFNODE("Expansion", "expression", function AST_Expansion2(props) { + if (props) { + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list", + $propdoc: { + expression: "[AST_Node] the thing to be expanded" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression.walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }); + var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments is_generator async", function AST_Lambda2(props) { + if (props) { + this.name = props.name; + this.argnames = props.argnames; + this.uses_arguments = props.uses_arguments; + this.is_generator = props.is_generator; + this.async = props.async; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for functions", + $propdoc: { + name: "[AST_SymbolDeclaration?] the name of this function", + argnames: "[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments", + uses_arguments: "[boolean/S] tells whether this function accesses the arguments array", + is_generator: "[boolean] is this a generator method", + async: "[boolean] is this method async" + }, + args_as_names: function() { + var out = []; + for (var i = 0; i < this.argnames.length; i++) { + if (this.argnames[i] instanceof AST_Destructuring) { + out.push(...this.argnames[i].all_symbols()); + } else { + out.push(this.argnames[i]); + } + } + return out; + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.name) + this.name._walk(visitor); + var argnames = this.argnames; + for (var i = 0, len = argnames.length; i < len; i++) { + argnames[i]._walk(visitor); + } + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + i = this.argnames.length; + while (i--) + push2(this.argnames[i]); + if (this.name) + push2(this.name); + }, + is_braceless() { + return this.body[0] instanceof AST_Return && this.body[0].value; + }, + length_property() { + let length = 0; + for (const arg of this.argnames) { + if (arg instanceof AST_SymbolFunarg || arg instanceof AST_Destructuring) { + length++; + } + } + return length; + } + }, AST_Scope); + var AST_Accessor = DEFNODE("Accessor", null, function AST_Accessor2(props) { + if (props) { + this.name = props.name; + this.argnames = props.argnames; + this.uses_arguments = props.uses_arguments; + this.is_generator = props.is_generator; + this.async = props.async; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A setter/getter function. The `name` property is always null." + }, AST_Lambda); + var AST_Function = DEFNODE("Function", null, function AST_Function2(props) { + if (props) { + this.name = props.name; + this.argnames = props.argnames; + this.uses_arguments = props.uses_arguments; + this.is_generator = props.is_generator; + this.async = props.async; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A function expression" + }, AST_Lambda); + var AST_Arrow = DEFNODE("Arrow", null, function AST_Arrow2(props) { + if (props) { + this.name = props.name; + this.argnames = props.argnames; + this.uses_arguments = props.uses_arguments; + this.is_generator = props.is_generator; + this.async = props.async; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An ES6 Arrow function ((a) => b)" + }, AST_Lambda); + var AST_Defun = DEFNODE("Defun", null, function AST_Defun2(props) { + if (props) { + this.name = props.name; + this.argnames = props.argnames; + this.uses_arguments = props.uses_arguments; + this.is_generator = props.is_generator; + this.async = props.async; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A function definition" + }, AST_Lambda); + var AST_Destructuring = DEFNODE("Destructuring", "names is_array", function AST_Destructuring2(props) { + if (props) { + this.names = props.names; + this.is_array = props.is_array; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A destructuring of several names. Used in destructuring assignment and with destructuring function argument names", + $propdoc: { + "names": "[AST_Node*] Array of properties or elements", + "is_array": "[Boolean] Whether the destructuring represents an object or array" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.names.forEach(function(name) { + name._walk(visitor); + }); + }); + }, + _children_backwards(push2) { + let i = this.names.length; + while (i--) + push2(this.names[i]); + }, + all_symbols: function() { + var out = []; + walk(this, (node) => { + if (node instanceof AST_SymbolDeclaration) { + out.push(node); + } + if (node instanceof AST_Lambda) { + return true; + } + }); + return out; + } + }); + var AST_PrefixedTemplateString = DEFNODE("PrefixedTemplateString", "template_string prefix", function AST_PrefixedTemplateString2(props) { + if (props) { + this.template_string = props.template_string; + this.prefix = props.prefix; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A templatestring with a prefix, such as String.raw`foobarbaz`", + $propdoc: { + template_string: "[AST_TemplateString] The template string", + prefix: "[AST_Node] The prefix, which will get called." + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.prefix._walk(visitor); + this.template_string._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.template_string); + push2(this.prefix); + } + }); + var AST_TemplateString = DEFNODE("TemplateString", "segments", function AST_TemplateString2(props) { + if (props) { + this.segments = props.segments; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A template string literal", + $propdoc: { + segments: "[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment." + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.segments.forEach(function(seg) { + seg._walk(visitor); + }); + }); + }, + _children_backwards(push2) { + let i = this.segments.length; + while (i--) + push2(this.segments[i]); + } + }); + var AST_TemplateSegment = DEFNODE("TemplateSegment", "value raw", function AST_TemplateSegment2(props) { + if (props) { + this.value = props.value; + this.raw = props.raw; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A segment of a template string literal", + $propdoc: { + value: "Content of the segment", + raw: "Raw source of the segment" + } + }); + var AST_Jump = DEFNODE("Jump", null, function AST_Jump2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for \u201Cjumps\u201D (for now that's `return`, `throw`, `break` and `continue`)" + }, AST_Statement); + var AST_Exit = DEFNODE("Exit", "value", function AST_Exit2(props) { + if (props) { + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for \u201Cexits\u201D (`return` and `throw`)", + $propdoc: { + value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return" + }, + _walk: function(visitor) { + return visitor._visit(this, this.value && function() { + this.value._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.value) + push2(this.value); + } + }, AST_Jump); + var AST_Return = DEFNODE("Return", null, function AST_Return2(props) { + if (props) { + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `return` statement" + }, AST_Exit); + var AST_Throw = DEFNODE("Throw", null, function AST_Throw2(props) { + if (props) { + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `throw` statement" + }, AST_Exit); + var AST_LoopControl = DEFNODE("LoopControl", "label", function AST_LoopControl2(props) { + if (props) { + this.label = props.label; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for loop control statements (`break` and `continue`)", + $propdoc: { + label: "[AST_LabelRef?] the label, or null if none" + }, + _walk: function(visitor) { + return visitor._visit(this, this.label && function() { + this.label._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.label) + push2(this.label); + } + }, AST_Jump); + var AST_Break = DEFNODE("Break", null, function AST_Break2(props) { + if (props) { + this.label = props.label; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `break` statement" + }, AST_LoopControl); + var AST_Continue = DEFNODE("Continue", null, function AST_Continue2(props) { + if (props) { + this.label = props.label; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `continue` statement" + }, AST_LoopControl); + var AST_Await = DEFNODE("Await", "expression", function AST_Await2(props) { + if (props) { + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An `await` statement", + $propdoc: { + expression: "[AST_Node] the mandatory expression being awaited" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }); + var AST_Yield = DEFNODE("Yield", "expression is_star", function AST_Yield2(props) { + if (props) { + this.expression = props.expression; + this.is_star = props.is_star; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `yield` statement", + $propdoc: { + expression: "[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false", + is_star: "[Boolean] Whether this is a yield or yield* statement" + }, + _walk: function(visitor) { + return visitor._visit(this, this.expression && function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.expression) + push2(this.expression); + } + }); + var AST_If = DEFNODE("If", "condition alternative", function AST_If2(props) { + if (props) { + this.condition = props.condition; + this.alternative = props.alternative; + this.body = props.body; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `if` statement", + $propdoc: { + condition: "[AST_Node] the `if` condition", + alternative: "[AST_Statement?] the `else` part, or null if not present" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.condition._walk(visitor); + this.body._walk(visitor); + if (this.alternative) + this.alternative._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.alternative) { + push2(this.alternative); + } + push2(this.body); + push2(this.condition); + } + }, AST_StatementWithBody); + var AST_Switch = DEFNODE("Switch", "expression", function AST_Switch2(props) { + if (props) { + this.expression = props.expression; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `switch` statement", + $propdoc: { + expression: "[AST_Node] the `switch` \u201Cdiscriminant\u201D" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + push2(this.expression); + } + }, AST_Block); + var AST_SwitchBranch = DEFNODE("SwitchBranch", null, function AST_SwitchBranch2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for `switch` branches" + }, AST_Block); + var AST_Default = DEFNODE("Default", null, function AST_Default2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `default` switch branch" + }, AST_SwitchBranch); + var AST_Case = DEFNODE("Case", "expression", function AST_Case2(props) { + if (props) { + this.expression = props.expression; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `case` switch branch", + $propdoc: { + expression: "[AST_Node] the `case` expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + push2(this.expression); + } + }, AST_SwitchBranch); + var AST_Try = DEFNODE("Try", "body bcatch bfinally", function AST_Try2(props) { + if (props) { + this.body = props.body; + this.bcatch = props.bcatch; + this.bfinally = props.bfinally; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `try` statement", + $propdoc: { + body: "[AST_TryBlock] the try block", + bcatch: "[AST_Catch?] the catch block, or null if not present", + bfinally: "[AST_Finally?] the finally block, or null if not present" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.body._walk(visitor); + if (this.bcatch) + this.bcatch._walk(visitor); + if (this.bfinally) + this.bfinally._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.bfinally) + push2(this.bfinally); + if (this.bcatch) + push2(this.bcatch); + push2(this.body); + } + }, AST_Statement); + var AST_TryBlock = DEFNODE("TryBlock", null, function AST_TryBlock2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `try` block of a try statement" + }, AST_Block); + var AST_Catch = DEFNODE("Catch", "argname", function AST_Catch2(props) { + if (props) { + this.argname = props.argname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `catch` node; only makes sense as part of a `try` statement", + $propdoc: { + argname: "[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.argname) + this.argname._walk(visitor); + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + if (this.argname) + push2(this.argname); + } + }, AST_Block); + var AST_Finally = DEFNODE("Finally", null, function AST_Finally2(props) { + if (props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `finally` node; only makes sense as part of a `try` statement" + }, AST_Block); + var AST_Definitions = DEFNODE("Definitions", "definitions", function AST_Definitions2(props) { + if (props) { + this.definitions = props.definitions; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)", + $propdoc: { + definitions: "[AST_VarDef*] array of variable definitions" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + var definitions = this.definitions; + for (var i = 0, len = definitions.length; i < len; i++) { + definitions[i]._walk(visitor); + } + }); + }, + _children_backwards(push2) { + let i = this.definitions.length; + while (i--) + push2(this.definitions[i]); + } + }, AST_Statement); + var AST_Var = DEFNODE("Var", null, function AST_Var2(props) { + if (props) { + this.definitions = props.definitions; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `var` statement" + }, AST_Definitions); + var AST_Let = DEFNODE("Let", null, function AST_Let2(props) { + if (props) { + this.definitions = props.definitions; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `let` statement" + }, AST_Definitions); + var AST_Const = DEFNODE("Const", null, function AST_Const2(props) { + if (props) { + this.definitions = props.definitions; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A `const` statement" + }, AST_Definitions); + var AST_VarDef = DEFNODE("VarDef", "name value", function AST_VarDef2(props) { + if (props) { + this.name = props.name; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A variable declaration; only appears in a AST_Definitions node", + $propdoc: { + name: "[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable", + value: "[AST_Node?] initializer, or null of there's no initializer" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.name._walk(visitor); + if (this.value) + this.value._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.value) + push2(this.value); + push2(this.name); + }, + declarations_as_names() { + if (this.name instanceof AST_SymbolDeclaration) { + return [this]; + } else { + return this.name.all_symbols(); + } + } + }); + var AST_NameMapping = DEFNODE("NameMapping", "foreign_name name", function AST_NameMapping2(props) { + if (props) { + this.foreign_name = props.foreign_name; + this.name = props.name; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The part of the export/import statement that declare names from a module.", + $propdoc: { + foreign_name: "[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)", + name: "[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module." + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.foreign_name._walk(visitor); + this.name._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.name); + push2(this.foreign_name); + } + }); + var AST_Import = DEFNODE("Import", "imported_name imported_names module_name assert_clause", function AST_Import2(props) { + if (props) { + this.imported_name = props.imported_name; + this.imported_names = props.imported_names; + this.module_name = props.module_name; + this.assert_clause = props.assert_clause; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An `import` statement", + $propdoc: { + imported_name: "[AST_SymbolImport] The name of the variable holding the module's default export.", + imported_names: "[AST_NameMapping*] The names of non-default imported variables", + module_name: "[AST_String] String literal describing where this module came from", + assert_clause: "[AST_Object?] The import assertion" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.imported_name) { + this.imported_name._walk(visitor); + } + if (this.imported_names) { + this.imported_names.forEach(function(name_import) { + name_import._walk(visitor); + }); + } + this.module_name._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.module_name); + if (this.imported_names) { + let i = this.imported_names.length; + while (i--) + push2(this.imported_names[i]); + } + if (this.imported_name) + push2(this.imported_name); + } + }); + var AST_ImportMeta = DEFNODE("ImportMeta", null, function AST_ImportMeta2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A reference to import.meta" + }); + var AST_Export = DEFNODE("Export", "exported_definition exported_value is_default exported_names module_name assert_clause", function AST_Export2(props) { + if (props) { + this.exported_definition = props.exported_definition; + this.exported_value = props.exported_value; + this.is_default = props.is_default; + this.exported_names = props.exported_names; + this.module_name = props.module_name; + this.assert_clause = props.assert_clause; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An `export` statement", + $propdoc: { + exported_definition: "[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition", + exported_value: "[AST_Node?] An exported value", + exported_names: "[AST_NameMapping*?] List of exported names", + module_name: "[AST_String?] Name of the file to load exports from", + is_default: "[Boolean] Whether this is the default exported value of this module", + assert_clause: "[AST_Object?] The import assertion" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.exported_definition) { + this.exported_definition._walk(visitor); + } + if (this.exported_value) { + this.exported_value._walk(visitor); + } + if (this.exported_names) { + this.exported_names.forEach(function(name_export) { + name_export._walk(visitor); + }); + } + if (this.module_name) { + this.module_name._walk(visitor); + } + }); + }, + _children_backwards(push2) { + if (this.module_name) + push2(this.module_name); + if (this.exported_names) { + let i = this.exported_names.length; + while (i--) + push2(this.exported_names[i]); + } + if (this.exported_value) + push2(this.exported_value); + if (this.exported_definition) + push2(this.exported_definition); + } + }, AST_Statement); + var AST_Call = DEFNODE("Call", "expression args optional _annotations", function AST_Call2(props) { + if (props) { + this.expression = props.expression; + this.args = props.args; + this.optional = props.optional; + this._annotations = props._annotations; + this.start = props.start; + this.end = props.end; + this.initialize(); + } + this.flags = 0; + }, { + $documentation: "A function call expression", + $propdoc: { + expression: "[AST_Node] expression to invoke as function", + args: "[AST_Node*] array of arguments", + optional: "[boolean] whether this is an optional call (IE ?.() )", + _annotations: "[number] bitfield containing information about the call" + }, + initialize() { + if (this._annotations == null) + this._annotations = 0; + }, + _walk(visitor) { + return visitor._visit(this, function() { + var args = this.args; + for (var i = 0, len = args.length; i < len; i++) { + args[i]._walk(visitor); + } + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + let i = this.args.length; + while (i--) + push2(this.args[i]); + push2(this.expression); + } + }); + var AST_New = DEFNODE("New", null, function AST_New2(props) { + if (props) { + this.expression = props.expression; + this.args = props.args; + this.optional = props.optional; + this._annotations = props._annotations; + this.start = props.start; + this.end = props.end; + this.initialize(); + } + this.flags = 0; + }, { + $documentation: "An object instantiation. Derives from a function call since it has exactly the same properties" + }, AST_Call); + var AST_Sequence = DEFNODE("Sequence", "expressions", function AST_Sequence2(props) { + if (props) { + this.expressions = props.expressions; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A sequence expression (comma-separated expressions)", + $propdoc: { + expressions: "[AST_Node*] array of expressions (at least two)" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expressions.forEach(function(node) { + node._walk(visitor); + }); + }); + }, + _children_backwards(push2) { + let i = this.expressions.length; + while (i--) + push2(this.expressions[i]); + } + }); + var AST_PropAccess = DEFNODE("PropAccess", "expression property optional", function AST_PropAccess2(props) { + if (props) { + this.expression = props.expression; + this.property = props.property; + this.optional = props.optional; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: 'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`', + $propdoc: { + expression: "[AST_Node] the \u201Ccontainer\u201D expression", + property: "[AST_Node|string] the property to access. For AST_Dot & AST_DotHash this is always a plain string, while for AST_Sub it's an arbitrary AST_Node", + optional: "[boolean] whether this is an optional property access (IE ?.)" + } + }); + var AST_Dot = DEFNODE("Dot", "quote", function AST_Dot2(props) { + if (props) { + this.quote = props.quote; + this.expression = props.expression; + this.property = props.property; + this.optional = props.optional; + this._annotations = props._annotations; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A dotted property access expression", + $propdoc: { + quote: "[string] the original quote character when transformed from AST_Sub" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }, AST_PropAccess); + var AST_DotHash = DEFNODE("DotHash", "", function AST_DotHash2(props) { + if (props) { + this.expression = props.expression; + this.property = props.property; + this.optional = props.optional; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A dotted property access to a private property", + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }, AST_PropAccess); + var AST_Sub = DEFNODE("Sub", null, function AST_Sub2(props) { + if (props) { + this.expression = props.expression; + this.property = props.property; + this.optional = props.optional; + this._annotations = props._annotations; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: 'Index-style property access, i.e. `a["foo"]`', + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + this.property._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.property); + push2(this.expression); + } + }, AST_PropAccess); + var AST_Chain = DEFNODE("Chain", "expression", function AST_Chain2(props) { + if (props) { + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A chain expression like a?.b?.(c)?.[d]", + $propdoc: { + expression: "[AST_Call|AST_Dot|AST_DotHash|AST_Sub] chain element." + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }); + var AST_Unary = DEFNODE("Unary", "operator expression", function AST_Unary2(props) { + if (props) { + this.operator = props.operator; + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for unary expressions", + $propdoc: { + operator: "[string] the operator", + expression: "[AST_Node] expression that this unary operator applies to" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.expression._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.expression); + } + }); + var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, function AST_UnaryPrefix2(props) { + if (props) { + this.operator = props.operator; + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`" + }, AST_Unary); + var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, function AST_UnaryPostfix2(props) { + if (props) { + this.operator = props.operator; + this.expression = props.expression; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Unary postfix expression, i.e. `i++`" + }, AST_Unary); + var AST_Binary = DEFNODE("Binary", "operator left right", function AST_Binary2(props) { + if (props) { + this.operator = props.operator; + this.left = props.left; + this.right = props.right; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Binary expression, i.e. `a + b`", + $propdoc: { + left: "[AST_Node] left-hand side expression", + operator: "[string] the operator", + right: "[AST_Node] right-hand side expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.left._walk(visitor); + this.right._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.right); + push2(this.left); + } + }); + var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", function AST_Conditional2(props) { + if (props) { + this.condition = props.condition; + this.consequent = props.consequent; + this.alternative = props.alternative; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`", + $propdoc: { + condition: "[AST_Node]", + consequent: "[AST_Node]", + alternative: "[AST_Node]" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + this.condition._walk(visitor); + this.consequent._walk(visitor); + this.alternative._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.alternative); + push2(this.consequent); + push2(this.condition); + } + }); + var AST_Assign = DEFNODE("Assign", "logical", function AST_Assign2(props) { + if (props) { + this.logical = props.logical; + this.operator = props.operator; + this.left = props.left; + this.right = props.right; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An assignment expression \u2014 `a = b + 5`", + $propdoc: { + logical: "Whether it's a logical assignment" + } + }, AST_Binary); + var AST_DefaultAssign = DEFNODE("DefaultAssign", null, function AST_DefaultAssign2(props) { + if (props) { + this.operator = props.operator; + this.left = props.left; + this.right = props.right; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A default assignment expression like in `(a = 3) => a`" + }, AST_Binary); + var AST_Array = DEFNODE("Array", "elements", function AST_Array2(props) { + if (props) { + this.elements = props.elements; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An array literal", + $propdoc: { + elements: "[AST_Node*] array of elements" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + var elements = this.elements; + for (var i = 0, len = elements.length; i < len; i++) { + elements[i]._walk(visitor); + } + }); + }, + _children_backwards(push2) { + let i = this.elements.length; + while (i--) + push2(this.elements[i]); + } + }); + var AST_Object = DEFNODE("Object", "properties", function AST_Object2(props) { + if (props) { + this.properties = props.properties; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An object literal", + $propdoc: { + properties: "[AST_ObjectProperty*] array of properties" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + var properties = this.properties; + for (var i = 0, len = properties.length; i < len; i++) { + properties[i]._walk(visitor); + } + }); + }, + _children_backwards(push2) { + let i = this.properties.length; + while (i--) + push2(this.properties[i]); + } + }); + var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", function AST_ObjectProperty2(props) { + if (props) { + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $documentation: "Base class for literal object properties", + $propdoc: { + key: "[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.", + value: "[AST_Node] property value. For getters and setters this is an AST_Accessor." + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.key instanceof AST_Node) + this.key._walk(visitor); + this.value._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.value); + if (this.key instanceof AST_Node) + push2(this.key); + } + }); + var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", function AST_ObjectKeyVal2(props) { + if (props) { + this.quote = props.quote; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $documentation: "A key: value object property", + $propdoc: { + quote: "[string] the original quote character" + }, + computed_key() { + return this.key instanceof AST_Node; + } + }, AST_ObjectProperty); + var AST_PrivateSetter = DEFNODE("PrivateSetter", "static", function AST_PrivateSetter2(props) { + if (props) { + this.static = props.static; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $propdoc: { + static: "[boolean] whether this is a static private setter" + }, + $documentation: "A private setter property", + computed_key() { + return false; + } + }, AST_ObjectProperty); + var AST_PrivateGetter = DEFNODE("PrivateGetter", "static", function AST_PrivateGetter2(props) { + if (props) { + this.static = props.static; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $propdoc: { + static: "[boolean] whether this is a static private getter" + }, + $documentation: "A private getter property", + computed_key() { + return false; + } + }, AST_ObjectProperty); + var AST_ObjectSetter = DEFNODE("ObjectSetter", "quote static", function AST_ObjectSetter2(props) { + if (props) { + this.quote = props.quote; + this.static = props.static; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $propdoc: { + quote: "[string|undefined] the original quote character, if any", + static: "[boolean] whether this is a static setter (classes only)" + }, + $documentation: "An object setter property", + computed_key() { + return !(this.key instanceof AST_SymbolMethod); + } + }, AST_ObjectProperty); + var AST_ObjectGetter = DEFNODE("ObjectGetter", "quote static", function AST_ObjectGetter2(props) { + if (props) { + this.quote = props.quote; + this.static = props.static; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $propdoc: { + quote: "[string|undefined] the original quote character, if any", + static: "[boolean] whether this is a static getter (classes only)" + }, + $documentation: "An object getter property", + computed_key() { + return !(this.key instanceof AST_SymbolMethod); + } + }, AST_ObjectProperty); + var AST_ConciseMethod = DEFNODE("ConciseMethod", "quote static is_generator async", function AST_ConciseMethod2(props) { + if (props) { + this.quote = props.quote; + this.static = props.static; + this.is_generator = props.is_generator; + this.async = props.async; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $propdoc: { + quote: "[string|undefined] the original quote character, if any", + static: "[boolean] is this method static (classes only)", + is_generator: "[boolean] is this a generator method", + async: "[boolean] is this method async" + }, + $documentation: "An ES6 concise method inside an object or class", + computed_key() { + return !(this.key instanceof AST_SymbolMethod); + } + }, AST_ObjectProperty); + var AST_PrivateMethod = DEFNODE("PrivateMethod", "", function AST_PrivateMethod2(props) { + if (props) { + this.quote = props.quote; + this.static = props.static; + this.is_generator = props.is_generator; + this.async = props.async; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A private class method inside a class" + }, AST_ConciseMethod); + var AST_Class = DEFNODE("Class", "name extends properties", function AST_Class2(props) { + if (props) { + this.name = props.name; + this.extends = props.extends; + this.properties = props.properties; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $propdoc: { + name: "[AST_SymbolClass|AST_SymbolDefClass?] optional class name.", + extends: "[AST_Node]? optional parent class", + properties: "[AST_ObjectProperty*] array of properties" + }, + $documentation: "An ES6 class", + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.name) { + this.name._walk(visitor); + } + if (this.extends) { + this.extends._walk(visitor); + } + this.properties.forEach((prop) => prop._walk(visitor)); + }); + }, + _children_backwards(push2) { + let i = this.properties.length; + while (i--) + push2(this.properties[i]); + if (this.extends) + push2(this.extends); + if (this.name) + push2(this.name); + }, + visit_nondeferred_class_parts(visitor) { + if (this.extends) { + this.extends._walk(visitor); + } + this.properties.forEach((prop) => { + if (prop instanceof AST_ClassStaticBlock) { + prop._walk(visitor); + return; + } + if (prop.computed_key()) { + visitor.push(prop); + prop.key._walk(visitor); + visitor.pop(); + } + if ((prop instanceof AST_ClassPrivateProperty || prop instanceof AST_ClassProperty) && prop.static && prop.value) { + visitor.push(prop); + prop.value._walk(visitor); + visitor.pop(); + } + }); + }, + visit_deferred_class_parts(visitor) { + this.properties.forEach((prop) => { + if (prop instanceof AST_ConciseMethod) { + prop.walk(visitor); + } else if (prop instanceof AST_ClassProperty && !prop.static && prop.value) { + visitor.push(prop); + prop.value._walk(visitor); + visitor.pop(); + } + }); + } + }, AST_Scope); + var AST_ClassProperty = DEFNODE("ClassProperty", "static quote", function AST_ClassProperty2(props) { + if (props) { + this.static = props.static; + this.quote = props.quote; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $documentation: "A class property", + $propdoc: { + static: "[boolean] whether this is a static key", + quote: "[string] which quote is being used" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + if (this.key instanceof AST_Node) + this.key._walk(visitor); + if (this.value instanceof AST_Node) + this.value._walk(visitor); + }); + }, + _children_backwards(push2) { + if (this.value instanceof AST_Node) + push2(this.value); + if (this.key instanceof AST_Node) + push2(this.key); + }, + computed_key() { + return !(this.key instanceof AST_SymbolClassProperty); + } + }, AST_ObjectProperty); + var AST_ClassPrivateProperty = DEFNODE("ClassPrivateProperty", "", function AST_ClassPrivateProperty2(props) { + if (props) { + this.static = props.static; + this.quote = props.quote; + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A class property for a private property" + }, AST_ClassProperty); + var AST_PrivateIn = DEFNODE("PrivateIn", "key value", function AST_PrivateIn2(props) { + if (props) { + this.key = props.key; + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "An `in` binop when the key is private, eg #x in this", + _walk: function(visitor) { + return visitor._visit(this, function() { + this.key._walk(visitor); + this.value._walk(visitor); + }); + }, + _children_backwards(push2) { + push2(this.value); + push2(this.key); + } + }); + var AST_DefClass = DEFNODE("DefClass", null, function AST_DefClass2(props) { + if (props) { + this.name = props.name; + this.extends = props.extends; + this.properties = props.properties; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A class definition" + }, AST_Class); + var AST_ClassStaticBlock = DEFNODE("ClassStaticBlock", "body block_scope", function AST_ClassStaticBlock2(props) { + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + }, { + $documentation: "A block containing statements to be executed in the context of the class", + $propdoc: { + body: "[AST_Statement*] an array of statements" + }, + _walk: function(visitor) { + return visitor._visit(this, function() { + walk_body(this, visitor); + }); + }, + _children_backwards(push2) { + let i = this.body.length; + while (i--) + push2(this.body[i]); + }, + clone: clone_block_scope, + computed_key: () => false + }, AST_Scope); + var AST_ClassExpression = DEFNODE("ClassExpression", null, function AST_ClassExpression2(props) { + if (props) { + this.name = props.name; + this.extends = props.extends; + this.properties = props.properties; + this.variables = props.variables; + this.uses_with = props.uses_with; + this.uses_eval = props.uses_eval; + this.parent_scope = props.parent_scope; + this.enclosed = props.enclosed; + this.cname = props.cname; + this.body = props.body; + this.block_scope = props.block_scope; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A class expression." + }, AST_Class); + var AST_Symbol = DEFNODE("Symbol", "scope name thedef", function AST_Symbol2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $propdoc: { + name: "[string] name of this symbol", + scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)", + thedef: "[SymbolDef/S] the definition of this symbol" + }, + $documentation: "Base class for all symbols" + }); + var AST_NewTarget = DEFNODE("NewTarget", null, function AST_NewTarget2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A reference to new.target" + }); + var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", function AST_SymbolDeclaration2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)" + }, AST_Symbol); + var AST_SymbolVar = DEFNODE("SymbolVar", null, function AST_SymbolVar2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol defining a variable" + }, AST_SymbolDeclaration); + var AST_SymbolBlockDeclaration = DEFNODE("SymbolBlockDeclaration", null, function AST_SymbolBlockDeclaration2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for block-scoped declaration symbols" + }, AST_SymbolDeclaration); + var AST_SymbolConst = DEFNODE("SymbolConst", null, function AST_SymbolConst2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A constant declaration" + }, AST_SymbolBlockDeclaration); + var AST_SymbolLet = DEFNODE("SymbolLet", null, function AST_SymbolLet2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A block-scoped `let` declaration" + }, AST_SymbolBlockDeclaration); + var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, function AST_SymbolFunarg2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol naming a function argument" + }, AST_SymbolVar); + var AST_SymbolDefun = DEFNODE("SymbolDefun", null, function AST_SymbolDefun2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol defining a function" + }, AST_SymbolDeclaration); + var AST_SymbolMethod = DEFNODE("SymbolMethod", null, function AST_SymbolMethod2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol in an object defining a method" + }, AST_Symbol); + var AST_SymbolClassProperty = DEFNODE("SymbolClassProperty", null, function AST_SymbolClassProperty2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol for a class property" + }, AST_Symbol); + var AST_SymbolLambda = DEFNODE("SymbolLambda", null, function AST_SymbolLambda2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol naming a function expression" + }, AST_SymbolDeclaration); + var AST_SymbolDefClass = DEFNODE("SymbolDefClass", null, function AST_SymbolDefClass2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class." + }, AST_SymbolBlockDeclaration); + var AST_SymbolClass = DEFNODE("SymbolClass", null, function AST_SymbolClass2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol naming a class's name. Lexically scoped to the class." + }, AST_SymbolDeclaration); + var AST_SymbolCatch = DEFNODE("SymbolCatch", null, function AST_SymbolCatch2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol naming the exception in catch" + }, AST_SymbolBlockDeclaration); + var AST_SymbolImport = DEFNODE("SymbolImport", null, function AST_SymbolImport2(props) { + if (props) { + this.init = props.init; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol referring to an imported name" + }, AST_SymbolBlockDeclaration); + var AST_SymbolImportForeign = DEFNODE("SymbolImportForeign", null, function AST_SymbolImportForeign2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.quote = props.quote; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes" + }, AST_Symbol); + var AST_Label = DEFNODE("Label", "references", function AST_Label2(props) { + if (props) { + this.references = props.references; + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + this.initialize(); + } + this.flags = 0; + }, { + $documentation: "Symbol naming a label (declaration)", + $propdoc: { + references: "[AST_LoopControl*] a list of nodes referring to this label" + }, + initialize: function() { + this.references = []; + this.thedef = this; + } + }, AST_Symbol); + var AST_SymbolRef = DEFNODE("SymbolRef", null, function AST_SymbolRef2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Reference to some symbol (not definition/declaration)" + }, AST_Symbol); + var AST_SymbolExport = DEFNODE("SymbolExport", null, function AST_SymbolExport2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.quote = props.quote; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Symbol referring to a name to export" + }, AST_SymbolRef); + var AST_SymbolExportForeign = DEFNODE("SymbolExportForeign", null, function AST_SymbolExportForeign2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.quote = props.quote; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes" + }, AST_Symbol); + var AST_LabelRef = DEFNODE("LabelRef", null, function AST_LabelRef2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Reference to a label symbol" + }, AST_Symbol); + var AST_SymbolPrivateProperty = DEFNODE("SymbolPrivateProperty", null, function AST_SymbolPrivateProperty2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A symbol that refers to a private property" + }, AST_Symbol); + var AST_This = DEFNODE("This", null, function AST_This2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `this` symbol" + }, AST_Symbol); + var AST_Super = DEFNODE("Super", null, function AST_Super2(props) { + if (props) { + this.scope = props.scope; + this.name = props.name; + this.thedef = props.thedef; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `super` symbol" + }, AST_This); + var AST_Constant = DEFNODE("Constant", null, function AST_Constant2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for all constants", + getValue: function() { + return this.value; + } + }); + var AST_String = DEFNODE("String", "value quote", function AST_String2(props) { + if (props) { + this.value = props.value; + this.quote = props.quote; + this.start = props.start; + this.end = props.end; + this._annotations = props._annotations; + } + this.flags = 0; + }, { + $documentation: "A string literal", + $propdoc: { + value: "[string] the contents of this string", + quote: "[string] the original quote character" + } + }, AST_Constant); + var AST_Number = DEFNODE("Number", "value raw", function AST_Number2(props) { + if (props) { + this.value = props.value; + this.raw = props.raw; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A number literal", + $propdoc: { + value: "[number] the numeric value", + raw: "[string] numeric value as string" + } + }, AST_Constant); + var AST_BigInt = DEFNODE("BigInt", "value", function AST_BigInt2(props) { + if (props) { + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A big int literal", + $propdoc: { + value: "[string] big int value" + } + }, AST_Constant); + var AST_RegExp = DEFNODE("RegExp", "value", function AST_RegExp2(props) { + if (props) { + this.value = props.value; + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A regexp literal", + $propdoc: { + value: "[RegExp] the actual regexp" + } + }, AST_Constant); + var AST_Atom = DEFNODE("Atom", null, function AST_Atom2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for atoms" + }, AST_Constant); + var AST_Null = DEFNODE("Null", null, function AST_Null2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `null` atom", + value: null + }, AST_Atom); + var AST_NaN = DEFNODE("NaN", null, function AST_NaN2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The impossible value", + value: 0 / 0 + }, AST_Atom); + var AST_Undefined = DEFNODE("Undefined", null, function AST_Undefined2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `undefined` value", + value: function() { + }() + }, AST_Atom); + var AST_Hole = DEFNODE("Hole", null, function AST_Hole2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "A hole in an array", + value: function() { + }() + }, AST_Atom); + var AST_Infinity = DEFNODE("Infinity", null, function AST_Infinity2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `Infinity` value", + value: 1 / 0 + }, AST_Atom); + var AST_Boolean = DEFNODE("Boolean", null, function AST_Boolean2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "Base class for booleans" + }, AST_Atom); + var AST_False = DEFNODE("False", null, function AST_False2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `false` atom", + value: false + }, AST_Boolean); + var AST_True = DEFNODE("True", null, function AST_True2(props) { + if (props) { + this.start = props.start; + this.end = props.end; + } + this.flags = 0; + }, { + $documentation: "The `true` atom", + value: true + }, AST_Boolean); + function walk(node, cb, to_visit = [node]) { + const push2 = to_visit.push.bind(to_visit); + while (to_visit.length) { + const node2 = to_visit.pop(); + const ret = cb(node2, to_visit); + if (ret) { + if (ret === walk_abort) + return true; + continue; + } + node2._children_backwards(push2); + } + return false; + } + function walk_parent(node, cb, initial_stack) { + const to_visit = [node]; + const push2 = to_visit.push.bind(to_visit); + const stack = initial_stack ? initial_stack.slice() : []; + const parent_pop_indices = []; + let current; + const info = { + parent: (n = 0) => { + if (n === -1) { + return current; + } + if (initial_stack && n >= stack.length) { + n -= stack.length; + return initial_stack[initial_stack.length - (n + 1)]; + } + return stack[stack.length - (1 + n)]; + } + }; + while (to_visit.length) { + current = to_visit.pop(); + while (parent_pop_indices.length && to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]) { + stack.pop(); + parent_pop_indices.pop(); + } + const ret = cb(current, info); + if (ret) { + if (ret === walk_abort) + return true; + continue; + } + const visit_length = to_visit.length; + current._children_backwards(push2); + if (to_visit.length > visit_length) { + stack.push(current); + parent_pop_indices.push(visit_length - 1); + } + } + return false; + } + const walk_abort = Symbol("abort walk"); + class TreeWalker { + constructor(callback) { + this.visit = callback; + this.stack = []; + this.directives = /* @__PURE__ */ Object.create(null); + } + _visit(node, descend) { + this.push(node); + var ret = this.visit(node, descend ? function() { + descend.call(node); + } : noop); + if (!ret && descend) { + descend.call(node); + } + this.pop(); + return ret; + } + parent(n) { + return this.stack[this.stack.length - 2 - (n || 0)]; + } + push(node) { + if (node instanceof AST_Lambda) { + this.directives = Object.create(this.directives); + } else if (node instanceof AST_Directive && !this.directives[node.value]) { + this.directives[node.value] = node; + } else if (node instanceof AST_Class) { + this.directives = Object.create(this.directives); + if (!this.directives["use strict"]) { + this.directives["use strict"] = node; + } + } + this.stack.push(node); + } + pop() { + var node = this.stack.pop(); + if (node instanceof AST_Lambda || node instanceof AST_Class) { + this.directives = Object.getPrototypeOf(this.directives); + } + } + self() { + return this.stack[this.stack.length - 1]; + } + find_parent(type) { + var stack = this.stack; + for (var i = stack.length; --i >= 0; ) { + var x = stack[i]; + if (x instanceof type) + return x; + } + } + find_scope() { + var stack = this.stack; + for (var i = stack.length; --i >= 0; ) { + const p = stack[i]; + if (p instanceof AST_Toplevel) + return p; + if (p instanceof AST_Lambda) + return p; + if (p.block_scope) + return p.block_scope; + } + } + has_directive(type) { + var dir = this.directives[type]; + if (dir) + return dir; + var node = this.stack[this.stack.length - 1]; + if (node instanceof AST_Scope && node.body) { + for (var i = 0; i < node.body.length; ++i) { + var st = node.body[i]; + if (!(st instanceof AST_Directive)) + break; + if (st.value == type) + return st; + } + } + } + loopcontrol_target(node) { + var stack = this.stack; + if (node.label) + for (var i = stack.length; --i >= 0; ) { + var x = stack[i]; + if (x instanceof AST_LabeledStatement && x.label.name == node.label.name) + return x.body; + } + else + for (var i = stack.length; --i >= 0; ) { + var x = stack[i]; + if (x instanceof AST_IterationStatement || node instanceof AST_Break && x instanceof AST_Switch) + return x; + } + } + } + class TreeTransformer extends TreeWalker { + constructor(before, after) { + super(); + this.before = before; + this.after = after; + } + } + const _PURE = 1; + const _INLINE = 2; + const _NOINLINE = 4; + const _KEY = 8; + const _MANGLEPROP = 16; + function def_transform(node, descend) { + node.DEFMETHOD("transform", function(tw, in_list) { + let transformed = void 0; + tw.push(this); + if (tw.before) + transformed = tw.before(this, descend, in_list); + if (transformed === void 0) { + transformed = this; + descend(transformed, tw); + if (tw.after) { + const after_ret = tw.after(transformed, in_list); + if (after_ret !== void 0) + transformed = after_ret; + } + } + tw.pop(); + return transformed; + }); + } + def_transform(AST_Node, noop); + def_transform(AST_LabeledStatement, function(self2, tw) { + self2.label = self2.label.transform(tw); + self2.body = self2.body.transform(tw); + }); + def_transform(AST_SimpleStatement, function(self2, tw) { + self2.body = self2.body.transform(tw); + }); + def_transform(AST_Block, function(self2, tw) { + self2.body = MAP(self2.body, tw); + }); + def_transform(AST_Do, function(self2, tw) { + self2.body = self2.body.transform(tw); + self2.condition = self2.condition.transform(tw); + }); + def_transform(AST_While, function(self2, tw) { + self2.condition = self2.condition.transform(tw); + self2.body = self2.body.transform(tw); + }); + def_transform(AST_For, function(self2, tw) { + if (self2.init) + self2.init = self2.init.transform(tw); + if (self2.condition) + self2.condition = self2.condition.transform(tw); + if (self2.step) + self2.step = self2.step.transform(tw); + self2.body = self2.body.transform(tw); + }); + def_transform(AST_ForIn, function(self2, tw) { + self2.init = self2.init.transform(tw); + self2.object = self2.object.transform(tw); + self2.body = self2.body.transform(tw); + }); + def_transform(AST_With, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + self2.body = self2.body.transform(tw); + }); + def_transform(AST_Exit, function(self2, tw) { + if (self2.value) + self2.value = self2.value.transform(tw); + }); + def_transform(AST_LoopControl, function(self2, tw) { + if (self2.label) + self2.label = self2.label.transform(tw); + }); + def_transform(AST_If, function(self2, tw) { + self2.condition = self2.condition.transform(tw); + self2.body = self2.body.transform(tw); + if (self2.alternative) + self2.alternative = self2.alternative.transform(tw); + }); + def_transform(AST_Switch, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + self2.body = MAP(self2.body, tw); + }); + def_transform(AST_Case, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + self2.body = MAP(self2.body, tw); + }); + def_transform(AST_Try, function(self2, tw) { + self2.body = self2.body.transform(tw); + if (self2.bcatch) + self2.bcatch = self2.bcatch.transform(tw); + if (self2.bfinally) + self2.bfinally = self2.bfinally.transform(tw); + }); + def_transform(AST_Catch, function(self2, tw) { + if (self2.argname) + self2.argname = self2.argname.transform(tw); + self2.body = MAP(self2.body, tw); + }); + def_transform(AST_Definitions, function(self2, tw) { + self2.definitions = MAP(self2.definitions, tw); + }); + def_transform(AST_VarDef, function(self2, tw) { + self2.name = self2.name.transform(tw); + if (self2.value) + self2.value = self2.value.transform(tw); + }); + def_transform(AST_Destructuring, function(self2, tw) { + self2.names = MAP(self2.names, tw); + }); + def_transform(AST_Lambda, function(self2, tw) { + if (self2.name) + self2.name = self2.name.transform(tw); + self2.argnames = MAP(self2.argnames, tw, false); + if (self2.body instanceof AST_Node) { + self2.body = self2.body.transform(tw); + } else { + self2.body = MAP(self2.body, tw); + } + }); + def_transform(AST_Call, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + self2.args = MAP(self2.args, tw, false); + }); + def_transform(AST_Sequence, function(self2, tw) { + const result = MAP(self2.expressions, tw); + self2.expressions = result.length ? result : [new AST_Number({ value: 0 })]; + }); + def_transform(AST_PropAccess, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_Sub, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + self2.property = self2.property.transform(tw); + }); + def_transform(AST_Chain, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_Yield, function(self2, tw) { + if (self2.expression) + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_Await, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_Unary, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_Binary, function(self2, tw) { + self2.left = self2.left.transform(tw); + self2.right = self2.right.transform(tw); + }); + def_transform(AST_PrivateIn, function(self2, tw) { + self2.key = self2.key.transform(tw); + self2.value = self2.value.transform(tw); + }); + def_transform(AST_Conditional, function(self2, tw) { + self2.condition = self2.condition.transform(tw); + self2.consequent = self2.consequent.transform(tw); + self2.alternative = self2.alternative.transform(tw); + }); + def_transform(AST_Array, function(self2, tw) { + self2.elements = MAP(self2.elements, tw); + }); + def_transform(AST_Object, function(self2, tw) { + self2.properties = MAP(self2.properties, tw); + }); + def_transform(AST_ObjectProperty, function(self2, tw) { + if (self2.key instanceof AST_Node) { + self2.key = self2.key.transform(tw); + } + if (self2.value) + self2.value = self2.value.transform(tw); + }); + def_transform(AST_Class, function(self2, tw) { + if (self2.name) + self2.name = self2.name.transform(tw); + if (self2.extends) + self2.extends = self2.extends.transform(tw); + self2.properties = MAP(self2.properties, tw); + }); + def_transform(AST_ClassStaticBlock, function(self2, tw) { + self2.body = MAP(self2.body, tw); + }); + def_transform(AST_Expansion, function(self2, tw) { + self2.expression = self2.expression.transform(tw); + }); + def_transform(AST_NameMapping, function(self2, tw) { + self2.foreign_name = self2.foreign_name.transform(tw); + self2.name = self2.name.transform(tw); + }); + def_transform(AST_Import, function(self2, tw) { + if (self2.imported_name) + self2.imported_name = self2.imported_name.transform(tw); + if (self2.imported_names) + MAP(self2.imported_names, tw); + self2.module_name = self2.module_name.transform(tw); + }); + def_transform(AST_Export, function(self2, tw) { + if (self2.exported_definition) + self2.exported_definition = self2.exported_definition.transform(tw); + if (self2.exported_value) + self2.exported_value = self2.exported_value.transform(tw); + if (self2.exported_names) + MAP(self2.exported_names, tw); + if (self2.module_name) + self2.module_name = self2.module_name.transform(tw); + }); + def_transform(AST_TemplateString, function(self2, tw) { + self2.segments = MAP(self2.segments, tw); + }); + def_transform(AST_PrefixedTemplateString, function(self2, tw) { + self2.prefix = self2.prefix.transform(tw); + self2.template_string = self2.template_string.transform(tw); + }); + (function() { + var normalize_directives = function(body) { + for (var i = 0; i < body.length; i++) { + if (body[i] instanceof AST_Statement && body[i].body instanceof AST_String) { + body[i] = new AST_Directive({ + start: body[i].start, + end: body[i].end, + value: body[i].body.value + }); + } else { + return body; + } + } + return body; + }; + const assert_clause_from_moz = (assertions) => { + if (assertions && assertions.length > 0) { + return new AST_Object({ + start: my_start_token(assertions), + end: my_end_token(assertions), + properties: assertions.map((assertion_kv) => new AST_ObjectKeyVal({ + start: my_start_token(assertion_kv), + end: my_end_token(assertion_kv), + key: assertion_kv.key.name || assertion_kv.key.value, + value: from_moz(assertion_kv.value) + })) + }); + } + return null; + }; + var MOZ_TO_ME = { + Program: function(M) { + return new AST_Toplevel({ + start: my_start_token(M), + end: my_end_token(M), + body: normalize_directives(M.body.map(from_moz)) + }); + }, + ArrayPattern: function(M) { + return new AST_Destructuring({ + start: my_start_token(M), + end: my_end_token(M), + names: M.elements.map(function(elm) { + if (elm === null) { + return new AST_Hole(); + } + return from_moz(elm); + }), + is_array: true + }); + }, + ObjectPattern: function(M) { + return new AST_Destructuring({ + start: my_start_token(M), + end: my_end_token(M), + names: M.properties.map(from_moz), + is_array: false + }); + }, + AssignmentPattern: function(M) { + return new AST_DefaultAssign({ + start: my_start_token(M), + end: my_end_token(M), + left: from_moz(M.left), + operator: "=", + right: from_moz(M.right) + }); + }, + SpreadElement: function(M) { + return new AST_Expansion({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.argument) + }); + }, + RestElement: function(M) { + return new AST_Expansion({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.argument) + }); + }, + TemplateElement: function(M) { + return new AST_TemplateSegment({ + start: my_start_token(M), + end: my_end_token(M), + value: M.value.cooked, + raw: M.value.raw + }); + }, + TemplateLiteral: function(M) { + var segments = []; + for (var i = 0; i < M.quasis.length; i++) { + segments.push(from_moz(M.quasis[i])); + if (M.expressions[i]) { + segments.push(from_moz(M.expressions[i])); + } + } + return new AST_TemplateString({ + start: my_start_token(M), + end: my_end_token(M), + segments + }); + }, + TaggedTemplateExpression: function(M) { + return new AST_PrefixedTemplateString({ + start: my_start_token(M), + end: my_end_token(M), + template_string: from_moz(M.quasi), + prefix: from_moz(M.tag) + }); + }, + FunctionDeclaration: function(M) { + return new AST_Defun({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + argnames: M.params.map(from_moz), + is_generator: M.generator, + async: M.async, + body: normalize_directives(from_moz(M.body).body) + }); + }, + FunctionExpression: function(M) { + return new AST_Function({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + argnames: M.params.map(from_moz), + is_generator: M.generator, + async: M.async, + body: normalize_directives(from_moz(M.body).body) + }); + }, + ArrowFunctionExpression: function(M) { + const body = M.body.type === "BlockStatement" ? from_moz(M.body).body : [make_node(AST_Return, {}, { value: from_moz(M.body) })]; + return new AST_Arrow({ + start: my_start_token(M), + end: my_end_token(M), + argnames: M.params.map(from_moz), + body, + async: M.async + }); + }, + ExpressionStatement: function(M) { + return new AST_SimpleStatement({ + start: my_start_token(M), + end: my_end_token(M), + body: from_moz(M.expression) + }); + }, + TryStatement: function(M) { + var handlers = M.handlers || [M.handler]; + if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) { + throw new Error("Multiple catch clauses are not supported."); + } + return new AST_Try({ + start: my_start_token(M), + end: my_end_token(M), + body: new AST_TryBlock(from_moz(M.block)), + bcatch: from_moz(handlers[0]), + bfinally: M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null + }); + }, + Property: function(M) { + var key = M.key; + var args = { + start: my_start_token(key || M.value), + end: my_end_token(M.value), + key: key.type == "Identifier" ? key.name : key.value, + value: from_moz(M.value) + }; + if (M.computed) { + args.key = from_moz(M.key); + } + if (M.method) { + args.is_generator = M.value.generator; + args.async = M.value.async; + if (!M.computed) { + args.key = new AST_SymbolMethod({ name: args.key }); + } else { + args.key = from_moz(M.key); + } + return new AST_ConciseMethod(args); + } + if (M.kind == "init") { + if (key.type != "Identifier" && key.type != "Literal") { + args.key = from_moz(key); + } + return new AST_ObjectKeyVal(args); + } + if (typeof args.key === "string" || typeof args.key === "number") { + args.key = new AST_SymbolMethod({ + name: args.key + }); + } + args.value = new AST_Accessor(args.value); + if (M.kind == "get") + return new AST_ObjectGetter(args); + if (M.kind == "set") + return new AST_ObjectSetter(args); + if (M.kind == "method") { + args.async = M.value.async; + args.is_generator = M.value.generator; + args.quote = M.computed ? '"' : null; + return new AST_ConciseMethod(args); + } + }, + MethodDefinition: function(M) { + const is_private = M.key.type === "PrivateIdentifier"; + const key = M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }); + var args = { + start: my_start_token(M), + end: my_end_token(M), + key, + value: from_moz(M.value), + static: M.static + }; + if (M.kind == "get") { + return new (is_private ? AST_PrivateGetter : AST_ObjectGetter)(args); + } + if (M.kind == "set") { + return new (is_private ? AST_PrivateSetter : AST_ObjectSetter)(args); + } + args.is_generator = M.value.generator; + args.async = M.value.async; + return new (is_private ? AST_PrivateMethod : AST_ConciseMethod)(args); + }, + FieldDefinition: function(M) { + let key; + if (M.computed) { + key = from_moz(M.key); + } else { + if (M.key.type !== "Identifier") + throw new Error("Non-Identifier key in FieldDefinition"); + key = from_moz(M.key); + } + return new AST_ClassProperty({ + start: my_start_token(M), + end: my_end_token(M), + key, + value: from_moz(M.value), + static: M.static + }); + }, + PropertyDefinition: function(M) { + let key; + if (M.computed) { + key = from_moz(M.key); + } else if (M.key.type === "PrivateIdentifier") { + return new AST_ClassPrivateProperty({ + start: my_start_token(M), + end: my_end_token(M), + key: from_moz(M.key), + value: from_moz(M.value), + static: M.static + }); + } else { + if (M.key.type !== "Identifier") { + throw new Error("Non-Identifier key in PropertyDefinition"); + } + key = from_moz(M.key); + } + return new AST_ClassProperty({ + start: my_start_token(M), + end: my_end_token(M), + key, + value: from_moz(M.value), + static: M.static + }); + }, + PrivateIdentifier: function(M) { + return new AST_SymbolPrivateProperty({ + start: my_start_token(M), + end: my_end_token(M), + name: M.name + }); + }, + StaticBlock: function(M) { + return new AST_ClassStaticBlock({ + start: my_start_token(M), + end: my_end_token(M), + body: M.body.map(from_moz) + }); + }, + ArrayExpression: function(M) { + return new AST_Array({ + start: my_start_token(M), + end: my_end_token(M), + elements: M.elements.map(function(elem) { + return elem === null ? new AST_Hole() : from_moz(elem); + }) + }); + }, + ObjectExpression: function(M) { + return new AST_Object({ + start: my_start_token(M), + end: my_end_token(M), + properties: M.properties.map(function(prop) { + if (prop.type === "SpreadElement") { + return from_moz(prop); + } + prop.type = "Property"; + return from_moz(prop); + }) + }); + }, + SequenceExpression: function(M) { + return new AST_Sequence({ + start: my_start_token(M), + end: my_end_token(M), + expressions: M.expressions.map(from_moz) + }); + }, + MemberExpression: function(M) { + if (M.property.type === "PrivateIdentifier") { + return new AST_DotHash({ + start: my_start_token(M), + end: my_end_token(M), + property: M.property.name, + expression: from_moz(M.object), + optional: M.optional || false + }); + } + return new (M.computed ? AST_Sub : AST_Dot)({ + start: my_start_token(M), + end: my_end_token(M), + property: M.computed ? from_moz(M.property) : M.property.name, + expression: from_moz(M.object), + optional: M.optional || false + }); + }, + ChainExpression: function(M) { + return new AST_Chain({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.expression) + }); + }, + SwitchCase: function(M) { + return new (M.test ? AST_Case : AST_Default)({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.test), + body: M.consequent.map(from_moz) + }); + }, + VariableDeclaration: function(M) { + return new (M.kind === "const" ? AST_Const : M.kind === "let" ? AST_Let : AST_Var)({ + start: my_start_token(M), + end: my_end_token(M), + definitions: M.declarations.map(from_moz) + }); + }, + ImportDeclaration: function(M) { + var imported_name = null; + var imported_names = null; + M.specifiers.forEach(function(specifier) { + if (specifier.type === "ImportSpecifier" || specifier.type === "ImportNamespaceSpecifier") { + if (!imported_names) { + imported_names = []; + } + imported_names.push(from_moz(specifier)); + } else if (specifier.type === "ImportDefaultSpecifier") { + imported_name = from_moz(specifier); + } + }); + return new AST_Import({ + start: my_start_token(M), + end: my_end_token(M), + imported_name, + imported_names, + module_name: from_moz(M.source), + assert_clause: assert_clause_from_moz(M.assertions) + }); + }, + ImportSpecifier: function(M) { + return new AST_NameMapping({ + start: my_start_token(M), + end: my_end_token(M), + foreign_name: from_moz(M.imported), + name: from_moz(M.local) + }); + }, + ImportDefaultSpecifier: function(M) { + return from_moz(M.local); + }, + ImportNamespaceSpecifier: function(M) { + return new AST_NameMapping({ + start: my_start_token(M), + end: my_end_token(M), + foreign_name: new AST_SymbolImportForeign({ name: "*" }), + name: from_moz(M.local) + }); + }, + ExportAllDeclaration: function(M) { + var foreign_name = M.exported == null ? new AST_SymbolExportForeign({ name: "*" }) : from_moz(M.exported); + return new AST_Export({ + start: my_start_token(M), + end: my_end_token(M), + exported_names: [ + new AST_NameMapping({ + name: new AST_SymbolExportForeign({ name: "*" }), + foreign_name + }) + ], + module_name: from_moz(M.source), + assert_clause: assert_clause_from_moz(M.assertions) + }); + }, + ExportNamedDeclaration: function(M) { + return new AST_Export({ + start: my_start_token(M), + end: my_end_token(M), + exported_definition: from_moz(M.declaration), + exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function(specifier) { + return from_moz(specifier); + }) : null, + module_name: from_moz(M.source), + assert_clause: assert_clause_from_moz(M.assertions) + }); + }, + ExportDefaultDeclaration: function(M) { + return new AST_Export({ + start: my_start_token(M), + end: my_end_token(M), + exported_value: from_moz(M.declaration), + is_default: true + }); + }, + ExportSpecifier: function(M) { + return new AST_NameMapping({ + foreign_name: from_moz(M.exported), + name: from_moz(M.local) + }); + }, + Literal: function(M) { + var val = M.value, args = { + start: my_start_token(M), + end: my_end_token(M) + }; + var rx = M.regex; + if (rx && rx.pattern) { + args.value = { + source: rx.pattern, + flags: rx.flags + }; + return new AST_RegExp(args); + } else if (rx) { + const rx_source = M.raw || val; + const match = rx_source.match(/^\/(.*)\/(\w*)$/); + if (!match) + throw new Error("Invalid regex source " + rx_source); + const [_, source, flags] = match; + args.value = { source, flags }; + return new AST_RegExp(args); + } + if (val === null) + return new AST_Null(args); + switch (typeof val) { + case "string": + args.quote = '"'; + var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2]; + if (p.type == "ImportSpecifier") { + args.name = val; + return new AST_SymbolImportForeign(args); + } else if (p.type == "ExportSpecifier") { + args.name = val; + if (M == p.exported) { + return new AST_SymbolExportForeign(args); + } else { + return new AST_SymbolExport(args); + } + } else if (p.type == "ExportAllDeclaration" && M == p.exported) { + args.name = val; + return new AST_SymbolExportForeign(args); + } + args.value = val; + return new AST_String(args); + case "number": + args.value = val; + args.raw = M.raw || val.toString(); + return new AST_Number(args); + case "boolean": + return new (val ? AST_True : AST_False)(args); + } + }, + MetaProperty: function(M) { + if (M.meta.name === "new" && M.property.name === "target") { + return new AST_NewTarget({ + start: my_start_token(M), + end: my_end_token(M) + }); + } else if (M.meta.name === "import" && M.property.name === "meta") { + return new AST_ImportMeta({ + start: my_start_token(M), + end: my_end_token(M) + }); + } + }, + Identifier: function(M) { + var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2]; + return new (p.type == "LabeledStatement" ? AST_Label : p.type == "VariableDeclarator" && p.id === M ? p.kind == "const" ? AST_SymbolConst : p.kind == "let" ? AST_SymbolLet : AST_SymbolVar : /Import.*Specifier/.test(p.type) ? p.local === M ? AST_SymbolImport : AST_SymbolImportForeign : p.type == "ExportSpecifier" ? p.local === M ? AST_SymbolExport : AST_SymbolExportForeign : p.type == "FunctionExpression" ? p.id === M ? AST_SymbolLambda : AST_SymbolFunarg : p.type == "FunctionDeclaration" ? p.id === M ? AST_SymbolDefun : AST_SymbolFunarg : p.type == "ArrowFunctionExpression" ? p.params.includes(M) ? AST_SymbolFunarg : AST_SymbolRef : p.type == "ClassExpression" ? p.id === M ? AST_SymbolClass : AST_SymbolRef : p.type == "Property" ? p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod : p.type == "PropertyDefinition" || p.type === "FieldDefinition" ? p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty : p.type == "ClassDeclaration" ? p.id === M ? AST_SymbolDefClass : AST_SymbolRef : p.type == "MethodDefinition" ? p.computed ? AST_SymbolRef : AST_SymbolMethod : p.type == "CatchClause" ? AST_SymbolCatch : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef : AST_SymbolRef)({ + start: my_start_token(M), + end: my_end_token(M), + name: M.name + }); + }, + BigIntLiteral(M) { + return new AST_BigInt({ + start: my_start_token(M), + end: my_end_token(M), + value: M.value + }); + }, + EmptyStatement: function(M) { + return new AST_EmptyStatement({ + start: my_start_token(M), + end: my_end_token(M) + }); + }, + BlockStatement: function(M) { + return new AST_BlockStatement({ + start: my_start_token(M), + end: my_end_token(M), + body: M.body.map(from_moz) + }); + }, + IfStatement: function(M) { + return new AST_If({ + start: my_start_token(M), + end: my_end_token(M), + condition: from_moz(M.test), + body: from_moz(M.consequent), + alternative: from_moz(M.alternate) + }); + }, + LabeledStatement: function(M) { + return new AST_LabeledStatement({ + start: my_start_token(M), + end: my_end_token(M), + label: from_moz(M.label), + body: from_moz(M.body) + }); + }, + BreakStatement: function(M) { + return new AST_Break({ + start: my_start_token(M), + end: my_end_token(M), + label: from_moz(M.label) + }); + }, + ContinueStatement: function(M) { + return new AST_Continue({ + start: my_start_token(M), + end: my_end_token(M), + label: from_moz(M.label) + }); + }, + WithStatement: function(M) { + return new AST_With({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.object), + body: from_moz(M.body) + }); + }, + SwitchStatement: function(M) { + return new AST_Switch({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.discriminant), + body: M.cases.map(from_moz) + }); + }, + ReturnStatement: function(M) { + return new AST_Return({ + start: my_start_token(M), + end: my_end_token(M), + value: from_moz(M.argument) + }); + }, + ThrowStatement: function(M) { + return new AST_Throw({ + start: my_start_token(M), + end: my_end_token(M), + value: from_moz(M.argument) + }); + }, + WhileStatement: function(M) { + return new AST_While({ + start: my_start_token(M), + end: my_end_token(M), + condition: from_moz(M.test), + body: from_moz(M.body) + }); + }, + DoWhileStatement: function(M) { + return new AST_Do({ + start: my_start_token(M), + end: my_end_token(M), + condition: from_moz(M.test), + body: from_moz(M.body) + }); + }, + ForStatement: function(M) { + return new AST_For({ + start: my_start_token(M), + end: my_end_token(M), + init: from_moz(M.init), + condition: from_moz(M.test), + step: from_moz(M.update), + body: from_moz(M.body) + }); + }, + ForInStatement: function(M) { + return new AST_ForIn({ + start: my_start_token(M), + end: my_end_token(M), + init: from_moz(M.left), + object: from_moz(M.right), + body: from_moz(M.body) + }); + }, + ForOfStatement: function(M) { + return new AST_ForOf({ + start: my_start_token(M), + end: my_end_token(M), + init: from_moz(M.left), + object: from_moz(M.right), + body: from_moz(M.body), + await: M.await + }); + }, + AwaitExpression: function(M) { + return new AST_Await({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.argument) + }); + }, + YieldExpression: function(M) { + return new AST_Yield({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.argument), + is_star: M.delegate + }); + }, + DebuggerStatement: function(M) { + return new AST_Debugger({ + start: my_start_token(M), + end: my_end_token(M) + }); + }, + VariableDeclarator: function(M) { + return new AST_VarDef({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + value: from_moz(M.init) + }); + }, + CatchClause: function(M) { + return new AST_Catch({ + start: my_start_token(M), + end: my_end_token(M), + argname: from_moz(M.param), + body: from_moz(M.body).body + }); + }, + ThisExpression: function(M) { + return new AST_This({ + start: my_start_token(M), + end: my_end_token(M) + }); + }, + Super: function(M) { + return new AST_Super({ + start: my_start_token(M), + end: my_end_token(M) + }); + }, + BinaryExpression: function(M) { + if (M.left.type === "PrivateIdentifier") { + return new AST_PrivateIn({ + start: my_start_token(M), + end: my_end_token(M), + key: new AST_SymbolPrivateProperty({ + start: my_start_token(M.left), + end: my_end_token(M.left), + name: M.left.name + }), + value: from_moz(M.right) + }); + } + return new AST_Binary({ + start: my_start_token(M), + end: my_end_token(M), + operator: M.operator, + left: from_moz(M.left), + right: from_moz(M.right) + }); + }, + LogicalExpression: function(M) { + return new AST_Binary({ + start: my_start_token(M), + end: my_end_token(M), + operator: M.operator, + left: from_moz(M.left), + right: from_moz(M.right) + }); + }, + AssignmentExpression: function(M) { + return new AST_Assign({ + start: my_start_token(M), + end: my_end_token(M), + operator: M.operator, + left: from_moz(M.left), + right: from_moz(M.right) + }); + }, + ConditionalExpression: function(M) { + return new AST_Conditional({ + start: my_start_token(M), + end: my_end_token(M), + condition: from_moz(M.test), + consequent: from_moz(M.consequent), + alternative: from_moz(M.alternate) + }); + }, + NewExpression: function(M) { + return new AST_New({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.callee), + args: M.arguments.map(from_moz) + }); + }, + CallExpression: function(M) { + return new AST_Call({ + start: my_start_token(M), + end: my_end_token(M), + expression: from_moz(M.callee), + optional: M.optional, + args: M.arguments.map(from_moz) + }); + } + }; + MOZ_TO_ME.UpdateExpression = MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) { + var prefix = "prefix" in M ? M.prefix : M.type == "UnaryExpression" ? true : false; + return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({ + start: my_start_token(M), + end: my_end_token(M), + operator: M.operator, + expression: from_moz(M.argument) + }); + }; + MOZ_TO_ME.ClassDeclaration = MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) { + return new (M.type === "ClassDeclaration" ? AST_DefClass : AST_ClassExpression)({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + extends: from_moz(M.superClass), + properties: M.body.body.map(from_moz) + }); + }; + def_to_moz(AST_EmptyStatement, function To_Moz_EmptyStatement() { + return { + type: "EmptyStatement" + }; + }); + def_to_moz(AST_BlockStatement, function To_Moz_BlockStatement(M) { + return { + type: "BlockStatement", + body: M.body.map(to_moz) + }; + }); + def_to_moz(AST_If, function To_Moz_IfStatement(M) { + return { + type: "IfStatement", + test: to_moz(M.condition), + consequent: to_moz(M.body), + alternate: to_moz(M.alternative) + }; + }); + def_to_moz(AST_LabeledStatement, function To_Moz_LabeledStatement(M) { + return { + type: "LabeledStatement", + label: to_moz(M.label), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_Break, function To_Moz_BreakStatement(M) { + return { + type: "BreakStatement", + label: to_moz(M.label) + }; + }); + def_to_moz(AST_Continue, function To_Moz_ContinueStatement(M) { + return { + type: "ContinueStatement", + label: to_moz(M.label) + }; + }); + def_to_moz(AST_With, function To_Moz_WithStatement(M) { + return { + type: "WithStatement", + object: to_moz(M.expression), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_Switch, function To_Moz_SwitchStatement(M) { + return { + type: "SwitchStatement", + discriminant: to_moz(M.expression), + cases: M.body.map(to_moz) + }; + }); + def_to_moz(AST_Return, function To_Moz_ReturnStatement(M) { + return { + type: "ReturnStatement", + argument: to_moz(M.value) + }; + }); + def_to_moz(AST_Throw, function To_Moz_ThrowStatement(M) { + return { + type: "ThrowStatement", + argument: to_moz(M.value) + }; + }); + def_to_moz(AST_While, function To_Moz_WhileStatement(M) { + return { + type: "WhileStatement", + test: to_moz(M.condition), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_Do, function To_Moz_DoWhileStatement(M) { + return { + type: "DoWhileStatement", + test: to_moz(M.condition), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_For, function To_Moz_ForStatement(M) { + return { + type: "ForStatement", + init: to_moz(M.init), + test: to_moz(M.condition), + update: to_moz(M.step), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_ForIn, function To_Moz_ForInStatement(M) { + return { + type: "ForInStatement", + left: to_moz(M.init), + right: to_moz(M.object), + body: to_moz(M.body) + }; + }); + def_to_moz(AST_ForOf, function To_Moz_ForOfStatement(M) { + return { + type: "ForOfStatement", + left: to_moz(M.init), + right: to_moz(M.object), + body: to_moz(M.body), + await: M.await + }; + }); + def_to_moz(AST_Await, function To_Moz_AwaitExpression(M) { + return { + type: "AwaitExpression", + argument: to_moz(M.expression) + }; + }); + def_to_moz(AST_Yield, function To_Moz_YieldExpression(M) { + return { + type: "YieldExpression", + argument: to_moz(M.expression), + delegate: M.is_star + }; + }); + def_to_moz(AST_Debugger, function To_Moz_DebuggerStatement() { + return { + type: "DebuggerStatement" + }; + }); + def_to_moz(AST_VarDef, function To_Moz_VariableDeclarator(M) { + return { + type: "VariableDeclarator", + id: to_moz(M.name), + init: to_moz(M.value) + }; + }); + def_to_moz(AST_Catch, function To_Moz_CatchClause(M) { + return { + type: "CatchClause", + param: to_moz(M.argname), + body: to_moz_block(M) + }; + }); + def_to_moz(AST_This, function To_Moz_ThisExpression() { + return { + type: "ThisExpression" + }; + }); + def_to_moz(AST_Super, function To_Moz_Super() { + return { + type: "Super" + }; + }); + def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) { + return { + type: "BinaryExpression", + operator: M.operator, + left: to_moz(M.left), + right: to_moz(M.right) + }; + }); + def_to_moz(AST_Binary, function To_Moz_LogicalExpression(M) { + return { + type: "LogicalExpression", + operator: M.operator, + left: to_moz(M.left), + right: to_moz(M.right) + }; + }); + def_to_moz(AST_Assign, function To_Moz_AssignmentExpression(M) { + return { + type: "AssignmentExpression", + operator: M.operator, + left: to_moz(M.left), + right: to_moz(M.right) + }; + }); + def_to_moz(AST_Conditional, function To_Moz_ConditionalExpression(M) { + return { + type: "ConditionalExpression", + test: to_moz(M.condition), + consequent: to_moz(M.consequent), + alternate: to_moz(M.alternative) + }; + }); + def_to_moz(AST_New, function To_Moz_NewExpression(M) { + return { + type: "NewExpression", + callee: to_moz(M.expression), + arguments: M.args.map(to_moz) + }; + }); + def_to_moz(AST_Call, function To_Moz_CallExpression(M) { + return { + type: "CallExpression", + callee: to_moz(M.expression), + optional: M.optional, + arguments: M.args.map(to_moz) + }; + }); + def_to_moz(AST_Toplevel, function To_Moz_Program(M) { + return to_moz_scope("Program", M); + }); + def_to_moz(AST_Expansion, function To_Moz_Spread(M) { + return { + type: to_moz_in_destructuring() ? "RestElement" : "SpreadElement", + argument: to_moz(M.expression) + }; + }); + def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) { + return { + type: "TaggedTemplateExpression", + tag: to_moz(M.prefix), + quasi: to_moz(M.template_string) + }; + }); + def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) { + var quasis = []; + var expressions = []; + for (var i = 0; i < M.segments.length; i++) { + if (i % 2 !== 0) { + expressions.push(to_moz(M.segments[i])); + } else { + quasis.push({ + type: "TemplateElement", + value: { + raw: M.segments[i].raw, + cooked: M.segments[i].value + }, + tail: i === M.segments.length - 1 + }); + } + } + return { + type: "TemplateLiteral", + quasis, + expressions + }; + }); + def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) { + return { + type: "FunctionDeclaration", + id: to_moz(M.name), + params: M.argnames.map(to_moz), + generator: M.is_generator, + async: M.async, + body: to_moz_scope("BlockStatement", M) + }; + }); + def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) { + var is_generator = parent.is_generator !== void 0 ? parent.is_generator : M.is_generator; + return { + type: "FunctionExpression", + id: to_moz(M.name), + params: M.argnames.map(to_moz), + generator: is_generator, + async: M.async, + body: to_moz_scope("BlockStatement", M) + }; + }); + def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) { + var body = { + type: "BlockStatement", + body: M.body.map(to_moz) + }; + return { + type: "ArrowFunctionExpression", + params: M.argnames.map(to_moz), + async: M.async, + body + }; + }); + def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) { + if (M.is_array) { + return { + type: "ArrayPattern", + elements: M.names.map(to_moz) + }; + } + return { + type: "ObjectPattern", + properties: M.names.map(to_moz) + }; + }); + def_to_moz(AST_Directive, function To_Moz_Directive(M) { + return { + type: "ExpressionStatement", + expression: { + type: "Literal", + value: M.value, + raw: M.print_to_string() + }, + directive: M.value + }; + }); + def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) { + return { + type: "ExpressionStatement", + expression: to_moz(M.body) + }; + }); + def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) { + return { + type: "SwitchCase", + test: to_moz(M.expression), + consequent: M.body.map(to_moz) + }; + }); + def_to_moz(AST_Try, function To_Moz_TryStatement(M) { + return { + type: "TryStatement", + block: to_moz_block(M.body), + handler: to_moz(M.bcatch), + guardedHandlers: [], + finalizer: to_moz(M.bfinally) + }; + }); + def_to_moz(AST_Catch, function To_Moz_CatchClause(M) { + return { + type: "CatchClause", + param: to_moz(M.argname), + guard: null, + body: to_moz_block(M) + }; + }); + def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) { + return { + type: "VariableDeclaration", + kind: M instanceof AST_Const ? "const" : M instanceof AST_Let ? "let" : "var", + declarations: M.definitions.map(to_moz) + }; + }); + const assert_clause_to_moz = (assert_clause) => { + const assertions = []; + if (assert_clause) { + for (const { key, value } of assert_clause.properties) { + const key_moz = is_basic_identifier_string(key) ? { type: "Identifier", name: key } : { type: "Literal", value: key, raw: JSON.stringify(key) }; + assertions.push({ + type: "ImportAttribute", + key: key_moz, + value: to_moz(value) + }); + } + } + return assertions; + }; + def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) { + if (M.exported_names) { + var first_exported = M.exported_names[0]; + var first_exported_name = first_exported.name; + if (first_exported_name.name === "*" && !first_exported_name.quote) { + var foreign_name = first_exported.foreign_name; + var exported = foreign_name.name === "*" && !foreign_name.quote ? null : to_moz(foreign_name); + return { + type: "ExportAllDeclaration", + source: to_moz(M.module_name), + exported, + assertions: assert_clause_to_moz(M.assert_clause) + }; + } + return { + type: "ExportNamedDeclaration", + specifiers: M.exported_names.map(function(name_mapping) { + return { + type: "ExportSpecifier", + exported: to_moz(name_mapping.foreign_name), + local: to_moz(name_mapping.name) + }; + }), + declaration: to_moz(M.exported_definition), + source: to_moz(M.module_name), + assertions: assert_clause_to_moz(M.assert_clause) + }; + } + return { + type: M.is_default ? "ExportDefaultDeclaration" : "ExportNamedDeclaration", + declaration: to_moz(M.exported_value || M.exported_definition) + }; + }); + def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) { + var specifiers = []; + if (M.imported_name) { + specifiers.push({ + type: "ImportDefaultSpecifier", + local: to_moz(M.imported_name) + }); + } + if (M.imported_names) { + var first_imported_foreign_name = M.imported_names[0].foreign_name; + if (first_imported_foreign_name.name === "*" && !first_imported_foreign_name.quote) { + specifiers.push({ + type: "ImportNamespaceSpecifier", + local: to_moz(M.imported_names[0].name) + }); + } else { + M.imported_names.forEach(function(name_mapping) { + specifiers.push({ + type: "ImportSpecifier", + local: to_moz(name_mapping.name), + imported: to_moz(name_mapping.foreign_name) + }); + }); + } + } + return { + type: "ImportDeclaration", + specifiers, + source: to_moz(M.module_name), + assertions: assert_clause_to_moz(M.assert_clause) + }; + }); + def_to_moz(AST_ImportMeta, function To_Moz_MetaProperty() { + return { + type: "MetaProperty", + meta: { + type: "Identifier", + name: "import" + }, + property: { + type: "Identifier", + name: "meta" + } + }; + }); + def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) { + return { + type: "SequenceExpression", + expressions: M.expressions.map(to_moz) + }; + }); + def_to_moz(AST_DotHash, function To_Moz_PrivateMemberExpression(M) { + return { + type: "MemberExpression", + object: to_moz(M.expression), + computed: false, + property: { + type: "PrivateIdentifier", + name: M.property + }, + optional: M.optional + }; + }); + def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) { + var isComputed = M instanceof AST_Sub; + return { + type: "MemberExpression", + object: to_moz(M.expression), + computed: isComputed, + property: isComputed ? to_moz(M.property) : { type: "Identifier", name: M.property }, + optional: M.optional + }; + }); + def_to_moz(AST_Chain, function To_Moz_ChainExpression(M) { + return { + type: "ChainExpression", + expression: to_moz(M.expression) + }; + }); + def_to_moz(AST_Unary, function To_Moz_Unary(M) { + return { + type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression", + operator: M.operator, + prefix: M instanceof AST_UnaryPrefix, + argument: to_moz(M.expression) + }; + }); + def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) { + if (M.operator == "=" && to_moz_in_destructuring()) { + return { + type: "AssignmentPattern", + left: to_moz(M.left), + right: to_moz(M.right) + }; + } + const type = M.operator == "&&" || M.operator == "||" || M.operator === "??" ? "LogicalExpression" : "BinaryExpression"; + return { + type, + left: to_moz(M.left), + operator: M.operator, + right: to_moz(M.right) + }; + }); + def_to_moz(AST_PrivateIn, function To_Moz_BinaryExpression_PrivateIn(M) { + return { + type: "BinaryExpression", + left: { type: "PrivateIdentifier", name: M.key.name }, + operator: "in", + right: to_moz(M.value) + }; + }); + def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) { + return { + type: "ArrayExpression", + elements: M.elements.map(to_moz) + }; + }); + def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) { + return { + type: "ObjectExpression", + properties: M.properties.map(to_moz) + }; + }); + def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) { + var key = M.key instanceof AST_Node ? to_moz(M.key) : { + type: "Identifier", + value: M.key + }; + if (typeof M.key === "number") { + key = { + type: "Literal", + value: Number(M.key) + }; + } + if (typeof M.key === "string") { + key = { + type: "Identifier", + name: M.key + }; + } + var kind; + var string_or_num = typeof M.key === "string" || typeof M.key === "number"; + var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef; + if (M instanceof AST_ObjectKeyVal) { + kind = "init"; + computed = !string_or_num; + } else if (M instanceof AST_ObjectGetter) { + kind = "get"; + } else if (M instanceof AST_ObjectSetter) { + kind = "set"; + } + if (M instanceof AST_PrivateGetter || M instanceof AST_PrivateSetter) { + const kind2 = M instanceof AST_PrivateGetter ? "get" : "set"; + return { + type: "MethodDefinition", + computed: false, + kind: kind2, + static: M.static, + key: { + type: "PrivateIdentifier", + name: M.key.name + }, + value: to_moz(M.value) + }; + } + if (M instanceof AST_ClassPrivateProperty) { + return { + type: "PropertyDefinition", + key: { + type: "PrivateIdentifier", + name: M.key.name + }, + value: to_moz(M.value), + computed: false, + static: M.static + }; + } + if (M instanceof AST_ClassProperty) { + return { + type: "PropertyDefinition", + key, + value: to_moz(M.value), + computed, + static: M.static + }; + } + if (parent instanceof AST_Class) { + return { + type: "MethodDefinition", + computed, + kind, + static: M.static, + key: to_moz(M.key), + value: to_moz(M.value) + }; + } + return { + type: "Property", + computed, + kind, + key, + value: to_moz(M.value) + }; + }); + def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) { + if (parent instanceof AST_Object) { + return { + type: "Property", + computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef, + kind: "init", + method: true, + shorthand: false, + key: to_moz(M.key), + value: to_moz(M.value) + }; + } + const key = M instanceof AST_PrivateMethod ? { + type: "PrivateIdentifier", + name: M.key.name + } : to_moz(M.key); + return { + type: "MethodDefinition", + kind: M.key === "constructor" ? "constructor" : "method", + key, + value: to_moz(M.value), + computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef, + static: M.static + }; + }); + def_to_moz(AST_Class, function To_Moz_Class(M) { + var type = M instanceof AST_ClassExpression ? "ClassExpression" : "ClassDeclaration"; + return { + type, + superClass: to_moz(M.extends), + id: M.name ? to_moz(M.name) : null, + body: { + type: "ClassBody", + body: M.properties.map(to_moz) + } + }; + }); + def_to_moz(AST_ClassStaticBlock, function To_Moz_StaticBlock(M) { + return { + type: "StaticBlock", + body: M.body.map(to_moz) + }; + }); + def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() { + return { + type: "MetaProperty", + meta: { + type: "Identifier", + name: "new" + }, + property: { + type: "Identifier", + name: "target" + } + }; + }); + def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) { + if (M instanceof AST_SymbolMethod && parent.quote || (M instanceof AST_SymbolImportForeign || M instanceof AST_SymbolExportForeign || M instanceof AST_SymbolExport) && M.quote) { + return { + type: "Literal", + value: M.name + }; + } + var def = M.definition(); + return { + type: "Identifier", + name: def ? def.mangled_name || def.name : M.name + }; + }); + def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) { + const pattern = M.value.source; + const flags = M.value.flags; + return { + type: "Literal", + value: null, + raw: M.print_to_string(), + regex: { pattern, flags } + }; + }); + def_to_moz(AST_Constant, function To_Moz_Literal(M) { + var value = M.value; + return { + type: "Literal", + value, + raw: M.raw || M.print_to_string() + }; + }); + def_to_moz(AST_Atom, function To_Moz_Atom(M) { + return { + type: "Identifier", + name: String(M.value) + }; + }); + def_to_moz(AST_BigInt, (M) => ({ + type: "BigIntLiteral", + value: M.value + })); + AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); + AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); + AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { + return null; + }); + AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast); + AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast); + function my_start_token(moznode) { + var loc = moznode.loc, start = loc && loc.start; + var range = moznode.range; + return new AST_Token("", "", start && start.line || 0, start && start.column || 0, range ? range[0] : moznode.start, false, [], [], loc && loc.source); + } + function my_end_token(moznode) { + var loc = moznode.loc, end = loc && loc.end; + var range = moznode.range; + return new AST_Token("", "", end && end.line || 0, end && end.column || 0, range ? range[0] : moznode.end, false, [], [], loc && loc.source); + } + var FROM_MOZ_STACK = null; + function from_moz(node) { + FROM_MOZ_STACK.push(node); + var ret = node != null ? MOZ_TO_ME[node.type](node) : null; + FROM_MOZ_STACK.pop(); + return ret; + } + AST_Node.from_mozilla_ast = function(node) { + var save_stack = FROM_MOZ_STACK; + FROM_MOZ_STACK = []; + var ast = from_moz(node); + FROM_MOZ_STACK = save_stack; + return ast; + }; + function set_moz_loc(mynode, moznode) { + var start = mynode.start; + var end = mynode.end; + if (!(start && end)) { + return moznode; + } + if (start.pos != null && end.endpos != null) { + moznode.range = [start.pos, end.endpos]; + } + if (start.line) { + moznode.loc = { + start: { line: start.line, column: start.col }, + end: end.endline ? { line: end.endline, column: end.endcol } : null + }; + if (start.file) { + moznode.loc.source = start.file; + } + } + return moznode; + } + function def_to_moz(mytype, handler) { + mytype.DEFMETHOD("to_mozilla_ast", function(parent) { + return set_moz_loc(this, handler(this, parent)); + }); + } + var TO_MOZ_STACK = null; + function to_moz(node) { + if (TO_MOZ_STACK === null) { + TO_MOZ_STACK = []; + } + TO_MOZ_STACK.push(node); + var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null; + TO_MOZ_STACK.pop(); + if (TO_MOZ_STACK.length === 0) { + TO_MOZ_STACK = null; + } + return ast; + } + function to_moz_in_destructuring() { + var i = TO_MOZ_STACK.length; + while (i--) { + if (TO_MOZ_STACK[i] instanceof AST_Destructuring) { + return true; + } + } + return false; + } + function to_moz_block(node) { + return { + type: "BlockStatement", + body: node.body.map(to_moz) + }; + } + function to_moz_scope(type, node) { + var body = node.body.map(to_moz); + if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) { + body.unshift(to_moz(new AST_EmptyStatement(node.body[0]))); + } + return { + type, + body + }; + } + })(); + function first_in_statement(stack) { + let node = stack.parent(-1); + for (let i = 0, p; p = stack.parent(i); i++) { + if (p instanceof AST_Statement && p.body === node) + return true; + if (p instanceof AST_Sequence && p.expressions[0] === node || p.TYPE === "Call" && p.expression === node || p instanceof AST_PrefixedTemplateString && p.prefix === node || p instanceof AST_Dot && p.expression === node || p instanceof AST_Sub && p.expression === node || p instanceof AST_Chain && p.expression === node || p instanceof AST_Conditional && p.condition === node || p instanceof AST_Binary && p.left === node || p instanceof AST_UnaryPostfix && p.expression === node) { + node = p; + } else { + return false; + } + } + } + function left_is_object(node) { + if (node instanceof AST_Object) + return true; + if (node instanceof AST_Sequence) + return left_is_object(node.expressions[0]); + if (node.TYPE === "Call") + return left_is_object(node.expression); + if (node instanceof AST_PrefixedTemplateString) + return left_is_object(node.prefix); + if (node instanceof AST_Dot || node instanceof AST_Sub) + return left_is_object(node.expression); + if (node instanceof AST_Chain) + return left_is_object(node.expression); + if (node instanceof AST_Conditional) + return left_is_object(node.condition); + if (node instanceof AST_Binary) + return left_is_object(node.left); + if (node instanceof AST_UnaryPostfix) + return left_is_object(node.expression); + return false; + } + const CODE_LINE_BREAK = 10; + const CODE_SPACE = 32; + const r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/; + function is_some_comments(comment) { + return (comment.type === "comment2" || comment.type === "comment1") && /@preserve|@copyright|@lic|@cc_on|^\**!/i.test(comment.value); + } + const ROPE_COMMIT_WHEN = 8 * 1e3; + class Rope { + constructor() { + this.committed = ""; + this.current = ""; + } + append(str) { + if (this.current.length > ROPE_COMMIT_WHEN) { + this.committed += this.current + str; + this.current = ""; + } else { + this.current += str; + } + } + insertAt(char, index) { + const { committed, current } = this; + if (index < committed.length) { + this.committed = committed.slice(0, index) + char + committed.slice(index); + } else if (index === committed.length) { + this.committed += char; + } else { + index -= committed.length; + this.committed += current.slice(0, index) + char; + this.current = current.slice(index); + } + } + charAt(index) { + const { committed } = this; + if (index < committed.length) + return committed[index]; + return this.current[index - committed.length]; + } + charCodeAt(index) { + const { committed } = this; + if (index < committed.length) + return committed.charCodeAt(index); + return this.current.charCodeAt(index - committed.length); + } + length() { + return this.committed.length + this.current.length; + } + expectDirective() { + let ch, n = this.length(); + if (n <= 0) + return true; + while ((ch = this.charCodeAt(--n)) && (ch == CODE_SPACE || ch == CODE_LINE_BREAK)) + ; + return !ch || ch === 59 || ch === 123; + } + hasNLB() { + let n = this.length() - 1; + while (n >= 0) { + const code = this.charCodeAt(n--); + if (code === CODE_LINE_BREAK) + return true; + if (code !== CODE_SPACE) + return false; + } + return true; + } + toString() { + return this.committed + this.current; + } + } + function OutputStream(options) { + var readonly = !options; + options = defaults(options, { + ascii_only: false, + beautify: false, + braces: false, + comments: "some", + ecma: 5, + ie8: false, + indent_level: 4, + indent_start: 0, + inline_script: true, + keep_numbers: false, + keep_quoted_props: false, + max_line_len: false, + preamble: null, + preserve_annotations: false, + quote_keys: false, + quote_style: 0, + safari10: false, + semicolons: true, + shebang: true, + shorthand: void 0, + source_map: null, + webkit: false, + width: 80, + wrap_iife: false, + wrap_func_args: true, + _destroy_ast: false + }, true); + if (options.shorthand === void 0) + options.shorthand = options.ecma > 5; + var comment_filter = return_false; + if (options.comments) { + let comments = options.comments; + if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) { + var regex_pos = options.comments.lastIndexOf("/"); + comments = new RegExp(options.comments.substr(1, regex_pos - 1), options.comments.substr(regex_pos + 1)); + } + if (comments instanceof RegExp) { + comment_filter = function(comment) { + return comment.type != "comment5" && comments.test(comment.value); + }; + } else if (typeof comments === "function") { + comment_filter = function(comment) { + return comment.type != "comment5" && comments(this, comment); + }; + } else if (comments === "some") { + comment_filter = is_some_comments; + } else { + comment_filter = return_true; + } + } + if (options.preserve_annotations) { + let prev_comment_filter = comment_filter; + comment_filter = function(comment) { + return r_annotation.test(comment.value) || prev_comment_filter.apply(this, arguments); + }; + } + var indentation = 0; + var current_col = 0; + var current_line = 1; + var current_pos = 0; + var OUTPUT = new Rope(); + let printed_comments = /* @__PURE__ */ new Set(); + var to_utf8 = options.ascii_only ? function(str, identifier = false, regexp = false) { + if (options.ecma >= 2015 && !options.safari10 && !regexp) { + str = str.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function(ch) { + var code = get_full_char_code(ch, 0).toString(16); + return "\\u{" + code + "}"; + }); + } + return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) { + var code = ch.charCodeAt(0).toString(16); + if (code.length <= 2 && !identifier) { + while (code.length < 2) + code = "0" + code; + return "\\x" + code; + } else { + while (code.length < 4) + code = "0" + code; + return "\\u" + code; + } + }); + } : function(str) { + return str.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g, function(match, lone) { + if (lone) { + return "\\u" + lone.charCodeAt(0).toString(16); + } + return match; + }); + }; + function make_string(str, quote) { + var dq = 0, sq = 0; + str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g, function(s, i) { + switch (s) { + case '"': + ++dq; + return '"'; + case "'": + ++sq; + return "'"; + case "\\": + return "\\\\"; + case "\n": + return "\\n"; + case "\r": + return "\\r"; + case " ": + return "\\t"; + case "\b": + return "\\b"; + case "\f": + return "\\f"; + case "\v": + return options.ie8 ? "\\x0B" : "\\v"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + case "\uFEFF": + return "\\ufeff"; + case "\0": + return /[0-9]/.test(get_full_char(str, i + 1)) ? "\\x00" : "\\0"; + } + return s; + }); + function quote_single() { + return "'" + str.replace(/\x27/g, "\\'") + "'"; + } + function quote_double() { + return '"' + str.replace(/\x22/g, '\\"') + '"'; + } + function quote_template() { + return "`" + str.replace(/`/g, "\\`") + "`"; + } + str = to_utf8(str); + if (quote === "`") + return quote_template(); + switch (options.quote_style) { + case 1: + return quote_single(); + case 2: + return quote_double(); + case 3: + return quote == "'" ? quote_single() : quote_double(); + default: + return dq > sq ? quote_single() : quote_double(); + } + } + function encode_string(str, quote) { + var ret = make_string(str, quote); + if (options.inline_script) { + ret = ret.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi, "<\\/$1$2"); + ret = ret.replace(/\x3c!--/g, "\\x3c!--"); + ret = ret.replace(/--\x3e/g, "--\\x3e"); + } + return ret; + } + function make_name(name) { + name = name.toString(); + name = to_utf8(name, true); + return name; + } + function make_indent(back) { + return " ".repeat(options.indent_start + indentation - back * options.indent_level); + } + var has_parens = false; + var might_need_space = false; + var might_need_semicolon = false; + var might_add_newline = 0; + var need_newline_indented = false; + var need_space = false; + var newline_insert = -1; + var last2 = ""; + var mapping_token, mapping_name, mappings = options.source_map && []; + var do_add_mapping = mappings ? function() { + mappings.forEach(function(mapping) { + try { + let { name, token } = mapping; + if (name !== false) { + if (token.type == "name" || token.type === "privatename") { + name = token.value; + } else if (name instanceof AST_Symbol) { + name = token.type === "string" ? token.value : name.name; + } + } + options.source_map.add(mapping.token.file, mapping.line, mapping.col, mapping.token.line, mapping.token.col, is_basic_identifier_string(name) ? name : void 0); + } catch (ex) { + } + }); + mappings = []; + } : noop; + var ensure_line_len = options.max_line_len ? function() { + if (current_col > options.max_line_len) { + if (might_add_newline) { + OUTPUT.insertAt("\n", might_add_newline); + const len_after_newline = OUTPUT.length() - might_add_newline - 1; + if (mappings) { + var delta = len_after_newline - current_col; + mappings.forEach(function(mapping) { + mapping.line++; + mapping.col += delta; + }); + } + current_line++; + current_pos++; + current_col = len_after_newline; + } + } + if (might_add_newline) { + might_add_newline = 0; + do_add_mapping(); + } + } : noop; + var requireSemicolonChars = makePredicate("( [ + * / - , . `"); + function print(str) { + str = String(str); + var ch = get_full_char(str, 0); + if (need_newline_indented && ch) { + need_newline_indented = false; + if (ch !== "\n") { + print("\n"); + indent(); + } + } + if (need_space && ch) { + need_space = false; + if (!/[\s;})]/.test(ch)) { + space(); + } + } + newline_insert = -1; + var prev = last2.charAt(last2.length - 1); + if (might_need_semicolon) { + might_need_semicolon = false; + if (prev === ":" && ch === "}" || (!ch || !";}".includes(ch)) && prev !== ";") { + if (options.semicolons || requireSemicolonChars.has(ch)) { + OUTPUT.append(";"); + current_col++; + current_pos++; + } else { + ensure_line_len(); + if (current_col > 0) { + OUTPUT.append("\n"); + current_pos++; + current_line++; + current_col = 0; + } + if (/^\s+$/.test(str)) { + might_need_semicolon = true; + } + } + if (!options.beautify) + might_need_space = false; + } + } + if (might_need_space) { + if (is_identifier_char(prev) && (is_identifier_char(ch) || ch == "\\") || ch == "/" && ch == prev || (ch == "+" || ch == "-") && ch == last2) { + OUTPUT.append(" "); + current_col++; + current_pos++; + } + might_need_space = false; + } + if (mapping_token) { + mappings.push({ + token: mapping_token, + name: mapping_name, + line: current_line, + col: current_col + }); + mapping_token = false; + if (!might_add_newline) + do_add_mapping(); + } + OUTPUT.append(str); + has_parens = str[str.length - 1] == "("; + current_pos += str.length; + var a = str.split(/\r?\n/), n = a.length - 1; + current_line += n; + current_col += a[0].length; + if (n > 0) { + ensure_line_len(); + current_col = a[n].length; + } + last2 = str; + } + var star = function() { + print("*"); + }; + var space = options.beautify ? function() { + print(" "); + } : function() { + might_need_space = true; + }; + var indent = options.beautify ? function(half) { + if (options.beautify) { + print(make_indent(half ? 0.5 : 0)); + } + } : noop; + var with_indent = options.beautify ? function(col, cont) { + if (col === true) + col = next_indent(); + var save_indentation = indentation; + indentation = col; + var ret = cont(); + indentation = save_indentation; + return ret; + } : function(col, cont) { + return cont(); + }; + var newline = options.beautify ? function() { + if (newline_insert < 0) + return print("\n"); + if (OUTPUT.charAt(newline_insert) != "\n") { + OUTPUT.insertAt("\n", newline_insert); + current_pos++; + current_line++; + } + newline_insert++; + } : options.max_line_len ? function() { + ensure_line_len(); + might_add_newline = OUTPUT.length(); + } : noop; + var semicolon = options.beautify ? function() { + print(";"); + } : function() { + might_need_semicolon = true; + }; + function force_semicolon() { + might_need_semicolon = false; + print(";"); + } + function next_indent() { + return indentation + options.indent_level; + } + function with_block(cont) { + var ret; + print("{"); + newline(); + with_indent(next_indent(), function() { + ret = cont(); + }); + indent(); + print("}"); + return ret; + } + function with_parens(cont) { + print("("); + var ret = cont(); + print(")"); + return ret; + } + function with_square(cont) { + print("["); + var ret = cont(); + print("]"); + return ret; + } + function comma() { + print(","); + space(); + } + function colon() { + print(":"); + space(); + } + var add_mapping = mappings ? function(token, name) { + mapping_token = token; + mapping_name = name; + } : noop; + function get() { + if (might_add_newline) { + ensure_line_len(); + } + return OUTPUT.toString(); + } + function filter_comment(comment) { + if (!options.preserve_annotations) { + comment = comment.replace(r_annotation, " "); + } + if (/^\s*$/.test(comment)) { + return ""; + } + return comment.replace(/(<\s*\/\s*)(script)/i, "<\\/$2"); + } + function prepend_comments(node) { + var self2 = this; + var start = node.start; + if (!start) + return; + var printed_comments2 = self2.printed_comments; + const keyword_with_value = node instanceof AST_Exit && node.value || (node instanceof AST_Await || node instanceof AST_Yield) && node.expression; + if (start.comments_before && printed_comments2.has(start.comments_before)) { + if (keyword_with_value) { + start.comments_before = []; + } else { + return; + } + } + var comments = start.comments_before; + if (!comments) { + comments = start.comments_before = []; + } + printed_comments2.add(comments); + if (keyword_with_value) { + var tw = new TreeWalker(function(node2) { + var parent = tw.parent(); + if (parent instanceof AST_Exit || parent instanceof AST_Await || parent instanceof AST_Yield || parent instanceof AST_Binary && parent.left === node2 || parent.TYPE == "Call" && parent.expression === node2 || parent instanceof AST_Conditional && parent.condition === node2 || parent instanceof AST_Dot && parent.expression === node2 || parent instanceof AST_Sequence && parent.expressions[0] === node2 || parent instanceof AST_Sub && parent.expression === node2 || parent instanceof AST_UnaryPostfix) { + if (!node2.start) + return; + var text = node2.start.comments_before; + if (text && !printed_comments2.has(text)) { + printed_comments2.add(text); + comments = comments.concat(text); + } + } else { + return true; + } + }); + tw.push(node); + keyword_with_value.walk(tw); + } + if (current_pos == 0) { + if (comments.length > 0 && options.shebang && comments[0].type === "comment5" && !printed_comments2.has(comments[0])) { + print("#!" + comments.shift().value + "\n"); + indent(); + } + var preamble = options.preamble; + if (preamble) { + print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n")); + } + } + comments = comments.filter(comment_filter, node).filter((c) => !printed_comments2.has(c)); + if (comments.length == 0) + return; + var last_nlb = OUTPUT.hasNLB(); + comments.forEach(function(c, i) { + printed_comments2.add(c); + if (!last_nlb) { + if (c.nlb) { + print("\n"); + indent(); + last_nlb = true; + } else if (i > 0) { + space(); + } + } + if (/comment[134]/.test(c.type)) { + var value = filter_comment(c.value); + if (value) { + print("//" + value + "\n"); + indent(); + } + last_nlb = true; + } else if (c.type == "comment2") { + var value = filter_comment(c.value); + if (value) { + print("/*" + value + "*/"); + } + last_nlb = false; + } + }); + if (!last_nlb) { + if (start.nlb) { + print("\n"); + indent(); + } else { + space(); + } + } + } + function append_comments(node, tail) { + var self2 = this; + var token = node.end; + if (!token) + return; + var printed_comments2 = self2.printed_comments; + var comments = token[tail ? "comments_before" : "comments_after"]; + if (!comments || printed_comments2.has(comments)) + return; + if (!(node instanceof AST_Statement || comments.every((c) => !/comment[134]/.test(c.type)))) + return; + printed_comments2.add(comments); + var insert = OUTPUT.length(); + comments.filter(comment_filter, node).forEach(function(c, i) { + if (printed_comments2.has(c)) + return; + printed_comments2.add(c); + need_space = false; + if (need_newline_indented) { + print("\n"); + indent(); + need_newline_indented = false; + } else if (c.nlb && (i > 0 || !OUTPUT.hasNLB())) { + print("\n"); + indent(); + } else if (i > 0 || !tail) { + space(); + } + if (/comment[134]/.test(c.type)) { + const value = filter_comment(c.value); + if (value) { + print("//" + value); + } + need_newline_indented = true; + } else if (c.type == "comment2") { + const value = filter_comment(c.value); + if (value) { + print("/*" + value + "*/"); + } + need_space = true; + } + }); + if (OUTPUT.length() > insert) + newline_insert = insert; + } + const gc_scope = options["_destroy_ast"] ? function gc_scope2(scope) { + scope.body.length = 0; + scope.argnames.length = 0; + } : noop; + var stack = []; + return { + get, + toString: get, + indent, + in_directive: false, + use_asm: null, + active_scope: null, + indentation: function() { + return indentation; + }, + current_width: function() { + return current_col - indentation; + }, + should_break: function() { + return options.width && this.current_width() >= options.width; + }, + has_parens: function() { + return has_parens; + }, + newline, + print, + star, + space, + comma, + colon, + last: function() { + return last2; + }, + semicolon, + force_semicolon, + to_utf8, + print_name: function(name) { + print(make_name(name)); + }, + print_string: function(str, quote, escape_directive) { + var encoded = encode_string(str, quote); + if (escape_directive === true && !encoded.includes("\\")) { + if (!OUTPUT.expectDirective()) { + force_semicolon(); + } + force_semicolon(); + } + print(encoded); + }, + print_template_string_chars: function(str) { + var encoded = encode_string(str, "`").replace(/\${/g, "\\${"); + return print(encoded.substr(1, encoded.length - 2)); + }, + encode_string, + next_indent, + with_indent, + with_block, + with_parens, + with_square, + add_mapping, + option: function(opt) { + return options[opt]; + }, + gc_scope, + printed_comments, + prepend_comments: readonly ? noop : prepend_comments, + append_comments: readonly || comment_filter === return_false ? noop : append_comments, + line: function() { + return current_line; + }, + col: function() { + return current_col; + }, + pos: function() { + return current_pos; + }, + push_node: function(node) { + stack.push(node); + }, + pop_node: function() { + return stack.pop(); + }, + parent: function(n) { + return stack[stack.length - 2 - (n || 0)]; + } + }; + } + (function() { + function DEFPRINT(nodetype, generator) { + nodetype.DEFMETHOD("_codegen", generator); + } + AST_Node.DEFMETHOD("print", function(output, force_parens) { + var self2 = this, generator = self2._codegen; + if (self2 instanceof AST_Scope) { + output.active_scope = self2; + } else if (!output.use_asm && self2 instanceof AST_Directive && self2.value == "use asm") { + output.use_asm = output.active_scope; + } + function doit() { + output.prepend_comments(self2); + self2.add_source_map(output); + generator(self2, output); + output.append_comments(self2); + } + output.push_node(self2); + if (force_parens || self2.needs_parens(output)) { + output.with_parens(doit); + } else { + doit(); + } + output.pop_node(); + if (self2 === output.use_asm) { + output.use_asm = null; + } + }); + AST_Node.DEFMETHOD("_print", AST_Node.prototype.print); + AST_Node.DEFMETHOD("print_to_string", function(options) { + var output = OutputStream(options); + this.print(output); + return output.get(); + }); + function PARENS(nodetype, func) { + if (Array.isArray(nodetype)) { + nodetype.forEach(function(nodetype2) { + PARENS(nodetype2, func); + }); + } else { + nodetype.DEFMETHOD("needs_parens", func); + } + } + PARENS(AST_Node, return_false); + PARENS(AST_Function, function(output) { + if (!output.has_parens() && first_in_statement(output)) { + return true; + } + if (output.option("webkit")) { + var p = output.parent(); + if (p instanceof AST_PropAccess && p.expression === this) { + return true; + } + } + if (output.option("wrap_iife")) { + var p = output.parent(); + if (p instanceof AST_Call && p.expression === this) { + return true; + } + } + if (output.option("wrap_func_args")) { + var p = output.parent(); + if (p instanceof AST_Call && p.args.includes(this)) { + return true; + } + } + return false; + }); + PARENS(AST_Arrow, function(output) { + var p = output.parent(); + if (output.option("wrap_func_args") && p instanceof AST_Call && p.args.includes(this)) { + return true; + } + return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Conditional && p.condition === this; + }); + PARENS(AST_Object, function(output) { + return !output.has_parens() && first_in_statement(output); + }); + PARENS(AST_ClassExpression, first_in_statement); + PARENS(AST_Unary, function(output) { + var p = output.parent(); + return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Call && p.expression === this || p instanceof AST_Binary && p.operator === "**" && this instanceof AST_UnaryPrefix && p.left === this && this.operator !== "++" && this.operator !== "--"; + }); + PARENS(AST_Await, function(output) { + var p = output.parent(); + return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Call && p.expression === this || p instanceof AST_Binary && p.operator === "**" && p.left === this || output.option("safari10") && p instanceof AST_UnaryPrefix; + }); + PARENS(AST_Sequence, function(output) { + var p = output.parent(); + return p instanceof AST_Call || p instanceof AST_Unary || p instanceof AST_Binary || p instanceof AST_VarDef || p instanceof AST_PropAccess || p instanceof AST_Array || p instanceof AST_ObjectProperty || p instanceof AST_Conditional || p instanceof AST_Arrow || p instanceof AST_DefaultAssign || p instanceof AST_Expansion || p instanceof AST_ForOf && this === p.object || p instanceof AST_Yield || p instanceof AST_Export; + }); + PARENS(AST_Binary, function(output) { + var p = output.parent(); + if (p instanceof AST_Call && p.expression === this) + return true; + if (p instanceof AST_Unary) + return true; + if (p instanceof AST_PropAccess && p.expression === this) + return true; + if (p instanceof AST_Binary) { + const po = p.operator; + const so = this.operator; + if (so === "??" && (po === "||" || po === "&&")) { + return true; + } + if (po === "??" && (so === "||" || so === "&&")) { + return true; + } + const pp = PRECEDENCE[po]; + const sp = PRECEDENCE[so]; + if (pp > sp || pp == sp && (this === p.right || po == "**")) { + return true; + } + } + }); + PARENS(AST_Yield, function(output) { + var p = output.parent(); + if (p instanceof AST_Binary && p.operator !== "=") + return true; + if (p instanceof AST_Call && p.expression === this) + return true; + if (p instanceof AST_Conditional && p.condition === this) + return true; + if (p instanceof AST_Unary) + return true; + if (p instanceof AST_PropAccess && p.expression === this) + return true; + }); + PARENS(AST_Chain, function(output) { + var p = output.parent(); + if (!(p instanceof AST_Call || p instanceof AST_PropAccess)) + return false; + return p.expression === this; + }); + PARENS(AST_PropAccess, function(output) { + var p = output.parent(); + if (p instanceof AST_New && p.expression === this) { + return walk(this, (node) => { + if (node instanceof AST_Scope) + return true; + if (node instanceof AST_Call) { + return walk_abort; + } + }); + } + }); + PARENS(AST_Call, function(output) { + var p = output.parent(), p1; + if (p instanceof AST_New && p.expression === this || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function) + return true; + return this.expression instanceof AST_Function && p instanceof AST_PropAccess && p.expression === this && (p1 = output.parent(1)) instanceof AST_Assign && p1.left === p; + }); + PARENS(AST_New, function(output) { + var p = output.parent(); + if (this.args.length === 0 && (p instanceof AST_PropAccess || p instanceof AST_Call && p.expression === this || p instanceof AST_PrefixedTemplateString && p.prefix === this)) + return true; + }); + PARENS(AST_Number, function(output) { + var p = output.parent(); + if (p instanceof AST_PropAccess && p.expression === this) { + var value = this.getValue(); + if (value < 0 || /^0/.test(make_num(value))) { + return true; + } + } + }); + PARENS(AST_BigInt, function(output) { + var p = output.parent(); + if (p instanceof AST_PropAccess && p.expression === this) { + var value = this.getValue(); + if (value.startsWith("-")) { + return true; + } + } + }); + PARENS([AST_Assign, AST_Conditional], function(output) { + var p = output.parent(); + if (p instanceof AST_Unary) + return true; + if (p instanceof AST_Binary && !(p instanceof AST_Assign)) + return true; + if (p instanceof AST_Call && p.expression === this) + return true; + if (p instanceof AST_Conditional && p.condition === this) + return true; + if (p instanceof AST_PropAccess && p.expression === this) + return true; + if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false) + return true; + }); + DEFPRINT(AST_Directive, function(self2, output) { + output.print_string(self2.value, self2.quote); + output.semicolon(); + }); + DEFPRINT(AST_Expansion, function(self2, output) { + output.print("..."); + self2.expression.print(output); + }); + DEFPRINT(AST_Destructuring, function(self2, output) { + output.print(self2.is_array ? "[" : "{"); + var len = self2.names.length; + self2.names.forEach(function(name, i) { + if (i > 0) + output.comma(); + name.print(output); + if (i == len - 1 && name instanceof AST_Hole) + output.comma(); + }); + output.print(self2.is_array ? "]" : "}"); + }); + DEFPRINT(AST_Debugger, function(self2, output) { + output.print("debugger"); + output.semicolon(); + }); + function display_body(body, is_toplevel, output, allow_directives) { + var last2 = body.length - 1; + output.in_directive = allow_directives; + body.forEach(function(stmt, i) { + if (output.in_directive === true && !(stmt instanceof AST_Directive || stmt instanceof AST_EmptyStatement || stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)) { + output.in_directive = false; + } + if (!(stmt instanceof AST_EmptyStatement)) { + output.indent(); + stmt.print(output); + if (!(i == last2 && is_toplevel)) { + output.newline(); + if (is_toplevel) + output.newline(); + } + } + if (output.in_directive === true && stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String) { + output.in_directive = false; + } + }); + output.in_directive = false; + } + AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output) { + print_maybe_braced_body(this.body, output); + }); + DEFPRINT(AST_Statement, function(self2, output) { + self2.body.print(output); + output.semicolon(); + }); + DEFPRINT(AST_Toplevel, function(self2, output) { + display_body(self2.body, true, output, true); + output.print(""); + }); + DEFPRINT(AST_LabeledStatement, function(self2, output) { + self2.label.print(output); + output.colon(); + self2.body.print(output); + }); + DEFPRINT(AST_SimpleStatement, function(self2, output) { + self2.body.print(output); + output.semicolon(); + }); + function print_braced_empty(self2, output) { + output.print("{"); + output.with_indent(output.next_indent(), function() { + output.append_comments(self2, true); + }); + output.add_mapping(self2.end); + output.print("}"); + } + function print_braced(self2, output, allow_directives) { + if (self2.body.length > 0) { + output.with_block(function() { + display_body(self2.body, false, output, allow_directives); + output.add_mapping(self2.end); + }); + } else + print_braced_empty(self2, output); + } + DEFPRINT(AST_BlockStatement, function(self2, output) { + print_braced(self2, output); + }); + DEFPRINT(AST_EmptyStatement, function(self2, output) { + output.semicolon(); + }); + DEFPRINT(AST_Do, function(self2, output) { + output.print("do"); + output.space(); + make_block(self2.body, output); + output.space(); + output.print("while"); + output.space(); + output.with_parens(function() { + self2.condition.print(output); + }); + output.semicolon(); + }); + DEFPRINT(AST_While, function(self2, output) { + output.print("while"); + output.space(); + output.with_parens(function() { + self2.condition.print(output); + }); + output.space(); + self2._do_print_body(output); + }); + DEFPRINT(AST_For, function(self2, output) { + output.print("for"); + output.space(); + output.with_parens(function() { + if (self2.init) { + if (self2.init instanceof AST_Definitions) { + self2.init.print(output); + } else { + parenthesize_for_noin(self2.init, output, true); + } + output.print(";"); + output.space(); + } else { + output.print(";"); + } + if (self2.condition) { + self2.condition.print(output); + output.print(";"); + output.space(); + } else { + output.print(";"); + } + if (self2.step) { + self2.step.print(output); + } + }); + output.space(); + self2._do_print_body(output); + }); + DEFPRINT(AST_ForIn, function(self2, output) { + output.print("for"); + if (self2.await) { + output.space(); + output.print("await"); + } + output.space(); + output.with_parens(function() { + self2.init.print(output); + output.space(); + output.print(self2 instanceof AST_ForOf ? "of" : "in"); + output.space(); + self2.object.print(output); + }); + output.space(); + self2._do_print_body(output); + }); + DEFPRINT(AST_With, function(self2, output) { + output.print("with"); + output.space(); + output.with_parens(function() { + self2.expression.print(output); + }); + output.space(); + self2._do_print_body(output); + }); + AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword) { + var self2 = this; + if (!nokeyword) { + if (self2.async) { + output.print("async"); + output.space(); + } + output.print("function"); + if (self2.is_generator) { + output.star(); + } + if (self2.name) { + output.space(); + } + } + if (self2.name instanceof AST_Symbol) { + self2.name.print(output); + } else if (nokeyword && self2.name instanceof AST_Node) { + output.with_square(function() { + self2.name.print(output); + }); + } + output.with_parens(function() { + self2.argnames.forEach(function(arg, i) { + if (i) + output.comma(); + arg.print(output); + }); + }); + output.space(); + print_braced(self2, output, true); + }); + DEFPRINT(AST_Lambda, function(self2, output) { + self2._do_print(output); + output.gc_scope(self2); + }); + DEFPRINT(AST_PrefixedTemplateString, function(self2, output) { + var tag = self2.prefix; + var parenthesize_tag = tag instanceof AST_Lambda || tag instanceof AST_Binary || tag instanceof AST_Conditional || tag instanceof AST_Sequence || tag instanceof AST_Unary || tag instanceof AST_Dot && tag.expression instanceof AST_Object; + if (parenthesize_tag) + output.print("("); + self2.prefix.print(output); + if (parenthesize_tag) + output.print(")"); + self2.template_string.print(output); + }); + DEFPRINT(AST_TemplateString, function(self2, output) { + var is_tagged = output.parent() instanceof AST_PrefixedTemplateString; + output.print("`"); + for (var i = 0; i < self2.segments.length; i++) { + if (!(self2.segments[i] instanceof AST_TemplateSegment)) { + output.print("${"); + self2.segments[i].print(output); + output.print("}"); + } else if (is_tagged) { + output.print(self2.segments[i].raw); + } else { + output.print_template_string_chars(self2.segments[i].value); + } + } + output.print("`"); + }); + DEFPRINT(AST_TemplateSegment, function(self2, output) { + output.print_template_string_chars(self2.value); + }); + AST_Arrow.DEFMETHOD("_do_print", function(output) { + var self2 = this; + var parent = output.parent(); + var needs_parens = parent instanceof AST_Binary && !(parent instanceof AST_Assign) || parent instanceof AST_Unary || parent instanceof AST_Call && self2 === parent.expression; + if (needs_parens) { + output.print("("); + } + if (self2.async) { + output.print("async"); + output.space(); + } + if (self2.argnames.length === 1 && self2.argnames[0] instanceof AST_Symbol) { + self2.argnames[0].print(output); + } else { + output.with_parens(function() { + self2.argnames.forEach(function(arg, i) { + if (i) + output.comma(); + arg.print(output); + }); + }); + } + output.space(); + output.print("=>"); + output.space(); + const first_statement = self2.body[0]; + if (self2.body.length === 1 && first_statement instanceof AST_Return) { + const returned = first_statement.value; + if (!returned) { + output.print("{}"); + } else if (left_is_object(returned)) { + output.print("("); + returned.print(output); + output.print(")"); + } else { + returned.print(output); + } + } else { + print_braced(self2, output); + } + if (needs_parens) { + output.print(")"); + } + output.gc_scope(self2); + }); + AST_Exit.DEFMETHOD("_do_print", function(output, kind) { + output.print(kind); + if (this.value) { + output.space(); + const comments = this.value.start.comments_before; + if (comments && comments.length && !output.printed_comments.has(comments)) { + output.print("("); + this.value.print(output); + output.print(")"); + } else { + this.value.print(output); + } + } + output.semicolon(); + }); + DEFPRINT(AST_Return, function(self2, output) { + self2._do_print(output, "return"); + }); + DEFPRINT(AST_Throw, function(self2, output) { + self2._do_print(output, "throw"); + }); + DEFPRINT(AST_Yield, function(self2, output) { + var star = self2.is_star ? "*" : ""; + output.print("yield" + star); + if (self2.expression) { + output.space(); + self2.expression.print(output); + } + }); + DEFPRINT(AST_Await, function(self2, output) { + output.print("await"); + output.space(); + var e = self2.expression; + var parens = !(e instanceof AST_Call || e instanceof AST_SymbolRef || e instanceof AST_PropAccess || e instanceof AST_Unary || e instanceof AST_Constant || e instanceof AST_Await || e instanceof AST_Object); + if (parens) + output.print("("); + self2.expression.print(output); + if (parens) + output.print(")"); + }); + AST_LoopControl.DEFMETHOD("_do_print", function(output, kind) { + output.print(kind); + if (this.label) { + output.space(); + this.label.print(output); + } + output.semicolon(); + }); + DEFPRINT(AST_Break, function(self2, output) { + self2._do_print(output, "break"); + }); + DEFPRINT(AST_Continue, function(self2, output) { + self2._do_print(output, "continue"); + }); + function make_then(self2, output) { + var b = self2.body; + if (output.option("braces") || output.option("ie8") && b instanceof AST_Do) + return make_block(b, output); + if (!b) + return output.force_semicolon(); + while (true) { + if (b instanceof AST_If) { + if (!b.alternative) { + make_block(self2.body, output); + return; + } + b = b.alternative; + } else if (b instanceof AST_StatementWithBody) { + b = b.body; + } else + break; + } + print_maybe_braced_body(self2.body, output); + } + DEFPRINT(AST_If, function(self2, output) { + output.print("if"); + output.space(); + output.with_parens(function() { + self2.condition.print(output); + }); + output.space(); + if (self2.alternative) { + make_then(self2, output); + output.space(); + output.print("else"); + output.space(); + if (self2.alternative instanceof AST_If) + self2.alternative.print(output); + else + print_maybe_braced_body(self2.alternative, output); + } else { + self2._do_print_body(output); + } + }); + DEFPRINT(AST_Switch, function(self2, output) { + output.print("switch"); + output.space(); + output.with_parens(function() { + self2.expression.print(output); + }); + output.space(); + var last2 = self2.body.length - 1; + if (last2 < 0) + print_braced_empty(self2, output); + else + output.with_block(function() { + self2.body.forEach(function(branch, i) { + output.indent(true); + branch.print(output); + if (i < last2 && branch.body.length > 0) + output.newline(); + }); + }); + }); + AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output) { + output.newline(); + this.body.forEach(function(stmt) { + output.indent(); + stmt.print(output); + output.newline(); + }); + }); + DEFPRINT(AST_Default, function(self2, output) { + output.print("default:"); + self2._do_print_body(output); + }); + DEFPRINT(AST_Case, function(self2, output) { + output.print("case"); + output.space(); + self2.expression.print(output); + output.print(":"); + self2._do_print_body(output); + }); + DEFPRINT(AST_Try, function(self2, output) { + output.print("try"); + output.space(); + self2.body.print(output); + if (self2.bcatch) { + output.space(); + self2.bcatch.print(output); + } + if (self2.bfinally) { + output.space(); + self2.bfinally.print(output); + } + }); + DEFPRINT(AST_TryBlock, function(self2, output) { + print_braced(self2, output); + }); + DEFPRINT(AST_Catch, function(self2, output) { + output.print("catch"); + if (self2.argname) { + output.space(); + output.with_parens(function() { + self2.argname.print(output); + }); + } + output.space(); + print_braced(self2, output); + }); + DEFPRINT(AST_Finally, function(self2, output) { + output.print("finally"); + output.space(); + print_braced(self2, output); + }); + AST_Definitions.DEFMETHOD("_do_print", function(output, kind) { + output.print(kind); + output.space(); + this.definitions.forEach(function(def, i) { + if (i) + output.comma(); + def.print(output); + }); + var p = output.parent(); + var in_for = p instanceof AST_For || p instanceof AST_ForIn; + var output_semicolon = !in_for || p && p.init !== this; + if (output_semicolon) + output.semicolon(); + }); + DEFPRINT(AST_Let, function(self2, output) { + self2._do_print(output, "let"); + }); + DEFPRINT(AST_Var, function(self2, output) { + self2._do_print(output, "var"); + }); + DEFPRINT(AST_Const, function(self2, output) { + self2._do_print(output, "const"); + }); + DEFPRINT(AST_Import, function(self2, output) { + output.print("import"); + output.space(); + if (self2.imported_name) { + self2.imported_name.print(output); + } + if (self2.imported_name && self2.imported_names) { + output.print(","); + output.space(); + } + if (self2.imported_names) { + if (self2.imported_names.length === 1 && self2.imported_names[0].foreign_name.name === "*" && !self2.imported_names[0].foreign_name.quote) { + self2.imported_names[0].print(output); + } else { + output.print("{"); + self2.imported_names.forEach(function(name_import, i) { + output.space(); + name_import.print(output); + if (i < self2.imported_names.length - 1) { + output.print(","); + } + }); + output.space(); + output.print("}"); + } + } + if (self2.imported_name || self2.imported_names) { + output.space(); + output.print("from"); + output.space(); + } + self2.module_name.print(output); + if (self2.assert_clause) { + output.print("assert"); + self2.assert_clause.print(output); + } + output.semicolon(); + }); + DEFPRINT(AST_ImportMeta, function(self2, output) { + output.print("import.meta"); + }); + DEFPRINT(AST_NameMapping, function(self2, output) { + var is_import = output.parent() instanceof AST_Import; + var definition = self2.name.definition(); + var foreign_name = self2.foreign_name; + var names_are_different = (definition && definition.mangled_name || self2.name.name) !== foreign_name.name; + if (!names_are_different && foreign_name.name === "*" && foreign_name.quote != self2.name.quote) { + names_are_different = true; + } + var foreign_name_is_name = foreign_name.quote == null; + if (names_are_different) { + if (is_import) { + if (foreign_name_is_name) { + output.print(foreign_name.name); + } else { + output.print_string(foreign_name.name, foreign_name.quote); + } + } else { + if (self2.name.quote == null) { + self2.name.print(output); + } else { + output.print_string(self2.name.name, self2.name.quote); + } + } + output.space(); + output.print("as"); + output.space(); + if (is_import) { + self2.name.print(output); + } else { + if (foreign_name_is_name) { + output.print(foreign_name.name); + } else { + output.print_string(foreign_name.name, foreign_name.quote); + } + } + } else { + if (self2.name.quote == null) { + self2.name.print(output); + } else { + output.print_string(self2.name.name, self2.name.quote); + } + } + }); + DEFPRINT(AST_Export, function(self2, output) { + output.print("export"); + output.space(); + if (self2.is_default) { + output.print("default"); + output.space(); + } + if (self2.exported_names) { + if (self2.exported_names.length === 1 && self2.exported_names[0].name.name === "*" && !self2.exported_names[0].name.quote) { + self2.exported_names[0].print(output); + } else { + output.print("{"); + self2.exported_names.forEach(function(name_export, i) { + output.space(); + name_export.print(output); + if (i < self2.exported_names.length - 1) { + output.print(","); + } + }); + output.space(); + output.print("}"); + } + } else if (self2.exported_value) { + self2.exported_value.print(output); + } else if (self2.exported_definition) { + self2.exported_definition.print(output); + if (self2.exported_definition instanceof AST_Definitions) + return; + } + if (self2.module_name) { + output.space(); + output.print("from"); + output.space(); + self2.module_name.print(output); + } + if (self2.assert_clause) { + output.print("assert"); + self2.assert_clause.print(output); + } + if (self2.exported_value && !(self2.exported_value instanceof AST_Defun || self2.exported_value instanceof AST_Function || self2.exported_value instanceof AST_Class) || self2.module_name || self2.exported_names) { + output.semicolon(); + } + }); + function parenthesize_for_noin(node, output, noin) { + var parens = false; + if (noin) { + parens = walk(node, (node2) => { + if (node2 instanceof AST_Scope && !(node2 instanceof AST_Arrow)) { + return true; + } + if (node2 instanceof AST_Binary && node2.operator == "in" || node2 instanceof AST_PrivateIn) { + return walk_abort; + } + }); + } + node.print(output, parens); + } + DEFPRINT(AST_VarDef, function(self2, output) { + self2.name.print(output); + if (self2.value) { + output.space(); + output.print("="); + output.space(); + var p = output.parent(1); + var noin = p instanceof AST_For || p instanceof AST_ForIn; + parenthesize_for_noin(self2.value, output, noin); + } + }); + DEFPRINT(AST_Call, function(self2, output) { + self2.expression.print(output); + if (self2 instanceof AST_New && self2.args.length === 0) + return; + if (self2.expression instanceof AST_Call || self2.expression instanceof AST_Lambda) { + output.add_mapping(self2.start); + } + if (self2.optional) + output.print("?."); + output.with_parens(function() { + self2.args.forEach(function(expr, i) { + if (i) + output.comma(); + expr.print(output); + }); + }); + }); + DEFPRINT(AST_New, function(self2, output) { + output.print("new"); + output.space(); + AST_Call.prototype._codegen(self2, output); + }); + AST_Sequence.DEFMETHOD("_do_print", function(output) { + this.expressions.forEach(function(node, index) { + if (index > 0) { + output.comma(); + if (output.should_break()) { + output.newline(); + output.indent(); + } + } + node.print(output); + }); + }); + DEFPRINT(AST_Sequence, function(self2, output) { + self2._do_print(output); + }); + DEFPRINT(AST_Dot, function(self2, output) { + var expr = self2.expression; + expr.print(output); + var prop = self2.property; + var print_computed = ALL_RESERVED_WORDS.has(prop) ? output.option("ie8") : !is_identifier_string(prop, output.option("ecma") >= 2015 && !output.option("safari10")); + if (self2.optional) + output.print("?."); + if (print_computed) { + output.print("["); + output.add_mapping(self2.end); + output.print_string(prop); + output.print("]"); + } else { + if (expr instanceof AST_Number && expr.getValue() >= 0) { + if (!/[xa-f.)]/i.test(output.last())) { + output.print("."); + } + } + if (!self2.optional) + output.print("."); + output.add_mapping(self2.end); + output.print_name(prop); + } + }); + DEFPRINT(AST_DotHash, function(self2, output) { + var expr = self2.expression; + expr.print(output); + var prop = self2.property; + if (self2.optional) + output.print("?"); + output.print(".#"); + output.add_mapping(self2.end); + output.print_name(prop); + }); + DEFPRINT(AST_Sub, function(self2, output) { + self2.expression.print(output); + if (self2.optional) + output.print("?."); + output.print("["); + self2.property.print(output); + output.print("]"); + }); + DEFPRINT(AST_Chain, function(self2, output) { + self2.expression.print(output); + }); + DEFPRINT(AST_UnaryPrefix, function(self2, output) { + var op = self2.operator; + if (op === "--" && output.last().endsWith("!")) { + output.print(" "); + } + output.print(op); + if (/^[a-z]/i.test(op) || /[+-]$/.test(op) && self2.expression instanceof AST_UnaryPrefix && /^[+-]/.test(self2.expression.operator)) { + output.space(); + } + self2.expression.print(output); + }); + DEFPRINT(AST_UnaryPostfix, function(self2, output) { + self2.expression.print(output); + output.print(self2.operator); + }); + DEFPRINT(AST_Binary, function(self2, output) { + var op = self2.operator; + self2.left.print(output); + if (op[0] == ">" && output.last().endsWith("--")) { + output.print(" "); + } else { + output.space(); + } + output.print(op); + output.space(); + self2.right.print(output); + }); + DEFPRINT(AST_Conditional, function(self2, output) { + self2.condition.print(output); + output.space(); + output.print("?"); + output.space(); + self2.consequent.print(output); + output.space(); + output.colon(); + self2.alternative.print(output); + }); + DEFPRINT(AST_Array, function(self2, output) { + output.with_square(function() { + var a = self2.elements, len = a.length; + if (len > 0) + output.space(); + a.forEach(function(exp, i) { + if (i) + output.comma(); + exp.print(output); + if (i === len - 1 && exp instanceof AST_Hole) + output.comma(); + }); + if (len > 0) + output.space(); + }); + }); + DEFPRINT(AST_Object, function(self2, output) { + if (self2.properties.length > 0) + output.with_block(function() { + self2.properties.forEach(function(prop, i) { + if (i) { + output.print(","); + output.newline(); + } + output.indent(); + prop.print(output); + }); + output.newline(); + }); + else + print_braced_empty(self2, output); + }); + DEFPRINT(AST_Class, function(self2, output) { + output.print("class"); + output.space(); + if (self2.name) { + self2.name.print(output); + output.space(); + } + if (self2.extends) { + var parens = !(self2.extends instanceof AST_SymbolRef) && !(self2.extends instanceof AST_PropAccess) && !(self2.extends instanceof AST_ClassExpression) && !(self2.extends instanceof AST_Function); + output.print("extends"); + if (parens) { + output.print("("); + } else { + output.space(); + } + self2.extends.print(output); + if (parens) { + output.print(")"); + } else { + output.space(); + } + } + if (self2.properties.length > 0) + output.with_block(function() { + self2.properties.forEach(function(prop, i) { + if (i) { + output.newline(); + } + output.indent(); + prop.print(output); + }); + output.newline(); + }); + else + output.print("{}"); + }); + DEFPRINT(AST_NewTarget, function(self2, output) { + output.print("new.target"); + }); + function print_property_name(key, quote, output) { + if (output.option("quote_keys")) { + output.print_string(key); + return false; + } + if ("" + +key == key && key >= 0) { + if (output.option("keep_numbers")) { + output.print(key); + return false; + } + output.print(make_num(key)); + return false; + } + var print_string = ALL_RESERVED_WORDS.has(key) ? output.option("ie8") : output.option("ecma") < 2015 || output.option("safari10") ? !is_basic_identifier_string(key) : !is_identifier_string(key, true); + if (print_string || quote && output.option("keep_quoted_props")) { + output.print_string(key, quote); + return false; + } + output.print_name(key); + return true; + } + DEFPRINT(AST_ObjectKeyVal, function(self2, output) { + function get_name(self3) { + var def = self3.definition(); + return def ? def.mangled_name || def.name : self3.name; + } + const try_shorthand = output.option("shorthand") && !(self2.key instanceof AST_Node); + if (try_shorthand && self2.value instanceof AST_Symbol && get_name(self2.value) === self2.key && !ALL_RESERVED_WORDS.has(self2.key)) { + const was_shorthand = print_property_name(self2.key, self2.quote, output); + if (!was_shorthand) { + output.colon(); + self2.value.print(output); + } + } else if (try_shorthand && self2.value instanceof AST_DefaultAssign && self2.value.left instanceof AST_Symbol && get_name(self2.value.left) === self2.key) { + const was_shorthand = print_property_name(self2.key, self2.quote, output); + if (!was_shorthand) { + output.colon(); + self2.value.left.print(output); + } + output.space(); + output.print("="); + output.space(); + self2.value.right.print(output); + } else { + if (!(self2.key instanceof AST_Node)) { + print_property_name(self2.key, self2.quote, output); + } else { + output.with_square(function() { + self2.key.print(output); + }); + } + output.colon(); + self2.value.print(output); + } + }); + DEFPRINT(AST_ClassPrivateProperty, (self2, output) => { + if (self2.static) { + output.print("static"); + output.space(); + } + output.print("#"); + print_property_name(self2.key.name, self2.quote, output); + if (self2.value) { + output.print("="); + self2.value.print(output); + } + output.semicolon(); + }); + DEFPRINT(AST_ClassProperty, (self2, output) => { + if (self2.static) { + output.print("static"); + output.space(); + } + if (self2.key instanceof AST_SymbolClassProperty) { + print_property_name(self2.key.name, self2.quote, output); + } else { + output.print("["); + self2.key.print(output); + output.print("]"); + } + if (self2.value) { + output.print("="); + self2.value.print(output); + } + output.semicolon(); + }); + AST_ObjectProperty.DEFMETHOD("_print_getter_setter", function(type, is_private, output) { + var self2 = this; + if (self2.static) { + output.print("static"); + output.space(); + } + if (type) { + output.print(type); + output.space(); + } + if (self2.key instanceof AST_SymbolMethod) { + if (is_private) + output.print("#"); + print_property_name(self2.key.name, self2.quote, output); + self2.key.add_source_map(output); + } else { + output.with_square(function() { + self2.key.print(output); + }); + } + self2.value._do_print(output, true); + }); + DEFPRINT(AST_ObjectSetter, function(self2, output) { + self2._print_getter_setter("set", false, output); + }); + DEFPRINT(AST_ObjectGetter, function(self2, output) { + self2._print_getter_setter("get", false, output); + }); + DEFPRINT(AST_PrivateSetter, function(self2, output) { + self2._print_getter_setter("set", true, output); + }); + DEFPRINT(AST_PrivateGetter, function(self2, output) { + self2._print_getter_setter("get", true, output); + }); + DEFPRINT(AST_PrivateMethod, function(self2, output) { + var type; + if (self2.is_generator && self2.async) { + type = "async*"; + } else if (self2.is_generator) { + type = "*"; + } else if (self2.async) { + type = "async"; + } + self2._print_getter_setter(type, true, output); + }); + DEFPRINT(AST_PrivateIn, function(self2, output) { + self2.key.print(output); + output.space(); + output.print("in"); + output.space(); + self2.value.print(output); + }); + DEFPRINT(AST_SymbolPrivateProperty, function(self2, output) { + output.print("#" + self2.name); + }); + DEFPRINT(AST_ConciseMethod, function(self2, output) { + var type; + if (self2.is_generator && self2.async) { + type = "async*"; + } else if (self2.is_generator) { + type = "*"; + } else if (self2.async) { + type = "async"; + } + self2._print_getter_setter(type, false, output); + }); + DEFPRINT(AST_ClassStaticBlock, function(self2, output) { + output.print("static"); + output.space(); + print_braced(self2, output); + }); + AST_Symbol.DEFMETHOD("_do_print", function(output) { + var def = this.definition(); + output.print_name(def ? def.mangled_name || def.name : this.name); + }); + DEFPRINT(AST_Symbol, function(self2, output) { + self2._do_print(output); + }); + DEFPRINT(AST_Hole, noop); + DEFPRINT(AST_This, function(self2, output) { + output.print("this"); + }); + DEFPRINT(AST_Super, function(self2, output) { + output.print("super"); + }); + DEFPRINT(AST_Constant, function(self2, output) { + output.print(self2.getValue()); + }); + DEFPRINT(AST_String, function(self2, output) { + output.print_string(self2.getValue(), self2.quote, output.in_directive); + }); + DEFPRINT(AST_Number, function(self2, output) { + if ((output.option("keep_numbers") || output.use_asm) && self2.raw) { + output.print(self2.raw); + } else { + output.print(make_num(self2.getValue())); + } + }); + DEFPRINT(AST_BigInt, function(self2, output) { + output.print(self2.getValue() + "n"); + }); + const r_slash_script = /(<\s*\/\s*script)/i; + const r_starts_with_script = /^\s*script/i; + const slash_script_replace = (_, $1) => $1.replace("/", "\\/"); + DEFPRINT(AST_RegExp, function(self2, output) { + let { source, flags } = self2.getValue(); + source = regexp_source_fix(source); + flags = flags ? sort_regexp_flags(flags) : ""; + source = source.replace(r_slash_script, slash_script_replace); + if (r_starts_with_script.test(source) && output.last().endsWith("<")) { + output.print(" "); + } + output.print(output.to_utf8(`/${source}/${flags}`, false, true)); + const parent = output.parent(); + if (parent instanceof AST_Binary && /^\w/.test(parent.operator) && parent.left === self2) { + output.print(" "); + } + }); + function print_maybe_braced_body(stat, output) { + if (output.option("braces")) { + make_block(stat, output); + } else { + if (!stat || stat instanceof AST_EmptyStatement) + output.force_semicolon(); + else if (stat instanceof AST_Let || stat instanceof AST_Const || stat instanceof AST_Class) + make_block(stat, output); + else + stat.print(output); + } + } + function best_of2(a) { + var best = a[0], len = best.length; + for (var i = 1; i < a.length; ++i) { + if (a[i].length < len) { + best = a[i]; + len = best.length; + } + } + return best; + } + function make_num(num) { + var str = num.toString(10).replace(/^0\./, ".").replace("e+", "e"); + var candidates = [str]; + if (Math.floor(num) === num) { + if (num < 0) { + candidates.push("-0x" + (-num).toString(16).toLowerCase()); + } else { + candidates.push("0x" + num.toString(16).toLowerCase()); + } + } + var match, len, digits; + if (match = /^\.0+/.exec(str)) { + len = match[0].length; + digits = str.slice(len); + candidates.push(digits + "e-" + (digits.length + len - 1)); + } else if (match = /0+$/.exec(str)) { + len = match[0].length; + candidates.push(str.slice(0, -len) + "e" + len); + } else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) { + candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length)); + } + return best_of2(candidates); + } + function make_block(stmt, output) { + if (!stmt || stmt instanceof AST_EmptyStatement) + output.print("{}"); + else if (stmt instanceof AST_BlockStatement) + stmt.print(output); + else + output.with_block(function() { + output.indent(); + stmt.print(output); + output.newline(); + }); + } + function DEFMAP(nodetype, generator) { + nodetype.forEach(function(nodetype2) { + nodetype2.DEFMETHOD("add_source_map", generator); + }); + } + DEFMAP([ + AST_Node, + AST_LabeledStatement, + AST_Toplevel + ], noop); + DEFMAP([ + AST_Array, + AST_BlockStatement, + AST_Catch, + AST_Class, + AST_Constant, + AST_Debugger, + AST_Definitions, + AST_Directive, + AST_Finally, + AST_Jump, + AST_Lambda, + AST_New, + AST_Object, + AST_StatementWithBody, + AST_Symbol, + AST_Switch, + AST_SwitchBranch, + AST_TemplateString, + AST_TemplateSegment, + AST_Try + ], function(output) { + output.add_mapping(this.start); + }); + DEFMAP([ + AST_ObjectGetter, + AST_ObjectSetter, + AST_PrivateGetter, + AST_PrivateSetter, + AST_ConciseMethod, + AST_PrivateMethod + ], function(output) { + output.add_mapping(this.start, false); + }); + DEFMAP([ + AST_SymbolMethod, + AST_SymbolPrivateProperty + ], function(output) { + const tok_type = this.end && this.end.type; + if (tok_type === "name" || tok_type === "privatename") { + output.add_mapping(this.end, this.name); + } else { + output.add_mapping(this.end); + } + }); + DEFMAP([AST_ObjectProperty], function(output) { + output.add_mapping(this.start, this.key); + }); + })(); + const shallow_cmp = (node1, node2) => { + return node1 === null && node2 === null || node1.TYPE === node2.TYPE && node1.shallow_cmp(node2); + }; + const equivalent_to = (tree1, tree2) => { + if (!shallow_cmp(tree1, tree2)) + return false; + const walk_1_state = [tree1]; + const walk_2_state = [tree2]; + const walk_1_push = walk_1_state.push.bind(walk_1_state); + const walk_2_push = walk_2_state.push.bind(walk_2_state); + while (walk_1_state.length && walk_2_state.length) { + const node_1 = walk_1_state.pop(); + const node_2 = walk_2_state.pop(); + if (!shallow_cmp(node_1, node_2)) + return false; + node_1._children_backwards(walk_1_push); + node_2._children_backwards(walk_2_push); + if (walk_1_state.length !== walk_2_state.length) { + return false; + } + } + return walk_1_state.length == 0 && walk_2_state.length == 0; + }; + const pass_through = () => true; + AST_Node.prototype.shallow_cmp = function() { + throw new Error("did not find a shallow_cmp function for " + this.constructor.name); + }; + AST_Debugger.prototype.shallow_cmp = pass_through; + AST_Directive.prototype.shallow_cmp = function(other) { + return this.value === other.value; + }; + AST_SimpleStatement.prototype.shallow_cmp = pass_through; + AST_Block.prototype.shallow_cmp = pass_through; + AST_EmptyStatement.prototype.shallow_cmp = pass_through; + AST_LabeledStatement.prototype.shallow_cmp = function(other) { + return this.label.name === other.label.name; + }; + AST_Do.prototype.shallow_cmp = pass_through; + AST_While.prototype.shallow_cmp = pass_through; + AST_For.prototype.shallow_cmp = function(other) { + return (this.init == null ? other.init == null : this.init === other.init) && (this.condition == null ? other.condition == null : this.condition === other.condition) && (this.step == null ? other.step == null : this.step === other.step); + }; + AST_ForIn.prototype.shallow_cmp = pass_through; + AST_ForOf.prototype.shallow_cmp = pass_through; + AST_With.prototype.shallow_cmp = pass_through; + AST_Toplevel.prototype.shallow_cmp = pass_through; + AST_Expansion.prototype.shallow_cmp = pass_through; + AST_Lambda.prototype.shallow_cmp = function(other) { + return this.is_generator === other.is_generator && this.async === other.async; + }; + AST_Destructuring.prototype.shallow_cmp = function(other) { + return this.is_array === other.is_array; + }; + AST_PrefixedTemplateString.prototype.shallow_cmp = pass_through; + AST_TemplateString.prototype.shallow_cmp = pass_through; + AST_TemplateSegment.prototype.shallow_cmp = function(other) { + return this.value === other.value; + }; + AST_Jump.prototype.shallow_cmp = pass_through; + AST_LoopControl.prototype.shallow_cmp = pass_through; + AST_Await.prototype.shallow_cmp = pass_through; + AST_Yield.prototype.shallow_cmp = function(other) { + return this.is_star === other.is_star; + }; + AST_If.prototype.shallow_cmp = function(other) { + return this.alternative == null ? other.alternative == null : this.alternative === other.alternative; + }; + AST_Switch.prototype.shallow_cmp = pass_through; + AST_SwitchBranch.prototype.shallow_cmp = pass_through; + AST_Try.prototype.shallow_cmp = function(other) { + return this.body === other.body && (this.bcatch == null ? other.bcatch == null : this.bcatch === other.bcatch) && (this.bfinally == null ? other.bfinally == null : this.bfinally === other.bfinally); + }; + AST_Catch.prototype.shallow_cmp = function(other) { + return this.argname == null ? other.argname == null : this.argname === other.argname; + }; + AST_Finally.prototype.shallow_cmp = pass_through; + AST_Definitions.prototype.shallow_cmp = pass_through; + AST_VarDef.prototype.shallow_cmp = function(other) { + return this.value == null ? other.value == null : this.value === other.value; + }; + AST_NameMapping.prototype.shallow_cmp = pass_through; + AST_Import.prototype.shallow_cmp = function(other) { + return (this.imported_name == null ? other.imported_name == null : this.imported_name === other.imported_name) && (this.imported_names == null ? other.imported_names == null : this.imported_names === other.imported_names); + }; + AST_ImportMeta.prototype.shallow_cmp = pass_through; + AST_Export.prototype.shallow_cmp = function(other) { + return (this.exported_definition == null ? other.exported_definition == null : this.exported_definition === other.exported_definition) && (this.exported_value == null ? other.exported_value == null : this.exported_value === other.exported_value) && (this.exported_names == null ? other.exported_names == null : this.exported_names === other.exported_names) && this.module_name === other.module_name && this.is_default === other.is_default; + }; + AST_Call.prototype.shallow_cmp = pass_through; + AST_Sequence.prototype.shallow_cmp = pass_through; + AST_PropAccess.prototype.shallow_cmp = pass_through; + AST_Chain.prototype.shallow_cmp = pass_through; + AST_Dot.prototype.shallow_cmp = function(other) { + return this.property === other.property; + }; + AST_DotHash.prototype.shallow_cmp = function(other) { + return this.property === other.property; + }; + AST_Unary.prototype.shallow_cmp = function(other) { + return this.operator === other.operator; + }; + AST_Binary.prototype.shallow_cmp = function(other) { + return this.operator === other.operator; + }; + AST_Conditional.prototype.shallow_cmp = pass_through; + AST_Array.prototype.shallow_cmp = pass_through; + AST_Object.prototype.shallow_cmp = pass_through; + AST_ObjectProperty.prototype.shallow_cmp = pass_through; + AST_ObjectKeyVal.prototype.shallow_cmp = function(other) { + return this.key === other.key; + }; + AST_ObjectSetter.prototype.shallow_cmp = function(other) { + return this.static === other.static; + }; + AST_ObjectGetter.prototype.shallow_cmp = function(other) { + return this.static === other.static; + }; + AST_ConciseMethod.prototype.shallow_cmp = function(other) { + return this.static === other.static && this.is_generator === other.is_generator && this.async === other.async; + }; + AST_Class.prototype.shallow_cmp = function(other) { + return (this.name == null ? other.name == null : this.name === other.name) && (this.extends == null ? other.extends == null : this.extends === other.extends); + }; + AST_ClassProperty.prototype.shallow_cmp = function(other) { + return this.static === other.static; + }; + AST_Symbol.prototype.shallow_cmp = function(other) { + return this.name === other.name; + }; + AST_NewTarget.prototype.shallow_cmp = pass_through; + AST_This.prototype.shallow_cmp = pass_through; + AST_Super.prototype.shallow_cmp = pass_through; + AST_String.prototype.shallow_cmp = function(other) { + return this.value === other.value; + }; + AST_Number.prototype.shallow_cmp = function(other) { + return this.value === other.value; + }; + AST_BigInt.prototype.shallow_cmp = function(other) { + return this.value === other.value; + }; + AST_RegExp.prototype.shallow_cmp = function(other) { + return this.value.flags === other.value.flags && this.value.source === other.value.source; + }; + AST_Atom.prototype.shallow_cmp = pass_through; + const MASK_EXPORT_DONT_MANGLE = 1 << 0; + const MASK_EXPORT_WANT_MANGLE = 1 << 1; + let function_defs = null; + let unmangleable_names = null; + let scopes_with_block_defuns = null; + class SymbolDef { + constructor(scope, orig, init) { + this.name = orig.name; + this.orig = [orig]; + this.init = init; + this.eliminated = 0; + this.assignments = 0; + this.scope = scope; + this.replaced = 0; + this.global = false; + this.export = 0; + this.mangled_name = null; + this.undeclared = false; + this.id = SymbolDef.next_id++; + this.chained = false; + this.direct_access = false; + this.escaped = 0; + this.recursive_refs = 0; + this.references = []; + this.should_replace = void 0; + this.single_use = false; + this.fixed = false; + Object.seal(this); + } + fixed_value() { + if (!this.fixed || this.fixed instanceof AST_Node) + return this.fixed; + return this.fixed(); + } + unmangleable(options) { + if (!options) + options = {}; + if (function_defs && function_defs.has(this.id) && keep_name(options.keep_fnames, this.orig[0].name)) + return true; + return this.global && !options.toplevel || this.export & MASK_EXPORT_DONT_MANGLE || this.undeclared || !options.eval && this.scope.pinned() || (this.orig[0] instanceof AST_SymbolLambda || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name) || this.orig[0] instanceof AST_SymbolMethod || (this.orig[0] instanceof AST_SymbolClass || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name); + } + mangle(options) { + const cache = options.cache && options.cache.props; + if (this.global && cache && cache.has(this.name)) { + this.mangled_name = cache.get(this.name); + } else if (!this.mangled_name && !this.unmangleable(options)) { + var s = this.scope; + var sym = this.orig[0]; + if (options.ie8 && sym instanceof AST_SymbolLambda) + s = s.parent_scope; + const redefinition = redefined_catch_def(this); + this.mangled_name = redefinition ? redefinition.mangled_name || redefinition.name : s.next_mangled(options, this); + if (this.global && cache) { + cache.set(this.name, this.mangled_name); + } + } + } + } + SymbolDef.next_id = 1; + function redefined_catch_def(def) { + if (def.orig[0] instanceof AST_SymbolCatch && def.scope.is_block_scope()) { + return def.scope.get_defun_scope().variables.get(def.name); + } + } + AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null, toplevel = this } = {}) { + options = defaults(options, { + cache: null, + ie8: false, + safari10: false, + module: false + }); + if (!(toplevel instanceof AST_Toplevel)) { + throw new Error("Invalid toplevel scope"); + } + var scope = this.parent_scope = parent_scope; + var labels = /* @__PURE__ */ new Map(); + var defun = null; + var in_destructuring = null; + var for_scopes = []; + var tw = new TreeWalker((node, descend) => { + if (node.is_block_scope()) { + const save_scope2 = scope; + node.block_scope = scope = new AST_Scope(node); + scope._block_scope = true; + scope.init_scope_vars(save_scope2); + scope.uses_with = save_scope2.uses_with; + scope.uses_eval = save_scope2.uses_eval; + if (options.safari10) { + if (node instanceof AST_For || node instanceof AST_ForIn || node instanceof AST_ForOf) { + for_scopes.push(scope); + } + } + if (node instanceof AST_Switch) { + const the_block_scope = scope; + scope = save_scope2; + node.expression.walk(tw); + scope = the_block_scope; + for (let i = 0; i < node.body.length; i++) { + node.body[i].walk(tw); + } + } else { + descend(); + } + scope = save_scope2; + return true; + } + if (node instanceof AST_Destructuring) { + const save_destructuring = in_destructuring; + in_destructuring = node; + descend(); + in_destructuring = save_destructuring; + return true; + } + if (node instanceof AST_Scope) { + node.init_scope_vars(scope); + var save_scope = scope; + var save_defun = defun; + var save_labels = labels; + defun = scope = node; + labels = /* @__PURE__ */ new Map(); + descend(); + scope = save_scope; + defun = save_defun; + labels = save_labels; + return true; + } + if (node instanceof AST_LabeledStatement) { + var l = node.label; + if (labels.has(l.name)) { + throw new Error(string_template("Label {name} defined twice", l)); + } + labels.set(l.name, l); + descend(); + labels.delete(l.name); + return true; + } + if (node instanceof AST_With) { + for (var s = scope; s; s = s.parent_scope) + s.uses_with = true; + return; + } + if (node instanceof AST_Symbol) { + node.scope = scope; + } + if (node instanceof AST_Label) { + node.thedef = node; + node.references = []; + } + if (node instanceof AST_SymbolLambda) { + defun.def_function(node, node.name == "arguments" ? void 0 : defun); + } else if (node instanceof AST_SymbolDefun) { + const closest_scope = defun.parent_scope; + node.scope = tw.directives["use strict"] ? closest_scope : closest_scope.get_defun_scope(); + mark_export(node.scope.def_function(node, defun), 1); + } else if (node instanceof AST_SymbolClass) { + mark_export(defun.def_variable(node, defun), 1); + } else if (node instanceof AST_SymbolImport) { + scope.def_variable(node); + } else if (node instanceof AST_SymbolDefClass) { + mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1); + } else if (node instanceof AST_SymbolVar || node instanceof AST_SymbolLet || node instanceof AST_SymbolConst || node instanceof AST_SymbolCatch) { + var def; + if (node instanceof AST_SymbolBlockDeclaration) { + def = scope.def_variable(node, null); + } else { + def = defun.def_variable(node, node.TYPE == "SymbolVar" ? null : void 0); + } + if (!def.orig.every((sym2) => { + if (sym2 === node) + return true; + if (node instanceof AST_SymbolBlockDeclaration) { + return sym2 instanceof AST_SymbolLambda; + } + return !(sym2 instanceof AST_SymbolLet || sym2 instanceof AST_SymbolConst); + })) { + js_error(`"${node.name}" is redeclared`, node.start.file, node.start.line, node.start.col, node.start.pos); + } + if (!(node instanceof AST_SymbolFunarg)) + mark_export(def, 2); + if (defun !== scope) { + node.mark_enclosed(); + var def = scope.find_variable(node); + if (node.thedef !== def) { + node.thedef = def; + node.reference(); + } + } + } else if (node instanceof AST_LabelRef) { + var sym = labels.get(node.name); + if (!sym) + throw new Error(string_template("Undefined label {name} [{line},{col}]", { + name: node.name, + line: node.start.line, + col: node.start.col + })); + node.thedef = sym; + } + if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) { + js_error(`"${node.TYPE}" statement may only appear at the top level`, node.start.file, node.start.line, node.start.col, node.start.pos); + } + }); + if (options.module) { + tw.directives["use strict"] = true; + } + this.walk(tw); + function mark_export(def, level) { + if (in_destructuring) { + var i = 0; + do { + level++; + } while (tw.parent(i++) !== in_destructuring); + } + var node = tw.parent(level); + if (def.export = node instanceof AST_Export ? MASK_EXPORT_DONT_MANGLE : 0) { + var exported = node.exported_definition; + if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) { + def.export = MASK_EXPORT_WANT_MANGLE; + } + } + } + const is_toplevel = this instanceof AST_Toplevel; + if (is_toplevel) { + this.globals = /* @__PURE__ */ new Map(); + } + var tw = new TreeWalker((node) => { + if (node instanceof AST_LoopControl && node.label) { + node.label.thedef.references.push(node); + return true; + } + if (node instanceof AST_SymbolRef) { + var name = node.name; + if (name == "eval" && tw.parent() instanceof AST_Call) { + for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { + s.uses_eval = true; + } + } + var sym; + if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name || !(sym = node.scope.find_variable(name))) { + sym = toplevel.def_global(node); + if (node instanceof AST_SymbolExport) + sym.export = MASK_EXPORT_DONT_MANGLE; + } else if (sym.scope instanceof AST_Lambda && name == "arguments") { + sym.scope.get_defun_scope().uses_arguments = true; + } + node.thedef = sym; + node.reference(); + if (node.scope.is_block_scope() && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) { + node.scope = node.scope.get_defun_scope(); + } + return true; + } + var def; + if (node instanceof AST_SymbolCatch && (def = redefined_catch_def(node.definition()))) { + var s = node.scope; + while (s) { + push_uniq(s.enclosed, def); + if (s === def.scope) + break; + s = s.parent_scope; + } + } + }); + this.walk(tw); + if (options.ie8 || options.safari10) { + walk(this, (node) => { + if (node instanceof AST_SymbolCatch) { + var name = node.name; + var refs = node.thedef.references; + var scope2 = node.scope.get_defun_scope(); + var def = scope2.find_variable(name) || toplevel.globals.get(name) || scope2.def_variable(node); + refs.forEach(function(ref) { + ref.thedef = def; + ref.reference(); + }); + node.thedef = def; + node.reference(); + return true; + } + }); + } + if (options.safari10) { + for (const scope2 of for_scopes) { + scope2.parent_scope.variables.forEach(function(def) { + push_uniq(scope2.enclosed, def); + }); + } + } + }); + AST_Toplevel.DEFMETHOD("def_global", function(node) { + var globals = this.globals, name = node.name; + if (globals.has(name)) { + return globals.get(name); + } else { + var g = new SymbolDef(this, node); + g.undeclared = true; + g.global = true; + globals.set(name, g); + return g; + } + }); + AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope) { + this.variables = /* @__PURE__ */ new Map(); + this.uses_with = false; + this.uses_eval = false; + this.parent_scope = parent_scope; + this.enclosed = []; + this.cname = -1; + }); + AST_Scope.DEFMETHOD("conflicting_def", function(name) { + return this.enclosed.find((def) => def.name === name) || this.variables.has(name) || this.parent_scope && this.parent_scope.conflicting_def(name); + }); + AST_Scope.DEFMETHOD("conflicting_def_shallow", function(name) { + return this.enclosed.find((def) => def.name === name) || this.variables.has(name); + }); + AST_Scope.DEFMETHOD("add_child_scope", function(scope) { + if (scope.parent_scope === this) + return; + scope.parent_scope = this; + if (scope instanceof AST_Arrow && !this.uses_arguments) { + this.uses_arguments = walk(scope, (node) => { + if (node instanceof AST_SymbolRef && node.scope instanceof AST_Lambda && node.name === "arguments") { + return walk_abort; + } + if (node instanceof AST_Lambda && !(node instanceof AST_Arrow)) { + return true; + } + }); + } + this.uses_with = this.uses_with || scope.uses_with; + this.uses_eval = this.uses_eval || scope.uses_eval; + const scope_ancestry = (() => { + const ancestry = []; + let cur = this; + do { + ancestry.push(cur); + } while (cur = cur.parent_scope); + ancestry.reverse(); + return ancestry; + })(); + const new_scope_enclosed_set = new Set(scope.enclosed); + const to_enclose = []; + for (const scope_topdown of scope_ancestry) { + to_enclose.forEach((e) => push_uniq(scope_topdown.enclosed, e)); + for (const def of scope_topdown.variables.values()) { + if (new_scope_enclosed_set.has(def)) { + push_uniq(to_enclose, def); + push_uniq(scope_topdown.enclosed, def); + } + } + } + }); + function find_scopes_visible_from(scopes) { + const found_scopes = /* @__PURE__ */ new Set(); + for (const scope of new Set(scopes)) { + (function bubble_up(scope2) { + if (scope2 == null || found_scopes.has(scope2)) + return; + found_scopes.add(scope2); + bubble_up(scope2.parent_scope); + })(scope); + } + return [...found_scopes]; + } + AST_Scope.DEFMETHOD("create_symbol", function(SymClass, { + source, + tentative_name, + scope, + conflict_scopes = [scope], + init = null + } = {}) { + let symbol_name; + conflict_scopes = find_scopes_visible_from(conflict_scopes); + if (tentative_name) { + tentative_name = symbol_name = tentative_name.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, "_"); + let i = 0; + while (conflict_scopes.find((s) => s.conflicting_def_shallow(symbol_name))) { + symbol_name = tentative_name + "$" + i++; + } + } + if (!symbol_name) { + throw new Error("No symbol name could be generated in create_symbol()"); + } + const symbol = make_node(SymClass, source, { + name: symbol_name, + scope + }); + this.def_variable(symbol, init || null); + symbol.mark_enclosed(); + return symbol; + }); + AST_Node.DEFMETHOD("is_block_scope", return_false); + AST_Class.DEFMETHOD("is_block_scope", return_false); + AST_Lambda.DEFMETHOD("is_block_scope", return_false); + AST_Toplevel.DEFMETHOD("is_block_scope", return_false); + AST_SwitchBranch.DEFMETHOD("is_block_scope", return_false); + AST_Block.DEFMETHOD("is_block_scope", return_true); + AST_Scope.DEFMETHOD("is_block_scope", function() { + return this._block_scope || false; + }); + AST_IterationStatement.DEFMETHOD("is_block_scope", return_true); + AST_Lambda.DEFMETHOD("init_scope_vars", function() { + AST_Scope.prototype.init_scope_vars.apply(this, arguments); + this.uses_arguments = false; + this.def_variable(new AST_SymbolFunarg({ + name: "arguments", + start: this.start, + end: this.end + })); + }); + AST_Arrow.DEFMETHOD("init_scope_vars", function() { + AST_Scope.prototype.init_scope_vars.apply(this, arguments); + this.uses_arguments = false; + }); + AST_Symbol.DEFMETHOD("mark_enclosed", function() { + var def = this.definition(); + var s = this.scope; + while (s) { + push_uniq(s.enclosed, def); + if (s === def.scope) + break; + s = s.parent_scope; + } + }); + AST_Symbol.DEFMETHOD("reference", function() { + this.definition().references.push(this); + this.mark_enclosed(); + }); + AST_Scope.DEFMETHOD("find_variable", function(name) { + if (name instanceof AST_Symbol) + name = name.name; + return this.variables.get(name) || this.parent_scope && this.parent_scope.find_variable(name); + }); + AST_Scope.DEFMETHOD("def_function", function(symbol, init) { + var def = this.def_variable(symbol, init); + if (!def.init || def.init instanceof AST_Defun) + def.init = init; + return def; + }); + AST_Scope.DEFMETHOD("def_variable", function(symbol, init) { + var def = this.variables.get(symbol.name); + if (def) { + def.orig.push(symbol); + if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) { + def.init = init; + } + } else { + def = new SymbolDef(this, symbol, init); + this.variables.set(symbol.name, def); + def.global = !this.parent_scope; + } + return symbol.thedef = def; + }); + function next_mangled(scope, options) { + let defun_scope; + if (scopes_with_block_defuns && (defun_scope = scope.get_defun_scope()) && scopes_with_block_defuns.has(defun_scope)) { + scope = defun_scope; + } + var ext = scope.enclosed; + var nth_identifier = options.nth_identifier; + out: + while (true) { + var m = nth_identifier.get(++scope.cname); + if (ALL_RESERVED_WORDS.has(m)) + continue; + if (options.reserved.has(m)) + continue; + if (unmangleable_names && unmangleable_names.has(m)) + continue out; + for (let i = ext.length; --i >= 0; ) { + const def = ext[i]; + const name = def.mangled_name || def.unmangleable(options) && def.name; + if (m == name) + continue out; + } + return m; + } + } + AST_Scope.DEFMETHOD("next_mangled", function(options) { + return next_mangled(this, options); + }); + AST_Toplevel.DEFMETHOD("next_mangled", function(options) { + let name; + const mangled_names = this.mangled_names; + do { + name = next_mangled(this, options); + } while (mangled_names.has(name)); + return name; + }); + AST_Function.DEFMETHOD("next_mangled", function(options, def) { + var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition(); + var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null; + while (true) { + var name = next_mangled(this, options); + if (!tricky_name || tricky_name != name) + return name; + } + }); + AST_Symbol.DEFMETHOD("unmangleable", function(options) { + var def = this.definition(); + return !def || def.unmangleable(options); + }); + AST_Label.DEFMETHOD("unmangleable", return_false); + AST_Symbol.DEFMETHOD("unreferenced", function() { + return !this.definition().references.length && !this.scope.pinned(); + }); + AST_Symbol.DEFMETHOD("definition", function() { + return this.thedef; + }); + AST_Symbol.DEFMETHOD("global", function() { + return this.thedef.global; + }); + function format_mangler_options(options) { + options = defaults(options, { + eval: false, + nth_identifier: base54, + ie8: false, + keep_classnames: false, + keep_fnames: false, + module: false, + reserved: [], + toplevel: false + }); + if (options.module) + options.toplevel = true; + if (!Array.isArray(options.reserved) && !(options.reserved instanceof Set)) { + options.reserved = []; + } + options.reserved = new Set(options.reserved); + options.reserved.add("arguments"); + return options; + } + AST_Toplevel.DEFMETHOD("mangle_names", function(options) { + options = format_mangler_options(options); + var nth_identifier = options.nth_identifier; + var lname = -1; + var to_mangle = []; + if (options.keep_fnames) { + function_defs = /* @__PURE__ */ new Set(); + } + const mangled_names = this.mangled_names = /* @__PURE__ */ new Set(); + unmangleable_names = /* @__PURE__ */ new Set(); + if (options.cache) { + this.globals.forEach(collect); + if (options.cache.props) { + options.cache.props.forEach(function(mangled_name) { + mangled_names.add(mangled_name); + }); + } + } + var tw = new TreeWalker(function(node, descend) { + if (node instanceof AST_LabeledStatement) { + var save_nesting = lname; + descend(); + lname = save_nesting; + return true; + } + if (node instanceof AST_Defun && !(tw.parent() instanceof AST_Scope)) { + scopes_with_block_defuns = scopes_with_block_defuns || /* @__PURE__ */ new Set(); + scopes_with_block_defuns.add(node.parent_scope.get_defun_scope()); + } + if (node instanceof AST_Scope) { + node.variables.forEach(collect); + return; + } + if (node.is_block_scope()) { + node.block_scope.variables.forEach(collect); + return; + } + if (function_defs && node instanceof AST_VarDef && node.value instanceof AST_Lambda && !node.value.name && keep_name(options.keep_fnames, node.name.name)) { + function_defs.add(node.name.definition().id); + return; + } + if (node instanceof AST_Label) { + let name; + do { + name = nth_identifier.get(++lname); + } while (ALL_RESERVED_WORDS.has(name)); + node.mangled_name = name; + return true; + } + if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) { + to_mangle.push(node.definition()); + return; + } + }); + this.walk(tw); + if (options.keep_fnames || options.keep_classnames) { + to_mangle.forEach((def) => { + if (def.name.length < 6 && def.unmangleable(options)) { + unmangleable_names.add(def.name); + } + }); + } + to_mangle.forEach((def) => { + def.mangle(options); + }); + function_defs = null; + unmangleable_names = null; + scopes_with_block_defuns = null; + function collect(symbol) { + if (symbol.export & MASK_EXPORT_DONT_MANGLE) { + unmangleable_names.add(symbol.name); + } else if (!options.reserved.has(symbol.name)) { + to_mangle.push(symbol); + } + } + }); + AST_Toplevel.DEFMETHOD("find_colliding_names", function(options) { + const cache = options.cache && options.cache.props; + const avoid = /* @__PURE__ */ new Set(); + options.reserved.forEach(to_avoid); + this.globals.forEach(add_def); + this.walk(new TreeWalker(function(node) { + if (node instanceof AST_Scope) + node.variables.forEach(add_def); + if (node instanceof AST_SymbolCatch) + add_def(node.definition()); + })); + return avoid; + function to_avoid(name) { + avoid.add(name); + } + function add_def(def) { + var name = def.name; + if (def.global && cache && cache.has(name)) + name = cache.get(name); + else if (!def.unmangleable(options)) + return; + to_avoid(name); + } + }); + AST_Toplevel.DEFMETHOD("expand_names", function(options) { + options = format_mangler_options(options); + var nth_identifier = options.nth_identifier; + if (nth_identifier.reset && nth_identifier.sort) { + nth_identifier.reset(); + nth_identifier.sort(); + } + var avoid = this.find_colliding_names(options); + var cname = 0; + this.globals.forEach(rename); + this.walk(new TreeWalker(function(node) { + if (node instanceof AST_Scope) + node.variables.forEach(rename); + if (node instanceof AST_SymbolCatch) + rename(node.definition()); + })); + function next_name() { + var name; + do { + name = nth_identifier.get(cname++); + } while (avoid.has(name) || ALL_RESERVED_WORDS.has(name)); + return name; + } + function rename(def) { + if (def.global && options.cache) + return; + if (def.unmangleable(options)) + return; + if (options.reserved.has(def.name)) + return; + const redefinition = redefined_catch_def(def); + const name = def.name = redefinition ? redefinition.name : next_name(); + def.orig.forEach(function(sym) { + sym.name = name; + }); + def.references.forEach(function(sym) { + sym.name = name; + }); + } + }); + AST_Node.DEFMETHOD("tail_node", return_this); + AST_Sequence.DEFMETHOD("tail_node", function() { + return this.expressions[this.expressions.length - 1]; + }); + AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options) { + options = format_mangler_options(options); + var nth_identifier = options.nth_identifier; + if (!nth_identifier.reset || !nth_identifier.consider || !nth_identifier.sort) { + return; + } + nth_identifier.reset(); + try { + AST_Node.prototype.print = function(stream, force_parens) { + this._print(stream, force_parens); + if (this instanceof AST_Symbol && !this.unmangleable(options)) { + nth_identifier.consider(this.name, -1); + } else if (options.properties) { + if (this instanceof AST_DotHash) { + nth_identifier.consider("#" + this.property, -1); + } else if (this instanceof AST_Dot) { + nth_identifier.consider(this.property, -1); + } else if (this instanceof AST_Sub) { + skip_string(this.property); + } + } + }; + nth_identifier.consider(this.print_to_string(), 1); + } finally { + AST_Node.prototype.print = AST_Node.prototype._print; + } + nth_identifier.sort(); + function skip_string(node) { + if (node instanceof AST_String) { + nth_identifier.consider(node.value, -1); + } else if (node instanceof AST_Conditional) { + skip_string(node.consequent); + skip_string(node.alternative); + } else if (node instanceof AST_Sequence) { + skip_string(node.tail_node()); + } + } + }); + const base54 = (() => { + const leading = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split(""); + const digits = "0123456789".split(""); + let chars; + let frequency; + function reset() { + frequency = /* @__PURE__ */ new Map(); + leading.forEach(function(ch) { + frequency.set(ch, 0); + }); + digits.forEach(function(ch) { + frequency.set(ch, 0); + }); + } + function consider(str, delta) { + for (var i = str.length; --i >= 0; ) { + frequency.set(str[i], frequency.get(str[i]) + delta); + } + } + function compare(a, b) { + return frequency.get(b) - frequency.get(a); + } + function sort() { + chars = mergeSort(leading, compare).concat(mergeSort(digits, compare)); + } + reset(); + sort(); + function base542(num) { + var ret = "", base = 54; + num++; + do { + num--; + ret += chars[num % base]; + num = Math.floor(num / base); + base = 64; + } while (num > 0); + return ret; + } + return { + get: base542, + consider, + reset, + sort + }; + })(); + let mangle_options = void 0; + AST_Node.prototype.size = function(compressor, stack) { + mangle_options = compressor && compressor._mangle_options; + let size = 0; + walk_parent(this, (node, info) => { + size += node._size(info); + if (node instanceof AST_Arrow && node.is_braceless()) { + size += node.body[0].value._size(info); + return true; + } + }, stack || compressor && compressor.stack); + mangle_options = void 0; + return size; + }; + AST_Node.prototype._size = () => 0; + AST_Debugger.prototype._size = () => 8; + AST_Directive.prototype._size = function() { + return 2 + this.value.length; + }; + const list_overhead = (array) => array.length && array.length - 1; + AST_Block.prototype._size = function() { + return 2 + list_overhead(this.body); + }; + AST_Toplevel.prototype._size = function() { + return list_overhead(this.body); + }; + AST_EmptyStatement.prototype._size = () => 1; + AST_LabeledStatement.prototype._size = () => 2; + AST_Do.prototype._size = () => 9; + AST_While.prototype._size = () => 7; + AST_For.prototype._size = () => 8; + AST_ForIn.prototype._size = () => 8; + AST_With.prototype._size = () => 6; + AST_Expansion.prototype._size = () => 3; + const lambda_modifiers = (func) => (func.is_generator ? 1 : 0) + (func.async ? 6 : 0); + AST_Accessor.prototype._size = function() { + return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body); + }; + AST_Function.prototype._size = function(info) { + const first = !!first_in_statement(info); + return first * 2 + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body); + }; + AST_Defun.prototype._size = function() { + return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body); + }; + AST_Arrow.prototype._size = function() { + let args_and_arrow = 2 + list_overhead(this.argnames); + if (!(this.argnames.length === 1 && this.argnames[0] instanceof AST_Symbol)) { + args_and_arrow += 2; + } + const body_overhead = this.is_braceless() ? 0 : list_overhead(this.body) + 2; + return lambda_modifiers(this) + args_and_arrow + body_overhead; + }; + AST_Destructuring.prototype._size = () => 2; + AST_TemplateString.prototype._size = function() { + return 2 + Math.floor(this.segments.length / 2) * 3; + }; + AST_TemplateSegment.prototype._size = function() { + return this.value.length; + }; + AST_Return.prototype._size = function() { + return this.value ? 7 : 6; + }; + AST_Throw.prototype._size = () => 6; + AST_Break.prototype._size = function() { + return this.label ? 6 : 5; + }; + AST_Continue.prototype._size = function() { + return this.label ? 9 : 8; + }; + AST_If.prototype._size = () => 4; + AST_Switch.prototype._size = function() { + return 8 + list_overhead(this.body); + }; + AST_Case.prototype._size = function() { + return 5 + list_overhead(this.body); + }; + AST_Default.prototype._size = function() { + return 8 + list_overhead(this.body); + }; + AST_Try.prototype._size = () => 3; + AST_Catch.prototype._size = function() { + let size = 7 + list_overhead(this.body); + if (this.argname) { + size += 2; + } + return size; + }; + AST_Finally.prototype._size = function() { + return 7 + list_overhead(this.body); + }; + AST_Var.prototype._size = function() { + return 4 + list_overhead(this.definitions); + }; + AST_Let.prototype._size = function() { + return 4 + list_overhead(this.definitions); + }; + AST_Const.prototype._size = function() { + return 6 + list_overhead(this.definitions); + }; + AST_VarDef.prototype._size = function() { + return this.value ? 1 : 0; + }; + AST_NameMapping.prototype._size = function() { + return this.name ? 4 : 0; + }; + AST_Import.prototype._size = function() { + let size = 6; + if (this.imported_name) + size += 1; + if (this.imported_name || this.imported_names) + size += 5; + if (this.imported_names) { + size += 2 + list_overhead(this.imported_names); + } + return size; + }; + AST_ImportMeta.prototype._size = () => 11; + AST_Export.prototype._size = function() { + let size = 7 + (this.is_default ? 8 : 0); + if (this.exported_value) { + size += this.exported_value._size(); + } + if (this.exported_names) { + size += 2 + list_overhead(this.exported_names); + } + if (this.module_name) { + size += 5; + } + return size; + }; + AST_Call.prototype._size = function() { + if (this.optional) { + return 4 + list_overhead(this.args); + } + return 2 + list_overhead(this.args); + }; + AST_New.prototype._size = function() { + return 6 + list_overhead(this.args); + }; + AST_Sequence.prototype._size = function() { + return list_overhead(this.expressions); + }; + AST_Dot.prototype._size = function() { + if (this.optional) { + return this.property.length + 2; + } + return this.property.length + 1; + }; + AST_DotHash.prototype._size = function() { + if (this.optional) { + return this.property.length + 3; + } + return this.property.length + 2; + }; + AST_Sub.prototype._size = function() { + return this.optional ? 4 : 2; + }; + AST_Unary.prototype._size = function() { + if (this.operator === "typeof") + return 7; + if (this.operator === "void") + return 5; + return this.operator.length; + }; + AST_Binary.prototype._size = function(info) { + if (this.operator === "in") + return 4; + let size = this.operator.length; + if ((this.operator === "+" || this.operator === "-") && this.right instanceof AST_Unary && this.right.operator === this.operator) { + size += 1; + } + if (this.needs_parens(info)) { + size += 2; + } + return size; + }; + AST_Conditional.prototype._size = () => 3; + AST_Array.prototype._size = function() { + return 2 + list_overhead(this.elements); + }; + AST_Object.prototype._size = function(info) { + let base = 2; + if (first_in_statement(info)) { + base += 2; + } + return base + list_overhead(this.properties); + }; + const key_size = (key) => typeof key === "string" ? key.length : 0; + AST_ObjectKeyVal.prototype._size = function() { + return key_size(this.key) + 1; + }; + const static_size = (is_static) => is_static ? 7 : 0; + AST_ObjectGetter.prototype._size = function() { + return 5 + static_size(this.static) + key_size(this.key); + }; + AST_ObjectSetter.prototype._size = function() { + return 5 + static_size(this.static) + key_size(this.key); + }; + AST_ConciseMethod.prototype._size = function() { + return static_size(this.static) + key_size(this.key) + lambda_modifiers(this); + }; + AST_PrivateMethod.prototype._size = function() { + return AST_ConciseMethod.prototype._size.call(this) + 1; + }; + AST_PrivateGetter.prototype._size = AST_PrivateSetter.prototype._size = function() { + return AST_ConciseMethod.prototype._size.call(this) + 4; + }; + AST_PrivateIn.prototype._size = function() { + return 5; + }; + AST_Class.prototype._size = function() { + return (this.name ? 8 : 7) + (this.extends ? 8 : 0); + }; + AST_ClassStaticBlock.prototype._size = function() { + return 7 + list_overhead(this.body); + }; + AST_ClassProperty.prototype._size = function() { + return static_size(this.static) + (typeof this.key === "string" ? this.key.length + 2 : 0) + (this.value ? 1 : 0); + }; + AST_ClassPrivateProperty.prototype._size = function() { + return AST_ClassProperty.prototype._size.call(this) + 1; + }; + AST_Symbol.prototype._size = function() { + if (!(mangle_options && this.thedef && !this.thedef.unmangleable(mangle_options))) { + return this.name.length; + } else { + return 1; + } + }; + AST_SymbolClassProperty.prototype._size = function() { + return this.name.length; + }; + AST_SymbolRef.prototype._size = AST_SymbolDeclaration.prototype._size = function() { + if (this.name === "arguments") + return 9; + return AST_Symbol.prototype._size.call(this); + }; + AST_NewTarget.prototype._size = () => 10; + AST_SymbolImportForeign.prototype._size = function() { + return this.name.length; + }; + AST_SymbolExportForeign.prototype._size = function() { + return this.name.length; + }; + AST_This.prototype._size = () => 4; + AST_Super.prototype._size = () => 5; + AST_String.prototype._size = function() { + return this.value.length + 2; + }; + AST_Number.prototype._size = function() { + const { value } = this; + if (value === 0) + return 1; + if (value > 0 && Math.floor(value) === value) { + return Math.floor(Math.log10(value) + 1); + } + return value.toString().length; + }; + AST_BigInt.prototype._size = function() { + return this.value.length; + }; + AST_RegExp.prototype._size = function() { + return this.value.toString().length; + }; + AST_Null.prototype._size = () => 4; + AST_NaN.prototype._size = () => 3; + AST_Undefined.prototype._size = () => 6; + AST_Hole.prototype._size = () => 0; + AST_Infinity.prototype._size = () => 8; + AST_True.prototype._size = () => 4; + AST_False.prototype._size = () => 5; + AST_Await.prototype._size = () => 6; + AST_Yield.prototype._size = () => 6; + const UNUSED = 1; + const TRUTHY = 2; + const FALSY = 4; + const UNDEFINED = 8; + const INLINED = 16; + const WRITE_ONLY = 32; + const SQUEEZED = 256; + const OPTIMIZED = 512; + const TOP = 1024; + const CLEAR_BETWEEN_PASSES = SQUEEZED | OPTIMIZED | TOP; + const has_flag = (node, flag) => node.flags & flag; + const set_flag = (node, flag) => { + node.flags |= flag; + }; + const clear_flag = (node, flag) => { + node.flags &= ~flag; + }; + function merge_sequence(array, node) { + if (node instanceof AST_Sequence) { + array.push(...node.expressions); + } else { + array.push(node); + } + return array; + } + function make_sequence(orig, expressions) { + if (expressions.length == 1) + return expressions[0]; + if (expressions.length == 0) + throw new Error("trying to create a sequence with length zero!"); + return make_node(AST_Sequence, orig, { + expressions: expressions.reduce(merge_sequence, []) + }); + } + function make_node_from_constant(val, orig) { + switch (typeof val) { + case "string": + return make_node(AST_String, orig, { + value: val + }); + case "number": + if (isNaN(val)) + return make_node(AST_NaN, orig); + if (isFinite(val)) { + return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, { + operator: "-", + expression: make_node(AST_Number, orig, { value: -val }) + }) : make_node(AST_Number, orig, { value: val }); + } + return val < 0 ? make_node(AST_UnaryPrefix, orig, { + operator: "-", + expression: make_node(AST_Infinity, orig) + }) : make_node(AST_Infinity, orig); + case "boolean": + return make_node(val ? AST_True : AST_False, orig); + case "undefined": + return make_node(AST_Undefined, orig); + default: + if (val === null) { + return make_node(AST_Null, orig, { value: null }); + } + if (val instanceof RegExp) { + return make_node(AST_RegExp, orig, { + value: { + source: regexp_source_fix(val.source), + flags: val.flags + } + }); + } + throw new Error(string_template("Can't handle constant of type: {type}", { + type: typeof val + })); + } + } + function best_of_expression(ast1, ast2) { + return ast1.size() > ast2.size() ? ast2 : ast1; + } + function best_of_statement(ast1, ast2) { + return best_of_expression(make_node(AST_SimpleStatement, ast1, { + body: ast1 + }), make_node(AST_SimpleStatement, ast2, { + body: ast2 + })).body; + } + function best_of(compressor, ast1, ast2) { + if (first_in_statement(compressor)) { + return best_of_statement(ast1, ast2); + } else { + return best_of_expression(ast1, ast2); + } + } + function get_simple_key(key) { + if (key instanceof AST_Constant) { + return key.getValue(); + } + if (key instanceof AST_UnaryPrefix && key.operator == "void" && key.expression instanceof AST_Constant) { + return; + } + return key; + } + function read_property(obj, key) { + key = get_simple_key(key); + if (key instanceof AST_Node) + return; + var value; + if (obj instanceof AST_Array) { + var elements = obj.elements; + if (key == "length") + return make_node_from_constant(elements.length, obj); + if (typeof key == "number" && key in elements) + value = elements[key]; + } else if (obj instanceof AST_Object) { + key = "" + key; + var props = obj.properties; + for (var i = props.length; --i >= 0; ) { + var prop = props[i]; + if (!(prop instanceof AST_ObjectKeyVal)) + return; + if (!value && props[i].key === key) + value = props[i].value; + } + } + return value instanceof AST_SymbolRef && value.fixed_value() || value; + } + function has_break_or_continue(loop, parent) { + var found = false; + var tw = new TreeWalker(function(node) { + if (found || node instanceof AST_Scope) + return true; + if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) { + return found = true; + } + }); + if (parent instanceof AST_LabeledStatement) + tw.push(parent); + tw.push(loop); + loop.body.walk(tw); + return found; + } + function maintain_this_binding(parent, orig, val) { + if (parent instanceof AST_UnaryPrefix && parent.operator == "delete" || parent instanceof AST_Call && parent.expression === orig && (val instanceof AST_Chain || val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == "eval")) { + const zero = make_node(AST_Number, orig, { value: 0 }); + return make_sequence(orig, [zero, val]); + } else { + return val; + } + } + function is_func_expr(node) { + return node instanceof AST_Arrow || node instanceof AST_Function; + } + function is_iife_call(node) { + if (node.TYPE != "Call") + return false; + return node.expression instanceof AST_Function || is_iife_call(node.expression); + } + function is_empty(thing) { + if (thing === null) + return true; + if (thing instanceof AST_EmptyStatement) + return true; + if (thing instanceof AST_BlockStatement) + return thing.body.length == 0; + return false; + } + const identifier_atom = makePredicate("Infinity NaN undefined"); + function is_identifier_atom(node) { + return node instanceof AST_Infinity || node instanceof AST_NaN || node instanceof AST_Undefined; + } + function is_ref_of(ref, type) { + if (!(ref instanceof AST_SymbolRef)) + return false; + var orig = ref.definition().orig; + for (var i = orig.length; --i >= 0; ) { + if (orig[i] instanceof type) + return true; + } + } + function can_be_evicted_from_block(node) { + return !(node instanceof AST_DefClass || node instanceof AST_Defun || node instanceof AST_Let || node instanceof AST_Const || node instanceof AST_Export || node instanceof AST_Import); + } + function as_statement_array(thing) { + if (thing === null) + return []; + if (thing instanceof AST_BlockStatement) + return thing.body; + if (thing instanceof AST_EmptyStatement) + return []; + if (thing instanceof AST_Statement) + return [thing]; + throw new Error("Can't convert thing to statement array"); + } + function is_reachable(scope_node, defs) { + const find_ref = (node) => { + if (node instanceof AST_SymbolRef && defs.includes(node.definition())) { + return walk_abort; + } + }; + return walk_parent(scope_node, (node, info) => { + if (node instanceof AST_Scope && node !== scope_node) { + var parent = info.parent(); + if (parent instanceof AST_Call && parent.expression === node && !(node.async || node.is_generator)) { + return; + } + if (walk(node, find_ref)) + return walk_abort; + return true; + } + }); + } + function is_recursive_ref(compressor, def) { + var node; + for (var i = 0; node = compressor.parent(i); i++) { + if (node instanceof AST_Lambda || node instanceof AST_Class) { + var name = node.name; + if (name && name.definition() === def) { + return true; + } + } + } + return false; + } + function retain_top_func(fn, compressor) { + return compressor.top_retain && fn instanceof AST_Defun && has_flag(fn, TOP) && fn.name && compressor.top_retain(fn.name.definition()); + } + function make_nested_lookup(obj) { + const out = /* @__PURE__ */ new Map(); + for (var key of Object.keys(obj)) { + out.set(key, makePredicate(obj[key])); + } + const does_have = (global_name, fname) => { + const inner_map = out.get(global_name); + return inner_map != null && inner_map.has(fname); + }; + return does_have; + } + const pure_prop_access_globals = /* @__PURE__ */ new Set([ + "Number", + "String", + "Array", + "Object", + "Function", + "Promise" + ]); + const object_methods = [ + "constructor", + "toString", + "valueOf" + ]; + const is_pure_native_method = make_nested_lookup({ + Array: [ + "at", + "flat", + "includes", + "indexOf", + "join", + "lastIndexOf", + "slice", + ...object_methods + ], + Boolean: object_methods, + Function: object_methods, + Number: [ + "toExponential", + "toFixed", + "toPrecision", + ...object_methods + ], + Object: object_methods, + RegExp: [ + "test", + ...object_methods + ], + String: [ + "at", + "charAt", + "charCodeAt", + "charPointAt", + "concat", + "endsWith", + "fromCharCode", + "fromCodePoint", + "includes", + "indexOf", + "italics", + "lastIndexOf", + "localeCompare", + "match", + "matchAll", + "normalize", + "padStart", + "padEnd", + "repeat", + "replace", + "replaceAll", + "search", + "slice", + "split", + "startsWith", + "substr", + "substring", + "repeat", + "toLocaleLowerCase", + "toLocaleUpperCase", + "toLowerCase", + "toUpperCase", + "trim", + "trimEnd", + "trimStart", + ...object_methods + ] + }); + const is_pure_native_fn = make_nested_lookup({ + Array: [ + "isArray" + ], + Math: [ + "abs", + "acos", + "asin", + "atan", + "ceil", + "cos", + "exp", + "floor", + "log", + "round", + "sin", + "sqrt", + "tan", + "atan2", + "pow", + "max", + "min" + ], + Number: [ + "isFinite", + "isNaN" + ], + Object: [ + "create", + "getOwnPropertyDescriptor", + "getOwnPropertyNames", + "getPrototypeOf", + "isExtensible", + "isFrozen", + "isSealed", + "hasOwn", + "keys" + ], + String: [ + "fromCharCode" + ] + }); + const is_pure_native_value = make_nested_lookup({ + Math: [ + "E", + "LN10", + "LN2", + "LOG2E", + "LOG10E", + "PI", + "SQRT1_2", + "SQRT2" + ], + Number: [ + "MAX_VALUE", + "MIN_VALUE", + "NaN", + "NEGATIVE_INFINITY", + "POSITIVE_INFINITY" + ] + }); + const is_undeclared_ref = (node) => node instanceof AST_SymbolRef && node.definition().undeclared; + const lazy_op = makePredicate("&& || ??"); + const unary_side_effects = makePredicate("delete ++ --"); + (function(def_is_boolean) { + const unary_bool = makePredicate("! delete"); + const binary_bool = makePredicate("in instanceof == != === !== < <= >= >"); + def_is_boolean(AST_Node, return_false); + def_is_boolean(AST_UnaryPrefix, function() { + return unary_bool.has(this.operator); + }); + def_is_boolean(AST_Binary, function() { + return binary_bool.has(this.operator) || lazy_op.has(this.operator) && this.left.is_boolean() && this.right.is_boolean(); + }); + def_is_boolean(AST_Conditional, function() { + return this.consequent.is_boolean() && this.alternative.is_boolean(); + }); + def_is_boolean(AST_Assign, function() { + return this.operator == "=" && this.right.is_boolean(); + }); + def_is_boolean(AST_Sequence, function() { + return this.tail_node().is_boolean(); + }); + def_is_boolean(AST_True, return_true); + def_is_boolean(AST_False, return_true); + })(function(node, func) { + node.DEFMETHOD("is_boolean", func); + }); + (function(def_is_number) { + def_is_number(AST_Node, return_false); + def_is_number(AST_Number, return_true); + const unary = makePredicate("+ - ~ ++ --"); + def_is_number(AST_Unary, function() { + return unary.has(this.operator) && !(this.expression instanceof AST_BigInt); + }); + const numeric_ops = makePredicate("- * / % & | ^ << >> >>>"); + def_is_number(AST_Binary, function(compressor) { + return numeric_ops.has(this.operator) || this.operator == "+" && this.left.is_number(compressor) && this.right.is_number(compressor); + }); + def_is_number(AST_Assign, function(compressor) { + return numeric_ops.has(this.operator.slice(0, -1)) || this.operator == "=" && this.right.is_number(compressor); + }); + def_is_number(AST_Sequence, function(compressor) { + return this.tail_node().is_number(compressor); + }); + def_is_number(AST_Conditional, function(compressor) { + return this.consequent.is_number(compressor) && this.alternative.is_number(compressor); + }); + })(function(node, func) { + node.DEFMETHOD("is_number", func); + }); + (function(def_is_string) { + def_is_string(AST_Node, return_false); + def_is_string(AST_String, return_true); + def_is_string(AST_TemplateString, return_true); + def_is_string(AST_UnaryPrefix, function() { + return this.operator == "typeof"; + }); + def_is_string(AST_Binary, function(compressor) { + return this.operator == "+" && (this.left.is_string(compressor) || this.right.is_string(compressor)); + }); + def_is_string(AST_Assign, function(compressor) { + return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor); + }); + def_is_string(AST_Sequence, function(compressor) { + return this.tail_node().is_string(compressor); + }); + def_is_string(AST_Conditional, function(compressor) { + return this.consequent.is_string(compressor) && this.alternative.is_string(compressor); + }); + })(function(node, func) { + node.DEFMETHOD("is_string", func); + }); + function is_undefined(node, compressor) { + return has_flag(node, UNDEFINED) || node instanceof AST_Undefined || node instanceof AST_UnaryPrefix && node.operator == "void" && !node.expression.has_side_effects(compressor); + } + function is_null_or_undefined(node, compressor) { + let fixed; + return node instanceof AST_Null || is_undefined(node, compressor) || node instanceof AST_SymbolRef && (fixed = node.definition().fixed) instanceof AST_Node && is_nullish(fixed, compressor); + } + function is_nullish_shortcircuited(node, compressor) { + if (node instanceof AST_PropAccess || node instanceof AST_Call) { + return node.optional && is_null_or_undefined(node.expression, compressor) || is_nullish_shortcircuited(node.expression, compressor); + } + if (node instanceof AST_Chain) + return is_nullish_shortcircuited(node.expression, compressor); + return false; + } + function is_nullish(node, compressor) { + if (is_null_or_undefined(node, compressor)) + return true; + return is_nullish_shortcircuited(node, compressor); + } + (function(def_has_side_effects) { + def_has_side_effects(AST_Node, return_true); + def_has_side_effects(AST_EmptyStatement, return_false); + def_has_side_effects(AST_Constant, return_false); + def_has_side_effects(AST_This, return_false); + function any(list, compressor) { + for (var i = list.length; --i >= 0; ) + if (list[i].has_side_effects(compressor)) + return true; + return false; + } + def_has_side_effects(AST_Block, function(compressor) { + return any(this.body, compressor); + }); + def_has_side_effects(AST_Call, function(compressor) { + if (!this.is_callee_pure(compressor) && (!this.expression.is_call_pure(compressor) || this.expression.has_side_effects(compressor))) { + return true; + } + return any(this.args, compressor); + }); + def_has_side_effects(AST_Switch, function(compressor) { + return this.expression.has_side_effects(compressor) || any(this.body, compressor); + }); + def_has_side_effects(AST_Case, function(compressor) { + return this.expression.has_side_effects(compressor) || any(this.body, compressor); + }); + def_has_side_effects(AST_Try, function(compressor) { + return this.body.has_side_effects(compressor) || this.bcatch && this.bcatch.has_side_effects(compressor) || this.bfinally && this.bfinally.has_side_effects(compressor); + }); + def_has_side_effects(AST_If, function(compressor) { + return this.condition.has_side_effects(compressor) || this.body && this.body.has_side_effects(compressor) || this.alternative && this.alternative.has_side_effects(compressor); + }); + def_has_side_effects(AST_ImportMeta, return_false); + def_has_side_effects(AST_LabeledStatement, function(compressor) { + return this.body.has_side_effects(compressor); + }); + def_has_side_effects(AST_SimpleStatement, function(compressor) { + return this.body.has_side_effects(compressor); + }); + def_has_side_effects(AST_Lambda, return_false); + def_has_side_effects(AST_Class, function(compressor) { + if (this.extends && this.extends.has_side_effects(compressor)) { + return true; + } + return any(this.properties, compressor); + }); + def_has_side_effects(AST_ClassStaticBlock, function(compressor) { + return any(this.body, compressor); + }); + def_has_side_effects(AST_Binary, function(compressor) { + return this.left.has_side_effects(compressor) || this.right.has_side_effects(compressor); + }); + def_has_side_effects(AST_Assign, return_true); + def_has_side_effects(AST_Conditional, function(compressor) { + return this.condition.has_side_effects(compressor) || this.consequent.has_side_effects(compressor) || this.alternative.has_side_effects(compressor); + }); + def_has_side_effects(AST_Unary, function(compressor) { + return unary_side_effects.has(this.operator) || this.expression.has_side_effects(compressor); + }); + def_has_side_effects(AST_SymbolRef, function(compressor) { + return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name); + }); + def_has_side_effects(AST_SymbolClassProperty, return_false); + def_has_side_effects(AST_SymbolDeclaration, return_false); + def_has_side_effects(AST_Object, function(compressor) { + return any(this.properties, compressor); + }); + def_has_side_effects(AST_ObjectProperty, function(compressor) { + return this.computed_key() && this.key.has_side_effects(compressor) || this.value && this.value.has_side_effects(compressor); + }); + def_has_side_effects(AST_ClassProperty, function(compressor) { + return this.computed_key() && this.key.has_side_effects(compressor) || this.static && this.value && this.value.has_side_effects(compressor); + }); + def_has_side_effects(AST_ConciseMethod, function(compressor) { + return this.computed_key() && this.key.has_side_effects(compressor); + }); + def_has_side_effects(AST_ObjectGetter, function(compressor) { + return this.computed_key() && this.key.has_side_effects(compressor); + }); + def_has_side_effects(AST_ObjectSetter, function(compressor) { + return this.computed_key() && this.key.has_side_effects(compressor); + }); + def_has_side_effects(AST_Array, function(compressor) { + return any(this.elements, compressor); + }); + def_has_side_effects(AST_Dot, function(compressor) { + if (is_nullish(this, compressor)) { + return this.expression.has_side_effects(compressor); + } + if (!this.optional && this.expression.may_throw_on_access(compressor)) { + return true; + } + return this.expression.has_side_effects(compressor); + }); + def_has_side_effects(AST_Sub, function(compressor) { + if (is_nullish(this, compressor)) { + return this.expression.has_side_effects(compressor); + } + if (!this.optional && this.expression.may_throw_on_access(compressor)) { + return true; + } + var property = this.property.has_side_effects(compressor); + if (property && this.optional) + return true; + return property || this.expression.has_side_effects(compressor); + }); + def_has_side_effects(AST_Chain, function(compressor) { + return this.expression.has_side_effects(compressor); + }); + def_has_side_effects(AST_Sequence, function(compressor) { + return any(this.expressions, compressor); + }); + def_has_side_effects(AST_Definitions, function(compressor) { + return any(this.definitions, compressor); + }); + def_has_side_effects(AST_VarDef, function() { + return this.value; + }); + def_has_side_effects(AST_TemplateSegment, return_false); + def_has_side_effects(AST_TemplateString, function(compressor) { + return any(this.segments, compressor); + }); + })(function(node, func) { + node.DEFMETHOD("has_side_effects", func); + }); + (function(def_may_throw) { + def_may_throw(AST_Node, return_true); + def_may_throw(AST_Constant, return_false); + def_may_throw(AST_EmptyStatement, return_false); + def_may_throw(AST_Lambda, return_false); + def_may_throw(AST_SymbolDeclaration, return_false); + def_may_throw(AST_This, return_false); + def_may_throw(AST_ImportMeta, return_false); + function any(list, compressor) { + for (var i = list.length; --i >= 0; ) + if (list[i].may_throw(compressor)) + return true; + return false; + } + def_may_throw(AST_Class, function(compressor) { + if (this.extends && this.extends.may_throw(compressor)) + return true; + return any(this.properties, compressor); + }); + def_may_throw(AST_ClassStaticBlock, function(compressor) { + return any(this.body, compressor); + }); + def_may_throw(AST_Array, function(compressor) { + return any(this.elements, compressor); + }); + def_may_throw(AST_Assign, function(compressor) { + if (this.right.may_throw(compressor)) + return true; + if (!compressor.has_directive("use strict") && this.operator == "=" && this.left instanceof AST_SymbolRef) { + return false; + } + return this.left.may_throw(compressor); + }); + def_may_throw(AST_Binary, function(compressor) { + return this.left.may_throw(compressor) || this.right.may_throw(compressor); + }); + def_may_throw(AST_Block, function(compressor) { + return any(this.body, compressor); + }); + def_may_throw(AST_Call, function(compressor) { + if (is_nullish(this, compressor)) + return false; + if (any(this.args, compressor)) + return true; + if (this.is_callee_pure(compressor)) + return false; + if (this.expression.may_throw(compressor)) + return true; + return !(this.expression instanceof AST_Lambda) || any(this.expression.body, compressor); + }); + def_may_throw(AST_Case, function(compressor) { + return this.expression.may_throw(compressor) || any(this.body, compressor); + }); + def_may_throw(AST_Conditional, function(compressor) { + return this.condition.may_throw(compressor) || this.consequent.may_throw(compressor) || this.alternative.may_throw(compressor); + }); + def_may_throw(AST_Definitions, function(compressor) { + return any(this.definitions, compressor); + }); + def_may_throw(AST_If, function(compressor) { + return this.condition.may_throw(compressor) || this.body && this.body.may_throw(compressor) || this.alternative && this.alternative.may_throw(compressor); + }); + def_may_throw(AST_LabeledStatement, function(compressor) { + return this.body.may_throw(compressor); + }); + def_may_throw(AST_Object, function(compressor) { + return any(this.properties, compressor); + }); + def_may_throw(AST_ObjectProperty, function(compressor) { + return this.value ? this.value.may_throw(compressor) : false; + }); + def_may_throw(AST_ClassProperty, function(compressor) { + return this.computed_key() && this.key.may_throw(compressor) || this.static && this.value && this.value.may_throw(compressor); + }); + def_may_throw(AST_ConciseMethod, function(compressor) { + return this.computed_key() && this.key.may_throw(compressor); + }); + def_may_throw(AST_ObjectGetter, function(compressor) { + return this.computed_key() && this.key.may_throw(compressor); + }); + def_may_throw(AST_ObjectSetter, function(compressor) { + return this.computed_key() && this.key.may_throw(compressor); + }); + def_may_throw(AST_Return, function(compressor) { + return this.value && this.value.may_throw(compressor); + }); + def_may_throw(AST_Sequence, function(compressor) { + return any(this.expressions, compressor); + }); + def_may_throw(AST_SimpleStatement, function(compressor) { + return this.body.may_throw(compressor); + }); + def_may_throw(AST_Dot, function(compressor) { + if (is_nullish(this, compressor)) + return false; + return !this.optional && this.expression.may_throw_on_access(compressor) || this.expression.may_throw(compressor); + }); + def_may_throw(AST_Sub, function(compressor) { + if (is_nullish(this, compressor)) + return false; + return !this.optional && this.expression.may_throw_on_access(compressor) || this.expression.may_throw(compressor) || this.property.may_throw(compressor); + }); + def_may_throw(AST_Chain, function(compressor) { + return this.expression.may_throw(compressor); + }); + def_may_throw(AST_Switch, function(compressor) { + return this.expression.may_throw(compressor) || any(this.body, compressor); + }); + def_may_throw(AST_SymbolRef, function(compressor) { + return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name); + }); + def_may_throw(AST_SymbolClassProperty, return_false); + def_may_throw(AST_Try, function(compressor) { + return this.bcatch ? this.bcatch.may_throw(compressor) : this.body.may_throw(compressor) || this.bfinally && this.bfinally.may_throw(compressor); + }); + def_may_throw(AST_Unary, function(compressor) { + if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef) + return false; + return this.expression.may_throw(compressor); + }); + def_may_throw(AST_VarDef, function(compressor) { + if (!this.value) + return false; + return this.value.may_throw(compressor); + }); + })(function(node, func) { + node.DEFMETHOD("may_throw", func); + }); + (function(def_is_constant_expression) { + function all_refs_local(scope) { + let result = true; + walk(this, (node) => { + if (node instanceof AST_SymbolRef) { + if (has_flag(this, INLINED)) { + result = false; + return walk_abort; + } + var def = node.definition(); + if (member(def, this.enclosed) && !this.variables.has(def.name)) { + if (scope) { + var scope_def = scope.find_variable(node); + if (def.undeclared ? !scope_def : scope_def === def) { + result = "f"; + return true; + } + } + result = false; + return walk_abort; + } + return true; + } + if (node instanceof AST_This && this instanceof AST_Arrow) { + result = false; + return walk_abort; + } + }); + return result; + } + def_is_constant_expression(AST_Node, return_false); + def_is_constant_expression(AST_Constant, return_true); + def_is_constant_expression(AST_Class, function(scope) { + if (this.extends && !this.extends.is_constant_expression(scope)) { + return false; + } + for (const prop of this.properties) { + if (prop.computed_key() && !prop.key.is_constant_expression(scope)) { + return false; + } + if (prop.static && prop.value && !prop.value.is_constant_expression(scope)) { + return false; + } + if (prop instanceof AST_ClassStaticBlock) { + return false; + } + } + return all_refs_local.call(this, scope); + }); + def_is_constant_expression(AST_Lambda, all_refs_local); + def_is_constant_expression(AST_Unary, function() { + return this.expression.is_constant_expression(); + }); + def_is_constant_expression(AST_Binary, function() { + return this.left.is_constant_expression() && this.right.is_constant_expression(); + }); + def_is_constant_expression(AST_Array, function() { + return this.elements.every((l) => l.is_constant_expression()); + }); + def_is_constant_expression(AST_Object, function() { + return this.properties.every((l) => l.is_constant_expression()); + }); + def_is_constant_expression(AST_ObjectProperty, function() { + return !!(!(this.key instanceof AST_Node) && this.value && this.value.is_constant_expression()); + }); + })(function(node, func) { + node.DEFMETHOD("is_constant_expression", func); + }); + (function(def_may_throw_on_access) { + AST_Node.DEFMETHOD("may_throw_on_access", function(compressor) { + return !compressor.option("pure_getters") || this._dot_throw(compressor); + }); + function is_strict(compressor) { + return /strict/.test(compressor.option("pure_getters")); + } + def_may_throw_on_access(AST_Node, is_strict); + def_may_throw_on_access(AST_Null, return_true); + def_may_throw_on_access(AST_Undefined, return_true); + def_may_throw_on_access(AST_Constant, return_false); + def_may_throw_on_access(AST_Array, return_false); + def_may_throw_on_access(AST_Object, function(compressor) { + if (!is_strict(compressor)) + return false; + for (var i = this.properties.length; --i >= 0; ) + if (this.properties[i]._dot_throw(compressor)) + return true; + return false; + }); + def_may_throw_on_access(AST_Class, return_false); + def_may_throw_on_access(AST_ObjectProperty, return_false); + def_may_throw_on_access(AST_ObjectGetter, return_true); + def_may_throw_on_access(AST_Expansion, function(compressor) { + return this.expression._dot_throw(compressor); + }); + def_may_throw_on_access(AST_Function, return_false); + def_may_throw_on_access(AST_Arrow, return_false); + def_may_throw_on_access(AST_UnaryPostfix, return_false); + def_may_throw_on_access(AST_UnaryPrefix, function() { + return this.operator == "void"; + }); + def_may_throw_on_access(AST_Binary, function(compressor) { + return (this.operator == "&&" || this.operator == "||" || this.operator == "??") && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor)); + }); + def_may_throw_on_access(AST_Assign, function(compressor) { + if (this.logical) + return true; + return this.operator == "=" && this.right._dot_throw(compressor); + }); + def_may_throw_on_access(AST_Conditional, function(compressor) { + return this.consequent._dot_throw(compressor) || this.alternative._dot_throw(compressor); + }); + def_may_throw_on_access(AST_Dot, function(compressor) { + if (!is_strict(compressor)) + return false; + if (this.property == "prototype") { + return !(this.expression instanceof AST_Function || this.expression instanceof AST_Class); + } + return true; + }); + def_may_throw_on_access(AST_Chain, function(compressor) { + return this.expression._dot_throw(compressor); + }); + def_may_throw_on_access(AST_Sequence, function(compressor) { + return this.tail_node()._dot_throw(compressor); + }); + def_may_throw_on_access(AST_SymbolRef, function(compressor) { + if (this.name === "arguments" && this.scope instanceof AST_Lambda) + return false; + if (has_flag(this, UNDEFINED)) + return true; + if (!is_strict(compressor)) + return false; + if (is_undeclared_ref(this) && this.is_declared(compressor)) + return false; + if (this.is_immutable()) + return false; + var fixed = this.fixed_value(); + return !fixed || fixed._dot_throw(compressor); + }); + })(function(node, func) { + node.DEFMETHOD("_dot_throw", func); + }); + function is_lhs(node, parent) { + if (parent instanceof AST_Unary && unary_side_effects.has(parent.operator)) + return parent.expression; + if (parent instanceof AST_Assign && parent.left === node) + return node; + if (parent instanceof AST_ForIn && parent.init === node) + return node; + } + (function(def_negate) { + function basic_negation(exp) { + return make_node(AST_UnaryPrefix, exp, { + operator: "!", + expression: exp + }); + } + function best(orig, alt, first_in_statement2) { + var negated = basic_negation(orig); + if (first_in_statement2) { + var stat = make_node(AST_SimpleStatement, alt, { + body: alt + }); + return best_of_expression(negated, stat) === stat ? alt : negated; + } + return best_of_expression(negated, alt); + } + def_negate(AST_Node, function() { + return basic_negation(this); + }); + def_negate(AST_Statement, function() { + throw new Error("Cannot negate a statement"); + }); + def_negate(AST_Function, function() { + return basic_negation(this); + }); + def_negate(AST_Class, function() { + return basic_negation(this); + }); + def_negate(AST_Arrow, function() { + return basic_negation(this); + }); + def_negate(AST_UnaryPrefix, function() { + if (this.operator == "!") + return this.expression; + return basic_negation(this); + }); + def_negate(AST_Sequence, function(compressor) { + var expressions = this.expressions.slice(); + expressions.push(expressions.pop().negate(compressor)); + return make_sequence(this, expressions); + }); + def_negate(AST_Conditional, function(compressor, first_in_statement2) { + var self2 = this.clone(); + self2.consequent = self2.consequent.negate(compressor); + self2.alternative = self2.alternative.negate(compressor); + return best(this, self2, first_in_statement2); + }); + def_negate(AST_Binary, function(compressor, first_in_statement2) { + var self2 = this.clone(), op = this.operator; + if (compressor.option("unsafe_comps")) { + switch (op) { + case "<=": + self2.operator = ">"; + return self2; + case "<": + self2.operator = ">="; + return self2; + case ">=": + self2.operator = "<"; + return self2; + case ">": + self2.operator = "<="; + return self2; + } + } + switch (op) { + case "==": + self2.operator = "!="; + return self2; + case "!=": + self2.operator = "=="; + return self2; + case "===": + self2.operator = "!=="; + return self2; + case "!==": + self2.operator = "==="; + return self2; + case "&&": + self2.operator = "||"; + self2.left = self2.left.negate(compressor, first_in_statement2); + self2.right = self2.right.negate(compressor); + return best(this, self2, first_in_statement2); + case "||": + self2.operator = "&&"; + self2.left = self2.left.negate(compressor, first_in_statement2); + self2.right = self2.right.negate(compressor); + return best(this, self2, first_in_statement2); + } + return basic_negation(this); + }); + })(function(node, func) { + node.DEFMETHOD("negate", function(compressor, first_in_statement2) { + return func.call(this, compressor, first_in_statement2); + }); + }); + var global_pure_fns = makePredicate("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError"); + AST_Call.DEFMETHOD("is_callee_pure", function(compressor) { + if (compressor.option("unsafe")) { + var expr = this.expression; + var first_arg = this.args && this.args[0] && this.args[0].evaluate(compressor); + if (expr.expression && expr.expression.name === "hasOwnProperty" && (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) { + return false; + } + if (is_undeclared_ref(expr) && global_pure_fns.has(expr.name)) + return true; + if (expr instanceof AST_Dot && is_undeclared_ref(expr.expression) && is_pure_native_fn(expr.expression.name, expr.property)) { + return true; + } + } + if (this instanceof AST_New && compressor.option("pure_new")) { + return true; + } + if (compressor.option("side_effects") && has_annotation(this, _PURE)) { + return true; + } + return !compressor.pure_funcs(this); + }); + AST_Node.DEFMETHOD("is_call_pure", return_false); + AST_Dot.DEFMETHOD("is_call_pure", function(compressor) { + if (!compressor.option("unsafe")) + return; + const expr = this.expression; + let native_obj; + if (expr instanceof AST_Array) { + native_obj = "Array"; + } else if (expr.is_boolean()) { + native_obj = "Boolean"; + } else if (expr.is_number(compressor)) { + native_obj = "Number"; + } else if (expr instanceof AST_RegExp) { + native_obj = "RegExp"; + } else if (expr.is_string(compressor)) { + native_obj = "String"; + } else if (!this.may_throw_on_access(compressor)) { + native_obj = "Object"; + } + return native_obj != null && is_pure_native_method(native_obj, this.property); + }); + const aborts = (thing) => thing && thing.aborts(); + (function(def_aborts) { + def_aborts(AST_Statement, return_null); + def_aborts(AST_Jump, return_this); + function block_aborts() { + for (var i = 0; i < this.body.length; i++) { + if (aborts(this.body[i])) { + return this.body[i]; + } + } + return null; + } + def_aborts(AST_Import, return_null); + def_aborts(AST_BlockStatement, block_aborts); + def_aborts(AST_SwitchBranch, block_aborts); + def_aborts(AST_DefClass, function() { + for (const prop of this.properties) { + if (prop instanceof AST_ClassStaticBlock) { + if (prop.aborts()) + return prop; + } + } + return null; + }); + def_aborts(AST_ClassStaticBlock, block_aborts); + def_aborts(AST_If, function() { + return this.alternative && aborts(this.body) && aborts(this.alternative) && this; + }); + })(function(node, func) { + node.DEFMETHOD("aborts", func); + }); + AST_Node.DEFMETHOD("contains_this", function() { + return walk(this, (node) => { + if (node instanceof AST_This) + return walk_abort; + if (node !== this && node instanceof AST_Scope && !(node instanceof AST_Arrow)) { + return true; + } + }); + }); + function is_modified(compressor, tw, node, value, level, immutable) { + var parent = tw.parent(level); + var lhs = is_lhs(node, parent); + if (lhs) + return lhs; + if (!immutable && parent instanceof AST_Call && parent.expression === node && !(value instanceof AST_Arrow) && !(value instanceof AST_Class) && !parent.is_callee_pure(compressor) && (!(value instanceof AST_Function) || !(parent instanceof AST_New) && value.contains_this())) { + return true; + } + if (parent instanceof AST_Array) { + return is_modified(compressor, tw, parent, parent, level + 1); + } + if (parent instanceof AST_ObjectKeyVal && node === parent.value) { + var obj = tw.parent(level + 1); + return is_modified(compressor, tw, obj, obj, level + 2); + } + if (parent instanceof AST_PropAccess && parent.expression === node) { + var prop = read_property(value, parent.property); + return !immutable && is_modified(compressor, tw, parent, prop, level + 1); + } + } + function def_eval(node, func) { + node.DEFMETHOD("_eval", func); + } + const nullish = Symbol("This AST_Chain is nullish"); + AST_Node.DEFMETHOD("evaluate", function(compressor) { + if (!compressor.option("evaluate")) + return this; + var val = this._eval(compressor, 1); + if (!val || val instanceof RegExp) + return val; + if (typeof val == "function" || typeof val == "object" || val == nullish) + return this; + if (typeof val === "string") { + const unevaluated_size = this.size(compressor); + if (val.length + 2 > unevaluated_size) + return this; + } + return val; + }); + var unaryPrefix = makePredicate("! ~ - + void"); + AST_Node.DEFMETHOD("is_constant", function() { + if (this instanceof AST_Constant) { + return !(this instanceof AST_RegExp); + } else { + return this instanceof AST_UnaryPrefix && this.expression instanceof AST_Constant && unaryPrefix.has(this.operator); + } + }); + def_eval(AST_Statement, function() { + throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start)); + }); + def_eval(AST_Lambda, return_this); + def_eval(AST_Class, return_this); + def_eval(AST_Node, return_this); + def_eval(AST_Constant, function() { + return this.getValue(); + }); + def_eval(AST_BigInt, return_this); + def_eval(AST_RegExp, function(compressor) { + let evaluated = compressor.evaluated_regexps.get(this.value); + if (evaluated === void 0 && regexp_is_safe(this.value.source)) { + try { + const { source, flags } = this.value; + evaluated = new RegExp(source, flags); + } catch (e) { + evaluated = null; + } + compressor.evaluated_regexps.set(this.value, evaluated); + } + return evaluated || this; + }); + def_eval(AST_TemplateString, function() { + if (this.segments.length !== 1) + return this; + return this.segments[0].value; + }); + def_eval(AST_Function, function(compressor) { + if (compressor.option("unsafe")) { + var fn = function() { + }; + fn.node = this; + fn.toString = () => this.print_to_string(); + return fn; + } + return this; + }); + def_eval(AST_Array, function(compressor, depth) { + if (compressor.option("unsafe")) { + var elements = []; + for (var i = 0, len = this.elements.length; i < len; i++) { + var element = this.elements[i]; + var value = element._eval(compressor, depth); + if (element === value) + return this; + elements.push(value); + } + return elements; + } + return this; + }); + def_eval(AST_Object, function(compressor, depth) { + if (compressor.option("unsafe")) { + var val = {}; + for (var i = 0, len = this.properties.length; i < len; i++) { + var prop = this.properties[i]; + if (prop instanceof AST_Expansion) + return this; + var key = prop.key; + if (key instanceof AST_Symbol) { + key = key.name; + } else if (key instanceof AST_Node) { + key = key._eval(compressor, depth); + if (key === prop.key) + return this; + } + if (typeof Object.prototype[key] === "function") { + return this; + } + if (prop.value instanceof AST_Function) + continue; + val[key] = prop.value._eval(compressor, depth); + if (val[key] === prop.value) + return this; + } + return val; + } + return this; + }); + var non_converting_unary = makePredicate("! typeof void"); + def_eval(AST_UnaryPrefix, function(compressor, depth) { + var e = this.expression; + if (compressor.option("typeofs") && this.operator == "typeof" && (e instanceof AST_Lambda || e instanceof AST_SymbolRef && e.fixed_value() instanceof AST_Lambda)) { + return "function"; + } + if (!non_converting_unary.has(this.operator)) + depth++; + e = e._eval(compressor, depth); + if (e === this.expression) + return this; + switch (this.operator) { + case "!": + return !e; + case "typeof": + if (e instanceof RegExp) + return this; + return typeof e; + case "void": + return void 0; + case "~": + return ~e; + case "-": + return -e; + case "+": + return +e; + } + return this; + }); + var non_converting_binary = makePredicate("&& || ?? === !=="); + const identity_comparison = makePredicate("== != === !=="); + const has_identity = (value) => typeof value === "object" || typeof value === "function" || typeof value === "symbol"; + def_eval(AST_Binary, function(compressor, depth) { + if (!non_converting_binary.has(this.operator)) + depth++; + var left = this.left._eval(compressor, depth); + if (left === this.left) + return this; + var right = this.right._eval(compressor, depth); + if (right === this.right) + return this; + var result; + if (left != null && right != null && identity_comparison.has(this.operator) && has_identity(left) && has_identity(right) && typeof left === typeof right) { + return this; + } + switch (this.operator) { + case "&&": + result = left && right; + break; + case "||": + result = left || right; + break; + case "??": + result = left != null ? left : right; + break; + case "|": + result = left | right; + break; + case "&": + result = left & right; + break; + case "^": + result = left ^ right; + break; + case "+": + result = left + right; + break; + case "*": + result = left * right; + break; + case "**": + result = Math.pow(left, right); + break; + case "/": + result = left / right; + break; + case "%": + result = left % right; + break; + case "-": + result = left - right; + break; + case "<<": + result = left << right; + break; + case ">>": + result = left >> right; + break; + case ">>>": + result = left >>> right; + break; + case "==": + result = left == right; + break; + case "===": + result = left === right; + break; + case "!=": + result = left != right; + break; + case "!==": + result = left !== right; + break; + case "<": + result = left < right; + break; + case "<=": + result = left <= right; + break; + case ">": + result = left > right; + break; + case ">=": + result = left >= right; + break; + default: + return this; + } + if (isNaN(result) && compressor.find_parent(AST_With)) { + return this; + } + return result; + }); + def_eval(AST_Conditional, function(compressor, depth) { + var condition = this.condition._eval(compressor, depth); + if (condition === this.condition) + return this; + var node = condition ? this.consequent : this.alternative; + var value = node._eval(compressor, depth); + return value === node ? this : value; + }); + const reentrant_ref_eval = /* @__PURE__ */ new Set(); + def_eval(AST_SymbolRef, function(compressor, depth) { + if (reentrant_ref_eval.has(this)) + return this; + var fixed = this.fixed_value(); + if (!fixed) + return this; + reentrant_ref_eval.add(this); + const value = fixed._eval(compressor, depth); + reentrant_ref_eval.delete(this); + if (value === fixed) + return this; + if (value && typeof value == "object") { + var escaped = this.definition().escaped; + if (escaped && depth > escaped) + return this; + } + return value; + }); + const global_objs = { Array, Math, Number, Object, String }; + const regexp_flags = /* @__PURE__ */ new Set([ + "dotAll", + "global", + "ignoreCase", + "multiline", + "sticky", + "unicode" + ]); + def_eval(AST_PropAccess, function(compressor, depth) { + let obj = this.expression._eval(compressor, depth + 1); + if (obj === nullish || this.optional && obj == null) + return nullish; + if (this.property === "length") { + if (typeof obj === "string") { + return obj.length; + } + const is_spreadless_array = obj instanceof AST_Array && obj.elements.every((el) => !(el instanceof AST_Expansion)); + if (is_spreadless_array && obj.elements.every((el) => !el.has_side_effects(compressor))) { + return obj.elements.length; + } + } + if (compressor.option("unsafe")) { + var key = this.property; + if (key instanceof AST_Node) { + key = key._eval(compressor, depth); + if (key === this.property) + return this; + } + var exp = this.expression; + if (is_undeclared_ref(exp)) { + var aa; + var first_arg = exp.name === "hasOwnProperty" && key === "call" && (aa = compressor.parent() && compressor.parent().args) && (aa && aa[0] && aa[0].evaluate(compressor)); + first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg; + if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) { + return this.clone(); + } + if (!is_pure_native_value(exp.name, key)) + return this; + obj = global_objs[exp.name]; + } else { + if (obj instanceof RegExp) { + if (key == "source") { + return regexp_source_fix(obj.source); + } else if (key == "flags" || regexp_flags.has(key)) { + return obj[key]; + } + } + if (!obj || obj === exp || !HOP(obj, key)) + return this; + if (typeof obj == "function") + switch (key) { + case "name": + return obj.node.name ? obj.node.name.name : ""; + case "length": + return obj.node.length_property(); + default: + return this; + } + } + return obj[key]; + } + return this; + }); + def_eval(AST_Chain, function(compressor, depth) { + const evaluated = this.expression._eval(compressor, depth); + return evaluated === nullish ? void 0 : evaluated === this.expression ? this : evaluated; + }); + def_eval(AST_Call, function(compressor, depth) { + var exp = this.expression; + const callee = exp._eval(compressor, depth); + if (callee === nullish || this.optional && callee == null) + return nullish; + if (compressor.option("unsafe") && exp instanceof AST_PropAccess) { + var key = exp.property; + if (key instanceof AST_Node) { + key = key._eval(compressor, depth); + if (key === exp.property) + return this; + } + var val; + var e = exp.expression; + if (is_undeclared_ref(e)) { + var first_arg = e.name === "hasOwnProperty" && key === "call" && (this.args[0] && this.args[0].evaluate(compressor)); + first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg; + if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) { + return this.clone(); + } + if (!is_pure_native_fn(e.name, key)) + return this; + val = global_objs[e.name]; + } else { + val = e._eval(compressor, depth + 1); + if (val === e || !val) + return this; + if (!is_pure_native_method(val.constructor.name, key)) + return this; + } + var args = []; + for (var i = 0, len = this.args.length; i < len; i++) { + var arg = this.args[i]; + var value = arg._eval(compressor, depth); + if (arg === value) + return this; + if (arg instanceof AST_Lambda) + return this; + args.push(value); + } + try { + return val[key].apply(val, args); + } catch (ex) { + } + } + return this; + }); + def_eval(AST_New, return_this); + function def_drop_side_effect_free(node, func) { + node.DEFMETHOD("drop_side_effect_free", func); + } + function trim(nodes, compressor, first_in_statement2) { + var len = nodes.length; + if (!len) + return null; + var ret = [], changed = false; + for (var i = 0; i < len; i++) { + var node = nodes[i].drop_side_effect_free(compressor, first_in_statement2); + changed |= node !== nodes[i]; + if (node) { + ret.push(node); + first_in_statement2 = false; + } + } + return changed ? ret.length ? ret : null : nodes; + } + def_drop_side_effect_free(AST_Node, return_this); + def_drop_side_effect_free(AST_Constant, return_null); + def_drop_side_effect_free(AST_This, return_null); + def_drop_side_effect_free(AST_Call, function(compressor, first_in_statement2) { + if (is_nullish_shortcircuited(this, compressor)) { + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + } + if (!this.is_callee_pure(compressor)) { + if (this.expression.is_call_pure(compressor)) { + var exprs = this.args.slice(); + exprs.unshift(this.expression.expression); + exprs = trim(exprs, compressor, first_in_statement2); + return exprs && make_sequence(this, exprs); + } + if (is_func_expr(this.expression) && (!this.expression.name || !this.expression.name.definition().references.length)) { + var node = this.clone(); + node.expression.process_expression(false, compressor); + return node; + } + return this; + } + var args = trim(this.args, compressor, first_in_statement2); + return args && make_sequence(this, args); + }); + def_drop_side_effect_free(AST_Accessor, return_null); + def_drop_side_effect_free(AST_Function, return_null); + def_drop_side_effect_free(AST_Arrow, return_null); + def_drop_side_effect_free(AST_Class, function(compressor) { + const with_effects = []; + const trimmed_extends = this.extends && this.extends.drop_side_effect_free(compressor); + if (trimmed_extends) + with_effects.push(trimmed_extends); + for (const prop of this.properties) { + if (prop instanceof AST_ClassStaticBlock) { + if (prop.has_side_effects(compressor)) { + return this; + } + } else { + const trimmed_prop = prop.drop_side_effect_free(compressor); + if (trimmed_prop) { + if (trimmed_prop.contains_this()) + return this; + with_effects.push(trimmed_prop); + } + } + } + if (!with_effects.length) + return null; + const exprs = make_sequence(this, with_effects); + if (this instanceof AST_DefClass) { + return make_node(AST_SimpleStatement, this, { body: exprs }); + } else { + return exprs; + } + }); + def_drop_side_effect_free(AST_ClassProperty, function(compressor) { + const key = this.computed_key() && this.key.drop_side_effect_free(compressor); + const value = this.static && this.value && this.value.drop_side_effect_free(compressor); + if (key && value) + return make_sequence(this, [key, value]); + return key || value || null; + }); + def_drop_side_effect_free(AST_Binary, function(compressor, first_in_statement2) { + var right = this.right.drop_side_effect_free(compressor); + if (!right) + return this.left.drop_side_effect_free(compressor, first_in_statement2); + if (lazy_op.has(this.operator)) { + if (right === this.right) + return this; + var node = this.clone(); + node.right = right; + return node; + } else { + var left = this.left.drop_side_effect_free(compressor, first_in_statement2); + if (!left) + return this.right.drop_side_effect_free(compressor, first_in_statement2); + return make_sequence(this, [left, right]); + } + }); + def_drop_side_effect_free(AST_Assign, function(compressor) { + if (this.logical) + return this; + var left = this.left; + if (left.has_side_effects(compressor) || compressor.has_directive("use strict") && left instanceof AST_PropAccess && left.expression.is_constant()) { + return this; + } + set_flag(this, WRITE_ONLY); + while (left instanceof AST_PropAccess) { + left = left.expression; + } + if (left.is_constant_expression(compressor.find_parent(AST_Scope))) { + return this.right.drop_side_effect_free(compressor); + } + return this; + }); + def_drop_side_effect_free(AST_Conditional, function(compressor) { + var consequent = this.consequent.drop_side_effect_free(compressor); + var alternative = this.alternative.drop_side_effect_free(compressor); + if (consequent === this.consequent && alternative === this.alternative) + return this; + if (!consequent) + return alternative ? make_node(AST_Binary, this, { + operator: "||", + left: this.condition, + right: alternative + }) : this.condition.drop_side_effect_free(compressor); + if (!alternative) + return make_node(AST_Binary, this, { + operator: "&&", + left: this.condition, + right: consequent + }); + var node = this.clone(); + node.consequent = consequent; + node.alternative = alternative; + return node; + }); + def_drop_side_effect_free(AST_Unary, function(compressor, first_in_statement2) { + if (unary_side_effects.has(this.operator)) { + if (!this.expression.has_side_effects(compressor)) { + set_flag(this, WRITE_ONLY); + } else { + clear_flag(this, WRITE_ONLY); + } + return this; + } + if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef) + return null; + var expression = this.expression.drop_side_effect_free(compressor, first_in_statement2); + if (first_in_statement2 && expression && is_iife_call(expression)) { + if (expression === this.expression && this.operator == "!") + return this; + return expression.negate(compressor, first_in_statement2); + } + return expression; + }); + def_drop_side_effect_free(AST_SymbolRef, function(compressor) { + const safe_access = this.is_declared(compressor) || pure_prop_access_globals.has(this.name); + return safe_access ? null : this; + }); + def_drop_side_effect_free(AST_Object, function(compressor, first_in_statement2) { + var values = trim(this.properties, compressor, first_in_statement2); + return values && make_sequence(this, values); + }); + def_drop_side_effect_free(AST_ObjectProperty, function(compressor, first_in_statement2) { + const computed_key = this instanceof AST_ObjectKeyVal && this.key instanceof AST_Node; + const key = computed_key && this.key.drop_side_effect_free(compressor, first_in_statement2); + const value = this.value && this.value.drop_side_effect_free(compressor, first_in_statement2); + if (key && value) { + return make_sequence(this, [key, value]); + } + return key || value; + }); + def_drop_side_effect_free(AST_ConciseMethod, function() { + return this.computed_key() ? this.key : null; + }); + def_drop_side_effect_free(AST_ObjectGetter, function() { + return this.computed_key() ? this.key : null; + }); + def_drop_side_effect_free(AST_ObjectSetter, function() { + return this.computed_key() ? this.key : null; + }); + def_drop_side_effect_free(AST_Array, function(compressor, first_in_statement2) { + var values = trim(this.elements, compressor, first_in_statement2); + return values && make_sequence(this, values); + }); + def_drop_side_effect_free(AST_Dot, function(compressor, first_in_statement2) { + if (is_nullish_shortcircuited(this, compressor)) { + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + } + if (!this.optional && this.expression.may_throw_on_access(compressor)) { + return this; + } + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + }); + def_drop_side_effect_free(AST_Sub, function(compressor, first_in_statement2) { + if (is_nullish_shortcircuited(this, compressor)) { + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + } + if (!this.optional && this.expression.may_throw_on_access(compressor)) { + return this; + } + var property = this.property.drop_side_effect_free(compressor); + if (property && this.optional) + return this; + var expression = this.expression.drop_side_effect_free(compressor, first_in_statement2); + if (expression && property) + return make_sequence(this, [expression, property]); + return expression || property; + }); + def_drop_side_effect_free(AST_Chain, function(compressor, first_in_statement2) { + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + }); + def_drop_side_effect_free(AST_Sequence, function(compressor) { + var last2 = this.tail_node(); + var expr = last2.drop_side_effect_free(compressor); + if (expr === last2) + return this; + var expressions = this.expressions.slice(0, -1); + if (expr) + expressions.push(expr); + if (!expressions.length) { + return make_node(AST_Number, this, { value: 0 }); + } + return make_sequence(this, expressions); + }); + def_drop_side_effect_free(AST_Expansion, function(compressor, first_in_statement2) { + return this.expression.drop_side_effect_free(compressor, first_in_statement2); + }); + def_drop_side_effect_free(AST_TemplateSegment, return_null); + def_drop_side_effect_free(AST_TemplateString, function(compressor) { + var values = trim(this.segments, compressor, first_in_statement); + return values && make_sequence(this, values); + }); + const r_keep_assign = /keep_assign/; + AST_Scope.DEFMETHOD("drop_unused", function(compressor) { + if (!compressor.option("unused")) + return; + if (compressor.has_directive("use asm")) + return; + if (!this.variables) + return; + var self2 = this; + if (self2.pinned()) + return; + var drop_funcs = !(self2 instanceof AST_Toplevel) || compressor.toplevel.funcs; + var drop_vars = !(self2 instanceof AST_Toplevel) || compressor.toplevel.vars; + const assign_as_unused = r_keep_assign.test(compressor.option("unused")) ? return_false : function(node) { + if (node instanceof AST_Assign && !node.logical && (has_flag(node, WRITE_ONLY) || node.operator == "=")) { + return node.left; + } + if (node instanceof AST_Unary && has_flag(node, WRITE_ONLY)) { + return node.expression; + } + }; + var in_use_ids = /* @__PURE__ */ new Map(); + var fixed_ids = /* @__PURE__ */ new Map(); + if (self2 instanceof AST_Toplevel && compressor.top_retain) { + self2.variables.forEach(function(def) { + if (compressor.top_retain(def)) { + in_use_ids.set(def.id, def); + } + }); + } + var var_defs_by_id = /* @__PURE__ */ new Map(); + var initializations = /* @__PURE__ */ new Map(); + var scope = this; + var tw = new TreeWalker(function(node, descend) { + if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive("use strict")) { + node.argnames.forEach(function(argname) { + if (!(argname instanceof AST_SymbolDeclaration)) + return; + var def = argname.definition(); + in_use_ids.set(def.id, def); + }); + } + if (node === self2) + return; + if (node instanceof AST_Class) { + if (node.has_side_effects(compressor)) { + node.visit_nondeferred_class_parts(tw); + } + } + if (node instanceof AST_Defun || node instanceof AST_DefClass) { + var node_def = node.name.definition(); + const in_export = tw.parent() instanceof AST_Export; + if (in_export || !drop_funcs && scope === self2) { + if (node_def.global) { + in_use_ids.set(node_def.id, node_def); + } + } + map_add(initializations, node_def.id, node); + return true; + } + const in_root_scope = scope === self2; + if (node instanceof AST_SymbolFunarg && in_root_scope) { + map_add(var_defs_by_id, node.definition().id, node); + } + if (node instanceof AST_Definitions && in_root_scope) { + const in_export = tw.parent() instanceof AST_Export; + node.definitions.forEach(function(def) { + if (def.name instanceof AST_SymbolVar) { + map_add(var_defs_by_id, def.name.definition().id, def); + } + if (in_export || !drop_vars) { + walk(def.name, (node2) => { + if (node2 instanceof AST_SymbolDeclaration) { + const def2 = node2.definition(); + if (def2.global) { + in_use_ids.set(def2.id, def2); + } + } + }); + } + if (def.name instanceof AST_Destructuring) { + def.walk(tw); + } + if (def.name instanceof AST_SymbolDeclaration && def.value) { + var node_def2 = def.name.definition(); + map_add(initializations, node_def2.id, def.value); + if (!node_def2.chained && def.name.fixed_value() === def.value) { + fixed_ids.set(node_def2.id, def); + } + if (def.value.has_side_effects(compressor)) { + def.value.walk(tw); + } + } + }); + return true; + } + return scan_ref_scoped(node, descend); + }); + self2.walk(tw); + tw = new TreeWalker(scan_ref_scoped); + in_use_ids.forEach(function(def) { + var init = initializations.get(def.id); + if (init) + init.forEach(function(init2) { + init2.walk(tw); + }); + }); + var tt = new TreeTransformer(function before(node, descend, in_list) { + var parent = tt.parent(); + if (drop_vars) { + const sym2 = assign_as_unused(node); + if (sym2 instanceof AST_SymbolRef) { + var def = sym2.definition(); + var in_use = in_use_ids.has(def.id); + if (node instanceof AST_Assign) { + if (!in_use || fixed_ids.has(def.id) && fixed_ids.get(def.id) !== node) { + return maintain_this_binding(parent, node, node.right.transform(tt)); + } + } else if (!in_use) { + return in_list ? MAP.skip : make_node(AST_Number, node, { value: 0 }); + } + } + } + if (scope !== self2) + return; + var def; + if (node.name && (node instanceof AST_ClassExpression && !keep_name(compressor.option("keep_classnames"), (def = node.name.definition()).name) || node instanceof AST_Function && !keep_name(compressor.option("keep_fnames"), (def = node.name.definition()).name))) { + if (!in_use_ids.has(def.id) || def.orig.length > 1) + node.name = null; + } + if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) { + var trim2 = !compressor.option("keep_fargs"); + for (var a = node.argnames, i = a.length; --i >= 0; ) { + var sym = a[i]; + if (sym instanceof AST_Expansion) { + sym = sym.expression; + } + if (sym instanceof AST_DefaultAssign) { + sym = sym.left; + } + if (!(sym instanceof AST_Destructuring) && !in_use_ids.has(sym.definition().id)) { + set_flag(sym, UNUSED); + if (trim2) { + a.pop(); + } + } else { + trim2 = false; + } + } + } + if (node instanceof AST_DefClass && node !== self2) { + const def2 = node.name.definition(); + descend(node, this); + const keep_class = def2.global && !drop_funcs || in_use_ids.has(def2.id); + if (!keep_class) { + const kept = node.drop_side_effect_free(compressor); + if (kept == null) { + def2.eliminated++; + return in_list ? MAP.skip : make_node(AST_EmptyStatement, node); + } + return kept; + } + return node; + } + if (node instanceof AST_Defun && node !== self2) { + const def2 = node.name.definition(); + const keep = def2.global && !drop_funcs || in_use_ids.has(def2.id); + if (!keep) { + def2.eliminated++; + return in_list ? MAP.skip : make_node(AST_EmptyStatement, node); + } + } + if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) { + var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var); + var body = [], head = [], tail = []; + var side_effects = []; + node.definitions.forEach(function(def2) { + if (def2.value) + def2.value = def2.value.transform(tt); + var is_destructure = def2.name instanceof AST_Destructuring; + var sym2 = is_destructure ? new SymbolDef(null, { name: "" }) : def2.name.definition(); + if (drop_block && sym2.global) + return tail.push(def2); + if (!(drop_vars || drop_block) || is_destructure && (def2.name.names.length || def2.name.is_array || compressor.option("pure_getters") != true) || in_use_ids.has(sym2.id)) { + if (def2.value && fixed_ids.has(sym2.id) && fixed_ids.get(sym2.id) !== def2) { + def2.value = def2.value.drop_side_effect_free(compressor); + } + if (def2.name instanceof AST_SymbolVar) { + var var_defs = var_defs_by_id.get(sym2.id); + if (var_defs.length > 1 && (!def2.value || sym2.orig.indexOf(def2.name) > sym2.eliminated)) { + if (def2.value) { + var ref = make_node(AST_SymbolRef, def2.name, def2.name); + sym2.references.push(ref); + var assign = make_node(AST_Assign, def2, { + operator: "=", + logical: false, + left: ref, + right: def2.value + }); + if (fixed_ids.get(sym2.id) === def2) { + fixed_ids.set(sym2.id, assign); + } + side_effects.push(assign.transform(tt)); + } + remove2(var_defs, def2); + sym2.eliminated++; + return; + } + } + if (def2.value) { + if (side_effects.length > 0) { + if (tail.length > 0) { + side_effects.push(def2.value); + def2.value = make_sequence(def2.value, side_effects); + } else { + body.push(make_node(AST_SimpleStatement, node, { + body: make_sequence(node, side_effects) + })); + } + side_effects = []; + } + tail.push(def2); + } else { + head.push(def2); + } + } else if (sym2.orig[0] instanceof AST_SymbolCatch) { + var value = def2.value && def2.value.drop_side_effect_free(compressor); + if (value) + side_effects.push(value); + def2.value = null; + head.push(def2); + } else { + var value = def2.value && def2.value.drop_side_effect_free(compressor); + if (value) { + side_effects.push(value); + } + sym2.eliminated++; + } + }); + if (head.length > 0 || tail.length > 0) { + node.definitions = head.concat(tail); + body.push(node); + } + if (side_effects.length > 0) { + body.push(make_node(AST_SimpleStatement, node, { + body: make_sequence(node, side_effects) + })); + } + switch (body.length) { + case 0: + return in_list ? MAP.skip : make_node(AST_EmptyStatement, node); + case 1: + return body[0]; + default: + return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, { body }); + } + } + if (node instanceof AST_For) { + descend(node, this); + var block; + if (node.init instanceof AST_BlockStatement) { + block = node.init; + node.init = block.body.pop(); + block.body.push(node); + } + if (node.init instanceof AST_SimpleStatement) { + node.init = node.init.body; + } else if (is_empty(node.init)) { + node.init = null; + } + return !block ? node : in_list ? MAP.splice(block.body) : block; + } + if (node instanceof AST_LabeledStatement && node.body instanceof AST_For) { + descend(node, this); + if (node.body instanceof AST_BlockStatement) { + var block = node.body; + node.body = block.body.pop(); + block.body.push(node); + return in_list ? MAP.splice(block.body) : block; + } + return node; + } + if (node instanceof AST_BlockStatement) { + descend(node, this); + if (in_list && node.body.every(can_be_evicted_from_block)) { + return MAP.splice(node.body); + } + return node; + } + if (node instanceof AST_Scope && !(node instanceof AST_ClassStaticBlock)) { + const save_scope = scope; + scope = node; + descend(node, this); + scope = save_scope; + return node; + } + }); + self2.transform(tt); + function scan_ref_scoped(node, descend) { + var node_def; + const sym = assign_as_unused(node); + if (sym instanceof AST_SymbolRef && !is_ref_of(node.left, AST_SymbolBlockDeclaration) && self2.variables.get(sym.name) === (node_def = sym.definition())) { + if (node instanceof AST_Assign) { + node.right.walk(tw); + if (!node_def.chained && node.left.fixed_value() === node.right) { + fixed_ids.set(node_def.id, node); + } + } + return true; + } + if (node instanceof AST_SymbolRef) { + node_def = node.definition(); + if (!in_use_ids.has(node_def.id)) { + in_use_ids.set(node_def.id, node_def); + if (node_def.orig[0] instanceof AST_SymbolCatch) { + const redef = node_def.scope.is_block_scope() && node_def.scope.get_defun_scope().variables.get(node_def.name); + if (redef) + in_use_ids.set(redef.id, redef); + } + } + return true; + } + if (node instanceof AST_Class) { + descend(); + return true; + } + if (node instanceof AST_Scope && !(node instanceof AST_ClassStaticBlock)) { + var save_scope = scope; + scope = node; + descend(); + scope = save_scope; + return true; + } + } + }); + function def_reduce_vars(node, func) { + node.DEFMETHOD("reduce_vars", func); + } + def_reduce_vars(AST_Node, noop); + function reset_def(compressor, def) { + def.assignments = 0; + def.chained = false; + def.direct_access = false; + def.escaped = 0; + def.recursive_refs = 0; + def.references = []; + def.single_use = void 0; + if (def.scope.pinned() || def.orig[0] instanceof AST_SymbolFunarg && def.scope.uses_arguments) { + def.fixed = false; + } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) { + def.fixed = def.init; + } else { + def.fixed = false; + } + } + function reset_variables(tw, compressor, node) { + node.variables.forEach(function(def) { + reset_def(compressor, def); + if (def.fixed === null) { + tw.defs_to_safe_ids.set(def.id, tw.safe_ids); + mark(tw, def, true); + } else if (def.fixed) { + tw.loop_ids.set(def.id, tw.in_loop); + mark(tw, def, true); + } + }); + } + function reset_block_variables(compressor, node) { + if (node.block_scope) + node.block_scope.variables.forEach((def) => { + reset_def(compressor, def); + }); + } + function push(tw) { + tw.safe_ids = Object.create(tw.safe_ids); + } + function pop(tw) { + tw.safe_ids = Object.getPrototypeOf(tw.safe_ids); + } + function mark(tw, def, safe) { + tw.safe_ids[def.id] = safe; + } + function safe_to_read(tw, def) { + if (def.single_use == "m") + return false; + if (tw.safe_ids[def.id]) { + if (def.fixed == null) { + var orig = def.orig[0]; + if (orig instanceof AST_SymbolFunarg || orig.name == "arguments") + return false; + def.fixed = make_node(AST_Undefined, orig); + } + return true; + } + return def.fixed instanceof AST_Defun; + } + function safe_to_assign(tw, def, scope, value) { + if (def.fixed === void 0) + return true; + let def_safe_ids; + if (def.fixed === null && (def_safe_ids = tw.defs_to_safe_ids.get(def.id))) { + def_safe_ids[def.id] = false; + tw.defs_to_safe_ids.delete(def.id); + return true; + } + if (!HOP(tw.safe_ids, def.id)) + return false; + if (!safe_to_read(tw, def)) + return false; + if (def.fixed === false) + return false; + if (def.fixed != null && (!value || def.references.length > def.assignments)) + return false; + if (def.fixed instanceof AST_Defun) { + return value instanceof AST_Node && def.fixed.parent_scope === scope; + } + return def.orig.every((sym) => { + return !(sym instanceof AST_SymbolConst || sym instanceof AST_SymbolDefun || sym instanceof AST_SymbolLambda); + }); + } + function ref_once(tw, compressor, def) { + return compressor.option("unused") && !def.scope.pinned() && def.references.length - def.recursive_refs == 1 && tw.loop_ids.get(def.id) === tw.in_loop; + } + function is_immutable(value) { + if (!value) + return false; + return value.is_constant() || value instanceof AST_Lambda || value instanceof AST_This; + } + function mark_escaped(tw, d, scope, node, value, level = 0, depth = 1) { + var parent = tw.parent(level); + if (value) { + if (value.is_constant()) + return; + if (value instanceof AST_ClassExpression) + return; + } + if (parent instanceof AST_Assign && (parent.operator === "=" || parent.logical) && node === parent.right || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New) || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope || parent instanceof AST_VarDef && node === parent.value || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope) { + if (depth > 1 && !(value && value.is_constant_expression(scope))) + depth = 1; + if (!d.escaped || d.escaped > depth) + d.escaped = depth; + return; + } else if (parent instanceof AST_Array || parent instanceof AST_Await || parent instanceof AST_Binary && lazy_op.has(parent.operator) || parent instanceof AST_Conditional && node !== parent.condition || parent instanceof AST_Expansion || parent instanceof AST_Sequence && node === parent.tail_node()) { + mark_escaped(tw, d, scope, parent, parent, level + 1, depth); + } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) { + var obj = tw.parent(level + 1); + mark_escaped(tw, d, scope, obj, obj, level + 2, depth); + } else if (parent instanceof AST_PropAccess && node === parent.expression) { + value = read_property(value, parent.property); + mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1); + if (value) + return; + } + if (level > 0) + return; + if (parent instanceof AST_Sequence && node !== parent.tail_node()) + return; + if (parent instanceof AST_SimpleStatement) + return; + d.direct_access = true; + } + const suppress = (node) => walk(node, (node2) => { + if (!(node2 instanceof AST_Symbol)) + return; + var d = node2.definition(); + if (!d) + return; + if (node2 instanceof AST_SymbolRef) + d.references.push(node2); + d.fixed = false; + }); + def_reduce_vars(AST_Accessor, function(tw, descend, compressor) { + push(tw); + reset_variables(tw, compressor, this); + descend(); + pop(tw); + return true; + }); + def_reduce_vars(AST_Assign, function(tw, descend, compressor) { + var node = this; + if (node.left instanceof AST_Destructuring) { + suppress(node.left); + return; + } + const finish_walk = () => { + if (node.logical) { + node.left.walk(tw); + push(tw); + node.right.walk(tw); + pop(tw); + return true; + } + }; + var sym = node.left; + if (!(sym instanceof AST_SymbolRef)) + return finish_walk(); + var def = sym.definition(); + var safe = safe_to_assign(tw, def, sym.scope, node.right); + def.assignments++; + if (!safe) + return finish_walk(); + var fixed = def.fixed; + if (!fixed && node.operator != "=" && !node.logical) + return finish_walk(); + var eq = node.operator == "="; + var value = eq ? node.right : node; + if (is_modified(compressor, tw, node, value, 0)) + return finish_walk(); + def.references.push(sym); + if (!node.logical) { + if (!eq) + def.chained = true; + def.fixed = eq ? function() { + return node.right; + } : function() { + return make_node(AST_Binary, node, { + operator: node.operator.slice(0, -1), + left: fixed instanceof AST_Node ? fixed : fixed(), + right: node.right + }); + }; + } + if (node.logical) { + mark(tw, def, false); + push(tw); + node.right.walk(tw); + pop(tw); + return true; + } + mark(tw, def, false); + node.right.walk(tw); + mark(tw, def, true); + mark_escaped(tw, def, sym.scope, node, value, 0, 1); + return true; + }); + def_reduce_vars(AST_Binary, function(tw) { + if (!lazy_op.has(this.operator)) + return; + this.left.walk(tw); + push(tw); + this.right.walk(tw); + pop(tw); + return true; + }); + def_reduce_vars(AST_Block, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + }); + def_reduce_vars(AST_Case, function(tw) { + push(tw); + this.expression.walk(tw); + pop(tw); + push(tw); + walk_body(this, tw); + pop(tw); + return true; + }); + def_reduce_vars(AST_Class, function(tw, descend) { + clear_flag(this, INLINED); + push(tw); + descend(); + pop(tw); + return true; + }); + def_reduce_vars(AST_ClassStaticBlock, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + }); + def_reduce_vars(AST_Conditional, function(tw) { + this.condition.walk(tw); + push(tw); + this.consequent.walk(tw); + pop(tw); + push(tw); + this.alternative.walk(tw); + pop(tw); + return true; + }); + def_reduce_vars(AST_Chain, function(tw, descend) { + const safe_ids = tw.safe_ids; + descend(); + tw.safe_ids = safe_ids; + return true; + }); + def_reduce_vars(AST_Call, function(tw) { + this.expression.walk(tw); + if (this.optional) { + push(tw); + } + for (const arg of this.args) + arg.walk(tw); + return true; + }); + def_reduce_vars(AST_PropAccess, function(tw) { + if (!this.optional) + return; + this.expression.walk(tw); + push(tw); + if (this.property instanceof AST_Node) + this.property.walk(tw); + return true; + }); + def_reduce_vars(AST_Default, function(tw, descend) { + push(tw); + descend(); + pop(tw); + return true; + }); + function mark_lambda(tw, descend, compressor) { + clear_flag(this, INLINED); + push(tw); + reset_variables(tw, compressor, this); + var iife; + if (!this.name && !this.uses_arguments && !this.pinned() && (iife = tw.parent()) instanceof AST_Call && iife.expression === this && !iife.args.some((arg) => arg instanceof AST_Expansion) && this.argnames.every((arg_name) => arg_name instanceof AST_Symbol)) { + this.argnames.forEach((arg, i) => { + if (!arg.definition) + return; + var d = arg.definition(); + if (d.orig.length > 1) + return; + if (d.fixed === void 0 && (!this.uses_arguments || tw.has_directive("use strict"))) { + d.fixed = function() { + return iife.args[i] || make_node(AST_Undefined, iife); + }; + tw.loop_ids.set(d.id, tw.in_loop); + mark(tw, d, true); + } else { + d.fixed = false; + } + }); + } + descend(); + pop(tw); + handle_defined_after_hoist(this); + return true; + } + function handle_defined_after_hoist(parent) { + const defuns = []; + walk(parent, (node) => { + if (node === parent) + return; + if (node instanceof AST_Defun) + defuns.push(node); + if (node instanceof AST_Scope || node instanceof AST_SimpleStatement) + return true; + }); + const symbols_of_interest = /* @__PURE__ */ new Set(); + const defuns_of_interest = /* @__PURE__ */ new Set(); + const potential_conflicts = []; + for (const defun of defuns) { + const fname_def = defun.name.definition(); + const found_self_ref_in_other_defuns = defuns.some((d) => d !== defun && d.enclosed.indexOf(fname_def) !== -1); + for (const def of defun.enclosed) { + if (def.fixed === false || def === fname_def || def.scope.get_defun_scope() !== parent) { + continue; + } + if (def.assignments === 0 && def.orig.length === 1 && def.orig[0] instanceof AST_SymbolDefun) { + continue; + } + if (found_self_ref_in_other_defuns) { + def.fixed = false; + continue; + } + potential_conflicts.push({ defun, def, fname_def }); + symbols_of_interest.add(def.id); + symbols_of_interest.add(fname_def.id); + defuns_of_interest.add(defun); + } + } + if (potential_conflicts.length) { + const found_symbols = []; + const found_symbol_writes = /* @__PURE__ */ new Set(); + const defun_ranges = /* @__PURE__ */ new Map(); + let tw; + parent.walk(tw = new TreeWalker((node, descend) => { + if (node instanceof AST_Defun && defuns_of_interest.has(node)) { + const start = found_symbols.length; + descend(); + const end = found_symbols.length; + defun_ranges.set(node, { start, end }); + return true; + } + if (node instanceof AST_Symbol && node.thedef) { + const id = node.definition().id; + if (symbols_of_interest.has(id)) { + if (node instanceof AST_SymbolDeclaration || is_lhs(node, tw)) { + found_symbol_writes.add(found_symbols.length); + } + found_symbols.push(id); + } + } + })); + for (const { def, defun, fname_def } of potential_conflicts) { + const defun_range = defun_ranges.get(defun); + const find = (sym_id, starting_at = 0, must_be_write = false) => { + let index = starting_at; + for (; ; ) { + index = found_symbols.indexOf(sym_id, index); + if (index === -1) { + break; + } else if (index >= defun_range.start && index < defun_range.end) { + index = defun_range.end; + continue; + } else if (must_be_write && !found_symbol_writes.has(index)) { + index++; + continue; + } else { + break; + } + } + return index; + }; + const read_defun_at = find(fname_def.id); + const wrote_def_at = find(def.id, read_defun_at + 1, true); + const wrote_def_after_reading_defun = read_defun_at != -1 && wrote_def_at != -1 && wrote_def_at > read_defun_at; + if (wrote_def_after_reading_defun) { + def.fixed = false; + } + } + } + } + def_reduce_vars(AST_Lambda, mark_lambda); + def_reduce_vars(AST_Do, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + const saved_loop = tw.in_loop; + tw.in_loop = this; + push(tw); + this.body.walk(tw); + if (has_break_or_continue(this)) { + pop(tw); + push(tw); + } + this.condition.walk(tw); + pop(tw); + tw.in_loop = saved_loop; + return true; + }); + def_reduce_vars(AST_For, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + if (this.init) + this.init.walk(tw); + const saved_loop = tw.in_loop; + tw.in_loop = this; + push(tw); + if (this.condition) + this.condition.walk(tw); + this.body.walk(tw); + if (this.step) { + if (has_break_or_continue(this)) { + pop(tw); + push(tw); + } + this.step.walk(tw); + } + pop(tw); + tw.in_loop = saved_loop; + return true; + }); + def_reduce_vars(AST_ForIn, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + suppress(this.init); + this.object.walk(tw); + const saved_loop = tw.in_loop; + tw.in_loop = this; + push(tw); + this.body.walk(tw); + pop(tw); + tw.in_loop = saved_loop; + return true; + }); + def_reduce_vars(AST_If, function(tw) { + this.condition.walk(tw); + push(tw); + this.body.walk(tw); + pop(tw); + if (this.alternative) { + push(tw); + this.alternative.walk(tw); + pop(tw); + } + return true; + }); + def_reduce_vars(AST_LabeledStatement, function(tw) { + push(tw); + this.body.walk(tw); + pop(tw); + return true; + }); + def_reduce_vars(AST_SymbolCatch, function() { + this.definition().fixed = false; + }); + def_reduce_vars(AST_SymbolRef, function(tw, descend, compressor) { + var d = this.definition(); + d.references.push(this); + if (d.references.length == 1 && !d.fixed && d.orig[0] instanceof AST_SymbolDefun) { + tw.loop_ids.set(d.id, tw.in_loop); + } + var fixed_value; + if (d.fixed === void 0 || !safe_to_read(tw, d)) { + d.fixed = false; + } else if (d.fixed) { + fixed_value = this.fixed_value(); + if (fixed_value instanceof AST_Lambda && is_recursive_ref(tw, d)) { + d.recursive_refs++; + } else if (fixed_value && !compressor.exposed(d) && ref_once(tw, compressor, d)) { + d.single_use = fixed_value instanceof AST_Lambda && !fixed_value.pinned() || fixed_value instanceof AST_Class || d.scope === this.scope && fixed_value.is_constant_expression(); + } else { + d.single_use = false; + } + if (is_modified(compressor, tw, this, fixed_value, 0, is_immutable(fixed_value))) { + if (d.single_use) { + d.single_use = "m"; + } else { + d.fixed = false; + } + } + } + mark_escaped(tw, d, this.scope, this, fixed_value, 0, 1); + }); + def_reduce_vars(AST_Toplevel, function(tw, descend, compressor) { + this.globals.forEach(function(def) { + reset_def(compressor, def); + }); + reset_variables(tw, compressor, this); + descend(); + handle_defined_after_hoist(this); + return true; + }); + def_reduce_vars(AST_Try, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + push(tw); + this.body.walk(tw); + pop(tw); + if (this.bcatch) { + push(tw); + this.bcatch.walk(tw); + pop(tw); + } + if (this.bfinally) + this.bfinally.walk(tw); + return true; + }); + def_reduce_vars(AST_Unary, function(tw) { + var node = this; + if (node.operator !== "++" && node.operator !== "--") + return; + var exp = node.expression; + if (!(exp instanceof AST_SymbolRef)) + return; + var def = exp.definition(); + var safe = safe_to_assign(tw, def, exp.scope, true); + def.assignments++; + if (!safe) + return; + var fixed = def.fixed; + if (!fixed) + return; + def.references.push(exp); + def.chained = true; + def.fixed = function() { + return make_node(AST_Binary, node, { + operator: node.operator.slice(0, -1), + left: make_node(AST_UnaryPrefix, node, { + operator: "+", + expression: fixed instanceof AST_Node ? fixed : fixed() + }), + right: make_node(AST_Number, node, { + value: 1 + }) + }); + }; + mark(tw, def, true); + return true; + }); + def_reduce_vars(AST_VarDef, function(tw, descend) { + var node = this; + if (node.name instanceof AST_Destructuring) { + suppress(node.name); + return; + } + var d = node.name.definition(); + if (node.value) { + if (safe_to_assign(tw, d, node.name.scope, node.value)) { + d.fixed = function() { + return node.value; + }; + tw.loop_ids.set(d.id, tw.in_loop); + mark(tw, d, false); + descend(); + mark(tw, d, true); + return true; + } else { + d.fixed = false; + } + } + }); + def_reduce_vars(AST_While, function(tw, descend, compressor) { + reset_block_variables(compressor, this); + const saved_loop = tw.in_loop; + tw.in_loop = this; + push(tw); + descend(); + pop(tw); + tw.in_loop = saved_loop; + return true; + }); + function loop_body(x) { + if (x instanceof AST_IterationStatement) { + return x.body instanceof AST_BlockStatement ? x.body : x; + } + return x; + } + function is_lhs_read_only(lhs) { + if (lhs instanceof AST_This) + return true; + if (lhs instanceof AST_SymbolRef) + return lhs.definition().orig[0] instanceof AST_SymbolLambda; + if (lhs instanceof AST_PropAccess) { + lhs = lhs.expression; + if (lhs instanceof AST_SymbolRef) { + if (lhs.is_immutable()) + return false; + lhs = lhs.fixed_value(); + } + if (!lhs) + return true; + if (lhs instanceof AST_RegExp) + return false; + if (lhs instanceof AST_Constant) + return true; + return is_lhs_read_only(lhs); + } + return false; + } + function remove_initializers(var_statement) { + var decls = []; + var_statement.definitions.forEach(function(def) { + if (def.name instanceof AST_SymbolDeclaration) { + def.value = null; + decls.push(def); + } else { + def.declarations_as_names().forEach((name) => { + decls.push(make_node(AST_VarDef, def, { + name, + value: null + })); + }); + } + }); + return decls.length ? make_node(AST_Var, var_statement, { definitions: decls }) : null; + } + function trim_unreachable_code(compressor, stat, target) { + walk(stat, (node) => { + if (node instanceof AST_Var) { + const no_initializers = remove_initializers(node); + if (no_initializers) + target.push(no_initializers); + return true; + } + if (node instanceof AST_Defun && (node === stat || !compressor.has_directive("use strict"))) { + target.push(node === stat ? node : make_node(AST_Var, node, { + definitions: [ + make_node(AST_VarDef, node, { + name: make_node(AST_SymbolVar, node.name, node.name), + value: null + }) + ] + })); + return true; + } + if (node instanceof AST_Export || node instanceof AST_Import) { + target.push(node); + return true; + } + if (node instanceof AST_Scope) { + return true; + } + }); + } + function tighten_body(statements, compressor) { + const nearest_scope = compressor.find_scope(); + const defun_scope = nearest_scope.get_defun_scope(); + const { in_loop, in_try } = find_loop_scope_try(); + var CHANGED, max_iter = 10; + do { + CHANGED = false; + eliminate_spurious_blocks(statements); + if (compressor.option("dead_code")) { + eliminate_dead_code(statements, compressor); + } + if (compressor.option("if_return")) { + handle_if_return(statements, compressor); + } + if (compressor.sequences_limit > 0) { + sequencesize(statements, compressor); + sequencesize_2(statements, compressor); + } + if (compressor.option("join_vars")) { + join_consecutive_vars(statements); + } + if (compressor.option("collapse_vars")) { + collapse(statements, compressor); + } + } while (CHANGED && max_iter-- > 0); + function find_loop_scope_try() { + var node = compressor.self(), level = 0, in_loop2 = false, in_try2 = false; + do { + if (node instanceof AST_IterationStatement) { + in_loop2 = true; + } else if (node instanceof AST_Scope) { + break; + } else if (node instanceof AST_TryBlock) { + in_try2 = true; + } + } while (node = compressor.parent(level++)); + return { in_loop: in_loop2, in_try: in_try2 }; + } + function collapse(statements2, compressor2) { + if (nearest_scope.pinned() || defun_scope.pinned()) + return statements2; + var args; + var candidates = []; + var stat_index = statements2.length; + var scanner = new TreeTransformer(function(node) { + if (abort) + return node; + if (!hit) { + if (node !== hit_stack[hit_index]) + return node; + hit_index++; + if (hit_index < hit_stack.length) + return handle_custom_scan_order(node); + hit = true; + stop_after = find_stop(node, 0); + if (stop_after === node) + abort = true; + return node; + } + var parent = scanner.parent(); + if (node instanceof AST_Assign && (node.logical || node.operator != "=" && lhs.equivalent_to(node.left)) || node instanceof AST_Await || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression) || (node instanceof AST_Call || node instanceof AST_PropAccess) && node.optional || node instanceof AST_Debugger || node instanceof AST_Destructuring || node instanceof AST_Expansion && node.expression instanceof AST_Symbol && (node.expression instanceof AST_This || node.expression.definition().references.length > 1) || node instanceof AST_IterationStatement && !(node instanceof AST_For) || node instanceof AST_LoopControl || node instanceof AST_Try || node instanceof AST_With || node instanceof AST_Yield || node instanceof AST_Export || node instanceof AST_Class || parent instanceof AST_For && node !== parent.init || !replace_all && (node instanceof AST_SymbolRef && !node.is_declared(compressor2) && !pure_prop_access_globals.has(node)) || node instanceof AST_SymbolRef && parent instanceof AST_Call && has_annotation(parent, _NOINLINE)) { + abort = true; + return node; + } + if (!stop_if_hit && (!lhs_local || !replace_all) && (parent instanceof AST_Binary && lazy_op.has(parent.operator) && parent.left !== node || parent instanceof AST_Conditional && parent.condition !== node || parent instanceof AST_If && parent.condition !== node)) { + stop_if_hit = parent; + } + if (can_replace && !(node instanceof AST_SymbolDeclaration) && lhs.equivalent_to(node) && !shadows(scanner.find_scope() || nearest_scope, lvalues)) { + if (stop_if_hit) { + abort = true; + return node; + } + if (is_lhs(node, parent)) { + if (value_def) + replaced++; + return node; + } else { + replaced++; + if (value_def && candidate instanceof AST_VarDef) + return node; + } + CHANGED = abort = true; + if (candidate instanceof AST_UnaryPostfix) { + return make_node(AST_UnaryPrefix, candidate, candidate); + } + if (candidate instanceof AST_VarDef) { + var def2 = candidate.name.definition(); + var value = candidate.value; + if (def2.references.length - def2.replaced == 1 && !compressor2.exposed(def2)) { + def2.replaced++; + if (funarg && is_identifier_atom(value)) { + return value.transform(compressor2); + } else { + return maintain_this_binding(parent, node, value); + } + } + return make_node(AST_Assign, candidate, { + operator: "=", + logical: false, + left: make_node(AST_SymbolRef, candidate.name, candidate.name), + right: value + }); + } + clear_flag(candidate, WRITE_ONLY); + return candidate; + } + var sym; + if (node instanceof AST_Call || node instanceof AST_Exit && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs)) || node instanceof AST_PropAccess && (side_effects || node.expression.may_throw_on_access(compressor2)) || node instanceof AST_SymbolRef && (lvalues.has(node.name) && lvalues.get(node.name).modified || side_effects && may_modify(node)) || node instanceof AST_VarDef && node.value && (lvalues.has(node.name.name) || side_effects && may_modify(node.name)) || (sym = is_lhs(node.left, node)) && (sym instanceof AST_PropAccess || lvalues.has(sym.name)) || may_throw && (in_try ? node.has_side_effects(compressor2) : side_effects_external(node))) { + stop_after = node; + if (node instanceof AST_Scope) + abort = true; + } + return handle_custom_scan_order(node); + }, function(node) { + if (abort) + return; + if (stop_after === node) + abort = true; + if (stop_if_hit === node) + stop_if_hit = null; + }); + var multi_replacer = new TreeTransformer(function(node) { + if (abort) + return node; + if (!hit) { + if (node !== hit_stack[hit_index]) + return node; + hit_index++; + if (hit_index < hit_stack.length) + return; + hit = true; + return node; + } + if (node instanceof AST_SymbolRef && node.name == def.name) { + if (!--replaced) + abort = true; + if (is_lhs(node, multi_replacer.parent())) + return node; + def.replaced++; + value_def.replaced--; + return candidate.value; + } + if (node instanceof AST_Default || node instanceof AST_Scope) + return node; + }); + while (--stat_index >= 0) { + if (stat_index == 0 && compressor2.option("unused")) + extract_args(); + var hit_stack = []; + extract_candidates(statements2[stat_index]); + while (candidates.length > 0) { + hit_stack = candidates.pop(); + var hit_index = 0; + var candidate = hit_stack[hit_stack.length - 1]; + var value_def = null; + var stop_after = null; + var stop_if_hit = null; + var lhs = get_lhs(candidate); + if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor2)) + continue; + var lvalues = get_lvalues(candidate); + var lhs_local = is_lhs_local(lhs); + if (lhs instanceof AST_SymbolRef) { + lvalues.set(lhs.name, { def: lhs.definition(), modified: false }); + } + var side_effects = value_has_side_effects(candidate); + var replace_all = replace_all_symbols(); + var may_throw = candidate.may_throw(compressor2); + var funarg = candidate.name instanceof AST_SymbolFunarg; + var hit = funarg; + var abort = false, replaced = 0, can_replace = !args || !hit; + if (!can_replace) { + for (let j = compressor2.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) { + args[j].transform(scanner); + } + can_replace = true; + } + for (var i = stat_index; !abort && i < statements2.length; i++) { + statements2[i].transform(scanner); + } + if (value_def) { + var def = candidate.name.definition(); + if (abort && def.references.length - def.replaced > replaced) + replaced = false; + else { + abort = false; + hit_index = 0; + hit = funarg; + for (var i = stat_index; !abort && i < statements2.length; i++) { + statements2[i].transform(multi_replacer); + } + value_def.single_use = false; + } + } + if (replaced && !remove_candidate(candidate)) + statements2.splice(stat_index, 1); + } + } + function handle_custom_scan_order(node) { + if (node instanceof AST_Scope) + return node; + if (node instanceof AST_Switch) { + node.expression = node.expression.transform(scanner); + for (var i2 = 0, len = node.body.length; !abort && i2 < len; i2++) { + var branch = node.body[i2]; + if (branch instanceof AST_Case) { + if (!hit) { + if (branch !== hit_stack[hit_index]) + continue; + hit_index++; + } + branch.expression = branch.expression.transform(scanner); + if (!replace_all) + break; + } + } + abort = true; + return node; + } + } + function redefined_within_scope(def2, scope) { + if (def2.global) + return false; + let cur_scope = def2.scope; + while (cur_scope && cur_scope !== scope) { + if (cur_scope.variables.has(def2.name)) { + return true; + } + cur_scope = cur_scope.parent_scope; + } + return false; + } + function has_overlapping_symbol(fn, arg, fn_strict) { + var found = false, scan_this = !(fn instanceof AST_Arrow); + arg.walk(new TreeWalker(function(node, descend) { + if (found) + return true; + if (node instanceof AST_SymbolRef && (fn.variables.has(node.name) || redefined_within_scope(node.definition(), fn))) { + var s = node.definition().scope; + if (s !== defun_scope) + while (s = s.parent_scope) { + if (s === defun_scope) + return true; + } + return found = true; + } + if ((fn_strict || scan_this) && node instanceof AST_This) { + return found = true; + } + if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) { + var prev = scan_this; + scan_this = false; + descend(); + scan_this = prev; + return true; + } + })); + return found; + } + function extract_args() { + var iife, fn = compressor2.self(); + if (is_func_expr(fn) && !fn.name && !fn.uses_arguments && !fn.pinned() && (iife = compressor2.parent()) instanceof AST_Call && iife.expression === fn && iife.args.every((arg2) => !(arg2 instanceof AST_Expansion))) { + var fn_strict = compressor2.has_directive("use strict"); + if (fn_strict && !member(fn_strict, fn.body)) + fn_strict = false; + var len = fn.argnames.length; + args = iife.args.slice(len); + var names = /* @__PURE__ */ new Set(); + for (var i2 = len; --i2 >= 0; ) { + var sym = fn.argnames[i2]; + var arg = iife.args[i2]; + const def2 = sym.definition && sym.definition(); + const is_reassigned = def2 && def2.orig.length > 1; + if (is_reassigned) + continue; + args.unshift(make_node(AST_VarDef, sym, { + name: sym, + value: arg + })); + if (names.has(sym.name)) + continue; + names.add(sym.name); + if (sym instanceof AST_Expansion) { + var elements = iife.args.slice(i2); + if (elements.every((arg2) => !has_overlapping_symbol(fn, arg2, fn_strict))) { + candidates.unshift([make_node(AST_VarDef, sym, { + name: sym.expression, + value: make_node(AST_Array, iife, { + elements + }) + })]); + } + } else { + if (!arg) { + arg = make_node(AST_Undefined, sym).transform(compressor2); + } else if (arg instanceof AST_Lambda && arg.pinned() || has_overlapping_symbol(fn, arg, fn_strict)) { + arg = null; + } + if (arg) + candidates.unshift([make_node(AST_VarDef, sym, { + name: sym, + value: arg + })]); + } + } + } + } + function extract_candidates(expr) { + hit_stack.push(expr); + if (expr instanceof AST_Assign) { + if (!expr.left.has_side_effects(compressor2) && !(expr.right instanceof AST_Chain)) { + candidates.push(hit_stack.slice()); + } + extract_candidates(expr.right); + } else if (expr instanceof AST_Binary) { + extract_candidates(expr.left); + extract_candidates(expr.right); + } else if (expr instanceof AST_Call && !has_annotation(expr, _NOINLINE)) { + extract_candidates(expr.expression); + expr.args.forEach(extract_candidates); + } else if (expr instanceof AST_Case) { + extract_candidates(expr.expression); + } else if (expr instanceof AST_Conditional) { + extract_candidates(expr.condition); + extract_candidates(expr.consequent); + extract_candidates(expr.alternative); + } else if (expr instanceof AST_Definitions) { + var len = expr.definitions.length; + var i2 = len - 200; + if (i2 < 0) + i2 = 0; + for (; i2 < len; i2++) { + extract_candidates(expr.definitions[i2]); + } + } else if (expr instanceof AST_DWLoop) { + extract_candidates(expr.condition); + if (!(expr.body instanceof AST_Block)) { + extract_candidates(expr.body); + } + } else if (expr instanceof AST_Exit) { + if (expr.value) + extract_candidates(expr.value); + } else if (expr instanceof AST_For) { + if (expr.init) + extract_candidates(expr.init); + if (expr.condition) + extract_candidates(expr.condition); + if (expr.step) + extract_candidates(expr.step); + if (!(expr.body instanceof AST_Block)) { + extract_candidates(expr.body); + } + } else if (expr instanceof AST_ForIn) { + extract_candidates(expr.object); + if (!(expr.body instanceof AST_Block)) { + extract_candidates(expr.body); + } + } else if (expr instanceof AST_If) { + extract_candidates(expr.condition); + if (!(expr.body instanceof AST_Block)) { + extract_candidates(expr.body); + } + if (expr.alternative && !(expr.alternative instanceof AST_Block)) { + extract_candidates(expr.alternative); + } + } else if (expr instanceof AST_Sequence) { + expr.expressions.forEach(extract_candidates); + } else if (expr instanceof AST_SimpleStatement) { + extract_candidates(expr.body); + } else if (expr instanceof AST_Switch) { + extract_candidates(expr.expression); + expr.body.forEach(extract_candidates); + } else if (expr instanceof AST_Unary) { + if (expr.operator == "++" || expr.operator == "--") { + candidates.push(hit_stack.slice()); + } + } else if (expr instanceof AST_VarDef) { + if (expr.value && !(expr.value instanceof AST_Chain)) { + candidates.push(hit_stack.slice()); + extract_candidates(expr.value); + } + } + hit_stack.pop(); + } + function find_stop(node, level, write_only) { + var parent = scanner.parent(level); + if (parent instanceof AST_Assign) { + if (write_only && !parent.logical && !(parent.left instanceof AST_PropAccess || lvalues.has(parent.left.name))) { + return find_stop(parent, level + 1, write_only); + } + return node; + } + if (parent instanceof AST_Binary) { + if (write_only && (!lazy_op.has(parent.operator) || parent.left === node)) { + return find_stop(parent, level + 1, write_only); + } + return node; + } + if (parent instanceof AST_Call) + return node; + if (parent instanceof AST_Case) + return node; + if (parent instanceof AST_Conditional) { + if (write_only && parent.condition === node) { + return find_stop(parent, level + 1, write_only); + } + return node; + } + if (parent instanceof AST_Definitions) { + return find_stop(parent, level + 1, true); + } + if (parent instanceof AST_Exit) { + return write_only ? find_stop(parent, level + 1, write_only) : node; + } + if (parent instanceof AST_If) { + if (write_only && parent.condition === node) { + return find_stop(parent, level + 1, write_only); + } + return node; + } + if (parent instanceof AST_IterationStatement) + return node; + if (parent instanceof AST_Sequence) { + return find_stop(parent, level + 1, parent.tail_node() !== node); + } + if (parent instanceof AST_SimpleStatement) { + return find_stop(parent, level + 1, true); + } + if (parent instanceof AST_Switch) + return node; + if (parent instanceof AST_VarDef) + return node; + return null; + } + function mangleable_var(var_def) { + var value = var_def.value; + if (!(value instanceof AST_SymbolRef)) + return; + if (value.name == "arguments") + return; + var def2 = value.definition(); + if (def2.undeclared) + return; + return value_def = def2; + } + function get_lhs(expr) { + if (expr instanceof AST_Assign && expr.logical) { + return false; + } else if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) { + var def2 = expr.name.definition(); + if (!member(expr.name, def2.orig)) + return; + var referenced = def2.references.length - def2.replaced; + if (!referenced) + return; + var declared = def2.orig.length - def2.eliminated; + if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg) || (referenced > 1 ? mangleable_var(expr) : !compressor2.exposed(def2))) { + return make_node(AST_SymbolRef, expr.name, expr.name); + } + } else { + const lhs2 = expr instanceof AST_Assign ? expr.left : expr.expression; + return !is_ref_of(lhs2, AST_SymbolConst) && !is_ref_of(lhs2, AST_SymbolLet) && lhs2; + } + } + function get_rvalue(expr) { + if (expr instanceof AST_Assign) { + return expr.right; + } else { + return expr.value; + } + } + function get_lvalues(expr) { + var lvalues2 = /* @__PURE__ */ new Map(); + if (expr instanceof AST_Unary) + return lvalues2; + var tw = new TreeWalker(function(node) { + var sym = node; + while (sym instanceof AST_PropAccess) + sym = sym.expression; + if (sym instanceof AST_SymbolRef) { + const prev = lvalues2.get(sym.name); + if (!prev || !prev.modified) { + lvalues2.set(sym.name, { + def: sym.definition(), + modified: is_modified(compressor2, tw, node, node, 0) + }); + } + } + }); + get_rvalue(expr).walk(tw); + return lvalues2; + } + function remove_candidate(expr) { + if (expr.name instanceof AST_SymbolFunarg) { + var iife = compressor2.parent(), argnames = compressor2.self().argnames; + var index = argnames.indexOf(expr.name); + if (index < 0) { + iife.args.length = Math.min(iife.args.length, argnames.length - 1); + } else { + var args2 = iife.args; + if (args2[index]) + args2[index] = make_node(AST_Number, args2[index], { + value: 0 + }); + } + return true; + } + var found = false; + return statements2[stat_index].transform(new TreeTransformer(function(node, descend, in_list) { + if (found) + return node; + if (node === expr || node.body === expr) { + found = true; + if (node instanceof AST_VarDef) { + node.value = node.name instanceof AST_SymbolConst ? make_node(AST_Undefined, node.value) : null; + return node; + } + return in_list ? MAP.skip : null; + } + }, function(node) { + if (node instanceof AST_Sequence) + switch (node.expressions.length) { + case 0: + return null; + case 1: + return node.expressions[0]; + } + })); + } + function is_lhs_local(lhs2) { + while (lhs2 instanceof AST_PropAccess) + lhs2 = lhs2.expression; + return lhs2 instanceof AST_SymbolRef && lhs2.definition().scope.get_defun_scope() === defun_scope && !(in_loop && (lvalues.has(lhs2.name) || candidate instanceof AST_Unary || candidate instanceof AST_Assign && !candidate.logical && candidate.operator != "=")); + } + function value_has_side_effects(expr) { + if (expr instanceof AST_Unary) + return unary_side_effects.has(expr.operator); + return get_rvalue(expr).has_side_effects(compressor2); + } + function replace_all_symbols() { + if (side_effects) + return false; + if (value_def) + return true; + if (lhs instanceof AST_SymbolRef) { + var def2 = lhs.definition(); + if (def2.references.length - def2.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) { + return true; + } + } + return false; + } + function may_modify(sym) { + if (!sym.definition) + return true; + var def2 = sym.definition(); + if (def2.orig.length == 1 && def2.orig[0] instanceof AST_SymbolDefun) + return false; + if (def2.scope.get_defun_scope() !== defun_scope) + return true; + return def2.references.some((ref) => ref.scope.get_defun_scope() !== defun_scope); + } + function side_effects_external(node, lhs2) { + if (node instanceof AST_Assign) + return side_effects_external(node.left, true); + if (node instanceof AST_Unary) + return side_effects_external(node.expression, true); + if (node instanceof AST_VarDef) + return node.value && side_effects_external(node.value); + if (lhs2) { + if (node instanceof AST_Dot) + return side_effects_external(node.expression, true); + if (node instanceof AST_Sub) + return side_effects_external(node.expression, true); + if (node instanceof AST_SymbolRef) + return node.definition().scope.get_defun_scope() !== defun_scope; + } + return false; + } + function shadows(my_scope, lvalues2) { + for (const { def: def2 } of lvalues2.values()) { + const looked_up = my_scope.find_variable(def2.name); + if (looked_up) { + if (looked_up === def2) + continue; + return true; + } + } + return false; + } + } + function eliminate_spurious_blocks(statements2) { + var seen_dirs = []; + for (var i = 0; i < statements2.length; ) { + var stat = statements2[i]; + if (stat instanceof AST_BlockStatement && stat.body.every(can_be_evicted_from_block)) { + CHANGED = true; + eliminate_spurious_blocks(stat.body); + statements2.splice(i, 1, ...stat.body); + i += stat.body.length; + } else if (stat instanceof AST_EmptyStatement) { + CHANGED = true; + statements2.splice(i, 1); + } else if (stat instanceof AST_Directive) { + if (seen_dirs.indexOf(stat.value) < 0) { + i++; + seen_dirs.push(stat.value); + } else { + CHANGED = true; + statements2.splice(i, 1); + } + } else + i++; + } + } + function handle_if_return(statements2, compressor2) { + var self2 = compressor2.self(); + var multiple_if_returns = has_multiple_if_returns(statements2); + var in_lambda = self2 instanceof AST_Lambda; + const iteration_start = Math.min(statements2.length, 500); + for (var i = iteration_start; --i >= 0; ) { + var stat = statements2[i]; + var j = next_index(i); + var next = statements2[j]; + if (in_lambda && !next && stat instanceof AST_Return) { + if (!stat.value) { + CHANGED = true; + statements2.splice(i, 1); + continue; + } + if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == "void") { + CHANGED = true; + statements2[i] = make_node(AST_SimpleStatement, stat, { + body: stat.value.expression + }); + continue; + } + } + if (stat instanceof AST_If) { + let ab, new_else; + ab = aborts(stat.body); + if (can_merge_flow(ab) && (new_else = as_statement_array_with_return(stat.body, ab))) { + if (ab.label) { + remove2(ab.label.thedef.references, ab); + } + CHANGED = true; + stat = stat.clone(); + stat.condition = stat.condition.negate(compressor2); + stat.body = make_node(AST_BlockStatement, stat, { + body: as_statement_array(stat.alternative).concat(extract_functions()) + }); + stat.alternative = make_node(AST_BlockStatement, stat, { + body: new_else + }); + statements2[i] = stat.transform(compressor2); + continue; + } + ab = aborts(stat.alternative); + if (can_merge_flow(ab) && (new_else = as_statement_array_with_return(stat.alternative, ab))) { + if (ab.label) { + remove2(ab.label.thedef.references, ab); + } + CHANGED = true; + stat = stat.clone(); + stat.body = make_node(AST_BlockStatement, stat.body, { + body: as_statement_array(stat.body).concat(extract_functions()) + }); + stat.alternative = make_node(AST_BlockStatement, stat.alternative, { + body: new_else + }); + statements2[i] = stat.transform(compressor2); + continue; + } + } + if (stat instanceof AST_If && stat.body instanceof AST_Return) { + var value = stat.body.value; + if (!value && !stat.alternative && (in_lambda && !next || next instanceof AST_Return && !next.value)) { + CHANGED = true; + statements2[i] = make_node(AST_SimpleStatement, stat.condition, { + body: stat.condition + }); + continue; + } + if (value && !stat.alternative && next instanceof AST_Return && next.value) { + CHANGED = true; + stat = stat.clone(); + stat.alternative = next; + statements2[i] = stat.transform(compressor2); + statements2.splice(j, 1); + continue; + } + if (value && !stat.alternative && (!next && in_lambda && multiple_if_returns || next instanceof AST_Return)) { + CHANGED = true; + stat = stat.clone(); + stat.alternative = next || make_node(AST_Return, stat, { + value: null + }); + statements2[i] = stat.transform(compressor2); + if (next) + statements2.splice(j, 1); + continue; + } + var prev = statements2[prev_index(i)]; + if (compressor2.option("sequences") && in_lambda && !stat.alternative && prev instanceof AST_If && prev.body instanceof AST_Return && next_index(j) == statements2.length && next instanceof AST_SimpleStatement) { + CHANGED = true; + stat = stat.clone(); + stat.alternative = make_node(AST_BlockStatement, next, { + body: [ + next, + make_node(AST_Return, next, { + value: null + }) + ] + }); + statements2[i] = stat.transform(compressor2); + statements2.splice(j, 1); + continue; + } + } + } + function has_multiple_if_returns(statements3) { + var n = 0; + for (var i2 = statements3.length; --i2 >= 0; ) { + var stat2 = statements3[i2]; + if (stat2 instanceof AST_If && stat2.body instanceof AST_Return) { + if (++n > 1) + return true; + } + } + return false; + } + function is_return_void(value2) { + return !value2 || value2 instanceof AST_UnaryPrefix && value2.operator == "void"; + } + function can_merge_flow(ab) { + if (!ab) + return false; + for (var j2 = i + 1, len = statements2.length; j2 < len; j2++) { + var stat2 = statements2[j2]; + if (stat2 instanceof AST_Const || stat2 instanceof AST_Let) + return false; + } + var lct = ab instanceof AST_LoopControl ? compressor2.loopcontrol_target(ab) : null; + return ab instanceof AST_Return && in_lambda && is_return_void(ab.value) || ab instanceof AST_Continue && self2 === loop_body(lct) || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self2 === lct; + } + function extract_functions() { + var tail = statements2.slice(i + 1); + statements2.length = i + 1; + return tail.filter(function(stat2) { + if (stat2 instanceof AST_Defun) { + statements2.push(stat2); + return false; + } + return true; + }); + } + function as_statement_array_with_return(node, ab) { + var body = as_statement_array(node); + if (ab !== body[body.length - 1]) { + return void 0; + } + body = body.slice(0, -1); + if (ab.value) { + body.push(make_node(AST_SimpleStatement, ab.value, { + body: ab.value.expression + })); + } + return body; + } + function next_index(i2) { + for (var j2 = i2 + 1, len = statements2.length; j2 < len; j2++) { + var stat2 = statements2[j2]; + if (!(stat2 instanceof AST_Var && declarations_only(stat2))) { + break; + } + } + return j2; + } + function prev_index(i2) { + for (var j2 = i2; --j2 >= 0; ) { + var stat2 = statements2[j2]; + if (!(stat2 instanceof AST_Var && declarations_only(stat2))) { + break; + } + } + return j2; + } + } + function eliminate_dead_code(statements2, compressor2) { + var has_quit; + var self2 = compressor2.self(); + for (var i = 0, n = 0, len = statements2.length; i < len; i++) { + var stat = statements2[i]; + if (stat instanceof AST_LoopControl) { + var lct = compressor2.loopcontrol_target(stat); + if (stat instanceof AST_Break && !(lct instanceof AST_IterationStatement) && loop_body(lct) === self2 || stat instanceof AST_Continue && loop_body(lct) === self2) { + if (stat.label) { + remove2(stat.label.thedef.references, stat); + } + } else { + statements2[n++] = stat; + } + } else { + statements2[n++] = stat; + } + if (aborts(stat)) { + has_quit = statements2.slice(i + 1); + break; + } + } + statements2.length = n; + CHANGED = n != len; + if (has_quit) + has_quit.forEach(function(stat2) { + trim_unreachable_code(compressor2, stat2, statements2); + }); + } + function declarations_only(node) { + return node.definitions.every((var_def) => !var_def.value); + } + function sequencesize(statements2, compressor2) { + if (statements2.length < 2) + return; + var seq = [], n = 0; + function push_seq() { + if (!seq.length) + return; + var body2 = make_sequence(seq[0], seq); + statements2[n++] = make_node(AST_SimpleStatement, body2, { body: body2 }); + seq = []; + } + for (var i = 0, len = statements2.length; i < len; i++) { + var stat = statements2[i]; + if (stat instanceof AST_SimpleStatement) { + if (seq.length >= compressor2.sequences_limit) + push_seq(); + var body = stat.body; + if (seq.length > 0) + body = body.drop_side_effect_free(compressor2); + if (body) + merge_sequence(seq, body); + } else if (stat instanceof AST_Definitions && declarations_only(stat) || stat instanceof AST_Defun) { + statements2[n++] = stat; + } else { + push_seq(); + statements2[n++] = stat; + } + } + push_seq(); + statements2.length = n; + if (n != len) + CHANGED = true; + } + function to_simple_statement(block, decls) { + if (!(block instanceof AST_BlockStatement)) + return block; + var stat = null; + for (var i = 0, len = block.body.length; i < len; i++) { + var line = block.body[i]; + if (line instanceof AST_Var && declarations_only(line)) { + decls.push(line); + } else if (stat || line instanceof AST_Const || line instanceof AST_Let) { + return false; + } else { + stat = line; + } + } + return stat; + } + function sequencesize_2(statements2, compressor2) { + function cons_seq(right) { + n--; + CHANGED = true; + var left = prev.body; + return make_sequence(left, [left, right]).transform(compressor2); + } + var n = 0, prev; + for (var i = 0; i < statements2.length; i++) { + var stat = statements2[i]; + if (prev) { + if (stat instanceof AST_Exit) { + stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor2)); + } else if (stat instanceof AST_For) { + if (!(stat.init instanceof AST_Definitions)) { + const abort = walk(prev.body, (node) => { + if (node instanceof AST_Scope) + return true; + if (node instanceof AST_Binary && node.operator === "in") { + return walk_abort; + } + }); + if (!abort) { + if (stat.init) + stat.init = cons_seq(stat.init); + else { + stat.init = prev.body; + n--; + CHANGED = true; + } + } + } + } else if (stat instanceof AST_ForIn) { + if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) { + stat.object = cons_seq(stat.object); + } + } else if (stat instanceof AST_If) { + stat.condition = cons_seq(stat.condition); + } else if (stat instanceof AST_Switch) { + stat.expression = cons_seq(stat.expression); + } else if (stat instanceof AST_With) { + stat.expression = cons_seq(stat.expression); + } + } + if (compressor2.option("conditionals") && stat instanceof AST_If) { + var decls = []; + var body = to_simple_statement(stat.body, decls); + var alt = to_simple_statement(stat.alternative, decls); + if (body !== false && alt !== false && decls.length > 0) { + var len = decls.length; + decls.push(make_node(AST_If, stat, { + condition: stat.condition, + body: body || make_node(AST_EmptyStatement, stat.body), + alternative: alt + })); + decls.unshift(n, 1); + [].splice.apply(statements2, decls); + i += len; + n += len + 1; + prev = null; + CHANGED = true; + continue; + } + } + statements2[n++] = stat; + prev = stat instanceof AST_SimpleStatement ? stat : null; + } + statements2.length = n; + } + function join_object_assignments(defn, body) { + if (!(defn instanceof AST_Definitions)) + return; + var def = defn.definitions[defn.definitions.length - 1]; + if (!(def.value instanceof AST_Object)) + return; + var exprs; + if (body instanceof AST_Assign && !body.logical) { + exprs = [body]; + } else if (body instanceof AST_Sequence) { + exprs = body.expressions.slice(); + } + if (!exprs) + return; + var trimmed = false; + do { + var node = exprs[0]; + if (!(node instanceof AST_Assign)) + break; + if (node.operator != "=") + break; + if (!(node.left instanceof AST_PropAccess)) + break; + var sym = node.left.expression; + if (!(sym instanceof AST_SymbolRef)) + break; + if (def.name.name != sym.name) + break; + if (!node.right.is_constant_expression(nearest_scope)) + break; + var prop = node.left.property; + if (prop instanceof AST_Node) { + prop = prop.evaluate(compressor); + } + if (prop instanceof AST_Node) + break; + prop = "" + prop; + var diff = compressor.option("ecma") < 2015 && compressor.has_directive("use strict") ? function(node2) { + return node2.key != prop && (node2.key && node2.key.name != prop); + } : function(node2) { + return node2.key && node2.key.name != prop; + }; + if (!def.value.properties.every(diff)) + break; + var p = def.value.properties.filter(function(p2) { + return p2.key === prop; + })[0]; + if (!p) { + def.value.properties.push(make_node(AST_ObjectKeyVal, node, { + key: prop, + value: node.right + })); + } else { + p.value = new AST_Sequence({ + start: p.start, + expressions: [p.value.clone(), node.right.clone()], + end: p.end + }); + } + exprs.shift(); + trimmed = true; + } while (exprs.length); + return trimmed && exprs; + } + function join_consecutive_vars(statements2) { + var defs; + for (var i = 0, j = -1, len = statements2.length; i < len; i++) { + var stat = statements2[i]; + var prev = statements2[j]; + if (stat instanceof AST_Definitions) { + if (prev && prev.TYPE == stat.TYPE) { + prev.definitions = prev.definitions.concat(stat.definitions); + CHANGED = true; + } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) { + defs.definitions = defs.definitions.concat(stat.definitions); + CHANGED = true; + } else { + statements2[++j] = stat; + defs = stat; + } + } else if (stat instanceof AST_Exit) { + stat.value = extract_object_assignments(stat.value); + } else if (stat instanceof AST_For) { + var exprs = join_object_assignments(prev, stat.init); + if (exprs) { + CHANGED = true; + stat.init = exprs.length ? make_sequence(stat.init, exprs) : null; + statements2[++j] = stat; + } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) { + if (stat.init) { + prev.definitions = prev.definitions.concat(stat.init.definitions); + } + stat.init = prev; + statements2[j] = stat; + CHANGED = true; + } else if (defs instanceof AST_Var && stat.init instanceof AST_Var && declarations_only(stat.init)) { + defs.definitions = defs.definitions.concat(stat.init.definitions); + stat.init = null; + statements2[++j] = stat; + CHANGED = true; + } else { + statements2[++j] = stat; + } + } else if (stat instanceof AST_ForIn) { + stat.object = extract_object_assignments(stat.object); + } else if (stat instanceof AST_If) { + stat.condition = extract_object_assignments(stat.condition); + } else if (stat instanceof AST_SimpleStatement) { + var exprs = join_object_assignments(prev, stat.body); + if (exprs) { + CHANGED = true; + if (!exprs.length) + continue; + stat.body = make_sequence(stat.body, exprs); + } + statements2[++j] = stat; + } else if (stat instanceof AST_Switch) { + stat.expression = extract_object_assignments(stat.expression); + } else if (stat instanceof AST_With) { + stat.expression = extract_object_assignments(stat.expression); + } else { + statements2[++j] = stat; + } + } + statements2.length = j + 1; + function extract_object_assignments(value) { + statements2[++j] = stat; + var exprs2 = join_object_assignments(prev, value); + if (exprs2) { + CHANGED = true; + if (exprs2.length) { + return make_sequence(value, exprs2); + } else if (value instanceof AST_Sequence) { + return value.tail_node().left; + } else { + return value.left; + } + } + return value; + } + } + } + function within_array_or_object_literal(compressor) { + var node, level = 0; + while (node = compressor.parent(level++)) { + if (node instanceof AST_Statement) + return false; + if (node instanceof AST_Array || node instanceof AST_ObjectKeyVal || node instanceof AST_Object) { + return true; + } + } + return false; + } + function scope_encloses_variables_in_this_scope(scope, pulled_scope) { + for (const enclosed of pulled_scope.enclosed) { + if (pulled_scope.variables.has(enclosed.name)) { + continue; + } + const looked_up = scope.find_variable(enclosed.name); + if (looked_up) { + if (looked_up === enclosed) + continue; + return true; + } + } + return false; + } + function is_const_symbol_short_than_init_value(def, fixed_value) { + if (def.orig.length === 1 && fixed_value) { + const init_value_length = fixed_value.size(); + const identifer_length = def.name.length; + return init_value_length > identifer_length; + } + return true; + } + function inline_into_symbolref(self2, compressor) { + const parent = compressor.parent(); + const def = self2.definition(); + const nearest_scope = compressor.find_scope(); + let fixed = self2.fixed_value(); + if (compressor.top_retain && def.global && compressor.top_retain(def) && is_const_symbol_short_than_init_value(def, fixed)) { + def.fixed = false; + def.single_use = false; + return self2; + } + let single_use = def.single_use && !(parent instanceof AST_Call && parent.is_callee_pure(compressor) || has_annotation(parent, _NOINLINE)) && !(parent instanceof AST_Export && fixed instanceof AST_Lambda && fixed.name); + if (single_use && fixed instanceof AST_Node) { + single_use = !fixed.has_side_effects(compressor) && !fixed.may_throw(compressor); + } + if (fixed instanceof AST_Class && def.scope !== self2.scope) { + return self2; + } + if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) { + if (retain_top_func(fixed, compressor)) { + single_use = false; + } else if (def.scope !== self2.scope && (def.escaped == 1 || has_flag(fixed, INLINED) || within_array_or_object_literal(compressor) || !compressor.option("reduce_funcs"))) { + single_use = false; + } else if (is_recursive_ref(compressor, def)) { + single_use = false; + } else if (def.scope !== self2.scope || def.orig[0] instanceof AST_SymbolFunarg) { + single_use = fixed.is_constant_expression(self2.scope); + if (single_use == "f") { + var scope = self2.scope; + do { + if (scope instanceof AST_Defun || is_func_expr(scope)) { + set_flag(scope, INLINED); + } + } while (scope = scope.parent_scope); + } + } + } + if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) { + single_use = def.scope === self2.scope && !scope_encloses_variables_in_this_scope(nearest_scope, fixed) || parent instanceof AST_Call && parent.expression === self2 && !scope_encloses_variables_in_this_scope(nearest_scope, fixed) && !(fixed.name && fixed.name.definition().recursive_refs > 0); + } + if (single_use && fixed) { + if (fixed instanceof AST_DefClass) { + set_flag(fixed, SQUEEZED); + fixed = make_node(AST_ClassExpression, fixed, fixed); + } + if (fixed instanceof AST_Defun) { + set_flag(fixed, SQUEEZED); + fixed = make_node(AST_Function, fixed, fixed); + } + if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) { + const defun_def = fixed.name.definition(); + let lambda_def = fixed.variables.get(fixed.name.name); + let name = lambda_def && lambda_def.orig[0]; + if (!(name instanceof AST_SymbolLambda)) { + name = make_node(AST_SymbolLambda, fixed.name, fixed.name); + name.scope = fixed; + fixed.name = name; + lambda_def = fixed.def_function(name); + } + walk(fixed, (node) => { + if (node instanceof AST_SymbolRef && node.definition() === defun_def) { + node.thedef = lambda_def; + lambda_def.references.push(node); + } + }); + } + if ((fixed instanceof AST_Lambda || fixed instanceof AST_Class) && fixed.parent_scope !== nearest_scope) { + fixed = fixed.clone(true, compressor.get_toplevel()); + nearest_scope.add_child_scope(fixed); + } + return fixed.optimize(compressor); + } + if (fixed) { + let replace; + if (fixed instanceof AST_This) { + if (!(def.orig[0] instanceof AST_SymbolFunarg) && def.references.every((ref) => def.scope === ref.scope)) { + replace = fixed; + } + } else { + var ev = fixed.evaluate(compressor); + if (ev !== fixed && (compressor.option("unsafe_regexp") || !(ev instanceof RegExp))) { + replace = make_node_from_constant(ev, fixed); + } + } + if (replace) { + const name_length = self2.size(compressor); + const replace_size = replace.size(compressor); + let overhead = 0; + if (compressor.option("unused") && !compressor.exposed(def)) { + overhead = (name_length + 2 + replace_size) / (def.references.length - def.assignments); + } + if (replace_size <= name_length + overhead) { + return replace; + } + } + } + return self2; + } + function inline_into_call(self2, compressor) { + var exp = self2.expression; + var fn = exp; + var simple_args = self2.args.every((arg) => !(arg instanceof AST_Expansion)); + if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef && !has_annotation(self2, _NOINLINE)) { + const fixed = fn.fixed_value(); + if (retain_top_func(fixed, compressor) || !compressor.toplevel.funcs && exp.definition().global) { + return self2; + } + fn = fixed; + } + var is_func = fn instanceof AST_Lambda; + var stat = is_func && fn.body[0]; + var is_regular_func = is_func && !fn.is_generator && !fn.async; + var can_inline = is_regular_func && compressor.option("inline") && !self2.is_callee_pure(compressor); + if (can_inline && stat instanceof AST_Return) { + let returned = stat.value; + if (!returned || returned.is_constant_expression()) { + if (returned) { + returned = returned.clone(true); + } else { + returned = make_node(AST_Undefined, self2); + } + const args2 = self2.args.concat(returned); + return make_sequence(self2, args2).optimize(compressor); + } + if (fn.argnames.length === 1 && fn.argnames[0] instanceof AST_SymbolFunarg && self2.args.length < 2 && !(self2.args[0] instanceof AST_Expansion) && returned instanceof AST_SymbolRef && returned.name === fn.argnames[0].name) { + const replacement = (self2.args[0] || make_node(AST_Undefined)).optimize(compressor); + let parent; + if (replacement instanceof AST_PropAccess && (parent = compressor.parent()) instanceof AST_Call && parent.expression === self2) { + return make_sequence(self2, [ + make_node(AST_Number, self2, { value: 0 }), + replacement + ]); + } + return replacement; + } + } + if (can_inline) { + var scope, in_loop, level = -1; + let def; + let returned_value; + let nearest_scope; + if (simple_args && !fn.uses_arguments && !(compressor.parent() instanceof AST_Class) && !(fn.name && fn instanceof AST_Function) && (returned_value = can_flatten_body(stat)) && (exp === fn || has_annotation(self2, _INLINE) || compressor.option("unused") && (def = exp.definition()).references.length == 1 && !is_recursive_ref(compressor, def) && fn.is_constant_expression(exp.scope)) && !has_annotation(self2, _PURE | _NOINLINE) && !fn.contains_this() && can_inject_symbols() && (nearest_scope = compressor.find_scope()) && !scope_encloses_variables_in_this_scope(nearest_scope, fn) && !function in_default_assign() { + let i = 0; + let p; + while (p = compressor.parent(i++)) { + if (p instanceof AST_DefaultAssign) + return true; + if (p instanceof AST_Block) + break; + } + return false; + }() && !(scope instanceof AST_Class)) { + set_flag(fn, SQUEEZED); + nearest_scope.add_child_scope(fn); + return make_sequence(self2, flatten_fn(returned_value)).optimize(compressor); + } + } + if (can_inline && has_annotation(self2, _INLINE)) { + set_flag(fn, SQUEEZED); + fn = make_node(fn.CTOR === AST_Defun ? AST_Function : fn.CTOR, fn, fn); + fn = fn.clone(true); + fn.figure_out_scope({}, { + parent_scope: compressor.find_scope(), + toplevel: compressor.get_toplevel() + }); + return make_node(AST_Call, self2, { + expression: fn, + args: self2.args + }).optimize(compressor); + } + const can_drop_this_call = is_regular_func && compressor.option("side_effects") && fn.body.every(is_empty); + if (can_drop_this_call) { + var args = self2.args.concat(make_node(AST_Undefined, self2)); + return make_sequence(self2, args).optimize(compressor); + } + if (compressor.option("negate_iife") && compressor.parent() instanceof AST_SimpleStatement && is_iife_call(self2)) { + return self2.negate(compressor, true); + } + var ev = self2.evaluate(compressor); + if (ev !== self2) { + ev = make_node_from_constant(ev, self2).optimize(compressor); + return best_of(compressor, ev, self2); + } + return self2; + function return_value(stat2) { + if (!stat2) + return make_node(AST_Undefined, self2); + if (stat2 instanceof AST_Return) { + if (!stat2.value) + return make_node(AST_Undefined, self2); + return stat2.value.clone(true); + } + if (stat2 instanceof AST_SimpleStatement) { + return make_node(AST_UnaryPrefix, stat2, { + operator: "void", + expression: stat2.body.clone(true) + }); + } + } + function can_flatten_body(stat2) { + var body = fn.body; + var len = body.length; + if (compressor.option("inline") < 3) { + return len == 1 && return_value(stat2); + } + stat2 = null; + for (var i = 0; i < len; i++) { + var line = body[i]; + if (line instanceof AST_Var) { + if (stat2 && !line.definitions.every((var_def) => !var_def.value)) { + return false; + } + } else if (stat2) { + return false; + } else if (!(line instanceof AST_EmptyStatement)) { + stat2 = line; + } + } + return return_value(stat2); + } + function can_inject_args(block_scoped, safe_to_inject) { + for (var i = 0, len = fn.argnames.length; i < len; i++) { + var arg = fn.argnames[i]; + if (arg instanceof AST_DefaultAssign) { + if (has_flag(arg.left, UNUSED)) + continue; + return false; + } + if (arg instanceof AST_Destructuring) + return false; + if (arg instanceof AST_Expansion) { + if (has_flag(arg.expression, UNUSED)) + continue; + return false; + } + if (has_flag(arg, UNUSED)) + continue; + if (!safe_to_inject || block_scoped.has(arg.name) || identifier_atom.has(arg.name) || scope.conflicting_def(arg.name)) { + return false; + } + if (in_loop) + in_loop.push(arg.definition()); + } + return true; + } + function can_inject_vars(block_scoped, safe_to_inject) { + var len = fn.body.length; + for (var i = 0; i < len; i++) { + var stat2 = fn.body[i]; + if (!(stat2 instanceof AST_Var)) + continue; + if (!safe_to_inject) + return false; + for (var j = stat2.definitions.length; --j >= 0; ) { + var name = stat2.definitions[j].name; + if (name instanceof AST_Destructuring || block_scoped.has(name.name) || identifier_atom.has(name.name) || scope.conflicting_def(name.name)) { + return false; + } + if (in_loop) + in_loop.push(name.definition()); + } + } + return true; + } + function can_inject_symbols() { + var block_scoped = /* @__PURE__ */ new Set(); + do { + scope = compressor.parent(++level); + if (scope.is_block_scope() && scope.block_scope) { + scope.block_scope.variables.forEach(function(variable) { + block_scoped.add(variable.name); + }); + } + if (scope instanceof AST_Catch) { + if (scope.argname) { + block_scoped.add(scope.argname.name); + } + } else if (scope instanceof AST_IterationStatement) { + in_loop = []; + } else if (scope instanceof AST_SymbolRef) { + if (scope.fixed_value() instanceof AST_Scope) + return false; + } + } while (!(scope instanceof AST_Scope)); + var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars; + var inline = compressor.option("inline"); + if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject)) + return false; + if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject)) + return false; + return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop); + } + function append_var(decls, expressions, name, value) { + var def = name.definition(); + const already_appended = scope.variables.has(name.name); + if (!already_appended) { + scope.variables.set(name.name, def); + scope.enclosed.push(def); + decls.push(make_node(AST_VarDef, name, { + name, + value: null + })); + } + var sym = make_node(AST_SymbolRef, name, name); + def.references.push(sym); + if (value) + expressions.push(make_node(AST_Assign, self2, { + operator: "=", + logical: false, + left: sym, + right: value.clone() + })); + } + function flatten_args(decls, expressions) { + var len = fn.argnames.length; + for (var i = self2.args.length; --i >= len; ) { + expressions.push(self2.args[i]); + } + for (i = len; --i >= 0; ) { + var name = fn.argnames[i]; + var value = self2.args[i]; + if (has_flag(name, UNUSED) || !name.name || scope.conflicting_def(name.name)) { + if (value) + expressions.push(value); + } else { + var symbol = make_node(AST_SymbolVar, name, name); + name.definition().orig.push(symbol); + if (!value && in_loop) + value = make_node(AST_Undefined, self2); + append_var(decls, expressions, symbol, value); + } + } + decls.reverse(); + expressions.reverse(); + } + function flatten_vars(decls, expressions) { + var pos = expressions.length; + for (var i = 0, lines = fn.body.length; i < lines; i++) { + var stat2 = fn.body[i]; + if (!(stat2 instanceof AST_Var)) + continue; + for (var j = 0, defs = stat2.definitions.length; j < defs; j++) { + var var_def = stat2.definitions[j]; + var name = var_def.name; + append_var(decls, expressions, name, var_def.value); + if (in_loop && fn.argnames.every((argname) => argname.name != name.name)) { + var def = fn.variables.get(name.name); + var sym = make_node(AST_SymbolRef, name, name); + def.references.push(sym); + expressions.splice(pos++, 0, make_node(AST_Assign, var_def, { + operator: "=", + logical: false, + left: sym, + right: make_node(AST_Undefined, name) + })); + } + } + } + } + function flatten_fn(returned_value) { + var decls = []; + var expressions = []; + flatten_args(decls, expressions); + flatten_vars(decls, expressions); + expressions.push(returned_value); + if (decls.length) { + const i = scope.body.indexOf(compressor.parent(level - 1)) + 1; + scope.body.splice(i, 0, make_node(AST_Var, fn, { + definitions: decls + })); + } + return expressions.map((exp2) => exp2.clone(true)); + } + } + (function(def_find_defs) { + function to_node(value, orig) { + if (value instanceof AST_Node) { + if (!(value instanceof AST_Constant)) { + value = value.clone(true); + } + return make_node(value.CTOR, orig, value); + } + if (Array.isArray(value)) + return make_node(AST_Array, orig, { + elements: value.map(function(value2) { + return to_node(value2, orig); + }) + }); + if (value && typeof value == "object") { + var props = []; + for (var key in value) + if (HOP(value, key)) { + props.push(make_node(AST_ObjectKeyVal, orig, { + key, + value: to_node(value[key], orig) + })); + } + return make_node(AST_Object, orig, { + properties: props + }); + } + return make_node_from_constant(value, orig); + } + AST_Toplevel.DEFMETHOD("resolve_defines", function(compressor) { + if (!compressor.option("global_defs")) + return this; + this.figure_out_scope({ ie8: compressor.option("ie8") }); + return this.transform(new TreeTransformer(function(node) { + var def = node._find_defs(compressor, ""); + if (!def) + return; + var level = 0, child = node, parent; + while (parent = this.parent(level++)) { + if (!(parent instanceof AST_PropAccess)) + break; + if (parent.expression !== child) + break; + child = parent; + } + if (is_lhs(child, parent)) { + return; + } + return def; + })); + }); + def_find_defs(AST_Node, noop); + def_find_defs(AST_Chain, function(compressor, suffix) { + return this.expression._find_defs(compressor, suffix); + }); + def_find_defs(AST_Dot, function(compressor, suffix) { + return this.expression._find_defs(compressor, "." + this.property + suffix); + }); + def_find_defs(AST_SymbolDeclaration, function() { + if (!this.global()) + return; + }); + def_find_defs(AST_SymbolRef, function(compressor, suffix) { + if (!this.global()) + return; + var defines = compressor.option("global_defs"); + var name = this.name + suffix; + if (HOP(defines, name)) + return to_node(defines[name], this); + }); + def_find_defs(AST_ImportMeta, function(compressor, suffix) { + var defines = compressor.option("global_defs"); + var name = "import.meta" + suffix; + if (HOP(defines, name)) + return to_node(defines[name], this); + }); + })(function(node, func) { + node.DEFMETHOD("_find_defs", func); + }); + class Compressor extends TreeWalker { + constructor(options, { false_by_default = false, mangle_options: mangle_options2 = false }) { + super(); + if (options.defaults !== void 0 && !options.defaults) + false_by_default = true; + this.options = defaults(options, { + arguments: false, + arrows: !false_by_default, + booleans: !false_by_default, + booleans_as_integers: false, + collapse_vars: !false_by_default, + comparisons: !false_by_default, + computed_props: !false_by_default, + conditionals: !false_by_default, + dead_code: !false_by_default, + defaults: true, + directives: !false_by_default, + drop_console: false, + drop_debugger: !false_by_default, + ecma: 5, + evaluate: !false_by_default, + expression: false, + global_defs: false, + hoist_funs: false, + hoist_props: !false_by_default, + hoist_vars: false, + ie8: false, + if_return: !false_by_default, + inline: !false_by_default, + join_vars: !false_by_default, + keep_classnames: false, + keep_fargs: true, + keep_fnames: false, + keep_infinity: false, + lhs_constants: !false_by_default, + loops: !false_by_default, + module: false, + negate_iife: !false_by_default, + passes: 1, + properties: !false_by_default, + pure_getters: !false_by_default && "strict", + pure_funcs: null, + pure_new: false, + reduce_funcs: !false_by_default, + reduce_vars: !false_by_default, + sequences: !false_by_default, + side_effects: !false_by_default, + switches: !false_by_default, + top_retain: null, + toplevel: !!(options && options["top_retain"]), + typeofs: !false_by_default, + unsafe: false, + unsafe_arrows: false, + unsafe_comps: false, + unsafe_Function: false, + unsafe_math: false, + unsafe_symbols: false, + unsafe_methods: false, + unsafe_proto: false, + unsafe_regexp: false, + unsafe_undefined: false, + unused: !false_by_default, + warnings: false + }, true); + var global_defs = this.options["global_defs"]; + if (typeof global_defs == "object") + for (var key in global_defs) { + if (key[0] === "@" && HOP(global_defs, key)) { + global_defs[key.slice(1)] = parse(global_defs[key], { + expression: true + }); + } + } + if (this.options["inline"] === true) + this.options["inline"] = 3; + var pure_funcs = this.options["pure_funcs"]; + if (typeof pure_funcs == "function") { + this.pure_funcs = pure_funcs; + } else { + this.pure_funcs = pure_funcs ? function(node) { + return !pure_funcs.includes(node.expression.print_to_string()); + } : return_true; + } + var top_retain = this.options["top_retain"]; + if (top_retain instanceof RegExp) { + this.top_retain = function(def) { + return top_retain.test(def.name); + }; + } else if (typeof top_retain == "function") { + this.top_retain = top_retain; + } else if (top_retain) { + if (typeof top_retain == "string") { + top_retain = top_retain.split(/,/); + } + this.top_retain = function(def) { + return top_retain.includes(def.name); + }; + } + if (this.options["module"]) { + this.directives["use strict"] = true; + this.options["toplevel"] = true; + } + var toplevel = this.options["toplevel"]; + this.toplevel = typeof toplevel == "string" ? { + funcs: /funcs/.test(toplevel), + vars: /vars/.test(toplevel) + } : { + funcs: toplevel, + vars: toplevel + }; + var sequences = this.options["sequences"]; + this.sequences_limit = sequences == 1 ? 800 : sequences | 0; + this.evaluated_regexps = /* @__PURE__ */ new Map(); + this._toplevel = void 0; + this._mangle_options = mangle_options2 ? format_mangler_options(mangle_options2) : mangle_options2; + } + mangle_options() { + var nth_identifier = this._mangle_options && this._mangle_options.nth_identifier || base54; + var module3 = this._mangle_options && this._mangle_options.module || this.option("module"); + return { ie8: this.option("ie8"), nth_identifier, module: module3 }; + } + option(key) { + return this.options[key]; + } + exposed(def) { + if (def.export) + return true; + if (def.global) { + for (var i = 0, len = def.orig.length; i < len; i++) + if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? "funcs" : "vars"]) + return true; + } + return false; + } + in_boolean_context() { + if (!this.option("booleans")) + return false; + var self2 = this.self(); + for (var i = 0, p; p = this.parent(i); i++) { + if (p instanceof AST_SimpleStatement || p instanceof AST_Conditional && p.condition === self2 || p instanceof AST_DWLoop && p.condition === self2 || p instanceof AST_For && p.condition === self2 || p instanceof AST_If && p.condition === self2 || p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self2) { + return true; + } + if (p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||" || p.operator == "??") || p instanceof AST_Conditional || p.tail_node() === self2) { + self2 = p; + } else { + return false; + } + } + } + get_toplevel() { + return this._toplevel; + } + compress(toplevel) { + toplevel = toplevel.resolve_defines(this); + this._toplevel = toplevel; + if (this.option("expression")) { + this._toplevel.process_expression(true); + } + var passes = +this.options.passes || 1; + var min_count = 1 / 0; + var stopping = false; + var mangle = this.mangle_options(); + for (var pass = 0; pass < passes; pass++) { + this._toplevel.figure_out_scope(mangle); + if (pass === 0 && this.option("drop_console")) { + this._toplevel = this._toplevel.drop_console(this.option("drop_console")); + } + if (pass > 0 || this.option("reduce_vars")) { + this._toplevel.reset_opt_flags(this); + } + this._toplevel = this._toplevel.transform(this); + if (passes > 1) { + let count = 0; + walk(this._toplevel, () => { + count++; + }); + if (count < min_count) { + min_count = count; + stopping = false; + } else if (stopping) { + break; + } else { + stopping = true; + } + } + } + if (this.option("expression")) { + this._toplevel.process_expression(false); + } + toplevel = this._toplevel; + this._toplevel = void 0; + return toplevel; + } + before(node, descend) { + if (has_flag(node, SQUEEZED)) + return node; + var was_scope = false; + if (node instanceof AST_Scope) { + node = node.hoist_properties(this); + node = node.hoist_declarations(this); + was_scope = true; + } + descend(node, this); + descend(node, this); + var opt = node.optimize(this); + if (was_scope && opt instanceof AST_Scope) { + opt.drop_unused(this); + descend(opt, this); + } + if (opt === node) + set_flag(opt, SQUEEZED); + return opt; + } + is_lhs() { + const self2 = this.stack[this.stack.length - 1]; + const parent = this.stack[this.stack.length - 2]; + return is_lhs(self2, parent); + } + } + function def_optimize(node, optimizer) { + node.DEFMETHOD("optimize", function(compressor) { + var self2 = this; + if (has_flag(self2, OPTIMIZED)) + return self2; + if (compressor.has_directive("use asm")) + return self2; + var opt = optimizer(self2, compressor); + set_flag(opt, OPTIMIZED); + return opt; + }); + } + def_optimize(AST_Node, function(self2) { + return self2; + }); + AST_Toplevel.DEFMETHOD("drop_console", function(options) { + var isArray = Array.isArray(options); + return this.transform(new TreeTransformer(function(self2) { + if (self2.TYPE !== "Call") { + return; + } + var exp = self2.expression; + if (!(exp instanceof AST_PropAccess)) { + return; + } + if (isArray && options.indexOf(exp.property) === -1) { + return; + } + var name = exp.expression; + while (name.expression) { + name = name.expression; + } + if (is_undeclared_ref(name) && name.name == "console") { + return make_node(AST_Undefined, self2); + } + })); + }); + AST_Node.DEFMETHOD("equivalent_to", function(node) { + return equivalent_to(this, node); + }); + AST_Scope.DEFMETHOD("process_expression", function(insert, compressor) { + var self2 = this; + var tt = new TreeTransformer(function(node) { + if (insert && node instanceof AST_SimpleStatement) { + return make_node(AST_Return, node, { + value: node.body + }); + } + if (!insert && node instanceof AST_Return) { + if (compressor) { + var value = node.value && node.value.drop_side_effect_free(compressor, true); + return value ? make_node(AST_SimpleStatement, node, { body: value }) : make_node(AST_EmptyStatement, node); + } + return make_node(AST_SimpleStatement, node, { + body: node.value || make_node(AST_UnaryPrefix, node, { + operator: "void", + expression: make_node(AST_Number, node, { + value: 0 + }) + }) + }); + } + if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self2) { + return node; + } + if (node instanceof AST_Block) { + var index = node.body.length - 1; + if (index >= 0) { + node.body[index] = node.body[index].transform(tt); + } + } else if (node instanceof AST_If) { + node.body = node.body.transform(tt); + if (node.alternative) { + node.alternative = node.alternative.transform(tt); + } + } else if (node instanceof AST_With) { + node.body = node.body.transform(tt); + } + return node; + }); + self2.transform(tt); + }); + AST_Toplevel.DEFMETHOD("reset_opt_flags", function(compressor) { + const self2 = this; + const reduce_vars = compressor.option("reduce_vars"); + const preparation = new TreeWalker(function(node, descend) { + clear_flag(node, CLEAR_BETWEEN_PASSES); + if (reduce_vars) { + if (compressor.top_retain && node instanceof AST_Defun && preparation.parent() === self2) { + set_flag(node, TOP); + } + return node.reduce_vars(preparation, descend, compressor); + } + }); + preparation.safe_ids = /* @__PURE__ */ Object.create(null); + preparation.in_loop = null; + preparation.loop_ids = /* @__PURE__ */ new Map(); + preparation.defs_to_safe_ids = /* @__PURE__ */ new Map(); + self2.walk(preparation); + }); + AST_Symbol.DEFMETHOD("fixed_value", function() { + var fixed = this.thedef.fixed; + if (!fixed || fixed instanceof AST_Node) + return fixed; + return fixed(); + }); + AST_SymbolRef.DEFMETHOD("is_immutable", function() { + var orig = this.definition().orig; + return orig.length == 1 && orig[0] instanceof AST_SymbolLambda; + }); + function find_variable(compressor, name) { + var scope, i = 0; + while (scope = compressor.parent(i++)) { + if (scope instanceof AST_Scope) + break; + if (scope instanceof AST_Catch && scope.argname) { + scope = scope.argname.definition().scope; + break; + } + } + return scope.find_variable(name); + } + var global_names = makePredicate("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError"); + AST_SymbolRef.DEFMETHOD("is_declared", function(compressor) { + return !this.definition().undeclared || compressor.option("unsafe") && global_names.has(this.name); + }); + var directives = /* @__PURE__ */ new Set(["use asm", "use strict"]); + def_optimize(AST_Directive, function(self2, compressor) { + if (compressor.option("directives") && (!directives.has(self2.value) || compressor.has_directive(self2.value) !== self2)) { + return make_node(AST_EmptyStatement, self2); + } + return self2; + }); + def_optimize(AST_Debugger, function(self2, compressor) { + if (compressor.option("drop_debugger")) + return make_node(AST_EmptyStatement, self2); + return self2; + }); + def_optimize(AST_LabeledStatement, function(self2, compressor) { + if (self2.body instanceof AST_Break && compressor.loopcontrol_target(self2.body) === self2.body) { + return make_node(AST_EmptyStatement, self2); + } + return self2.label.references.length == 0 ? self2.body : self2; + }); + def_optimize(AST_Block, function(self2, compressor) { + tighten_body(self2.body, compressor); + return self2; + }); + function can_be_extracted_from_if_block(node) { + return !(node instanceof AST_Const || node instanceof AST_Let || node instanceof AST_Class); + } + def_optimize(AST_BlockStatement, function(self2, compressor) { + tighten_body(self2.body, compressor); + switch (self2.body.length) { + case 1: + if (!compressor.has_directive("use strict") && compressor.parent() instanceof AST_If && can_be_extracted_from_if_block(self2.body[0]) || can_be_evicted_from_block(self2.body[0])) { + return self2.body[0]; + } + break; + case 0: + return make_node(AST_EmptyStatement, self2); + } + return self2; + }); + function opt_AST_Lambda(self2, compressor) { + tighten_body(self2.body, compressor); + if (compressor.option("side_effects") && self2.body.length == 1 && self2.body[0] === compressor.has_directive("use strict")) { + self2.body.length = 0; + } + return self2; + } + def_optimize(AST_Lambda, opt_AST_Lambda); + AST_Scope.DEFMETHOD("hoist_declarations", function(compressor) { + var self2 = this; + if (compressor.has_directive("use asm")) + return self2; + var hoist_funs = compressor.option("hoist_funs"); + var hoist_vars = compressor.option("hoist_vars"); + if (hoist_funs || hoist_vars) { + var dirs = []; + var hoisted = []; + var vars = /* @__PURE__ */ new Map(), vars_found = 0, var_decl = 0; + walk(self2, (node) => { + if (node instanceof AST_Scope && node !== self2) + return true; + if (node instanceof AST_Var) { + ++var_decl; + return true; + } + }); + hoist_vars = hoist_vars && var_decl > 1; + var tt = new TreeTransformer(function before(node) { + if (node !== self2) { + if (node instanceof AST_Directive) { + dirs.push(node); + return make_node(AST_EmptyStatement, node); + } + if (hoist_funs && node instanceof AST_Defun && !(tt.parent() instanceof AST_Export) && tt.parent() === self2) { + hoisted.push(node); + return make_node(AST_EmptyStatement, node); + } + if (hoist_vars && node instanceof AST_Var && !node.definitions.some((def3) => def3.name instanceof AST_Destructuring)) { + node.definitions.forEach(function(def3) { + vars.set(def3.name.name, def3); + ++vars_found; + }); + var seq = node.to_assignments(compressor); + var p = tt.parent(); + if (p instanceof AST_ForIn && p.init === node) { + if (seq == null) { + var def2 = node.definitions[0].name; + return make_node(AST_SymbolRef, def2, def2); + } + return seq; + } + if (p instanceof AST_For && p.init === node) { + return seq; + } + if (!seq) + return make_node(AST_EmptyStatement, node); + return make_node(AST_SimpleStatement, node, { + body: seq + }); + } + if (node instanceof AST_Scope) + return node; + } + }); + self2 = self2.transform(tt); + if (vars_found > 0) { + var defs = []; + const is_lambda = self2 instanceof AST_Lambda; + const args_as_names = is_lambda ? self2.args_as_names() : null; + vars.forEach((def2, name) => { + if (is_lambda && args_as_names.some((x) => x.name === def2.name.name)) { + vars.delete(name); + } else { + def2 = def2.clone(); + def2.value = null; + defs.push(def2); + vars.set(name, def2); + } + }); + if (defs.length > 0) { + for (var i = 0; i < self2.body.length; ) { + if (self2.body[i] instanceof AST_SimpleStatement) { + var expr = self2.body[i].body, sym, assign; + if (expr instanceof AST_Assign && expr.operator == "=" && (sym = expr.left) instanceof AST_Symbol && vars.has(sym.name)) { + var def = vars.get(sym.name); + if (def.value) + break; + def.value = expr.right; + remove2(defs, def); + defs.push(def); + self2.body.splice(i, 1); + continue; + } + if (expr instanceof AST_Sequence && (assign = expr.expressions[0]) instanceof AST_Assign && assign.operator == "=" && (sym = assign.left) instanceof AST_Symbol && vars.has(sym.name)) { + var def = vars.get(sym.name); + if (def.value) + break; + def.value = assign.right; + remove2(defs, def); + defs.push(def); + self2.body[i].body = make_sequence(expr, expr.expressions.slice(1)); + continue; + } + } + if (self2.body[i] instanceof AST_EmptyStatement) { + self2.body.splice(i, 1); + continue; + } + if (self2.body[i] instanceof AST_BlockStatement) { + self2.body.splice(i, 1, ...self2.body[i].body); + continue; + } + break; + } + defs = make_node(AST_Var, self2, { + definitions: defs + }); + hoisted.push(defs); + } + } + self2.body = dirs.concat(hoisted, self2.body); + } + return self2; + }); + AST_Scope.DEFMETHOD("hoist_properties", function(compressor) { + var self2 = this; + if (!compressor.option("hoist_props") || compressor.has_directive("use asm")) + return self2; + var top_retain = self2 instanceof AST_Toplevel && compressor.top_retain || return_false; + var defs_by_id = /* @__PURE__ */ new Map(); + var hoister = new TreeTransformer(function(node, descend) { + if (node instanceof AST_VarDef) { + const sym = node.name; + let def; + let value; + if (sym.scope === self2 && (def = sym.definition()).escaped != 1 && !def.assignments && !def.direct_access && !def.single_use && !compressor.exposed(def) && !top_retain(def) && (value = sym.fixed_value()) === node.value && value instanceof AST_Object && !value.properties.some((prop) => prop instanceof AST_Expansion || prop.computed_key())) { + descend(node, this); + const defs = /* @__PURE__ */ new Map(); + const assignments = []; + value.properties.forEach(({ key, value: value2 }) => { + const scope = hoister.find_scope(); + const symbol = self2.create_symbol(sym.CTOR, { + source: sym, + scope, + conflict_scopes: /* @__PURE__ */ new Set([ + scope, + ...sym.definition().references.map((ref) => ref.scope) + ]), + tentative_name: sym.name + "_" + key + }); + defs.set(String(key), symbol.definition()); + assignments.push(make_node(AST_VarDef, node, { + name: symbol, + value: value2 + })); + }); + defs_by_id.set(def.id, defs); + return MAP.splice(assignments); + } + } else if (node instanceof AST_PropAccess && node.expression instanceof AST_SymbolRef) { + const defs = defs_by_id.get(node.expression.definition().id); + if (defs) { + const def = defs.get(String(get_simple_key(node.property))); + const sym = make_node(AST_SymbolRef, node, { + name: def.name, + scope: node.expression.scope, + thedef: def + }); + sym.reference({}); + return sym; + } + } + }); + return self2.transform(hoister); + }); + def_optimize(AST_SimpleStatement, function(self2, compressor) { + if (compressor.option("side_effects")) { + var body = self2.body; + var node = body.drop_side_effect_free(compressor, true); + if (!node) { + return make_node(AST_EmptyStatement, self2); + } + if (node !== body) { + return make_node(AST_SimpleStatement, self2, { body: node }); + } + } + return self2; + }); + def_optimize(AST_While, function(self2, compressor) { + return compressor.option("loops") ? make_node(AST_For, self2, self2).optimize(compressor) : self2; + }); + def_optimize(AST_Do, function(self2, compressor) { + if (!compressor.option("loops")) + return self2; + var cond = self2.condition.tail_node().evaluate(compressor); + if (!(cond instanceof AST_Node)) { + if (cond) + return make_node(AST_For, self2, { + body: make_node(AST_BlockStatement, self2.body, { + body: [ + self2.body, + make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + }) + ] + }) + }).optimize(compressor); + if (!has_break_or_continue(self2, compressor.parent())) { + return make_node(AST_BlockStatement, self2.body, { + body: [ + self2.body, + make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + }) + ] + }).optimize(compressor); + } + } + return self2; + }); + function if_break_in_loop(self2, compressor) { + var first = self2.body instanceof AST_BlockStatement ? self2.body.body[0] : self2.body; + if (compressor.option("dead_code") && is_break(first)) { + var body = []; + if (self2.init instanceof AST_Statement) { + body.push(self2.init); + } else if (self2.init) { + body.push(make_node(AST_SimpleStatement, self2.init, { + body: self2.init + })); + } + if (self2.condition) { + body.push(make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + })); + } + trim_unreachable_code(compressor, self2.body, body); + return make_node(AST_BlockStatement, self2, { + body + }); + } + if (first instanceof AST_If) { + if (is_break(first.body)) { + if (self2.condition) { + self2.condition = make_node(AST_Binary, self2.condition, { + left: self2.condition, + operator: "&&", + right: first.condition.negate(compressor) + }); + } else { + self2.condition = first.condition.negate(compressor); + } + drop_it(first.alternative); + } else if (is_break(first.alternative)) { + if (self2.condition) { + self2.condition = make_node(AST_Binary, self2.condition, { + left: self2.condition, + operator: "&&", + right: first.condition + }); + } else { + self2.condition = first.condition; + } + drop_it(first.body); + } + } + return self2; + function is_break(node) { + return node instanceof AST_Break && compressor.loopcontrol_target(node) === compressor.self(); + } + function drop_it(rest) { + rest = as_statement_array(rest); + if (self2.body instanceof AST_BlockStatement) { + self2.body = self2.body.clone(); + self2.body.body = rest.concat(self2.body.body.slice(1)); + self2.body = self2.body.transform(compressor); + } else { + self2.body = make_node(AST_BlockStatement, self2.body, { + body: rest + }).transform(compressor); + } + self2 = if_break_in_loop(self2, compressor); + } + } + def_optimize(AST_For, function(self2, compressor) { + if (!compressor.option("loops")) + return self2; + if (compressor.option("side_effects") && self2.init) { + self2.init = self2.init.drop_side_effect_free(compressor); + } + if (self2.condition) { + var cond = self2.condition.evaluate(compressor); + if (!(cond instanceof AST_Node)) { + if (cond) + self2.condition = null; + else if (!compressor.option("dead_code")) { + var orig = self2.condition; + self2.condition = make_node_from_constant(cond, self2.condition); + self2.condition = best_of_expression(self2.condition.transform(compressor), orig); + } + } + if (compressor.option("dead_code")) { + if (cond instanceof AST_Node) + cond = self2.condition.tail_node().evaluate(compressor); + if (!cond) { + var body = []; + trim_unreachable_code(compressor, self2.body, body); + if (self2.init instanceof AST_Statement) { + body.push(self2.init); + } else if (self2.init) { + body.push(make_node(AST_SimpleStatement, self2.init, { + body: self2.init + })); + } + body.push(make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + })); + return make_node(AST_BlockStatement, self2, { body }).optimize(compressor); + } + } + } + return if_break_in_loop(self2, compressor); + }); + def_optimize(AST_If, function(self2, compressor) { + if (is_empty(self2.alternative)) + self2.alternative = null; + if (!compressor.option("conditionals")) + return self2; + var cond = self2.condition.evaluate(compressor); + if (!compressor.option("dead_code") && !(cond instanceof AST_Node)) { + var orig = self2.condition; + self2.condition = make_node_from_constant(cond, orig); + self2.condition = best_of_expression(self2.condition.transform(compressor), orig); + } + if (compressor.option("dead_code")) { + if (cond instanceof AST_Node) + cond = self2.condition.tail_node().evaluate(compressor); + if (!cond) { + var body = []; + trim_unreachable_code(compressor, self2.body, body); + body.push(make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + })); + if (self2.alternative) + body.push(self2.alternative); + return make_node(AST_BlockStatement, self2, { body }).optimize(compressor); + } else if (!(cond instanceof AST_Node)) { + var body = []; + body.push(make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition + })); + body.push(self2.body); + if (self2.alternative) { + trim_unreachable_code(compressor, self2.alternative, body); + } + return make_node(AST_BlockStatement, self2, { body }).optimize(compressor); + } + } + var negated = self2.condition.negate(compressor); + var self_condition_length = self2.condition.size(); + var negated_length = negated.size(); + var negated_is_best = negated_length < self_condition_length; + if (self2.alternative && negated_is_best) { + negated_is_best = false; + self2.condition = negated; + var tmp = self2.body; + self2.body = self2.alternative || make_node(AST_EmptyStatement, self2); + self2.alternative = tmp; + } + if (is_empty(self2.body) && is_empty(self2.alternative)) { + return make_node(AST_SimpleStatement, self2.condition, { + body: self2.condition.clone() + }).optimize(compressor); + } + if (self2.body instanceof AST_SimpleStatement && self2.alternative instanceof AST_SimpleStatement) { + return make_node(AST_SimpleStatement, self2, { + body: make_node(AST_Conditional, self2, { + condition: self2.condition, + consequent: self2.body.body, + alternative: self2.alternative.body + }) + }).optimize(compressor); + } + if (is_empty(self2.alternative) && self2.body instanceof AST_SimpleStatement) { + if (self_condition_length === negated_length && !negated_is_best && self2.condition instanceof AST_Binary && self2.condition.operator == "||") { + negated_is_best = true; + } + if (negated_is_best) + return make_node(AST_SimpleStatement, self2, { + body: make_node(AST_Binary, self2, { + operator: "||", + left: negated, + right: self2.body.body + }) + }).optimize(compressor); + return make_node(AST_SimpleStatement, self2, { + body: make_node(AST_Binary, self2, { + operator: "&&", + left: self2.condition, + right: self2.body.body + }) + }).optimize(compressor); + } + if (self2.body instanceof AST_EmptyStatement && self2.alternative instanceof AST_SimpleStatement) { + return make_node(AST_SimpleStatement, self2, { + body: make_node(AST_Binary, self2, { + operator: "||", + left: self2.condition, + right: self2.alternative.body + }) + }).optimize(compressor); + } + if (self2.body instanceof AST_Exit && self2.alternative instanceof AST_Exit && self2.body.TYPE == self2.alternative.TYPE) { + return make_node(self2.body.CTOR, self2, { + value: make_node(AST_Conditional, self2, { + condition: self2.condition, + consequent: self2.body.value || make_node(AST_Undefined, self2.body), + alternative: self2.alternative.value || make_node(AST_Undefined, self2.alternative) + }).transform(compressor) + }).optimize(compressor); + } + if (self2.body instanceof AST_If && !self2.body.alternative && !self2.alternative) { + self2 = make_node(AST_If, self2, { + condition: make_node(AST_Binary, self2.condition, { + operator: "&&", + left: self2.condition, + right: self2.body.condition + }), + body: self2.body.body, + alternative: null + }); + } + if (aborts(self2.body)) { + if (self2.alternative) { + var alt = self2.alternative; + self2.alternative = null; + return make_node(AST_BlockStatement, self2, { + body: [self2, alt] + }).optimize(compressor); + } + } + if (aborts(self2.alternative)) { + var body = self2.body; + self2.body = self2.alternative; + self2.condition = negated_is_best ? negated : self2.condition.negate(compressor); + self2.alternative = null; + return make_node(AST_BlockStatement, self2, { + body: [self2, body] + }).optimize(compressor); + } + return self2; + }); + def_optimize(AST_Switch, function(self2, compressor) { + if (!compressor.option("switches")) + return self2; + var branch; + var value = self2.expression.evaluate(compressor); + if (!(value instanceof AST_Node)) { + var orig = self2.expression; + self2.expression = make_node_from_constant(value, orig); + self2.expression = best_of_expression(self2.expression.transform(compressor), orig); + } + if (!compressor.option("dead_code")) + return self2; + if (value instanceof AST_Node) { + value = self2.expression.tail_node().evaluate(compressor); + } + var decl = []; + var body = []; + var default_branch; + var exact_match; + for (var i = 0, len = self2.body.length; i < len && !exact_match; i++) { + branch = self2.body[i]; + if (branch instanceof AST_Default) { + if (!default_branch) { + default_branch = branch; + } else { + eliminate_branch(branch, body[body.length - 1]); + } + } else if (!(value instanceof AST_Node)) { + var exp = branch.expression.evaluate(compressor); + if (!(exp instanceof AST_Node) && exp !== value) { + eliminate_branch(branch, body[body.length - 1]); + continue; + } + if (exp instanceof AST_Node) + exp = branch.expression.tail_node().evaluate(compressor); + if (exp === value) { + exact_match = branch; + if (default_branch) { + var default_index = body.indexOf(default_branch); + body.splice(default_index, 1); + eliminate_branch(default_branch, body[default_index - 1]); + default_branch = null; + } + } + } + body.push(branch); + } + while (i < len) + eliminate_branch(self2.body[i++], body[body.length - 1]); + self2.body = body; + let default_or_exact = default_branch || exact_match; + default_branch = null; + exact_match = null; + if (body.every((branch2, i2) => (branch2 === default_or_exact || branch2.expression instanceof AST_Constant) && (branch2.body.length === 0 || aborts(branch2) || body.length - 1 === i2))) { + for (let i2 = 0; i2 < body.length; i2++) { + const branch2 = body[i2]; + for (let j = i2 + 1; j < body.length; j++) { + const next = body[j]; + if (next.body.length === 0) + continue; + const last_branch = j === body.length - 1; + const equivalentBranch = branches_equivalent(next, branch2, false); + if (equivalentBranch || last_branch && branches_equivalent(next, branch2, true)) { + if (!equivalentBranch && last_branch) { + next.body.push(make_node(AST_Break)); + } + let x = j - 1; + let fallthroughDepth = 0; + while (x > i2) { + if (is_inert_body(body[x--])) { + fallthroughDepth++; + } else { + break; + } + } + const plucked = body.splice(j - fallthroughDepth, 1 + fallthroughDepth); + body.splice(i2 + 1, 0, ...plucked); + i2 += plucked.length; + } + } + } + } + for (let i2 = 0; i2 < body.length; i2++) { + let branch2 = body[i2]; + if (branch2.body.length === 0) + continue; + if (!aborts(branch2)) + continue; + for (let j = i2 + 1; j < body.length; i2++, j++) { + let next = body[j]; + if (next.body.length === 0) + continue; + if (branches_equivalent(next, branch2, false) || j === body.length - 1 && branches_equivalent(next, branch2, true)) { + branch2.body = []; + branch2 = next; + continue; + } + break; + } + } + { + let i2 = body.length - 1; + for (; i2 >= 0; i2--) { + let bbody = body[i2].body; + if (is_break(bbody[bbody.length - 1], compressor)) + bbody.pop(); + if (!is_inert_body(body[i2])) + break; + } + i2++; + if (!default_or_exact || body.indexOf(default_or_exact) >= i2) { + for (let j = body.length - 1; j >= i2; j--) { + let branch2 = body[j]; + if (branch2 === default_or_exact) { + default_or_exact = null; + body.pop(); + } else if (!branch2.expression.has_side_effects(compressor)) { + body.pop(); + } else { + break; + } + } + } + } + DEFAULT: + if (default_or_exact) { + let default_index2 = body.indexOf(default_or_exact); + let default_body_index = default_index2; + for (; default_body_index < body.length - 1; default_body_index++) { + if (!is_inert_body(body[default_body_index])) + break; + } + if (default_body_index < body.length - 1) { + break DEFAULT; + } + let side_effect_index = body.length - 1; + for (; side_effect_index >= 0; side_effect_index--) { + let branch2 = body[side_effect_index]; + if (branch2 === default_or_exact) + continue; + if (branch2.expression.has_side_effects(compressor)) + break; + } + if (default_body_index > side_effect_index) { + let prev_body_index = default_index2 - 1; + for (; prev_body_index >= 0; prev_body_index--) { + if (!is_inert_body(body[prev_body_index])) + break; + } + let before = Math.max(side_effect_index, prev_body_index) + 1; + let after = default_index2; + if (side_effect_index > default_index2) { + after = side_effect_index; + body[side_effect_index].body = body[default_body_index].body; + } else { + default_or_exact.body = body[default_body_index].body; + } + body.splice(after + 1, default_body_index - after); + body.splice(before, default_index2 - before); + } + } + DEFAULT: + if (default_or_exact) { + let i2 = body.findIndex((branch2) => !is_inert_body(branch2)); + let caseBody; + if (i2 === body.length - 1) { + let branch2 = body[i2]; + if (has_nested_break(self2)) + break DEFAULT; + caseBody = make_node(AST_BlockStatement, branch2, { + body: branch2.body + }); + branch2.body = []; + } else if (i2 !== -1) { + break DEFAULT; + } + let sideEffect = body.find((branch2) => { + return branch2 !== default_or_exact && branch2.expression.has_side_effects(compressor); + }); + if (!sideEffect) { + return make_node(AST_BlockStatement, self2, { + body: decl.concat(statement(self2.expression), default_or_exact.expression ? statement(default_or_exact.expression) : [], caseBody || []) + }).optimize(compressor); + } + const default_index2 = body.indexOf(default_or_exact); + body.splice(default_index2, 1); + default_or_exact = null; + if (caseBody) { + return make_node(AST_BlockStatement, self2, { + body: decl.concat(self2, caseBody) + }).optimize(compressor); + } + } + if (body.length > 0) { + body[0].body = decl.concat(body[0].body); + } + if (body.length == 0) { + return make_node(AST_BlockStatement, self2, { + body: decl.concat(statement(self2.expression)) + }).optimize(compressor); + } + if (body.length == 1 && !has_nested_break(self2)) { + let branch2 = body[0]; + return make_node(AST_If, self2, { + condition: make_node(AST_Binary, self2, { + operator: "===", + left: self2.expression, + right: branch2.expression + }), + body: make_node(AST_BlockStatement, branch2, { + body: branch2.body + }), + alternative: null + }).optimize(compressor); + } + if (body.length === 2 && default_or_exact && !has_nested_break(self2)) { + let branch2 = body[0] === default_or_exact ? body[1] : body[0]; + let exact_exp = default_or_exact.expression && statement(default_or_exact.expression); + if (aborts(body[0])) { + let first = body[0]; + if (is_break(first.body[first.body.length - 1], compressor)) { + first.body.pop(); + } + return make_node(AST_If, self2, { + condition: make_node(AST_Binary, self2, { + operator: "===", + left: self2.expression, + right: branch2.expression + }), + body: make_node(AST_BlockStatement, branch2, { + body: branch2.body + }), + alternative: make_node(AST_BlockStatement, default_or_exact, { + body: [].concat(exact_exp || [], default_or_exact.body) + }) + }).optimize(compressor); + } + let operator = "==="; + let consequent = make_node(AST_BlockStatement, branch2, { + body: branch2.body + }); + let always = make_node(AST_BlockStatement, default_or_exact, { + body: [].concat(exact_exp || [], default_or_exact.body) + }); + if (body[0] === default_or_exact) { + operator = "!=="; + let tmp = always; + always = consequent; + consequent = tmp; + } + return make_node(AST_BlockStatement, self2, { + body: [ + make_node(AST_If, self2, { + condition: make_node(AST_Binary, self2, { + operator, + left: self2.expression, + right: branch2.expression + }), + body: consequent, + alternative: null + }) + ].concat(always) + }).optimize(compressor); + } + return self2; + function eliminate_branch(branch2, prev) { + if (prev && !aborts(prev)) { + prev.body = prev.body.concat(branch2.body); + } else { + trim_unreachable_code(compressor, branch2, decl); + } + } + function branches_equivalent(branch2, prev, insertBreak) { + let bbody = branch2.body; + let pbody = prev.body; + if (insertBreak) { + bbody = bbody.concat(make_node(AST_Break)); + } + if (bbody.length !== pbody.length) + return false; + let bblock = make_node(AST_BlockStatement, branch2, { body: bbody }); + let pblock = make_node(AST_BlockStatement, prev, { body: pbody }); + return bblock.equivalent_to(pblock); + } + function statement(expression) { + return make_node(AST_SimpleStatement, expression, { + body: expression + }); + } + function has_nested_break(root) { + let has_break = false; + let tw = new TreeWalker((node) => { + if (has_break) + return true; + if (node instanceof AST_Lambda) + return true; + if (node instanceof AST_SimpleStatement) + return true; + if (!is_break(node, tw)) + return; + let parent = tw.parent(); + if (parent instanceof AST_SwitchBranch && parent.body[parent.body.length - 1] === node) { + return; + } + has_break = true; + }); + root.walk(tw); + return has_break; + } + function is_break(node, stack) { + return node instanceof AST_Break && stack.loopcontrol_target(node) === self2; + } + function is_inert_body(branch2) { + return !aborts(branch2) && !make_node(AST_BlockStatement, branch2, { + body: branch2.body + }).has_side_effects(compressor); + } + }); + def_optimize(AST_Try, function(self2, compressor) { + if (self2.bcatch && self2.bfinally && self2.bfinally.body.every(is_empty)) + self2.bfinally = null; + if (compressor.option("dead_code") && self2.body.body.every(is_empty)) { + var body = []; + if (self2.bcatch) { + trim_unreachable_code(compressor, self2.bcatch, body); + } + if (self2.bfinally) + body.push(...self2.bfinally.body); + return make_node(AST_BlockStatement, self2, { + body + }).optimize(compressor); + } + return self2; + }); + AST_Definitions.DEFMETHOD("to_assignments", function(compressor) { + var reduce_vars = compressor.option("reduce_vars"); + var assignments = []; + for (const def of this.definitions) { + if (def.value) { + var name = make_node(AST_SymbolRef, def.name, def.name); + assignments.push(make_node(AST_Assign, def, { + operator: "=", + logical: false, + left: name, + right: def.value + })); + if (reduce_vars) + name.definition().fixed = false; + } + const thedef = def.name.definition(); + thedef.eliminated++; + thedef.replaced--; + } + if (assignments.length == 0) + return null; + return make_sequence(this, assignments); + }); + def_optimize(AST_Definitions, function(self2) { + if (self2.definitions.length == 0) { + return make_node(AST_EmptyStatement, self2); + } + return self2; + }); + def_optimize(AST_VarDef, function(self2, compressor) { + if (self2.name instanceof AST_SymbolLet && self2.value != null && is_undefined(self2.value, compressor)) { + self2.value = null; + } + return self2; + }); + def_optimize(AST_Import, function(self2) { + return self2; + }); + def_optimize(AST_Call, function(self2, compressor) { + var exp = self2.expression; + var fn = exp; + inline_array_like_spread(self2.args); + var simple_args = self2.args.every((arg2) => !(arg2 instanceof AST_Expansion)); + if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef) { + fn = fn.fixed_value(); + } + var is_func = fn instanceof AST_Lambda; + if (is_func && fn.pinned()) + return self2; + if (compressor.option("unused") && simple_args && is_func && !fn.uses_arguments) { + var pos = 0, last2 = 0; + for (var i = 0, len = self2.args.length; i < len; i++) { + if (fn.argnames[i] instanceof AST_Expansion) { + if (has_flag(fn.argnames[i].expression, UNUSED)) + while (i < len) { + var node = self2.args[i++].drop_side_effect_free(compressor); + if (node) { + self2.args[pos++] = node; + } + } + else + while (i < len) { + self2.args[pos++] = self2.args[i++]; + } + last2 = pos; + break; + } + var trim2 = i >= fn.argnames.length; + if (trim2 || has_flag(fn.argnames[i], UNUSED)) { + var node = self2.args[i].drop_side_effect_free(compressor); + if (node) { + self2.args[pos++] = node; + } else if (!trim2) { + self2.args[pos++] = make_node(AST_Number, self2.args[i], { + value: 0 + }); + continue; + } + } else { + self2.args[pos++] = self2.args[i]; + } + last2 = pos; + } + self2.args.length = last2; + } + if (compressor.option("unsafe") && !exp.contains_optional()) { + if (exp instanceof AST_Dot && exp.start.value === "Array" && exp.property === "from" && self2.args.length === 1) { + const [argument] = self2.args; + if (argument instanceof AST_Array) { + return make_node(AST_Array, argument, { + elements: argument.elements + }).optimize(compressor); + } + } + if (is_undeclared_ref(exp)) + switch (exp.name) { + case "Array": + if (self2.args.length != 1) { + return make_node(AST_Array, self2, { + elements: self2.args + }).optimize(compressor); + } else if (self2.args[0] instanceof AST_Number && self2.args[0].value <= 11) { + const elements2 = []; + for (let i2 = 0; i2 < self2.args[0].value; i2++) + elements2.push(new AST_Hole()); + return new AST_Array({ elements: elements2 }); + } + break; + case "Object": + if (self2.args.length == 0) { + return make_node(AST_Object, self2, { + properties: [] + }); + } + break; + case "String": + if (self2.args.length == 0) + return make_node(AST_String, self2, { + value: "" + }); + if (self2.args.length <= 1) + return make_node(AST_Binary, self2, { + left: self2.args[0], + operator: "+", + right: make_node(AST_String, self2, { value: "" }) + }).optimize(compressor); + break; + case "Number": + if (self2.args.length == 0) + return make_node(AST_Number, self2, { + value: 0 + }); + if (self2.args.length == 1 && compressor.option("unsafe_math")) { + return make_node(AST_UnaryPrefix, self2, { + expression: self2.args[0], + operator: "+" + }).optimize(compressor); + } + break; + case "Symbol": + if (self2.args.length == 1 && self2.args[0] instanceof AST_String && compressor.option("unsafe_symbols")) + self2.args.length = 0; + break; + case "Boolean": + if (self2.args.length == 0) + return make_node(AST_False, self2); + if (self2.args.length == 1) + return make_node(AST_UnaryPrefix, self2, { + expression: make_node(AST_UnaryPrefix, self2, { + expression: self2.args[0], + operator: "!" + }), + operator: "!" + }).optimize(compressor); + break; + case "RegExp": + var params = []; + if (self2.args.length >= 1 && self2.args.length <= 2 && self2.args.every((arg2) => { + var value2 = arg2.evaluate(compressor); + params.push(value2); + return arg2 !== value2; + }) && regexp_is_safe(params[0])) { + let [source, flags] = params; + source = regexp_source_fix(new RegExp(source).source); + const rx = make_node(AST_RegExp, self2, { + value: { source, flags } + }); + if (rx._eval(compressor) !== rx) { + return rx; + } + } + break; + } + else if (exp instanceof AST_Dot) + switch (exp.property) { + case "toString": + if (self2.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) { + return make_node(AST_Binary, self2, { + left: make_node(AST_String, self2, { value: "" }), + operator: "+", + right: exp.expression + }).optimize(compressor); + } + break; + case "join": + if (exp.expression instanceof AST_Array) + EXIT: { + var separator; + if (self2.args.length > 0) { + separator = self2.args[0].evaluate(compressor); + if (separator === self2.args[0]) + break EXIT; + } + var elements = []; + var consts = []; + for (var i = 0, len = exp.expression.elements.length; i < len; i++) { + var el = exp.expression.elements[i]; + if (el instanceof AST_Expansion) + break EXIT; + var value = el.evaluate(compressor); + if (value !== el) { + consts.push(value); + } else { + if (consts.length > 0) { + elements.push(make_node(AST_String, self2, { + value: consts.join(separator) + })); + consts.length = 0; + } + elements.push(el); + } + } + if (consts.length > 0) { + elements.push(make_node(AST_String, self2, { + value: consts.join(separator) + })); + } + if (elements.length == 0) + return make_node(AST_String, self2, { value: "" }); + if (elements.length == 1) { + if (elements[0].is_string(compressor)) { + return elements[0]; + } + return make_node(AST_Binary, elements[0], { + operator: "+", + left: make_node(AST_String, self2, { value: "" }), + right: elements[0] + }); + } + if (separator == "") { + var first; + if (elements[0].is_string(compressor) || elements[1].is_string(compressor)) { + first = elements.shift(); + } else { + first = make_node(AST_String, self2, { value: "" }); + } + return elements.reduce(function(prev, el2) { + return make_node(AST_Binary, el2, { + operator: "+", + left: prev, + right: el2 + }); + }, first).optimize(compressor); + } + var node = self2.clone(); + node.expression = node.expression.clone(); + node.expression.expression = node.expression.expression.clone(); + node.expression.expression.elements = elements; + return best_of(compressor, self2, node); + } + break; + case "charAt": + if (exp.expression.is_string(compressor)) { + var arg = self2.args[0]; + var index = arg ? arg.evaluate(compressor) : 0; + if (index !== arg) { + return make_node(AST_Sub, exp, { + expression: exp.expression, + property: make_node_from_constant(index | 0, arg || exp) + }).optimize(compressor); + } + } + break; + case "apply": + if (self2.args.length == 2 && self2.args[1] instanceof AST_Array) { + var args = self2.args[1].elements.slice(); + args.unshift(self2.args[0]); + return make_node(AST_Call, self2, { + expression: make_node(AST_Dot, exp, { + expression: exp.expression, + optional: false, + property: "call" + }), + args + }).optimize(compressor); + } + break; + case "call": + var func = exp.expression; + if (func instanceof AST_SymbolRef) { + func = func.fixed_value(); + } + if (func instanceof AST_Lambda && !func.contains_this()) { + return (self2.args.length ? make_sequence(this, [ + self2.args[0], + make_node(AST_Call, self2, { + expression: exp.expression, + args: self2.args.slice(1) + }) + ]) : make_node(AST_Call, self2, { + expression: exp.expression, + args: [] + })).optimize(compressor); + } + break; + } + } + if (compressor.option("unsafe_Function") && is_undeclared_ref(exp) && exp.name == "Function") { + if (self2.args.length == 0) + return make_node(AST_Function, self2, { + argnames: [], + body: [] + }).optimize(compressor); + if (self2.args.every((x) => x instanceof AST_String)) { + try { + var code = "n(function(" + self2.args.slice(0, -1).map(function(arg2) { + return arg2.value; + }).join(",") + "){" + self2.args[self2.args.length - 1].value + "})"; + var ast = parse(code); + var mangle = compressor.mangle_options(); + ast.figure_out_scope(mangle); + var comp = new Compressor(compressor.options, { + mangle_options: compressor._mangle_options + }); + ast = ast.transform(comp); + ast.figure_out_scope(mangle); + ast.compute_char_frequency(mangle); + ast.mangle_names(mangle); + var fun; + walk(ast, (node2) => { + if (is_func_expr(node2)) { + fun = node2; + return walk_abort; + } + }); + var code = OutputStream(); + AST_BlockStatement.prototype._codegen.call(fun, fun, code); + self2.args = [ + make_node(AST_String, self2, { + value: fun.argnames.map(function(arg2) { + return arg2.print_to_string(); + }).join(",") + }), + make_node(AST_String, self2.args[self2.args.length - 1], { + value: code.get().replace(/^{|}$/g, "") + }) + ]; + return self2; + } catch (ex) { + if (!(ex instanceof JS_Parse_Error)) { + throw ex; + } + } + } + } + return inline_into_call(self2, compressor); + }); + AST_Node.DEFMETHOD("contains_optional", function() { + if (this instanceof AST_PropAccess || this instanceof AST_Call || this instanceof AST_Chain) { + if (this.optional) { + return true; + } else { + return this.expression.contains_optional(); + } + } else { + return false; + } + }); + def_optimize(AST_New, function(self2, compressor) { + if (compressor.option("unsafe") && is_undeclared_ref(self2.expression) && ["Object", "RegExp", "Function", "Error", "Array"].includes(self2.expression.name)) + return make_node(AST_Call, self2, self2).transform(compressor); + return self2; + }); + def_optimize(AST_Sequence, function(self2, compressor) { + if (!compressor.option("side_effects")) + return self2; + var expressions = []; + filter_for_side_effects(); + var end = expressions.length - 1; + trim_right_for_undefined(); + if (end == 0) { + self2 = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]); + if (!(self2 instanceof AST_Sequence)) + self2 = self2.optimize(compressor); + return self2; + } + self2.expressions = expressions; + return self2; + function filter_for_side_effects() { + var first = first_in_statement(compressor); + var last2 = self2.expressions.length - 1; + self2.expressions.forEach(function(expr, index) { + if (index < last2) + expr = expr.drop_side_effect_free(compressor, first); + if (expr) { + merge_sequence(expressions, expr); + first = false; + } + }); + } + function trim_right_for_undefined() { + while (end > 0 && is_undefined(expressions[end], compressor)) + end--; + if (end < expressions.length - 1) { + expressions[end] = make_node(AST_UnaryPrefix, self2, { + operator: "void", + expression: expressions[end] + }); + expressions.length = end + 1; + } + } + }); + AST_Unary.DEFMETHOD("lift_sequences", function(compressor) { + if (compressor.option("sequences")) { + if (this.expression instanceof AST_Sequence) { + var x = this.expression.expressions.slice(); + var e = this.clone(); + e.expression = x.pop(); + x.push(e); + return make_sequence(this, x).optimize(compressor); + } + } + return this; + }); + def_optimize(AST_UnaryPostfix, function(self2, compressor) { + return self2.lift_sequences(compressor); + }); + def_optimize(AST_UnaryPrefix, function(self2, compressor) { + var e = self2.expression; + if (self2.operator == "delete" && !(e instanceof AST_SymbolRef || e instanceof AST_PropAccess || e instanceof AST_Chain || is_identifier_atom(e))) { + return make_sequence(self2, [e, make_node(AST_True, self2)]).optimize(compressor); + } + var seq = self2.lift_sequences(compressor); + if (seq !== self2) { + return seq; + } + if (compressor.option("side_effects") && self2.operator == "void") { + e = e.drop_side_effect_free(compressor); + if (e) { + self2.expression = e; + return self2; + } else { + return make_node(AST_Undefined, self2).optimize(compressor); + } + } + if (compressor.in_boolean_context()) { + switch (self2.operator) { + case "!": + if (e instanceof AST_UnaryPrefix && e.operator == "!") { + return e.expression; + } + if (e instanceof AST_Binary) { + self2 = best_of(compressor, self2, e.negate(compressor, first_in_statement(compressor))); + } + break; + case "typeof": + return (e instanceof AST_SymbolRef ? make_node(AST_True, self2) : make_sequence(self2, [ + e, + make_node(AST_True, self2) + ])).optimize(compressor); + } + } + if (self2.operator == "-" && e instanceof AST_Infinity) { + e = e.transform(compressor); + } + if (e instanceof AST_Binary && (self2.operator == "+" || self2.operator == "-") && (e.operator == "*" || e.operator == "/" || e.operator == "%")) { + return make_node(AST_Binary, self2, { + operator: e.operator, + left: make_node(AST_UnaryPrefix, e.left, { + operator: self2.operator, + expression: e.left + }), + right: e.right + }); + } + if (self2.operator != "-" || !(e instanceof AST_Number || e instanceof AST_Infinity || e instanceof AST_BigInt)) { + var ev = self2.evaluate(compressor); + if (ev !== self2) { + ev = make_node_from_constant(ev, self2).optimize(compressor); + return best_of(compressor, ev, self2); + } + } + return self2; + }); + AST_Binary.DEFMETHOD("lift_sequences", function(compressor) { + if (compressor.option("sequences")) { + if (this.left instanceof AST_Sequence) { + var x = this.left.expressions.slice(); + var e = this.clone(); + e.left = x.pop(); + x.push(e); + return make_sequence(this, x).optimize(compressor); + } + if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) { + var assign = this.operator == "=" && this.left instanceof AST_SymbolRef; + var x = this.right.expressions; + var last2 = x.length - 1; + for (var i = 0; i < last2; i++) { + if (!assign && x[i].has_side_effects(compressor)) + break; + } + if (i == last2) { + x = x.slice(); + var e = this.clone(); + e.right = x.pop(); + x.push(e); + return make_sequence(this, x).optimize(compressor); + } else if (i > 0) { + var e = this.clone(); + e.right = make_sequence(this.right, x.slice(i)); + x = x.slice(0, i); + x.push(e); + return make_sequence(this, x).optimize(compressor); + } + } + } + return this; + }); + var commutativeOperators = makePredicate("== === != !== * & | ^"); + function is_object(node) { + return node instanceof AST_Array || node instanceof AST_Lambda || node instanceof AST_Object || node instanceof AST_Class; + } + def_optimize(AST_Binary, function(self2, compressor) { + function reversible() { + return self2.left.is_constant() || self2.right.is_constant() || !self2.left.has_side_effects(compressor) && !self2.right.has_side_effects(compressor); + } + function reverse(op) { + if (reversible()) { + if (op) + self2.operator = op; + var tmp = self2.left; + self2.left = self2.right; + self2.right = tmp; + } + } + if (compressor.option("lhs_constants") && commutativeOperators.has(self2.operator)) { + if (self2.right.is_constant() && !self2.left.is_constant()) { + if (!(self2.left instanceof AST_Binary && PRECEDENCE[self2.left.operator] >= PRECEDENCE[self2.operator])) { + reverse(); + } + } + } + self2 = self2.lift_sequences(compressor); + if (compressor.option("comparisons")) + switch (self2.operator) { + case "===": + case "!==": + var is_strict_comparison = true; + if (self2.left.is_string(compressor) && self2.right.is_string(compressor) || self2.left.is_number(compressor) && self2.right.is_number(compressor) || self2.left.is_boolean() && self2.right.is_boolean() || self2.left.equivalent_to(self2.right)) { + self2.operator = self2.operator.substr(0, 2); + } + case "==": + case "!=": + if (!is_strict_comparison && is_undefined(self2.left, compressor)) { + self2.left = make_node(AST_Null, self2.left); + } else if (!is_strict_comparison && is_undefined(self2.right, compressor)) { + self2.right = make_node(AST_Null, self2.right); + } else if (compressor.option("typeofs") && self2.left instanceof AST_String && self2.left.value == "undefined" && self2.right instanceof AST_UnaryPrefix && self2.right.operator == "typeof") { + var expr = self2.right.expression; + if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor) : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) { + self2.right = expr; + self2.left = make_node(AST_Undefined, self2.left).optimize(compressor); + if (self2.operator.length == 2) + self2.operator += "="; + } + } else if (compressor.option("typeofs") && self2.left instanceof AST_UnaryPrefix && self2.left.operator == "typeof" && self2.right instanceof AST_String && self2.right.value == "undefined") { + var expr = self2.left.expression; + if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor) : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) { + self2.left = expr; + self2.right = make_node(AST_Undefined, self2.right).optimize(compressor); + if (self2.operator.length == 2) + self2.operator += "="; + } + } else if (self2.left instanceof AST_SymbolRef && self2.right instanceof AST_SymbolRef && self2.left.definition() === self2.right.definition() && is_object(self2.left.fixed_value())) { + return make_node(self2.operator[0] == "=" ? AST_True : AST_False, self2); + } + break; + case "&&": + case "||": + var lhs = self2.left; + if (lhs.operator == self2.operator) { + lhs = lhs.right; + } + if (lhs instanceof AST_Binary && lhs.operator == (self2.operator == "&&" ? "!==" : "===") && self2.right instanceof AST_Binary && lhs.operator == self2.right.operator && (is_undefined(lhs.left, compressor) && self2.right.left instanceof AST_Null || lhs.left instanceof AST_Null && is_undefined(self2.right.left, compressor)) && !lhs.right.has_side_effects(compressor) && lhs.right.equivalent_to(self2.right.right)) { + var combined = make_node(AST_Binary, self2, { + operator: lhs.operator.slice(0, -1), + left: make_node(AST_Null, self2), + right: lhs.right + }); + if (lhs !== self2.left) { + combined = make_node(AST_Binary, self2, { + operator: self2.operator, + left: self2.left.left, + right: combined + }); + } + return combined; + } + break; + } + if (self2.operator == "+" && compressor.in_boolean_context()) { + var ll = self2.left.evaluate(compressor); + var rr = self2.right.evaluate(compressor); + if (ll && typeof ll == "string") { + return make_sequence(self2, [ + self2.right, + make_node(AST_True, self2) + ]).optimize(compressor); + } + if (rr && typeof rr == "string") { + return make_sequence(self2, [ + self2.left, + make_node(AST_True, self2) + ]).optimize(compressor); + } + } + if (compressor.option("comparisons") && self2.is_boolean()) { + if (!(compressor.parent() instanceof AST_Binary) || compressor.parent() instanceof AST_Assign) { + var negated = make_node(AST_UnaryPrefix, self2, { + operator: "!", + expression: self2.negate(compressor, first_in_statement(compressor)) + }); + self2 = best_of(compressor, self2, negated); + } + if (compressor.option("unsafe_comps")) { + switch (self2.operator) { + case "<": + reverse(">"); + break; + case "<=": + reverse(">="); + break; + } + } + } + if (self2.operator == "+") { + if (self2.right instanceof AST_String && self2.right.getValue() == "" && self2.left.is_string(compressor)) { + return self2.left; + } + if (self2.left instanceof AST_String && self2.left.getValue() == "" && self2.right.is_string(compressor)) { + return self2.right; + } + if (self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.left instanceof AST_String && self2.left.left.getValue() == "" && self2.right.is_string(compressor)) { + self2.left = self2.left.right; + return self2; + } + } + if (compressor.option("evaluate")) { + switch (self2.operator) { + case "&&": + var ll = has_flag(self2.left, TRUTHY) ? true : has_flag(self2.left, FALSY) ? false : self2.left.evaluate(compressor); + if (!ll) { + return maintain_this_binding(compressor.parent(), compressor.self(), self2.left).optimize(compressor); + } else if (!(ll instanceof AST_Node)) { + return make_sequence(self2, [self2.left, self2.right]).optimize(compressor); + } + var rr = self2.right.evaluate(compressor); + if (!rr) { + if (compressor.in_boolean_context()) { + return make_sequence(self2, [ + self2.left, + make_node(AST_False, self2) + ]).optimize(compressor); + } else { + set_flag(self2, FALSY); + } + } else if (!(rr instanceof AST_Node)) { + var parent = compressor.parent(); + if (parent.operator == "&&" && parent.left === compressor.self() || compressor.in_boolean_context()) { + return self2.left.optimize(compressor); + } + } + if (self2.left.operator == "||") { + var lr = self2.left.right.evaluate(compressor); + if (!lr) + return make_node(AST_Conditional, self2, { + condition: self2.left.left, + consequent: self2.right, + alternative: self2.left.right + }).optimize(compressor); + } + break; + case "||": + var ll = has_flag(self2.left, TRUTHY) ? true : has_flag(self2.left, FALSY) ? false : self2.left.evaluate(compressor); + if (!ll) { + return make_sequence(self2, [self2.left, self2.right]).optimize(compressor); + } else if (!(ll instanceof AST_Node)) { + return maintain_this_binding(compressor.parent(), compressor.self(), self2.left).optimize(compressor); + } + var rr = self2.right.evaluate(compressor); + if (!rr) { + var parent = compressor.parent(); + if (parent.operator == "||" && parent.left === compressor.self() || compressor.in_boolean_context()) { + return self2.left.optimize(compressor); + } + } else if (!(rr instanceof AST_Node)) { + if (compressor.in_boolean_context()) { + return make_sequence(self2, [ + self2.left, + make_node(AST_True, self2) + ]).optimize(compressor); + } else { + set_flag(self2, TRUTHY); + } + } + if (self2.left.operator == "&&") { + var lr = self2.left.right.evaluate(compressor); + if (lr && !(lr instanceof AST_Node)) + return make_node(AST_Conditional, self2, { + condition: self2.left.left, + consequent: self2.left.right, + alternative: self2.right + }).optimize(compressor); + } + break; + case "??": + if (is_nullish(self2.left, compressor)) { + return self2.right; + } + var ll = self2.left.evaluate(compressor); + if (!(ll instanceof AST_Node)) { + return ll == null ? self2.right : self2.left; + } + if (compressor.in_boolean_context()) { + const rr2 = self2.right.evaluate(compressor); + if (!(rr2 instanceof AST_Node) && !rr2) { + return self2.left; + } + } + } + var associative = true; + switch (self2.operator) { + case "+": + if (self2.right instanceof AST_Constant && self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.is_string(compressor)) { + var binary = make_node(AST_Binary, self2, { + operator: "+", + left: self2.left.right, + right: self2.right + }); + var r = binary.optimize(compressor); + if (binary !== r) { + self2 = make_node(AST_Binary, self2, { + operator: "+", + left: self2.left.left, + right: r + }); + } + } + if (self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.is_string(compressor) && self2.right instanceof AST_Binary && self2.right.operator == "+" && self2.right.is_string(compressor)) { + var binary = make_node(AST_Binary, self2, { + operator: "+", + left: self2.left.right, + right: self2.right.left + }); + var m = binary.optimize(compressor); + if (binary !== m) { + self2 = make_node(AST_Binary, self2, { + operator: "+", + left: make_node(AST_Binary, self2.left, { + operator: "+", + left: self2.left.left, + right: m + }), + right: self2.right.right + }); + } + } + if (self2.right instanceof AST_UnaryPrefix && self2.right.operator == "-" && self2.left.is_number(compressor)) { + self2 = make_node(AST_Binary, self2, { + operator: "-", + left: self2.left, + right: self2.right.expression + }); + break; + } + if (self2.left instanceof AST_UnaryPrefix && self2.left.operator == "-" && reversible() && self2.right.is_number(compressor)) { + self2 = make_node(AST_Binary, self2, { + operator: "-", + left: self2.right, + right: self2.left.expression + }); + break; + } + if (self2.left instanceof AST_TemplateString) { + var l = self2.left; + var r = self2.right.evaluate(compressor); + if (r != self2.right) { + l.segments[l.segments.length - 1].value += String(r); + return l; + } + } + if (self2.right instanceof AST_TemplateString) { + var r = self2.right; + var l = self2.left.evaluate(compressor); + if (l != self2.left) { + r.segments[0].value = String(l) + r.segments[0].value; + return r; + } + } + if (self2.left instanceof AST_TemplateString && self2.right instanceof AST_TemplateString) { + var l = self2.left; + var segments = l.segments; + var r = self2.right; + segments[segments.length - 1].value += r.segments[0].value; + for (var i = 1; i < r.segments.length; i++) { + segments.push(r.segments[i]); + } + return l; + } + case "*": + associative = compressor.option("unsafe_math"); + case "&": + case "|": + case "^": + if (self2.left.is_number(compressor) && self2.right.is_number(compressor) && reversible() && !(self2.left instanceof AST_Binary && self2.left.operator != self2.operator && PRECEDENCE[self2.left.operator] >= PRECEDENCE[self2.operator])) { + var reversed = make_node(AST_Binary, self2, { + operator: self2.operator, + left: self2.right, + right: self2.left + }); + if (self2.right instanceof AST_Constant && !(self2.left instanceof AST_Constant)) { + self2 = best_of(compressor, reversed, self2); + } else { + self2 = best_of(compressor, self2, reversed); + } + } + if (associative && self2.is_number(compressor)) { + if (self2.right instanceof AST_Binary && self2.right.operator == self2.operator) { + self2 = make_node(AST_Binary, self2, { + operator: self2.operator, + left: make_node(AST_Binary, self2.left, { + operator: self2.operator, + left: self2.left, + right: self2.right.left, + start: self2.left.start, + end: self2.right.left.end + }), + right: self2.right.right + }); + } + if (self2.right instanceof AST_Constant && self2.left instanceof AST_Binary && self2.left.operator == self2.operator) { + if (self2.left.left instanceof AST_Constant) { + self2 = make_node(AST_Binary, self2, { + operator: self2.operator, + left: make_node(AST_Binary, self2.left, { + operator: self2.operator, + left: self2.left.left, + right: self2.right, + start: self2.left.left.start, + end: self2.right.end + }), + right: self2.left.right + }); + } else if (self2.left.right instanceof AST_Constant) { + self2 = make_node(AST_Binary, self2, { + operator: self2.operator, + left: make_node(AST_Binary, self2.left, { + operator: self2.operator, + left: self2.left.right, + right: self2.right, + start: self2.left.right.start, + end: self2.right.end + }), + right: self2.left.left + }); + } + } + if (self2.left instanceof AST_Binary && self2.left.operator == self2.operator && self2.left.right instanceof AST_Constant && self2.right instanceof AST_Binary && self2.right.operator == self2.operator && self2.right.left instanceof AST_Constant) { + self2 = make_node(AST_Binary, self2, { + operator: self2.operator, + left: make_node(AST_Binary, self2.left, { + operator: self2.operator, + left: make_node(AST_Binary, self2.left.left, { + operator: self2.operator, + left: self2.left.right, + right: self2.right.left, + start: self2.left.right.start, + end: self2.right.left.end + }), + right: self2.left.left + }), + right: self2.right.right + }); + } + } + } + } + if (self2.right instanceof AST_Binary && self2.right.operator == self2.operator && (lazy_op.has(self2.operator) || self2.operator == "+" && (self2.right.left.is_string(compressor) || self2.left.is_string(compressor) && self2.right.right.is_string(compressor)))) { + self2.left = make_node(AST_Binary, self2.left, { + operator: self2.operator, + left: self2.left.transform(compressor), + right: self2.right.left.transform(compressor) + }); + self2.right = self2.right.right.transform(compressor); + return self2.transform(compressor); + } + var ev = self2.evaluate(compressor); + if (ev !== self2) { + ev = make_node_from_constant(ev, self2).optimize(compressor); + return best_of(compressor, ev, self2); + } + return self2; + }); + def_optimize(AST_SymbolExport, function(self2) { + return self2; + }); + def_optimize(AST_SymbolRef, function(self2, compressor) { + if (!compressor.option("ie8") && is_undeclared_ref(self2) && !compressor.find_parent(AST_With)) { + switch (self2.name) { + case "undefined": + return make_node(AST_Undefined, self2).optimize(compressor); + case "NaN": + return make_node(AST_NaN, self2).optimize(compressor); + case "Infinity": + return make_node(AST_Infinity, self2).optimize(compressor); + } + } + if (compressor.option("reduce_vars") && !compressor.is_lhs()) { + return inline_into_symbolref(self2, compressor); + } else { + return self2; + } + }); + function is_atomic(lhs, self2) { + return lhs instanceof AST_SymbolRef || lhs.TYPE === self2.TYPE; + } + def_optimize(AST_Undefined, function(self2, compressor) { + if (compressor.option("unsafe_undefined")) { + var undef = find_variable(compressor, "undefined"); + if (undef) { + var ref = make_node(AST_SymbolRef, self2, { + name: "undefined", + scope: undef.scope, + thedef: undef + }); + set_flag(ref, UNDEFINED); + return ref; + } + } + var lhs = compressor.is_lhs(); + if (lhs && is_atomic(lhs, self2)) + return self2; + return make_node(AST_UnaryPrefix, self2, { + operator: "void", + expression: make_node(AST_Number, self2, { + value: 0 + }) + }); + }); + def_optimize(AST_Infinity, function(self2, compressor) { + var lhs = compressor.is_lhs(); + if (lhs && is_atomic(lhs, self2)) + return self2; + if (compressor.option("keep_infinity") && !(lhs && !is_atomic(lhs, self2)) && !find_variable(compressor, "Infinity")) { + return self2; + } + return make_node(AST_Binary, self2, { + operator: "/", + left: make_node(AST_Number, self2, { + value: 1 + }), + right: make_node(AST_Number, self2, { + value: 0 + }) + }); + }); + def_optimize(AST_NaN, function(self2, compressor) { + var lhs = compressor.is_lhs(); + if (lhs && !is_atomic(lhs, self2) || find_variable(compressor, "NaN")) { + return make_node(AST_Binary, self2, { + operator: "/", + left: make_node(AST_Number, self2, { + value: 0 + }), + right: make_node(AST_Number, self2, { + value: 0 + }) + }); + } + return self2; + }); + const ASSIGN_OPS = makePredicate("+ - / * % >> << >>> | ^ &"); + const ASSIGN_OPS_COMMUTATIVE = makePredicate("* | ^ &"); + def_optimize(AST_Assign, function(self2, compressor) { + if (self2.logical) { + return self2.lift_sequences(compressor); + } + var def; + if (self2.operator === "=" && self2.left instanceof AST_SymbolRef && self2.left.name !== "arguments" && !(def = self2.left.definition()).undeclared && self2.right.equivalent_to(self2.left)) { + return self2.right; + } + if (compressor.option("dead_code") && self2.left instanceof AST_SymbolRef && (def = self2.left.definition()).scope === compressor.find_parent(AST_Lambda)) { + var level = 0, node, parent = self2; + do { + node = parent; + parent = compressor.parent(level++); + if (parent instanceof AST_Exit) { + if (in_try(level, parent)) + break; + if (is_reachable(def.scope, [def])) + break; + if (self2.operator == "=") + return self2.right; + def.fixed = false; + return make_node(AST_Binary, self2, { + operator: self2.operator.slice(0, -1), + left: self2.left, + right: self2.right + }).optimize(compressor); + } + } while (parent instanceof AST_Binary && parent.right === node || parent instanceof AST_Sequence && parent.tail_node() === node); + } + self2 = self2.lift_sequences(compressor); + if (self2.operator == "=" && self2.left instanceof AST_SymbolRef && self2.right instanceof AST_Binary) { + if (self2.right.left instanceof AST_SymbolRef && self2.right.left.name == self2.left.name && ASSIGN_OPS.has(self2.right.operator)) { + self2.operator = self2.right.operator + "="; + self2.right = self2.right.right; + } else if (self2.right.right instanceof AST_SymbolRef && self2.right.right.name == self2.left.name && ASSIGN_OPS_COMMUTATIVE.has(self2.right.operator) && !self2.right.left.has_side_effects(compressor)) { + self2.operator = self2.right.operator + "="; + self2.right = self2.right.left; + } + } + return self2; + function in_try(level2, node2) { + function may_assignment_throw() { + const right = self2.right; + self2.right = make_node(AST_Null, right); + const may_throw = node2.may_throw(compressor); + self2.right = right; + return may_throw; + } + var stop_at = self2.left.definition().scope.get_defun_scope(); + var parent2; + while ((parent2 = compressor.parent(level2++)) !== stop_at) { + if (parent2 instanceof AST_Try) { + if (parent2.bfinally) + return true; + if (parent2.bcatch && may_assignment_throw()) + return true; + } + } + } + }); + def_optimize(AST_DefaultAssign, function(self2, compressor) { + if (!compressor.option("evaluate")) { + return self2; + } + var evaluateRight = self2.right.evaluate(compressor); + let lambda, iife; + if (evaluateRight === void 0) { + if ((lambda = compressor.parent()) instanceof AST_Lambda ? compressor.option("keep_fargs") === false || (iife = compressor.parent(1)).TYPE === "Call" && iife.expression === lambda : true) { + self2 = self2.left; + } + } else if (evaluateRight !== self2.right) { + evaluateRight = make_node_from_constant(evaluateRight, self2.right); + self2.right = best_of_expression(evaluateRight, self2.right); + } + return self2; + }); + function is_nullish_check(check, check_subject, compressor) { + if (check_subject.may_throw(compressor)) + return false; + let nullish_side; + if (check instanceof AST_Binary && check.operator === "==" && ((nullish_side = is_nullish(check.left, compressor) && check.left) || (nullish_side = is_nullish(check.right, compressor) && check.right)) && (nullish_side === check.left ? check.right : check.left).equivalent_to(check_subject)) { + return true; + } + if (check instanceof AST_Binary && check.operator === "||") { + let null_cmp; + let undefined_cmp; + const find_comparison = (cmp) => { + if (!(cmp instanceof AST_Binary && (cmp.operator === "===" || cmp.operator === "=="))) { + return false; + } + let found = 0; + let defined_side; + if (cmp.left instanceof AST_Null) { + found++; + null_cmp = cmp; + defined_side = cmp.right; + } + if (cmp.right instanceof AST_Null) { + found++; + null_cmp = cmp; + defined_side = cmp.left; + } + if (is_undefined(cmp.left, compressor)) { + found++; + undefined_cmp = cmp; + defined_side = cmp.right; + } + if (is_undefined(cmp.right, compressor)) { + found++; + undefined_cmp = cmp; + defined_side = cmp.left; + } + if (found !== 1) { + return false; + } + if (!defined_side.equivalent_to(check_subject)) { + return false; + } + return true; + }; + if (!find_comparison(check.left)) + return false; + if (!find_comparison(check.right)) + return false; + if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) { + return true; + } + } + return false; + } + def_optimize(AST_Conditional, function(self2, compressor) { + if (!compressor.option("conditionals")) + return self2; + if (self2.condition instanceof AST_Sequence) { + var expressions = self2.condition.expressions.slice(); + self2.condition = expressions.pop(); + expressions.push(self2); + return make_sequence(self2, expressions); + } + var cond = self2.condition.evaluate(compressor); + if (cond !== self2.condition) { + if (cond) { + return maintain_this_binding(compressor.parent(), compressor.self(), self2.consequent); + } else { + return maintain_this_binding(compressor.parent(), compressor.self(), self2.alternative); + } + } + var negated = cond.negate(compressor, first_in_statement(compressor)); + if (best_of(compressor, cond, negated) === negated) { + self2 = make_node(AST_Conditional, self2, { + condition: negated, + consequent: self2.alternative, + alternative: self2.consequent + }); + } + var condition = self2.condition; + var consequent = self2.consequent; + var alternative = self2.alternative; + if (condition instanceof AST_SymbolRef && consequent instanceof AST_SymbolRef && condition.definition() === consequent.definition()) { + return make_node(AST_Binary, self2, { + operator: "||", + left: condition, + right: alternative + }); + } + if (consequent instanceof AST_Assign && alternative instanceof AST_Assign && consequent.operator === alternative.operator && consequent.logical === alternative.logical && consequent.left.equivalent_to(alternative.left) && (!self2.condition.has_side_effects(compressor) || consequent.operator == "=" && !consequent.left.has_side_effects(compressor))) { + return make_node(AST_Assign, self2, { + operator: consequent.operator, + left: consequent.left, + logical: consequent.logical, + right: make_node(AST_Conditional, self2, { + condition: self2.condition, + consequent: consequent.right, + alternative: alternative.right + }) + }); + } + var arg_index; + if (consequent instanceof AST_Call && alternative.TYPE === consequent.TYPE && consequent.args.length > 0 && consequent.args.length == alternative.args.length && consequent.expression.equivalent_to(alternative.expression) && !self2.condition.has_side_effects(compressor) && !consequent.expression.has_side_effects(compressor) && typeof (arg_index = single_arg_diff()) == "number") { + var node = consequent.clone(); + node.args[arg_index] = make_node(AST_Conditional, self2, { + condition: self2.condition, + consequent: consequent.args[arg_index], + alternative: alternative.args[arg_index] + }); + return node; + } + if (alternative instanceof AST_Conditional && consequent.equivalent_to(alternative.consequent)) { + return make_node(AST_Conditional, self2, { + condition: make_node(AST_Binary, self2, { + operator: "||", + left: condition, + right: alternative.condition + }), + consequent, + alternative: alternative.alternative + }).optimize(compressor); + } + if (compressor.option("ecma") >= 2020 && is_nullish_check(condition, alternative, compressor)) { + return make_node(AST_Binary, self2, { + operator: "??", + left: alternative, + right: consequent + }).optimize(compressor); + } + if (alternative instanceof AST_Sequence && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) { + return make_sequence(self2, [ + make_node(AST_Binary, self2, { + operator: "||", + left: condition, + right: make_sequence(self2, alternative.expressions.slice(0, -1)) + }), + consequent + ]).optimize(compressor); + } + if (alternative instanceof AST_Binary && alternative.operator == "&&" && consequent.equivalent_to(alternative.right)) { + return make_node(AST_Binary, self2, { + operator: "&&", + left: make_node(AST_Binary, self2, { + operator: "||", + left: condition, + right: alternative.left + }), + right: consequent + }).optimize(compressor); + } + if (consequent instanceof AST_Conditional && consequent.alternative.equivalent_to(alternative)) { + return make_node(AST_Conditional, self2, { + condition: make_node(AST_Binary, self2, { + left: self2.condition, + operator: "&&", + right: consequent.condition + }), + consequent: consequent.consequent, + alternative + }); + } + if (consequent.equivalent_to(alternative)) { + return make_sequence(self2, [ + self2.condition, + consequent + ]).optimize(compressor); + } + if (consequent instanceof AST_Binary && consequent.operator == "||" && consequent.right.equivalent_to(alternative)) { + return make_node(AST_Binary, self2, { + operator: "||", + left: make_node(AST_Binary, self2, { + operator: "&&", + left: self2.condition, + right: consequent.left + }), + right: alternative + }).optimize(compressor); + } + const in_bool = compressor.in_boolean_context(); + if (is_true(self2.consequent)) { + if (is_false(self2.alternative)) { + return booleanize(self2.condition); + } + return make_node(AST_Binary, self2, { + operator: "||", + left: booleanize(self2.condition), + right: self2.alternative + }); + } + if (is_false(self2.consequent)) { + if (is_true(self2.alternative)) { + return booleanize(self2.condition.negate(compressor)); + } + return make_node(AST_Binary, self2, { + operator: "&&", + left: booleanize(self2.condition.negate(compressor)), + right: self2.alternative + }); + } + if (is_true(self2.alternative)) { + return make_node(AST_Binary, self2, { + operator: "||", + left: booleanize(self2.condition.negate(compressor)), + right: self2.consequent + }); + } + if (is_false(self2.alternative)) { + return make_node(AST_Binary, self2, { + operator: "&&", + left: booleanize(self2.condition), + right: self2.consequent + }); + } + return self2; + function booleanize(node2) { + if (node2.is_boolean()) + return node2; + return make_node(AST_UnaryPrefix, node2, { + operator: "!", + expression: node2.negate(compressor) + }); + } + function is_true(node2) { + return node2 instanceof AST_True || in_bool && node2 instanceof AST_Constant && node2.getValue() || node2 instanceof AST_UnaryPrefix && node2.operator == "!" && node2.expression instanceof AST_Constant && !node2.expression.getValue(); + } + function is_false(node2) { + return node2 instanceof AST_False || in_bool && node2 instanceof AST_Constant && !node2.getValue() || node2 instanceof AST_UnaryPrefix && node2.operator == "!" && node2.expression instanceof AST_Constant && node2.expression.getValue(); + } + function single_arg_diff() { + var a = consequent.args; + var b = alternative.args; + for (var i = 0, len = a.length; i < len; i++) { + if (a[i] instanceof AST_Expansion) + return; + if (!a[i].equivalent_to(b[i])) { + if (b[i] instanceof AST_Expansion) + return; + for (var j = i + 1; j < len; j++) { + if (a[j] instanceof AST_Expansion) + return; + if (!a[j].equivalent_to(b[j])) + return; + } + return i; + } + } + } + }); + def_optimize(AST_Boolean, function(self2, compressor) { + if (compressor.in_boolean_context()) + return make_node(AST_Number, self2, { + value: +self2.value + }); + var p = compressor.parent(); + if (compressor.option("booleans_as_integers")) { + if (p instanceof AST_Binary && (p.operator == "===" || p.operator == "!==")) { + p.operator = p.operator.replace(/=$/, ""); + } + return make_node(AST_Number, self2, { + value: +self2.value + }); + } + if (compressor.option("booleans")) { + if (p instanceof AST_Binary && (p.operator == "==" || p.operator == "!=")) { + return make_node(AST_Number, self2, { + value: +self2.value + }); + } + return make_node(AST_UnaryPrefix, self2, { + operator: "!", + expression: make_node(AST_Number, self2, { + value: 1 - self2.value + }) + }); + } + return self2; + }); + function safe_to_flatten(value, compressor) { + if (value instanceof AST_SymbolRef) { + value = value.fixed_value(); + } + if (!value) + return false; + if (!(value instanceof AST_Lambda || value instanceof AST_Class)) + return true; + if (!(value instanceof AST_Lambda && value.contains_this())) + return true; + return compressor.parent() instanceof AST_New; + } + AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) { + if (!compressor.option("properties")) + return; + if (key === "__proto__") + return; + var arrows = compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015; + var expr = this.expression; + if (expr instanceof AST_Object) { + var props = expr.properties; + for (var i = props.length; --i >= 0; ) { + var prop = props[i]; + if ("" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) { + const all_props_flattenable = props.every((p) => (p instanceof AST_ObjectKeyVal || arrows && p instanceof AST_ConciseMethod && !p.is_generator) && !p.computed_key()); + if (!all_props_flattenable) + return; + if (!safe_to_flatten(prop.value, compressor)) + return; + return make_node(AST_Sub, this, { + expression: make_node(AST_Array, expr, { + elements: props.map(function(prop2) { + var v = prop2.value; + if (v instanceof AST_Accessor) { + v = make_node(AST_Function, v, v); + } + var k = prop2.key; + if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) { + return make_sequence(prop2, [k, v]); + } + return v; + }) + }), + property: make_node(AST_Number, this, { + value: i + }) + }); + } + } + } + }); + def_optimize(AST_Sub, function(self2, compressor) { + var expr = self2.expression; + var prop = self2.property; + if (compressor.option("properties")) { + var key = prop.evaluate(compressor); + if (key !== prop) { + if (typeof key == "string") { + if (key == "undefined") { + key = void 0; + } else { + var value = parseFloat(key); + if (value.toString() == key) { + key = value; + } + } + } + prop = self2.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor)); + var property = "" + key; + if (is_basic_identifier_string(property) && property.length <= prop.size() + 1) { + return make_node(AST_Dot, self2, { + expression: expr, + optional: self2.optional, + property, + quote: prop.quote + }).optimize(compressor); + } + } + } + var fn; + OPT_ARGUMENTS: + if (compressor.option("arguments") && expr instanceof AST_SymbolRef && expr.name == "arguments" && expr.definition().orig.length == 1 && (fn = expr.scope) instanceof AST_Lambda && fn.uses_arguments && !(fn instanceof AST_Arrow) && prop instanceof AST_Number) { + var index = prop.getValue(); + var params = /* @__PURE__ */ new Set(); + var argnames = fn.argnames; + for (var n = 0; n < argnames.length; n++) { + if (!(argnames[n] instanceof AST_SymbolFunarg)) { + break OPT_ARGUMENTS; + } + var param = argnames[n].name; + if (params.has(param)) { + break OPT_ARGUMENTS; + } + params.add(param); + } + var argname = fn.argnames[index]; + if (argname && compressor.has_directive("use strict")) { + var def = argname.definition(); + if (!compressor.option("reduce_vars") || def.assignments || def.orig.length > 1) { + argname = null; + } + } else if (!argname && !compressor.option("keep_fargs") && index < fn.argnames.length + 5) { + while (index >= fn.argnames.length) { + argname = fn.create_symbol(AST_SymbolFunarg, { + source: fn, + scope: fn, + tentative_name: "argument_" + fn.argnames.length + }); + fn.argnames.push(argname); + } + } + if (argname) { + var sym = make_node(AST_SymbolRef, self2, argname); + sym.reference({}); + clear_flag(argname, UNUSED); + return sym; + } + } + if (compressor.is_lhs()) + return self2; + if (key !== prop) { + var sub = self2.flatten_object(property, compressor); + if (sub) { + expr = self2.expression = sub.expression; + prop = self2.property = sub.property; + } + } + if (compressor.option("properties") && compressor.option("side_effects") && prop instanceof AST_Number && expr instanceof AST_Array) { + var index = prop.getValue(); + var elements = expr.elements; + var retValue = elements[index]; + FLATTEN: + if (safe_to_flatten(retValue, compressor)) { + var flatten = true; + var values = []; + for (var i = elements.length; --i > index; ) { + var value = elements[i].drop_side_effect_free(compressor); + if (value) { + values.unshift(value); + if (flatten && value.has_side_effects(compressor)) + flatten = false; + } + } + if (retValue instanceof AST_Expansion) + break FLATTEN; + retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue; + if (!flatten) + values.unshift(retValue); + while (--i >= 0) { + var value = elements[i]; + if (value instanceof AST_Expansion) + break FLATTEN; + value = value.drop_side_effect_free(compressor); + if (value) + values.unshift(value); + else + index--; + } + if (flatten) { + values.push(retValue); + return make_sequence(self2, values).optimize(compressor); + } else + return make_node(AST_Sub, self2, { + expression: make_node(AST_Array, expr, { + elements: values + }), + property: make_node(AST_Number, prop, { + value: index + }) + }); + } + } + var ev = self2.evaluate(compressor); + if (ev !== self2) { + ev = make_node_from_constant(ev, self2).optimize(compressor); + return best_of(compressor, ev, self2); + } + return self2; + }); + def_optimize(AST_Chain, function(self2, compressor) { + if (is_nullish(self2.expression, compressor)) { + let parent = compressor.parent(); + if (parent instanceof AST_UnaryPrefix && parent.operator === "delete") { + return make_node_from_constant(0, self2); + } + return make_node(AST_Undefined, self2); + } + return self2; + }); + def_optimize(AST_Dot, function(self2, compressor) { + const parent = compressor.parent(); + if (compressor.is_lhs()) + return self2; + if (compressor.option("unsafe_proto") && self2.expression instanceof AST_Dot && self2.expression.property == "prototype") { + var exp = self2.expression.expression; + if (is_undeclared_ref(exp)) + switch (exp.name) { + case "Array": + self2.expression = make_node(AST_Array, self2.expression, { + elements: [] + }); + break; + case "Function": + self2.expression = make_node(AST_Function, self2.expression, { + argnames: [], + body: [] + }); + break; + case "Number": + self2.expression = make_node(AST_Number, self2.expression, { + value: 0 + }); + break; + case "Object": + self2.expression = make_node(AST_Object, self2.expression, { + properties: [] + }); + break; + case "RegExp": + self2.expression = make_node(AST_RegExp, self2.expression, { + value: { source: "t", flags: "" } + }); + break; + case "String": + self2.expression = make_node(AST_String, self2.expression, { + value: "" + }); + break; + } + } + if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) { + const sub = self2.flatten_object(self2.property, compressor); + if (sub) + return sub.optimize(compressor); + } + if (self2.expression instanceof AST_PropAccess && parent instanceof AST_PropAccess) { + return self2; + } + let ev = self2.evaluate(compressor); + if (ev !== self2) { + ev = make_node_from_constant(ev, self2).optimize(compressor); + return best_of(compressor, ev, self2); + } + return self2; + }); + function literals_in_boolean_context(self2, compressor) { + if (compressor.in_boolean_context()) { + return best_of(compressor, self2, make_sequence(self2, [ + self2, + make_node(AST_True, self2) + ]).optimize(compressor)); + } + return self2; + } + function inline_array_like_spread(elements) { + for (var i = 0; i < elements.length; i++) { + var el = elements[i]; + if (el instanceof AST_Expansion) { + var expr = el.expression; + if (expr instanceof AST_Array && !expr.elements.some((elm) => elm instanceof AST_Hole)) { + elements.splice(i, 1, ...expr.elements); + i--; + } + } + } + } + def_optimize(AST_Array, function(self2, compressor) { + var optimized = literals_in_boolean_context(self2, compressor); + if (optimized !== self2) { + return optimized; + } + inline_array_like_spread(self2.elements); + return self2; + }); + function inline_object_prop_spread(props, compressor) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (prop instanceof AST_Expansion) { + const expr = prop.expression; + if (expr instanceof AST_Object && expr.properties.every((prop2) => prop2 instanceof AST_ObjectKeyVal)) { + props.splice(i, 1, ...expr.properties); + i--; + } else if (expr instanceof AST_Constant && !(expr instanceof AST_String)) { + props.splice(i, 1); + i--; + } else if (is_nullish(expr, compressor)) { + props.splice(i, 1); + i--; + } + } + } + } + def_optimize(AST_Object, function(self2, compressor) { + var optimized = literals_in_boolean_context(self2, compressor); + if (optimized !== self2) { + return optimized; + } + inline_object_prop_spread(self2.properties, compressor); + return self2; + }); + def_optimize(AST_RegExp, literals_in_boolean_context); + def_optimize(AST_Return, function(self2, compressor) { + if (self2.value && is_undefined(self2.value, compressor)) { + self2.value = null; + } + return self2; + }); + def_optimize(AST_Arrow, opt_AST_Lambda); + def_optimize(AST_Function, function(self2, compressor) { + self2 = opt_AST_Lambda(self2, compressor); + if (compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015 && !self2.name && !self2.is_generator && !self2.uses_arguments && !self2.pinned()) { + const uses_this = walk(self2, (node) => { + if (node instanceof AST_This) + return walk_abort; + }); + if (!uses_this) + return make_node(AST_Arrow, self2, self2).optimize(compressor); + } + return self2; + }); + def_optimize(AST_Class, function(self2) { + for (let i = 0; i < self2.properties.length; i++) { + const prop = self2.properties[i]; + if (prop instanceof AST_ClassStaticBlock && prop.body.length == 0) { + self2.properties.splice(i, 1); + i--; + } + } + return self2; + }); + def_optimize(AST_ClassStaticBlock, function(self2, compressor) { + tighten_body(self2.body, compressor); + return self2; + }); + def_optimize(AST_Yield, function(self2, compressor) { + if (self2.expression && !self2.is_star && is_undefined(self2.expression, compressor)) { + self2.expression = null; + } + return self2; + }); + def_optimize(AST_TemplateString, function(self2, compressor) { + if (!compressor.option("evaluate") || compressor.parent() instanceof AST_PrefixedTemplateString) { + return self2; + } + var segments = []; + for (var i = 0; i < self2.segments.length; i++) { + var segment = self2.segments[i]; + if (segment instanceof AST_Node) { + var result = segment.evaluate(compressor); + if (result !== segment && (result + "").length <= segment.size() + "${}".length) { + segments[segments.length - 1].value = segments[segments.length - 1].value + result + self2.segments[++i].value; + continue; + } + if (segment instanceof AST_TemplateString) { + var inners = segment.segments; + segments[segments.length - 1].value += inners[0].value; + for (var j = 1; j < inners.length; j++) { + segment = inners[j]; + segments.push(segment); + } + continue; + } + } + segments.push(segment); + } + self2.segments = segments; + if (segments.length == 1) { + return make_node(AST_String, self2, segments[0]); + } + if (segments.length === 3 && segments[1] instanceof AST_Node && (segments[1].is_string(compressor) || segments[1].is_number(compressor) || is_nullish(segments[1], compressor) || compressor.option("unsafe"))) { + if (segments[2].value === "") { + return make_node(AST_Binary, self2, { + operator: "+", + left: make_node(AST_String, self2, { + value: segments[0].value + }), + right: segments[1] + }); + } + if (segments[0].value === "") { + return make_node(AST_Binary, self2, { + operator: "+", + left: segments[1], + right: make_node(AST_String, self2, { + value: segments[2].value + }) + }); + } + } + return self2; + }); + def_optimize(AST_PrefixedTemplateString, function(self2) { + return self2; + }); + function lift_key(self2, compressor) { + if (!compressor.option("computed_props")) + return self2; + if (!(self2.key instanceof AST_Constant)) + return self2; + if (self2.key instanceof AST_String || self2.key instanceof AST_Number) { + if (self2.key.value === "__proto__") + return self2; + if (self2.key.value == "constructor" && compressor.parent() instanceof AST_Class) + return self2; + if (self2 instanceof AST_ObjectKeyVal) { + self2.quote = self2.key.quote; + self2.key = self2.key.value; + } else if (self2 instanceof AST_ClassProperty) { + self2.quote = self2.key.quote; + self2.key = make_node(AST_SymbolClassProperty, self2.key, { + name: self2.key.value + }); + } else { + self2.quote = self2.key.quote; + self2.key = make_node(AST_SymbolMethod, self2.key, { + name: self2.key.value + }); + } + } + return self2; + } + def_optimize(AST_ObjectProperty, lift_key); + def_optimize(AST_ConciseMethod, function(self2, compressor) { + lift_key(self2, compressor); + if (compressor.option("arrows") && compressor.parent() instanceof AST_Object && !self2.is_generator && !self2.value.uses_arguments && !self2.value.pinned() && self2.value.body.length == 1 && self2.value.body[0] instanceof AST_Return && self2.value.body[0].value && !self2.value.contains_this()) { + var arrow = make_node(AST_Arrow, self2.value, self2.value); + arrow.async = self2.async; + arrow.is_generator = self2.is_generator; + return make_node(AST_ObjectKeyVal, self2, { + key: self2.key instanceof AST_SymbolMethod ? self2.key.name : self2.key, + value: arrow, + quote: self2.quote + }); + } + return self2; + }); + def_optimize(AST_ObjectKeyVal, function(self2, compressor) { + lift_key(self2, compressor); + var unsafe_methods = compressor.option("unsafe_methods"); + if (unsafe_methods && compressor.option("ecma") >= 2015 && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self2.key + ""))) { + var key = self2.key; + var value = self2.value; + var is_arrow_with_block = value instanceof AST_Arrow && Array.isArray(value.body) && !value.contains_this(); + if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) { + return make_node(AST_ConciseMethod, self2, { + async: value.async, + is_generator: value.is_generator, + key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self2, { + name: key + }), + value: make_node(AST_Accessor, value, value), + quote: self2.quote + }); + } + } + return self2; + }); + def_optimize(AST_Destructuring, function(self2, compressor) { + if (compressor.option("pure_getters") == true && compressor.option("unused") && !self2.is_array && Array.isArray(self2.names) && !is_destructuring_export_decl(compressor) && !(self2.names[self2.names.length - 1] instanceof AST_Expansion)) { + var keep = []; + for (var i = 0; i < self2.names.length; i++) { + var elem = self2.names[i]; + if (!(elem instanceof AST_ObjectKeyVal && typeof elem.key == "string" && elem.value instanceof AST_SymbolDeclaration && !should_retain(compressor, elem.value.definition()))) { + keep.push(elem); + } + } + if (keep.length != self2.names.length) { + self2.names = keep; + } + } + return self2; + function is_destructuring_export_decl(compressor2) { + var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/]; + for (var a = 0, p = 0, len = ancestors.length; a < len; p++) { + var parent = compressor2.parent(p); + if (!parent) + return false; + if (a === 0 && parent.TYPE == "Destructuring") + continue; + if (!ancestors[a].test(parent.TYPE)) { + return false; + } + a++; + } + return true; + } + function should_retain(compressor2, def) { + if (def.references.length) + return true; + if (!def.global) + return false; + if (compressor2.toplevel.vars) { + if (compressor2.top_retain) { + return compressor2.top_retain(def); + } + return false; + } + return true; + } + }); + function* SourceMap(options) { + options = defaults(options, { + file: null, + root: null, + orig: null, + files: {} + }); + var orig_map; + var generator = new sourceMap.SourceMapGenerator({ + file: options.file, + sourceRoot: options.root + }); + let sourcesContent = { __proto__: null }; + let files = options.files; + for (var name in files) + if (HOP(files, name)) { + sourcesContent[name] = files[name]; + } + if (options.orig) { + orig_map = yield new sourceMap.SourceMapConsumer(options.orig); + if (orig_map.sourcesContent) { + orig_map.sources.forEach(function(source, i) { + var content = orig_map.sourcesContent[i]; + if (content) { + sourcesContent[source] = content; + } + }); + } + } + function add(source, gen_line, gen_col, orig_line, orig_col, name2) { + let generatedPos = { line: gen_line, column: gen_col }; + if (orig_map) { + var info = orig_map.originalPositionFor({ + line: orig_line, + column: orig_col + }); + if (info.source === null) { + generator.addMapping({ + generated: generatedPos, + original: null, + source: null, + name: null + }); + return; + } + source = info.source; + orig_line = info.line; + orig_col = info.column; + name2 = info.name || name2; + } + generator.addMapping({ + generated: generatedPos, + original: { line: orig_line, column: orig_col }, + source, + name: name2 + }); + generator.setSourceContent(source, sourcesContent[source]); + } + function clean(map) { + const allNull = map.sourcesContent && map.sourcesContent.every((c) => c == null); + if (allNull) + delete map.sourcesContent; + if (map.file === void 0) + delete map.file; + if (map.sourceRoot === void 0) + delete map.sourceRoot; + return map; + } + function getDecoded() { + if (!generator.toDecodedMap) + return null; + return clean(generator.toDecodedMap()); + } + function getEncoded() { + return clean(generator.toJSON()); + } + function destroy() { + if (orig_map && orig_map.destroy) + orig_map.destroy(); + } + return { + add, + getDecoded, + getEncoded, + destroy + }; + } + var domprops = [ + "$&", + "$'", + "$*", + "$+", + "$1", + "$2", + "$3", + "$4", + "$5", + "$6", + "$7", + "$8", + "$9", + "$_", + "$`", + "$input", + "-moz-animation", + "-moz-animation-delay", + "-moz-animation-direction", + "-moz-animation-duration", + "-moz-animation-fill-mode", + "-moz-animation-iteration-count", + "-moz-animation-name", + "-moz-animation-play-state", + "-moz-animation-timing-function", + "-moz-appearance", + "-moz-backface-visibility", + "-moz-border-end", + "-moz-border-end-color", + "-moz-border-end-style", + "-moz-border-end-width", + "-moz-border-image", + "-moz-border-start", + "-moz-border-start-color", + "-moz-border-start-style", + "-moz-border-start-width", + "-moz-box-align", + "-moz-box-direction", + "-moz-box-flex", + "-moz-box-ordinal-group", + "-moz-box-orient", + "-moz-box-pack", + "-moz-box-sizing", + "-moz-float-edge", + "-moz-font-feature-settings", + "-moz-font-language-override", + "-moz-force-broken-image-icon", + "-moz-hyphens", + "-moz-image-region", + "-moz-margin-end", + "-moz-margin-start", + "-moz-orient", + "-moz-osx-font-smoothing", + "-moz-outline-radius", + "-moz-outline-radius-bottomleft", + "-moz-outline-radius-bottomright", + "-moz-outline-radius-topleft", + "-moz-outline-radius-topright", + "-moz-padding-end", + "-moz-padding-start", + "-moz-perspective", + "-moz-perspective-origin", + "-moz-tab-size", + "-moz-text-size-adjust", + "-moz-transform", + "-moz-transform-origin", + "-moz-transform-style", + "-moz-transition", + "-moz-transition-delay", + "-moz-transition-duration", + "-moz-transition-property", + "-moz-transition-timing-function", + "-moz-user-focus", + "-moz-user-input", + "-moz-user-modify", + "-moz-user-select", + "-moz-window-dragging", + "-webkit-align-content", + "-webkit-align-items", + "-webkit-align-self", + "-webkit-animation", + "-webkit-animation-delay", + "-webkit-animation-direction", + "-webkit-animation-duration", + "-webkit-animation-fill-mode", + "-webkit-animation-iteration-count", + "-webkit-animation-name", + "-webkit-animation-play-state", + "-webkit-animation-timing-function", + "-webkit-appearance", + "-webkit-backface-visibility", + "-webkit-background-clip", + "-webkit-background-origin", + "-webkit-background-size", + "-webkit-border-bottom-left-radius", + "-webkit-border-bottom-right-radius", + "-webkit-border-image", + "-webkit-border-radius", + "-webkit-border-top-left-radius", + "-webkit-border-top-right-radius", + "-webkit-box-align", + "-webkit-box-direction", + "-webkit-box-flex", + "-webkit-box-ordinal-group", + "-webkit-box-orient", + "-webkit-box-pack", + "-webkit-box-shadow", + "-webkit-box-sizing", + "-webkit-filter", + "-webkit-flex", + "-webkit-flex-basis", + "-webkit-flex-direction", + "-webkit-flex-flow", + "-webkit-flex-grow", + "-webkit-flex-shrink", + "-webkit-flex-wrap", + "-webkit-justify-content", + "-webkit-line-clamp", + "-webkit-mask", + "-webkit-mask-clip", + "-webkit-mask-composite", + "-webkit-mask-image", + "-webkit-mask-origin", + "-webkit-mask-position", + "-webkit-mask-position-x", + "-webkit-mask-position-y", + "-webkit-mask-repeat", + "-webkit-mask-size", + "-webkit-order", + "-webkit-perspective", + "-webkit-perspective-origin", + "-webkit-text-fill-color", + "-webkit-text-size-adjust", + "-webkit-text-stroke", + "-webkit-text-stroke-color", + "-webkit-text-stroke-width", + "-webkit-transform", + "-webkit-transform-origin", + "-webkit-transform-style", + "-webkit-transition", + "-webkit-transition-delay", + "-webkit-transition-duration", + "-webkit-transition-property", + "-webkit-transition-timing-function", + "-webkit-user-select", + "0", + "1", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "2", + "20", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "@@iterator", + "ABORT_ERR", + "ACTIVE", + "ACTIVE_ATTRIBUTES", + "ACTIVE_TEXTURE", + "ACTIVE_UNIFORMS", + "ACTIVE_UNIFORM_BLOCKS", + "ADDITION", + "ALIASED_LINE_WIDTH_RANGE", + "ALIASED_POINT_SIZE_RANGE", + "ALL", + "ALLOW_KEYBOARD_INPUT", + "ALLPASS", + "ALPHA", + "ALPHA_BITS", + "ALREADY_SIGNALED", + "ALT_MASK", + "ALWAYS", + "ANY_SAMPLES_PASSED", + "ANY_SAMPLES_PASSED_CONSERVATIVE", + "ANY_TYPE", + "ANY_UNORDERED_NODE_TYPE", + "ARRAY_BUFFER", + "ARRAY_BUFFER_BINDING", + "ATTACHED_SHADERS", + "ATTRIBUTE_NODE", + "AT_TARGET", + "AbortController", + "AbortSignal", + "AbsoluteOrientationSensor", + "AbstractRange", + "Accelerometer", + "AddSearchProvider", + "AggregateError", + "AnalyserNode", + "Animation", + "AnimationEffect", + "AnimationEvent", + "AnimationPlaybackEvent", + "AnimationTimeline", + "AnonXMLHttpRequest", + "Any", + "ApplicationCache", + "ApplicationCacheErrorEvent", + "Array", + "ArrayBuffer", + "ArrayType", + "Atomics", + "Attr", + "Audio", + "AudioBuffer", + "AudioBufferSourceNode", + "AudioContext", + "AudioDestinationNode", + "AudioListener", + "AudioNode", + "AudioParam", + "AudioParamMap", + "AudioProcessingEvent", + "AudioScheduledSourceNode", + "AudioStreamTrack", + "AudioWorklet", + "AudioWorkletNode", + "AuthenticatorAssertionResponse", + "AuthenticatorAttestationResponse", + "AuthenticatorResponse", + "AutocompleteErrorEvent", + "BACK", + "BAD_BOUNDARYPOINTS_ERR", + "BAD_REQUEST", + "BANDPASS", + "BLEND", + "BLEND_COLOR", + "BLEND_DST_ALPHA", + "BLEND_DST_RGB", + "BLEND_EQUATION", + "BLEND_EQUATION_ALPHA", + "BLEND_EQUATION_RGB", + "BLEND_SRC_ALPHA", + "BLEND_SRC_RGB", + "BLUE", + "BLUE_BITS", + "BLUR", + "BOOL", + "BOOLEAN_TYPE", + "BOOL_VEC2", + "BOOL_VEC3", + "BOOL_VEC4", + "BOTH", + "BROWSER_DEFAULT_WEBGL", + "BUBBLING_PHASE", + "BUFFER_SIZE", + "BUFFER_USAGE", + "BYTE", + "BYTES_PER_ELEMENT", + "BackgroundFetchManager", + "BackgroundFetchRecord", + "BackgroundFetchRegistration", + "BarProp", + "BarcodeDetector", + "BaseAudioContext", + "BaseHref", + "BatteryManager", + "BeforeInstallPromptEvent", + "BeforeLoadEvent", + "BeforeUnloadEvent", + "BigInt", + "BigInt64Array", + "BigUint64Array", + "BiquadFilterNode", + "Blob", + "BlobEvent", + "Bluetooth", + "BluetoothCharacteristicProperties", + "BluetoothDevice", + "BluetoothRemoteGATTCharacteristic", + "BluetoothRemoteGATTDescriptor", + "BluetoothRemoteGATTServer", + "BluetoothRemoteGATTService", + "BluetoothUUID", + "Boolean", + "BroadcastChannel", + "ByteLengthQueuingStrategy", + "CAPTURING_PHASE", + "CCW", + "CDATASection", + "CDATA_SECTION_NODE", + "CHANGE", + "CHARSET_RULE", + "CHECKING", + "CLAMP_TO_EDGE", + "CLICK", + "CLOSED", + "CLOSING", + "COLOR", + "COLOR_ATTACHMENT0", + "COLOR_ATTACHMENT1", + "COLOR_ATTACHMENT10", + "COLOR_ATTACHMENT11", + "COLOR_ATTACHMENT12", + "COLOR_ATTACHMENT13", + "COLOR_ATTACHMENT14", + "COLOR_ATTACHMENT15", + "COLOR_ATTACHMENT2", + "COLOR_ATTACHMENT3", + "COLOR_ATTACHMENT4", + "COLOR_ATTACHMENT5", + "COLOR_ATTACHMENT6", + "COLOR_ATTACHMENT7", + "COLOR_ATTACHMENT8", + "COLOR_ATTACHMENT9", + "COLOR_BUFFER_BIT", + "COLOR_CLEAR_VALUE", + "COLOR_WRITEMASK", + "COMMENT_NODE", + "COMPARE_REF_TO_TEXTURE", + "COMPILE_STATUS", + "COMPLETION_STATUS_KHR", + "COMPRESSED_RGBA_S3TC_DXT1_EXT", + "COMPRESSED_RGBA_S3TC_DXT3_EXT", + "COMPRESSED_RGBA_S3TC_DXT5_EXT", + "COMPRESSED_RGB_S3TC_DXT1_EXT", + "COMPRESSED_TEXTURE_FORMATS", + "COMPUTE", + "CONDITION_SATISFIED", + "CONFIGURATION_UNSUPPORTED", + "CONNECTING", + "CONSTANT_ALPHA", + "CONSTANT_COLOR", + "CONSTRAINT_ERR", + "CONTEXT_LOST_WEBGL", + "CONTROL_MASK", + "COPY_DST", + "COPY_READ_BUFFER", + "COPY_READ_BUFFER_BINDING", + "COPY_SRC", + "COPY_WRITE_BUFFER", + "COPY_WRITE_BUFFER_BINDING", + "COUNTER_STYLE_RULE", + "CSS", + "CSS2Properties", + "CSSAnimation", + "CSSCharsetRule", + "CSSConditionRule", + "CSSCounterStyleRule", + "CSSFontFaceRule", + "CSSFontFeatureValuesRule", + "CSSGroupingRule", + "CSSImageValue", + "CSSImportRule", + "CSSKeyframeRule", + "CSSKeyframesRule", + "CSSKeywordValue", + "CSSMathInvert", + "CSSMathMax", + "CSSMathMin", + "CSSMathNegate", + "CSSMathProduct", + "CSSMathSum", + "CSSMathValue", + "CSSMatrixComponent", + "CSSMediaRule", + "CSSMozDocumentRule", + "CSSNameSpaceRule", + "CSSNamespaceRule", + "CSSNumericArray", + "CSSNumericValue", + "CSSPageRule", + "CSSPerspective", + "CSSPositionValue", + "CSSPrimitiveValue", + "CSSRotate", + "CSSRule", + "CSSRuleList", + "CSSScale", + "CSSSkew", + "CSSSkewX", + "CSSSkewY", + "CSSStyleDeclaration", + "CSSStyleRule", + "CSSStyleSheet", + "CSSStyleValue", + "CSSSupportsRule", + "CSSTransformComponent", + "CSSTransformValue", + "CSSTransition", + "CSSTranslate", + "CSSUnitValue", + "CSSUnknownRule", + "CSSUnparsedValue", + "CSSValue", + "CSSValueList", + "CSSVariableReferenceValue", + "CSSVariablesDeclaration", + "CSSVariablesRule", + "CSSViewportRule", + "CSS_ATTR", + "CSS_CM", + "CSS_COUNTER", + "CSS_CUSTOM", + "CSS_DEG", + "CSS_DIMENSION", + "CSS_EMS", + "CSS_EXS", + "CSS_FILTER_BLUR", + "CSS_FILTER_BRIGHTNESS", + "CSS_FILTER_CONTRAST", + "CSS_FILTER_CUSTOM", + "CSS_FILTER_DROP_SHADOW", + "CSS_FILTER_GRAYSCALE", + "CSS_FILTER_HUE_ROTATE", + "CSS_FILTER_INVERT", + "CSS_FILTER_OPACITY", + "CSS_FILTER_REFERENCE", + "CSS_FILTER_SATURATE", + "CSS_FILTER_SEPIA", + "CSS_GRAD", + "CSS_HZ", + "CSS_IDENT", + "CSS_IN", + "CSS_INHERIT", + "CSS_KHZ", + "CSS_MATRIX", + "CSS_MATRIX3D", + "CSS_MM", + "CSS_MS", + "CSS_NUMBER", + "CSS_PC", + "CSS_PERCENTAGE", + "CSS_PERSPECTIVE", + "CSS_PRIMITIVE_VALUE", + "CSS_PT", + "CSS_PX", + "CSS_RAD", + "CSS_RECT", + "CSS_RGBCOLOR", + "CSS_ROTATE", + "CSS_ROTATE3D", + "CSS_ROTATEX", + "CSS_ROTATEY", + "CSS_ROTATEZ", + "CSS_S", + "CSS_SCALE", + "CSS_SCALE3D", + "CSS_SCALEX", + "CSS_SCALEY", + "CSS_SCALEZ", + "CSS_SKEW", + "CSS_SKEWX", + "CSS_SKEWY", + "CSS_STRING", + "CSS_TRANSLATE", + "CSS_TRANSLATE3D", + "CSS_TRANSLATEX", + "CSS_TRANSLATEY", + "CSS_TRANSLATEZ", + "CSS_UNKNOWN", + "CSS_URI", + "CSS_VALUE_LIST", + "CSS_VH", + "CSS_VMAX", + "CSS_VMIN", + "CSS_VW", + "CULL_FACE", + "CULL_FACE_MODE", + "CURRENT_PROGRAM", + "CURRENT_QUERY", + "CURRENT_VERTEX_ATTRIB", + "CUSTOM", + "CW", + "Cache", + "CacheStorage", + "CanvasCaptureMediaStream", + "CanvasCaptureMediaStreamTrack", + "CanvasGradient", + "CanvasPattern", + "CanvasRenderingContext2D", + "CaretPosition", + "ChannelMergerNode", + "ChannelSplitterNode", + "CharacterData", + "ClientRect", + "ClientRectList", + "Clipboard", + "ClipboardEvent", + "ClipboardItem", + "CloseEvent", + "Collator", + "CommandEvent", + "Comment", + "CompileError", + "CompositionEvent", + "CompressionStream", + "Console", + "ConstantSourceNode", + "Controllers", + "ConvolverNode", + "CountQueuingStrategy", + "Counter", + "Credential", + "CredentialsContainer", + "Crypto", + "CryptoKey", + "CustomElementRegistry", + "CustomEvent", + "DATABASE_ERR", + "DATA_CLONE_ERR", + "DATA_ERR", + "DBLCLICK", + "DECR", + "DECR_WRAP", + "DELETE_STATUS", + "DEPTH", + "DEPTH24_STENCIL8", + "DEPTH32F_STENCIL8", + "DEPTH_ATTACHMENT", + "DEPTH_BITS", + "DEPTH_BUFFER_BIT", + "DEPTH_CLEAR_VALUE", + "DEPTH_COMPONENT", + "DEPTH_COMPONENT16", + "DEPTH_COMPONENT24", + "DEPTH_COMPONENT32F", + "DEPTH_FUNC", + "DEPTH_RANGE", + "DEPTH_STENCIL", + "DEPTH_STENCIL_ATTACHMENT", + "DEPTH_TEST", + "DEPTH_WRITEMASK", + "DEVICE_INELIGIBLE", + "DIRECTION_DOWN", + "DIRECTION_LEFT", + "DIRECTION_RIGHT", + "DIRECTION_UP", + "DISABLED", + "DISPATCH_REQUEST_ERR", + "DITHER", + "DOCUMENT_FRAGMENT_NODE", + "DOCUMENT_NODE", + "DOCUMENT_POSITION_CONTAINED_BY", + "DOCUMENT_POSITION_CONTAINS", + "DOCUMENT_POSITION_DISCONNECTED", + "DOCUMENT_POSITION_FOLLOWING", + "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", + "DOCUMENT_POSITION_PRECEDING", + "DOCUMENT_TYPE_NODE", + "DOMCursor", + "DOMError", + "DOMException", + "DOMImplementation", + "DOMImplementationLS", + "DOMMatrix", + "DOMMatrixReadOnly", + "DOMParser", + "DOMPoint", + "DOMPointReadOnly", + "DOMQuad", + "DOMRect", + "DOMRectList", + "DOMRectReadOnly", + "DOMRequest", + "DOMSTRING_SIZE_ERR", + "DOMSettableTokenList", + "DOMStringList", + "DOMStringMap", + "DOMTokenList", + "DOMTransactionEvent", + "DOM_DELTA_LINE", + "DOM_DELTA_PAGE", + "DOM_DELTA_PIXEL", + "DOM_INPUT_METHOD_DROP", + "DOM_INPUT_METHOD_HANDWRITING", + "DOM_INPUT_METHOD_IME", + "DOM_INPUT_METHOD_KEYBOARD", + "DOM_INPUT_METHOD_MULTIMODAL", + "DOM_INPUT_METHOD_OPTION", + "DOM_INPUT_METHOD_PASTE", + "DOM_INPUT_METHOD_SCRIPT", + "DOM_INPUT_METHOD_UNKNOWN", + "DOM_INPUT_METHOD_VOICE", + "DOM_KEY_LOCATION_JOYSTICK", + "DOM_KEY_LOCATION_LEFT", + "DOM_KEY_LOCATION_MOBILE", + "DOM_KEY_LOCATION_NUMPAD", + "DOM_KEY_LOCATION_RIGHT", + "DOM_KEY_LOCATION_STANDARD", + "DOM_VK_0", + "DOM_VK_1", + "DOM_VK_2", + "DOM_VK_3", + "DOM_VK_4", + "DOM_VK_5", + "DOM_VK_6", + "DOM_VK_7", + "DOM_VK_8", + "DOM_VK_9", + "DOM_VK_A", + "DOM_VK_ACCEPT", + "DOM_VK_ADD", + "DOM_VK_ALT", + "DOM_VK_ALTGR", + "DOM_VK_AMPERSAND", + "DOM_VK_ASTERISK", + "DOM_VK_AT", + "DOM_VK_ATTN", + "DOM_VK_B", + "DOM_VK_BACKSPACE", + "DOM_VK_BACK_QUOTE", + "DOM_VK_BACK_SLASH", + "DOM_VK_BACK_SPACE", + "DOM_VK_C", + "DOM_VK_CANCEL", + "DOM_VK_CAPS_LOCK", + "DOM_VK_CIRCUMFLEX", + "DOM_VK_CLEAR", + "DOM_VK_CLOSE_BRACKET", + "DOM_VK_CLOSE_CURLY_BRACKET", + "DOM_VK_CLOSE_PAREN", + "DOM_VK_COLON", + "DOM_VK_COMMA", + "DOM_VK_CONTEXT_MENU", + "DOM_VK_CONTROL", + "DOM_VK_CONVERT", + "DOM_VK_CRSEL", + "DOM_VK_CTRL", + "DOM_VK_D", + "DOM_VK_DECIMAL", + "DOM_VK_DELETE", + "DOM_VK_DIVIDE", + "DOM_VK_DOLLAR", + "DOM_VK_DOUBLE_QUOTE", + "DOM_VK_DOWN", + "DOM_VK_E", + "DOM_VK_EISU", + "DOM_VK_END", + "DOM_VK_ENTER", + "DOM_VK_EQUALS", + "DOM_VK_EREOF", + "DOM_VK_ESCAPE", + "DOM_VK_EXCLAMATION", + "DOM_VK_EXECUTE", + "DOM_VK_EXSEL", + "DOM_VK_F", + "DOM_VK_F1", + "DOM_VK_F10", + "DOM_VK_F11", + "DOM_VK_F12", + "DOM_VK_F13", + "DOM_VK_F14", + "DOM_VK_F15", + "DOM_VK_F16", + "DOM_VK_F17", + "DOM_VK_F18", + "DOM_VK_F19", + "DOM_VK_F2", + "DOM_VK_F20", + "DOM_VK_F21", + "DOM_VK_F22", + "DOM_VK_F23", + "DOM_VK_F24", + "DOM_VK_F25", + "DOM_VK_F26", + "DOM_VK_F27", + "DOM_VK_F28", + "DOM_VK_F29", + "DOM_VK_F3", + "DOM_VK_F30", + "DOM_VK_F31", + "DOM_VK_F32", + "DOM_VK_F33", + "DOM_VK_F34", + "DOM_VK_F35", + "DOM_VK_F36", + "DOM_VK_F4", + "DOM_VK_F5", + "DOM_VK_F6", + "DOM_VK_F7", + "DOM_VK_F8", + "DOM_VK_F9", + "DOM_VK_FINAL", + "DOM_VK_FRONT", + "DOM_VK_G", + "DOM_VK_GREATER_THAN", + "DOM_VK_H", + "DOM_VK_HANGUL", + "DOM_VK_HANJA", + "DOM_VK_HASH", + "DOM_VK_HELP", + "DOM_VK_HK_TOGGLE", + "DOM_VK_HOME", + "DOM_VK_HYPHEN_MINUS", + "DOM_VK_I", + "DOM_VK_INSERT", + "DOM_VK_J", + "DOM_VK_JUNJA", + "DOM_VK_K", + "DOM_VK_KANA", + "DOM_VK_KANJI", + "DOM_VK_L", + "DOM_VK_LEFT", + "DOM_VK_LEFT_TAB", + "DOM_VK_LESS_THAN", + "DOM_VK_M", + "DOM_VK_META", + "DOM_VK_MODECHANGE", + "DOM_VK_MULTIPLY", + "DOM_VK_N", + "DOM_VK_NONCONVERT", + "DOM_VK_NUMPAD0", + "DOM_VK_NUMPAD1", + "DOM_VK_NUMPAD2", + "DOM_VK_NUMPAD3", + "DOM_VK_NUMPAD4", + "DOM_VK_NUMPAD5", + "DOM_VK_NUMPAD6", + "DOM_VK_NUMPAD7", + "DOM_VK_NUMPAD8", + "DOM_VK_NUMPAD9", + "DOM_VK_NUM_LOCK", + "DOM_VK_O", + "DOM_VK_OEM_1", + "DOM_VK_OEM_102", + "DOM_VK_OEM_2", + "DOM_VK_OEM_3", + "DOM_VK_OEM_4", + "DOM_VK_OEM_5", + "DOM_VK_OEM_6", + "DOM_VK_OEM_7", + "DOM_VK_OEM_8", + "DOM_VK_OEM_COMMA", + "DOM_VK_OEM_MINUS", + "DOM_VK_OEM_PERIOD", + "DOM_VK_OEM_PLUS", + "DOM_VK_OPEN_BRACKET", + "DOM_VK_OPEN_CURLY_BRACKET", + "DOM_VK_OPEN_PAREN", + "DOM_VK_P", + "DOM_VK_PA1", + "DOM_VK_PAGEDOWN", + "DOM_VK_PAGEUP", + "DOM_VK_PAGE_DOWN", + "DOM_VK_PAGE_UP", + "DOM_VK_PAUSE", + "DOM_VK_PERCENT", + "DOM_VK_PERIOD", + "DOM_VK_PIPE", + "DOM_VK_PLAY", + "DOM_VK_PLUS", + "DOM_VK_PRINT", + "DOM_VK_PRINTSCREEN", + "DOM_VK_PROCESSKEY", + "DOM_VK_PROPERITES", + "DOM_VK_Q", + "DOM_VK_QUESTION_MARK", + "DOM_VK_QUOTE", + "DOM_VK_R", + "DOM_VK_REDO", + "DOM_VK_RETURN", + "DOM_VK_RIGHT", + "DOM_VK_S", + "DOM_VK_SCROLL_LOCK", + "DOM_VK_SELECT", + "DOM_VK_SEMICOLON", + "DOM_VK_SEPARATOR", + "DOM_VK_SHIFT", + "DOM_VK_SLASH", + "DOM_VK_SLEEP", + "DOM_VK_SPACE", + "DOM_VK_SUBTRACT", + "DOM_VK_T", + "DOM_VK_TAB", + "DOM_VK_TILDE", + "DOM_VK_U", + "DOM_VK_UNDERSCORE", + "DOM_VK_UNDO", + "DOM_VK_UNICODE", + "DOM_VK_UP", + "DOM_VK_V", + "DOM_VK_VOLUME_DOWN", + "DOM_VK_VOLUME_MUTE", + "DOM_VK_VOLUME_UP", + "DOM_VK_W", + "DOM_VK_WIN", + "DOM_VK_WINDOW", + "DOM_VK_WIN_ICO_00", + "DOM_VK_WIN_ICO_CLEAR", + "DOM_VK_WIN_ICO_HELP", + "DOM_VK_WIN_OEM_ATTN", + "DOM_VK_WIN_OEM_AUTO", + "DOM_VK_WIN_OEM_BACKTAB", + "DOM_VK_WIN_OEM_CLEAR", + "DOM_VK_WIN_OEM_COPY", + "DOM_VK_WIN_OEM_CUSEL", + "DOM_VK_WIN_OEM_ENLW", + "DOM_VK_WIN_OEM_FINISH", + "DOM_VK_WIN_OEM_FJ_JISHO", + "DOM_VK_WIN_OEM_FJ_LOYA", + "DOM_VK_WIN_OEM_FJ_MASSHOU", + "DOM_VK_WIN_OEM_FJ_ROYA", + "DOM_VK_WIN_OEM_FJ_TOUROKU", + "DOM_VK_WIN_OEM_JUMP", + "DOM_VK_WIN_OEM_PA1", + "DOM_VK_WIN_OEM_PA2", + "DOM_VK_WIN_OEM_PA3", + "DOM_VK_WIN_OEM_RESET", + "DOM_VK_WIN_OEM_WSCTRL", + "DOM_VK_X", + "DOM_VK_XF86XK_ADD_FAVORITE", + "DOM_VK_XF86XK_APPLICATION_LEFT", + "DOM_VK_XF86XK_APPLICATION_RIGHT", + "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK", + "DOM_VK_XF86XK_AUDIO_FORWARD", + "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME", + "DOM_VK_XF86XK_AUDIO_MEDIA", + "DOM_VK_XF86XK_AUDIO_MUTE", + "DOM_VK_XF86XK_AUDIO_NEXT", + "DOM_VK_XF86XK_AUDIO_PAUSE", + "DOM_VK_XF86XK_AUDIO_PLAY", + "DOM_VK_XF86XK_AUDIO_PREV", + "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME", + "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY", + "DOM_VK_XF86XK_AUDIO_RECORD", + "DOM_VK_XF86XK_AUDIO_REPEAT", + "DOM_VK_XF86XK_AUDIO_REWIND", + "DOM_VK_XF86XK_AUDIO_STOP", + "DOM_VK_XF86XK_AWAY", + "DOM_VK_XF86XK_BACK", + "DOM_VK_XF86XK_BACK_FORWARD", + "DOM_VK_XF86XK_BATTERY", + "DOM_VK_XF86XK_BLUE", + "DOM_VK_XF86XK_BLUETOOTH", + "DOM_VK_XF86XK_BOOK", + "DOM_VK_XF86XK_BRIGHTNESS_ADJUST", + "DOM_VK_XF86XK_CALCULATOR", + "DOM_VK_XF86XK_CALENDAR", + "DOM_VK_XF86XK_CD", + "DOM_VK_XF86XK_CLOSE", + "DOM_VK_XF86XK_COMMUNITY", + "DOM_VK_XF86XK_CONTRAST_ADJUST", + "DOM_VK_XF86XK_COPY", + "DOM_VK_XF86XK_CUT", + "DOM_VK_XF86XK_CYCLE_ANGLE", + "DOM_VK_XF86XK_DISPLAY", + "DOM_VK_XF86XK_DOCUMENTS", + "DOM_VK_XF86XK_DOS", + "DOM_VK_XF86XK_EJECT", + "DOM_VK_XF86XK_EXCEL", + "DOM_VK_XF86XK_EXPLORER", + "DOM_VK_XF86XK_FAVORITES", + "DOM_VK_XF86XK_FINANCE", + "DOM_VK_XF86XK_FORWARD", + "DOM_VK_XF86XK_FRAME_BACK", + "DOM_VK_XF86XK_FRAME_FORWARD", + "DOM_VK_XF86XK_GAME", + "DOM_VK_XF86XK_GO", + "DOM_VK_XF86XK_GREEN", + "DOM_VK_XF86XK_HIBERNATE", + "DOM_VK_XF86XK_HISTORY", + "DOM_VK_XF86XK_HOME_PAGE", + "DOM_VK_XF86XK_HOT_LINKS", + "DOM_VK_XF86XK_I_TOUCH", + "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN", + "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP", + "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF", + "DOM_VK_XF86XK_LAUNCH0", + "DOM_VK_XF86XK_LAUNCH1", + "DOM_VK_XF86XK_LAUNCH2", + "DOM_VK_XF86XK_LAUNCH3", + "DOM_VK_XF86XK_LAUNCH4", + "DOM_VK_XF86XK_LAUNCH5", + "DOM_VK_XF86XK_LAUNCH6", + "DOM_VK_XF86XK_LAUNCH7", + "DOM_VK_XF86XK_LAUNCH8", + "DOM_VK_XF86XK_LAUNCH9", + "DOM_VK_XF86XK_LAUNCH_A", + "DOM_VK_XF86XK_LAUNCH_B", + "DOM_VK_XF86XK_LAUNCH_C", + "DOM_VK_XF86XK_LAUNCH_D", + "DOM_VK_XF86XK_LAUNCH_E", + "DOM_VK_XF86XK_LAUNCH_F", + "DOM_VK_XF86XK_LIGHT_BULB", + "DOM_VK_XF86XK_LOG_OFF", + "DOM_VK_XF86XK_MAIL", + "DOM_VK_XF86XK_MAIL_FORWARD", + "DOM_VK_XF86XK_MARKET", + "DOM_VK_XF86XK_MEETING", + "DOM_VK_XF86XK_MEMO", + "DOM_VK_XF86XK_MENU_KB", + "DOM_VK_XF86XK_MENU_PB", + "DOM_VK_XF86XK_MESSENGER", + "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN", + "DOM_VK_XF86XK_MON_BRIGHTNESS_UP", + "DOM_VK_XF86XK_MUSIC", + "DOM_VK_XF86XK_MY_COMPUTER", + "DOM_VK_XF86XK_MY_SITES", + "DOM_VK_XF86XK_NEW", + "DOM_VK_XF86XK_NEWS", + "DOM_VK_XF86XK_OFFICE_HOME", + "DOM_VK_XF86XK_OPEN", + "DOM_VK_XF86XK_OPEN_URL", + "DOM_VK_XF86XK_OPTION", + "DOM_VK_XF86XK_PASTE", + "DOM_VK_XF86XK_PHONE", + "DOM_VK_XF86XK_PICTURES", + "DOM_VK_XF86XK_POWER_DOWN", + "DOM_VK_XF86XK_POWER_OFF", + "DOM_VK_XF86XK_RED", + "DOM_VK_XF86XK_REFRESH", + "DOM_VK_XF86XK_RELOAD", + "DOM_VK_XF86XK_REPLY", + "DOM_VK_XF86XK_ROCKER_DOWN", + "DOM_VK_XF86XK_ROCKER_ENTER", + "DOM_VK_XF86XK_ROCKER_UP", + "DOM_VK_XF86XK_ROTATE_WINDOWS", + "DOM_VK_XF86XK_ROTATION_KB", + "DOM_VK_XF86XK_ROTATION_PB", + "DOM_VK_XF86XK_SAVE", + "DOM_VK_XF86XK_SCREEN_SAVER", + "DOM_VK_XF86XK_SCROLL_CLICK", + "DOM_VK_XF86XK_SCROLL_DOWN", + "DOM_VK_XF86XK_SCROLL_UP", + "DOM_VK_XF86XK_SEARCH", + "DOM_VK_XF86XK_SEND", + "DOM_VK_XF86XK_SHOP", + "DOM_VK_XF86XK_SPELL", + "DOM_VK_XF86XK_SPLIT_SCREEN", + "DOM_VK_XF86XK_STANDBY", + "DOM_VK_XF86XK_START", + "DOM_VK_XF86XK_STOP", + "DOM_VK_XF86XK_SUBTITLE", + "DOM_VK_XF86XK_SUPPORT", + "DOM_VK_XF86XK_SUSPEND", + "DOM_VK_XF86XK_TASK_PANE", + "DOM_VK_XF86XK_TERMINAL", + "DOM_VK_XF86XK_TIME", + "DOM_VK_XF86XK_TOOLS", + "DOM_VK_XF86XK_TOP_MENU", + "DOM_VK_XF86XK_TO_DO_LIST", + "DOM_VK_XF86XK_TRAVEL", + "DOM_VK_XF86XK_USER1KB", + "DOM_VK_XF86XK_USER2KB", + "DOM_VK_XF86XK_USER_PB", + "DOM_VK_XF86XK_UWB", + "DOM_VK_XF86XK_VENDOR_HOME", + "DOM_VK_XF86XK_VIDEO", + "DOM_VK_XF86XK_VIEW", + "DOM_VK_XF86XK_WAKE_UP", + "DOM_VK_XF86XK_WEB_CAM", + "DOM_VK_XF86XK_WHEEL_BUTTON", + "DOM_VK_XF86XK_WLAN", + "DOM_VK_XF86XK_WORD", + "DOM_VK_XF86XK_WWW", + "DOM_VK_XF86XK_XFER", + "DOM_VK_XF86XK_YELLOW", + "DOM_VK_XF86XK_ZOOM_IN", + "DOM_VK_XF86XK_ZOOM_OUT", + "DOM_VK_Y", + "DOM_VK_Z", + "DOM_VK_ZOOM", + "DONE", + "DONT_CARE", + "DOWNLOADING", + "DRAGDROP", + "DRAW_BUFFER0", + "DRAW_BUFFER1", + "DRAW_BUFFER10", + "DRAW_BUFFER11", + "DRAW_BUFFER12", + "DRAW_BUFFER13", + "DRAW_BUFFER14", + "DRAW_BUFFER15", + "DRAW_BUFFER2", + "DRAW_BUFFER3", + "DRAW_BUFFER4", + "DRAW_BUFFER5", + "DRAW_BUFFER6", + "DRAW_BUFFER7", + "DRAW_BUFFER8", + "DRAW_BUFFER9", + "DRAW_FRAMEBUFFER", + "DRAW_FRAMEBUFFER_BINDING", + "DST_ALPHA", + "DST_COLOR", + "DYNAMIC_COPY", + "DYNAMIC_DRAW", + "DYNAMIC_READ", + "DataChannel", + "DataTransfer", + "DataTransferItem", + "DataTransferItemList", + "DataView", + "Date", + "DateTimeFormat", + "DecompressionStream", + "DelayNode", + "DeprecationReportBody", + "DesktopNotification", + "DesktopNotificationCenter", + "DeviceLightEvent", + "DeviceMotionEvent", + "DeviceMotionEventAcceleration", + "DeviceMotionEventRotationRate", + "DeviceOrientationEvent", + "DeviceProximityEvent", + "DeviceStorage", + "DeviceStorageChangeEvent", + "Directory", + "DisplayNames", + "Document", + "DocumentFragment", + "DocumentTimeline", + "DocumentType", + "DragEvent", + "DynamicsCompressorNode", + "E", + "ELEMENT_ARRAY_BUFFER", + "ELEMENT_ARRAY_BUFFER_BINDING", + "ELEMENT_NODE", + "EMPTY", + "ENCODING_ERR", + "ENDED", + "END_TO_END", + "END_TO_START", + "ENTITY_NODE", + "ENTITY_REFERENCE_NODE", + "EPSILON", + "EQUAL", + "EQUALPOWER", + "ERROR", + "EXPONENTIAL_DISTANCE", + "Element", + "ElementInternals", + "ElementQuery", + "EnterPictureInPictureEvent", + "Entity", + "EntityReference", + "Error", + "ErrorEvent", + "EvalError", + "Event", + "EventException", + "EventSource", + "EventTarget", + "External", + "FASTEST", + "FIDOSDK", + "FILTER_ACCEPT", + "FILTER_INTERRUPT", + "FILTER_REJECT", + "FILTER_SKIP", + "FINISHED_STATE", + "FIRST_ORDERED_NODE_TYPE", + "FLOAT", + "FLOAT_32_UNSIGNED_INT_24_8_REV", + "FLOAT_MAT2", + "FLOAT_MAT2x3", + "FLOAT_MAT2x4", + "FLOAT_MAT3", + "FLOAT_MAT3x2", + "FLOAT_MAT3x4", + "FLOAT_MAT4", + "FLOAT_MAT4x2", + "FLOAT_MAT4x3", + "FLOAT_VEC2", + "FLOAT_VEC3", + "FLOAT_VEC4", + "FOCUS", + "FONT_FACE_RULE", + "FONT_FEATURE_VALUES_RULE", + "FRAGMENT", + "FRAGMENT_SHADER", + "FRAGMENT_SHADER_DERIVATIVE_HINT", + "FRAGMENT_SHADER_DERIVATIVE_HINT_OES", + "FRAMEBUFFER", + "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", + "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE", + "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", + "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE", + "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE", + "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", + "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", + "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", + "FRAMEBUFFER_ATTACHMENT_RED_SIZE", + "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", + "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", + "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", + "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", + "FRAMEBUFFER_BINDING", + "FRAMEBUFFER_COMPLETE", + "FRAMEBUFFER_DEFAULT", + "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", + "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", + "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", + "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", + "FRAMEBUFFER_UNSUPPORTED", + "FRONT", + "FRONT_AND_BACK", + "FRONT_FACE", + "FUNC_ADD", + "FUNC_REVERSE_SUBTRACT", + "FUNC_SUBTRACT", + "FeaturePolicy", + "FeaturePolicyViolationReportBody", + "FederatedCredential", + "Feed", + "FeedEntry", + "File", + "FileError", + "FileList", + "FileReader", + "FileSystem", + "FileSystemDirectoryEntry", + "FileSystemDirectoryReader", + "FileSystemEntry", + "FileSystemFileEntry", + "FinalizationRegistry", + "FindInPage", + "Float32Array", + "Float64Array", + "FocusEvent", + "FontFace", + "FontFaceSet", + "FontFaceSetLoadEvent", + "FormData", + "FormDataEvent", + "FragmentDirective", + "Function", + "GENERATE_MIPMAP_HINT", + "GEQUAL", + "GREATER", + "GREEN", + "GREEN_BITS", + "GainNode", + "Gamepad", + "GamepadAxisMoveEvent", + "GamepadButton", + "GamepadButtonEvent", + "GamepadEvent", + "GamepadHapticActuator", + "GamepadPose", + "Geolocation", + "GeolocationCoordinates", + "GeolocationPosition", + "GeolocationPositionError", + "GestureEvent", + "Global", + "Gyroscope", + "HALF_FLOAT", + "HAVE_CURRENT_DATA", + "HAVE_ENOUGH_DATA", + "HAVE_FUTURE_DATA", + "HAVE_METADATA", + "HAVE_NOTHING", + "HEADERS_RECEIVED", + "HIDDEN", + "HIERARCHY_REQUEST_ERR", + "HIGHPASS", + "HIGHSHELF", + "HIGH_FLOAT", + "HIGH_INT", + "HORIZONTAL", + "HORIZONTAL_AXIS", + "HRTF", + "HTMLAllCollection", + "HTMLAnchorElement", + "HTMLAppletElement", + "HTMLAreaElement", + "HTMLAudioElement", + "HTMLBRElement", + "HTMLBaseElement", + "HTMLBaseFontElement", + "HTMLBlockquoteElement", + "HTMLBodyElement", + "HTMLButtonElement", + "HTMLCanvasElement", + "HTMLCollection", + "HTMLCommandElement", + "HTMLContentElement", + "HTMLDListElement", + "HTMLDataElement", + "HTMLDataListElement", + "HTMLDetailsElement", + "HTMLDialogElement", + "HTMLDirectoryElement", + "HTMLDivElement", + "HTMLDocument", + "HTMLElement", + "HTMLEmbedElement", + "HTMLFieldSetElement", + "HTMLFontElement", + "HTMLFormControlsCollection", + "HTMLFormElement", + "HTMLFrameElement", + "HTMLFrameSetElement", + "HTMLHRElement", + "HTMLHeadElement", + "HTMLHeadingElement", + "HTMLHtmlElement", + "HTMLIFrameElement", + "HTMLImageElement", + "HTMLInputElement", + "HTMLIsIndexElement", + "HTMLKeygenElement", + "HTMLLIElement", + "HTMLLabelElement", + "HTMLLegendElement", + "HTMLLinkElement", + "HTMLMapElement", + "HTMLMarqueeElement", + "HTMLMediaElement", + "HTMLMenuElement", + "HTMLMenuItemElement", + "HTMLMetaElement", + "HTMLMeterElement", + "HTMLModElement", + "HTMLOListElement", + "HTMLObjectElement", + "HTMLOptGroupElement", + "HTMLOptionElement", + "HTMLOptionsCollection", + "HTMLOutputElement", + "HTMLParagraphElement", + "HTMLParamElement", + "HTMLPictureElement", + "HTMLPreElement", + "HTMLProgressElement", + "HTMLPropertiesCollection", + "HTMLQuoteElement", + "HTMLScriptElement", + "HTMLSelectElement", + "HTMLShadowElement", + "HTMLSlotElement", + "HTMLSourceElement", + "HTMLSpanElement", + "HTMLStyleElement", + "HTMLTableCaptionElement", + "HTMLTableCellElement", + "HTMLTableColElement", + "HTMLTableElement", + "HTMLTableRowElement", + "HTMLTableSectionElement", + "HTMLTemplateElement", + "HTMLTextAreaElement", + "HTMLTimeElement", + "HTMLTitleElement", + "HTMLTrackElement", + "HTMLUListElement", + "HTMLUnknownElement", + "HTMLVideoElement", + "HashChangeEvent", + "Headers", + "History", + "Hz", + "ICE_CHECKING", + "ICE_CLOSED", + "ICE_COMPLETED", + "ICE_CONNECTED", + "ICE_FAILED", + "ICE_GATHERING", + "ICE_WAITING", + "IDBCursor", + "IDBCursorWithValue", + "IDBDatabase", + "IDBDatabaseException", + "IDBFactory", + "IDBFileHandle", + "IDBFileRequest", + "IDBIndex", + "IDBKeyRange", + "IDBMutableFile", + "IDBObjectStore", + "IDBOpenDBRequest", + "IDBRequest", + "IDBTransaction", + "IDBVersionChangeEvent", + "IDLE", + "IIRFilterNode", + "IMPLEMENTATION_COLOR_READ_FORMAT", + "IMPLEMENTATION_COLOR_READ_TYPE", + "IMPORT_RULE", + "INCR", + "INCR_WRAP", + "INDEX", + "INDEX_SIZE_ERR", + "INDIRECT", + "INT", + "INTERLEAVED_ATTRIBS", + "INT_2_10_10_10_REV", + "INT_SAMPLER_2D", + "INT_SAMPLER_2D_ARRAY", + "INT_SAMPLER_3D", + "INT_SAMPLER_CUBE", + "INT_VEC2", + "INT_VEC3", + "INT_VEC4", + "INUSE_ATTRIBUTE_ERR", + "INVALID_ACCESS_ERR", + "INVALID_CHARACTER_ERR", + "INVALID_ENUM", + "INVALID_EXPRESSION_ERR", + "INVALID_FRAMEBUFFER_OPERATION", + "INVALID_INDEX", + "INVALID_MODIFICATION_ERR", + "INVALID_NODE_TYPE_ERR", + "INVALID_OPERATION", + "INVALID_STATE_ERR", + "INVALID_VALUE", + "INVERSE_DISTANCE", + "INVERT", + "IceCandidate", + "IdleDeadline", + "Image", + "ImageBitmap", + "ImageBitmapRenderingContext", + "ImageCapture", + "ImageData", + "Infinity", + "InputDeviceCapabilities", + "InputDeviceInfo", + "InputEvent", + "InputMethodContext", + "InstallTrigger", + "InstallTriggerImpl", + "Instance", + "Int16Array", + "Int32Array", + "Int8Array", + "Intent", + "InternalError", + "IntersectionObserver", + "IntersectionObserverEntry", + "Intl", + "IsSearchProviderInstalled", + "Iterator", + "JSON", + "KEEP", + "KEYDOWN", + "KEYFRAMES_RULE", + "KEYFRAME_RULE", + "KEYPRESS", + "KEYUP", + "KeyEvent", + "Keyboard", + "KeyboardEvent", + "KeyboardLayoutMap", + "KeyframeEffect", + "LENGTHADJUST_SPACING", + "LENGTHADJUST_SPACINGANDGLYPHS", + "LENGTHADJUST_UNKNOWN", + "LEQUAL", + "LESS", + "LINEAR", + "LINEAR_DISTANCE", + "LINEAR_MIPMAP_LINEAR", + "LINEAR_MIPMAP_NEAREST", + "LINES", + "LINE_LOOP", + "LINE_STRIP", + "LINE_WIDTH", + "LINK_STATUS", + "LIVE", + "LN10", + "LN2", + "LOADED", + "LOADING", + "LOG10E", + "LOG2E", + "LOWPASS", + "LOWSHELF", + "LOW_FLOAT", + "LOW_INT", + "LSException", + "LSParserFilter", + "LUMINANCE", + "LUMINANCE_ALPHA", + "LargestContentfulPaint", + "LayoutShift", + "LayoutShiftAttribution", + "LinearAccelerationSensor", + "LinkError", + "ListFormat", + "LocalMediaStream", + "Locale", + "Location", + "Lock", + "LockManager", + "MAP_READ", + "MAP_WRITE", + "MAX", + "MAX_3D_TEXTURE_SIZE", + "MAX_ARRAY_TEXTURE_LAYERS", + "MAX_CLIENT_WAIT_TIMEOUT_WEBGL", + "MAX_COLOR_ATTACHMENTS", + "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", + "MAX_COMBINED_TEXTURE_IMAGE_UNITS", + "MAX_COMBINED_UNIFORM_BLOCKS", + "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", + "MAX_CUBE_MAP_TEXTURE_SIZE", + "MAX_DRAW_BUFFERS", + "MAX_ELEMENTS_INDICES", + "MAX_ELEMENTS_VERTICES", + "MAX_ELEMENT_INDEX", + "MAX_FRAGMENT_INPUT_COMPONENTS", + "MAX_FRAGMENT_UNIFORM_BLOCKS", + "MAX_FRAGMENT_UNIFORM_COMPONENTS", + "MAX_FRAGMENT_UNIFORM_VECTORS", + "MAX_PROGRAM_TEXEL_OFFSET", + "MAX_RENDERBUFFER_SIZE", + "MAX_SAFE_INTEGER", + "MAX_SAMPLES", + "MAX_SERVER_WAIT_TIMEOUT", + "MAX_TEXTURE_IMAGE_UNITS", + "MAX_TEXTURE_LOD_BIAS", + "MAX_TEXTURE_MAX_ANISOTROPY_EXT", + "MAX_TEXTURE_SIZE", + "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", + "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", + "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", + "MAX_UNIFORM_BLOCK_SIZE", + "MAX_UNIFORM_BUFFER_BINDINGS", + "MAX_VALUE", + "MAX_VARYING_COMPONENTS", + "MAX_VARYING_VECTORS", + "MAX_VERTEX_ATTRIBS", + "MAX_VERTEX_OUTPUT_COMPONENTS", + "MAX_VERTEX_TEXTURE_IMAGE_UNITS", + "MAX_VERTEX_UNIFORM_BLOCKS", + "MAX_VERTEX_UNIFORM_COMPONENTS", + "MAX_VERTEX_UNIFORM_VECTORS", + "MAX_VIEWPORT_DIMS", + "MEDIA_ERR_ABORTED", + "MEDIA_ERR_DECODE", + "MEDIA_ERR_ENCRYPTED", + "MEDIA_ERR_NETWORK", + "MEDIA_ERR_SRC_NOT_SUPPORTED", + "MEDIA_KEYERR_CLIENT", + "MEDIA_KEYERR_DOMAIN", + "MEDIA_KEYERR_HARDWARECHANGE", + "MEDIA_KEYERR_OUTPUT", + "MEDIA_KEYERR_SERVICE", + "MEDIA_KEYERR_UNKNOWN", + "MEDIA_RULE", + "MEDIUM_FLOAT", + "MEDIUM_INT", + "META_MASK", + "MIDIAccess", + "MIDIConnectionEvent", + "MIDIInput", + "MIDIInputMap", + "MIDIMessageEvent", + "MIDIOutput", + "MIDIOutputMap", + "MIDIPort", + "MIN", + "MIN_PROGRAM_TEXEL_OFFSET", + "MIN_SAFE_INTEGER", + "MIN_VALUE", + "MIRRORED_REPEAT", + "MODE_ASYNCHRONOUS", + "MODE_SYNCHRONOUS", + "MODIFICATION", + "MOUSEDOWN", + "MOUSEDRAG", + "MOUSEMOVE", + "MOUSEOUT", + "MOUSEOVER", + "MOUSEUP", + "MOZ_KEYFRAMES_RULE", + "MOZ_KEYFRAME_RULE", + "MOZ_SOURCE_CURSOR", + "MOZ_SOURCE_ERASER", + "MOZ_SOURCE_KEYBOARD", + "MOZ_SOURCE_MOUSE", + "MOZ_SOURCE_PEN", + "MOZ_SOURCE_TOUCH", + "MOZ_SOURCE_UNKNOWN", + "MSGESTURE_FLAG_BEGIN", + "MSGESTURE_FLAG_CANCEL", + "MSGESTURE_FLAG_END", + "MSGESTURE_FLAG_INERTIA", + "MSGESTURE_FLAG_NONE", + "MSPOINTER_TYPE_MOUSE", + "MSPOINTER_TYPE_PEN", + "MSPOINTER_TYPE_TOUCH", + "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE", + "MS_ASYNC_CALLBACK_STATUS_CANCEL", + "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY", + "MS_ASYNC_CALLBACK_STATUS_ERROR", + "MS_ASYNC_CALLBACK_STATUS_JOIN", + "MS_ASYNC_OP_STATUS_CANCELED", + "MS_ASYNC_OP_STATUS_ERROR", + "MS_ASYNC_OP_STATUS_SUCCESS", + "MS_MANIPULATION_STATE_ACTIVE", + "MS_MANIPULATION_STATE_CANCELLED", + "MS_MANIPULATION_STATE_COMMITTED", + "MS_MANIPULATION_STATE_DRAGGING", + "MS_MANIPULATION_STATE_INERTIA", + "MS_MANIPULATION_STATE_PRESELECT", + "MS_MANIPULATION_STATE_SELECTING", + "MS_MANIPULATION_STATE_STOPPED", + "MS_MEDIA_ERR_ENCRYPTED", + "MS_MEDIA_KEYERR_CLIENT", + "MS_MEDIA_KEYERR_DOMAIN", + "MS_MEDIA_KEYERR_HARDWARECHANGE", + "MS_MEDIA_KEYERR_OUTPUT", + "MS_MEDIA_KEYERR_SERVICE", + "MS_MEDIA_KEYERR_UNKNOWN", + "Map", + "Math", + "MathMLElement", + "MediaCapabilities", + "MediaCapabilitiesInfo", + "MediaController", + "MediaDeviceInfo", + "MediaDevices", + "MediaElementAudioSourceNode", + "MediaEncryptedEvent", + "MediaError", + "MediaKeyError", + "MediaKeyEvent", + "MediaKeyMessageEvent", + "MediaKeyNeededEvent", + "MediaKeySession", + "MediaKeyStatusMap", + "MediaKeySystemAccess", + "MediaKeys", + "MediaList", + "MediaMetadata", + "MediaQueryList", + "MediaQueryListEvent", + "MediaRecorder", + "MediaRecorderErrorEvent", + "MediaSession", + "MediaSettingsRange", + "MediaSource", + "MediaStream", + "MediaStreamAudioDestinationNode", + "MediaStreamAudioSourceNode", + "MediaStreamEvent", + "MediaStreamTrack", + "MediaStreamTrackAudioSourceNode", + "MediaStreamTrackEvent", + "Memory", + "MessageChannel", + "MessageEvent", + "MessagePort", + "Methods", + "MimeType", + "MimeTypeArray", + "Module", + "MouseEvent", + "MouseScrollEvent", + "MozAnimation", + "MozAnimationDelay", + "MozAnimationDirection", + "MozAnimationDuration", + "MozAnimationFillMode", + "MozAnimationIterationCount", + "MozAnimationName", + "MozAnimationPlayState", + "MozAnimationTimingFunction", + "MozAppearance", + "MozBackfaceVisibility", + "MozBinding", + "MozBorderBottomColors", + "MozBorderEnd", + "MozBorderEndColor", + "MozBorderEndStyle", + "MozBorderEndWidth", + "MozBorderImage", + "MozBorderLeftColors", + "MozBorderRightColors", + "MozBorderStart", + "MozBorderStartColor", + "MozBorderStartStyle", + "MozBorderStartWidth", + "MozBorderTopColors", + "MozBoxAlign", + "MozBoxDirection", + "MozBoxFlex", + "MozBoxOrdinalGroup", + "MozBoxOrient", + "MozBoxPack", + "MozBoxSizing", + "MozCSSKeyframeRule", + "MozCSSKeyframesRule", + "MozColumnCount", + "MozColumnFill", + "MozColumnGap", + "MozColumnRule", + "MozColumnRuleColor", + "MozColumnRuleStyle", + "MozColumnRuleWidth", + "MozColumnWidth", + "MozColumns", + "MozContactChangeEvent", + "MozFloatEdge", + "MozFontFeatureSettings", + "MozFontLanguageOverride", + "MozForceBrokenImageIcon", + "MozHyphens", + "MozImageRegion", + "MozMarginEnd", + "MozMarginStart", + "MozMmsEvent", + "MozMmsMessage", + "MozMobileMessageThread", + "MozOSXFontSmoothing", + "MozOrient", + "MozOsxFontSmoothing", + "MozOutlineRadius", + "MozOutlineRadiusBottomleft", + "MozOutlineRadiusBottomright", + "MozOutlineRadiusTopleft", + "MozOutlineRadiusTopright", + "MozPaddingEnd", + "MozPaddingStart", + "MozPerspective", + "MozPerspectiveOrigin", + "MozPowerManager", + "MozSettingsEvent", + "MozSmsEvent", + "MozSmsMessage", + "MozStackSizing", + "MozTabSize", + "MozTextAlignLast", + "MozTextDecorationColor", + "MozTextDecorationLine", + "MozTextDecorationStyle", + "MozTextSizeAdjust", + "MozTransform", + "MozTransformOrigin", + "MozTransformStyle", + "MozTransition", + "MozTransitionDelay", + "MozTransitionDuration", + "MozTransitionProperty", + "MozTransitionTimingFunction", + "MozUserFocus", + "MozUserInput", + "MozUserModify", + "MozUserSelect", + "MozWindowDragging", + "MozWindowShadow", + "MutationEvent", + "MutationObserver", + "MutationRecord", + "NAMESPACE_ERR", + "NAMESPACE_RULE", + "NEAREST", + "NEAREST_MIPMAP_LINEAR", + "NEAREST_MIPMAP_NEAREST", + "NEGATIVE_INFINITY", + "NETWORK_EMPTY", + "NETWORK_ERR", + "NETWORK_IDLE", + "NETWORK_LOADED", + "NETWORK_LOADING", + "NETWORK_NO_SOURCE", + "NEVER", + "NEW", + "NEXT", + "NEXT_NO_DUPLICATE", + "NICEST", + "NODE_AFTER", + "NODE_BEFORE", + "NODE_BEFORE_AND_AFTER", + "NODE_INSIDE", + "NONE", + "NON_TRANSIENT_ERR", + "NOTATION_NODE", + "NOTCH", + "NOTEQUAL", + "NOT_ALLOWED_ERR", + "NOT_FOUND_ERR", + "NOT_READABLE_ERR", + "NOT_SUPPORTED_ERR", + "NO_DATA_ALLOWED_ERR", + "NO_ERR", + "NO_ERROR", + "NO_MODIFICATION_ALLOWED_ERR", + "NUMBER_TYPE", + "NUM_COMPRESSED_TEXTURE_FORMATS", + "NaN", + "NamedNodeMap", + "NavigationPreloadManager", + "Navigator", + "NearbyLinks", + "NetworkInformation", + "Node", + "NodeFilter", + "NodeIterator", + "NodeList", + "Notation", + "Notification", + "NotifyPaintEvent", + "Number", + "NumberFormat", + "OBJECT_TYPE", + "OBSOLETE", + "OK", + "ONE", + "ONE_MINUS_CONSTANT_ALPHA", + "ONE_MINUS_CONSTANT_COLOR", + "ONE_MINUS_DST_ALPHA", + "ONE_MINUS_DST_COLOR", + "ONE_MINUS_SRC_ALPHA", + "ONE_MINUS_SRC_COLOR", + "OPEN", + "OPENED", + "OPENING", + "ORDERED_NODE_ITERATOR_TYPE", + "ORDERED_NODE_SNAPSHOT_TYPE", + "OTHER_ERROR", + "OUT_OF_MEMORY", + "Object", + "OfflineAudioCompletionEvent", + "OfflineAudioContext", + "OfflineResourceList", + "OffscreenCanvas", + "OffscreenCanvasRenderingContext2D", + "Option", + "OrientationSensor", + "OscillatorNode", + "OverconstrainedError", + "OverflowEvent", + "PACK_ALIGNMENT", + "PACK_ROW_LENGTH", + "PACK_SKIP_PIXELS", + "PACK_SKIP_ROWS", + "PAGE_RULE", + "PARSE_ERR", + "PATHSEG_ARC_ABS", + "PATHSEG_ARC_REL", + "PATHSEG_CLOSEPATH", + "PATHSEG_CURVETO_CUBIC_ABS", + "PATHSEG_CURVETO_CUBIC_REL", + "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS", + "PATHSEG_CURVETO_CUBIC_SMOOTH_REL", + "PATHSEG_CURVETO_QUADRATIC_ABS", + "PATHSEG_CURVETO_QUADRATIC_REL", + "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS", + "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL", + "PATHSEG_LINETO_ABS", + "PATHSEG_LINETO_HORIZONTAL_ABS", + "PATHSEG_LINETO_HORIZONTAL_REL", + "PATHSEG_LINETO_REL", + "PATHSEG_LINETO_VERTICAL_ABS", + "PATHSEG_LINETO_VERTICAL_REL", + "PATHSEG_MOVETO_ABS", + "PATHSEG_MOVETO_REL", + "PATHSEG_UNKNOWN", + "PATH_EXISTS_ERR", + "PEAKING", + "PERMISSION_DENIED", + "PERSISTENT", + "PI", + "PIXEL_PACK_BUFFER", + "PIXEL_PACK_BUFFER_BINDING", + "PIXEL_UNPACK_BUFFER", + "PIXEL_UNPACK_BUFFER_BINDING", + "PLAYING_STATE", + "POINTS", + "POLYGON_OFFSET_FACTOR", + "POLYGON_OFFSET_FILL", + "POLYGON_OFFSET_UNITS", + "POSITION_UNAVAILABLE", + "POSITIVE_INFINITY", + "PREV", + "PREV_NO_DUPLICATE", + "PROCESSING_INSTRUCTION_NODE", + "PageChangeEvent", + "PageTransitionEvent", + "PaintRequest", + "PaintRequestList", + "PannerNode", + "PasswordCredential", + "Path2D", + "PaymentAddress", + "PaymentInstruments", + "PaymentManager", + "PaymentMethodChangeEvent", + "PaymentRequest", + "PaymentRequestUpdateEvent", + "PaymentResponse", + "Performance", + "PerformanceElementTiming", + "PerformanceEntry", + "PerformanceEventTiming", + "PerformanceLongTaskTiming", + "PerformanceMark", + "PerformanceMeasure", + "PerformanceNavigation", + "PerformanceNavigationTiming", + "PerformanceObserver", + "PerformanceObserverEntryList", + "PerformancePaintTiming", + "PerformanceResourceTiming", + "PerformanceServerTiming", + "PerformanceTiming", + "PeriodicSyncManager", + "PeriodicWave", + "PermissionStatus", + "Permissions", + "PhotoCapabilities", + "PictureInPictureWindow", + "Plugin", + "PluginArray", + "PluralRules", + "PointerEvent", + "PopStateEvent", + "PopupBlockedEvent", + "Presentation", + "PresentationAvailability", + "PresentationConnection", + "PresentationConnectionAvailableEvent", + "PresentationConnectionCloseEvent", + "PresentationConnectionList", + "PresentationReceiver", + "PresentationRequest", + "ProcessingInstruction", + "ProgressEvent", + "Promise", + "PromiseRejectionEvent", + "PropertyNodeList", + "Proxy", + "PublicKeyCredential", + "PushManager", + "PushSubscription", + "PushSubscriptionOptions", + "Q", + "QUERY_RESOLVE", + "QUERY_RESULT", + "QUERY_RESULT_AVAILABLE", + "QUOTA_ERR", + "QUOTA_EXCEEDED_ERR", + "QueryInterface", + "R11F_G11F_B10F", + "R16F", + "R16I", + "R16UI", + "R32F", + "R32I", + "R32UI", + "R8", + "R8I", + "R8UI", + "R8_SNORM", + "RASTERIZER_DISCARD", + "READ", + "READ_BUFFER", + "READ_FRAMEBUFFER", + "READ_FRAMEBUFFER_BINDING", + "READ_ONLY", + "READ_ONLY_ERR", + "READ_WRITE", + "RED", + "RED_BITS", + "RED_INTEGER", + "REMOVAL", + "RENDERBUFFER", + "RENDERBUFFER_ALPHA_SIZE", + "RENDERBUFFER_BINDING", + "RENDERBUFFER_BLUE_SIZE", + "RENDERBUFFER_DEPTH_SIZE", + "RENDERBUFFER_GREEN_SIZE", + "RENDERBUFFER_HEIGHT", + "RENDERBUFFER_INTERNAL_FORMAT", + "RENDERBUFFER_RED_SIZE", + "RENDERBUFFER_SAMPLES", + "RENDERBUFFER_STENCIL_SIZE", + "RENDERBUFFER_WIDTH", + "RENDERER", + "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC", + "RENDERING_INTENT_AUTO", + "RENDERING_INTENT_PERCEPTUAL", + "RENDERING_INTENT_RELATIVE_COLORIMETRIC", + "RENDERING_INTENT_SATURATION", + "RENDERING_INTENT_UNKNOWN", + "RENDER_ATTACHMENT", + "REPEAT", + "REPLACE", + "RG", + "RG16F", + "RG16I", + "RG16UI", + "RG32F", + "RG32I", + "RG32UI", + "RG8", + "RG8I", + "RG8UI", + "RG8_SNORM", + "RGB", + "RGB10_A2", + "RGB10_A2UI", + "RGB16F", + "RGB16I", + "RGB16UI", + "RGB32F", + "RGB32I", + "RGB32UI", + "RGB565", + "RGB5_A1", + "RGB8", + "RGB8I", + "RGB8UI", + "RGB8_SNORM", + "RGB9_E5", + "RGBA", + "RGBA16F", + "RGBA16I", + "RGBA16UI", + "RGBA32F", + "RGBA32I", + "RGBA32UI", + "RGBA4", + "RGBA8", + "RGBA8I", + "RGBA8UI", + "RGBA8_SNORM", + "RGBA_INTEGER", + "RGBColor", + "RGB_INTEGER", + "RG_INTEGER", + "ROTATION_CLOCKWISE", + "ROTATION_COUNTERCLOCKWISE", + "RTCCertificate", + "RTCDTMFSender", + "RTCDTMFToneChangeEvent", + "RTCDataChannel", + "RTCDataChannelEvent", + "RTCDtlsTransport", + "RTCError", + "RTCErrorEvent", + "RTCIceCandidate", + "RTCIceTransport", + "RTCPeerConnection", + "RTCPeerConnectionIceErrorEvent", + "RTCPeerConnectionIceEvent", + "RTCRtpReceiver", + "RTCRtpSender", + "RTCRtpTransceiver", + "RTCSctpTransport", + "RTCSessionDescription", + "RTCStatsReport", + "RTCTrackEvent", + "RadioNodeList", + "Range", + "RangeError", + "RangeException", + "ReadableStream", + "ReadableStreamDefaultReader", + "RecordErrorEvent", + "Rect", + "ReferenceError", + "Reflect", + "RegExp", + "RelativeOrientationSensor", + "RelativeTimeFormat", + "RemotePlayback", + "Report", + "ReportBody", + "ReportingObserver", + "Request", + "ResizeObserver", + "ResizeObserverEntry", + "ResizeObserverSize", + "Response", + "RuntimeError", + "SAMPLER_2D", + "SAMPLER_2D_ARRAY", + "SAMPLER_2D_ARRAY_SHADOW", + "SAMPLER_2D_SHADOW", + "SAMPLER_3D", + "SAMPLER_BINDING", + "SAMPLER_CUBE", + "SAMPLER_CUBE_SHADOW", + "SAMPLES", + "SAMPLE_ALPHA_TO_COVERAGE", + "SAMPLE_BUFFERS", + "SAMPLE_COVERAGE", + "SAMPLE_COVERAGE_INVERT", + "SAMPLE_COVERAGE_VALUE", + "SAWTOOTH", + "SCHEDULED_STATE", + "SCISSOR_BOX", + "SCISSOR_TEST", + "SCROLL_PAGE_DOWN", + "SCROLL_PAGE_UP", + "SDP_ANSWER", + "SDP_OFFER", + "SDP_PRANSWER", + "SECURITY_ERR", + "SELECT", + "SEPARATE_ATTRIBS", + "SERIALIZE_ERR", + "SEVERITY_ERROR", + "SEVERITY_FATAL_ERROR", + "SEVERITY_WARNING", + "SHADER_COMPILER", + "SHADER_TYPE", + "SHADING_LANGUAGE_VERSION", + "SHIFT_MASK", + "SHORT", + "SHOWING", + "SHOW_ALL", + "SHOW_ATTRIBUTE", + "SHOW_CDATA_SECTION", + "SHOW_COMMENT", + "SHOW_DOCUMENT", + "SHOW_DOCUMENT_FRAGMENT", + "SHOW_DOCUMENT_TYPE", + "SHOW_ELEMENT", + "SHOW_ENTITY", + "SHOW_ENTITY_REFERENCE", + "SHOW_NOTATION", + "SHOW_PROCESSING_INSTRUCTION", + "SHOW_TEXT", + "SIGNALED", + "SIGNED_NORMALIZED", + "SINE", + "SOUNDFIELD", + "SQLException", + "SQRT1_2", + "SQRT2", + "SQUARE", + "SRC_ALPHA", + "SRC_ALPHA_SATURATE", + "SRC_COLOR", + "SRGB", + "SRGB8", + "SRGB8_ALPHA8", + "START_TO_END", + "START_TO_START", + "STATIC_COPY", + "STATIC_DRAW", + "STATIC_READ", + "STENCIL", + "STENCIL_ATTACHMENT", + "STENCIL_BACK_FAIL", + "STENCIL_BACK_FUNC", + "STENCIL_BACK_PASS_DEPTH_FAIL", + "STENCIL_BACK_PASS_DEPTH_PASS", + "STENCIL_BACK_REF", + "STENCIL_BACK_VALUE_MASK", + "STENCIL_BACK_WRITEMASK", + "STENCIL_BITS", + "STENCIL_BUFFER_BIT", + "STENCIL_CLEAR_VALUE", + "STENCIL_FAIL", + "STENCIL_FUNC", + "STENCIL_INDEX", + "STENCIL_INDEX8", + "STENCIL_PASS_DEPTH_FAIL", + "STENCIL_PASS_DEPTH_PASS", + "STENCIL_REF", + "STENCIL_TEST", + "STENCIL_VALUE_MASK", + "STENCIL_WRITEMASK", + "STORAGE", + "STORAGE_BINDING", + "STREAM_COPY", + "STREAM_DRAW", + "STREAM_READ", + "STRING_TYPE", + "STYLE_RULE", + "SUBPIXEL_BITS", + "SUPPORTS_RULE", + "SVGAElement", + "SVGAltGlyphDefElement", + "SVGAltGlyphElement", + "SVGAltGlyphItemElement", + "SVGAngle", + "SVGAnimateColorElement", + "SVGAnimateElement", + "SVGAnimateMotionElement", + "SVGAnimateTransformElement", + "SVGAnimatedAngle", + "SVGAnimatedBoolean", + "SVGAnimatedEnumeration", + "SVGAnimatedInteger", + "SVGAnimatedLength", + "SVGAnimatedLengthList", + "SVGAnimatedNumber", + "SVGAnimatedNumberList", + "SVGAnimatedPreserveAspectRatio", + "SVGAnimatedRect", + "SVGAnimatedString", + "SVGAnimatedTransformList", + "SVGAnimationElement", + "SVGCircleElement", + "SVGClipPathElement", + "SVGColor", + "SVGComponentTransferFunctionElement", + "SVGCursorElement", + "SVGDefsElement", + "SVGDescElement", + "SVGDiscardElement", + "SVGDocument", + "SVGElement", + "SVGElementInstance", + "SVGElementInstanceList", + "SVGEllipseElement", + "SVGException", + "SVGFEBlendElement", + "SVGFEColorMatrixElement", + "SVGFEComponentTransferElement", + "SVGFECompositeElement", + "SVGFEConvolveMatrixElement", + "SVGFEDiffuseLightingElement", + "SVGFEDisplacementMapElement", + "SVGFEDistantLightElement", + "SVGFEDropShadowElement", + "SVGFEFloodElement", + "SVGFEFuncAElement", + "SVGFEFuncBElement", + "SVGFEFuncGElement", + "SVGFEFuncRElement", + "SVGFEGaussianBlurElement", + "SVGFEImageElement", + "SVGFEMergeElement", + "SVGFEMergeNodeElement", + "SVGFEMorphologyElement", + "SVGFEOffsetElement", + "SVGFEPointLightElement", + "SVGFESpecularLightingElement", + "SVGFESpotLightElement", + "SVGFETileElement", + "SVGFETurbulenceElement", + "SVGFilterElement", + "SVGFontElement", + "SVGFontFaceElement", + "SVGFontFaceFormatElement", + "SVGFontFaceNameElement", + "SVGFontFaceSrcElement", + "SVGFontFaceUriElement", + "SVGForeignObjectElement", + "SVGGElement", + "SVGGeometryElement", + "SVGGlyphElement", + "SVGGlyphRefElement", + "SVGGradientElement", + "SVGGraphicsElement", + "SVGHKernElement", + "SVGImageElement", + "SVGLength", + "SVGLengthList", + "SVGLineElement", + "SVGLinearGradientElement", + "SVGMPathElement", + "SVGMarkerElement", + "SVGMaskElement", + "SVGMatrix", + "SVGMetadataElement", + "SVGMissingGlyphElement", + "SVGNumber", + "SVGNumberList", + "SVGPaint", + "SVGPathElement", + "SVGPathSeg", + "SVGPathSegArcAbs", + "SVGPathSegArcRel", + "SVGPathSegClosePath", + "SVGPathSegCurvetoCubicAbs", + "SVGPathSegCurvetoCubicRel", + "SVGPathSegCurvetoCubicSmoothAbs", + "SVGPathSegCurvetoCubicSmoothRel", + "SVGPathSegCurvetoQuadraticAbs", + "SVGPathSegCurvetoQuadraticRel", + "SVGPathSegCurvetoQuadraticSmoothAbs", + "SVGPathSegCurvetoQuadraticSmoothRel", + "SVGPathSegLinetoAbs", + "SVGPathSegLinetoHorizontalAbs", + "SVGPathSegLinetoHorizontalRel", + "SVGPathSegLinetoRel", + "SVGPathSegLinetoVerticalAbs", + "SVGPathSegLinetoVerticalRel", + "SVGPathSegList", + "SVGPathSegMovetoAbs", + "SVGPathSegMovetoRel", + "SVGPatternElement", + "SVGPoint", + "SVGPointList", + "SVGPolygonElement", + "SVGPolylineElement", + "SVGPreserveAspectRatio", + "SVGRadialGradientElement", + "SVGRect", + "SVGRectElement", + "SVGRenderingIntent", + "SVGSVGElement", + "SVGScriptElement", + "SVGSetElement", + "SVGStopElement", + "SVGStringList", + "SVGStyleElement", + "SVGSwitchElement", + "SVGSymbolElement", + "SVGTRefElement", + "SVGTSpanElement", + "SVGTextContentElement", + "SVGTextElement", + "SVGTextPathElement", + "SVGTextPositioningElement", + "SVGTitleElement", + "SVGTransform", + "SVGTransformList", + "SVGUnitTypes", + "SVGUseElement", + "SVGVKernElement", + "SVGViewElement", + "SVGViewSpec", + "SVGZoomAndPan", + "SVGZoomEvent", + "SVG_ANGLETYPE_DEG", + "SVG_ANGLETYPE_GRAD", + "SVG_ANGLETYPE_RAD", + "SVG_ANGLETYPE_UNKNOWN", + "SVG_ANGLETYPE_UNSPECIFIED", + "SVG_CHANNEL_A", + "SVG_CHANNEL_B", + "SVG_CHANNEL_G", + "SVG_CHANNEL_R", + "SVG_CHANNEL_UNKNOWN", + "SVG_COLORTYPE_CURRENTCOLOR", + "SVG_COLORTYPE_RGBCOLOR", + "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR", + "SVG_COLORTYPE_UNKNOWN", + "SVG_EDGEMODE_DUPLICATE", + "SVG_EDGEMODE_NONE", + "SVG_EDGEMODE_UNKNOWN", + "SVG_EDGEMODE_WRAP", + "SVG_FEBLEND_MODE_COLOR", + "SVG_FEBLEND_MODE_COLOR_BURN", + "SVG_FEBLEND_MODE_COLOR_DODGE", + "SVG_FEBLEND_MODE_DARKEN", + "SVG_FEBLEND_MODE_DIFFERENCE", + "SVG_FEBLEND_MODE_EXCLUSION", + "SVG_FEBLEND_MODE_HARD_LIGHT", + "SVG_FEBLEND_MODE_HUE", + "SVG_FEBLEND_MODE_LIGHTEN", + "SVG_FEBLEND_MODE_LUMINOSITY", + "SVG_FEBLEND_MODE_MULTIPLY", + "SVG_FEBLEND_MODE_NORMAL", + "SVG_FEBLEND_MODE_OVERLAY", + "SVG_FEBLEND_MODE_SATURATION", + "SVG_FEBLEND_MODE_SCREEN", + "SVG_FEBLEND_MODE_SOFT_LIGHT", + "SVG_FEBLEND_MODE_UNKNOWN", + "SVG_FECOLORMATRIX_TYPE_HUEROTATE", + "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA", + "SVG_FECOLORMATRIX_TYPE_MATRIX", + "SVG_FECOLORMATRIX_TYPE_SATURATE", + "SVG_FECOLORMATRIX_TYPE_UNKNOWN", + "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE", + "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA", + "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY", + "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR", + "SVG_FECOMPONENTTRANSFER_TYPE_TABLE", + "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN", + "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC", + "SVG_FECOMPOSITE_OPERATOR_ATOP", + "SVG_FECOMPOSITE_OPERATOR_IN", + "SVG_FECOMPOSITE_OPERATOR_OUT", + "SVG_FECOMPOSITE_OPERATOR_OVER", + "SVG_FECOMPOSITE_OPERATOR_UNKNOWN", + "SVG_FECOMPOSITE_OPERATOR_XOR", + "SVG_INVALID_VALUE_ERR", + "SVG_LENGTHTYPE_CM", + "SVG_LENGTHTYPE_EMS", + "SVG_LENGTHTYPE_EXS", + "SVG_LENGTHTYPE_IN", + "SVG_LENGTHTYPE_MM", + "SVG_LENGTHTYPE_NUMBER", + "SVG_LENGTHTYPE_PC", + "SVG_LENGTHTYPE_PERCENTAGE", + "SVG_LENGTHTYPE_PT", + "SVG_LENGTHTYPE_PX", + "SVG_LENGTHTYPE_UNKNOWN", + "SVG_MARKERUNITS_STROKEWIDTH", + "SVG_MARKERUNITS_UNKNOWN", + "SVG_MARKERUNITS_USERSPACEONUSE", + "SVG_MARKER_ORIENT_ANGLE", + "SVG_MARKER_ORIENT_AUTO", + "SVG_MARKER_ORIENT_UNKNOWN", + "SVG_MASKTYPE_ALPHA", + "SVG_MASKTYPE_LUMINANCE", + "SVG_MATRIX_NOT_INVERTABLE", + "SVG_MEETORSLICE_MEET", + "SVG_MEETORSLICE_SLICE", + "SVG_MEETORSLICE_UNKNOWN", + "SVG_MORPHOLOGY_OPERATOR_DILATE", + "SVG_MORPHOLOGY_OPERATOR_ERODE", + "SVG_MORPHOLOGY_OPERATOR_UNKNOWN", + "SVG_PAINTTYPE_CURRENTCOLOR", + "SVG_PAINTTYPE_NONE", + "SVG_PAINTTYPE_RGBCOLOR", + "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR", + "SVG_PAINTTYPE_UNKNOWN", + "SVG_PAINTTYPE_URI", + "SVG_PAINTTYPE_URI_CURRENTCOLOR", + "SVG_PAINTTYPE_URI_NONE", + "SVG_PAINTTYPE_URI_RGBCOLOR", + "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR", + "SVG_PRESERVEASPECTRATIO_NONE", + "SVG_PRESERVEASPECTRATIO_UNKNOWN", + "SVG_PRESERVEASPECTRATIO_XMAXYMAX", + "SVG_PRESERVEASPECTRATIO_XMAXYMID", + "SVG_PRESERVEASPECTRATIO_XMAXYMIN", + "SVG_PRESERVEASPECTRATIO_XMIDYMAX", + "SVG_PRESERVEASPECTRATIO_XMIDYMID", + "SVG_PRESERVEASPECTRATIO_XMIDYMIN", + "SVG_PRESERVEASPECTRATIO_XMINYMAX", + "SVG_PRESERVEASPECTRATIO_XMINYMID", + "SVG_PRESERVEASPECTRATIO_XMINYMIN", + "SVG_SPREADMETHOD_PAD", + "SVG_SPREADMETHOD_REFLECT", + "SVG_SPREADMETHOD_REPEAT", + "SVG_SPREADMETHOD_UNKNOWN", + "SVG_STITCHTYPE_NOSTITCH", + "SVG_STITCHTYPE_STITCH", + "SVG_STITCHTYPE_UNKNOWN", + "SVG_TRANSFORM_MATRIX", + "SVG_TRANSFORM_ROTATE", + "SVG_TRANSFORM_SCALE", + "SVG_TRANSFORM_SKEWX", + "SVG_TRANSFORM_SKEWY", + "SVG_TRANSFORM_TRANSLATE", + "SVG_TRANSFORM_UNKNOWN", + "SVG_TURBULENCE_TYPE_FRACTALNOISE", + "SVG_TURBULENCE_TYPE_TURBULENCE", + "SVG_TURBULENCE_TYPE_UNKNOWN", + "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX", + "SVG_UNIT_TYPE_UNKNOWN", + "SVG_UNIT_TYPE_USERSPACEONUSE", + "SVG_WRONG_TYPE_ERR", + "SVG_ZOOMANDPAN_DISABLE", + "SVG_ZOOMANDPAN_MAGNIFY", + "SVG_ZOOMANDPAN_UNKNOWN", + "SYNC_CONDITION", + "SYNC_FENCE", + "SYNC_FLAGS", + "SYNC_FLUSH_COMMANDS_BIT", + "SYNC_GPU_COMMANDS_COMPLETE", + "SYNC_STATUS", + "SYNTAX_ERR", + "SavedPages", + "Screen", + "ScreenOrientation", + "Script", + "ScriptProcessorNode", + "ScrollAreaEvent", + "SecurityPolicyViolationEvent", + "Selection", + "Sensor", + "SensorErrorEvent", + "ServiceWorker", + "ServiceWorkerContainer", + "ServiceWorkerRegistration", + "SessionDescription", + "Set", + "ShadowRoot", + "SharedArrayBuffer", + "SharedWorker", + "SimpleGestureEvent", + "SourceBuffer", + "SourceBufferList", + "SpeechSynthesis", + "SpeechSynthesisErrorEvent", + "SpeechSynthesisEvent", + "SpeechSynthesisUtterance", + "SpeechSynthesisVoice", + "StaticRange", + "StereoPannerNode", + "StopIteration", + "Storage", + "StorageEvent", + "StorageManager", + "String", + "StructType", + "StylePropertyMap", + "StylePropertyMapReadOnly", + "StyleSheet", + "StyleSheetList", + "SubmitEvent", + "SubtleCrypto", + "Symbol", + "SyncManager", + "SyntaxError", + "TEMPORARY", + "TEXTPATH_METHODTYPE_ALIGN", + "TEXTPATH_METHODTYPE_STRETCH", + "TEXTPATH_METHODTYPE_UNKNOWN", + "TEXTPATH_SPACINGTYPE_AUTO", + "TEXTPATH_SPACINGTYPE_EXACT", + "TEXTPATH_SPACINGTYPE_UNKNOWN", + "TEXTURE", + "TEXTURE0", + "TEXTURE1", + "TEXTURE10", + "TEXTURE11", + "TEXTURE12", + "TEXTURE13", + "TEXTURE14", + "TEXTURE15", + "TEXTURE16", + "TEXTURE17", + "TEXTURE18", + "TEXTURE19", + "TEXTURE2", + "TEXTURE20", + "TEXTURE21", + "TEXTURE22", + "TEXTURE23", + "TEXTURE24", + "TEXTURE25", + "TEXTURE26", + "TEXTURE27", + "TEXTURE28", + "TEXTURE29", + "TEXTURE3", + "TEXTURE30", + "TEXTURE31", + "TEXTURE4", + "TEXTURE5", + "TEXTURE6", + "TEXTURE7", + "TEXTURE8", + "TEXTURE9", + "TEXTURE_2D", + "TEXTURE_2D_ARRAY", + "TEXTURE_3D", + "TEXTURE_BASE_LEVEL", + "TEXTURE_BINDING", + "TEXTURE_BINDING_2D", + "TEXTURE_BINDING_2D_ARRAY", + "TEXTURE_BINDING_3D", + "TEXTURE_BINDING_CUBE_MAP", + "TEXTURE_COMPARE_FUNC", + "TEXTURE_COMPARE_MODE", + "TEXTURE_CUBE_MAP", + "TEXTURE_CUBE_MAP_NEGATIVE_X", + "TEXTURE_CUBE_MAP_NEGATIVE_Y", + "TEXTURE_CUBE_MAP_NEGATIVE_Z", + "TEXTURE_CUBE_MAP_POSITIVE_X", + "TEXTURE_CUBE_MAP_POSITIVE_Y", + "TEXTURE_CUBE_MAP_POSITIVE_Z", + "TEXTURE_IMMUTABLE_FORMAT", + "TEXTURE_IMMUTABLE_LEVELS", + "TEXTURE_MAG_FILTER", + "TEXTURE_MAX_ANISOTROPY_EXT", + "TEXTURE_MAX_LEVEL", + "TEXTURE_MAX_LOD", + "TEXTURE_MIN_FILTER", + "TEXTURE_MIN_LOD", + "TEXTURE_WRAP_R", + "TEXTURE_WRAP_S", + "TEXTURE_WRAP_T", + "TEXT_NODE", + "TIMEOUT", + "TIMEOUT_ERR", + "TIMEOUT_EXPIRED", + "TIMEOUT_IGNORED", + "TOO_LARGE_ERR", + "TRANSACTION_INACTIVE_ERR", + "TRANSFORM_FEEDBACK", + "TRANSFORM_FEEDBACK_ACTIVE", + "TRANSFORM_FEEDBACK_BINDING", + "TRANSFORM_FEEDBACK_BUFFER", + "TRANSFORM_FEEDBACK_BUFFER_BINDING", + "TRANSFORM_FEEDBACK_BUFFER_MODE", + "TRANSFORM_FEEDBACK_BUFFER_SIZE", + "TRANSFORM_FEEDBACK_BUFFER_START", + "TRANSFORM_FEEDBACK_PAUSED", + "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN", + "TRANSFORM_FEEDBACK_VARYINGS", + "TRIANGLE", + "TRIANGLES", + "TRIANGLE_FAN", + "TRIANGLE_STRIP", + "TYPE_BACK_FORWARD", + "TYPE_ERR", + "TYPE_MISMATCH_ERR", + "TYPE_NAVIGATE", + "TYPE_RELOAD", + "TYPE_RESERVED", + "Table", + "TaskAttributionTiming", + "Text", + "TextDecoder", + "TextDecoderStream", + "TextEncoder", + "TextEncoderStream", + "TextEvent", + "TextMetrics", + "TextTrack", + "TextTrackCue", + "TextTrackCueList", + "TextTrackList", + "TimeEvent", + "TimeRanges", + "Touch", + "TouchEvent", + "TouchList", + "TrackEvent", + "TransformStream", + "TransitionEvent", + "TreeWalker", + "TrustedHTML", + "TrustedScript", + "TrustedScriptURL", + "TrustedTypePolicy", + "TrustedTypePolicyFactory", + "TypeError", + "TypedObject", + "U2F", + "UIEvent", + "UNCACHED", + "UNIFORM", + "UNIFORM_ARRAY_STRIDE", + "UNIFORM_BLOCK_ACTIVE_UNIFORMS", + "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES", + "UNIFORM_BLOCK_BINDING", + "UNIFORM_BLOCK_DATA_SIZE", + "UNIFORM_BLOCK_INDEX", + "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER", + "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER", + "UNIFORM_BUFFER", + "UNIFORM_BUFFER_BINDING", + "UNIFORM_BUFFER_OFFSET_ALIGNMENT", + "UNIFORM_BUFFER_SIZE", + "UNIFORM_BUFFER_START", + "UNIFORM_IS_ROW_MAJOR", + "UNIFORM_MATRIX_STRIDE", + "UNIFORM_OFFSET", + "UNIFORM_SIZE", + "UNIFORM_TYPE", + "UNKNOWN_ERR", + "UNKNOWN_RULE", + "UNMASKED_RENDERER_WEBGL", + "UNMASKED_VENDOR_WEBGL", + "UNORDERED_NODE_ITERATOR_TYPE", + "UNORDERED_NODE_SNAPSHOT_TYPE", + "UNPACK_ALIGNMENT", + "UNPACK_COLORSPACE_CONVERSION_WEBGL", + "UNPACK_FLIP_Y_WEBGL", + "UNPACK_IMAGE_HEIGHT", + "UNPACK_PREMULTIPLY_ALPHA_WEBGL", + "UNPACK_ROW_LENGTH", + "UNPACK_SKIP_IMAGES", + "UNPACK_SKIP_PIXELS", + "UNPACK_SKIP_ROWS", + "UNSCHEDULED_STATE", + "UNSENT", + "UNSIGNALED", + "UNSIGNED_BYTE", + "UNSIGNED_INT", + "UNSIGNED_INT_10F_11F_11F_REV", + "UNSIGNED_INT_24_8", + "UNSIGNED_INT_2_10_10_10_REV", + "UNSIGNED_INT_5_9_9_9_REV", + "UNSIGNED_INT_SAMPLER_2D", + "UNSIGNED_INT_SAMPLER_2D_ARRAY", + "UNSIGNED_INT_SAMPLER_3D", + "UNSIGNED_INT_SAMPLER_CUBE", + "UNSIGNED_INT_VEC2", + "UNSIGNED_INT_VEC3", + "UNSIGNED_INT_VEC4", + "UNSIGNED_NORMALIZED", + "UNSIGNED_SHORT", + "UNSIGNED_SHORT_4_4_4_4", + "UNSIGNED_SHORT_5_5_5_1", + "UNSIGNED_SHORT_5_6_5", + "UNSPECIFIED_EVENT_TYPE_ERR", + "UPDATEREADY", + "URIError", + "URL", + "URLSearchParams", + "URLUnencoded", + "URL_MISMATCH_ERR", + "USB", + "USBAlternateInterface", + "USBConfiguration", + "USBConnectionEvent", + "USBDevice", + "USBEndpoint", + "USBInTransferResult", + "USBInterface", + "USBIsochronousInTransferPacket", + "USBIsochronousInTransferResult", + "USBIsochronousOutTransferPacket", + "USBIsochronousOutTransferResult", + "USBOutTransferResult", + "UTC", + "Uint16Array", + "Uint32Array", + "Uint8Array", + "Uint8ClampedArray", + "UserActivation", + "UserMessageHandler", + "UserMessageHandlersNamespace", + "UserProximityEvent", + "VALIDATE_STATUS", + "VALIDATION_ERR", + "VARIABLES_RULE", + "VENDOR", + "VERSION", + "VERSION_CHANGE", + "VERSION_ERR", + "VERTEX", + "VERTEX_ARRAY_BINDING", + "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", + "VERTEX_ATTRIB_ARRAY_DIVISOR", + "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE", + "VERTEX_ATTRIB_ARRAY_ENABLED", + "VERTEX_ATTRIB_ARRAY_INTEGER", + "VERTEX_ATTRIB_ARRAY_NORMALIZED", + "VERTEX_ATTRIB_ARRAY_POINTER", + "VERTEX_ATTRIB_ARRAY_SIZE", + "VERTEX_ATTRIB_ARRAY_STRIDE", + "VERTEX_ATTRIB_ARRAY_TYPE", + "VERTEX_SHADER", + "VERTICAL", + "VERTICAL_AXIS", + "VER_ERR", + "VIEWPORT", + "VIEWPORT_RULE", + "VRDisplay", + "VRDisplayCapabilities", + "VRDisplayEvent", + "VREyeParameters", + "VRFieldOfView", + "VRFrameData", + "VRPose", + "VRStageParameters", + "VTTCue", + "VTTRegion", + "ValidityState", + "VideoPlaybackQuality", + "VideoStreamTrack", + "VisualViewport", + "WAIT_FAILED", + "WEBKIT_FILTER_RULE", + "WEBKIT_KEYFRAMES_RULE", + "WEBKIT_KEYFRAME_RULE", + "WEBKIT_REGION_RULE", + "WRITE", + "WRONG_DOCUMENT_ERR", + "WakeLock", + "WakeLockSentinel", + "WasmAnyRef", + "WaveShaperNode", + "WeakMap", + "WeakRef", + "WeakSet", + "WebAssembly", + "WebGL2RenderingContext", + "WebGLActiveInfo", + "WebGLBuffer", + "WebGLContextEvent", + "WebGLFramebuffer", + "WebGLProgram", + "WebGLQuery", + "WebGLRenderbuffer", + "WebGLRenderingContext", + "WebGLSampler", + "WebGLShader", + "WebGLShaderPrecisionFormat", + "WebGLSync", + "WebGLTexture", + "WebGLTransformFeedback", + "WebGLUniformLocation", + "WebGLVertexArray", + "WebGLVertexArrayObject", + "WebKitAnimationEvent", + "WebKitBlobBuilder", + "WebKitCSSFilterRule", + "WebKitCSSFilterValue", + "WebKitCSSKeyframeRule", + "WebKitCSSKeyframesRule", + "WebKitCSSMatrix", + "WebKitCSSRegionRule", + "WebKitCSSTransformValue", + "WebKitDataCue", + "WebKitGamepad", + "WebKitMediaKeyError", + "WebKitMediaKeyMessageEvent", + "WebKitMediaKeySession", + "WebKitMediaKeys", + "WebKitMediaSource", + "WebKitMutationObserver", + "WebKitNamespace", + "WebKitPlaybackTargetAvailabilityEvent", + "WebKitPoint", + "WebKitShadowRoot", + "WebKitSourceBuffer", + "WebKitSourceBufferList", + "WebKitTransitionEvent", + "WebSocket", + "WebkitAlignContent", + "WebkitAlignItems", + "WebkitAlignSelf", + "WebkitAnimation", + "WebkitAnimationDelay", + "WebkitAnimationDirection", + "WebkitAnimationDuration", + "WebkitAnimationFillMode", + "WebkitAnimationIterationCount", + "WebkitAnimationName", + "WebkitAnimationPlayState", + "WebkitAnimationTimingFunction", + "WebkitAppearance", + "WebkitBackfaceVisibility", + "WebkitBackgroundClip", + "WebkitBackgroundOrigin", + "WebkitBackgroundSize", + "WebkitBorderBottomLeftRadius", + "WebkitBorderBottomRightRadius", + "WebkitBorderImage", + "WebkitBorderRadius", + "WebkitBorderTopLeftRadius", + "WebkitBorderTopRightRadius", + "WebkitBoxAlign", + "WebkitBoxDirection", + "WebkitBoxFlex", + "WebkitBoxOrdinalGroup", + "WebkitBoxOrient", + "WebkitBoxPack", + "WebkitBoxShadow", + "WebkitBoxSizing", + "WebkitFilter", + "WebkitFlex", + "WebkitFlexBasis", + "WebkitFlexDirection", + "WebkitFlexFlow", + "WebkitFlexGrow", + "WebkitFlexShrink", + "WebkitFlexWrap", + "WebkitJustifyContent", + "WebkitLineClamp", + "WebkitMask", + "WebkitMaskClip", + "WebkitMaskComposite", + "WebkitMaskImage", + "WebkitMaskOrigin", + "WebkitMaskPosition", + "WebkitMaskPositionX", + "WebkitMaskPositionY", + "WebkitMaskRepeat", + "WebkitMaskSize", + "WebkitOrder", + "WebkitPerspective", + "WebkitPerspectiveOrigin", + "WebkitTextFillColor", + "WebkitTextSizeAdjust", + "WebkitTextStroke", + "WebkitTextStrokeColor", + "WebkitTextStrokeWidth", + "WebkitTransform", + "WebkitTransformOrigin", + "WebkitTransformStyle", + "WebkitTransition", + "WebkitTransitionDelay", + "WebkitTransitionDuration", + "WebkitTransitionProperty", + "WebkitTransitionTimingFunction", + "WebkitUserSelect", + "WheelEvent", + "Window", + "Worker", + "Worklet", + "WritableStream", + "WritableStreamDefaultWriter", + "XMLDocument", + "XMLHttpRequest", + "XMLHttpRequestEventTarget", + "XMLHttpRequestException", + "XMLHttpRequestProgressEvent", + "XMLHttpRequestUpload", + "XMLSerializer", + "XMLStylesheetProcessingInstruction", + "XPathEvaluator", + "XPathException", + "XPathExpression", + "XPathNSResolver", + "XPathResult", + "XRBoundedReferenceSpace", + "XRDOMOverlayState", + "XRFrame", + "XRHitTestResult", + "XRHitTestSource", + "XRInputSource", + "XRInputSourceArray", + "XRInputSourceEvent", + "XRInputSourcesChangeEvent", + "XRLayer", + "XRPose", + "XRRay", + "XRReferenceSpace", + "XRReferenceSpaceEvent", + "XRRenderState", + "XRRigidTransform", + "XRSession", + "XRSessionEvent", + "XRSpace", + "XRSystem", + "XRTransientInputHitTestResult", + "XRTransientInputHitTestSource", + "XRView", + "XRViewerPose", + "XRViewport", + "XRWebGLLayer", + "XSLTProcessor", + "ZERO", + "_XD0M_", + "_YD0M_", + "__brand", + "__defineGetter__", + "__defineSetter__", + "__lookupGetter__", + "__lookupSetter__", + "__opera", + "__proto__", + "_browserjsran", + "a", + "aLink", + "abbr", + "abort", + "aborted", + "abs", + "absolute", + "acceleration", + "accelerationIncludingGravity", + "accelerator", + "accept", + "acceptCharset", + "acceptNode", + "access", + "accessKey", + "accessKeyLabel", + "accuracy", + "acos", + "acosh", + "action", + "actionURL", + "actions", + "activated", + "active", + "activeCues", + "activeElement", + "activeSourceBuffers", + "activeSourceCount", + "activeTexture", + "activeVRDisplays", + "actualBoundingBoxAscent", + "actualBoundingBoxDescent", + "actualBoundingBoxLeft", + "actualBoundingBoxRight", + "add", + "addAll", + "addBehavior", + "addCandidate", + "addColorStop", + "addCue", + "addElement", + "addEventListener", + "addFilter", + "addFromString", + "addFromUri", + "addIceCandidate", + "addImport", + "addListener", + "addModule", + "addNamed", + "addPageRule", + "addPath", + "addPointer", + "addRange", + "addRegion", + "addRule", + "addSearchEngine", + "addSourceBuffer", + "addStream", + "addTextTrack", + "addTrack", + "addTransceiver", + "addWakeLockListener", + "added", + "addedNodes", + "additionalName", + "additiveSymbols", + "addons", + "address", + "addressLine", + "addressModeU", + "addressModeV", + "addressModeW", + "adoptNode", + "adoptedStyleSheets", + "adr", + "advance", + "after", + "album", + "alert", + "algorithm", + "align", + "align-content", + "align-items", + "align-self", + "alignContent", + "alignItems", + "alignSelf", + "alignmentBaseline", + "alinkColor", + "all", + "allSettled", + "allow", + "allowFullscreen", + "allowPaymentRequest", + "allowedDirections", + "allowedFeatures", + "allowedToPlay", + "allowsFeature", + "alpha", + "alphaMode", + "alphaToCoverageEnabled", + "alt", + "altGraphKey", + "altHtml", + "altKey", + "altLeft", + "alternate", + "alternateSetting", + "alternates", + "altitude", + "altitudeAccuracy", + "amplitude", + "ancestorOrigins", + "anchor", + "anchorNode", + "anchorOffset", + "anchors", + "and", + "angle", + "angularAcceleration", + "angularVelocity", + "animVal", + "animate", + "animatedInstanceRoot", + "animatedNormalizedPathSegList", + "animatedPathSegList", + "animatedPoints", + "animation", + "animation-delay", + "animation-direction", + "animation-duration", + "animation-fill-mode", + "animation-iteration-count", + "animation-name", + "animation-play-state", + "animation-timing-function", + "animationDelay", + "animationDirection", + "animationDuration", + "animationFillMode", + "animationIterationCount", + "animationName", + "animationPlayState", + "animationStartTime", + "animationTimingFunction", + "animationsPaused", + "anniversary", + "antialias", + "anticipatedRemoval", + "any", + "app", + "appCodeName", + "appMinorVersion", + "appName", + "appNotifications", + "appVersion", + "appearance", + "append", + "appendBuffer", + "appendChild", + "appendData", + "appendItem", + "appendMedium", + "appendNamed", + "appendRule", + "appendStream", + "appendWindowEnd", + "appendWindowStart", + "applets", + "applicationCache", + "applicationServerKey", + "apply", + "applyConstraints", + "applyElement", + "arc", + "arcTo", + "architecture", + "archive", + "areas", + "arguments", + "ariaAtomic", + "ariaAutoComplete", + "ariaBusy", + "ariaChecked", + "ariaColCount", + "ariaColIndex", + "ariaColSpan", + "ariaCurrent", + "ariaDescription", + "ariaDisabled", + "ariaExpanded", + "ariaHasPopup", + "ariaHidden", + "ariaKeyShortcuts", + "ariaLabel", + "ariaLevel", + "ariaLive", + "ariaModal", + "ariaMultiLine", + "ariaMultiSelectable", + "ariaOrientation", + "ariaPlaceholder", + "ariaPosInSet", + "ariaPressed", + "ariaReadOnly", + "ariaRelevant", + "ariaRequired", + "ariaRoleDescription", + "ariaRowCount", + "ariaRowIndex", + "ariaRowSpan", + "ariaSelected", + "ariaSetSize", + "ariaSort", + "ariaValueMax", + "ariaValueMin", + "ariaValueNow", + "ariaValueText", + "arrayBuffer", + "arrayLayerCount", + "arrayStride", + "artist", + "artwork", + "as", + "asIntN", + "asUintN", + "asin", + "asinh", + "aspect", + "assert", + "assign", + "assignedElements", + "assignedNodes", + "assignedSlot", + "async", + "asyncIterator", + "atEnd", + "atan", + "atan2", + "atanh", + "atob", + "attachEvent", + "attachInternals", + "attachShader", + "attachShadow", + "attachments", + "attack", + "attestationObject", + "attrChange", + "attrName", + "attributeFilter", + "attributeName", + "attributeNamespace", + "attributeOldValue", + "attributeStyleMap", + "attributes", + "attribution", + "audioBitsPerSecond", + "audioTracks", + "audioWorklet", + "authenticatedSignedWrites", + "authenticatorData", + "autoIncrement", + "autobuffer", + "autocapitalize", + "autocomplete", + "autocorrect", + "autofocus", + "automationRate", + "autoplay", + "availHeight", + "availLeft", + "availTop", + "availWidth", + "availability", + "available", + "aversion", + "ax", + "axes", + "axis", + "ay", + "azimuth", + "b", + "back", + "backface-visibility", + "backfaceVisibility", + "background", + "background-attachment", + "background-blend-mode", + "background-clip", + "background-color", + "background-image", + "background-origin", + "background-position", + "background-position-x", + "background-position-y", + "background-repeat", + "background-size", + "backgroundAttachment", + "backgroundBlendMode", + "backgroundClip", + "backgroundColor", + "backgroundFetch", + "backgroundImage", + "backgroundOrigin", + "backgroundPosition", + "backgroundPositionX", + "backgroundPositionY", + "backgroundRepeat", + "backgroundSize", + "badInput", + "badge", + "balance", + "baseArrayLayer", + "baseFrequencyX", + "baseFrequencyY", + "baseLatency", + "baseLayer", + "baseMipLevel", + "baseNode", + "baseOffset", + "baseURI", + "baseVal", + "baselineShift", + "battery", + "bday", + "before", + "beginComputePass", + "beginElement", + "beginElementAt", + "beginOcclusionQuery", + "beginPath", + "beginQuery", + "beginRenderPass", + "beginTransformFeedback", + "beginningOfPassWriteIndex", + "behavior", + "behaviorCookie", + "behaviorPart", + "behaviorUrns", + "beta", + "bezierCurveTo", + "bgColor", + "bgProperties", + "bias", + "big", + "bigint64", + "biguint64", + "binaryType", + "bind", + "bindAttribLocation", + "bindBuffer", + "bindBufferBase", + "bindBufferRange", + "bindFramebuffer", + "bindGroupLayouts", + "bindRenderbuffer", + "bindSampler", + "bindTexture", + "bindTransformFeedback", + "bindVertexArray", + "binding", + "bitness", + "blend", + "blendColor", + "blendEquation", + "blendEquationSeparate", + "blendFunc", + "blendFuncSeparate", + "blink", + "blitFramebuffer", + "blob", + "block-size", + "blockDirection", + "blockSize", + "blockedURI", + "blue", + "bluetooth", + "blur", + "body", + "bodyUsed", + "bold", + "bookmarks", + "booleanValue", + "border", + "border-block", + "border-block-color", + "border-block-end", + "border-block-end-color", + "border-block-end-style", + "border-block-end-width", + "border-block-start", + "border-block-start-color", + "border-block-start-style", + "border-block-start-width", + "border-block-style", + "border-block-width", + "border-bottom", + "border-bottom-color", + "border-bottom-left-radius", + "border-bottom-right-radius", + "border-bottom-style", + "border-bottom-width", + "border-collapse", + "border-color", + "border-end-end-radius", + "border-end-start-radius", + "border-image", + "border-image-outset", + "border-image-repeat", + "border-image-slice", + "border-image-source", + "border-image-width", + "border-inline", + "border-inline-color", + "border-inline-end", + "border-inline-end-color", + "border-inline-end-style", + "border-inline-end-width", + "border-inline-start", + "border-inline-start-color", + "border-inline-start-style", + "border-inline-start-width", + "border-inline-style", + "border-inline-width", + "border-left", + "border-left-color", + "border-left-style", + "border-left-width", + "border-radius", + "border-right", + "border-right-color", + "border-right-style", + "border-right-width", + "border-spacing", + "border-start-end-radius", + "border-start-start-radius", + "border-style", + "border-top", + "border-top-color", + "border-top-left-radius", + "border-top-right-radius", + "border-top-style", + "border-top-width", + "border-width", + "borderBlock", + "borderBlockColor", + "borderBlockEnd", + "borderBlockEndColor", + "borderBlockEndStyle", + "borderBlockEndWidth", + "borderBlockStart", + "borderBlockStartColor", + "borderBlockStartStyle", + "borderBlockStartWidth", + "borderBlockStyle", + "borderBlockWidth", + "borderBottom", + "borderBottomColor", + "borderBottomLeftRadius", + "borderBottomRightRadius", + "borderBottomStyle", + "borderBottomWidth", + "borderBoxSize", + "borderCollapse", + "borderColor", + "borderColorDark", + "borderColorLight", + "borderEndEndRadius", + "borderEndStartRadius", + "borderImage", + "borderImageOutset", + "borderImageRepeat", + "borderImageSlice", + "borderImageSource", + "borderImageWidth", + "borderInline", + "borderInlineColor", + "borderInlineEnd", + "borderInlineEndColor", + "borderInlineEndStyle", + "borderInlineEndWidth", + "borderInlineStart", + "borderInlineStartColor", + "borderInlineStartStyle", + "borderInlineStartWidth", + "borderInlineStyle", + "borderInlineWidth", + "borderLeft", + "borderLeftColor", + "borderLeftStyle", + "borderLeftWidth", + "borderRadius", + "borderRight", + "borderRightColor", + "borderRightStyle", + "borderRightWidth", + "borderSpacing", + "borderStartEndRadius", + "borderStartStartRadius", + "borderStyle", + "borderTop", + "borderTopColor", + "borderTopLeftRadius", + "borderTopRightRadius", + "borderTopStyle", + "borderTopWidth", + "borderWidth", + "bottom", + "bottomMargin", + "bound", + "boundElements", + "boundingClientRect", + "boundingHeight", + "boundingLeft", + "boundingTop", + "boundingWidth", + "bounds", + "boundsGeometry", + "box-decoration-break", + "box-shadow", + "box-sizing", + "boxDecorationBreak", + "boxShadow", + "boxSizing", + "brand", + "brands", + "break-after", + "break-before", + "break-inside", + "breakAfter", + "breakBefore", + "breakInside", + "broadcast", + "browserLanguage", + "btoa", + "bubbles", + "buffer", + "bufferData", + "bufferDepth", + "bufferSize", + "bufferSubData", + "buffered", + "bufferedAmount", + "bufferedAmountLowThreshold", + "buffers", + "buildID", + "buildNumber", + "button", + "buttonID", + "buttons", + "byteLength", + "byteOffset", + "bytesPerRow", + "bytesWritten", + "c", + "cache", + "caches", + "call", + "caller", + "canBeFormatted", + "canBeMounted", + "canBeShared", + "canHaveChildren", + "canHaveHTML", + "canInsertDTMF", + "canMakePayment", + "canPlayType", + "canPresent", + "canTrickleIceCandidates", + "cancel", + "cancelAndHoldAtTime", + "cancelAnimationFrame", + "cancelBubble", + "cancelIdleCallback", + "cancelScheduledValues", + "cancelVideoFrameCallback", + "cancelWatchAvailability", + "cancelable", + "candidate", + "canonicalUUID", + "canvas", + "capabilities", + "caption", + "caption-side", + "captionSide", + "capture", + "captureEvents", + "captureStackTrace", + "captureStream", + "caret-color", + "caretBidiLevel", + "caretColor", + "caretPositionFromPoint", + "caretRangeFromPoint", + "cast", + "catch", + "category", + "cbrt", + "cd", + "ceil", + "cellIndex", + "cellPadding", + "cellSpacing", + "cells", + "ch", + "chOff", + "chain", + "challenge", + "changeType", + "changedTouches", + "channel", + "channelCount", + "channelCountMode", + "channelInterpretation", + "char", + "charAt", + "charCode", + "charCodeAt", + "charIndex", + "charLength", + "characterData", + "characterDataOldValue", + "characterSet", + "characteristic", + "charging", + "chargingTime", + "charset", + "check", + "checkEnclosure", + "checkFramebufferStatus", + "checkIntersection", + "checkValidity", + "checked", + "childElementCount", + "childList", + "childNodes", + "children", + "chrome", + "ciphertext", + "cite", + "city", + "claimInterface", + "claimed", + "classList", + "className", + "classid", + "clear", + "clearAppBadge", + "clearAttributes", + "clearBuffer", + "clearBufferfi", + "clearBufferfv", + "clearBufferiv", + "clearBufferuiv", + "clearColor", + "clearData", + "clearDepth", + "clearHalt", + "clearImmediate", + "clearInterval", + "clearLiveSeekableRange", + "clearMarks", + "clearMaxGCPauseAccumulator", + "clearMeasures", + "clearParameters", + "clearRect", + "clearResourceTimings", + "clearShadow", + "clearStencil", + "clearTimeout", + "clearValue", + "clearWatch", + "click", + "clickCount", + "clientDataJSON", + "clientHeight", + "clientInformation", + "clientLeft", + "clientRect", + "clientRects", + "clientTop", + "clientWaitSync", + "clientWidth", + "clientX", + "clientY", + "clip", + "clip-path", + "clip-rule", + "clipBottom", + "clipLeft", + "clipPath", + "clipPathUnits", + "clipRight", + "clipRule", + "clipTop", + "clipboard", + "clipboardData", + "clone", + "cloneContents", + "cloneNode", + "cloneRange", + "close", + "closePath", + "closed", + "closest", + "clz", + "clz32", + "cm", + "cmp", + "code", + "codeBase", + "codePointAt", + "codeType", + "colSpan", + "collapse", + "collapseToEnd", + "collapseToStart", + "collapsed", + "collect", + "colno", + "color", + "color-adjust", + "color-interpolation", + "color-interpolation-filters", + "colorAdjust", + "colorAttachments", + "colorDepth", + "colorFormats", + "colorInterpolation", + "colorInterpolationFilters", + "colorMask", + "colorSpace", + "colorType", + "cols", + "column-count", + "column-fill", + "column-gap", + "column-rule", + "column-rule-color", + "column-rule-style", + "column-rule-width", + "column-span", + "column-width", + "columnCount", + "columnFill", + "columnGap", + "columnNumber", + "columnRule", + "columnRuleColor", + "columnRuleStyle", + "columnRuleWidth", + "columnSpan", + "columnWidth", + "columns", + "command", + "commit", + "commitPreferences", + "commitStyles", + "commonAncestorContainer", + "compact", + "compare", + "compareBoundaryPoints", + "compareDocumentPosition", + "compareEndPoints", + "compareExchange", + "compareNode", + "comparePoint", + "compatMode", + "compatible", + "compile", + "compileShader", + "compileStreaming", + "complete", + "component", + "componentFromPoint", + "composed", + "composedPath", + "composite", + "compositionEndOffset", + "compositionStartOffset", + "compressedTexImage2D", + "compressedTexImage3D", + "compressedTexSubImage2D", + "compressedTexSubImage3D", + "compute", + "computedStyleMap", + "concat", + "conditionText", + "coneInnerAngle", + "coneOuterAngle", + "coneOuterGain", + "configurable", + "configuration", + "configurationName", + "configurationValue", + "configurations", + "configure", + "confirm", + "confirmComposition", + "confirmSiteSpecificTrackingException", + "confirmWebWideTrackingException", + "connect", + "connectEnd", + "connectShark", + "connectStart", + "connected", + "connection", + "connectionList", + "connectionSpeed", + "connectionState", + "connections", + "console", + "consolidate", + "constants", + "constraint", + "constrictionActive", + "construct", + "constructor", + "contactID", + "contain", + "containerId", + "containerName", + "containerSrc", + "containerType", + "contains", + "containsNode", + "content", + "contentBoxSize", + "contentDocument", + "contentEditable", + "contentHint", + "contentOverflow", + "contentRect", + "contentScriptType", + "contentStyleType", + "contentType", + "contentWindow", + "context", + "contextMenu", + "contextmenu", + "continue", + "continuePrimaryKey", + "continuous", + "control", + "controlTransferIn", + "controlTransferOut", + "controller", + "controls", + "controlsList", + "convertPointFromNode", + "convertQuadFromNode", + "convertRectFromNode", + "convertToBlob", + "convertToSpecifiedUnits", + "cookie", + "cookieEnabled", + "coords", + "copyBufferSubData", + "copyBufferToBuffer", + "copyBufferToTexture", + "copyExternalImageToTexture", + "copyFromChannel", + "copyTexImage2D", + "copyTexSubImage2D", + "copyTexSubImage3D", + "copyTextureToBuffer", + "copyTextureToTexture", + "copyToChannel", + "copyWithin", + "correspondingElement", + "correspondingUseElement", + "corruptedVideoFrames", + "cos", + "cosh", + "count", + "countReset", + "counter-increment", + "counter-reset", + "counter-set", + "counterIncrement", + "counterReset", + "counterSet", + "country", + "cpuClass", + "cpuSleepAllowed", + "create", + "createAnalyser", + "createAnswer", + "createAttribute", + "createAttributeNS", + "createBindGroup", + "createBindGroupLayout", + "createBiquadFilter", + "createBuffer", + "createBufferSource", + "createCDATASection", + "createCSSStyleSheet", + "createCaption", + "createChannelMerger", + "createChannelSplitter", + "createCommandEncoder", + "createComment", + "createComputePipeline", + "createComputePipelineAsync", + "createConstantSource", + "createContextualFragment", + "createControlRange", + "createConvolver", + "createDTMFSender", + "createDataChannel", + "createDelay", + "createDelayNode", + "createDocument", + "createDocumentFragment", + "createDocumentType", + "createDynamicsCompressor", + "createElement", + "createElementNS", + "createEntityReference", + "createEvent", + "createEventObject", + "createExpression", + "createFramebuffer", + "createFunction", + "createGain", + "createGainNode", + "createHTML", + "createHTMLDocument", + "createIIRFilter", + "createImageBitmap", + "createImageData", + "createIndex", + "createJavaScriptNode", + "createLinearGradient", + "createMediaElementSource", + "createMediaKeys", + "createMediaStreamDestination", + "createMediaStreamSource", + "createMediaStreamTrackSource", + "createMutableFile", + "createNSResolver", + "createNodeIterator", + "createNotification", + "createObjectStore", + "createObjectURL", + "createOffer", + "createOscillator", + "createPanner", + "createPattern", + "createPeriodicWave", + "createPipelineLayout", + "createPolicy", + "createPopup", + "createProcessingInstruction", + "createProgram", + "createQuery", + "createQuerySet", + "createRadialGradient", + "createRange", + "createRangeCollection", + "createReader", + "createRenderBundleEncoder", + "createRenderPipeline", + "createRenderPipelineAsync", + "createRenderbuffer", + "createSVGAngle", + "createSVGLength", + "createSVGMatrix", + "createSVGNumber", + "createSVGPathSegArcAbs", + "createSVGPathSegArcRel", + "createSVGPathSegClosePath", + "createSVGPathSegCurvetoCubicAbs", + "createSVGPathSegCurvetoCubicRel", + "createSVGPathSegCurvetoCubicSmoothAbs", + "createSVGPathSegCurvetoCubicSmoothRel", + "createSVGPathSegCurvetoQuadraticAbs", + "createSVGPathSegCurvetoQuadraticRel", + "createSVGPathSegCurvetoQuadraticSmoothAbs", + "createSVGPathSegCurvetoQuadraticSmoothRel", + "createSVGPathSegLinetoAbs", + "createSVGPathSegLinetoHorizontalAbs", + "createSVGPathSegLinetoHorizontalRel", + "createSVGPathSegLinetoRel", + "createSVGPathSegLinetoVerticalAbs", + "createSVGPathSegLinetoVerticalRel", + "createSVGPathSegMovetoAbs", + "createSVGPathSegMovetoRel", + "createSVGPoint", + "createSVGRect", + "createSVGTransform", + "createSVGTransformFromMatrix", + "createSampler", + "createScript", + "createScriptProcessor", + "createScriptURL", + "createSession", + "createShader", + "createShaderModule", + "createShadowRoot", + "createStereoPanner", + "createStyleSheet", + "createTBody", + "createTFoot", + "createTHead", + "createTextNode", + "createTextRange", + "createTexture", + "createTouch", + "createTouchList", + "createTransformFeedback", + "createTreeWalker", + "createVertexArray", + "createView", + "createWaveShaper", + "creationTime", + "credentials", + "crossOrigin", + "crossOriginIsolated", + "crypto", + "csi", + "csp", + "cssFloat", + "cssRules", + "cssText", + "cssValueType", + "ctrlKey", + "ctrlLeft", + "cues", + "cullFace", + "cullMode", + "currentDirection", + "currentLocalDescription", + "currentNode", + "currentPage", + "currentRect", + "currentRemoteDescription", + "currentScale", + "currentScript", + "currentSrc", + "currentState", + "currentStyle", + "currentTarget", + "currentTime", + "currentTranslate", + "currentView", + "cursor", + "curve", + "customElements", + "customError", + "cx", + "cy", + "d", + "data", + "dataFld", + "dataFormatAs", + "dataLoss", + "dataLossMessage", + "dataPageSize", + "dataSrc", + "dataTransfer", + "database", + "databases", + "dataset", + "dateTime", + "db", + "debug", + "debuggerEnabled", + "declare", + "decode", + "decodeAudioData", + "decodeURI", + "decodeURIComponent", + "decodedBodySize", + "decoding", + "decodingInfo", + "decrypt", + "default", + "defaultCharset", + "defaultChecked", + "defaultMuted", + "defaultPlaybackRate", + "defaultPolicy", + "defaultPrevented", + "defaultQueue", + "defaultRequest", + "defaultSelected", + "defaultStatus", + "defaultURL", + "defaultValue", + "defaultView", + "defaultstatus", + "defer", + "define", + "defineMagicFunction", + "defineMagicVariable", + "defineProperties", + "defineProperty", + "deg", + "delay", + "delayTime", + "delegatesFocus", + "delete", + "deleteBuffer", + "deleteCaption", + "deleteCell", + "deleteContents", + "deleteData", + "deleteDatabase", + "deleteFramebuffer", + "deleteFromDocument", + "deleteIndex", + "deleteMedium", + "deleteObjectStore", + "deleteProgram", + "deleteProperty", + "deleteQuery", + "deleteRenderbuffer", + "deleteRow", + "deleteRule", + "deleteSampler", + "deleteShader", + "deleteSync", + "deleteTFoot", + "deleteTHead", + "deleteTexture", + "deleteTransformFeedback", + "deleteVertexArray", + "deliverChangeRecords", + "delivery", + "deliveryInfo", + "deliveryStatus", + "deliveryTimestamp", + "delta", + "deltaMode", + "deltaX", + "deltaY", + "deltaZ", + "dependentLocality", + "depthBias", + "depthBiasClamp", + "depthBiasSlopeScale", + "depthClearValue", + "depthCompare", + "depthFailOp", + "depthFar", + "depthFunc", + "depthLoadOp", + "depthMask", + "depthNear", + "depthOrArrayLayers", + "depthRange", + "depthReadOnly", + "depthStencil", + "depthStencilAttachment", + "depthStencilFormat", + "depthStoreOp", + "depthWriteEnabled", + "deref", + "deriveBits", + "deriveKey", + "description", + "deselectAll", + "designMode", + "desiredSize", + "destination", + "destinationURL", + "destroy", + "detach", + "detachEvent", + "detachShader", + "detail", + "details", + "detect", + "detune", + "device", + "deviceClass", + "deviceId", + "deviceMemory", + "devicePixelContentBoxSize", + "devicePixelRatio", + "deviceProtocol", + "deviceSubclass", + "deviceVersionMajor", + "deviceVersionMinor", + "deviceVersionSubminor", + "deviceXDPI", + "deviceYDPI", + "didTimeout", + "diffuseConstant", + "digest", + "dimension", + "dimensions", + "dir", + "dirName", + "direction", + "dirxml", + "disable", + "disablePictureInPicture", + "disableRemotePlayback", + "disableVertexAttribArray", + "disabled", + "dischargingTime", + "disconnect", + "disconnectShark", + "dispatchEvent", + "dispatchWorkgroups", + "dispatchWorkgroupsIndirect", + "display", + "displayId", + "displayName", + "disposition", + "distanceModel", + "div", + "divisor", + "djsapi", + "djsproxy", + "doImport", + "doNotTrack", + "doScroll", + "doctype", + "document", + "documentElement", + "documentMode", + "documentURI", + "dolphin", + "dolphinGameCenter", + "dolphininfo", + "dolphinmeta", + "domComplete", + "domContentLoadedEventEnd", + "domContentLoadedEventStart", + "domInteractive", + "domLoading", + "domOverlayState", + "domain", + "domainLookupEnd", + "domainLookupStart", + "dominant-baseline", + "dominantBaseline", + "done", + "dopplerFactor", + "dotAll", + "downDegrees", + "downlink", + "download", + "downloadTotal", + "downloaded", + "dpcm", + "dpi", + "dppx", + "dragDrop", + "draggable", + "draw", + "drawArrays", + "drawArraysInstanced", + "drawArraysInstancedANGLE", + "drawBuffers", + "drawCustomFocusRing", + "drawElements", + "drawElementsInstanced", + "drawElementsInstancedANGLE", + "drawFocusIfNeeded", + "drawImage", + "drawImageFromRect", + "drawIndexed", + "drawIndexedIndirect", + "drawIndirect", + "drawRangeElements", + "drawSystemFocusRing", + "drawingBufferHeight", + "drawingBufferWidth", + "dropEffect", + "droppedVideoFrames", + "dropzone", + "dstFactor", + "dtmf", + "dump", + "dumpProfile", + "duplicate", + "durability", + "duration", + "dvname", + "dvnum", + "dx", + "dy", + "dynsrc", + "e", + "edgeMode", + "effect", + "effectAllowed", + "effectiveDirective", + "effectiveType", + "elapsedTime", + "element", + "elementFromPoint", + "elementTiming", + "elements", + "elementsFromPoint", + "elevation", + "ellipse", + "em", + "email", + "embeds", + "emma", + "empty", + "empty-cells", + "emptyCells", + "emptyHTML", + "emptyScript", + "emulatedPosition", + "enable", + "enableBackground", + "enableDelegations", + "enableStyleSheetsForSet", + "enableVertexAttribArray", + "enabled", + "enabledPlugin", + "encode", + "encodeInto", + "encodeURI", + "encodeURIComponent", + "encodedBodySize", + "encoding", + "encodingInfo", + "encrypt", + "enctype", + "end", + "endContainer", + "endElement", + "endElementAt", + "endOcclusionQuery", + "endOfPassWriteIndex", + "endOfStream", + "endOffset", + "endQuery", + "endTime", + "endTransformFeedback", + "ended", + "endpoint", + "endpointNumber", + "endpoints", + "endsWith", + "enterKeyHint", + "entities", + "entries", + "entryPoint", + "entryType", + "enumerable", + "enumerate", + "enumerateDevices", + "enumerateEditable", + "environmentBlendMode", + "equals", + "error", + "errorCode", + "errorDetail", + "errorText", + "escape", + "estimate", + "eval", + "evaluate", + "event", + "eventPhase", + "every", + "ex", + "exception", + "exchange", + "exec", + "execCommand", + "execCommandShowHelp", + "execScript", + "executeBundles", + "exitFullscreen", + "exitPictureInPicture", + "exitPointerLock", + "exitPresent", + "exp", + "expand", + "expandEntityReferences", + "expando", + "expansion", + "expiration", + "expirationTime", + "expires", + "expiryDate", + "explicitOriginalTarget", + "expm1", + "exponent", + "exponentialRampToValueAtTime", + "exportKey", + "exports", + "extend", + "extensions", + "extentNode", + "extentOffset", + "external", + "externalResourcesRequired", + "externalTexture", + "extractContents", + "extractable", + "eye", + "f", + "face", + "factoryReset", + "failOp", + "failureReason", + "fallback", + "family", + "familyName", + "farthestViewportElement", + "fastSeek", + "fatal", + "featureId", + "featurePolicy", + "featureSettings", + "features", + "fenceSync", + "fetch", + "fetchStart", + "fftSize", + "fgColor", + "fieldOfView", + "file", + "fileCreatedDate", + "fileHandle", + "fileModifiedDate", + "fileName", + "fileSize", + "fileUpdatedDate", + "filename", + "files", + "filesystem", + "fill", + "fill-opacity", + "fill-rule", + "fillLightMode", + "fillOpacity", + "fillRect", + "fillRule", + "fillStyle", + "fillText", + "filter", + "filterResX", + "filterResY", + "filterUnits", + "filters", + "finally", + "find", + "findIndex", + "findRule", + "findText", + "finish", + "finished", + "fireEvent", + "firesTouchEvents", + "firstChild", + "firstElementChild", + "firstPage", + "fixed", + "flags", + "flat", + "flatMap", + "flex", + "flex-basis", + "flex-direction", + "flex-flow", + "flex-grow", + "flex-shrink", + "flex-wrap", + "flexBasis", + "flexDirection", + "flexFlow", + "flexGrow", + "flexShrink", + "flexWrap", + "flipX", + "flipY", + "float", + "float32", + "float64", + "flood-color", + "flood-opacity", + "floodColor", + "floodOpacity", + "floor", + "flush", + "focus", + "focusNode", + "focusOffset", + "font", + "font-family", + "font-feature-settings", + "font-kerning", + "font-language-override", + "font-optical-sizing", + "font-size", + "font-size-adjust", + "font-stretch", + "font-style", + "font-synthesis", + "font-variant", + "font-variant-alternates", + "font-variant-caps", + "font-variant-east-asian", + "font-variant-ligatures", + "font-variant-numeric", + "font-variant-position", + "font-variation-settings", + "font-weight", + "fontFamily", + "fontFeatureSettings", + "fontKerning", + "fontLanguageOverride", + "fontOpticalSizing", + "fontSize", + "fontSizeAdjust", + "fontSmoothingEnabled", + "fontStretch", + "fontStyle", + "fontSynthesis", + "fontVariant", + "fontVariantAlternates", + "fontVariantCaps", + "fontVariantEastAsian", + "fontVariantLigatures", + "fontVariantNumeric", + "fontVariantPosition", + "fontVariationSettings", + "fontWeight", + "fontcolor", + "fontfaces", + "fonts", + "fontsize", + "for", + "forEach", + "force", + "forceFallbackAdapter", + "forceRedraw", + "form", + "formAction", + "formData", + "formEnctype", + "formMethod", + "formNoValidate", + "formTarget", + "format", + "formatToParts", + "forms", + "forward", + "forwardX", + "forwardY", + "forwardZ", + "foundation", + "fr", + "fragment", + "fragmentDirective", + "frame", + "frameBorder", + "frameElement", + "frameSpacing", + "framebuffer", + "framebufferHeight", + "framebufferRenderbuffer", + "framebufferTexture2D", + "framebufferTextureLayer", + "framebufferWidth", + "frames", + "freeSpace", + "freeze", + "frequency", + "frequencyBinCount", + "from", + "fromCharCode", + "fromCodePoint", + "fromElement", + "fromEntries", + "fromFloat32Array", + "fromFloat64Array", + "fromMatrix", + "fromPoint", + "fromQuad", + "fromRect", + "frontFace", + "fround", + "fullPath", + "fullScreen", + "fullVersionList", + "fullscreen", + "fullscreenElement", + "fullscreenEnabled", + "fx", + "fy", + "g", + "gain", + "gamepad", + "gamma", + "gap", + "gatheringState", + "gatt", + "genderIdentity", + "generateCertificate", + "generateKey", + "generateMipmap", + "generateRequest", + "geolocation", + "gestureObject", + "get", + "getActiveAttrib", + "getActiveUniform", + "getActiveUniformBlockName", + "getActiveUniformBlockParameter", + "getActiveUniforms", + "getAdjacentText", + "getAll", + "getAllKeys", + "getAllResponseHeaders", + "getAllowlistForFeature", + "getAnimations", + "getAsFile", + "getAsString", + "getAttachedShaders", + "getAttribLocation", + "getAttribute", + "getAttributeNS", + "getAttributeNames", + "getAttributeNode", + "getAttributeNodeNS", + "getAttributeType", + "getAudioTracks", + "getAvailability", + "getBBox", + "getBattery", + "getBigInt64", + "getBigUint64", + "getBindGroupLayout", + "getBlob", + "getBookmark", + "getBoundingClientRect", + "getBounds", + "getBoxQuads", + "getBufferParameter", + "getBufferSubData", + "getByteFrequencyData", + "getByteTimeDomainData", + "getCSSCanvasContext", + "getCTM", + "getCandidateWindowClientRect", + "getCanonicalLocales", + "getCapabilities", + "getChannelData", + "getCharNumAtPosition", + "getCharacteristic", + "getCharacteristics", + "getClientExtensionResults", + "getClientRect", + "getClientRects", + "getCoalescedEvents", + "getCompilationInfo", + "getCompositionAlternatives", + "getComputedStyle", + "getComputedTextLength", + "getComputedTiming", + "getConfiguration", + "getConstraints", + "getContext", + "getContextAttributes", + "getContributingSources", + "getCounterValue", + "getCueAsHTML", + "getCueById", + "getCurrentPosition", + "getCurrentTexture", + "getCurrentTime", + "getData", + "getDatabaseNames", + "getDate", + "getDay", + "getDefaultComputedStyle", + "getDescriptor", + "getDescriptors", + "getDestinationInsertionPoints", + "getDevices", + "getDirectory", + "getDisplayMedia", + "getDistributedNodes", + "getEditable", + "getElementById", + "getElementsByClassName", + "getElementsByName", + "getElementsByTagName", + "getElementsByTagNameNS", + "getEnclosureList", + "getEndPositionOfChar", + "getEntries", + "getEntriesByName", + "getEntriesByType", + "getError", + "getExtension", + "getExtentOfChar", + "getEyeParameters", + "getFeature", + "getFile", + "getFiles", + "getFilesAndDirectories", + "getFingerprints", + "getFloat32", + "getFloat64", + "getFloatFrequencyData", + "getFloatTimeDomainData", + "getFloatValue", + "getFragDataLocation", + "getFrameData", + "getFramebufferAttachmentParameter", + "getFrequencyResponse", + "getFullYear", + "getGamepads", + "getHighEntropyValues", + "getHitTestResults", + "getHitTestResultsForTransientInput", + "getHours", + "getIdentityAssertion", + "getIds", + "getImageData", + "getIndexedParameter", + "getInstalledRelatedApps", + "getInt16", + "getInt32", + "getInt8", + "getInternalformatParameter", + "getIntersectionList", + "getItem", + "getItems", + "getKey", + "getKeyframes", + "getLayers", + "getLayoutMap", + "getLineDash", + "getLocalCandidates", + "getLocalParameters", + "getLocalStreams", + "getMappedRange", + "getMarks", + "getMatchedCSSRules", + "getMaxGCPauseSinceClear", + "getMeasures", + "getMetadata", + "getMilliseconds", + "getMinutes", + "getModifierState", + "getMonth", + "getNamedItem", + "getNamedItemNS", + "getNativeFramebufferScaleFactor", + "getNotifications", + "getNotifier", + "getNumberOfChars", + "getOffsetReferenceSpace", + "getOutputTimestamp", + "getOverrideHistoryNavigationMode", + "getOverrideStyle", + "getOwnPropertyDescriptor", + "getOwnPropertyDescriptors", + "getOwnPropertyNames", + "getOwnPropertySymbols", + "getParameter", + "getParameters", + "getParent", + "getPathSegAtLength", + "getPhotoCapabilities", + "getPhotoSettings", + "getPointAtLength", + "getPose", + "getPredictedEvents", + "getPreference", + "getPreferenceDefault", + "getPreferredCanvasFormat", + "getPresentationAttribute", + "getPreventDefault", + "getPrimaryService", + "getPrimaryServices", + "getProgramInfoLog", + "getProgramParameter", + "getPropertyCSSValue", + "getPropertyPriority", + "getPropertyShorthand", + "getPropertyType", + "getPropertyValue", + "getPrototypeOf", + "getQuery", + "getQueryParameter", + "getRGBColorValue", + "getRandomValues", + "getRangeAt", + "getReader", + "getReceivers", + "getRectValue", + "getRegistration", + "getRegistrations", + "getRemoteCandidates", + "getRemoteCertificates", + "getRemoteParameters", + "getRemoteStreams", + "getRenderbufferParameter", + "getResponseHeader", + "getRoot", + "getRootNode", + "getRotationOfChar", + "getSVGDocument", + "getSamplerParameter", + "getScreenCTM", + "getSeconds", + "getSelectedCandidatePair", + "getSelection", + "getSenders", + "getService", + "getSettings", + "getShaderInfoLog", + "getShaderParameter", + "getShaderPrecisionFormat", + "getShaderSource", + "getSimpleDuration", + "getSiteIcons", + "getSources", + "getSpeculativeParserUrls", + "getStartPositionOfChar", + "getStartTime", + "getState", + "getStats", + "getStatusForPolicy", + "getStorageUpdates", + "getStreamById", + "getStringValue", + "getSubStringLength", + "getSubscription", + "getSupportedConstraints", + "getSupportedExtensions", + "getSupportedFormats", + "getSyncParameter", + "getSynchronizationSources", + "getTags", + "getTargetRanges", + "getTexParameter", + "getTime", + "getTimezoneOffset", + "getTiming", + "getTotalLength", + "getTrackById", + "getTracks", + "getTransceivers", + "getTransform", + "getTransformFeedbackVarying", + "getTransformToElement", + "getTransports", + "getType", + "getTypeMapping", + "getUTCDate", + "getUTCDay", + "getUTCFullYear", + "getUTCHours", + "getUTCMilliseconds", + "getUTCMinutes", + "getUTCMonth", + "getUTCSeconds", + "getUint16", + "getUint32", + "getUint8", + "getUniform", + "getUniformBlockIndex", + "getUniformIndices", + "getUniformLocation", + "getUserMedia", + "getVRDisplays", + "getValues", + "getVarDate", + "getVariableValue", + "getVertexAttrib", + "getVertexAttribOffset", + "getVideoPlaybackQuality", + "getVideoTracks", + "getViewerPose", + "getViewport", + "getVoices", + "getWakeLockState", + "getWriter", + "getYear", + "givenName", + "global", + "globalAlpha", + "globalCompositeOperation", + "globalThis", + "glyphOrientationHorizontal", + "glyphOrientationVertical", + "glyphRef", + "go", + "gpu", + "grabFrame", + "grad", + "gradientTransform", + "gradientUnits", + "grammars", + "green", + "grid", + "grid-area", + "grid-auto-columns", + "grid-auto-flow", + "grid-auto-rows", + "grid-column", + "grid-column-end", + "grid-column-gap", + "grid-column-start", + "grid-gap", + "grid-row", + "grid-row-end", + "grid-row-gap", + "grid-row-start", + "grid-template", + "grid-template-areas", + "grid-template-columns", + "grid-template-rows", + "gridArea", + "gridAutoColumns", + "gridAutoFlow", + "gridAutoRows", + "gridColumn", + "gridColumnEnd", + "gridColumnGap", + "gridColumnStart", + "gridGap", + "gridRow", + "gridRowEnd", + "gridRowGap", + "gridRowStart", + "gridTemplate", + "gridTemplateAreas", + "gridTemplateColumns", + "gridTemplateRows", + "gripSpace", + "group", + "groups", + "groupCollapsed", + "groupEnd", + "groupId", + "hadRecentInput", + "hand", + "handedness", + "hapticActuators", + "hardwareConcurrency", + "has", + "hasAttribute", + "hasAttributeNS", + "hasAttributes", + "hasBeenActive", + "hasChildNodes", + "hasComposition", + "hasDynamicOffset", + "hasEnrolledInstrument", + "hasExtension", + "hasExternalDisplay", + "hasFeature", + "hasFocus", + "hasInstance", + "hasLayout", + "hasOrientation", + "hasOwnProperty", + "hasPointerCapture", + "hasPosition", + "hasReading", + "hasStorageAccess", + "hash", + "head", + "headers", + "heading", + "height", + "hidden", + "hide", + "hideFocus", + "high", + "highWaterMark", + "hint", + "hints", + "history", + "honorificPrefix", + "honorificSuffix", + "horizontalOverflow", + "host", + "hostCandidate", + "hostname", + "href", + "hrefTranslate", + "hreflang", + "hspace", + "html5TagCheckInerface", + "htmlFor", + "htmlText", + "httpEquiv", + "httpRequestStatusCode", + "hwTimestamp", + "hyphens", + "hypot", + "iccId", + "iceConnectionState", + "iceGatheringState", + "iceTransport", + "icon", + "iconURL", + "id", + "identifier", + "identity", + "idpLoginUrl", + "ignoreBOM", + "ignoreCase", + "ignoreDepthValues", + "image-orientation", + "image-rendering", + "imageHeight", + "imageOrientation", + "imageRendering", + "imageSizes", + "imageSmoothingEnabled", + "imageSmoothingQuality", + "imageSrcset", + "imageWidth", + "images", + "ime-mode", + "imeMode", + "implementation", + "importExternalTexture", + "importKey", + "importNode", + "importStylesheet", + "imports", + "impp", + "imul", + "in", + "in1", + "in2", + "inBandMetadataTrackDispatchType", + "inRange", + "includes", + "incremental", + "indeterminate", + "index", + "indexNames", + "indexOf", + "indexedDB", + "indicate", + "indices", + "inert", + "inertiaDestinationX", + "inertiaDestinationY", + "info", + "init", + "initAnimationEvent", + "initBeforeLoadEvent", + "initClipboardEvent", + "initCloseEvent", + "initCommandEvent", + "initCompositionEvent", + "initCustomEvent", + "initData", + "initDataType", + "initDeviceMotionEvent", + "initDeviceOrientationEvent", + "initDragEvent", + "initErrorEvent", + "initEvent", + "initFocusEvent", + "initGestureEvent", + "initHashChangeEvent", + "initKeyEvent", + "initKeyboardEvent", + "initMSManipulationEvent", + "initMessageEvent", + "initMouseEvent", + "initMouseScrollEvent", + "initMouseWheelEvent", + "initMutationEvent", + "initNSMouseEvent", + "initOverflowEvent", + "initPageEvent", + "initPageTransitionEvent", + "initPointerEvent", + "initPopStateEvent", + "initProgressEvent", + "initScrollAreaEvent", + "initSimpleGestureEvent", + "initStorageEvent", + "initTextEvent", + "initTimeEvent", + "initTouchEvent", + "initTransitionEvent", + "initUIEvent", + "initWebKitAnimationEvent", + "initWebKitTransitionEvent", + "initWebKitWheelEvent", + "initWheelEvent", + "initialTime", + "initialize", + "initiatorType", + "inline-size", + "inlineSize", + "inlineVerticalFieldOfView", + "inner", + "innerHTML", + "innerHeight", + "innerText", + "innerWidth", + "input", + "inputBuffer", + "inputEncoding", + "inputMethod", + "inputMode", + "inputSource", + "inputSources", + "inputType", + "inputs", + "insertAdjacentElement", + "insertAdjacentHTML", + "insertAdjacentText", + "insertBefore", + "insertCell", + "insertDTMF", + "insertData", + "insertDebugMarker", + "insertItemBefore", + "insertNode", + "insertRow", + "insertRule", + "inset", + "inset-block", + "inset-block-end", + "inset-block-start", + "inset-inline", + "inset-inline-end", + "inset-inline-start", + "insetBlock", + "insetBlockEnd", + "insetBlockStart", + "insetInline", + "insetInlineEnd", + "insetInlineStart", + "installing", + "instanceRoot", + "instantiate", + "instantiateStreaming", + "instruments", + "int16", + "int32", + "int8", + "integrity", + "interactionMode", + "intercept", + "interfaceClass", + "interfaceName", + "interfaceNumber", + "interfaceProtocol", + "interfaceSubclass", + "interfaces", + "interimResults", + "internalSubset", + "interpretation", + "intersectionRatio", + "intersectionRect", + "intersectsNode", + "interval", + "invalidIteratorState", + "invalidateFramebuffer", + "invalidateSubFramebuffer", + "inverse", + "invertSelf", + "is", + "is2D", + "isActive", + "isAlternate", + "isArray", + "isBingCurrentSearchDefault", + "isBuffer", + "isCandidateWindowVisible", + "isChar", + "isCollapsed", + "isComposing", + "isConcatSpreadable", + "isConnected", + "isContentEditable", + "isContentHandlerRegistered", + "isContextLost", + "isDefaultNamespace", + "isDirectory", + "isDisabled", + "isEnabled", + "isEqual", + "isEqualNode", + "isExtensible", + "isExternalCTAP2SecurityKeySupported", + "isFallbackAdapter", + "isFile", + "isFinite", + "isFramebuffer", + "isFrozen", + "isGenerator", + "isHTML", + "isHistoryNavigation", + "isId", + "isIdentity", + "isInjected", + "isInteger", + "isIntersecting", + "isLockFree", + "isMap", + "isMultiLine", + "isNaN", + "isOpen", + "isPointInFill", + "isPointInPath", + "isPointInRange", + "isPointInStroke", + "isPrefAlternate", + "isPresenting", + "isPrimary", + "isProgram", + "isPropertyImplicit", + "isProtocolHandlerRegistered", + "isPrototypeOf", + "isQuery", + "isRenderbuffer", + "isSafeInteger", + "isSameNode", + "isSampler", + "isScript", + "isScriptURL", + "isSealed", + "isSecureContext", + "isSessionSupported", + "isShader", + "isSupported", + "isSync", + "isTextEdit", + "isTexture", + "isTransformFeedback", + "isTrusted", + "isTypeSupported", + "isUserVerifyingPlatformAuthenticatorAvailable", + "isVertexArray", + "isView", + "isVisible", + "isochronousTransferIn", + "isochronousTransferOut", + "isolation", + "italics", + "item", + "itemId", + "itemProp", + "itemRef", + "itemScope", + "itemType", + "itemValue", + "items", + "iterateNext", + "iterationComposite", + "iterator", + "javaEnabled", + "jobTitle", + "join", + "json", + "justify-content", + "justify-items", + "justify-self", + "justifyContent", + "justifyItems", + "justifySelf", + "k1", + "k2", + "k3", + "k4", + "kHz", + "keepalive", + "kernelMatrix", + "kernelUnitLengthX", + "kernelUnitLengthY", + "kerning", + "key", + "keyCode", + "keyFor", + "keyIdentifier", + "keyLightEnabled", + "keyLocation", + "keyPath", + "keyStatuses", + "keySystem", + "keyText", + "keyUsage", + "keyboard", + "keys", + "keytype", + "kind", + "knee", + "label", + "labels", + "lang", + "language", + "languages", + "largeArcFlag", + "lastChild", + "lastElementChild", + "lastEventId", + "lastIndex", + "lastIndexOf", + "lastInputTime", + "lastMatch", + "lastMessageSubject", + "lastMessageType", + "lastModified", + "lastModifiedDate", + "lastPage", + "lastParen", + "lastState", + "lastStyleSheetSet", + "latitude", + "layerX", + "layerY", + "layout", + "layoutFlow", + "layoutGrid", + "layoutGridChar", + "layoutGridLine", + "layoutGridMode", + "layoutGridType", + "lbound", + "left", + "leftContext", + "leftDegrees", + "leftMargin", + "leftProjectionMatrix", + "leftViewMatrix", + "length", + "lengthAdjust", + "lengthComputable", + "letter-spacing", + "letterSpacing", + "level", + "lighting-color", + "lightingColor", + "limitingConeAngle", + "limits", + "line", + "line-break", + "line-height", + "lineAlign", + "lineBreak", + "lineCap", + "lineDashOffset", + "lineHeight", + "lineJoin", + "lineNum", + "lineNumber", + "linePos", + "lineTo", + "lineWidth", + "linearAcceleration", + "linearRampToValueAtTime", + "linearVelocity", + "lineno", + "lines", + "link", + "linkColor", + "linkProgram", + "links", + "list", + "list-style", + "list-style-image", + "list-style-position", + "list-style-type", + "listStyle", + "listStyleImage", + "listStylePosition", + "listStyleType", + "listener", + "load", + "loadEventEnd", + "loadEventStart", + "loadOp", + "loadTime", + "loadTimes", + "loaded", + "loading", + "localDescription", + "localName", + "localService", + "localStorage", + "locale", + "localeCompare", + "location", + "locationbar", + "lock", + "locked", + "lockedFile", + "locks", + "lodMaxClamp", + "lodMinClamp", + "log", + "log10", + "log1p", + "log2", + "logicalXDPI", + "logicalYDPI", + "longDesc", + "longitude", + "lookupNamespaceURI", + "lookupPrefix", + "loop", + "loopEnd", + "loopStart", + "looping", + "lost", + "low", + "lower", + "lowerBound", + "lowerOpen", + "lowsrc", + "m11", + "m12", + "m13", + "m14", + "m21", + "m22", + "m23", + "m24", + "m31", + "m32", + "m33", + "m34", + "m41", + "m42", + "m43", + "m44", + "magFilter", + "makeXRCompatible", + "manifest", + "manufacturer", + "manufacturerName", + "map", + "mapAsync", + "mapState", + "mappedAtCreation", + "mapping", + "margin", + "margin-block", + "margin-block-end", + "margin-block-start", + "margin-bottom", + "margin-inline", + "margin-inline-end", + "margin-inline-start", + "margin-left", + "margin-right", + "margin-top", + "marginBlock", + "marginBlockEnd", + "marginBlockStart", + "marginBottom", + "marginHeight", + "marginInline", + "marginInlineEnd", + "marginInlineStart", + "marginLeft", + "marginRight", + "marginTop", + "marginWidth", + "mark", + "marker", + "marker-end", + "marker-mid", + "marker-offset", + "marker-start", + "markerEnd", + "markerHeight", + "markerMid", + "markerOffset", + "markerStart", + "markerUnits", + "markerWidth", + "marks", + "mask", + "mask-clip", + "mask-composite", + "mask-image", + "mask-mode", + "mask-origin", + "mask-position", + "mask-position-x", + "mask-position-y", + "mask-repeat", + "mask-size", + "mask-type", + "maskClip", + "maskComposite", + "maskContentUnits", + "maskImage", + "maskMode", + "maskOrigin", + "maskPosition", + "maskPositionX", + "maskPositionY", + "maskRepeat", + "maskSize", + "maskType", + "maskUnits", + "match", + "matchAll", + "matchMedia", + "matchMedium", + "matches", + "matrix", + "matrixTransform", + "max", + "max-block-size", + "max-height", + "max-inline-size", + "max-width", + "maxActions", + "maxAlternatives", + "maxAnisotropy", + "maxBindGroups", + "maxBindGroupsPlusVertexBuffers", + "maxBindingsPerBindGroup", + "maxBlockSize", + "maxBufferSize", + "maxChannelCount", + "maxChannels", + "maxColorAttachmentBytesPerSample", + "maxColorAttachments", + "maxComputeInvocationsPerWorkgroup", + "maxComputeWorkgroupSizeX", + "maxComputeWorkgroupSizeY", + "maxComputeWorkgroupSizeZ", + "maxComputeWorkgroupStorageSize", + "maxComputeWorkgroupsPerDimension", + "maxConnectionsPerServer", + "maxDecibels", + "maxDistance", + "maxDrawCount", + "maxDynamicStorageBuffersPerPipelineLayout", + "maxDynamicUniformBuffersPerPipelineLayout", + "maxHeight", + "maxInlineSize", + "maxInterStageShaderComponents", + "maxInterStageShaderVariables", + "maxLayers", + "maxLength", + "maxMessageSize", + "maxPacketLifeTime", + "maxRetransmits", + "maxSampledTexturesPerShaderStage", + "maxSamplersPerShaderStage", + "maxStorageBufferBindingSize", + "maxStorageBuffersPerShaderStage", + "maxStorageTexturesPerShaderStage", + "maxTextureArrayLayers", + "maxTextureDimension1D", + "maxTextureDimension2D", + "maxTextureDimension3D", + "maxTouchPoints", + "maxUniformBufferBindingSize", + "maxUniformBuffersPerShaderStage", + "maxValue", + "maxVertexAttributes", + "maxVertexBufferArrayStride", + "maxVertexBuffers", + "maxWidth", + "measure", + "measureText", + "media", + "mediaCapabilities", + "mediaDevices", + "mediaElement", + "mediaGroup", + "mediaKeys", + "mediaSession", + "mediaStream", + "mediaText", + "meetOrSlice", + "memory", + "menubar", + "mergeAttributes", + "message", + "messageClass", + "messageHandlers", + "messageType", + "messages", + "metaKey", + "metadata", + "method", + "methodDetails", + "methodName", + "mid", + "mimeType", + "mimeTypes", + "min", + "min-block-size", + "min-height", + "min-inline-size", + "min-width", + "minBindingSize", + "minBlockSize", + "minDecibels", + "minFilter", + "minHeight", + "minInlineSize", + "minLength", + "minStorageBufferOffsetAlignment", + "minUniformBufferOffsetAlignment", + "minValue", + "minWidth", + "mipLevel", + "mipLevelCount", + "mipmapFilter", + "miterLimit", + "mix-blend-mode", + "mixBlendMode", + "mm", + "mobile", + "mode", + "model", + "modify", + "module", + "mount", + "move", + "moveBy", + "moveEnd", + "moveFirst", + "moveFocusDown", + "moveFocusLeft", + "moveFocusRight", + "moveFocusUp", + "moveNext", + "moveRow", + "moveStart", + "moveTo", + "moveToBookmark", + "moveToElementText", + "moveToPoint", + "movementX", + "movementY", + "mozAdd", + "mozAnimationStartTime", + "mozAnon", + "mozApps", + "mozAudioCaptured", + "mozAudioChannelType", + "mozAutoplayEnabled", + "mozCancelAnimationFrame", + "mozCancelFullScreen", + "mozCancelRequestAnimationFrame", + "mozCaptureStream", + "mozCaptureStreamUntilEnded", + "mozClearDataAt", + "mozContact", + "mozContacts", + "mozCreateFileHandle", + "mozCurrentTransform", + "mozCurrentTransformInverse", + "mozCursor", + "mozDash", + "mozDashOffset", + "mozDecodedFrames", + "mozExitPointerLock", + "mozFillRule", + "mozFragmentEnd", + "mozFrameDelay", + "mozFullScreen", + "mozFullScreenElement", + "mozFullScreenEnabled", + "mozGetAll", + "mozGetAllKeys", + "mozGetAsFile", + "mozGetDataAt", + "mozGetMetadata", + "mozGetUserMedia", + "mozHasAudio", + "mozHasItem", + "mozHidden", + "mozImageSmoothingEnabled", + "mozIndexedDB", + "mozInnerScreenX", + "mozInnerScreenY", + "mozInputSource", + "mozIsTextField", + "mozItem", + "mozItemCount", + "mozItems", + "mozLength", + "mozLockOrientation", + "mozMatchesSelector", + "mozMovementX", + "mozMovementY", + "mozOpaque", + "mozOrientation", + "mozPaintCount", + "mozPaintedFrames", + "mozParsedFrames", + "mozPay", + "mozPointerLockElement", + "mozPresentedFrames", + "mozPreservesPitch", + "mozPressure", + "mozPrintCallback", + "mozRTCIceCandidate", + "mozRTCPeerConnection", + "mozRTCSessionDescription", + "mozRemove", + "mozRequestAnimationFrame", + "mozRequestFullScreen", + "mozRequestPointerLock", + "mozSetDataAt", + "mozSetImageElement", + "mozSourceNode", + "mozSrcObject", + "mozSystem", + "mozTCPSocket", + "mozTextStyle", + "mozTypesAt", + "mozUnlockOrientation", + "mozUserCancelled", + "mozVisibilityState", + "ms", + "msAnimation", + "msAnimationDelay", + "msAnimationDirection", + "msAnimationDuration", + "msAnimationFillMode", + "msAnimationIterationCount", + "msAnimationName", + "msAnimationPlayState", + "msAnimationStartTime", + "msAnimationTimingFunction", + "msBackfaceVisibility", + "msBlockProgression", + "msCSSOMElementFloatMetrics", + "msCaching", + "msCachingEnabled", + "msCancelRequestAnimationFrame", + "msCapsLockWarningOff", + "msClearImmediate", + "msClose", + "msContentZoomChaining", + "msContentZoomFactor", + "msContentZoomLimit", + "msContentZoomLimitMax", + "msContentZoomLimitMin", + "msContentZoomSnap", + "msContentZoomSnapPoints", + "msContentZoomSnapType", + "msContentZooming", + "msConvertURL", + "msCrypto", + "msDoNotTrack", + "msElementsFromPoint", + "msElementsFromRect", + "msExitFullscreen", + "msExtendedCode", + "msFillRule", + "msFirstPaint", + "msFlex", + "msFlexAlign", + "msFlexDirection", + "msFlexFlow", + "msFlexItemAlign", + "msFlexLinePack", + "msFlexNegative", + "msFlexOrder", + "msFlexPack", + "msFlexPositive", + "msFlexPreferredSize", + "msFlexWrap", + "msFlowFrom", + "msFlowInto", + "msFontFeatureSettings", + "msFullscreenElement", + "msFullscreenEnabled", + "msGetInputContext", + "msGetRegionContent", + "msGetUntransformedBounds", + "msGraphicsTrustStatus", + "msGridColumn", + "msGridColumnAlign", + "msGridColumnSpan", + "msGridColumns", + "msGridRow", + "msGridRowAlign", + "msGridRowSpan", + "msGridRows", + "msHidden", + "msHighContrastAdjust", + "msHyphenateLimitChars", + "msHyphenateLimitLines", + "msHyphenateLimitZone", + "msHyphens", + "msImageSmoothingEnabled", + "msImeAlign", + "msIndexedDB", + "msInterpolationMode", + "msIsStaticHTML", + "msKeySystem", + "msKeys", + "msLaunchUri", + "msLockOrientation", + "msManipulationViewsEnabled", + "msMatchMedia", + "msMatchesSelector", + "msMaxTouchPoints", + "msOrientation", + "msOverflowStyle", + "msPerspective", + "msPerspectiveOrigin", + "msPlayToDisabled", + "msPlayToPreferredSourceUri", + "msPlayToPrimary", + "msPointerEnabled", + "msRegionOverflow", + "msReleasePointerCapture", + "msRequestAnimationFrame", + "msRequestFullscreen", + "msSaveBlob", + "msSaveOrOpenBlob", + "msScrollChaining", + "msScrollLimit", + "msScrollLimitXMax", + "msScrollLimitXMin", + "msScrollLimitYMax", + "msScrollLimitYMin", + "msScrollRails", + "msScrollSnapPointsX", + "msScrollSnapPointsY", + "msScrollSnapType", + "msScrollSnapX", + "msScrollSnapY", + "msScrollTranslation", + "msSetImmediate", + "msSetMediaKeys", + "msSetPointerCapture", + "msTextCombineHorizontal", + "msTextSizeAdjust", + "msToBlob", + "msTouchAction", + "msTouchSelect", + "msTraceAsyncCallbackCompleted", + "msTraceAsyncCallbackStarting", + "msTraceAsyncOperationCompleted", + "msTraceAsyncOperationStarting", + "msTransform", + "msTransformOrigin", + "msTransformStyle", + "msTransition", + "msTransitionDelay", + "msTransitionDuration", + "msTransitionProperty", + "msTransitionTimingFunction", + "msUnlockOrientation", + "msUpdateAsyncCallbackRelation", + "msUserSelect", + "msVisibilityState", + "msWrapFlow", + "msWrapMargin", + "msWrapThrough", + "msWriteProfilerMark", + "msZoom", + "msZoomTo", + "mt", + "mul", + "multiEntry", + "multiSelectionObj", + "multiline", + "multiple", + "multiply", + "multiplySelf", + "multisample", + "multisampled", + "mutableFile", + "muted", + "n", + "name", + "nameProp", + "namedItem", + "namedRecordset", + "names", + "namespaceURI", + "namespaces", + "naturalHeight", + "naturalWidth", + "navigate", + "navigation", + "navigationMode", + "navigationPreload", + "navigationStart", + "navigator", + "near", + "nearestViewportElement", + "negative", + "negotiated", + "netscape", + "networkState", + "newScale", + "newTranslate", + "newURL", + "newValue", + "newValueSpecifiedUnits", + "newVersion", + "newhome", + "next", + "nextElementSibling", + "nextHopProtocol", + "nextNode", + "nextPage", + "nextSibling", + "nickname", + "noHref", + "noModule", + "noResize", + "noShade", + "noValidate", + "noWrap", + "node", + "nodeName", + "nodeType", + "nodeValue", + "nonce", + "normalize", + "normalizedPathSegList", + "notationName", + "notations", + "note", + "noteGrainOn", + "noteOff", + "noteOn", + "notify", + "now", + "numOctaves", + "number", + "numberOfChannels", + "numberOfInputs", + "numberOfItems", + "numberOfOutputs", + "numberValue", + "oMatchesSelector", + "object", + "object-fit", + "object-position", + "objectFit", + "objectPosition", + "objectStore", + "objectStoreNames", + "objectType", + "observe", + "occlusionQuerySet", + "of", + "offscreenBuffering", + "offset", + "offset-anchor", + "offset-distance", + "offset-path", + "offset-rotate", + "offsetAnchor", + "offsetDistance", + "offsetHeight", + "offsetLeft", + "offsetNode", + "offsetParent", + "offsetPath", + "offsetRotate", + "offsetTop", + "offsetWidth", + "offsetX", + "offsetY", + "ok", + "oldURL", + "oldValue", + "oldVersion", + "olderShadowRoot", + "onLine", + "onSubmittedWorkDone", + "onabort", + "onabsolutedeviceorientation", + "onactivate", + "onactive", + "onaddsourcebuffer", + "onaddstream", + "onaddtrack", + "onafterprint", + "onafterscriptexecute", + "onafterupdate", + "onanimationcancel", + "onanimationend", + "onanimationiteration", + "onanimationstart", + "onappinstalled", + "onaudioend", + "onaudioprocess", + "onaudiostart", + "onautocomplete", + "onautocompleteerror", + "onauxclick", + "onbeforeactivate", + "onbeforecopy", + "onbeforecut", + "onbeforedeactivate", + "onbeforeeditfocus", + "onbeforeinstallprompt", + "onbeforepaste", + "onbeforeprint", + "onbeforescriptexecute", + "onbeforeunload", + "onbeforeupdate", + "onbeforexrselect", + "onbegin", + "onblocked", + "onblur", + "onbounce", + "onboundary", + "onbufferedamountlow", + "oncached", + "oncancel", + "oncandidatewindowhide", + "oncandidatewindowshow", + "oncandidatewindowupdate", + "oncanplay", + "oncanplaythrough", + "once", + "oncellchange", + "onchange", + "oncharacteristicvaluechanged", + "onchargingchange", + "onchargingtimechange", + "onchecking", + "onclick", + "onclose", + "onclosing", + "oncompassneedscalibration", + "oncomplete", + "onconnect", + "onconnecting", + "onconnectionavailable", + "onconnectionstatechange", + "oncontextmenu", + "oncontrollerchange", + "oncontrolselect", + "oncopy", + "oncuechange", + "oncut", + "ondataavailable", + "ondatachannel", + "ondatasetchanged", + "ondatasetcomplete", + "ondblclick", + "ondeactivate", + "ondevicechange", + "ondevicelight", + "ondevicemotion", + "ondeviceorientation", + "ondeviceorientationabsolute", + "ondeviceproximity", + "ondischargingtimechange", + "ondisconnect", + "ondisplay", + "ondownloading", + "ondrag", + "ondragend", + "ondragenter", + "ondragexit", + "ondragleave", + "ondragover", + "ondragstart", + "ondrop", + "ondurationchange", + "onemptied", + "onencrypted", + "onend", + "onended", + "onenter", + "onenterpictureinpicture", + "onerror", + "onerrorupdate", + "onexit", + "onfilterchange", + "onfinish", + "onfocus", + "onfocusin", + "onfocusout", + "onformdata", + "onfreeze", + "onfullscreenchange", + "onfullscreenerror", + "ongatheringstatechange", + "ongattserverdisconnected", + "ongesturechange", + "ongestureend", + "ongesturestart", + "ongotpointercapture", + "onhashchange", + "onhelp", + "onicecandidate", + "onicecandidateerror", + "oniceconnectionstatechange", + "onicegatheringstatechange", + "oninactive", + "oninput", + "oninputsourceschange", + "oninvalid", + "onkeydown", + "onkeypress", + "onkeystatuseschange", + "onkeyup", + "onlanguagechange", + "onlayoutcomplete", + "onleavepictureinpicture", + "onlevelchange", + "onload", + "onloadeddata", + "onloadedmetadata", + "onloadend", + "onloading", + "onloadingdone", + "onloadingerror", + "onloadstart", + "onlosecapture", + "onlostpointercapture", + "only", + "onmark", + "onmessage", + "onmessageerror", + "onmidimessage", + "onmousedown", + "onmouseenter", + "onmouseleave", + "onmousemove", + "onmouseout", + "onmouseover", + "onmouseup", + "onmousewheel", + "onmove", + "onmoveend", + "onmovestart", + "onmozfullscreenchange", + "onmozfullscreenerror", + "onmozorientationchange", + "onmozpointerlockchange", + "onmozpointerlockerror", + "onmscontentzoom", + "onmsfullscreenchange", + "onmsfullscreenerror", + "onmsgesturechange", + "onmsgesturedoubletap", + "onmsgestureend", + "onmsgesturehold", + "onmsgesturestart", + "onmsgesturetap", + "onmsgotpointercapture", + "onmsinertiastart", + "onmslostpointercapture", + "onmsmanipulationstatechanged", + "onmsneedkey", + "onmsorientationchange", + "onmspointercancel", + "onmspointerdown", + "onmspointerenter", + "onmspointerhover", + "onmspointerleave", + "onmspointermove", + "onmspointerout", + "onmspointerover", + "onmspointerup", + "onmssitemodejumplistitemremoved", + "onmsthumbnailclick", + "onmute", + "onnegotiationneeded", + "onnomatch", + "onnoupdate", + "onobsolete", + "onoffline", + "ononline", + "onopen", + "onorientationchange", + "onpagechange", + "onpagehide", + "onpageshow", + "onpaste", + "onpause", + "onpayerdetailchange", + "onpaymentmethodchange", + "onplay", + "onplaying", + "onpluginstreamstart", + "onpointercancel", + "onpointerdown", + "onpointerenter", + "onpointerleave", + "onpointerlockchange", + "onpointerlockerror", + "onpointermove", + "onpointerout", + "onpointerover", + "onpointerrawupdate", + "onpointerup", + "onpopstate", + "onprocessorerror", + "onprogress", + "onpropertychange", + "onratechange", + "onreading", + "onreadystatechange", + "onrejectionhandled", + "onrelease", + "onremove", + "onremovesourcebuffer", + "onremovestream", + "onremovetrack", + "onrepeat", + "onreset", + "onresize", + "onresizeend", + "onresizestart", + "onresourcetimingbufferfull", + "onresult", + "onresume", + "onrowenter", + "onrowexit", + "onrowsdelete", + "onrowsinserted", + "onscroll", + "onsearch", + "onsecuritypolicyviolation", + "onseeked", + "onseeking", + "onselect", + "onselectedcandidatepairchange", + "onselectend", + "onselectionchange", + "onselectstart", + "onshippingaddresschange", + "onshippingoptionchange", + "onshow", + "onsignalingstatechange", + "onsoundend", + "onsoundstart", + "onsourceclose", + "onsourceclosed", + "onsourceended", + "onsourceopen", + "onspeechend", + "onspeechstart", + "onsqueeze", + "onsqueezeend", + "onsqueezestart", + "onstalled", + "onstart", + "onstatechange", + "onstop", + "onstorage", + "onstoragecommit", + "onsubmit", + "onsuccess", + "onsuspend", + "onterminate", + "ontextinput", + "ontimeout", + "ontimeupdate", + "ontoggle", + "ontonechange", + "ontouchcancel", + "ontouchend", + "ontouchmove", + "ontouchstart", + "ontrack", + "ontransitioncancel", + "ontransitionend", + "ontransitionrun", + "ontransitionstart", + "onuncapturederror", + "onunhandledrejection", + "onunload", + "onunmute", + "onupdate", + "onupdateend", + "onupdatefound", + "onupdateready", + "onupdatestart", + "onupgradeneeded", + "onuserproximity", + "onversionchange", + "onvisibilitychange", + "onvoiceschanged", + "onvolumechange", + "onvrdisplayactivate", + "onvrdisplayconnect", + "onvrdisplaydeactivate", + "onvrdisplaydisconnect", + "onvrdisplaypresentchange", + "onwaiting", + "onwaitingforkey", + "onwarning", + "onwebkitanimationend", + "onwebkitanimationiteration", + "onwebkitanimationstart", + "onwebkitcurrentplaybacktargetiswirelesschanged", + "onwebkitfullscreenchange", + "onwebkitfullscreenerror", + "onwebkitkeyadded", + "onwebkitkeyerror", + "onwebkitkeymessage", + "onwebkitneedkey", + "onwebkitorientationchange", + "onwebkitplaybacktargetavailabilitychanged", + "onwebkitpointerlockchange", + "onwebkitpointerlockerror", + "onwebkitresourcetimingbufferfull", + "onwebkittransitionend", + "onwheel", + "onzoom", + "opacity", + "open", + "openCursor", + "openDatabase", + "openKeyCursor", + "opened", + "opener", + "opera", + "operation", + "operationType", + "operator", + "opr", + "optimum", + "options", + "or", + "order", + "orderX", + "orderY", + "ordered", + "org", + "organization", + "orient", + "orientAngle", + "orientType", + "orientation", + "orientationX", + "orientationY", + "orientationZ", + "origin", + "originalPolicy", + "originalTarget", + "orphans", + "oscpu", + "outerHTML", + "outerHeight", + "outerText", + "outerWidth", + "outline", + "outline-color", + "outline-offset", + "outline-style", + "outline-width", + "outlineColor", + "outlineOffset", + "outlineStyle", + "outlineWidth", + "outputBuffer", + "outputChannelCount", + "outputLatency", + "outputs", + "overflow", + "overflow-anchor", + "overflow-block", + "overflow-inline", + "overflow-wrap", + "overflow-x", + "overflow-y", + "overflowAnchor", + "overflowBlock", + "overflowInline", + "overflowWrap", + "overflowX", + "overflowY", + "overrideMimeType", + "oversample", + "overscroll-behavior", + "overscroll-behavior-block", + "overscroll-behavior-inline", + "overscroll-behavior-x", + "overscroll-behavior-y", + "overscrollBehavior", + "overscrollBehaviorBlock", + "overscrollBehaviorInline", + "overscrollBehaviorX", + "overscrollBehaviorY", + "ownKeys", + "ownerDocument", + "ownerElement", + "ownerNode", + "ownerRule", + "ownerSVGElement", + "owningElement", + "p1", + "p2", + "p3", + "p4", + "packetSize", + "packets", + "pad", + "padEnd", + "padStart", + "padding", + "padding-block", + "padding-block-end", + "padding-block-start", + "padding-bottom", + "padding-inline", + "padding-inline-end", + "padding-inline-start", + "padding-left", + "padding-right", + "padding-top", + "paddingBlock", + "paddingBlockEnd", + "paddingBlockStart", + "paddingBottom", + "paddingInline", + "paddingInlineEnd", + "paddingInlineStart", + "paddingLeft", + "paddingRight", + "paddingTop", + "page", + "page-break-after", + "page-break-before", + "page-break-inside", + "pageBreakAfter", + "pageBreakBefore", + "pageBreakInside", + "pageCount", + "pageLeft", + "pageTop", + "pageX", + "pageXOffset", + "pageY", + "pageYOffset", + "pages", + "paint-order", + "paintOrder", + "paintRequests", + "paintType", + "paintWorklet", + "palette", + "pan", + "panningModel", + "parameterData", + "parameters", + "parent", + "parentElement", + "parentNode", + "parentRule", + "parentStyleSheet", + "parentTextEdit", + "parentWindow", + "parse", + "parseAll", + "parseFloat", + "parseFromString", + "parseInt", + "part", + "participants", + "passOp", + "passive", + "password", + "pasteHTML", + "path", + "pathLength", + "pathSegList", + "pathSegType", + "pathSegTypeAsLetter", + "pathname", + "pattern", + "patternContentUnits", + "patternMismatch", + "patternTransform", + "patternUnits", + "pause", + "pauseAnimations", + "pauseOnExit", + "pauseProfilers", + "pauseTransformFeedback", + "paused", + "payerEmail", + "payerName", + "payerPhone", + "paymentManager", + "pc", + "peerIdentity", + "pending", + "pendingLocalDescription", + "pendingRemoteDescription", + "percent", + "performance", + "periodicSync", + "permission", + "permissionState", + "permissions", + "persist", + "persisted", + "personalbar", + "perspective", + "perspective-origin", + "perspectiveOrigin", + "phone", + "phoneticFamilyName", + "phoneticGivenName", + "photo", + "pictureInPictureElement", + "pictureInPictureEnabled", + "pictureInPictureWindow", + "ping", + "pipeThrough", + "pipeTo", + "pitch", + "pixelBottom", + "pixelDepth", + "pixelHeight", + "pixelLeft", + "pixelRight", + "pixelStorei", + "pixelTop", + "pixelUnitToMillimeterX", + "pixelUnitToMillimeterY", + "pixelWidth", + "place-content", + "place-items", + "place-self", + "placeContent", + "placeItems", + "placeSelf", + "placeholder", + "platform", + "platformVersion", + "platforms", + "play", + "playEffect", + "playState", + "playbackRate", + "playbackState", + "playbackTime", + "played", + "playoutDelayHint", + "playsInline", + "plugins", + "pluginspage", + "pname", + "pointer-events", + "pointerBeforeReferenceNode", + "pointerEnabled", + "pointerEvents", + "pointerId", + "pointerLockElement", + "pointerType", + "points", + "pointsAtX", + "pointsAtY", + "pointsAtZ", + "polygonOffset", + "pop", + "popDebugGroup", + "popErrorScope", + "populateMatrix", + "popupWindowFeatures", + "popupWindowName", + "popupWindowURI", + "port", + "port1", + "port2", + "ports", + "posBottom", + "posHeight", + "posLeft", + "posRight", + "posTop", + "posWidth", + "pose", + "position", + "positionAlign", + "positionX", + "positionY", + "positionZ", + "postError", + "postMessage", + "postalCode", + "poster", + "pow", + "powerEfficient", + "powerOff", + "powerPreference", + "preMultiplySelf", + "precision", + "preferredStyleSheetSet", + "preferredStylesheetSet", + "prefix", + "preload", + "premultipliedAlpha", + "prepend", + "presentation", + "preserveAlpha", + "preserveAspectRatio", + "preserveAspectRatioString", + "pressed", + "pressure", + "prevValue", + "preventDefault", + "preventExtensions", + "preventSilentAccess", + "previousElementSibling", + "previousNode", + "previousPage", + "previousRect", + "previousScale", + "previousSibling", + "previousTranslate", + "primaryKey", + "primitive", + "primitiveType", + "primitiveUnits", + "principals", + "print", + "priority", + "privateKey", + "probablySupportsContext", + "process", + "processIceMessage", + "processingEnd", + "processingStart", + "processorOptions", + "product", + "productId", + "productName", + "productSub", + "profile", + "profileEnd", + "profiles", + "projectionMatrix", + "promise", + "prompt", + "properties", + "propertyIsEnumerable", + "propertyName", + "protocol", + "protocolLong", + "prototype", + "provider", + "pseudoClass", + "pseudoElement", + "pt", + "publicId", + "publicKey", + "published", + "pulse", + "push", + "pushDebugGroup", + "pushErrorScope", + "pushManager", + "pushNotification", + "pushState", + "put", + "putImageData", + "px", + "quadraticCurveTo", + "qualifier", + "quaternion", + "query", + "queryCommandEnabled", + "queryCommandIndeterm", + "queryCommandState", + "queryCommandSupported", + "queryCommandText", + "queryCommandValue", + "querySelector", + "querySelectorAll", + "querySet", + "queue", + "queueMicrotask", + "quote", + "quotes", + "r", + "r1", + "r2", + "race", + "rad", + "radiogroup", + "radiusX", + "radiusY", + "random", + "range", + "rangeCount", + "rangeMax", + "rangeMin", + "rangeOffset", + "rangeOverflow", + "rangeParent", + "rangeUnderflow", + "rate", + "ratio", + "raw", + "rawId", + "read", + "readAsArrayBuffer", + "readAsBinaryString", + "readAsBlob", + "readAsDataURL", + "readAsText", + "readBuffer", + "readEntries", + "readOnly", + "readPixels", + "readReportRequested", + "readText", + "readValue", + "readable", + "ready", + "readyState", + "reason", + "reboot", + "receivedAlert", + "receiver", + "receivers", + "recipient", + "reconnect", + "recordNumber", + "recordsAvailable", + "recordset", + "rect", + "red", + "redEyeReduction", + "redirect", + "redirectCount", + "redirectEnd", + "redirectStart", + "redirected", + "reduce", + "reduceRight", + "reduction", + "refDistance", + "refX", + "refY", + "referenceNode", + "referenceSpace", + "referrer", + "referrerPolicy", + "refresh", + "region", + "regionAnchorX", + "regionAnchorY", + "regionId", + "regions", + "register", + "registerContentHandler", + "registerElement", + "registerProperty", + "registerProtocolHandler", + "reject", + "rel", + "relList", + "relatedAddress", + "relatedNode", + "relatedPort", + "relatedTarget", + "release", + "releaseCapture", + "releaseEvents", + "releaseInterface", + "releaseLock", + "releasePointerCapture", + "releaseShaderCompiler", + "reliable", + "reliableWrite", + "reload", + "rem", + "remainingSpace", + "remote", + "remoteDescription", + "remove", + "removeAllRanges", + "removeAttribute", + "removeAttributeNS", + "removeAttributeNode", + "removeBehavior", + "removeChild", + "removeCue", + "removeEventListener", + "removeFilter", + "removeImport", + "removeItem", + "removeListener", + "removeNamedItem", + "removeNamedItemNS", + "removeNode", + "removeParameter", + "removeProperty", + "removeRange", + "removeRegion", + "removeRule", + "removeSiteSpecificTrackingException", + "removeSourceBuffer", + "removeStream", + "removeTrack", + "removeVariable", + "removeWakeLockListener", + "removeWebWideTrackingException", + "removed", + "removedNodes", + "renderHeight", + "renderState", + "renderTime", + "renderWidth", + "renderbufferStorage", + "renderbufferStorageMultisample", + "renderedBuffer", + "renderingMode", + "renotify", + "repeat", + "replace", + "replaceAdjacentText", + "replaceAll", + "replaceChild", + "replaceChildren", + "replaceData", + "replaceId", + "replaceItem", + "replaceNode", + "replaceState", + "replaceSync", + "replaceTrack", + "replaceWholeText", + "replaceWith", + "reportValidity", + "request", + "requestAdapter", + "requestAdapterInfo", + "requestAnimationFrame", + "requestAutocomplete", + "requestData", + "requestDevice", + "requestFrame", + "requestFullscreen", + "requestHitTestSource", + "requestHitTestSourceForTransientInput", + "requestId", + "requestIdleCallback", + "requestMIDIAccess", + "requestMediaKeySystemAccess", + "requestPermission", + "requestPictureInPicture", + "requestPointerLock", + "requestPresent", + "requestReferenceSpace", + "requestSession", + "requestStart", + "requestStorageAccess", + "requestSubmit", + "requestVideoFrameCallback", + "requestingWindow", + "requireInteraction", + "required", + "requiredExtensions", + "requiredFeatures", + "requiredLimits", + "reset", + "resetPose", + "resetTransform", + "resize", + "resizeBy", + "resizeTo", + "resolve", + "resolveQuerySet", + "resolveTarget", + "resource", + "response", + "responseBody", + "responseEnd", + "responseReady", + "responseStart", + "responseText", + "responseType", + "responseURL", + "responseXML", + "restartIce", + "restore", + "result", + "resultIndex", + "resultType", + "results", + "resume", + "resumeProfilers", + "resumeTransformFeedback", + "retry", + "returnValue", + "rev", + "reverse", + "reversed", + "revocable", + "revokeObjectURL", + "rgbColor", + "right", + "rightContext", + "rightDegrees", + "rightMargin", + "rightProjectionMatrix", + "rightViewMatrix", + "role", + "rolloffFactor", + "root", + "rootBounds", + "rootElement", + "rootMargin", + "rotate", + "rotateAxisAngle", + "rotateAxisAngleSelf", + "rotateFromVector", + "rotateFromVectorSelf", + "rotateSelf", + "rotation", + "rotationAngle", + "rotationRate", + "round", + "roundRect", + "row-gap", + "rowGap", + "rowIndex", + "rowSpan", + "rows", + "rowsPerImage", + "rtcpTransport", + "rtt", + "ruby-align", + "ruby-position", + "rubyAlign", + "rubyOverhang", + "rubyPosition", + "rules", + "runtime", + "runtimeStyle", + "rx", + "ry", + "s", + "safari", + "sample", + "sampleCount", + "sampleCoverage", + "sampleRate", + "sampleType", + "sampler", + "samplerParameterf", + "samplerParameteri", + "sandbox", + "save", + "saveData", + "scale", + "scale3d", + "scale3dSelf", + "scaleNonUniform", + "scaleNonUniformSelf", + "scaleSelf", + "scheme", + "scissor", + "scope", + "scopeName", + "scoped", + "screen", + "screenBrightness", + "screenEnabled", + "screenLeft", + "screenPixelToMillimeterX", + "screenPixelToMillimeterY", + "screenTop", + "screenX", + "screenY", + "scriptURL", + "scripts", + "scroll", + "scroll-behavior", + "scroll-margin", + "scroll-margin-block", + "scroll-margin-block-end", + "scroll-margin-block-start", + "scroll-margin-bottom", + "scroll-margin-inline", + "scroll-margin-inline-end", + "scroll-margin-inline-start", + "scroll-margin-left", + "scroll-margin-right", + "scroll-margin-top", + "scroll-padding", + "scroll-padding-block", + "scroll-padding-block-end", + "scroll-padding-block-start", + "scroll-padding-bottom", + "scroll-padding-inline", + "scroll-padding-inline-end", + "scroll-padding-inline-start", + "scroll-padding-left", + "scroll-padding-right", + "scroll-padding-top", + "scroll-snap-align", + "scroll-snap-type", + "scrollAmount", + "scrollBehavior", + "scrollBy", + "scrollByLines", + "scrollByPages", + "scrollDelay", + "scrollHeight", + "scrollIntoView", + "scrollIntoViewIfNeeded", + "scrollLeft", + "scrollLeftMax", + "scrollMargin", + "scrollMarginBlock", + "scrollMarginBlockEnd", + "scrollMarginBlockStart", + "scrollMarginBottom", + "scrollMarginInline", + "scrollMarginInlineEnd", + "scrollMarginInlineStart", + "scrollMarginLeft", + "scrollMarginRight", + "scrollMarginTop", + "scrollMaxX", + "scrollMaxY", + "scrollPadding", + "scrollPaddingBlock", + "scrollPaddingBlockEnd", + "scrollPaddingBlockStart", + "scrollPaddingBottom", + "scrollPaddingInline", + "scrollPaddingInlineEnd", + "scrollPaddingInlineStart", + "scrollPaddingLeft", + "scrollPaddingRight", + "scrollPaddingTop", + "scrollRestoration", + "scrollSnapAlign", + "scrollSnapType", + "scrollTo", + "scrollTop", + "scrollTopMax", + "scrollWidth", + "scrollX", + "scrollY", + "scrollbar-color", + "scrollbar-width", + "scrollbar3dLightColor", + "scrollbarArrowColor", + "scrollbarBaseColor", + "scrollbarColor", + "scrollbarDarkShadowColor", + "scrollbarFaceColor", + "scrollbarHighlightColor", + "scrollbarShadowColor", + "scrollbarTrackColor", + "scrollbarWidth", + "scrollbars", + "scrolling", + "scrollingElement", + "sctp", + "sctpCauseCode", + "sdp", + "sdpLineNumber", + "sdpMLineIndex", + "sdpMid", + "seal", + "search", + "searchBox", + "searchBoxJavaBridge_", + "searchParams", + "sectionRowIndex", + "secureConnectionStart", + "security", + "seed", + "seekToNextFrame", + "seekable", + "seeking", + "select", + "selectAllChildren", + "selectAlternateInterface", + "selectConfiguration", + "selectNode", + "selectNodeContents", + "selectNodes", + "selectSingleNode", + "selectSubString", + "selected", + "selectedIndex", + "selectedOptions", + "selectedStyleSheetSet", + "selectedStylesheetSet", + "selection", + "selectionDirection", + "selectionEnd", + "selectionStart", + "selector", + "selectorText", + "self", + "send", + "sendAsBinary", + "sendBeacon", + "sender", + "sentAlert", + "sentTimestamp", + "separator", + "serialNumber", + "serializeToString", + "serverTiming", + "service", + "serviceWorker", + "session", + "sessionId", + "sessionStorage", + "set", + "setActionHandler", + "setActive", + "setAlpha", + "setAppBadge", + "setAttribute", + "setAttributeNS", + "setAttributeNode", + "setAttributeNodeNS", + "setBaseAndExtent", + "setBigInt64", + "setBigUint64", + "setBindGroup", + "setBingCurrentSearchDefault", + "setBlendConstant", + "setCapture", + "setCodecPreferences", + "setColor", + "setCompositeOperation", + "setConfiguration", + "setCurrentTime", + "setCustomValidity", + "setData", + "setDate", + "setDragImage", + "setEnd", + "setEndAfter", + "setEndBefore", + "setEndPoint", + "setFillColor", + "setFilterRes", + "setFloat32", + "setFloat64", + "setFloatValue", + "setFormValue", + "setFullYear", + "setHeaderValue", + "setHours", + "setIdentityProvider", + "setImmediate", + "setIndexBuffer", + "setInt16", + "setInt32", + "setInt8", + "setInterval", + "setItem", + "setKeyframes", + "setLineCap", + "setLineDash", + "setLineJoin", + "setLineWidth", + "setLiveSeekableRange", + "setLocalDescription", + "setMatrix", + "setMatrixValue", + "setMediaKeys", + "setMilliseconds", + "setMinutes", + "setMiterLimit", + "setMonth", + "setNamedItem", + "setNamedItemNS", + "setNonUserCodeExceptions", + "setOrientToAngle", + "setOrientToAuto", + "setOrientation", + "setOverrideHistoryNavigationMode", + "setPaint", + "setParameter", + "setParameters", + "setPeriodicWave", + "setPipeline", + "setPointerCapture", + "setPosition", + "setPositionState", + "setPreference", + "setProperty", + "setPrototypeOf", + "setRGBColor", + "setRGBColorICCColor", + "setRadius", + "setRangeText", + "setRemoteDescription", + "setRequestHeader", + "setResizable", + "setResourceTimingBufferSize", + "setRotate", + "setScale", + "setScissorRect", + "setSeconds", + "setSelectionRange", + "setServerCertificate", + "setShadow", + "setSinkId", + "setSkewX", + "setSkewY", + "setStart", + "setStartAfter", + "setStartBefore", + "setStdDeviation", + "setStencilReference", + "setStreams", + "setStringValue", + "setStrokeColor", + "setSuggestResult", + "setTargetAtTime", + "setTargetValueAtTime", + "setTime", + "setTimeout", + "setTransform", + "setTranslate", + "setUTCDate", + "setUTCFullYear", + "setUTCHours", + "setUTCMilliseconds", + "setUTCMinutes", + "setUTCMonth", + "setUTCSeconds", + "setUint16", + "setUint32", + "setUint8", + "setUri", + "setValidity", + "setValueAtTime", + "setValueCurveAtTime", + "setVariable", + "setVelocity", + "setVersion", + "setVertexBuffer", + "setViewport", + "setYear", + "settingName", + "settingValue", + "sex", + "shaderLocation", + "shaderSource", + "shadowBlur", + "shadowColor", + "shadowOffsetX", + "shadowOffsetY", + "shadowRoot", + "shape", + "shape-image-threshold", + "shape-margin", + "shape-outside", + "shape-rendering", + "shapeImageThreshold", + "shapeMargin", + "shapeOutside", + "shapeRendering", + "sheet", + "shift", + "shiftKey", + "shiftLeft", + "shippingAddress", + "shippingOption", + "shippingType", + "show", + "showHelp", + "showModal", + "showModalDialog", + "showModelessDialog", + "showNotification", + "sidebar", + "sign", + "signal", + "signalingState", + "signature", + "silent", + "sin", + "singleNodeValue", + "sinh", + "sinkId", + "sittingToStandingTransform", + "size", + "sizeToContent", + "sizeX", + "sizeZ", + "sizes", + "skewX", + "skewXSelf", + "skewY", + "skewYSelf", + "slice", + "slope", + "slot", + "small", + "smil", + "smooth", + "smoothingTimeConstant", + "snapToLines", + "snapshotItem", + "snapshotLength", + "some", + "sort", + "sortingCode", + "source", + "sourceBuffer", + "sourceBuffers", + "sourceCapabilities", + "sourceFile", + "sourceIndex", + "sourceMap", + "sources", + "spacing", + "span", + "speak", + "speakAs", + "speaking", + "species", + "specified", + "specularConstant", + "specularExponent", + "speechSynthesis", + "speed", + "speedOfSound", + "spellcheck", + "splice", + "split", + "splitText", + "spreadMethod", + "sqrt", + "src", + "srcElement", + "srcFactor", + "srcFilter", + "srcObject", + "srcUrn", + "srcdoc", + "srclang", + "srcset", + "stack", + "stackTraceLimit", + "stacktrace", + "stageParameters", + "standalone", + "standby", + "start", + "startContainer", + "startIce", + "startMessages", + "startNotifications", + "startOffset", + "startProfiling", + "startRendering", + "startShark", + "startTime", + "startsWith", + "state", + "status", + "statusCode", + "statusMessage", + "statusText", + "statusbar", + "stdDeviationX", + "stdDeviationY", + "stencilBack", + "stencilClearValue", + "stencilFront", + "stencilFunc", + "stencilFuncSeparate", + "stencilLoadOp", + "stencilMask", + "stencilMaskSeparate", + "stencilOp", + "stencilOpSeparate", + "stencilReadMask", + "stencilReadOnly", + "stencilStoreOp", + "stencilWriteMask", + "step", + "stepDown", + "stepMismatch", + "stepMode", + "stepUp", + "sticky", + "stitchTiles", + "stop", + "stop-color", + "stop-opacity", + "stopColor", + "stopImmediatePropagation", + "stopNotifications", + "stopOpacity", + "stopProfiling", + "stopPropagation", + "stopShark", + "stopped", + "storage", + "storageArea", + "storageName", + "storageStatus", + "storageTexture", + "store", + "storeOp", + "storeSiteSpecificTrackingException", + "storeWebWideTrackingException", + "stpVersion", + "stream", + "streams", + "stretch", + "strike", + "string", + "stringValue", + "stringify", + "stripIndexFormat", + "stroke", + "stroke-dasharray", + "stroke-dashoffset", + "stroke-linecap", + "stroke-linejoin", + "stroke-miterlimit", + "stroke-opacity", + "stroke-width", + "strokeDasharray", + "strokeDashoffset", + "strokeLinecap", + "strokeLinejoin", + "strokeMiterlimit", + "strokeOpacity", + "strokeRect", + "strokeStyle", + "strokeText", + "strokeWidth", + "style", + "styleFloat", + "styleMap", + "styleMedia", + "styleSheet", + "styleSheetSets", + "styleSheets", + "sub", + "subarray", + "subject", + "submit", + "submitFrame", + "submitter", + "subscribe", + "substr", + "substring", + "substringData", + "subtle", + "subtree", + "suffix", + "suffixes", + "summary", + "sup", + "supported", + "supportedContentEncodings", + "supportedEntryTypes", + "supports", + "supportsSession", + "surfaceScale", + "surroundContents", + "suspend", + "suspendRedraw", + "swapCache", + "swapNode", + "sweepFlag", + "symbols", + "sync", + "sysexEnabled", + "system", + "systemCode", + "systemId", + "systemLanguage", + "systemXDPI", + "systemYDPI", + "tBodies", + "tFoot", + "tHead", + "tabIndex", + "table", + "table-layout", + "tableLayout", + "tableValues", + "tag", + "tagName", + "tagUrn", + "tags", + "taintEnabled", + "takePhoto", + "takeRecords", + "tan", + "tangentialPressure", + "tanh", + "target", + "targetElement", + "targetRayMode", + "targetRaySpace", + "targetTouches", + "targetX", + "targetY", + "targets", + "tcpType", + "tee", + "tel", + "terminate", + "test", + "texImage2D", + "texImage3D", + "texParameterf", + "texParameteri", + "texStorage2D", + "texStorage3D", + "texSubImage2D", + "texSubImage3D", + "text", + "text-align", + "text-align-last", + "text-anchor", + "text-combine-upright", + "text-decoration", + "text-decoration-color", + "text-decoration-line", + "text-decoration-skip-ink", + "text-decoration-style", + "text-decoration-thickness", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-position", + "text-emphasis-style", + "text-indent", + "text-justify", + "text-orientation", + "text-overflow", + "text-rendering", + "text-shadow", + "text-transform", + "text-underline-offset", + "text-underline-position", + "textAlign", + "textAlignLast", + "textAnchor", + "textAutospace", + "textBaseline", + "textCombineUpright", + "textContent", + "textDecoration", + "textDecorationBlink", + "textDecorationColor", + "textDecorationLine", + "textDecorationLineThrough", + "textDecorationNone", + "textDecorationOverline", + "textDecorationSkipInk", + "textDecorationStyle", + "textDecorationThickness", + "textDecorationUnderline", + "textEmphasis", + "textEmphasisColor", + "textEmphasisPosition", + "textEmphasisStyle", + "textIndent", + "textJustify", + "textJustifyTrim", + "textKashida", + "textKashidaSpace", + "textLength", + "textOrientation", + "textOverflow", + "textRendering", + "textShadow", + "textTracks", + "textTransform", + "textUnderlineOffset", + "textUnderlinePosition", + "texture", + "then", + "threadId", + "threshold", + "thresholds", + "tiltX", + "tiltY", + "time", + "timeEnd", + "timeLog", + "timeOrigin", + "timeRemaining", + "timeStamp", + "timecode", + "timeline", + "timelineTime", + "timeout", + "timestamp", + "timestampOffset", + "timestampWrites", + "timing", + "title", + "to", + "toArray", + "toBlob", + "toDataURL", + "toDateString", + "toElement", + "toExponential", + "toFixed", + "toFloat32Array", + "toFloat64Array", + "toGMTString", + "toISOString", + "toJSON", + "toLocaleDateString", + "toLocaleFormat", + "toLocaleLowerCase", + "toLocaleString", + "toLocaleTimeString", + "toLocaleUpperCase", + "toLowerCase", + "toMatrix", + "toMethod", + "toPrecision", + "toPrimitive", + "toSdp", + "toSource", + "toStaticHTML", + "toString", + "toStringTag", + "toSum", + "toTimeString", + "toUTCString", + "toUpperCase", + "toggle", + "toggleAttribute", + "toggleLongPressEnabled", + "tone", + "toneBuffer", + "tooLong", + "tooShort", + "toolbar", + "top", + "topMargin", + "topology", + "total", + "totalFrameDelay", + "totalVideoFrames", + "touch-action", + "touchAction", + "touched", + "touches", + "trace", + "track", + "trackVisibility", + "transaction", + "transactions", + "transceiver", + "transferControlToOffscreen", + "transferFromImageBitmap", + "transferImageBitmap", + "transferIn", + "transferOut", + "transferSize", + "transferToImageBitmap", + "transform", + "transform-box", + "transform-origin", + "transform-style", + "transformBox", + "transformFeedbackVaryings", + "transformOrigin", + "transformPoint", + "transformString", + "transformStyle", + "transformToDocument", + "transformToFragment", + "transition", + "transition-delay", + "transition-duration", + "transition-property", + "transition-timing-function", + "transitionDelay", + "transitionDuration", + "transitionProperty", + "transitionTimingFunction", + "translate", + "translateSelf", + "translationX", + "translationY", + "transport", + "trim", + "trimEnd", + "trimLeft", + "trimRight", + "trimStart", + "trueSpeed", + "trunc", + "truncate", + "trustedTypes", + "turn", + "twist", + "type", + "typeDetail", + "typeMismatch", + "typeMustMatch", + "types", + "u2f", + "ubound", + "uint16", + "uint32", + "uint8", + "uint8Clamped", + "unclippedDepth", + "unconfigure", + "undefined", + "unescape", + "uneval", + "unicode", + "unicode-bidi", + "unicodeBidi", + "unicodeRange", + "uniform1f", + "uniform1fv", + "uniform1i", + "uniform1iv", + "uniform1ui", + "uniform1uiv", + "uniform2f", + "uniform2fv", + "uniform2i", + "uniform2iv", + "uniform2ui", + "uniform2uiv", + "uniform3f", + "uniform3fv", + "uniform3i", + "uniform3iv", + "uniform3ui", + "uniform3uiv", + "uniform4f", + "uniform4fv", + "uniform4i", + "uniform4iv", + "uniform4ui", + "uniform4uiv", + "uniformBlockBinding", + "uniformMatrix2fv", + "uniformMatrix2x3fv", + "uniformMatrix2x4fv", + "uniformMatrix3fv", + "uniformMatrix3x2fv", + "uniformMatrix3x4fv", + "uniformMatrix4fv", + "uniformMatrix4x2fv", + "uniformMatrix4x3fv", + "unique", + "uniqueID", + "uniqueNumber", + "unit", + "unitType", + "units", + "unloadEventEnd", + "unloadEventStart", + "unlock", + "unmap", + "unmount", + "unobserve", + "unpause", + "unpauseAnimations", + "unreadCount", + "unregister", + "unregisterContentHandler", + "unregisterProtocolHandler", + "unscopables", + "unselectable", + "unshift", + "unsubscribe", + "unsuspendRedraw", + "unsuspendRedrawAll", + "unwatch", + "unwrapKey", + "upDegrees", + "upX", + "upY", + "upZ", + "update", + "updateCommands", + "updateIce", + "updateInterval", + "updatePlaybackRate", + "updateRenderState", + "updateSettings", + "updateTiming", + "updateViaCache", + "updateWith", + "updated", + "updating", + "upgrade", + "upload", + "uploadTotal", + "uploaded", + "upper", + "upperBound", + "upperOpen", + "uri", + "url", + "urn", + "urns", + "usage", + "usages", + "usb", + "usbVersionMajor", + "usbVersionMinor", + "usbVersionSubminor", + "useCurrentView", + "useMap", + "useProgram", + "usedSpace", + "user-select", + "userActivation", + "userAgent", + "userAgentData", + "userChoice", + "userHandle", + "userHint", + "userLanguage", + "userSelect", + "userVisibleOnly", + "username", + "usernameFragment", + "utterance", + "uuid", + "v8BreakIterator", + "vAlign", + "vLink", + "valid", + "validate", + "validateProgram", + "validationMessage", + "validity", + "value", + "valueAsDate", + "valueAsNumber", + "valueAsString", + "valueInSpecifiedUnits", + "valueMissing", + "valueOf", + "valueText", + "valueType", + "values", + "variable", + "variant", + "variationSettings", + "vector-effect", + "vectorEffect", + "velocityAngular", + "velocityExpansion", + "velocityX", + "velocityY", + "vendor", + "vendorId", + "vendorSub", + "verify", + "version", + "vertex", + "vertexAttrib1f", + "vertexAttrib1fv", + "vertexAttrib2f", + "vertexAttrib2fv", + "vertexAttrib3f", + "vertexAttrib3fv", + "vertexAttrib4f", + "vertexAttrib4fv", + "vertexAttribDivisor", + "vertexAttribDivisorANGLE", + "vertexAttribI4i", + "vertexAttribI4iv", + "vertexAttribI4ui", + "vertexAttribI4uiv", + "vertexAttribIPointer", + "vertexAttribPointer", + "vertical", + "vertical-align", + "verticalAlign", + "verticalOverflow", + "vh", + "vibrate", + "vibrationActuator", + "videoBitsPerSecond", + "videoHeight", + "videoTracks", + "videoWidth", + "view", + "viewBox", + "viewBoxString", + "viewDimension", + "viewFormats", + "viewTarget", + "viewTargetString", + "viewport", + "viewportAnchorX", + "viewportAnchorY", + "viewportElement", + "views", + "violatedDirective", + "visibility", + "visibilityState", + "visible", + "visualViewport", + "vlinkColor", + "vmax", + "vmin", + "voice", + "voiceURI", + "volume", + "vrml", + "vspace", + "vw", + "w", + "wait", + "waitSync", + "waiting", + "wake", + "wakeLock", + "wand", + "warn", + "wasClean", + "wasDiscarded", + "watch", + "watchAvailability", + "watchPosition", + "webdriver", + "webkitAddKey", + "webkitAlignContent", + "webkitAlignItems", + "webkitAlignSelf", + "webkitAnimation", + "webkitAnimationDelay", + "webkitAnimationDirection", + "webkitAnimationDuration", + "webkitAnimationFillMode", + "webkitAnimationIterationCount", + "webkitAnimationName", + "webkitAnimationPlayState", + "webkitAnimationTimingFunction", + "webkitAppearance", + "webkitAudioContext", + "webkitAudioDecodedByteCount", + "webkitAudioPannerNode", + "webkitBackfaceVisibility", + "webkitBackground", + "webkitBackgroundAttachment", + "webkitBackgroundClip", + "webkitBackgroundColor", + "webkitBackgroundImage", + "webkitBackgroundOrigin", + "webkitBackgroundPosition", + "webkitBackgroundPositionX", + "webkitBackgroundPositionY", + "webkitBackgroundRepeat", + "webkitBackgroundSize", + "webkitBackingStorePixelRatio", + "webkitBorderBottomLeftRadius", + "webkitBorderBottomRightRadius", + "webkitBorderImage", + "webkitBorderImageOutset", + "webkitBorderImageRepeat", + "webkitBorderImageSlice", + "webkitBorderImageSource", + "webkitBorderImageWidth", + "webkitBorderRadius", + "webkitBorderTopLeftRadius", + "webkitBorderTopRightRadius", + "webkitBoxAlign", + "webkitBoxDirection", + "webkitBoxFlex", + "webkitBoxOrdinalGroup", + "webkitBoxOrient", + "webkitBoxPack", + "webkitBoxShadow", + "webkitBoxSizing", + "webkitCancelAnimationFrame", + "webkitCancelFullScreen", + "webkitCancelKeyRequest", + "webkitCancelRequestAnimationFrame", + "webkitClearResourceTimings", + "webkitClosedCaptionsVisible", + "webkitConvertPointFromNodeToPage", + "webkitConvertPointFromPageToNode", + "webkitCreateShadowRoot", + "webkitCurrentFullScreenElement", + "webkitCurrentPlaybackTargetIsWireless", + "webkitDecodedFrameCount", + "webkitDirectionInvertedFromDevice", + "webkitDisplayingFullscreen", + "webkitDroppedFrameCount", + "webkitEnterFullScreen", + "webkitEnterFullscreen", + "webkitEntries", + "webkitExitFullScreen", + "webkitExitFullscreen", + "webkitExitPointerLock", + "webkitFilter", + "webkitFlex", + "webkitFlexBasis", + "webkitFlexDirection", + "webkitFlexFlow", + "webkitFlexGrow", + "webkitFlexShrink", + "webkitFlexWrap", + "webkitFullScreenKeyboardInputAllowed", + "webkitFullscreenElement", + "webkitFullscreenEnabled", + "webkitGenerateKeyRequest", + "webkitGetAsEntry", + "webkitGetDatabaseNames", + "webkitGetEntries", + "webkitGetEntriesByName", + "webkitGetEntriesByType", + "webkitGetFlowByName", + "webkitGetGamepads", + "webkitGetImageDataHD", + "webkitGetNamedFlows", + "webkitGetRegionFlowRanges", + "webkitGetUserMedia", + "webkitHasClosedCaptions", + "webkitHidden", + "webkitIDBCursor", + "webkitIDBDatabase", + "webkitIDBDatabaseError", + "webkitIDBDatabaseException", + "webkitIDBFactory", + "webkitIDBIndex", + "webkitIDBKeyRange", + "webkitIDBObjectStore", + "webkitIDBRequest", + "webkitIDBTransaction", + "webkitImageSmoothingEnabled", + "webkitIndexedDB", + "webkitInitMessageEvent", + "webkitIsFullScreen", + "webkitJustifyContent", + "webkitKeys", + "webkitLineClamp", + "webkitLineDashOffset", + "webkitLockOrientation", + "webkitMask", + "webkitMaskClip", + "webkitMaskComposite", + "webkitMaskImage", + "webkitMaskOrigin", + "webkitMaskPosition", + "webkitMaskPositionX", + "webkitMaskPositionY", + "webkitMaskRepeat", + "webkitMaskSize", + "webkitMatchesSelector", + "webkitMediaStream", + "webkitNotifications", + "webkitOfflineAudioContext", + "webkitOrder", + "webkitOrientation", + "webkitPeerConnection00", + "webkitPersistentStorage", + "webkitPerspective", + "webkitPerspectiveOrigin", + "webkitPointerLockElement", + "webkitPostMessage", + "webkitPreservesPitch", + "webkitPutImageDataHD", + "webkitRTCPeerConnection", + "webkitRegionOverset", + "webkitRelativePath", + "webkitRequestAnimationFrame", + "webkitRequestFileSystem", + "webkitRequestFullScreen", + "webkitRequestFullscreen", + "webkitRequestPointerLock", + "webkitResolveLocalFileSystemURL", + "webkitSetMediaKeys", + "webkitSetResourceTimingBufferSize", + "webkitShadowRoot", + "webkitShowPlaybackTargetPicker", + "webkitSlice", + "webkitSpeechGrammar", + "webkitSpeechGrammarList", + "webkitSpeechRecognition", + "webkitSpeechRecognitionError", + "webkitSpeechRecognitionEvent", + "webkitStorageInfo", + "webkitSupportsFullscreen", + "webkitTemporaryStorage", + "webkitTextFillColor", + "webkitTextSizeAdjust", + "webkitTextStroke", + "webkitTextStrokeColor", + "webkitTextStrokeWidth", + "webkitTransform", + "webkitTransformOrigin", + "webkitTransformStyle", + "webkitTransition", + "webkitTransitionDelay", + "webkitTransitionDuration", + "webkitTransitionProperty", + "webkitTransitionTimingFunction", + "webkitURL", + "webkitUnlockOrientation", + "webkitUserSelect", + "webkitVideoDecodedByteCount", + "webkitVisibilityState", + "webkitWirelessVideoPlaybackDisabled", + "webkitdirectory", + "webkitdropzone", + "webstore", + "weight", + "wgslLanguageFeatures", + "whatToShow", + "wheelDelta", + "wheelDeltaX", + "wheelDeltaY", + "whenDefined", + "which", + "white-space", + "whiteSpace", + "wholeText", + "widows", + "width", + "will-change", + "willChange", + "willValidate", + "window", + "withCredentials", + "word-break", + "word-spacing", + "word-wrap", + "wordBreak", + "wordSpacing", + "wordWrap", + "workerStart", + "wow64", + "wrap", + "wrapKey", + "writable", + "writableAuxiliaries", + "write", + "writeBuffer", + "writeMask", + "writeText", + "writeTexture", + "writeTimestamp", + "writeValue", + "writeWithoutResponse", + "writeln", + "writing-mode", + "writingMode", + "x", + "x1", + "x2", + "xChannelSelector", + "xmlEncoding", + "xmlStandalone", + "xmlVersion", + "xmlbase", + "xmllang", + "xmlspace", + "xor", + "xr", + "y", + "y1", + "y2", + "yChannelSelector", + "yandex", + "z", + "z-index", + "zIndex", + "zoom", + "zoomAndPan", + "zoomRectScreen" + ]; + function find_builtins(reserved) { + domprops.forEach(add); + var new_globals = ["Symbol", "Map", "Promise", "Proxy", "Reflect", "Set", "WeakMap", "WeakSet"]; + var objects = {}; + var global_ref = typeof global === "object" ? global : self; + new_globals.forEach(function(new_global) { + objects[new_global] = global_ref[new_global] || function() { + }; + }); + [ + "null", + "true", + "false", + "NaN", + "Infinity", + "-Infinity", + "undefined" + ].forEach(add); + [ + Object, + Array, + Function, + Number, + String, + Boolean, + Error, + Math, + Date, + RegExp, + objects.Symbol, + ArrayBuffer, + DataView, + decodeURI, + decodeURIComponent, + encodeURI, + encodeURIComponent, + eval, + EvalError, + Float32Array, + Float64Array, + Int8Array, + Int16Array, + Int32Array, + isFinite, + isNaN, + JSON, + objects.Map, + parseFloat, + parseInt, + objects.Promise, + objects.Proxy, + RangeError, + ReferenceError, + objects.Reflect, + objects.Set, + SyntaxError, + TypeError, + Uint8Array, + Uint8ClampedArray, + Uint16Array, + Uint32Array, + URIError, + objects.WeakMap, + objects.WeakSet + ].forEach(function(ctor) { + Object.getOwnPropertyNames(ctor).map(add); + if (ctor.prototype) { + Object.getOwnPropertyNames(ctor.prototype).map(add); + } + }); + function add(name) { + reserved.add(name); + } + } + function reserve_quoted_keys(ast, reserved) { + function add(name) { + push_uniq(reserved, name); + } + ast.walk(new TreeWalker(function(node) { + if (node instanceof AST_ObjectKeyVal && node.quote) { + add(node.key); + } else if (node instanceof AST_ObjectProperty && node.quote) { + add(node.key.name); + } else if (node instanceof AST_Sub) { + addStrings(node.property, add); + } + })); + } + function addStrings(node, add) { + node.walk(new TreeWalker(function(node2) { + if (node2 instanceof AST_Sequence) { + addStrings(node2.tail_node(), add); + } else if (node2 instanceof AST_String) { + add(node2.value); + } else if (node2 instanceof AST_Conditional) { + addStrings(node2.consequent, add); + addStrings(node2.alternative, add); + } + return true; + })); + } + function mangle_private_properties(ast, options) { + var cprivate = -1; + var private_cache = /* @__PURE__ */ new Map(); + var nth_identifier = options.nth_identifier || base54; + ast = ast.transform(new TreeTransformer(function(node) { + if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_PrivateIn) { + node.key.name = mangle_private(node.key.name); + } else if (node instanceof AST_DotHash) { + node.property = mangle_private(node.property); + } + })); + return ast; + function mangle_private(name) { + let mangled = private_cache.get(name); + if (!mangled) { + mangled = nth_identifier.get(++cprivate); + private_cache.set(name, mangled); + } + return mangled; + } + } + function find_annotated_props(ast) { + var annotated_props = /* @__PURE__ */ new Set(); + walk(ast, (node) => { + if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash) + ; + else if (node instanceof AST_ObjectKeyVal) { + if (typeof node.key == "string" && has_annotation(node, _MANGLEPROP)) { + annotated_props.add(node.key); + } + } else if (node instanceof AST_ObjectProperty) { + if (has_annotation(node, _MANGLEPROP)) { + annotated_props.add(node.key.name); + } + } else if (node instanceof AST_Dot) { + if (has_annotation(node, _MANGLEPROP)) { + annotated_props.add(node.property); + } + } else if (node instanceof AST_Sub) { + if (node.property instanceof AST_String && has_annotation(node, _MANGLEPROP)) { + annotated_props.add(node.property.value); + } + } + }); + return annotated_props; + } + function mangle_properties(ast, options, annotated_props = find_annotated_props(ast)) { + options = defaults(options, { + builtins: false, + cache: null, + debug: false, + keep_quoted: false, + nth_identifier: base54, + only_cache: false, + regex: null, + reserved: null, + undeclared: false, + only_annotated: false + }, true); + var nth_identifier = options.nth_identifier; + var reserved_option = options.reserved; + if (!Array.isArray(reserved_option)) + reserved_option = [reserved_option]; + var reserved = new Set(reserved_option); + if (!options.builtins) + find_builtins(reserved); + var cname = -1; + var cache; + if (options.cache) { + cache = options.cache.props; + } else { + cache = /* @__PURE__ */ new Map(); + } + var only_annotated = options.only_annotated; + var regex = options.regex && new RegExp(options.regex); + var debug = options.debug !== false; + var debug_name_suffix; + if (debug) { + debug_name_suffix = options.debug === true ? "" : options.debug; + } + var names_to_mangle = /* @__PURE__ */ new Set(); + var unmangleable = /* @__PURE__ */ new Set(); + cache.forEach((mangled_name) => unmangleable.add(mangled_name)); + var keep_quoted = !!options.keep_quoted; + ast.walk(new TreeWalker(function(node) { + if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash) + ; + else if (node instanceof AST_ObjectKeyVal) { + if (typeof node.key == "string" && (!keep_quoted || !node.quote)) { + add(node.key); + } + } else if (node instanceof AST_ObjectProperty) { + if (!keep_quoted || !node.quote) { + add(node.key.name); + } + } else if (node instanceof AST_Dot) { + var declared = !!options.undeclared; + if (!declared) { + var root = node; + while (root.expression) { + root = root.expression; + } + declared = !(root.thedef && root.thedef.undeclared); + } + if (declared && (!keep_quoted || !node.quote)) { + add(node.property); + } + } else if (node instanceof AST_Sub) { + if (!keep_quoted) { + addStrings(node.property, add); + } + } else if (node instanceof AST_Call && node.expression.print_to_string() == "Object.defineProperty") { + addStrings(node.args[1], add); + } else if (node instanceof AST_Binary && node.operator === "in") { + addStrings(node.left, add); + } else if (node instanceof AST_String && has_annotation(node, _KEY)) { + add(node.value); + } + })); + return ast.transform(new TreeTransformer(function(node) { + if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash) + ; + else if (node instanceof AST_ObjectKeyVal) { + if (typeof node.key == "string" && (!keep_quoted || !node.quote)) { + node.key = mangle(node.key); + } + } else if (node instanceof AST_ObjectProperty) { + if (!keep_quoted || !node.quote) { + node.key.name = mangle(node.key.name); + } + } else if (node instanceof AST_Dot) { + if (!keep_quoted || !node.quote) { + node.property = mangle(node.property); + } + } else if (!keep_quoted && node instanceof AST_Sub) { + node.property = mangleStrings(node.property); + } else if (node instanceof AST_Call && node.expression.print_to_string() == "Object.defineProperty") { + node.args[1] = mangleStrings(node.args[1]); + } else if (node instanceof AST_Binary && node.operator === "in") { + node.left = mangleStrings(node.left); + } else if (node instanceof AST_String && has_annotation(node, _KEY)) { + clear_annotation(node, _KEY); + node.value = mangle(node.value); + } + })); + function can_mangle(name) { + if (unmangleable.has(name)) + return false; + if (reserved.has(name)) + return false; + if (options.only_cache) { + return cache.has(name); + } + if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) + return false; + return true; + } + function should_mangle(name) { + if (only_annotated && !annotated_props.has(name)) + return false; + if (regex && !regex.test(name)) { + return annotated_props.has(name); + } + if (reserved.has(name)) + return false; + return cache.has(name) || names_to_mangle.has(name); + } + function add(name) { + if (can_mangle(name)) { + names_to_mangle.add(name); + } + if (!should_mangle(name)) { + unmangleable.add(name); + } + } + function mangle(name) { + if (!should_mangle(name)) { + return name; + } + var mangled = cache.get(name); + if (!mangled) { + if (debug) { + var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_"; + if (can_mangle(debug_mangled)) { + mangled = debug_mangled; + } + } + if (!mangled) { + do { + mangled = nth_identifier.get(++cname); + } while (!can_mangle(mangled)); + } + cache.set(name, mangled); + } + return mangled; + } + function mangleStrings(node) { + return node.transform(new TreeTransformer(function(node2) { + if (node2 instanceof AST_Sequence) { + var last2 = node2.expressions.length - 1; + node2.expressions[last2] = mangleStrings(node2.expressions[last2]); + } else if (node2 instanceof AST_String) { + clear_annotation(node2, _KEY); + node2.value = mangle(node2.value); + } else if (node2 instanceof AST_Conditional) { + node2.consequent = mangleStrings(node2.consequent); + node2.alternative = mangleStrings(node2.alternative); + } + return node2; + })); + } + } + var to_ascii = typeof Buffer !== "undefined" ? (b64) => Buffer.from(b64, "base64").toString() : (b64) => decodeURIComponent(escape(atob(b64))); + var to_base64 = typeof Buffer !== "undefined" ? (str) => Buffer.from(str).toString("base64") : (str) => btoa(unescape(encodeURIComponent(str))); + function read_source_map(code) { + var match = /(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(code); + if (!match) { + console.warn("inline source map not found"); + return null; + } + return to_ascii(match[2]); + } + function set_shorthand(name, options, keys) { + if (options[name]) { + keys.forEach(function(key) { + if (options[key]) { + if (typeof options[key] != "object") + options[key] = {}; + if (!(name in options[key])) + options[key][name] = options[name]; + } + }); + } + } + function init_cache(cache) { + if (!cache) + return; + if (!("props" in cache)) { + cache.props = /* @__PURE__ */ new Map(); + } else if (!(cache.props instanceof Map)) { + cache.props = map_from_object(cache.props); + } + } + function cache_to_json(cache) { + return { + props: map_to_object(cache.props) + }; + } + function log_input(files, options, fs2, debug_folder) { + if (!(fs2 && fs2.writeFileSync && fs2.mkdirSync)) { + return; + } + try { + fs2.mkdirSync(debug_folder); + } catch (e) { + if (e.code !== "EEXIST") + throw e; + } + const log_path = `${debug_folder}/terser-debug-${Math.random() * 9999999 | 0}.log`; + options = options || {}; + const options_str = JSON.stringify(options, (_key, thing) => { + if (typeof thing === "function") + return "[Function " + thing.toString() + "]"; + if (thing instanceof RegExp) + return "[RegExp " + thing.toString() + "]"; + return thing; + }, 4); + const files_str = (file) => { + if (typeof file === "object" && options.parse && options.parse.spidermonkey) { + return JSON.stringify(file, null, 2); + } else if (typeof file === "object") { + return Object.keys(file).map((key) => key + ": " + files_str(file[key])).join("\n\n"); + } else if (typeof file === "string") { + return "```\n" + file + "\n```"; + } else { + return file; + } + }; + fs2.writeFileSync(log_path, "Options: \n" + options_str + "\n\nInput files:\n\n" + files_str(files) + "\n"); + } + function* minify_sync_or_async(files, options, _fs_module) { + if (_fs_module && typeof process === "object" && process.env && typeof process.env.TERSER_DEBUG_DIR === "string") { + log_input(files, options, _fs_module, process.env.TERSER_DEBUG_DIR); + } + options = defaults(options, { + compress: {}, + ecma: void 0, + enclose: false, + ie8: false, + keep_classnames: void 0, + keep_fnames: false, + mangle: {}, + module: false, + nameCache: null, + output: null, + format: null, + parse: {}, + rename: void 0, + safari10: false, + sourceMap: false, + spidermonkey: false, + timings: false, + toplevel: false, + warnings: false, + wrap: false + }, true); + var timings = options.timings && { + start: Date.now() + }; + if (options.keep_classnames === void 0) { + options.keep_classnames = options.keep_fnames; + } + if (options.rename === void 0) { + options.rename = options.compress && options.mangle; + } + if (options.output && options.format) { + throw new Error("Please only specify either output or format option, preferrably format."); + } + options.format = options.format || options.output || {}; + set_shorthand("ecma", options, ["parse", "compress", "format"]); + set_shorthand("ie8", options, ["compress", "mangle", "format"]); + set_shorthand("keep_classnames", options, ["compress", "mangle"]); + set_shorthand("keep_fnames", options, ["compress", "mangle"]); + set_shorthand("module", options, ["parse", "compress", "mangle"]); + set_shorthand("safari10", options, ["mangle", "format"]); + set_shorthand("toplevel", options, ["compress", "mangle"]); + set_shorthand("warnings", options, ["compress"]); + var quoted_props; + if (options.mangle) { + options.mangle = defaults(options.mangle, { + cache: options.nameCache && (options.nameCache.vars || {}), + eval: false, + ie8: false, + keep_classnames: false, + keep_fnames: false, + module: false, + nth_identifier: base54, + properties: false, + reserved: [], + safari10: false, + toplevel: false + }, true); + if (options.mangle.properties) { + if (typeof options.mangle.properties != "object") { + options.mangle.properties = {}; + } + if (options.mangle.properties.keep_quoted) { + quoted_props = options.mangle.properties.reserved; + if (!Array.isArray(quoted_props)) + quoted_props = []; + options.mangle.properties.reserved = quoted_props; + } + if (options.nameCache && !("cache" in options.mangle.properties)) { + options.mangle.properties.cache = options.nameCache.props || {}; + } + } + init_cache(options.mangle.cache); + init_cache(options.mangle.properties.cache); + } + if (options.sourceMap) { + options.sourceMap = defaults(options.sourceMap, { + asObject: false, + content: null, + filename: null, + includeSources: false, + root: null, + url: null + }, true); + } + if (timings) + timings.parse = Date.now(); + var toplevel; + if (files instanceof AST_Toplevel) { + toplevel = files; + } else { + if (typeof files == "string" || options.parse.spidermonkey && !Array.isArray(files)) { + files = [files]; + } + options.parse = options.parse || {}; + options.parse.toplevel = null; + if (options.parse.spidermonkey) { + options.parse.toplevel = AST_Node.from_mozilla_ast(Object.keys(files).reduce(function(toplevel2, name2) { + if (!toplevel2) + return files[name2]; + toplevel2.body = toplevel2.body.concat(files[name2].body); + return toplevel2; + }, null)); + } else { + delete options.parse.spidermonkey; + for (var name in files) + if (HOP(files, name)) { + options.parse.filename = name; + options.parse.toplevel = parse(files[name], options.parse); + if (options.sourceMap && options.sourceMap.content == "inline") { + if (Object.keys(files).length > 1) + throw new Error("inline source map only works with singular input"); + options.sourceMap.content = read_source_map(files[name]); + } + } + } + if (options.parse.toplevel === null) { + throw new Error("no source file given"); + } + toplevel = options.parse.toplevel; + } + if (quoted_props && options.mangle.properties.keep_quoted !== "strict") { + reserve_quoted_keys(toplevel, quoted_props); + } + var annotated_props; + if (options.mangle && options.mangle.properties) { + annotated_props = find_annotated_props(toplevel); + } + if (options.wrap) { + toplevel = toplevel.wrap_commonjs(options.wrap); + } + if (options.enclose) { + toplevel = toplevel.wrap_enclose(options.enclose); + } + if (timings) + timings.rename = Date.now(); + if (timings) + timings.compress = Date.now(); + if (options.compress) { + toplevel = new Compressor(options.compress, { + mangle_options: options.mangle + }).compress(toplevel); + } + if (timings) + timings.scope = Date.now(); + if (options.mangle) + toplevel.figure_out_scope(options.mangle); + if (timings) + timings.mangle = Date.now(); + if (options.mangle) { + toplevel.compute_char_frequency(options.mangle); + toplevel.mangle_names(options.mangle); + toplevel = mangle_private_properties(toplevel, options.mangle); + } + if (timings) + timings.properties = Date.now(); + if (options.mangle && options.mangle.properties) { + toplevel = mangle_properties(toplevel, options.mangle.properties, annotated_props); + } + if (timings) + timings.format = Date.now(); + var result = {}; + if (options.format.ast) { + result.ast = toplevel; + } + if (options.format.spidermonkey) { + result.ast = toplevel.to_mozilla_ast(); + } + let format_options; + if (!HOP(options.format, "code") || options.format.code) { + format_options = { ...options.format }; + if (!format_options.ast) { + format_options._destroy_ast = true; + walk(toplevel, (node) => { + if (node instanceof AST_Scope) { + node.variables = void 0; + node.enclosed = void 0; + node.parent_scope = void 0; + } + if (node.block_scope) { + node.block_scope.variables = void 0; + node.block_scope.enclosed = void 0; + node.parent_scope = void 0; + } + }); + } + if (options.sourceMap) { + if (options.sourceMap.includeSources && files instanceof AST_Toplevel) { + throw new Error("original source content unavailable"); + } + format_options.source_map = yield* SourceMap({ + file: options.sourceMap.filename, + orig: options.sourceMap.content, + root: options.sourceMap.root, + files: options.sourceMap.includeSources ? files : null + }); + } + delete format_options.ast; + delete format_options.code; + delete format_options.spidermonkey; + var stream = OutputStream(format_options); + toplevel.print(stream); + result.code = stream.get(); + if (options.sourceMap) { + Object.defineProperty(result, "map", { + configurable: true, + enumerable: true, + get() { + const map = format_options.source_map.getEncoded(); + return result.map = options.sourceMap.asObject ? map : JSON.stringify(map); + }, + set(value) { + Object.defineProperty(result, "map", { + value, + writable: true + }); + } + }); + result.decoded_map = format_options.source_map.getDecoded(); + if (options.sourceMap.url == "inline") { + var sourceMap2 = typeof result.map === "object" ? JSON.stringify(result.map) : result.map; + result.code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + to_base64(sourceMap2); + } else if (options.sourceMap.url) { + result.code += "\n//# sourceMappingURL=" + options.sourceMap.url; + } + } + } + if (options.nameCache && options.mangle) { + if (options.mangle.cache) + options.nameCache.vars = cache_to_json(options.mangle.cache); + if (options.mangle.properties && options.mangle.properties.cache) { + options.nameCache.props = cache_to_json(options.mangle.properties.cache); + } + } + if (format_options && format_options.source_map) { + format_options.source_map.destroy(); + } + if (timings) { + timings.end = Date.now(); + result.timings = { + parse: 1e-3 * (timings.rename - timings.parse), + rename: 1e-3 * (timings.compress - timings.rename), + compress: 1e-3 * (timings.scope - timings.compress), + scope: 1e-3 * (timings.mangle - timings.scope), + mangle: 1e-3 * (timings.properties - timings.mangle), + properties: 1e-3 * (timings.format - timings.properties), + format: 1e-3 * (timings.end - timings.format), + total: 1e-3 * (timings.end - timings.start) + }; + } + return result; + } + async function minify2(files, options, _fs_module) { + const gen = minify_sync_or_async(files, options, _fs_module); + let yielded; + let val; + do { + val = gen.next(await yielded); + yielded = val.value; + } while (!val.done); + return val.value; + } + function minify_sync(files, options, _fs_module) { + const gen = minify_sync_or_async(files, options, _fs_module); + let yielded; + let val; + do { + if (yielded && typeof yielded.then === "function") { + throw new Error("minify_sync cannot be used with the legacy source-map module"); + } + val = gen.next(yielded); + yielded = val.value; + } while (!val.done); + return val.value; + } + async function run_cli({ program, packageJson, fs: fs2, path }) { + const skip_keys = /* @__PURE__ */ new Set(["cname", "parent_scope", "scope", "uses_eval", "uses_with"]); + var files = {}; + var options = { + compress: false, + mangle: false + }; + const default_options = await _default_options(); + program.version(packageJson.name + " " + packageJson.version); + program.parseArgv = program.parse; + program.parse = void 0; + if (process.argv.includes("ast")) + program.helpInformation = describe_ast; + else if (process.argv.includes("options")) + program.helpInformation = function() { + var text = []; + for (var option in default_options) { + text.push("--" + (option === "sourceMap" ? "source-map" : option) + " options:"); + text.push(format_object(default_options[option])); + text.push(""); + } + return text.join("\n"); + }; + program.option("-p, --parse ", "Specify parser options.", parse_js()); + program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js()); + program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js()); + program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js()); + program.option("-f, --format [options]", "Format options.", parse_js()); + program.option("-b, --beautify [options]", "Alias for --format.", parse_js()); + program.option("-o, --output ", "Output file (default STDOUT)."); + program.option("--comments [filter]", "Preserve copyright comments in the output."); + program.option("--config-file ", "Read minify() options from JSON file."); + program.option("-d, --define [=value]", "Global definitions.", parse_js("define")); + program.option("--ecma ", "Specify ECMAScript release: 5, 2015, 2016 or 2017..."); + program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values."); + program.option("--ie8", "Support non-standard Internet Explorer 8."); + program.option("--keep-classnames", "Do not mangle/drop class names."); + program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name."); + program.option("--module", "Input is an ES6 module"); + program.option("--name-cache ", "File to hold mangled name mappings."); + program.option("--rename", "Force symbol expansion."); + program.option("--no-rename", "Disable symbol expansion."); + program.option("--safari10", "Support non-standard Safari 10."); + program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js()); + program.option("--timings", "Display operations run time on STDERR."); + program.option("--toplevel", "Compress and/or mangle variables in toplevel scope."); + program.option("--wrap ", "Embed everything as a function with \u201Cexports\u201D corresponding to \u201Cname\u201D globally."); + program.arguments("[files...]").parseArgv(process.argv); + if (program.configFile) { + options = JSON.parse(read_file(program.configFile)); + } + if (!program.output && program.sourceMap && program.sourceMap.url != "inline") { + fatal("ERROR: cannot write source map to STDOUT"); + } + [ + "compress", + "enclose", + "ie8", + "mangle", + "module", + "safari10", + "sourceMap", + "toplevel", + "wrap" + ].forEach(function(name) { + if (name in program) { + options[name] = program[name]; + } + }); + if ("ecma" in program) { + if (program.ecma != (program.ecma | 0)) + fatal("ERROR: ecma must be an integer"); + const ecma = program.ecma | 0; + if (ecma > 5 && ecma < 2015) + options.ecma = ecma + 2009; + else + options.ecma = ecma; + } + if (program.format || program.beautify) { + const chosenOption = program.format || program.beautify; + options.format = typeof chosenOption === "object" ? chosenOption : {}; + } + if (program.comments) { + if (typeof options.format != "object") + options.format = {}; + options.format.comments = typeof program.comments == "string" ? program.comments == "false" ? false : program.comments : "some"; + } + if (program.define) { + if (typeof options.compress != "object") + options.compress = {}; + if (typeof options.compress.global_defs != "object") + options.compress.global_defs = {}; + for (var expr in program.define) { + options.compress.global_defs[expr] = program.define[expr]; + } + } + if (program.keepClassnames) { + options.keep_classnames = true; + } + if (program.keepFnames) { + options.keep_fnames = true; + } + if (program.mangleProps) { + if (program.mangleProps.domprops) { + delete program.mangleProps.domprops; + } else { + if (typeof program.mangleProps != "object") + program.mangleProps = {}; + if (!Array.isArray(program.mangleProps.reserved)) + program.mangleProps.reserved = []; + } + if (typeof options.mangle != "object") + options.mangle = {}; + options.mangle.properties = program.mangleProps; + } + if (program.nameCache) { + options.nameCache = JSON.parse(read_file(program.nameCache, "{}")); + } + if (program.output == "ast") { + options.format = { + ast: true, + code: false + }; + } + if (program.parse) { + if (!program.parse.acorn && !program.parse.spidermonkey) { + options.parse = program.parse; + } else if (program.sourceMap && program.sourceMap.content == "inline") { + fatal("ERROR: inline source map only works with built-in parser"); + } + } + if (~program.rawArgs.indexOf("--rename")) { + options.rename = true; + } else if (!program.rename) { + options.rename = false; + } + let convert_path = (name) => name; + if (typeof program.sourceMap == "object" && "base" in program.sourceMap) { + convert_path = function() { + var base = program.sourceMap.base; + delete options.sourceMap.base; + return function(name) { + return path.relative(base, name); + }; + }(); + } + let filesList; + if (options.files && options.files.length) { + filesList = options.files; + delete options.files; + } else if (program.args.length) { + filesList = program.args; + } + if (filesList) { + simple_glob(filesList).forEach(function(name) { + files[convert_path(name)] = read_file(name); + }); + } else { + await new Promise((resolve) => { + var chunks = []; + process.stdin.setEncoding("utf8"); + process.stdin.on("data", function(chunk) { + chunks.push(chunk); + }).on("end", function() { + files = [chunks.join("")]; + resolve(); + }); + process.stdin.resume(); + }); + } + await run_cli2(); + function convert_ast(fn) { + return AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null)); + } + async function run_cli2() { + var content = program.sourceMap && program.sourceMap.content; + if (content && content !== "inline") { + options.sourceMap.content = read_file(content, content); + } + if (program.timings) + options.timings = true; + try { + if (program.parse) { + if (program.parse.acorn) { + files = convert_ast(function(toplevel, name) { + return require_acorn().parse(files[name], { + ecmaVersion: 2018, + locations: true, + program: toplevel, + sourceFile: name, + sourceType: options.module || program.parse.module ? "module" : "script" + }); + }); + } else if (program.parse.spidermonkey) { + files = convert_ast(function(toplevel, name) { + var obj = JSON.parse(files[name]); + if (!toplevel) + return obj; + toplevel.body = toplevel.body.concat(obj.body); + return toplevel; + }); + } + } + } catch (ex) { + fatal(ex); + } + let result; + try { + result = await minify2(files, options, fs2); + } catch (ex) { + if (ex.name == "SyntaxError") { + print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col); + var col = ex.col; + var lines = files[ex.filename].split(/\r?\n/); + var line = lines[ex.line - 1]; + if (!line && !col) { + line = lines[ex.line - 2]; + col = line.length; + } + if (line) { + var limit = 70; + if (col > limit) { + line = line.slice(col - limit); + col = limit; + } + print_error(line.slice(0, 80)); + print_error(line.slice(0, col).replace(/\S/g, " ") + "^"); + } + } + if (ex.defs) { + print_error("Supported options:"); + print_error(format_object(ex.defs)); + } + fatal(ex); + return; + } + if (program.output == "ast") { + if (!options.compress && !options.mangle) { + result.ast.figure_out_scope({}); + } + console.log(JSON.stringify(result.ast, function(key, value) { + if (value) + switch (key) { + case "thedef": + return symdef(value); + case "enclosed": + return value.length ? value.map(symdef) : void 0; + case "variables": + case "globals": + return value.size ? collect_from_map(value, symdef) : void 0; + } + if (skip_keys.has(key)) + return; + if (value instanceof AST_Token) + return; + if (value instanceof Map) + return; + if (value instanceof AST_Node) { + var result2 = { + _class: "AST_" + value.TYPE + }; + if (value.block_scope) { + result2.variables = value.block_scope.variables; + result2.enclosed = value.block_scope.enclosed; + } + value.CTOR.PROPS.forEach(function(prop) { + if (prop !== "block_scope") { + result2[prop] = value[prop]; + } + }); + return result2; + } + return value; + }, 2)); + } else if (program.output == "spidermonkey") { + try { + const minified = await minify2(result.code, { + compress: false, + mangle: false, + format: { + ast: true, + code: false + } + }, fs2); + console.log(JSON.stringify(minified.ast.to_mozilla_ast(), null, 2)); + } catch (ex) { + fatal(ex); + return; + } + } else if (program.output) { + fs2.writeFileSync(program.output, result.code); + if (options.sourceMap && options.sourceMap.url !== "inline" && result.map) { + fs2.writeFileSync(program.output + ".map", result.map); + } + } else { + console.log(result.code); + } + if (program.nameCache) { + fs2.writeFileSync(program.nameCache, JSON.stringify(options.nameCache)); + } + if (result.timings) + for (var phase in result.timings) { + print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s"); + } + } + function fatal(message) { + if (message instanceof Error) + message = message.stack.replace(/^\S*?Error:/, "ERROR:"); + print_error(message); + process.exit(1); + } + function simple_glob(glob) { + if (Array.isArray(glob)) { + return [].concat.apply([], glob.map(simple_glob)); + } + if (glob && glob.match(/[*?]/)) { + var dir = path.dirname(glob); + try { + var entries = fs2.readdirSync(dir); + } catch (ex) { + } + if (entries) { + var pattern = "^" + path.basename(glob).replace(/[.+^$[\]\\(){}]/g, "\\$&").replace(/\*/g, "[^/\\\\]*").replace(/\?/g, "[^/\\\\]") + "$"; + var mod = process.platform === "win32" ? "i" : ""; + var rx = new RegExp(pattern, mod); + var results = entries.filter(function(name) { + return rx.test(name); + }).map(function(name) { + return path.join(dir, name); + }); + if (results.length) + return results; + } + } + return [glob]; + } + function read_file(path2, default_value) { + try { + return fs2.readFileSync(path2, "utf8"); + } catch (ex) { + if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null) + return default_value; + fatal(ex); + } + } + function parse_js(flag) { + return function(value, options2) { + options2 = options2 || {}; + try { + walk(parse(value, { expression: true }), (node) => { + if (node instanceof AST_Assign) { + var name = node.left.print_to_string(); + var value2 = node.right; + if (flag) { + options2[name] = value2; + } else if (value2 instanceof AST_Array) { + options2[name] = value2.elements.map(to_string); + } else if (value2 instanceof AST_RegExp) { + value2 = value2.value; + options2[name] = new RegExp(value2.source, value2.flags); + } else { + options2[name] = to_string(value2); + } + return true; + } + if (node instanceof AST_Symbol || node instanceof AST_PropAccess) { + var name = node.print_to_string(); + options2[name] = true; + return true; + } + if (!(node instanceof AST_Sequence)) + throw node; + function to_string(value3) { + return value3 instanceof AST_Constant ? value3.getValue() : value3.print_to_string({ + quote_keys: true + }); + } + }); + } catch (ex) { + if (flag) { + fatal("Error parsing arguments for '" + flag + "': " + value); + } else { + options2[value] = null; + } + } + return options2; + }; + } + function symdef(def) { + var ret = 1e6 + def.id + " " + def.name; + if (def.mangled_name) + ret += " " + def.mangled_name; + return ret; + } + function collect_from_map(map, callback) { + var result = []; + map.forEach(function(def) { + result.push(callback(def)); + }); + return result; + } + function format_object(obj) { + var lines = []; + var padding = ""; + Object.keys(obj).map(function(name) { + if (padding.length < name.length) + padding = Array(name.length + 1).join(" "); + return [name, JSON.stringify(obj[name])]; + }).forEach(function(tokens) { + lines.push(" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]); + }); + return lines.join("\n"); + } + function print_error(msg) { + process.stderr.write(msg); + process.stderr.write("\n"); + } + function describe_ast() { + var out = OutputStream({ beautify: true }); + function doitem(ctor) { + out.print("AST_" + ctor.TYPE); + const props = ctor.SELF_PROPS.filter((prop) => !/^\$/.test(prop)); + if (props.length > 0) { + out.space(); + out.with_parens(function() { + props.forEach(function(prop, i) { + if (i) + out.space(); + out.print(prop); + }); + }); + } + if (ctor.documentation) { + out.space(); + out.print_string(ctor.documentation); + } + if (ctor.SUBCLASSES.length > 0) { + out.space(); + out.with_block(function() { + ctor.SUBCLASSES.forEach(function(ctor2) { + out.indent(); + doitem(ctor2); + out.newline(); + }); + }); + } + } + doitem(AST_Node); + return out + "\n"; + } + } + async function _default_options() { + const defs = {}; + Object.keys(infer_options({ 0: 0 })).forEach((component) => { + const options = infer_options({ + [component]: { 0: 0 } + }); + if (options) + defs[component] = options; + }); + return defs; + } + async function infer_options(options) { + try { + await minify2("", options); + } catch (error) { + return error.defs; + } + } + exports2._default_options = _default_options; + exports2._run_cli = run_cli; + exports2.minify = minify2; + exports2.minify_sync = minify_sync; + }); + } +}); + +// node_modules/html-minifier-terser/dist/htmlminifier.cjs +var require_htmlminifier = __commonJS({ + "node_modules/html-minifier-terser/dist/htmlminifier.cjs"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var CleanCSS = require_clean_css(); + var entities = require_lib(); + var RelateURL = require_lib2(); + var terser = require_bundle_min(); + async function replaceAsync(str, regex, asyncFn) { + const promises = []; + str.replace(regex, (match, ...args) => { + const promise = asyncFn(match, ...args); + promises.push(promise); + }); + const data = await Promise.all(promises); + return str.replace(regex, () => data.shift()); + } + var CaseInsensitiveSet = class extends Set { + has(str) { + return super.has(str.toLowerCase()); + } + }; + var singleAttrIdentifier = /([^\s"'<>/=]+)/; + var singleAttrAssigns = [/=/]; + var singleAttrValues = [ + /"([^"]*)"+/.source, + /'([^']*)'+/.source, + /([^ \t\n\f\r"'`=<>]+)/.source + ]; + var qnameCapture = function() { + const combiningChar = "\\u0300-\\u0345\\u0360\\u0361\\u0483-\\u0486\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u064B-\\u0652\\u0670\\u06D6-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A02\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A70\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B82\\u0B83\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C82\\u0C83\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F95\\u0F97\\u0F99-\\u0FAD\\u0FB1-\\u0FB7\\u0FB9\\u20D0-\\u20DC\\u20E1\\u302A-\\u302F\\u3099\\u309A"; + const digit = "0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE7-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29"; + const extender = "\\xB7\\u02D0\\u02D1\\u0387\\u0640\\u0E46\\u0EC6\\u3005\\u3031-\\u3035\\u309D\\u309E\\u30FC-\\u30FE"; + const letter = "A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u0180-\\u01C3\\u01CD-\\u01F0\\u01F4\\u01F5\\u01FA-\\u0217\\u0250-\\u02A8\\u02BB-\\u02C1\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03D6\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2-\\u03F3\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E-\\u0481\\u0490-\\u04C4\\u04C7\\u04C8\\u04CB\\u04CC\\u04D0-\\u04EB\\u04EE-\\u04F5\\u04F8\\u04F9\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0641-\\u064A\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D3\\u06D5\\u06E5\\u06E6\\u0905-\\u0939\\u093D\\u0958-\\u0961\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8B\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AE0\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B36-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB5\\u0BB7-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D60\\u0D61\\u0E01-\\u0E2E\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EAE\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0F40-\\u0F47\\u0F49-\\u0F69\\u10A0-\\u10C5\\u10D0-\\u10F6\\u1100\\u1102\\u1103\\u1105-\\u1107\\u1109\\u110B\\u110C\\u110E-\\u1112\\u113C\\u113E\\u1140\\u114C\\u114E\\u1150\\u1154\\u1155\\u1159\\u115F-\\u1161\\u1163\\u1165\\u1167\\u1169\\u116D\\u116E\\u1172\\u1173\\u1175\\u119E\\u11A8\\u11AB\\u11AE\\u11AF\\u11B7\\u11B8\\u11BA\\u11BC-\\u11C2\\u11EB\\u11F0\\u11F9\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A\\u212B\\u212E\\u2180-\\u2182\\u3007\\u3021-\\u3029\\u3041-\\u3094\\u30A1-\\u30FA\\u3105-\\u312C\\u4E00-\\u9FA5\\uAC00-\\uD7A3"; + const ncname = "[" + letter + "_][" + letter + digit + "\\.\\-_" + combiningChar + extender + "]*"; + return "((?:" + ncname + "\\:)?" + ncname + ")"; + }(); + var startTagOpen = new RegExp("^<" + qnameCapture); + var startTagClose = /^\s*(\/?)>/; + var endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>"); + var doctype = /^]+>/i; + var IS_REGEX_CAPTURING_BROKEN = false; + "x".replace(/x(.)?/g, function(m, g) { + IS_REGEX_CAPTURING_BROKEN = g === ""; + }); + var empty = new CaseInsensitiveSet(["area", "base", "basefont", "br", "col", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]); + var inline = new CaseInsensitiveSet(["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br", "button", "cite", "code", "del", "dfn", "em", "font", "i", "iframe", "img", "input", "ins", "kbd", "label", "map", "noscript", "object", "q", "s", "samp", "script", "select", "small", "span", "strike", "strong", "sub", "sup", "svg", "textarea", "tt", "u", "var"]); + var closeSelf = new CaseInsensitiveSet(["colgroup", "dd", "dt", "li", "option", "p", "td", "tfoot", "th", "thead", "tr", "source"]); + var fillAttrs = new CaseInsensitiveSet(["checked", "compact", "declare", "defer", "disabled", "ismap", "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly", "selected"]); + var special = new CaseInsensitiveSet(["script", "style"]); + var nonPhrasing = new CaseInsensitiveSet(["address", "article", "aside", "base", "blockquote", "body", "caption", "col", "colgroup", "dd", "details", "dialog", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "legend", "li", "menuitem", "meta", "ol", "optgroup", "option", "param", "rp", "rt", "source", "style", "summary", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul"]); + var reCache = {}; + function attrForHandler(handler) { + let pattern = singleAttrIdentifier.source + "(?:\\s*(" + joinSingleAttrAssigns(handler) + ")[ \\t\\n\\f\\r]*(?:" + singleAttrValues.join("|") + "))?"; + if (handler.customAttrSurround) { + const attrClauses = []; + for (let i = handler.customAttrSurround.length - 1; i >= 0; i--) { + attrClauses[i] = "(?:(" + handler.customAttrSurround[i][0].source + ")\\s*" + pattern + "\\s*(" + handler.customAttrSurround[i][1].source + "))"; + } + attrClauses.push("(?:" + pattern + ")"); + pattern = "(?:" + attrClauses.join("|") + ")"; + } + return new RegExp("^\\s*" + pattern); + } + function joinSingleAttrAssigns(handler) { + return singleAttrAssigns.concat(handler.customAttrAssign || []).map(function(assign) { + return "(?:" + assign.source + ")"; + }).join("|"); + } + var HTMLParser = class { + constructor(html, handler) { + this.html = html; + this.handler = handler; + } + async parse() { + let html = this.html; + const handler = this.handler; + const stack = []; + let lastTag; + const attribute = attrForHandler(handler); + let last2, prevTag, nextTag; + while (html) { + last2 = html; + if (!lastTag || !special.has(lastTag)) { + let textEnd = html.indexOf("<"); + if (textEnd === 0) { + if (/^"); + if (commentEnd >= 0) { + if (handler.comment) { + await handler.comment(html.substring(4, commentEnd)); + } + html = html.substring(commentEnd + 3); + prevTag = ""; + continue; + } + } + if (/^"); + if (conditionalEnd >= 0) { + if (handler.comment) { + await handler.comment(html.substring(2, conditionalEnd + 1), true); + } + html = html.substring(conditionalEnd + 2); + prevTag = ""; + continue; + } + } + const doctypeMatch = html.match(doctype); + if (doctypeMatch) { + if (handler.doctype) { + handler.doctype(doctypeMatch[0]); + } + html = html.substring(doctypeMatch[0].length); + prevTag = ""; + continue; + } + const endTagMatch = html.match(endTag); + if (endTagMatch) { + html = html.substring(endTagMatch[0].length); + await replaceAsync(endTagMatch[0], endTag, parseEndTag); + prevTag = "/" + endTagMatch[1].toLowerCase(); + continue; + } + const startTagMatch = parseStartTag(html); + if (startTagMatch) { + html = startTagMatch.rest; + await handleStartTag(startTagMatch); + prevTag = startTagMatch.tagName.toLowerCase(); + continue; + } + if (handler.continueOnParseError) { + textEnd = html.indexOf("<", 1); + } + } + let text; + if (textEnd >= 0) { + text = html.substring(0, textEnd); + html = html.substring(textEnd); + } else { + text = html; + html = ""; + } + let nextTagMatch = parseStartTag(html); + if (nextTagMatch) { + nextTag = nextTagMatch.tagName; + } else { + nextTagMatch = html.match(endTag); + if (nextTagMatch) { + nextTag = "/" + nextTagMatch[1]; + } else { + nextTag = ""; + } + } + if (handler.chars) { + await handler.chars(text, prevTag, nextTag); + } + prevTag = ""; + } else { + const stackedTag = lastTag.toLowerCase(); + const reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp("([\\s\\S]*?)]*>", "i")); + html = await replaceAsync(html, reStackedTag, async (_, text) => { + if (stackedTag !== "script" && stackedTag !== "style" && stackedTag !== "noscript") { + text = text.replace(//g, "$1").replace(//g, "$1"); + } + if (handler.chars) { + await handler.chars(text); + } + return ""; + }); + await parseEndTag("", stackedTag); + } + if (html === last2) { + throw new Error("Parse Error: " + html); + } + } + if (!handler.partialMarkup) { + await parseEndTag(); + } + function parseStartTag(input) { + const start = input.match(startTagOpen); + if (start) { + const match = { + tagName: start[1], + attrs: [] + }; + input = input.slice(start[0].length); + let end, attr; + while (!(end = input.match(startTagClose)) && (attr = input.match(attribute))) { + input = input.slice(attr[0].length); + match.attrs.push(attr); + } + if (end) { + match.unarySlash = end[1]; + match.rest = input.slice(end[0].length); + return match; + } + } + } + async function closeIfFound(tagName) { + if (findTag(tagName) >= 0) { + await parseEndTag("", tagName); + return true; + } + } + async function handleStartTag(match) { + const tagName = match.tagName; + let unarySlash = match.unarySlash; + if (handler.html5) { + if (lastTag === "p" && nonPhrasing.has(tagName)) { + await parseEndTag("", lastTag); + } else if (tagName === "tbody") { + await closeIfFound("thead"); + } else if (tagName === "tfoot") { + if (!await closeIfFound("tbody")) { + await closeIfFound("thead"); + } + } + if (tagName === "col" && findTag("colgroup") < 0) { + lastTag = "colgroup"; + stack.push({ tag: lastTag, attrs: [] }); + if (handler.start) { + await handler.start(lastTag, [], false, ""); + } + } + } + if (!handler.html5 && !inline.has(tagName)) { + while (lastTag && inline.has(lastTag)) { + await parseEndTag("", lastTag); + } + } + if (closeSelf.has(tagName) && lastTag === tagName) { + await parseEndTag("", tagName); + } + const unary = empty.has(tagName) || tagName === "html" && lastTag === "head" || !!unarySlash; + const attrs = match.attrs.map(function(args) { + let name, value, customOpen, customClose, customAssign, quote; + const ncp = 7; + if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) { + if (args[3] === "") { + delete args[3]; + } + if (args[4] === "") { + delete args[4]; + } + if (args[5] === "") { + delete args[5]; + } + } + function populate(index) { + customAssign = args[index]; + value = args[index + 1]; + if (typeof value !== "undefined") { + return '"'; + } + value = args[index + 2]; + if (typeof value !== "undefined") { + return "'"; + } + value = args[index + 3]; + if (typeof value === "undefined" && fillAttrs.has(name)) { + value = name; + } + return ""; + } + let j = 1; + if (handler.customAttrSurround) { + for (let i = 0, l = handler.customAttrSurround.length; i < l; i++, j += ncp) { + name = args[j + 1]; + if (name) { + quote = populate(j + 2); + customOpen = args[j]; + customClose = args[j + 6]; + break; + } + } + } + if (!name && (name = args[j])) { + quote = populate(j + 1); + } + return { + name, + value, + customAssign: customAssign || "=", + customOpen: customOpen || "", + customClose: customClose || "", + quote: quote || "" + }; + }); + if (!unary) { + stack.push({ tag: tagName, attrs }); + lastTag = tagName; + unarySlash = ""; + } + if (handler.start) { + await handler.start(tagName, attrs, unary, unarySlash); + } + } + function findTag(tagName) { + let pos; + const needle = tagName.toLowerCase(); + for (pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos].tag.toLowerCase() === needle) { + break; + } + } + return pos; + } + async function parseEndTag(tag, tagName) { + let pos; + if (tagName) { + pos = findTag(tagName); + } else { + pos = 0; + } + if (pos >= 0) { + for (let i = stack.length - 1; i >= pos; i--) { + if (handler.end) { + handler.end(stack[i].tag, stack[i].attrs, i > pos || !tag); + } + } + stack.length = pos; + lastTag = pos && stack[pos - 1].tag; + } else if (tagName.toLowerCase() === "br") { + if (handler.start) { + await handler.start(tagName, [], true, ""); + } + } else if (tagName.toLowerCase() === "p") { + if (handler.start) { + await handler.start(tagName, [], false, "", true); + } + if (handler.end) { + handler.end(tagName, []); + } + } + } + } + }; + var Sorter = class { + sort(tokens, fromIndex = 0) { + for (let i = 0, len = this.keys.length; i < len; i++) { + const key = this.keys[i]; + const token = key.slice(1); + let index = tokens.indexOf(token, fromIndex); + if (index !== -1) { + do { + if (index !== fromIndex) { + tokens.splice(index, 1); + tokens.splice(fromIndex, 0, token); + } + fromIndex++; + } while ((index = tokens.indexOf(token, fromIndex)) !== -1); + return this[key].sort(tokens, fromIndex); + } + } + return tokens; + } + }; + var TokenChain = class { + add(tokens) { + tokens.forEach((token) => { + const key = "$" + token; + if (!this[key]) { + this[key] = []; + this[key].processed = 0; + } + this[key].push(tokens); + }); + } + createSorter() { + const sorter = new Sorter(); + sorter.keys = Object.keys(this).sort((j, k) => { + const m = this[j].length; + const n = this[k].length; + return m < n ? 1 : m > n ? -1 : j < k ? -1 : j > k ? 1 : 0; + }).filter((key) => { + if (this[key].processed < this[key].length) { + const token = key.slice(1); + const chain = new TokenChain(); + this[key].forEach((tokens) => { + let index; + while ((index = tokens.indexOf(token)) !== -1) { + tokens.splice(index, 1); + } + tokens.forEach((token2) => { + this["$" + token2].processed++; + }); + chain.add(tokens.slice(0)); + }); + sorter[key] = chain.createSorter(); + return true; + } + return false; + }); + return sorter; + } + }; + function trimWhitespace(str) { + return str && str.replace(/^[ \n\r\t\f]+/, "").replace(/[ \n\r\t\f]+$/, ""); + } + function collapseWhitespaceAll(str) { + return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) { + return spaces === " " ? " " : spaces.replace(/(^|\xA0+)[^\xA0]+/g, "$1 "); + }); + } + function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) { + let lineBreakBefore = ""; + let lineBreakAfter = ""; + if (options.preserveLineBreaks) { + str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() { + lineBreakBefore = "\n"; + return ""; + }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() { + lineBreakAfter = "\n"; + return ""; + }); + } + if (trimLeft) { + str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) { + const conservative = !lineBreakBefore && options.conservativeCollapse; + if (conservative && spaces === " ") { + return " "; + } + return spaces.replace(/^[^\xA0]+/, "").replace(/(\xA0+)[^\xA0]+/g, "$1 ") || (conservative ? " " : ""); + }); + } + if (trimRight) { + str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) { + const conservative = !lineBreakAfter && options.conservativeCollapse; + if (conservative && spaces === " ") { + return " "; + } + return spaces.replace(/[^\xA0]+(\xA0+)/g, " $1").replace(/[^\xA0]+$/, "") || (conservative ? " " : ""); + }); + } + if (collapseAll) { + str = collapseWhitespaceAll(str); + } + return lineBreakBefore + str + lineBreakAfter; + } + var inlineTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "b", "bdi", "bdo", "big", "button", "cite", "code", "del", "dfn", "em", "font", "i", "ins", "kbd", "label", "mark", "math", "nobr", "object", "q", "rp", "rt", "rtc", "ruby", "s", "samp", "select", "small", "span", "strike", "strong", "sub", "sup", "svg", "textarea", "time", "tt", "u", "var"]); + var inlineTextTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "b", "big", "del", "em", "font", "i", "ins", "kbd", "mark", "nobr", "rp", "s", "samp", "small", "span", "strike", "strong", "sub", "sup", "time", "tt", "u", "var"]); + var selfClosingInlineTags = /* @__PURE__ */ new Set(["comment", "img", "input", "wbr"]); + function collapseWhitespaceSmart(str, prevTag, nextTag, options) { + let trimLeft = prevTag && !selfClosingInlineTags.has(prevTag); + if (trimLeft && !options.collapseInlineTagWhitespace) { + trimLeft = prevTag.charAt(0) === "/" ? !inlineTags.has(prevTag.slice(1)) : !inlineTextTags.has(prevTag); + } + let trimRight = nextTag && !selfClosingInlineTags.has(nextTag); + if (trimRight && !options.collapseInlineTagWhitespace) { + trimRight = nextTag.charAt(0) === "/" ? !inlineTextTags.has(nextTag.slice(1)) : !inlineTags.has(nextTag); + } + return collapseWhitespace(str, options, trimLeft, trimRight, prevTag && nextTag); + } + function isConditionalComment(text) { + return /^\[if\s[^\]]+]|\[endif]$/.test(text); + } + function isIgnoredComment(text, options) { + for (let i = 0, len = options.ignoreCustomComments.length; i < len; i++) { + if (options.ignoreCustomComments[i].test(text)) { + return true; + } + } + return false; + } + function isEventAttribute(attrName, options) { + const patterns = options.customEventAttributes; + if (patterns) { + for (let i = patterns.length; i--; ) { + if (patterns[i].test(attrName)) { + return true; + } + } + return false; + } + return /^on[a-z]{3,}$/.test(attrName); + } + function canRemoveAttributeQuotes(value) { + return /^[^ \t\n\f\r"'`=<>]+$/.test(value); + } + function attributesInclude(attributes, attribute) { + for (let i = attributes.length; i--; ) { + if (attributes[i].name.toLowerCase() === attribute) { + return true; + } + } + return false; + } + function isAttributeRedundant(tag, attrName, attrValue, attrs) { + attrValue = attrValue ? trimWhitespace(attrValue.toLowerCase()) : ""; + return tag === "script" && attrName === "language" && attrValue === "javascript" || tag === "form" && attrName === "method" && attrValue === "get" || tag === "input" && attrName === "type" && attrValue === "text" || tag === "script" && attrName === "charset" && !attributesInclude(attrs, "src") || tag === "a" && attrName === "name" && attributesInclude(attrs, "id") || tag === "area" && attrName === "shape" && attrValue === "rect"; + } + var executableScriptsMimetypes = /* @__PURE__ */ new Set([ + "text/javascript", + "text/ecmascript", + "text/jscript", + "application/javascript", + "application/x-javascript", + "application/ecmascript", + "module" + ]); + var keepScriptsMimetypes = /* @__PURE__ */ new Set([ + "module" + ]); + function isScriptTypeAttribute(attrValue = "") { + attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase(); + return attrValue === "" || executableScriptsMimetypes.has(attrValue); + } + function keepScriptTypeAttribute(attrValue = "") { + attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase(); + return keepScriptsMimetypes.has(attrValue); + } + function isExecutableScript(tag, attrs) { + if (tag !== "script") { + return false; + } + for (let i = 0, len = attrs.length; i < len; i++) { + const attrName = attrs[i].name.toLowerCase(); + if (attrName === "type") { + return isScriptTypeAttribute(attrs[i].value); + } + } + return true; + } + function isStyleLinkTypeAttribute(attrValue = "") { + attrValue = trimWhitespace(attrValue).toLowerCase(); + return attrValue === "" || attrValue === "text/css"; + } + function isStyleSheet(tag, attrs) { + if (tag !== "style") { + return false; + } + for (let i = 0, len = attrs.length; i < len; i++) { + const attrName = attrs[i].name.toLowerCase(); + if (attrName === "type") { + return isStyleLinkTypeAttribute(attrs[i].value); + } + } + return true; + } + var isSimpleBoolean = /* @__PURE__ */ new Set(["allowfullscreen", "async", "autofocus", "autoplay", "checked", "compact", "controls", "declare", "default", "defaultchecked", "defaultmuted", "defaultselected", "defer", "disabled", "enabled", "formnovalidate", "hidden", "indeterminate", "inert", "ismap", "itemscope", "loop", "multiple", "muted", "nohref", "noresize", "noshade", "novalidate", "nowrap", "open", "pauseonexit", "readonly", "required", "reversed", "scoped", "seamless", "selected", "sortable", "truespeed", "typemustmatch", "visible"]); + var isBooleanValue = /* @__PURE__ */ new Set(["true", "false"]); + function isBooleanAttribute(attrName, attrValue) { + return isSimpleBoolean.has(attrName) || attrName === "draggable" && !isBooleanValue.has(attrValue); + } + function isUriTypeAttribute(attrName, tag) { + return /^(?:a|area|link|base)$/.test(tag) && attrName === "href" || tag === "img" && /^(?:src|longdesc|usemap)$/.test(attrName) || tag === "object" && /^(?:classid|codebase|data|usemap)$/.test(attrName) || tag === "q" && attrName === "cite" || tag === "blockquote" && attrName === "cite" || (tag === "ins" || tag === "del") && attrName === "cite" || tag === "form" && attrName === "action" || tag === "input" && (attrName === "src" || attrName === "usemap") || tag === "head" && attrName === "profile" || tag === "script" && (attrName === "src" || attrName === "for"); + } + function isNumberTypeAttribute(attrName, tag) { + return /^(?:a|area|object|button)$/.test(tag) && attrName === "tabindex" || tag === "input" && (attrName === "maxlength" || attrName === "tabindex") || tag === "select" && (attrName === "size" || attrName === "tabindex") || tag === "textarea" && /^(?:rows|cols|tabindex)$/.test(attrName) || tag === "colgroup" && attrName === "span" || tag === "col" && attrName === "span" || (tag === "th" || tag === "td") && (attrName === "rowspan" || attrName === "colspan"); + } + function isLinkType(tag, attrs, value) { + if (tag !== "link") { + return false; + } + for (let i = 0, len = attrs.length; i < len; i++) { + if (attrs[i].name === "rel" && attrs[i].value === value) { + return true; + } + } + } + function isMediaQuery(tag, attrs, attrName) { + return attrName === "media" && (isLinkType(tag, attrs, "stylesheet") || isStyleSheet(tag, attrs)); + } + var srcsetTags = /* @__PURE__ */ new Set(["img", "source"]); + function isSrcset(attrName, tag) { + return attrName === "srcset" && srcsetTags.has(tag); + } + async function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { + if (isEventAttribute(attrName, options)) { + attrValue = trimWhitespace(attrValue).replace(/^javascript:\s*/i, ""); + return options.minifyJS(attrValue, true); + } else if (attrName === "class") { + attrValue = trimWhitespace(attrValue); + if (options.sortClassName) { + attrValue = options.sortClassName(attrValue); + } else { + attrValue = collapseWhitespaceAll(attrValue); + } + return attrValue; + } else if (isUriTypeAttribute(attrName, tag)) { + attrValue = trimWhitespace(attrValue); + return isLinkType(tag, attrs, "canonical") ? attrValue : options.minifyURLs(attrValue); + } else if (isNumberTypeAttribute(attrName, tag)) { + return trimWhitespace(attrValue); + } else if (attrName === "style") { + attrValue = trimWhitespace(attrValue); + if (attrValue) { + if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) { + attrValue = attrValue.replace(/\s*;$/, ";"); + } + attrValue = await options.minifyCSS(attrValue, "inline"); + } + return attrValue; + } else if (isSrcset(attrName, tag)) { + attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) { + let url = candidate; + let descriptor = ""; + const match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/); + if (match) { + url = url.slice(0, -match[0].length); + const num = +match[1].slice(0, -1); + const suffix = match[1].slice(-1); + if (num !== 1 || suffix !== "x") { + descriptor = " " + num + suffix; + } + } + return options.minifyURLs(url) + descriptor; + }).join(", "); + } else if (isMetaViewport(tag, attrs) && attrName === "content") { + attrValue = attrValue.replace(/\s+/g, "").replace(/[0-9]+\.[0-9]+/g, function(numString) { + return (+numString).toString(); + }); + } else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === "content") { + return collapseWhitespaceAll(attrValue); + } else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) { + attrValue = trimWhitespace(attrValue.replace(/ ?[\n\r]+ ?/g, "").replace(/\s{2,}/g, options.conservativeCollapse ? " " : "")); + } else if (tag === "script" && attrName === "type") { + attrValue = trimWhitespace(attrValue.replace(/\s*;\s*/g, ";")); + } else if (isMediaQuery(tag, attrs, attrName)) { + attrValue = trimWhitespace(attrValue); + return options.minifyCSS(attrValue, "media"); + } + return attrValue; + } + function isMetaViewport(tag, attrs) { + if (tag !== "meta") { + return false; + } + for (let i = 0, len = attrs.length; i < len; i++) { + if (attrs[i].name === "name" && attrs[i].value === "viewport") { + return true; + } + } + } + function isContentSecurityPolicy(tag, attrs) { + if (tag !== "meta") { + return false; + } + for (let i = 0, len = attrs.length; i < len; i++) { + if (attrs[i].name.toLowerCase() === "http-equiv" && attrs[i].value.toLowerCase() === "content-security-policy") { + return true; + } + } + } + function ignoreCSS(id) { + return "/* clean-css ignore:start */" + id + "/* clean-css ignore:end */"; + } + function wrapCSS(text, type) { + switch (type) { + case "inline": + return "*{" + text + "}"; + case "media": + return "@media " + text + "{a{top:0}}"; + default: + return text; + } + } + function unwrapCSS(text, type) { + let matches; + switch (type) { + case "inline": + matches = text.match(/^\*\{([\s\S]*)\}$/); + break; + case "media": + matches = text.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/); + break; + } + return matches ? matches[1] : text; + } + async function cleanConditionalComment(comment, options) { + return options.processConditionalComments ? await replaceAsync(comment, /^(\[if\s[^\]]+]>)([\s\S]*?)( -1) { + return await minifyHTML(text, options); + } + } + return text; + } + var optionalStartTags = /* @__PURE__ */ new Set(["html", "head", "body", "colgroup", "tbody"]); + var optionalEndTags = /* @__PURE__ */ new Set(["html", "head", "body", "li", "dt", "dd", "p", "rb", "rt", "rtc", "rp", "optgroup", "option", "colgroup", "caption", "thead", "tbody", "tfoot", "tr", "td", "th"]); + var headerTags = /* @__PURE__ */ new Set(["meta", "link", "script", "style", "template", "noscript"]); + var descriptionTags = /* @__PURE__ */ new Set(["dt", "dd"]); + var pBlockTags = /* @__PURE__ */ new Set(["address", "article", "aside", "blockquote", "details", "div", "dl", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "main", "menu", "nav", "ol", "p", "pre", "section", "table", "ul"]); + var pInlineTags = /* @__PURE__ */ new Set(["a", "audio", "del", "ins", "map", "noscript", "video"]); + var rubyTags = /* @__PURE__ */ new Set(["rb", "rt", "rtc", "rp"]); + var rtcTag = /* @__PURE__ */ new Set(["rb", "rtc", "rp"]); + var optionTag = /* @__PURE__ */ new Set(["option", "optgroup"]); + var tableContentTags = /* @__PURE__ */ new Set(["tbody", "tfoot"]); + var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody", "tfoot"]); + var cellTags = /* @__PURE__ */ new Set(["td", "th"]); + var topLevelTags = /* @__PURE__ */ new Set(["html", "head", "body"]); + var compactTags = /* @__PURE__ */ new Set(["html", "body"]); + var looseTags = /* @__PURE__ */ new Set(["head", "colgroup", "caption"]); + var trailingTags = /* @__PURE__ */ new Set(["dt", "thead"]); + var htmlTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", "b", "base", "basefont", "bdi", "bdo", "bgsound", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "command", "content", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "embed", "fieldset", "figcaption", "figure", "font", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "image", "img", "input", "ins", "isindex", "kbd", "keygen", "label", "legend", "li", "link", "listing", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "multicol", "nav", "nobr", "noembed", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "plaintext", "pre", "progress", "q", "rb", "rp", "rt", "rtc", "ruby", "s", "samp", "script", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "tt", "u", "ul", "var", "video", "wbr", "xmp"]); + function canRemoveParentTag(optionalStartTag, tag) { + switch (optionalStartTag) { + case "html": + case "head": + return true; + case "body": + return !headerTags.has(tag); + case "colgroup": + return tag === "col"; + case "tbody": + return tag === "tr"; + } + return false; + } + function isStartTagMandatory(optionalEndTag, tag) { + switch (tag) { + case "colgroup": + return optionalEndTag === "colgroup"; + case "tbody": + return tableSectionTags.has(optionalEndTag); + } + return false; + } + function canRemovePrecedingTag(optionalEndTag, tag) { + switch (optionalEndTag) { + case "html": + case "head": + case "body": + case "colgroup": + case "caption": + return true; + case "li": + case "optgroup": + case "tr": + return tag === optionalEndTag; + case "dt": + case "dd": + return descriptionTags.has(tag); + case "p": + return pBlockTags.has(tag); + case "rb": + case "rt": + case "rp": + return rubyTags.has(tag); + case "rtc": + return rtcTag.has(tag); + case "option": + return optionTag.has(tag); + case "thead": + case "tbody": + return tableContentTags.has(tag); + case "tfoot": + return tag === "tbody"; + case "td": + case "th": + return cellTags.has(tag); + } + return false; + } + var reEmptyAttribute = new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$"); + function canDeleteEmptyAttribute(tag, attrName, attrValue, options) { + const isValueEmpty = !attrValue || /^\s*$/.test(attrValue); + if (!isValueEmpty) { + return false; + } + if (typeof options.removeEmptyAttributes === "function") { + return options.removeEmptyAttributes(attrName, tag); + } + return tag === "input" && attrName === "value" || reEmptyAttribute.test(attrName); + } + function hasAttrName(name, attrs) { + for (let i = attrs.length - 1; i >= 0; i--) { + if (attrs[i].name === name) { + return true; + } + } + return false; + } + function canRemoveElement(tag, attrs) { + switch (tag) { + case "textarea": + return false; + case "audio": + case "script": + case "video": + if (hasAttrName("src", attrs)) { + return false; + } + break; + case "iframe": + if (hasAttrName("src", attrs) || hasAttrName("srcdoc", attrs)) { + return false; + } + break; + case "object": + if (hasAttrName("data", attrs)) { + return false; + } + break; + case "applet": + if (hasAttrName("code", attrs)) { + return false; + } + break; + } + return true; + } + function canCollapseWhitespace(tag) { + return !/^(?:script|style|pre|textarea)$/.test(tag); + } + function canTrimWhitespace(tag) { + return !/^(?:pre|textarea)$/.test(tag); + } + async function normalizeAttr(attr, attrs, tag, options) { + const attrName = options.name(attr.name); + let attrValue = attr.value; + if (options.decodeEntities && attrValue) { + attrValue = entities.decodeHTMLStrict(attrValue); + } + if (options.removeRedundantAttributes && isAttributeRedundant(tag, attrName, attrValue, attrs) || options.removeScriptTypeAttributes && tag === "script" && attrName === "type" && isScriptTypeAttribute(attrValue) && !keepScriptTypeAttribute(attrValue) || options.removeStyleLinkTypeAttributes && (tag === "style" || tag === "link") && attrName === "type" && isStyleLinkTypeAttribute(attrValue)) { + return; + } + if (attrValue) { + attrValue = await cleanAttributeValue(tag, attrName, attrValue, options, attrs); + } + if (options.removeEmptyAttributes && canDeleteEmptyAttribute(tag, attrName, attrValue, options)) { + return; + } + if (options.decodeEntities && attrValue) { + attrValue = attrValue.replace(/&(#?[0-9a-zA-Z]+;)/g, "&$1"); + } + return { + attr, + name: attrName, + value: attrValue + }; + } + function buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr) { + const attrName = normalized.name; + let attrValue = normalized.value; + const attr = normalized.attr; + let attrQuote = attr.quote; + let attrFragment; + let emittedAttrValue; + if (typeof attrValue !== "undefined" && (!options.removeAttributeQuotes || ~attrValue.indexOf(uidAttr) || !canRemoveAttributeQuotes(attrValue))) { + if (!options.preventAttributesEscaping) { + if (typeof options.quoteCharacter === "undefined") { + const apos = (attrValue.match(/'/g) || []).length; + const quot = (attrValue.match(/"/g) || []).length; + attrQuote = apos < quot ? "'" : '"'; + } else { + attrQuote = options.quoteCharacter === "'" ? "'" : '"'; + } + if (attrQuote === '"') { + attrValue = attrValue.replace(/"/g, """); + } else { + attrValue = attrValue.replace(/'/g, "'"); + } + } + emittedAttrValue = attrQuote + attrValue + attrQuote; + if (!isLast && !options.removeTagWhitespace) { + emittedAttrValue += " "; + } + } else if (isLast && !hasUnarySlash && !/\/$/.test(attrValue)) { + emittedAttrValue = attrValue; + } else { + emittedAttrValue = attrValue + " "; + } + if (typeof attrValue === "undefined" || options.collapseBooleanAttributes && isBooleanAttribute(attrName.toLowerCase(), attrValue.toLowerCase())) { + attrFragment = attrName; + if (!isLast) { + attrFragment += " "; + } + } else { + attrFragment = attrName + attr.customAssign + emittedAttrValue; + } + return attr.customOpen + attrFragment + attr.customClose; + } + function identity(value) { + return value; + } + function identityAsync(value) { + return Promise.resolve(value); + } + var processOptions = (inputOptions) => { + const options = { + name: function(name) { + return name.toLowerCase(); + }, + canCollapseWhitespace, + canTrimWhitespace, + html5: true, + ignoreCustomComments: [ + /^!/, + /^\s*#/ + ], + ignoreCustomFragments: [ + /<%[\s\S]*?%>/, + /<\?[\s\S]*?\?>/ + ], + includeAutoGeneratedTags: true, + log: identity, + minifyCSS: identityAsync, + minifyJS: identity, + minifyURLs: identity + }; + Object.keys(inputOptions).forEach(function(key) { + const option = inputOptions[key]; + if (key === "caseSensitive") { + if (option) { + options.name = identity; + } + } else if (key === "log") { + if (typeof option === "function") { + options.log = option; + } + } else if (key === "minifyCSS" && typeof option !== "function") { + if (!option) { + return; + } + const cleanCssOptions = typeof option === "object" ? option : {}; + options.minifyCSS = async function(text, type) { + text = text.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/ig, function(match, prefix, quote, url, suffix) { + return prefix + quote + options.minifyURLs(url) + quote + suffix; + }); + const inputCSS = wrapCSS(text, type); + return new Promise((resolve) => { + new CleanCSS(cleanCssOptions).minify(inputCSS, (_err, output) => { + if (output.errors.length > 0) { + output.errors.forEach(options.log); + resolve(text); + } + const outputCSS = unwrapCSS(output.styles, type); + resolve(outputCSS); + }); + }); + }; + } else if (key === "minifyJS" && typeof option !== "function") { + if (!option) { + return; + } + const terserOptions = typeof option === "object" ? option : {}; + terserOptions.parse = { + ...terserOptions.parse, + bare_returns: false + }; + options.minifyJS = async function(text, inline2) { + const start = text.match(/^\s*\s*$/, "") : text; + terserOptions.parse.bare_returns = inline2; + try { + const result = await terser.minify(code, terserOptions); + return result.code.replace(/;$/, ""); + } catch (error) { + options.log(error); + return text; + } + }; + } else if (key === "minifyURLs" && typeof option !== "function") { + if (!option) { + return; + } + let relateUrlOptions = option; + if (typeof option === "string") { + relateUrlOptions = { site: option }; + } else if (typeof option !== "object") { + relateUrlOptions = {}; + } + options.minifyURLs = function(text) { + try { + return RelateURL.relate(text, relateUrlOptions); + } catch (err) { + options.log(err); + return text; + } + }; + } else { + options[key] = option; + } + }); + return options; + }; + function uniqueId(value) { + let id; + do { + id = Math.random().toString(36).replace(/^0\.[0-9]*/, ""); + } while (~value.indexOf(id)); + return id; + } + var specialContentTags = /* @__PURE__ */ new Set(["script", "style"]); + async function createSortFns(value, options, uidIgnore, uidAttr) { + const attrChains = options.sortAttributes && /* @__PURE__ */ Object.create(null); + const classChain = options.sortClassName && new TokenChain(); + function attrNames(attrs) { + return attrs.map(function(attr) { + return options.name(attr.name); + }); + } + function shouldSkipUID(token, uid) { + return !uid || token.indexOf(uid) === -1; + } + function shouldSkipUIDs(token) { + return shouldSkipUID(token, uidIgnore) && shouldSkipUID(token, uidAttr); + } + async function scan(input) { + let currentTag, currentType; + const parser = new HTMLParser(input, { + start: function(tag, attrs) { + if (attrChains) { + if (!attrChains[tag]) { + attrChains[tag] = new TokenChain(); + } + attrChains[tag].add(attrNames(attrs).filter(shouldSkipUIDs)); + } + for (let i = 0, len = attrs.length; i < len; i++) { + const attr = attrs[i]; + if (classChain && attr.value && options.name(attr.name) === "class") { + classChain.add(trimWhitespace(attr.value).split(/[ \t\n\f\r]+/).filter(shouldSkipUIDs)); + } else if (options.processScripts && attr.name.toLowerCase() === "type") { + currentTag = tag; + currentType = attr.value; + } + } + }, + end: function() { + currentTag = ""; + }, + chars: async function(text) { + if (options.processScripts && specialContentTags.has(currentTag) && options.processScripts.indexOf(currentType) > -1) { + await scan(text); + } + } + }); + await parser.parse(); + } + const log = options.log; + options.log = identity; + options.sortAttributes = false; + options.sortClassName = false; + await scan(await minifyHTML(value, options)); + options.log = log; + if (attrChains) { + const attrSorters = /* @__PURE__ */ Object.create(null); + for (const tag in attrChains) { + attrSorters[tag] = attrChains[tag].createSorter(); + } + options.sortAttributes = function(tag, attrs) { + const sorter = attrSorters[tag]; + if (sorter) { + const attrMap = /* @__PURE__ */ Object.create(null); + const names = attrNames(attrs); + names.forEach(function(name, index) { + (attrMap[name] || (attrMap[name] = [])).push(attrs[index]); + }); + sorter.sort(names).forEach(function(name, index) { + attrs[index] = attrMap[name].shift(); + }); + } + }; + } + if (classChain) { + const sorter = classChain.createSorter(); + options.sortClassName = function(value2) { + return sorter.sort(value2.split(/[ \n\f\r]+/)).join(" "); + }; + } + } + async function minifyHTML(value, options, partialMarkup) { + if (options.collapseWhitespace) { + value = collapseWhitespace(value, options, true, true); + } + const buffer = []; + let charsPrevTag; + let currentChars = ""; + let hasChars; + let currentTag = ""; + let currentAttrs = []; + const stackNoTrimWhitespace = []; + const stackNoCollapseWhitespace = []; + let optionalStartTag = ""; + let optionalEndTag = ""; + const ignoredMarkupChunks = []; + const ignoredCustomMarkupChunks = []; + let uidIgnore; + let uidAttr; + let uidPattern; + value = value.replace(/([\s\S]*?)/g, function(match, group1) { + if (!uidIgnore) { + uidIgnore = uniqueId(value); + const pattern = new RegExp("^" + uidIgnore + "([0-9]+)$"); + if (options.ignoreCustomComments) { + options.ignoreCustomComments = options.ignoreCustomComments.slice(); + } else { + options.ignoreCustomComments = []; + } + options.ignoreCustomComments.push(pattern); + } + const token = ""; + ignoredMarkupChunks.push(group1); + return token; + }); + const customFragments = options.ignoreCustomFragments.map(function(re) { + return re.source; + }); + if (customFragments.length) { + const reCustomIgnore = new RegExp("\\s*(?:" + customFragments.join("|") + ")+\\s*", "g"); + value = value.replace(reCustomIgnore, function(match) { + if (!uidAttr) { + uidAttr = uniqueId(value); + uidPattern = new RegExp("(\\s*)" + uidAttr + "([0-9]+)" + uidAttr + "(\\s*)", "g"); + if (options.minifyCSS) { + options.minifyCSS = function(fn) { + return function(text, type) { + text = text.replace(uidPattern, function(match2, prefix, index) { + const chunks = ignoredCustomMarkupChunks[+index]; + return chunks[1] + uidAttr + index + uidAttr + chunks[2]; + }); + const ids = []; + new CleanCSS().minify(wrapCSS(text, type)).warnings.forEach(function(warning) { + const match2 = uidPattern.exec(warning); + if (match2) { + const id = uidAttr + match2[2] + uidAttr; + text = text.replace(id, ignoreCSS(id)); + ids.push(id); + } + }); + return fn(text, type).then((chunk) => { + ids.forEach(function(id) { + chunk = chunk.replace(ignoreCSS(id), id); + }); + return chunk; + }); + }; + }(options.minifyCSS); + } + if (options.minifyJS) { + options.minifyJS = function(fn) { + return function(text, type) { + return fn(text.replace(uidPattern, function(match2, prefix, index) { + const chunks = ignoredCustomMarkupChunks[+index]; + return chunks[1] + uidAttr + index + uidAttr + chunks[2]; + }), type); + }; + }(options.minifyJS); + } + } + const token = uidAttr + ignoredCustomMarkupChunks.length + uidAttr; + ignoredCustomMarkupChunks.push(/^(\s*)[\s\S]*?(\s*)$/.exec(match)); + return " " + token + " "; + }); + } + if (options.sortAttributes && typeof options.sortAttributes !== "function" || options.sortClassName && typeof options.sortClassName !== "function") { + await createSortFns(value, options, uidIgnore, uidAttr); + } + function _canCollapseWhitespace(tag, attrs) { + return options.canCollapseWhitespace(tag, attrs, canCollapseWhitespace); + } + function _canTrimWhitespace(tag, attrs) { + return options.canTrimWhitespace(tag, attrs, canTrimWhitespace); + } + function removeStartTag() { + let index = buffer.length - 1; + while (index > 0 && !/^<[^/!]/.test(buffer[index])) { + index--; + } + buffer.length = Math.max(0, index); + } + function removeEndTag() { + let index = buffer.length - 1; + while (index > 0 && !/^<\//.test(buffer[index])) { + index--; + } + buffer.length = Math.max(0, index); + } + function trimTrailingWhitespace(index, nextTag) { + for (let endTag2 = null; index >= 0 && _canTrimWhitespace(endTag2); index--) { + const str = buffer[index]; + const match = str.match(/^<\/([\w:-]+)>$/); + if (match) { + endTag2 = match[1]; + } else if (/>$/.test(str) || (buffer[index] = collapseWhitespaceSmart(str, null, nextTag, options))) { + break; + } + } + } + function squashTrailingWhitespace(nextTag) { + let charsIndex = buffer.length - 1; + if (buffer.length > 1) { + const item = buffer[buffer.length - 1]; + if (/^(?:= 0; ) { + const normalized = await normalizeAttr(attrs[i], attrs, tag, options); + if (normalized) { + parts.unshift(buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr)); + isLast = false; + } + } + if (parts.length > 0) { + buffer.push(" "); + buffer.push.apply(buffer, parts); + } else if (optional && optionalStartTags.has(tag)) { + optionalStartTag = tag; + } + buffer.push(buffer.pop() + (hasUnarySlash ? "/" : "") + ">"); + if (autoGenerated && !options.includeAutoGeneratedTags) { + removeStartTag(); + optionalStartTag = ""; + } + }, + end: function(tag, attrs, autoGenerated) { + if (tag.toLowerCase() === "svg") { + options = Object.getPrototypeOf(options); + } + tag = options.name(tag); + if (options.collapseWhitespace) { + if (stackNoTrimWhitespace.length) { + if (tag === stackNoTrimWhitespace[stackNoTrimWhitespace.length - 1]) { + stackNoTrimWhitespace.pop(); + } + } else { + squashTrailingWhitespace("/" + tag); + } + if (stackNoCollapseWhitespace.length && tag === stackNoCollapseWhitespace[stackNoCollapseWhitespace.length - 1]) { + stackNoCollapseWhitespace.pop(); + } + } + let isElementEmpty = false; + if (tag === currentTag) { + currentTag = ""; + isElementEmpty = !hasChars; + } + if (options.removeOptionalTags) { + if (isElementEmpty && topLevelTags.has(optionalStartTag)) { + removeStartTag(); + } + optionalStartTag = ""; + if (htmlTags.has(tag) && optionalEndTag && !trailingTags.has(optionalEndTag) && (optionalEndTag !== "p" || !pInlineTags.has(tag))) { + removeEndTag(); + } + optionalEndTag = optionalEndTags.has(tag) ? tag : ""; + } + if (options.removeEmptyElements && isElementEmpty && canRemoveElement(tag, attrs)) { + removeStartTag(); + optionalStartTag = ""; + optionalEndTag = ""; + } else { + if (autoGenerated && !options.includeAutoGeneratedTags) { + optionalEndTag = ""; + } else { + buffer.push(""); + } + charsPrevTag = "/" + tag; + if (!inlineTags.has(tag)) { + currentChars = ""; + } else if (isElementEmpty) { + currentChars += "|"; + } + } + }, + chars: async function(text, prevTag, nextTag) { + prevTag = prevTag === "" ? "comment" : prevTag; + nextTag = nextTag === "" ? "comment" : nextTag; + if (options.decodeEntities && text && !specialContentTags.has(currentTag)) { + text = entities.decodeHTML(text); + } + if (options.collapseWhitespace) { + if (!stackNoTrimWhitespace.length) { + if (prevTag === "comment") { + const prevComment = buffer[buffer.length - 1]; + if (prevComment.indexOf(uidIgnore) === -1) { + if (!prevComment) { + prevTag = charsPrevTag; + } + if (buffer.length > 1 && (!prevComment || !options.conservativeCollapse && / $/.test(currentChars))) { + const charsIndex = buffer.length - 2; + buffer[charsIndex] = buffer[charsIndex].replace(/\s+$/, function(trailingSpaces) { + text = trailingSpaces + text; + return ""; + }); + } + } + } + if (prevTag) { + if (prevTag === "/nobr" || prevTag === "wbr") { + if (/^\s/.test(text)) { + let tagIndex = buffer.length - 1; + while (tagIndex > 0 && buffer[tagIndex].lastIndexOf("<" + prevTag) !== 0) { + tagIndex--; + } + trimTrailingWhitespace(tagIndex - 1, "br"); + } + } else if (inlineTextTags.has(prevTag.charAt(0) === "/" ? prevTag.slice(1) : prevTag)) { + text = collapseWhitespace(text, options, /(?:^|\s)$/.test(currentChars)); + } + } + if (prevTag || nextTag) { + text = collapseWhitespaceSmart(text, prevTag, nextTag, options); + } else { + text = collapseWhitespace(text, options, true, true); + } + if (!text && /\s$/.test(currentChars) && prevTag && prevTag.charAt(0) === "/") { + trimTrailingWhitespace(buffer.length - 1, nextTag); + } + } + if (!stackNoCollapseWhitespace.length && nextTag !== "html" && !(prevTag && nextTag)) { + text = collapseWhitespace(text, options, false, false, true); + } + } + if (options.processScripts && specialContentTags.has(currentTag)) { + text = await processScript(text, options, currentAttrs); + } + if (isExecutableScript(currentTag, currentAttrs)) { + text = await options.minifyJS(text); + } + if (isStyleSheet(currentTag, currentAttrs)) { + text = await options.minifyCSS(text); + } + if (options.removeOptionalTags && text) { + if (optionalStartTag === "html" || optionalStartTag === "body" && !/^\s/.test(text)) { + removeStartTag(); + } + optionalStartTag = ""; + if (compactTags.has(optionalEndTag) || looseTags.has(optionalEndTag) && !/^\s/.test(text)) { + removeEndTag(); + } + optionalEndTag = ""; + } + charsPrevTag = /^\s*$/.test(text) ? prevTag : "comment"; + if (options.decodeEntities && text && !specialContentTags.has(currentTag)) { + text = text.replace(/&((?:Iacute|aacute|uacute|plusmn|Otilde|otilde|agrave|Agrave|Yacute|yacute|Oslash|oslash|atilde|Atilde|brvbar|ccedil|Ccedil|Ograve|curren|divide|eacute|Eacute|ograve|Oacute|egrave|Egrave|Ugrave|frac12|frac14|frac34|ugrave|oacute|iacute|Ntilde|ntilde|Uacute|middot|igrave|Igrave|iquest|Aacute|cedil|laquo|micro|iexcl|Icirc|icirc|acirc|Ucirc|Ecirc|ocirc|Ocirc|ecirc|ucirc|Aring|aring|AElig|aelig|acute|pound|raquo|Acirc|times|THORN|szlig|thorn|COPY|auml|ordf|ordm|Uuml|macr|uuml|Auml|ouml|Ouml|para|nbsp|euml|quot|QUOT|Euml|yuml|cent|sect|copy|sup1|sup2|sup3|iuml|Iuml|ETH|shy|reg|not|yen|amp|AMP|REG|uml|eth|deg|gt|GT|LT|lt)(?!;)|(?:#?[0-9a-zA-Z]+;))/g, "&$1").replace(/" : "-->"; + if (isConditionalComment(text)) { + text = prefix + await cleanConditionalComment(text, options) + suffix; + } else if (options.removeComments) { + if (isIgnoredComment(text, options)) { + text = ""; + } else { + text = ""; + } + } else { + text = prefix + text + suffix; + } + if (options.removeOptionalTags && text) { + optionalStartTag = ""; + optionalEndTag = ""; + } + buffer.push(text); + }, + doctype: function(doctype2) { + buffer.push(options.useShortDoctype ? "" : collapseWhitespaceAll(doctype2)); + } + }); + await parser.parse(); + if (options.removeOptionalTags) { + if (topLevelTags.has(optionalStartTag)) { + removeStartTag(); + } + if (optionalEndTag && !trailingTags.has(optionalEndTag)) { + removeEndTag(); + } + } + if (options.collapseWhitespace) { + squashTrailingWhitespace("br"); + } + return joinResultSegments(buffer, options, uidPattern ? function(str) { + return str.replace(uidPattern, function(match, prefix, index, suffix) { + let chunk = ignoredCustomMarkupChunks[+index][0]; + if (options.collapseWhitespace) { + if (prefix !== " ") { + chunk = prefix + chunk; + } + if (suffix !== " ") { + chunk += suffix; + } + return collapseWhitespace(chunk, { + preserveLineBreaks: options.preserveLineBreaks, + conservativeCollapse: !options.trimCustomFragments + }, /^[ \n\r\t\f]/.test(chunk), /[ \n\r\t\f]$/.test(chunk)); + } + return chunk; + }); + } : identity, uidIgnore ? function(str) { + return str.replace(new RegExp("", "g"), function(match, index) { + return ignoredMarkupChunks[+index]; + }); + } : identity); + } + function joinResultSegments(results, options, restoreCustom, restoreIgnore) { + let str; + const maxLineLength = options.maxLineLength; + const noNewlinesBeforeTagClose = options.noNewlinesBeforeTagClose; + if (maxLineLength) { + let line = ""; + const lines = []; + while (results.length) { + const len = line.length; + const end = results[0].indexOf("\n"); + const isClosingTag = Boolean(results[0].match(endTag)); + const shouldKeepSameLine = noNewlinesBeforeTagClose && isClosingTag; + if (end < 0) { + line += restoreIgnore(restoreCustom(results.shift())); + } else { + line += restoreIgnore(restoreCustom(results[0].slice(0, end))); + results[0] = results[0].slice(end + 1); + } + if (len > 0 && line.length > maxLineLength && !shouldKeepSameLine) { + lines.push(line.slice(0, len)); + line = line.slice(len); + } else if (end >= 0) { + lines.push(line); + line = ""; + } + } + if (line) { + lines.push(line); + } + str = lines.join("\n"); + } else { + str = restoreIgnore(restoreCustom(results.join(""))); + } + return options.collapseWhitespace ? collapseWhitespace(str, options, true, true) : str; + } + var minify2 = async function(value, options) { + const start = Date.now(); + options = processOptions(options || {}); + const result = await minifyHTML(value, options); + options.log("minified in: " + (Date.now() - start) + "ms"); + return result; + }; + var htmlminifier = { minify: minify2 }; + exports.default = htmlminifier; + exports.minify = minify2; + } +}); + +// node_modules/mime/Mime.js +var require_Mime = __commonJS({ + "node_modules/mime/Mime.js"(exports, module2) { + "use strict"; + function Mime() { + this._types = /* @__PURE__ */ Object.create(null); + this._extensions = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < arguments.length; i++) { + this.define(arguments[i]); + } + this.define = this.define.bind(this); + this.getType = this.getType.bind(this); + this.getExtension = this.getExtension.bind(this); + } + Mime.prototype.define = function(typeMap, force) { + for (let type in typeMap) { + let extensions2 = typeMap[type].map(function(t) { + return t.toLowerCase(); + }); + type = type.toLowerCase(); + for (let i = 0; i < extensions2.length; i++) { + const ext = extensions2[i]; + if (ext[0] === "*") { + continue; + } + if (!force && ext in this._types) { + throw new Error('Attempt to change mapping for "' + ext + '" extension from "' + this._types[ext] + '" to "' + type + '". Pass `force=true` to allow this, otherwise remove "' + ext + '" from the list of extensions for "' + type + '".'); + } + this._types[ext] = type; + } + if (force || !this._extensions[type]) { + const ext = extensions2[0]; + this._extensions[type] = ext[0] !== "*" ? ext : ext.substr(1); + } + } + }; + Mime.prototype.getType = function(path) { + path = String(path); + let last2 = path.replace(/^.*[/\\]/, "").toLowerCase(); + let ext = last2.replace(/^.*\./, "").toLowerCase(); + let hasPath = last2.length < path.length; + let hasDot = ext.length < last2.length - 1; + return (hasDot || !hasPath) && this._types[ext] || null; + }; + Mime.prototype.getExtension = function(type) { + type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; + return type && this._extensions[type.toLowerCase()] || null; + }; + module2.exports = Mime; + } +}); + +// node_modules/mime/types/standard.js +var require_standard = __commonJS({ + "node_modules/mime/types/standard.js"(exports, module2) { + module2.exports = { "application/andrew-inset": ["ez"], "application/applixware": ["aw"], "application/atom+xml": ["atom"], "application/atomcat+xml": ["atomcat"], "application/atomdeleted+xml": ["atomdeleted"], "application/atomsvc+xml": ["atomsvc"], "application/atsc-dwd+xml": ["dwd"], "application/atsc-held+xml": ["held"], "application/atsc-rsat+xml": ["rsat"], "application/bdoc": ["bdoc"], "application/calendar+xml": ["xcs"], "application/ccxml+xml": ["ccxml"], "application/cdfx+xml": ["cdfx"], "application/cdmi-capability": ["cdmia"], "application/cdmi-container": ["cdmic"], "application/cdmi-domain": ["cdmid"], "application/cdmi-object": ["cdmio"], "application/cdmi-queue": ["cdmiq"], "application/cu-seeme": ["cu"], "application/dash+xml": ["mpd"], "application/davmount+xml": ["davmount"], "application/docbook+xml": ["dbk"], "application/dssc+der": ["dssc"], "application/dssc+xml": ["xdssc"], "application/ecmascript": ["es", "ecma"], "application/emma+xml": ["emma"], "application/emotionml+xml": ["emotionml"], "application/epub+zip": ["epub"], "application/exi": ["exi"], "application/express": ["exp"], "application/fdt+xml": ["fdt"], "application/font-tdpfr": ["pfr"], "application/geo+json": ["geojson"], "application/gml+xml": ["gml"], "application/gpx+xml": ["gpx"], "application/gxf": ["gxf"], "application/gzip": ["gz"], "application/hjson": ["hjson"], "application/hyperstudio": ["stk"], "application/inkml+xml": ["ink", "inkml"], "application/ipfix": ["ipfix"], "application/its+xml": ["its"], "application/java-archive": ["jar", "war", "ear"], "application/java-serialized-object": ["ser"], "application/java-vm": ["class"], "application/javascript": ["js", "mjs"], "application/json": ["json", "map"], "application/json5": ["json5"], "application/jsonml+json": ["jsonml"], "application/ld+json": ["jsonld"], "application/lgr+xml": ["lgr"], "application/lost+xml": ["lostxml"], "application/mac-binhex40": ["hqx"], "application/mac-compactpro": ["cpt"], "application/mads+xml": ["mads"], "application/manifest+json": ["webmanifest"], "application/marc": ["mrc"], "application/marcxml+xml": ["mrcx"], "application/mathematica": ["ma", "nb", "mb"], "application/mathml+xml": ["mathml"], "application/mbox": ["mbox"], "application/mediaservercontrol+xml": ["mscml"], "application/metalink+xml": ["metalink"], "application/metalink4+xml": ["meta4"], "application/mets+xml": ["mets"], "application/mmt-aei+xml": ["maei"], "application/mmt-usd+xml": ["musd"], "application/mods+xml": ["mods"], "application/mp21": ["m21", "mp21"], "application/mp4": ["mp4s", "m4p"], "application/msword": ["doc", "dot"], "application/mxf": ["mxf"], "application/n-quads": ["nq"], "application/n-triples": ["nt"], "application/node": ["cjs"], "application/octet-stream": ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"], "application/oda": ["oda"], "application/oebps-package+xml": ["opf"], "application/ogg": ["ogx"], "application/omdoc+xml": ["omdoc"], "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"], "application/oxps": ["oxps"], "application/p2p-overlay+xml": ["relo"], "application/patch-ops-error+xml": ["xer"], "application/pdf": ["pdf"], "application/pgp-encrypted": ["pgp"], "application/pgp-signature": ["asc", "sig"], "application/pics-rules": ["prf"], "application/pkcs10": ["p10"], "application/pkcs7-mime": ["p7m", "p7c"], "application/pkcs7-signature": ["p7s"], "application/pkcs8": ["p8"], "application/pkix-attr-cert": ["ac"], "application/pkix-cert": ["cer"], "application/pkix-crl": ["crl"], "application/pkix-pkipath": ["pkipath"], "application/pkixcmp": ["pki"], "application/pls+xml": ["pls"], "application/postscript": ["ai", "eps", "ps"], "application/provenance+xml": ["provx"], "application/pskc+xml": ["pskcxml"], "application/raml+yaml": ["raml"], "application/rdf+xml": ["rdf", "owl"], "application/reginfo+xml": ["rif"], "application/relax-ng-compact-syntax": ["rnc"], "application/resource-lists+xml": ["rl"], "application/resource-lists-diff+xml": ["rld"], "application/rls-services+xml": ["rs"], "application/route-apd+xml": ["rapd"], "application/route-s-tsid+xml": ["sls"], "application/route-usd+xml": ["rusd"], "application/rpki-ghostbusters": ["gbr"], "application/rpki-manifest": ["mft"], "application/rpki-roa": ["roa"], "application/rsd+xml": ["rsd"], "application/rss+xml": ["rss"], "application/rtf": ["rtf"], "application/sbml+xml": ["sbml"], "application/scvp-cv-request": ["scq"], "application/scvp-cv-response": ["scs"], "application/scvp-vp-request": ["spq"], "application/scvp-vp-response": ["spp"], "application/sdp": ["sdp"], "application/senml+xml": ["senmlx"], "application/sensml+xml": ["sensmlx"], "application/set-payment-initiation": ["setpay"], "application/set-registration-initiation": ["setreg"], "application/shf+xml": ["shf"], "application/sieve": ["siv", "sieve"], "application/smil+xml": ["smi", "smil"], "application/sparql-query": ["rq"], "application/sparql-results+xml": ["srx"], "application/srgs": ["gram"], "application/srgs+xml": ["grxml"], "application/sru+xml": ["sru"], "application/ssdl+xml": ["ssdl"], "application/ssml+xml": ["ssml"], "application/swid+xml": ["swidtag"], "application/tei+xml": ["tei", "teicorpus"], "application/thraud+xml": ["tfi"], "application/timestamped-data": ["tsd"], "application/toml": ["toml"], "application/trig": ["trig"], "application/ttml+xml": ["ttml"], "application/ubjson": ["ubj"], "application/urc-ressheet+xml": ["rsheet"], "application/urc-targetdesc+xml": ["td"], "application/voicexml+xml": ["vxml"], "application/wasm": ["wasm"], "application/widget": ["wgt"], "application/winhlp": ["hlp"], "application/wsdl+xml": ["wsdl"], "application/wspolicy+xml": ["wspolicy"], "application/xaml+xml": ["xaml"], "application/xcap-att+xml": ["xav"], "application/xcap-caps+xml": ["xca"], "application/xcap-diff+xml": ["xdf"], "application/xcap-el+xml": ["xel"], "application/xcap-ns+xml": ["xns"], "application/xenc+xml": ["xenc"], "application/xhtml+xml": ["xhtml", "xht"], "application/xliff+xml": ["xlf"], "application/xml": ["xml", "xsl", "xsd", "rng"], "application/xml-dtd": ["dtd"], "application/xop+xml": ["xop"], "application/xproc+xml": ["xpl"], "application/xslt+xml": ["*xsl", "xslt"], "application/xspf+xml": ["xspf"], "application/xv+xml": ["mxml", "xhvml", "xvml", "xvm"], "application/yang": ["yang"], "application/yin+xml": ["yin"], "application/zip": ["zip"], "audio/3gpp": ["*3gpp"], "audio/adpcm": ["adp"], "audio/amr": ["amr"], "audio/basic": ["au", "snd"], "audio/midi": ["mid", "midi", "kar", "rmi"], "audio/mobile-xmf": ["mxmf"], "audio/mp3": ["*mp3"], "audio/mp4": ["m4a", "mp4a"], "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"], "audio/ogg": ["oga", "ogg", "spx", "opus"], "audio/s3m": ["s3m"], "audio/silk": ["sil"], "audio/wav": ["wav"], "audio/wave": ["*wav"], "audio/webm": ["weba"], "audio/xm": ["xm"], "font/collection": ["ttc"], "font/otf": ["otf"], "font/ttf": ["ttf"], "font/woff": ["woff"], "font/woff2": ["woff2"], "image/aces": ["exr"], "image/apng": ["apng"], "image/avif": ["avif"], "image/bmp": ["bmp"], "image/cgm": ["cgm"], "image/dicom-rle": ["drle"], "image/emf": ["emf"], "image/fits": ["fits"], "image/g3fax": ["g3"], "image/gif": ["gif"], "image/heic": ["heic"], "image/heic-sequence": ["heics"], "image/heif": ["heif"], "image/heif-sequence": ["heifs"], "image/hej2k": ["hej2"], "image/hsj2": ["hsj2"], "image/ief": ["ief"], "image/jls": ["jls"], "image/jp2": ["jp2", "jpg2"], "image/jpeg": ["jpeg", "jpg", "jpe"], "image/jph": ["jph"], "image/jphc": ["jhc"], "image/jpm": ["jpm"], "image/jpx": ["jpx", "jpf"], "image/jxr": ["jxr"], "image/jxra": ["jxra"], "image/jxrs": ["jxrs"], "image/jxs": ["jxs"], "image/jxsc": ["jxsc"], "image/jxsi": ["jxsi"], "image/jxss": ["jxss"], "image/ktx": ["ktx"], "image/ktx2": ["ktx2"], "image/png": ["png"], "image/sgi": ["sgi"], "image/svg+xml": ["svg", "svgz"], "image/t38": ["t38"], "image/tiff": ["tif", "tiff"], "image/tiff-fx": ["tfx"], "image/webp": ["webp"], "image/wmf": ["wmf"], "message/disposition-notification": ["disposition-notification"], "message/global": ["u8msg"], "message/global-delivery-status": ["u8dsn"], "message/global-disposition-notification": ["u8mdn"], "message/global-headers": ["u8hdr"], "message/rfc822": ["eml", "mime"], "model/3mf": ["3mf"], "model/gltf+json": ["gltf"], "model/gltf-binary": ["glb"], "model/iges": ["igs", "iges"], "model/mesh": ["msh", "mesh", "silo"], "model/mtl": ["mtl"], "model/obj": ["obj"], "model/step+xml": ["stpx"], "model/step+zip": ["stpz"], "model/step-xml+zip": ["stpxz"], "model/stl": ["stl"], "model/vrml": ["wrl", "vrml"], "model/x3d+binary": ["*x3db", "x3dbz"], "model/x3d+fastinfoset": ["x3db"], "model/x3d+vrml": ["*x3dv", "x3dvz"], "model/x3d+xml": ["x3d", "x3dz"], "model/x3d-vrml": ["x3dv"], "text/cache-manifest": ["appcache", "manifest"], "text/calendar": ["ics", "ifb"], "text/coffeescript": ["coffee", "litcoffee"], "text/css": ["css"], "text/csv": ["csv"], "text/html": ["html", "htm", "shtml"], "text/jade": ["jade"], "text/jsx": ["jsx"], "text/less": ["less"], "text/markdown": ["markdown", "md"], "text/mathml": ["mml"], "text/mdx": ["mdx"], "text/n3": ["n3"], "text/plain": ["txt", "text", "conf", "def", "list", "log", "in", "ini"], "text/richtext": ["rtx"], "text/rtf": ["*rtf"], "text/sgml": ["sgml", "sgm"], "text/shex": ["shex"], "text/slim": ["slim", "slm"], "text/spdx": ["spdx"], "text/stylus": ["stylus", "styl"], "text/tab-separated-values": ["tsv"], "text/troff": ["t", "tr", "roff", "man", "me", "ms"], "text/turtle": ["ttl"], "text/uri-list": ["uri", "uris", "urls"], "text/vcard": ["vcard"], "text/vtt": ["vtt"], "text/xml": ["*xml"], "text/yaml": ["yaml", "yml"], "video/3gpp": ["3gp", "3gpp"], "video/3gpp2": ["3g2"], "video/h261": ["h261"], "video/h263": ["h263"], "video/h264": ["h264"], "video/iso.segment": ["m4s"], "video/jpeg": ["jpgv"], "video/jpm": ["*jpm", "jpgm"], "video/mj2": ["mj2", "mjp2"], "video/mp2t": ["ts"], "video/mp4": ["mp4", "mp4v", "mpg4"], "video/mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v"], "video/ogg": ["ogv"], "video/quicktime": ["qt", "mov"], "video/webm": ["webm"] }; + } +}); + +// node_modules/mime/types/other.js +var require_other = __commonJS({ + "node_modules/mime/types/other.js"(exports, module2) { + module2.exports = { "application/prs.cww": ["cww"], "application/vnd.1000minds.decision-model+xml": ["1km"], "application/vnd.3gpp.pic-bw-large": ["plb"], "application/vnd.3gpp.pic-bw-small": ["psb"], "application/vnd.3gpp.pic-bw-var": ["pvb"], "application/vnd.3gpp2.tcap": ["tcap"], "application/vnd.3m.post-it-notes": ["pwn"], "application/vnd.accpac.simply.aso": ["aso"], "application/vnd.accpac.simply.imp": ["imp"], "application/vnd.acucobol": ["acu"], "application/vnd.acucorp": ["atc", "acutc"], "application/vnd.adobe.air-application-installer-package+zip": ["air"], "application/vnd.adobe.formscentral.fcdt": ["fcdt"], "application/vnd.adobe.fxp": ["fxp", "fxpl"], "application/vnd.adobe.xdp+xml": ["xdp"], "application/vnd.adobe.xfdf": ["xfdf"], "application/vnd.ahead.space": ["ahead"], "application/vnd.airzip.filesecure.azf": ["azf"], "application/vnd.airzip.filesecure.azs": ["azs"], "application/vnd.amazon.ebook": ["azw"], "application/vnd.americandynamics.acc": ["acc"], "application/vnd.amiga.ami": ["ami"], "application/vnd.android.package-archive": ["apk"], "application/vnd.anser-web-certificate-issue-initiation": ["cii"], "application/vnd.anser-web-funds-transfer-initiation": ["fti"], "application/vnd.antix.game-component": ["atx"], "application/vnd.apple.installer+xml": ["mpkg"], "application/vnd.apple.keynote": ["key"], "application/vnd.apple.mpegurl": ["m3u8"], "application/vnd.apple.numbers": ["numbers"], "application/vnd.apple.pages": ["pages"], "application/vnd.apple.pkpass": ["pkpass"], "application/vnd.aristanetworks.swi": ["swi"], "application/vnd.astraea-software.iota": ["iota"], "application/vnd.audiograph": ["aep"], "application/vnd.balsamiq.bmml+xml": ["bmml"], "application/vnd.blueice.multipass": ["mpm"], "application/vnd.bmi": ["bmi"], "application/vnd.businessobjects": ["rep"], "application/vnd.chemdraw+xml": ["cdxml"], "application/vnd.chipnuts.karaoke-mmd": ["mmd"], "application/vnd.cinderella": ["cdy"], "application/vnd.citationstyles.style+xml": ["csl"], "application/vnd.claymore": ["cla"], "application/vnd.cloanto.rp9": ["rp9"], "application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"], "application/vnd.cluetrust.cartomobile-config": ["c11amc"], "application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"], "application/vnd.commonspace": ["csp"], "application/vnd.contact.cmsg": ["cdbcmsg"], "application/vnd.cosmocaller": ["cmc"], "application/vnd.crick.clicker": ["clkx"], "application/vnd.crick.clicker.keyboard": ["clkk"], "application/vnd.crick.clicker.palette": ["clkp"], "application/vnd.crick.clicker.template": ["clkt"], "application/vnd.crick.clicker.wordbank": ["clkw"], "application/vnd.criticaltools.wbs+xml": ["wbs"], "application/vnd.ctc-posml": ["pml"], "application/vnd.cups-ppd": ["ppd"], "application/vnd.curl.car": ["car"], "application/vnd.curl.pcurl": ["pcurl"], "application/vnd.dart": ["dart"], "application/vnd.data-vision.rdz": ["rdz"], "application/vnd.dbf": ["dbf"], "application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"], "application/vnd.dece.ttml+xml": ["uvt", "uvvt"], "application/vnd.dece.unspecified": ["uvx", "uvvx"], "application/vnd.dece.zip": ["uvz", "uvvz"], "application/vnd.denovo.fcselayout-link": ["fe_launch"], "application/vnd.dna": ["dna"], "application/vnd.dolby.mlp": ["mlp"], "application/vnd.dpgraph": ["dpg"], "application/vnd.dreamfactory": ["dfac"], "application/vnd.ds-keypoint": ["kpxx"], "application/vnd.dvb.ait": ["ait"], "application/vnd.dvb.service": ["svc"], "application/vnd.dynageo": ["geo"], "application/vnd.ecowin.chart": ["mag"], "application/vnd.enliven": ["nml"], "application/vnd.epson.esf": ["esf"], "application/vnd.epson.msf": ["msf"], "application/vnd.epson.quickanime": ["qam"], "application/vnd.epson.salt": ["slt"], "application/vnd.epson.ssf": ["ssf"], "application/vnd.eszigno3+xml": ["es3", "et3"], "application/vnd.ezpix-album": ["ez2"], "application/vnd.ezpix-package": ["ez3"], "application/vnd.fdf": ["fdf"], "application/vnd.fdsn.mseed": ["mseed"], "application/vnd.fdsn.seed": ["seed", "dataless"], "application/vnd.flographit": ["gph"], "application/vnd.fluxtime.clip": ["ftc"], "application/vnd.framemaker": ["fm", "frame", "maker", "book"], "application/vnd.frogans.fnc": ["fnc"], "application/vnd.frogans.ltf": ["ltf"], "application/vnd.fsc.weblaunch": ["fsc"], "application/vnd.fujitsu.oasys": ["oas"], "application/vnd.fujitsu.oasys2": ["oa2"], "application/vnd.fujitsu.oasys3": ["oa3"], "application/vnd.fujitsu.oasysgp": ["fg5"], "application/vnd.fujitsu.oasysprs": ["bh2"], "application/vnd.fujixerox.ddd": ["ddd"], "application/vnd.fujixerox.docuworks": ["xdw"], "application/vnd.fujixerox.docuworks.binder": ["xbd"], "application/vnd.fuzzysheet": ["fzs"], "application/vnd.genomatix.tuxedo": ["txd"], "application/vnd.geogebra.file": ["ggb"], "application/vnd.geogebra.tool": ["ggt"], "application/vnd.geometry-explorer": ["gex", "gre"], "application/vnd.geonext": ["gxt"], "application/vnd.geoplan": ["g2w"], "application/vnd.geospace": ["g3w"], "application/vnd.gmx": ["gmx"], "application/vnd.google-apps.document": ["gdoc"], "application/vnd.google-apps.presentation": ["gslides"], "application/vnd.google-apps.spreadsheet": ["gsheet"], "application/vnd.google-earth.kml+xml": ["kml"], "application/vnd.google-earth.kmz": ["kmz"], "application/vnd.grafeq": ["gqf", "gqs"], "application/vnd.groove-account": ["gac"], "application/vnd.groove-help": ["ghf"], "application/vnd.groove-identity-message": ["gim"], "application/vnd.groove-injector": ["grv"], "application/vnd.groove-tool-message": ["gtm"], "application/vnd.groove-tool-template": ["tpl"], "application/vnd.groove-vcard": ["vcg"], "application/vnd.hal+xml": ["hal"], "application/vnd.handheld-entertainment+xml": ["zmm"], "application/vnd.hbci": ["hbci"], "application/vnd.hhe.lesson-player": ["les"], "application/vnd.hp-hpgl": ["hpgl"], "application/vnd.hp-hpid": ["hpid"], "application/vnd.hp-hps": ["hps"], "application/vnd.hp-jlyt": ["jlt"], "application/vnd.hp-pcl": ["pcl"], "application/vnd.hp-pclxl": ["pclxl"], "application/vnd.hydrostatix.sof-data": ["sfd-hdstx"], "application/vnd.ibm.minipay": ["mpy"], "application/vnd.ibm.modcap": ["afp", "listafp", "list3820"], "application/vnd.ibm.rights-management": ["irm"], "application/vnd.ibm.secure-container": ["sc"], "application/vnd.iccprofile": ["icc", "icm"], "application/vnd.igloader": ["igl"], "application/vnd.immervision-ivp": ["ivp"], "application/vnd.immervision-ivu": ["ivu"], "application/vnd.insors.igm": ["igm"], "application/vnd.intercon.formnet": ["xpw", "xpx"], "application/vnd.intergeo": ["i2g"], "application/vnd.intu.qbo": ["qbo"], "application/vnd.intu.qfx": ["qfx"], "application/vnd.ipunplugged.rcprofile": ["rcprofile"], "application/vnd.irepository.package+xml": ["irp"], "application/vnd.is-xpr": ["xpr"], "application/vnd.isac.fcs": ["fcs"], "application/vnd.jam": ["jam"], "application/vnd.jcp.javame.midlet-rms": ["rms"], "application/vnd.jisp": ["jisp"], "application/vnd.joost.joda-archive": ["joda"], "application/vnd.kahootz": ["ktz", "ktr"], "application/vnd.kde.karbon": ["karbon"], "application/vnd.kde.kchart": ["chrt"], "application/vnd.kde.kformula": ["kfo"], "application/vnd.kde.kivio": ["flw"], "application/vnd.kde.kontour": ["kon"], "application/vnd.kde.kpresenter": ["kpr", "kpt"], "application/vnd.kde.kspread": ["ksp"], "application/vnd.kde.kword": ["kwd", "kwt"], "application/vnd.kenameaapp": ["htke"], "application/vnd.kidspiration": ["kia"], "application/vnd.kinar": ["kne", "knp"], "application/vnd.koan": ["skp", "skd", "skt", "skm"], "application/vnd.kodak-descriptor": ["sse"], "application/vnd.las.las+xml": ["lasxml"], "application/vnd.llamagraphics.life-balance.desktop": ["lbd"], "application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"], "application/vnd.lotus-1-2-3": ["123"], "application/vnd.lotus-approach": ["apr"], "application/vnd.lotus-freelance": ["pre"], "application/vnd.lotus-notes": ["nsf"], "application/vnd.lotus-organizer": ["org"], "application/vnd.lotus-screencam": ["scm"], "application/vnd.lotus-wordpro": ["lwp"], "application/vnd.macports.portpkg": ["portpkg"], "application/vnd.mapbox-vector-tile": ["mvt"], "application/vnd.mcd": ["mcd"], "application/vnd.medcalcdata": ["mc1"], "application/vnd.mediastation.cdkey": ["cdkey"], "application/vnd.mfer": ["mwf"], "application/vnd.mfmp": ["mfm"], "application/vnd.micrografx.flo": ["flo"], "application/vnd.micrografx.igx": ["igx"], "application/vnd.mif": ["mif"], "application/vnd.mobius.daf": ["daf"], "application/vnd.mobius.dis": ["dis"], "application/vnd.mobius.mbk": ["mbk"], "application/vnd.mobius.mqy": ["mqy"], "application/vnd.mobius.msl": ["msl"], "application/vnd.mobius.plc": ["plc"], "application/vnd.mobius.txf": ["txf"], "application/vnd.mophun.application": ["mpn"], "application/vnd.mophun.certificate": ["mpc"], "application/vnd.mozilla.xul+xml": ["xul"], "application/vnd.ms-artgalry": ["cil"], "application/vnd.ms-cab-compressed": ["cab"], "application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], "application/vnd.ms-excel.addin.macroenabled.12": ["xlam"], "application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"], "application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"], "application/vnd.ms-excel.template.macroenabled.12": ["xltm"], "application/vnd.ms-fontobject": ["eot"], "application/vnd.ms-htmlhelp": ["chm"], "application/vnd.ms-ims": ["ims"], "application/vnd.ms-lrm": ["lrm"], "application/vnd.ms-officetheme": ["thmx"], "application/vnd.ms-outlook": ["msg"], "application/vnd.ms-pki.seccat": ["cat"], "application/vnd.ms-pki.stl": ["*stl"], "application/vnd.ms-powerpoint": ["ppt", "pps", "pot"], "application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"], "application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"], "application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"], "application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"], "application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"], "application/vnd.ms-project": ["mpp", "mpt"], "application/vnd.ms-word.document.macroenabled.12": ["docm"], "application/vnd.ms-word.template.macroenabled.12": ["dotm"], "application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"], "application/vnd.ms-wpl": ["wpl"], "application/vnd.ms-xpsdocument": ["xps"], "application/vnd.mseq": ["mseq"], "application/vnd.musician": ["mus"], "application/vnd.muvee.style": ["msty"], "application/vnd.mynfc": ["taglet"], "application/vnd.neurolanguage.nlu": ["nlu"], "application/vnd.nitf": ["ntf", "nitf"], "application/vnd.noblenet-directory": ["nnd"], "application/vnd.noblenet-sealer": ["nns"], "application/vnd.noblenet-web": ["nnw"], "application/vnd.nokia.n-gage.ac+xml": ["*ac"], "application/vnd.nokia.n-gage.data": ["ngdat"], "application/vnd.nokia.n-gage.symbian.install": ["n-gage"], "application/vnd.nokia.radio-preset": ["rpst"], "application/vnd.nokia.radio-presets": ["rpss"], "application/vnd.novadigm.edm": ["edm"], "application/vnd.novadigm.edx": ["edx"], "application/vnd.novadigm.ext": ["ext"], "application/vnd.oasis.opendocument.chart": ["odc"], "application/vnd.oasis.opendocument.chart-template": ["otc"], "application/vnd.oasis.opendocument.database": ["odb"], "application/vnd.oasis.opendocument.formula": ["odf"], "application/vnd.oasis.opendocument.formula-template": ["odft"], "application/vnd.oasis.opendocument.graphics": ["odg"], "application/vnd.oasis.opendocument.graphics-template": ["otg"], "application/vnd.oasis.opendocument.image": ["odi"], "application/vnd.oasis.opendocument.image-template": ["oti"], "application/vnd.oasis.opendocument.presentation": ["odp"], "application/vnd.oasis.opendocument.presentation-template": ["otp"], "application/vnd.oasis.opendocument.spreadsheet": ["ods"], "application/vnd.oasis.opendocument.spreadsheet-template": ["ots"], "application/vnd.oasis.opendocument.text": ["odt"], "application/vnd.oasis.opendocument.text-master": ["odm"], "application/vnd.oasis.opendocument.text-template": ["ott"], "application/vnd.oasis.opendocument.text-web": ["oth"], "application/vnd.olpc-sugar": ["xo"], "application/vnd.oma.dd2+xml": ["dd2"], "application/vnd.openblox.game+xml": ["obgx"], "application/vnd.openofficeorg.extension": ["oxt"], "application/vnd.openstreetmap.data+xml": ["osm"], "application/vnd.openxmlformats-officedocument.presentationml.presentation": ["pptx"], "application/vnd.openxmlformats-officedocument.presentationml.slide": ["sldx"], "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ["ppsx"], "application/vnd.openxmlformats-officedocument.presentationml.template": ["potx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.template": ["xltx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ["docx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.template": ["dotx"], "application/vnd.osgeo.mapguide.package": ["mgp"], "application/vnd.osgi.dp": ["dp"], "application/vnd.osgi.subsystem": ["esa"], "application/vnd.palm": ["pdb", "pqa", "oprc"], "application/vnd.pawaafile": ["paw"], "application/vnd.pg.format": ["str"], "application/vnd.pg.osasli": ["ei6"], "application/vnd.picsel": ["efif"], "application/vnd.pmi.widget": ["wg"], "application/vnd.pocketlearn": ["plf"], "application/vnd.powerbuilder6": ["pbd"], "application/vnd.previewsystems.box": ["box"], "application/vnd.proteus.magazine": ["mgz"], "application/vnd.publishare-delta-tree": ["qps"], "application/vnd.pvi.ptid1": ["ptid"], "application/vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], "application/vnd.rar": ["rar"], "application/vnd.realvnc.bed": ["bed"], "application/vnd.recordare.musicxml": ["mxl"], "application/vnd.recordare.musicxml+xml": ["musicxml"], "application/vnd.rig.cryptonote": ["cryptonote"], "application/vnd.rim.cod": ["cod"], "application/vnd.rn-realmedia": ["rm"], "application/vnd.rn-realmedia-vbr": ["rmvb"], "application/vnd.route66.link66+xml": ["link66"], "application/vnd.sailingtracker.track": ["st"], "application/vnd.seemail": ["see"], "application/vnd.sema": ["sema"], "application/vnd.semd": ["semd"], "application/vnd.semf": ["semf"], "application/vnd.shana.informed.formdata": ["ifm"], "application/vnd.shana.informed.formtemplate": ["itp"], "application/vnd.shana.informed.interchange": ["iif"], "application/vnd.shana.informed.package": ["ipk"], "application/vnd.simtech-mindmapper": ["twd", "twds"], "application/vnd.smaf": ["mmf"], "application/vnd.smart.teacher": ["teacher"], "application/vnd.software602.filler.form+xml": ["fo"], "application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"], "application/vnd.spotfire.dxp": ["dxp"], "application/vnd.spotfire.sfs": ["sfs"], "application/vnd.stardivision.calc": ["sdc"], "application/vnd.stardivision.draw": ["sda"], "application/vnd.stardivision.impress": ["sdd"], "application/vnd.stardivision.math": ["smf"], "application/vnd.stardivision.writer": ["sdw", "vor"], "application/vnd.stardivision.writer-global": ["sgl"], "application/vnd.stepmania.package": ["smzip"], "application/vnd.stepmania.stepchart": ["sm"], "application/vnd.sun.wadl+xml": ["wadl"], "application/vnd.sun.xml.calc": ["sxc"], "application/vnd.sun.xml.calc.template": ["stc"], "application/vnd.sun.xml.draw": ["sxd"], "application/vnd.sun.xml.draw.template": ["std"], "application/vnd.sun.xml.impress": ["sxi"], "application/vnd.sun.xml.impress.template": ["sti"], "application/vnd.sun.xml.math": ["sxm"], "application/vnd.sun.xml.writer": ["sxw"], "application/vnd.sun.xml.writer.global": ["sxg"], "application/vnd.sun.xml.writer.template": ["stw"], "application/vnd.sus-calendar": ["sus", "susp"], "application/vnd.svd": ["svd"], "application/vnd.symbian.install": ["sis", "sisx"], "application/vnd.syncml+xml": ["xsm"], "application/vnd.syncml.dm+wbxml": ["bdm"], "application/vnd.syncml.dm+xml": ["xdm"], "application/vnd.syncml.dmddf+xml": ["ddf"], "application/vnd.tao.intent-module-archive": ["tao"], "application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"], "application/vnd.tmobile-livetv": ["tmo"], "application/vnd.trid.tpt": ["tpt"], "application/vnd.triscape.mxs": ["mxs"], "application/vnd.trueapp": ["tra"], "application/vnd.ufdl": ["ufd", "ufdl"], "application/vnd.uiq.theme": ["utz"], "application/vnd.umajin": ["umj"], "application/vnd.unity": ["unityweb"], "application/vnd.uoml+xml": ["uoml"], "application/vnd.vcx": ["vcx"], "application/vnd.visio": ["vsd", "vst", "vss", "vsw"], "application/vnd.visionary": ["vis"], "application/vnd.vsf": ["vsf"], "application/vnd.wap.wbxml": ["wbxml"], "application/vnd.wap.wmlc": ["wmlc"], "application/vnd.wap.wmlscriptc": ["wmlsc"], "application/vnd.webturbo": ["wtb"], "application/vnd.wolfram.player": ["nbp"], "application/vnd.wordperfect": ["wpd"], "application/vnd.wqd": ["wqd"], "application/vnd.wt.stf": ["stf"], "application/vnd.xara": ["xar"], "application/vnd.xfdl": ["xfdl"], "application/vnd.yamaha.hv-dic": ["hvd"], "application/vnd.yamaha.hv-script": ["hvs"], "application/vnd.yamaha.hv-voice": ["hvp"], "application/vnd.yamaha.openscoreformat": ["osf"], "application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"], "application/vnd.yamaha.smaf-audio": ["saf"], "application/vnd.yamaha.smaf-phrase": ["spf"], "application/vnd.yellowriver-custom-menu": ["cmp"], "application/vnd.zul": ["zir", "zirz"], "application/vnd.zzazz.deck+xml": ["zaz"], "application/x-7z-compressed": ["7z"], "application/x-abiword": ["abw"], "application/x-ace-compressed": ["ace"], "application/x-apple-diskimage": ["*dmg"], "application/x-arj": ["arj"], "application/x-authorware-bin": ["aab", "x32", "u32", "vox"], "application/x-authorware-map": ["aam"], "application/x-authorware-seg": ["aas"], "application/x-bcpio": ["bcpio"], "application/x-bdoc": ["*bdoc"], "application/x-bittorrent": ["torrent"], "application/x-blorb": ["blb", "blorb"], "application/x-bzip": ["bz"], "application/x-bzip2": ["bz2", "boz"], "application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"], "application/x-cdlink": ["vcd"], "application/x-cfs-compressed": ["cfs"], "application/x-chat": ["chat"], "application/x-chess-pgn": ["pgn"], "application/x-chrome-extension": ["crx"], "application/x-cocoa": ["cco"], "application/x-conference": ["nsc"], "application/x-cpio": ["cpio"], "application/x-csh": ["csh"], "application/x-debian-package": ["*deb", "udeb"], "application/x-dgc-compressed": ["dgc"], "application/x-director": ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"], "application/x-doom": ["wad"], "application/x-dtbncx+xml": ["ncx"], "application/x-dtbook+xml": ["dtb"], "application/x-dtbresource+xml": ["res"], "application/x-dvi": ["dvi"], "application/x-envoy": ["evy"], "application/x-eva": ["eva"], "application/x-font-bdf": ["bdf"], "application/x-font-ghostscript": ["gsf"], "application/x-font-linux-psf": ["psf"], "application/x-font-pcf": ["pcf"], "application/x-font-snf": ["snf"], "application/x-font-type1": ["pfa", "pfb", "pfm", "afm"], "application/x-freearc": ["arc"], "application/x-futuresplash": ["spl"], "application/x-gca-compressed": ["gca"], "application/x-glulx": ["ulx"], "application/x-gnumeric": ["gnumeric"], "application/x-gramps-xml": ["gramps"], "application/x-gtar": ["gtar"], "application/x-hdf": ["hdf"], "application/x-httpd-php": ["php"], "application/x-install-instructions": ["install"], "application/x-iso9660-image": ["*iso"], "application/x-iwork-keynote-sffkey": ["*key"], "application/x-iwork-numbers-sffnumbers": ["*numbers"], "application/x-iwork-pages-sffpages": ["*pages"], "application/x-java-archive-diff": ["jardiff"], "application/x-java-jnlp-file": ["jnlp"], "application/x-keepass2": ["kdbx"], "application/x-latex": ["latex"], "application/x-lua-bytecode": ["luac"], "application/x-lzh-compressed": ["lzh", "lha"], "application/x-makeself": ["run"], "application/x-mie": ["mie"], "application/x-mobipocket-ebook": ["prc", "mobi"], "application/x-ms-application": ["application"], "application/x-ms-shortcut": ["lnk"], "application/x-ms-wmd": ["wmd"], "application/x-ms-wmz": ["wmz"], "application/x-ms-xbap": ["xbap"], "application/x-msaccess": ["mdb"], "application/x-msbinder": ["obd"], "application/x-mscardfile": ["crd"], "application/x-msclip": ["clp"], "application/x-msdos-program": ["*exe"], "application/x-msdownload": ["*exe", "*dll", "com", "bat", "*msi"], "application/x-msmediaview": ["mvb", "m13", "m14"], "application/x-msmetafile": ["*wmf", "*wmz", "*emf", "emz"], "application/x-msmoney": ["mny"], "application/x-mspublisher": ["pub"], "application/x-msschedule": ["scd"], "application/x-msterminal": ["trm"], "application/x-mswrite": ["wri"], "application/x-netcdf": ["nc", "cdf"], "application/x-ns-proxy-autoconfig": ["pac"], "application/x-nzb": ["nzb"], "application/x-perl": ["pl", "pm"], "application/x-pilot": ["*prc", "*pdb"], "application/x-pkcs12": ["p12", "pfx"], "application/x-pkcs7-certificates": ["p7b", "spc"], "application/x-pkcs7-certreqresp": ["p7r"], "application/x-rar-compressed": ["*rar"], "application/x-redhat-package-manager": ["rpm"], "application/x-research-info-systems": ["ris"], "application/x-sea": ["sea"], "application/x-sh": ["sh"], "application/x-shar": ["shar"], "application/x-shockwave-flash": ["swf"], "application/x-silverlight-app": ["xap"], "application/x-sql": ["sql"], "application/x-stuffit": ["sit"], "application/x-stuffitx": ["sitx"], "application/x-subrip": ["srt"], "application/x-sv4cpio": ["sv4cpio"], "application/x-sv4crc": ["sv4crc"], "application/x-t3vm-image": ["t3"], "application/x-tads": ["gam"], "application/x-tar": ["tar"], "application/x-tcl": ["tcl", "tk"], "application/x-tex": ["tex"], "application/x-tex-tfm": ["tfm"], "application/x-texinfo": ["texinfo", "texi"], "application/x-tgif": ["*obj"], "application/x-ustar": ["ustar"], "application/x-virtualbox-hdd": ["hdd"], "application/x-virtualbox-ova": ["ova"], "application/x-virtualbox-ovf": ["ovf"], "application/x-virtualbox-vbox": ["vbox"], "application/x-virtualbox-vbox-extpack": ["vbox-extpack"], "application/x-virtualbox-vdi": ["vdi"], "application/x-virtualbox-vhd": ["vhd"], "application/x-virtualbox-vmdk": ["vmdk"], "application/x-wais-source": ["src"], "application/x-web-app-manifest+json": ["webapp"], "application/x-x509-ca-cert": ["der", "crt", "pem"], "application/x-xfig": ["fig"], "application/x-xliff+xml": ["*xlf"], "application/x-xpinstall": ["xpi"], "application/x-xz": ["xz"], "application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], "audio/vnd.dece.audio": ["uva", "uvva"], "audio/vnd.digital-winds": ["eol"], "audio/vnd.dra": ["dra"], "audio/vnd.dts": ["dts"], "audio/vnd.dts.hd": ["dtshd"], "audio/vnd.lucent.voice": ["lvp"], "audio/vnd.ms-playready.media.pya": ["pya"], "audio/vnd.nuera.ecelp4800": ["ecelp4800"], "audio/vnd.nuera.ecelp7470": ["ecelp7470"], "audio/vnd.nuera.ecelp9600": ["ecelp9600"], "audio/vnd.rip": ["rip"], "audio/x-aac": ["aac"], "audio/x-aiff": ["aif", "aiff", "aifc"], "audio/x-caf": ["caf"], "audio/x-flac": ["flac"], "audio/x-m4a": ["*m4a"], "audio/x-matroska": ["mka"], "audio/x-mpegurl": ["m3u"], "audio/x-ms-wax": ["wax"], "audio/x-ms-wma": ["wma"], "audio/x-pn-realaudio": ["ram", "ra"], "audio/x-pn-realaudio-plugin": ["rmp"], "audio/x-realaudio": ["*ra"], "audio/x-wav": ["*wav"], "chemical/x-cdx": ["cdx"], "chemical/x-cif": ["cif"], "chemical/x-cmdf": ["cmdf"], "chemical/x-cml": ["cml"], "chemical/x-csml": ["csml"], "chemical/x-xyz": ["xyz"], "image/prs.btif": ["btif"], "image/prs.pti": ["pti"], "image/vnd.adobe.photoshop": ["psd"], "image/vnd.airzip.accelerator.azv": ["azv"], "image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"], "image/vnd.djvu": ["djvu", "djv"], "image/vnd.dvb.subtitle": ["*sub"], "image/vnd.dwg": ["dwg"], "image/vnd.dxf": ["dxf"], "image/vnd.fastbidsheet": ["fbs"], "image/vnd.fpx": ["fpx"], "image/vnd.fst": ["fst"], "image/vnd.fujixerox.edmics-mmr": ["mmr"], "image/vnd.fujixerox.edmics-rlc": ["rlc"], "image/vnd.microsoft.icon": ["ico"], "image/vnd.ms-dds": ["dds"], "image/vnd.ms-modi": ["mdi"], "image/vnd.ms-photo": ["wdp"], "image/vnd.net-fpx": ["npx"], "image/vnd.pco.b16": ["b16"], "image/vnd.tencent.tap": ["tap"], "image/vnd.valve.source.texture": ["vtf"], "image/vnd.wap.wbmp": ["wbmp"], "image/vnd.xiff": ["xif"], "image/vnd.zbrush.pcx": ["pcx"], "image/x-3ds": ["3ds"], "image/x-cmu-raster": ["ras"], "image/x-cmx": ["cmx"], "image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"], "image/x-icon": ["*ico"], "image/x-jng": ["jng"], "image/x-mrsid-image": ["sid"], "image/x-ms-bmp": ["*bmp"], "image/x-pcx": ["*pcx"], "image/x-pict": ["pic", "pct"], "image/x-portable-anymap": ["pnm"], "image/x-portable-bitmap": ["pbm"], "image/x-portable-graymap": ["pgm"], "image/x-portable-pixmap": ["ppm"], "image/x-rgb": ["rgb"], "image/x-tga": ["tga"], "image/x-xbitmap": ["xbm"], "image/x-xpixmap": ["xpm"], "image/x-xwindowdump": ["xwd"], "message/vnd.wfa.wsc": ["wsc"], "model/vnd.collada+xml": ["dae"], "model/vnd.dwf": ["dwf"], "model/vnd.gdl": ["gdl"], "model/vnd.gtw": ["gtw"], "model/vnd.mts": ["mts"], "model/vnd.opengex": ["ogex"], "model/vnd.parasolid.transmit.binary": ["x_b"], "model/vnd.parasolid.transmit.text": ["x_t"], "model/vnd.sap.vds": ["vds"], "model/vnd.usdz+zip": ["usdz"], "model/vnd.valve.source.compiled-map": ["bsp"], "model/vnd.vtu": ["vtu"], "text/prs.lines.tag": ["dsc"], "text/vnd.curl": ["curl"], "text/vnd.curl.dcurl": ["dcurl"], "text/vnd.curl.mcurl": ["mcurl"], "text/vnd.curl.scurl": ["scurl"], "text/vnd.dvb.subtitle": ["sub"], "text/vnd.fly": ["fly"], "text/vnd.fmi.flexstor": ["flx"], "text/vnd.graphviz": ["gv"], "text/vnd.in3d.3dml": ["3dml"], "text/vnd.in3d.spot": ["spot"], "text/vnd.sun.j2me.app-descriptor": ["jad"], "text/vnd.wap.wml": ["wml"], "text/vnd.wap.wmlscript": ["wmls"], "text/x-asm": ["s", "asm"], "text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], "text/x-component": ["htc"], "text/x-fortran": ["f", "for", "f77", "f90"], "text/x-handlebars-template": ["hbs"], "text/x-java-source": ["java"], "text/x-lua": ["lua"], "text/x-markdown": ["mkd"], "text/x-nfo": ["nfo"], "text/x-opml": ["opml"], "text/x-org": ["*org"], "text/x-pascal": ["p", "pas"], "text/x-processing": ["pde"], "text/x-sass": ["sass"], "text/x-scss": ["scss"], "text/x-setext": ["etx"], "text/x-sfv": ["sfv"], "text/x-suse-ymp": ["ymp"], "text/x-uuencode": ["uu"], "text/x-vcalendar": ["vcs"], "text/x-vcard": ["vcf"], "video/vnd.dece.hd": ["uvh", "uvvh"], "video/vnd.dece.mobile": ["uvm", "uvvm"], "video/vnd.dece.pd": ["uvp", "uvvp"], "video/vnd.dece.sd": ["uvs", "uvvs"], "video/vnd.dece.video": ["uvv", "uvvv"], "video/vnd.dvb.file": ["dvb"], "video/vnd.fvt": ["fvt"], "video/vnd.mpegurl": ["mxu", "m4u"], "video/vnd.ms-playready.media.pyv": ["pyv"], "video/vnd.uvvu.mp4": ["uvu", "uvvu"], "video/vnd.vivo": ["viv"], "video/x-f4v": ["f4v"], "video/x-fli": ["fli"], "video/x-flv": ["flv"], "video/x-m4v": ["m4v"], "video/x-matroska": ["mkv", "mk3d", "mks"], "video/x-mng": ["mng"], "video/x-ms-asf": ["asf", "asx"], "video/x-ms-vob": ["vob"], "video/x-ms-wm": ["wm"], "video/x-ms-wmv": ["wmv"], "video/x-ms-wmx": ["wmx"], "video/x-ms-wvx": ["wvx"], "video/x-msvideo": ["avi"], "video/x-sgi-movie": ["movie"], "video/x-smv": ["smv"], "x-conference/x-cooltalk": ["ice"] }; + } +}); + +// node_modules/mime/index.js +var require_mime = __commonJS({ + "node_modules/mime/index.js"(exports, module2) { + "use strict"; + var Mime = require_Mime(); + module2.exports = new Mime(require_standard(), require_other()); + } +}); + +// node_modules/mime-db/db.json +var require_db = __commonJS({ + "node_modules/mime-db/db.json"(exports, module2) { + module2.exports = { + "application/1d-interleaved-parityfec": { + source: "iana" + }, + "application/3gpdash-qoe-report+xml": { + source: "iana" + }, + "application/3gpp-ims+xml": { + source: "iana" + }, + "application/a2l": { + source: "iana" + }, + "application/activemessage": { + source: "iana" + }, + "application/alto-costmap+json": { + source: "iana", + compressible: true + }, + "application/alto-costmapfilter+json": { + source: "iana", + compressible: true + }, + "application/alto-directory+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointcost+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointcostparams+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointprop+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointpropparams+json": { + source: "iana", + compressible: true + }, + "application/alto-error+json": { + source: "iana", + compressible: true + }, + "application/alto-networkmap+json": { + source: "iana", + compressible: true + }, + "application/alto-networkmapfilter+json": { + source: "iana", + compressible: true + }, + "application/aml": { + source: "iana" + }, + "application/andrew-inset": { + source: "iana", + extensions: ["ez"] + }, + "application/applefile": { + source: "iana" + }, + "application/applixware": { + source: "apache", + extensions: ["aw"] + }, + "application/atf": { + source: "iana" + }, + "application/atfx": { + source: "iana" + }, + "application/atom+xml": { + source: "iana", + compressible: true, + extensions: ["atom"] + }, + "application/atomcat+xml": { + source: "iana", + extensions: ["atomcat"] + }, + "application/atomdeleted+xml": { + source: "iana" + }, + "application/atomicmail": { + source: "iana" + }, + "application/atomsvc+xml": { + source: "iana", + extensions: ["atomsvc"] + }, + "application/atxml": { + source: "iana" + }, + "application/auth-policy+xml": { + source: "iana" + }, + "application/bacnet-xdd+zip": { + source: "iana" + }, + "application/batch-smtp": { + source: "iana" + }, + "application/bdoc": { + compressible: false, + extensions: ["bdoc"] + }, + "application/beep+xml": { + source: "iana" + }, + "application/calendar+json": { + source: "iana", + compressible: true + }, + "application/calendar+xml": { + source: "iana" + }, + "application/call-completion": { + source: "iana" + }, + "application/cals-1840": { + source: "iana" + }, + "application/cbor": { + source: "iana" + }, + "application/ccmp+xml": { + source: "iana" + }, + "application/ccxml+xml": { + source: "iana", + extensions: ["ccxml"] + }, + "application/cdfx+xml": { + source: "iana" + }, + "application/cdmi-capability": { + source: "iana", + extensions: ["cdmia"] + }, + "application/cdmi-container": { + source: "iana", + extensions: ["cdmic"] + }, + "application/cdmi-domain": { + source: "iana", + extensions: ["cdmid"] + }, + "application/cdmi-object": { + source: "iana", + extensions: ["cdmio"] + }, + "application/cdmi-queue": { + source: "iana", + extensions: ["cdmiq"] + }, + "application/cdni": { + source: "iana" + }, + "application/cea": { + source: "iana" + }, + "application/cea-2018+xml": { + source: "iana" + }, + "application/cellml+xml": { + source: "iana" + }, + "application/cfw": { + source: "iana" + }, + "application/clue_info+xml": { + source: "iana" + }, + "application/cms": { + source: "iana" + }, + "application/cnrp+xml": { + source: "iana" + }, + "application/coap-group+json": { + source: "iana", + compressible: true + }, + "application/commonground": { + source: "iana" + }, + "application/conference-info+xml": { + source: "iana" + }, + "application/cpl+xml": { + source: "iana" + }, + "application/csrattrs": { + source: "iana" + }, + "application/csta+xml": { + source: "iana" + }, + "application/cstadata+xml": { + source: "iana" + }, + "application/csvm+json": { + source: "iana", + compressible: true + }, + "application/cu-seeme": { + source: "apache", + extensions: ["cu"] + }, + "application/cybercash": { + source: "iana" + }, + "application/dart": { + compressible: true + }, + "application/dash+xml": { + source: "iana", + extensions: ["mpd"] + }, + "application/dashdelta": { + source: "iana" + }, + "application/davmount+xml": { + source: "iana", + extensions: ["davmount"] + }, + "application/dca-rft": { + source: "iana" + }, + "application/dcd": { + source: "iana" + }, + "application/dec-dx": { + source: "iana" + }, + "application/dialog-info+xml": { + source: "iana" + }, + "application/dicom": { + source: "iana" + }, + "application/dicom+json": { + source: "iana", + compressible: true + }, + "application/dicom+xml": { + source: "iana" + }, + "application/dii": { + source: "iana" + }, + "application/dit": { + source: "iana" + }, + "application/dns": { + source: "iana" + }, + "application/docbook+xml": { + source: "apache", + extensions: ["dbk"] + }, + "application/dskpp+xml": { + source: "iana" + }, + "application/dssc+der": { + source: "iana", + extensions: ["dssc"] + }, + "application/dssc+xml": { + source: "iana", + extensions: ["xdssc"] + }, + "application/dvcs": { + source: "iana" + }, + "application/ecmascript": { + source: "iana", + compressible: true, + extensions: ["ecma"] + }, + "application/edi-consent": { + source: "iana" + }, + "application/edi-x12": { + source: "iana", + compressible: false + }, + "application/edifact": { + source: "iana", + compressible: false + }, + "application/efi": { + source: "iana" + }, + "application/emergencycalldata.comment+xml": { + source: "iana" + }, + "application/emergencycalldata.deviceinfo+xml": { + source: "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + source: "iana" + }, + "application/emergencycalldata.serviceinfo+xml": { + source: "iana" + }, + "application/emergencycalldata.subscriberinfo+xml": { + source: "iana" + }, + "application/emma+xml": { + source: "iana", + extensions: ["emma"] + }, + "application/emotionml+xml": { + source: "iana" + }, + "application/encaprtp": { + source: "iana" + }, + "application/epp+xml": { + source: "iana" + }, + "application/epub+zip": { + source: "iana", + extensions: ["epub"] + }, + "application/eshop": { + source: "iana" + }, + "application/exi": { + source: "iana", + extensions: ["exi"] + }, + "application/fastinfoset": { + source: "iana" + }, + "application/fastsoap": { + source: "iana" + }, + "application/fdt+xml": { + source: "iana" + }, + "application/fits": { + source: "iana" + }, + "application/font-sfnt": { + source: "iana" + }, + "application/font-tdpfr": { + source: "iana", + extensions: ["pfr"] + }, + "application/font-woff": { + source: "iana", + compressible: false, + extensions: ["woff"] + }, + "application/font-woff2": { + compressible: false, + extensions: ["woff2"] + }, + "application/framework-attributes+xml": { + source: "iana" + }, + "application/geo+json": { + source: "iana", + compressible: true + }, + "application/gml+xml": { + source: "apache", + extensions: ["gml"] + }, + "application/gpx+xml": { + source: "apache", + extensions: ["gpx"] + }, + "application/gxf": { + source: "apache", + extensions: ["gxf"] + }, + "application/gzip": { + source: "iana", + compressible: false + }, + "application/h224": { + source: "iana" + }, + "application/held+xml": { + source: "iana" + }, + "application/http": { + source: "iana" + }, + "application/hyperstudio": { + source: "iana", + extensions: ["stk"] + }, + "application/ibe-key-request+xml": { + source: "iana" + }, + "application/ibe-pkg-reply+xml": { + source: "iana" + }, + "application/ibe-pp-data": { + source: "iana" + }, + "application/iges": { + source: "iana" + }, + "application/im-iscomposing+xml": { + source: "iana" + }, + "application/index": { + source: "iana" + }, + "application/index.cmd": { + source: "iana" + }, + "application/index.obj": { + source: "iana" + }, + "application/index.response": { + source: "iana" + }, + "application/index.vnd": { + source: "iana" + }, + "application/inkml+xml": { + source: "iana", + extensions: ["ink", "inkml"] + }, + "application/iotp": { + source: "iana" + }, + "application/ipfix": { + source: "iana", + extensions: ["ipfix"] + }, + "application/ipp": { + source: "iana" + }, + "application/isup": { + source: "iana" + }, + "application/its+xml": { + source: "iana" + }, + "application/java-archive": { + source: "apache", + compressible: false, + extensions: ["jar", "war", "ear"] + }, + "application/java-serialized-object": { + source: "apache", + compressible: false, + extensions: ["ser"] + }, + "application/java-vm": { + source: "apache", + compressible: false, + extensions: ["class"] + }, + "application/javascript": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["js"] + }, + "application/jose": { + source: "iana" + }, + "application/jose+json": { + source: "iana", + compressible: true + }, + "application/jrd+json": { + source: "iana", + compressible: true + }, + "application/json": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["json", "map"] + }, + "application/json-patch+json": { + source: "iana", + compressible: true + }, + "application/json-seq": { + source: "iana" + }, + "application/json5": { + extensions: ["json5"] + }, + "application/jsonml+json": { + source: "apache", + compressible: true, + extensions: ["jsonml"] + }, + "application/jwk+json": { + source: "iana", + compressible: true + }, + "application/jwk-set+json": { + source: "iana", + compressible: true + }, + "application/jwt": { + source: "iana" + }, + "application/kpml-request+xml": { + source: "iana" + }, + "application/kpml-response+xml": { + source: "iana" + }, + "application/ld+json": { + source: "iana", + compressible: true, + extensions: ["jsonld"] + }, + "application/lgr+xml": { + source: "iana" + }, + "application/link-format": { + source: "iana" + }, + "application/load-control+xml": { + source: "iana" + }, + "application/lost+xml": { + source: "iana", + extensions: ["lostxml"] + }, + "application/lostsync+xml": { + source: "iana" + }, + "application/lxf": { + source: "iana" + }, + "application/mac-binhex40": { + source: "iana", + extensions: ["hqx"] + }, + "application/mac-compactpro": { + source: "apache", + extensions: ["cpt"] + }, + "application/macwriteii": { + source: "iana" + }, + "application/mads+xml": { + source: "iana", + extensions: ["mads"] + }, + "application/manifest+json": { + charset: "UTF-8", + compressible: true, + extensions: ["webmanifest"] + }, + "application/marc": { + source: "iana", + extensions: ["mrc"] + }, + "application/marcxml+xml": { + source: "iana", + extensions: ["mrcx"] + }, + "application/mathematica": { + source: "iana", + extensions: ["ma", "nb", "mb"] + }, + "application/mathml+xml": { + source: "iana", + extensions: ["mathml"] + }, + "application/mathml-content+xml": { + source: "iana" + }, + "application/mathml-presentation+xml": { + source: "iana" + }, + "application/mbms-associated-procedure-description+xml": { + source: "iana" + }, + "application/mbms-deregister+xml": { + source: "iana" + }, + "application/mbms-envelope+xml": { + source: "iana" + }, + "application/mbms-msk+xml": { + source: "iana" + }, + "application/mbms-msk-response+xml": { + source: "iana" + }, + "application/mbms-protection-description+xml": { + source: "iana" + }, + "application/mbms-reception-report+xml": { + source: "iana" + }, + "application/mbms-register+xml": { + source: "iana" + }, + "application/mbms-register-response+xml": { + source: "iana" + }, + "application/mbms-schedule+xml": { + source: "iana" + }, + "application/mbms-user-service-description+xml": { + source: "iana" + }, + "application/mbox": { + source: "iana", + extensions: ["mbox"] + }, + "application/media-policy-dataset+xml": { + source: "iana" + }, + "application/media_control+xml": { + source: "iana" + }, + "application/mediaservercontrol+xml": { + source: "iana", + extensions: ["mscml"] + }, + "application/merge-patch+json": { + source: "iana", + compressible: true + }, + "application/metalink+xml": { + source: "apache", + extensions: ["metalink"] + }, + "application/metalink4+xml": { + source: "iana", + extensions: ["meta4"] + }, + "application/mets+xml": { + source: "iana", + extensions: ["mets"] + }, + "application/mf4": { + source: "iana" + }, + "application/mikey": { + source: "iana" + }, + "application/mods+xml": { + source: "iana", + extensions: ["mods"] + }, + "application/moss-keys": { + source: "iana" + }, + "application/moss-signature": { + source: "iana" + }, + "application/mosskey-data": { + source: "iana" + }, + "application/mosskey-request": { + source: "iana" + }, + "application/mp21": { + source: "iana", + extensions: ["m21", "mp21"] + }, + "application/mp4": { + source: "iana", + extensions: ["mp4s", "m4p"] + }, + "application/mpeg4-generic": { + source: "iana" + }, + "application/mpeg4-iod": { + source: "iana" + }, + "application/mpeg4-iod-xmt": { + source: "iana" + }, + "application/mrb-consumer+xml": { + source: "iana" + }, + "application/mrb-publish+xml": { + source: "iana" + }, + "application/msc-ivr+xml": { + source: "iana" + }, + "application/msc-mixer+xml": { + source: "iana" + }, + "application/msword": { + source: "iana", + compressible: false, + extensions: ["doc", "dot"] + }, + "application/mxf": { + source: "iana", + extensions: ["mxf"] + }, + "application/nasdata": { + source: "iana" + }, + "application/news-checkgroups": { + source: "iana" + }, + "application/news-groupinfo": { + source: "iana" + }, + "application/news-transmission": { + source: "iana" + }, + "application/nlsml+xml": { + source: "iana" + }, + "application/nss": { + source: "iana" + }, + "application/ocsp-request": { + source: "iana" + }, + "application/ocsp-response": { + source: "iana" + }, + "application/octet-stream": { + source: "iana", + compressible: false, + extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] + }, + "application/oda": { + source: "iana", + extensions: ["oda"] + }, + "application/odx": { + source: "iana" + }, + "application/oebps-package+xml": { + source: "iana", + extensions: ["opf"] + }, + "application/ogg": { + source: "iana", + compressible: false, + extensions: ["ogx"] + }, + "application/omdoc+xml": { + source: "apache", + extensions: ["omdoc"] + }, + "application/onenote": { + source: "apache", + extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] + }, + "application/oxps": { + source: "iana", + extensions: ["oxps"] + }, + "application/p2p-overlay+xml": { + source: "iana" + }, + "application/parityfec": { + source: "iana" + }, + "application/patch-ops-error+xml": { + source: "iana", + extensions: ["xer"] + }, + "application/pdf": { + source: "iana", + compressible: false, + extensions: ["pdf"] + }, + "application/pdx": { + source: "iana" + }, + "application/pgp-encrypted": { + source: "iana", + compressible: false, + extensions: ["pgp"] + }, + "application/pgp-keys": { + source: "iana" + }, + "application/pgp-signature": { + source: "iana", + extensions: ["asc", "sig"] + }, + "application/pics-rules": { + source: "apache", + extensions: ["prf"] + }, + "application/pidf+xml": { + source: "iana" + }, + "application/pidf-diff+xml": { + source: "iana" + }, + "application/pkcs10": { + source: "iana", + extensions: ["p10"] + }, + "application/pkcs12": { + source: "iana" + }, + "application/pkcs7-mime": { + source: "iana", + extensions: ["p7m", "p7c"] + }, + "application/pkcs7-signature": { + source: "iana", + extensions: ["p7s"] + }, + "application/pkcs8": { + source: "iana", + extensions: ["p8"] + }, + "application/pkix-attr-cert": { + source: "iana", + extensions: ["ac"] + }, + "application/pkix-cert": { + source: "iana", + extensions: ["cer"] + }, + "application/pkix-crl": { + source: "iana", + extensions: ["crl"] + }, + "application/pkix-pkipath": { + source: "iana", + extensions: ["pkipath"] + }, + "application/pkixcmp": { + source: "iana", + extensions: ["pki"] + }, + "application/pls+xml": { + source: "iana", + extensions: ["pls"] + }, + "application/poc-settings+xml": { + source: "iana" + }, + "application/postscript": { + source: "iana", + compressible: true, + extensions: ["ai", "eps", "ps"] + }, + "application/ppsp-tracker+json": { + source: "iana", + compressible: true + }, + "application/problem+json": { + source: "iana", + compressible: true + }, + "application/problem+xml": { + source: "iana" + }, + "application/provenance+xml": { + source: "iana" + }, + "application/prs.alvestrand.titrax-sheet": { + source: "iana" + }, + "application/prs.cww": { + source: "iana", + extensions: ["cww"] + }, + "application/prs.hpub+zip": { + source: "iana" + }, + "application/prs.nprend": { + source: "iana" + }, + "application/prs.plucker": { + source: "iana" + }, + "application/prs.rdf-xml-crypt": { + source: "iana" + }, + "application/prs.xsf+xml": { + source: "iana" + }, + "application/pskc+xml": { + source: "iana", + extensions: ["pskcxml"] + }, + "application/qsig": { + source: "iana" + }, + "application/raptorfec": { + source: "iana" + }, + "application/rdap+json": { + source: "iana", + compressible: true + }, + "application/rdf+xml": { + source: "iana", + compressible: true, + extensions: ["rdf"] + }, + "application/reginfo+xml": { + source: "iana", + extensions: ["rif"] + }, + "application/relax-ng-compact-syntax": { + source: "iana", + extensions: ["rnc"] + }, + "application/remote-printing": { + source: "iana" + }, + "application/reputon+json": { + source: "iana", + compressible: true + }, + "application/resource-lists+xml": { + source: "iana", + extensions: ["rl"] + }, + "application/resource-lists-diff+xml": { + source: "iana", + extensions: ["rld"] + }, + "application/rfc+xml": { + source: "iana" + }, + "application/riscos": { + source: "iana" + }, + "application/rlmi+xml": { + source: "iana" + }, + "application/rls-services+xml": { + source: "iana", + extensions: ["rs"] + }, + "application/rpki-ghostbusters": { + source: "iana", + extensions: ["gbr"] + }, + "application/rpki-manifest": { + source: "iana", + extensions: ["mft"] + }, + "application/rpki-roa": { + source: "iana", + extensions: ["roa"] + }, + "application/rpki-updown": { + source: "iana" + }, + "application/rsd+xml": { + source: "apache", + extensions: ["rsd"] + }, + "application/rss+xml": { + source: "apache", + compressible: true, + extensions: ["rss"] + }, + "application/rtf": { + source: "iana", + compressible: true, + extensions: ["rtf"] + }, + "application/rtploopback": { + source: "iana" + }, + "application/rtx": { + source: "iana" + }, + "application/samlassertion+xml": { + source: "iana" + }, + "application/samlmetadata+xml": { + source: "iana" + }, + "application/sbml+xml": { + source: "iana", + extensions: ["sbml"] + }, + "application/scaip+xml": { + source: "iana" + }, + "application/scim+json": { + source: "iana", + compressible: true + }, + "application/scvp-cv-request": { + source: "iana", + extensions: ["scq"] + }, + "application/scvp-cv-response": { + source: "iana", + extensions: ["scs"] + }, + "application/scvp-vp-request": { + source: "iana", + extensions: ["spq"] + }, + "application/scvp-vp-response": { + source: "iana", + extensions: ["spp"] + }, + "application/sdp": { + source: "iana", + extensions: ["sdp"] + }, + "application/sep+xml": { + source: "iana" + }, + "application/sep-exi": { + source: "iana" + }, + "application/session-info": { + source: "iana" + }, + "application/set-payment": { + source: "iana" + }, + "application/set-payment-initiation": { + source: "iana", + extensions: ["setpay"] + }, + "application/set-registration": { + source: "iana" + }, + "application/set-registration-initiation": { + source: "iana", + extensions: ["setreg"] + }, + "application/sgml": { + source: "iana" + }, + "application/sgml-open-catalog": { + source: "iana" + }, + "application/shf+xml": { + source: "iana", + extensions: ["shf"] + }, + "application/sieve": { + source: "iana" + }, + "application/simple-filter+xml": { + source: "iana" + }, + "application/simple-message-summary": { + source: "iana" + }, + "application/simplesymbolcontainer": { + source: "iana" + }, + "application/slate": { + source: "iana" + }, + "application/smil": { + source: "iana" + }, + "application/smil+xml": { + source: "iana", + extensions: ["smi", "smil"] + }, + "application/smpte336m": { + source: "iana" + }, + "application/soap+fastinfoset": { + source: "iana" + }, + "application/soap+xml": { + source: "iana", + compressible: true + }, + "application/sparql-query": { + source: "iana", + extensions: ["rq"] + }, + "application/sparql-results+xml": { + source: "iana", + extensions: ["srx"] + }, + "application/spirits-event+xml": { + source: "iana" + }, + "application/sql": { + source: "iana" + }, + "application/srgs": { + source: "iana", + extensions: ["gram"] + }, + "application/srgs+xml": { + source: "iana", + extensions: ["grxml"] + }, + "application/sru+xml": { + source: "iana", + extensions: ["sru"] + }, + "application/ssdl+xml": { + source: "apache", + extensions: ["ssdl"] + }, + "application/ssml+xml": { + source: "iana", + extensions: ["ssml"] + }, + "application/tamp-apex-update": { + source: "iana" + }, + "application/tamp-apex-update-confirm": { + source: "iana" + }, + "application/tamp-community-update": { + source: "iana" + }, + "application/tamp-community-update-confirm": { + source: "iana" + }, + "application/tamp-error": { + source: "iana" + }, + "application/tamp-sequence-adjust": { + source: "iana" + }, + "application/tamp-sequence-adjust-confirm": { + source: "iana" + }, + "application/tamp-status-query": { + source: "iana" + }, + "application/tamp-status-response": { + source: "iana" + }, + "application/tamp-update": { + source: "iana" + }, + "application/tamp-update-confirm": { + source: "iana" + }, + "application/tar": { + compressible: true + }, + "application/tei+xml": { + source: "iana", + extensions: ["tei", "teicorpus"] + }, + "application/thraud+xml": { + source: "iana", + extensions: ["tfi"] + }, + "application/timestamp-query": { + source: "iana" + }, + "application/timestamp-reply": { + source: "iana" + }, + "application/timestamped-data": { + source: "iana", + extensions: ["tsd"] + }, + "application/ttml+xml": { + source: "iana" + }, + "application/tve-trigger": { + source: "iana" + }, + "application/ulpfec": { + source: "iana" + }, + "application/urc-grpsheet+xml": { + source: "iana" + }, + "application/urc-ressheet+xml": { + source: "iana" + }, + "application/urc-targetdesc+xml": { + source: "iana" + }, + "application/urc-uisocketdesc+xml": { + source: "iana" + }, + "application/vcard+json": { + source: "iana", + compressible: true + }, + "application/vcard+xml": { + source: "iana" + }, + "application/vemmi": { + source: "iana" + }, + "application/vividence.scriptfile": { + source: "apache" + }, + "application/vnd.3gpp-prose+xml": { + source: "iana" + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + source: "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + source: "iana" + }, + "application/vnd.3gpp.bsf+xml": { + source: "iana" + }, + "application/vnd.3gpp.mid-call+xml": { + source: "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + source: "iana", + extensions: ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + source: "iana", + extensions: ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + source: "iana", + extensions: ["pvb"] + }, + "application/vnd.3gpp.sms": { + source: "iana" + }, + "application/vnd.3gpp.sms+xml": { + source: "iana" + }, + "application/vnd.3gpp.srvcc-ext+xml": { + source: "iana" + }, + "application/vnd.3gpp.srvcc-info+xml": { + source: "iana" + }, + "application/vnd.3gpp.state-and-event-info+xml": { + source: "iana" + }, + "application/vnd.3gpp.ussd+xml": { + source: "iana" + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + source: "iana" + }, + "application/vnd.3gpp2.sms": { + source: "iana" + }, + "application/vnd.3gpp2.tcap": { + source: "iana", + extensions: ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + source: "iana" + }, + "application/vnd.3m.post-it-notes": { + source: "iana", + extensions: ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + source: "iana", + extensions: ["aso"] + }, + "application/vnd.accpac.simply.imp": { + source: "iana", + extensions: ["imp"] + }, + "application/vnd.acucobol": { + source: "iana", + extensions: ["acu"] + }, + "application/vnd.acucorp": { + source: "iana", + extensions: ["atc", "acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + source: "apache", + extensions: ["air"] + }, + "application/vnd.adobe.flash.movie": { + source: "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + source: "iana", + extensions: ["fcdt"] + }, + "application/vnd.adobe.fxp": { + source: "iana", + extensions: ["fxp", "fxpl"] + }, + "application/vnd.adobe.partial-upload": { + source: "iana" + }, + "application/vnd.adobe.xdp+xml": { + source: "iana", + extensions: ["xdp"] + }, + "application/vnd.adobe.xfdf": { + source: "iana", + extensions: ["xfdf"] + }, + "application/vnd.aether.imp": { + source: "iana" + }, + "application/vnd.ah-barcode": { + source: "iana" + }, + "application/vnd.ahead.space": { + source: "iana", + extensions: ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + source: "iana", + extensions: ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + source: "iana", + extensions: ["azs"] + }, + "application/vnd.amazon.ebook": { + source: "apache", + extensions: ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + source: "iana" + }, + "application/vnd.americandynamics.acc": { + source: "iana", + extensions: ["acc"] + }, + "application/vnd.amiga.ami": { + source: "iana", + extensions: ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + source: "iana" + }, + "application/vnd.android.package-archive": { + source: "apache", + compressible: false, + extensions: ["apk"] + }, + "application/vnd.anki": { + source: "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + source: "iana", + extensions: ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + source: "apache", + extensions: ["fti"] + }, + "application/vnd.antix.game-component": { + source: "iana", + extensions: ["atx"] + }, + "application/vnd.apache.thrift.binary": { + source: "iana" + }, + "application/vnd.apache.thrift.compact": { + source: "iana" + }, + "application/vnd.apache.thrift.json": { + source: "iana" + }, + "application/vnd.api+json": { + source: "iana", + compressible: true + }, + "application/vnd.apple.installer+xml": { + source: "iana", + extensions: ["mpkg"] + }, + "application/vnd.apple.mpegurl": { + source: "iana", + extensions: ["m3u8"] + }, + "application/vnd.apple.pkpass": { + compressible: false, + extensions: ["pkpass"] + }, + "application/vnd.arastra.swi": { + source: "iana" + }, + "application/vnd.aristanetworks.swi": { + source: "iana", + extensions: ["swi"] + }, + "application/vnd.artsquare": { + source: "iana" + }, + "application/vnd.astraea-software.iota": { + source: "iana", + extensions: ["iota"] + }, + "application/vnd.audiograph": { + source: "iana", + extensions: ["aep"] + }, + "application/vnd.autopackage": { + source: "iana" + }, + "application/vnd.avistar+xml": { + source: "iana" + }, + "application/vnd.balsamiq.bmml+xml": { + source: "iana" + }, + "application/vnd.balsamiq.bmpr": { + source: "iana" + }, + "application/vnd.bekitzur-stech+json": { + source: "iana", + compressible: true + }, + "application/vnd.biopax.rdf+xml": { + source: "iana" + }, + "application/vnd.blueice.multipass": { + source: "iana", + extensions: ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + source: "iana" + }, + "application/vnd.bluetooth.le.oob": { + source: "iana" + }, + "application/vnd.bmi": { + source: "iana", + extensions: ["bmi"] + }, + "application/vnd.businessobjects": { + source: "iana", + extensions: ["rep"] + }, + "application/vnd.cab-jscript": { + source: "iana" + }, + "application/vnd.canon-cpdl": { + source: "iana" + }, + "application/vnd.canon-lips": { + source: "iana" + }, + "application/vnd.cendio.thinlinc.clientconf": { + source: "iana" + }, + "application/vnd.century-systems.tcp_stream": { + source: "iana" + }, + "application/vnd.chemdraw+xml": { + source: "iana", + extensions: ["cdxml"] + }, + "application/vnd.chess-pgn": { + source: "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + source: "iana", + extensions: ["mmd"] + }, + "application/vnd.cinderella": { + source: "iana", + extensions: ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + source: "iana" + }, + "application/vnd.citationstyles.style+xml": { + source: "iana" + }, + "application/vnd.claymore": { + source: "iana", + extensions: ["cla"] + }, + "application/vnd.cloanto.rp9": { + source: "iana", + extensions: ["rp9"] + }, + "application/vnd.clonk.c4group": { + source: "iana", + extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + source: "iana", + extensions: ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + source: "iana", + extensions: ["c11amz"] + }, + "application/vnd.coffeescript": { + source: "iana" + }, + "application/vnd.collection+json": { + source: "iana", + compressible: true + }, + "application/vnd.collection.doc+json": { + source: "iana", + compressible: true + }, + "application/vnd.collection.next+json": { + source: "iana", + compressible: true + }, + "application/vnd.comicbook+zip": { + source: "iana" + }, + "application/vnd.commerce-battelle": { + source: "iana" + }, + "application/vnd.commonspace": { + source: "iana", + extensions: ["csp"] + }, + "application/vnd.contact.cmsg": { + source: "iana", + extensions: ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + source: "iana", + compressible: true + }, + "application/vnd.cosmocaller": { + source: "iana", + extensions: ["cmc"] + }, + "application/vnd.crick.clicker": { + source: "iana", + extensions: ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + source: "iana", + extensions: ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + source: "iana", + extensions: ["clkp"] + }, + "application/vnd.crick.clicker.template": { + source: "iana", + extensions: ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + source: "iana", + extensions: ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + source: "iana", + extensions: ["wbs"] + }, + "application/vnd.ctc-posml": { + source: "iana", + extensions: ["pml"] + }, + "application/vnd.ctct.ws+xml": { + source: "iana" + }, + "application/vnd.cups-pdf": { + source: "iana" + }, + "application/vnd.cups-postscript": { + source: "iana" + }, + "application/vnd.cups-ppd": { + source: "iana", + extensions: ["ppd"] + }, + "application/vnd.cups-raster": { + source: "iana" + }, + "application/vnd.cups-raw": { + source: "iana" + }, + "application/vnd.curl": { + source: "iana" + }, + "application/vnd.curl.car": { + source: "apache", + extensions: ["car"] + }, + "application/vnd.curl.pcurl": { + source: "apache", + extensions: ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + source: "iana" + }, + "application/vnd.cybank": { + source: "iana" + }, + "application/vnd.d2l.coursepackage1p0+zip": { + source: "iana" + }, + "application/vnd.dart": { + source: "iana", + compressible: true, + extensions: ["dart"] + }, + "application/vnd.data-vision.rdz": { + source: "iana", + extensions: ["rdz"] + }, + "application/vnd.debian.binary-package": { + source: "iana" + }, + "application/vnd.dece.data": { + source: "iana", + extensions: ["uvf", "uvvf", "uvd", "uvvd"] + }, + "application/vnd.dece.ttml+xml": { + source: "iana", + extensions: ["uvt", "uvvt"] + }, + "application/vnd.dece.unspecified": { + source: "iana", + extensions: ["uvx", "uvvx"] + }, + "application/vnd.dece.zip": { + source: "iana", + extensions: ["uvz", "uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + source: "iana", + extensions: ["fe_launch"] + }, + "application/vnd.desmume-movie": { + source: "iana" + }, + "application/vnd.desmume.movie": { + source: "apache" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + source: "iana" + }, + "application/vnd.dm.delegation+xml": { + source: "iana" + }, + "application/vnd.dna": { + source: "iana", + extensions: ["dna"] + }, + "application/vnd.document+json": { + source: "iana", + compressible: true + }, + "application/vnd.dolby.mlp": { + source: "apache", + extensions: ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + source: "iana" + }, + "application/vnd.dolby.mobile.2": { + source: "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + source: "iana" + }, + "application/vnd.dpgraph": { + source: "iana", + extensions: ["dpg"] + }, + "application/vnd.dreamfactory": { + source: "iana", + extensions: ["dfac"] + }, + "application/vnd.drive+json": { + source: "iana", + compressible: true + }, + "application/vnd.ds-keypoint": { + source: "apache", + extensions: ["kpxx"] + }, + "application/vnd.dtg.local": { + source: "iana" + }, + "application/vnd.dtg.local.flash": { + source: "iana" + }, + "application/vnd.dtg.local.html": { + source: "iana" + }, + "application/vnd.dvb.ait": { + source: "iana", + extensions: ["ait"] + }, + "application/vnd.dvb.dvbj": { + source: "iana" + }, + "application/vnd.dvb.esgcontainer": { + source: "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + source: "iana" + }, + "application/vnd.dvb.ipdcroaming": { + source: "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + source: "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + source: "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-container+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-generic+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + source: "iana" + }, + "application/vnd.dvb.notif-init+xml": { + source: "iana" + }, + "application/vnd.dvb.pfr": { + source: "iana" + }, + "application/vnd.dvb.service": { + source: "iana", + extensions: ["svc"] + }, + "application/vnd.dxr": { + source: "iana" + }, + "application/vnd.dynageo": { + source: "iana", + extensions: ["geo"] + }, + "application/vnd.dzr": { + source: "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + source: "iana" + }, + "application/vnd.ecdis-update": { + source: "iana" + }, + "application/vnd.ecowin.chart": { + source: "iana", + extensions: ["mag"] + }, + "application/vnd.ecowin.filerequest": { + source: "iana" + }, + "application/vnd.ecowin.fileupdate": { + source: "iana" + }, + "application/vnd.ecowin.series": { + source: "iana" + }, + "application/vnd.ecowin.seriesrequest": { + source: "iana" + }, + "application/vnd.ecowin.seriesupdate": { + source: "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + source: "iana" + }, + "application/vnd.enliven": { + source: "iana", + extensions: ["nml"] + }, + "application/vnd.enphase.envoy": { + source: "iana" + }, + "application/vnd.eprints.data+xml": { + source: "iana" + }, + "application/vnd.epson.esf": { + source: "iana", + extensions: ["esf"] + }, + "application/vnd.epson.msf": { + source: "iana", + extensions: ["msf"] + }, + "application/vnd.epson.quickanime": { + source: "iana", + extensions: ["qam"] + }, + "application/vnd.epson.salt": { + source: "iana", + extensions: ["slt"] + }, + "application/vnd.epson.ssf": { + source: "iana", + extensions: ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + source: "iana" + }, + "application/vnd.espass-espass+zip": { + source: "iana" + }, + "application/vnd.eszigno3+xml": { + source: "iana", + extensions: ["es3", "et3"] + }, + "application/vnd.etsi.aoc+xml": { + source: "iana" + }, + "application/vnd.etsi.asic-e+zip": { + source: "iana" + }, + "application/vnd.etsi.asic-s+zip": { + source: "iana" + }, + "application/vnd.etsi.cug+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvcommand+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvdiscovery+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvprofile+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvsad-bc+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvsad-cod+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvservice+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvsync+xml": { + source: "iana" + }, + "application/vnd.etsi.iptvueprofile+xml": { + source: "iana" + }, + "application/vnd.etsi.mcid+xml": { + source: "iana" + }, + "application/vnd.etsi.mheg5": { + source: "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + source: "iana" + }, + "application/vnd.etsi.pstn+xml": { + source: "iana" + }, + "application/vnd.etsi.sci+xml": { + source: "iana" + }, + "application/vnd.etsi.simservs+xml": { + source: "iana" + }, + "application/vnd.etsi.timestamp-token": { + source: "iana" + }, + "application/vnd.etsi.tsl+xml": { + source: "iana" + }, + "application/vnd.etsi.tsl.der": { + source: "iana" + }, + "application/vnd.eudora.data": { + source: "iana" + }, + "application/vnd.ezpix-album": { + source: "iana", + extensions: ["ez2"] + }, + "application/vnd.ezpix-package": { + source: "iana", + extensions: ["ez3"] + }, + "application/vnd.f-secure.mobile": { + source: "iana" + }, + "application/vnd.fastcopy-disk-image": { + source: "iana" + }, + "application/vnd.fdf": { + source: "iana", + extensions: ["fdf"] + }, + "application/vnd.fdsn.mseed": { + source: "iana", + extensions: ["mseed"] + }, + "application/vnd.fdsn.seed": { + source: "iana", + extensions: ["seed", "dataless"] + }, + "application/vnd.ffsns": { + source: "iana" + }, + "application/vnd.filmit.zfc": { + source: "iana" + }, + "application/vnd.fints": { + source: "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + source: "iana" + }, + "application/vnd.flographit": { + source: "iana", + extensions: ["gph"] + }, + "application/vnd.fluxtime.clip": { + source: "iana", + extensions: ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + source: "iana" + }, + "application/vnd.framemaker": { + source: "iana", + extensions: ["fm", "frame", "maker", "book"] + }, + "application/vnd.frogans.fnc": { + source: "iana", + extensions: ["fnc"] + }, + "application/vnd.frogans.ltf": { + source: "iana", + extensions: ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + source: "iana", + extensions: ["fsc"] + }, + "application/vnd.fujitsu.oasys": { + source: "iana", + extensions: ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + source: "iana", + extensions: ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + source: "iana", + extensions: ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + source: "iana", + extensions: ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + source: "iana", + extensions: ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + source: "iana" + }, + "application/vnd.fujixerox.art4": { + source: "iana" + }, + "application/vnd.fujixerox.ddd": { + source: "iana", + extensions: ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + source: "iana", + extensions: ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + source: "iana", + extensions: ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + source: "iana" + }, + "application/vnd.fujixerox.hbpl": { + source: "iana" + }, + "application/vnd.fut-misnet": { + source: "iana" + }, + "application/vnd.fuzzysheet": { + source: "iana", + extensions: ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + source: "iana", + extensions: ["txd"] + }, + "application/vnd.geo+json": { + source: "iana", + compressible: true + }, + "application/vnd.geocube+xml": { + source: "iana" + }, + "application/vnd.geogebra.file": { + source: "iana", + extensions: ["ggb"] + }, + "application/vnd.geogebra.tool": { + source: "iana", + extensions: ["ggt"] + }, + "application/vnd.geometry-explorer": { + source: "iana", + extensions: ["gex", "gre"] + }, + "application/vnd.geonext": { + source: "iana", + extensions: ["gxt"] + }, + "application/vnd.geoplan": { + source: "iana", + extensions: ["g2w"] + }, + "application/vnd.geospace": { + source: "iana", + extensions: ["g3w"] + }, + "application/vnd.gerber": { + source: "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + source: "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + source: "iana" + }, + "application/vnd.gmx": { + source: "iana", + extensions: ["gmx"] + }, + "application/vnd.google-apps.document": { + compressible: false, + extensions: ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + compressible: false, + extensions: ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + compressible: false, + extensions: ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + source: "iana", + compressible: true, + extensions: ["kml"] + }, + "application/vnd.google-earth.kmz": { + source: "iana", + compressible: false, + extensions: ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + source: "iana" + }, + "application/vnd.gov.sk.e-form+zip": { + source: "iana" + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + source: "iana" + }, + "application/vnd.grafeq": { + source: "iana", + extensions: ["gqf", "gqs"] + }, + "application/vnd.gridmp": { + source: "iana" + }, + "application/vnd.groove-account": { + source: "iana", + extensions: ["gac"] + }, + "application/vnd.groove-help": { + source: "iana", + extensions: ["ghf"] + }, + "application/vnd.groove-identity-message": { + source: "iana", + extensions: ["gim"] + }, + "application/vnd.groove-injector": { + source: "iana", + extensions: ["grv"] + }, + "application/vnd.groove-tool-message": { + source: "iana", + extensions: ["gtm"] + }, + "application/vnd.groove-tool-template": { + source: "iana", + extensions: ["tpl"] + }, + "application/vnd.groove-vcard": { + source: "iana", + extensions: ["vcg"] + }, + "application/vnd.hal+json": { + source: "iana", + compressible: true + }, + "application/vnd.hal+xml": { + source: "iana", + extensions: ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + source: "iana", + extensions: ["zmm"] + }, + "application/vnd.hbci": { + source: "iana", + extensions: ["hbci"] + }, + "application/vnd.hcl-bireports": { + source: "iana" + }, + "application/vnd.hdt": { + source: "iana" + }, + "application/vnd.heroku+json": { + source: "iana", + compressible: true + }, + "application/vnd.hhe.lesson-player": { + source: "iana", + extensions: ["les"] + }, + "application/vnd.hp-hpgl": { + source: "iana", + extensions: ["hpgl"] + }, + "application/vnd.hp-hpid": { + source: "iana", + extensions: ["hpid"] + }, + "application/vnd.hp-hps": { + source: "iana", + extensions: ["hps"] + }, + "application/vnd.hp-jlyt": { + source: "iana", + extensions: ["jlt"] + }, + "application/vnd.hp-pcl": { + source: "iana", + extensions: ["pcl"] + }, + "application/vnd.hp-pclxl": { + source: "iana", + extensions: ["pclxl"] + }, + "application/vnd.httphone": { + source: "iana" + }, + "application/vnd.hydrostatix.sof-data": { + source: "iana", + extensions: ["sfd-hdstx"] + }, + "application/vnd.hyperdrive+json": { + source: "iana", + compressible: true + }, + "application/vnd.hzn-3d-crossword": { + source: "iana" + }, + "application/vnd.ibm.afplinedata": { + source: "iana" + }, + "application/vnd.ibm.electronic-media": { + source: "iana" + }, + "application/vnd.ibm.minipay": { + source: "iana", + extensions: ["mpy"] + }, + "application/vnd.ibm.modcap": { + source: "iana", + extensions: ["afp", "listafp", "list3820"] + }, + "application/vnd.ibm.rights-management": { + source: "iana", + extensions: ["irm"] + }, + "application/vnd.ibm.secure-container": { + source: "iana", + extensions: ["sc"] + }, + "application/vnd.iccprofile": { + source: "iana", + extensions: ["icc", "icm"] + }, + "application/vnd.ieee.1905": { + source: "iana" + }, + "application/vnd.igloader": { + source: "iana", + extensions: ["igl"] + }, + "application/vnd.immervision-ivp": { + source: "iana", + extensions: ["ivp"] + }, + "application/vnd.immervision-ivu": { + source: "iana", + extensions: ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + source: "iana" + }, + "application/vnd.ims.imsccv1p2": { + source: "iana" + }, + "application/vnd.ims.imsccv1p3": { + source: "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + source: "iana", + compressible: true + }, + "application/vnd.informedcontrol.rms+xml": { + source: "iana" + }, + "application/vnd.informix-visionary": { + source: "iana" + }, + "application/vnd.infotech.project": { + source: "iana" + }, + "application/vnd.infotech.project+xml": { + source: "iana" + }, + "application/vnd.innopath.wamp.notification": { + source: "iana" + }, + "application/vnd.insors.igm": { + source: "iana", + extensions: ["igm"] + }, + "application/vnd.intercon.formnet": { + source: "iana", + extensions: ["xpw", "xpx"] + }, + "application/vnd.intergeo": { + source: "iana", + extensions: ["i2g"] + }, + "application/vnd.intertrust.digibox": { + source: "iana" + }, + "application/vnd.intertrust.nncp": { + source: "iana" + }, + "application/vnd.intu.qbo": { + source: "iana", + extensions: ["qbo"] + }, + "application/vnd.intu.qfx": { + source: "iana", + extensions: ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.conceptitem+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.newsitem+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.newsmessage+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.packageitem+xml": { + source: "iana" + }, + "application/vnd.iptc.g2.planningitem+xml": { + source: "iana" + }, + "application/vnd.ipunplugged.rcprofile": { + source: "iana", + extensions: ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + source: "iana", + extensions: ["irp"] + }, + "application/vnd.is-xpr": { + source: "iana", + extensions: ["xpr"] + }, + "application/vnd.isac.fcs": { + source: "iana", + extensions: ["fcs"] + }, + "application/vnd.jam": { + source: "iana", + extensions: ["jam"] + }, + "application/vnd.japannet-directory-service": { + source: "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + source: "iana" + }, + "application/vnd.japannet-payment-wakeup": { + source: "iana" + }, + "application/vnd.japannet-registration": { + source: "iana" + }, + "application/vnd.japannet-registration-wakeup": { + source: "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + source: "iana" + }, + "application/vnd.japannet-verification": { + source: "iana" + }, + "application/vnd.japannet-verification-wakeup": { + source: "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + source: "iana", + extensions: ["rms"] + }, + "application/vnd.jisp": { + source: "iana", + extensions: ["jisp"] + }, + "application/vnd.joost.joda-archive": { + source: "iana", + extensions: ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + source: "iana" + }, + "application/vnd.kahootz": { + source: "iana", + extensions: ["ktz", "ktr"] + }, + "application/vnd.kde.karbon": { + source: "iana", + extensions: ["karbon"] + }, + "application/vnd.kde.kchart": { + source: "iana", + extensions: ["chrt"] + }, + "application/vnd.kde.kformula": { + source: "iana", + extensions: ["kfo"] + }, + "application/vnd.kde.kivio": { + source: "iana", + extensions: ["flw"] + }, + "application/vnd.kde.kontour": { + source: "iana", + extensions: ["kon"] + }, + "application/vnd.kde.kpresenter": { + source: "iana", + extensions: ["kpr", "kpt"] + }, + "application/vnd.kde.kspread": { + source: "iana", + extensions: ["ksp"] + }, + "application/vnd.kde.kword": { + source: "iana", + extensions: ["kwd", "kwt"] + }, + "application/vnd.kenameaapp": { + source: "iana", + extensions: ["htke"] + }, + "application/vnd.kidspiration": { + source: "iana", + extensions: ["kia"] + }, + "application/vnd.kinar": { + source: "iana", + extensions: ["kne", "knp"] + }, + "application/vnd.koan": { + source: "iana", + extensions: ["skp", "skd", "skt", "skm"] + }, + "application/vnd.kodak-descriptor": { + source: "iana", + extensions: ["sse"] + }, + "application/vnd.las.las+xml": { + source: "iana", + extensions: ["lasxml"] + }, + "application/vnd.liberty-request+xml": { + source: "iana" + }, + "application/vnd.llamagraphics.life-balance.desktop": { + source: "iana", + extensions: ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + source: "iana", + extensions: ["lbe"] + }, + "application/vnd.lotus-1-2-3": { + source: "iana", + extensions: ["123"] + }, + "application/vnd.lotus-approach": { + source: "iana", + extensions: ["apr"] + }, + "application/vnd.lotus-freelance": { + source: "iana", + extensions: ["pre"] + }, + "application/vnd.lotus-notes": { + source: "iana", + extensions: ["nsf"] + }, + "application/vnd.lotus-organizer": { + source: "iana", + extensions: ["org"] + }, + "application/vnd.lotus-screencam": { + source: "iana", + extensions: ["scm"] + }, + "application/vnd.lotus-wordpro": { + source: "iana", + extensions: ["lwp"] + }, + "application/vnd.macports.portpkg": { + source: "iana", + extensions: ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + source: "iana" + }, + "application/vnd.marlin.drm.actiontoken+xml": { + source: "iana" + }, + "application/vnd.marlin.drm.conftoken+xml": { + source: "iana" + }, + "application/vnd.marlin.drm.license+xml": { + source: "iana" + }, + "application/vnd.marlin.drm.mdcf": { + source: "iana" + }, + "application/vnd.mason+json": { + source: "iana", + compressible: true + }, + "application/vnd.maxmind.maxmind-db": { + source: "iana" + }, + "application/vnd.mcd": { + source: "iana", + extensions: ["mcd"] + }, + "application/vnd.medcalcdata": { + source: "iana", + extensions: ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + source: "iana", + extensions: ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + source: "iana" + }, + "application/vnd.mfer": { + source: "iana", + extensions: ["mwf"] + }, + "application/vnd.mfmp": { + source: "iana", + extensions: ["mfm"] + }, + "application/vnd.micro+json": { + source: "iana", + compressible: true + }, + "application/vnd.micrografx.flo": { + source: "iana", + extensions: ["flo"] + }, + "application/vnd.micrografx.igx": { + source: "iana", + extensions: ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + source: "iana" + }, + "application/vnd.miele+json": { + source: "iana", + compressible: true + }, + "application/vnd.mif": { + source: "iana", + extensions: ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + source: "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + source: "iana" + }, + "application/vnd.mobius.daf": { + source: "iana", + extensions: ["daf"] + }, + "application/vnd.mobius.dis": { + source: "iana", + extensions: ["dis"] + }, + "application/vnd.mobius.mbk": { + source: "iana", + extensions: ["mbk"] + }, + "application/vnd.mobius.mqy": { + source: "iana", + extensions: ["mqy"] + }, + "application/vnd.mobius.msl": { + source: "iana", + extensions: ["msl"] + }, + "application/vnd.mobius.plc": { + source: "iana", + extensions: ["plc"] + }, + "application/vnd.mobius.txf": { + source: "iana", + extensions: ["txf"] + }, + "application/vnd.mophun.application": { + source: "iana", + extensions: ["mpn"] + }, + "application/vnd.mophun.certificate": { + source: "iana", + extensions: ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + source: "iana" + }, + "application/vnd.motorola.iprm": { + source: "iana" + }, + "application/vnd.mozilla.xul+xml": { + source: "iana", + compressible: true, + extensions: ["xul"] + }, + "application/vnd.ms-3mfdocument": { + source: "iana" + }, + "application/vnd.ms-artgalry": { + source: "iana", + extensions: ["cil"] + }, + "application/vnd.ms-asf": { + source: "iana" + }, + "application/vnd.ms-cab-compressed": { + source: "iana", + extensions: ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + source: "apache" + }, + "application/vnd.ms-excel": { + source: "iana", + compressible: false, + extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + source: "iana", + extensions: ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + source: "iana", + extensions: ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + source: "iana", + extensions: ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + source: "iana", + extensions: ["xltm"] + }, + "application/vnd.ms-fontobject": { + source: "iana", + compressible: true, + extensions: ["eot"] + }, + "application/vnd.ms-htmlhelp": { + source: "iana", + extensions: ["chm"] + }, + "application/vnd.ms-ims": { + source: "iana", + extensions: ["ims"] + }, + "application/vnd.ms-lrm": { + source: "iana", + extensions: ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + source: "iana" + }, + "application/vnd.ms-officetheme": { + source: "iana", + extensions: ["thmx"] + }, + "application/vnd.ms-opentype": { + source: "apache", + compressible: true + }, + "application/vnd.ms-package.obfuscated-opentype": { + source: "apache" + }, + "application/vnd.ms-pki.seccat": { + source: "apache", + extensions: ["cat"] + }, + "application/vnd.ms-pki.stl": { + source: "apache", + extensions: ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + source: "iana" + }, + "application/vnd.ms-powerpoint": { + source: "iana", + compressible: false, + extensions: ["ppt", "pps", "pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + source: "iana", + extensions: ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + source: "iana", + extensions: ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + source: "iana", + extensions: ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + source: "iana", + extensions: ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + source: "iana", + extensions: ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + source: "iana" + }, + "application/vnd.ms-printing.printticket+xml": { + source: "apache" + }, + "application/vnd.ms-printschematicket+xml": { + source: "iana" + }, + "application/vnd.ms-project": { + source: "iana", + extensions: ["mpp", "mpt"] + }, + "application/vnd.ms-tnef": { + source: "iana" + }, + "application/vnd.ms-windows.devicepairing": { + source: "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + source: "iana" + }, + "application/vnd.ms-windows.printerpairing": { + source: "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + source: "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + source: "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + source: "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + source: "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + source: "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + source: "iana", + extensions: ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + source: "iana", + extensions: ["dotm"] + }, + "application/vnd.ms-works": { + source: "iana", + extensions: ["wps", "wks", "wcm", "wdb"] + }, + "application/vnd.ms-wpl": { + source: "iana", + extensions: ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + source: "iana", + compressible: false, + extensions: ["xps"] + }, + "application/vnd.msa-disk-image": { + source: "iana" + }, + "application/vnd.mseq": { + source: "iana", + extensions: ["mseq"] + }, + "application/vnd.msign": { + source: "iana" + }, + "application/vnd.multiad.creator": { + source: "iana" + }, + "application/vnd.multiad.creator.cif": { + source: "iana" + }, + "application/vnd.music-niff": { + source: "iana" + }, + "application/vnd.musician": { + source: "iana", + extensions: ["mus"] + }, + "application/vnd.muvee.style": { + source: "iana", + extensions: ["msty"] + }, + "application/vnd.mynfc": { + source: "iana", + extensions: ["taglet"] + }, + "application/vnd.ncd.control": { + source: "iana" + }, + "application/vnd.ncd.reference": { + source: "iana" + }, + "application/vnd.nearst.inv+json": { + source: "iana", + compressible: true + }, + "application/vnd.nervana": { + source: "iana" + }, + "application/vnd.netfpx": { + source: "iana" + }, + "application/vnd.neurolanguage.nlu": { + source: "iana", + extensions: ["nlu"] + }, + "application/vnd.nintendo.nitro.rom": { + source: "iana" + }, + "application/vnd.nintendo.snes.rom": { + source: "iana" + }, + "application/vnd.nitf": { + source: "iana", + extensions: ["ntf", "nitf"] + }, + "application/vnd.noblenet-directory": { + source: "iana", + extensions: ["nnd"] + }, + "application/vnd.noblenet-sealer": { + source: "iana", + extensions: ["nns"] + }, + "application/vnd.noblenet-web": { + source: "iana", + extensions: ["nnw"] + }, + "application/vnd.nokia.catalogs": { + source: "iana" + }, + "application/vnd.nokia.conml+wbxml": { + source: "iana" + }, + "application/vnd.nokia.conml+xml": { + source: "iana" + }, + "application/vnd.nokia.iptv.config+xml": { + source: "iana" + }, + "application/vnd.nokia.isds-radio-presets": { + source: "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + source: "iana" + }, + "application/vnd.nokia.landmark+xml": { + source: "iana" + }, + "application/vnd.nokia.landmarkcollection+xml": { + source: "iana" + }, + "application/vnd.nokia.n-gage.ac+xml": { + source: "iana" + }, + "application/vnd.nokia.n-gage.data": { + source: "iana", + extensions: ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + source: "iana", + extensions: ["n-gage"] + }, + "application/vnd.nokia.ncd": { + source: "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + source: "iana" + }, + "application/vnd.nokia.pcd+xml": { + source: "iana" + }, + "application/vnd.nokia.radio-preset": { + source: "iana", + extensions: ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + source: "iana", + extensions: ["rpss"] + }, + "application/vnd.novadigm.edm": { + source: "iana", + extensions: ["edm"] + }, + "application/vnd.novadigm.edx": { + source: "iana", + extensions: ["edx"] + }, + "application/vnd.novadigm.ext": { + source: "iana", + extensions: ["ext"] + }, + "application/vnd.ntt-local.content-share": { + source: "iana" + }, + "application/vnd.ntt-local.file-transfer": { + source: "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + source: "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + source: "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + source: "iana" + }, + "application/vnd.oasis.opendocument.chart": { + source: "iana", + extensions: ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + source: "iana", + extensions: ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + source: "iana", + extensions: ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + source: "iana", + extensions: ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + source: "iana", + extensions: ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + source: "iana", + compressible: false, + extensions: ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + source: "iana", + extensions: ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + source: "iana", + extensions: ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + source: "iana", + extensions: ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + source: "iana", + compressible: false, + extensions: ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + source: "iana", + extensions: ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + source: "iana", + compressible: false, + extensions: ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + source: "iana", + extensions: ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + source: "iana", + compressible: false, + extensions: ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + source: "iana", + extensions: ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + source: "iana", + extensions: ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + source: "iana", + extensions: ["oth"] + }, + "application/vnd.obn": { + source: "iana" + }, + "application/vnd.oftn.l10n+json": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + source: "iana" + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + source: "iana" + }, + "application/vnd.oipf.cspg-hexbinary": { + source: "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + source: "iana" + }, + "application/vnd.oipf.dae.xhtml+xml": { + source: "iana" + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + source: "iana" + }, + "application/vnd.oipf.pae.gem": { + source: "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + source: "iana" + }, + "application/vnd.oipf.spdlist+xml": { + source: "iana" + }, + "application/vnd.oipf.ueprofile+xml": { + source: "iana" + }, + "application/vnd.oipf.userprofile+xml": { + source: "iana" + }, + "application/vnd.olpc-sugar": { + source: "iana", + extensions: ["xo"] + }, + "application/vnd.oma-scws-config": { + source: "iana" + }, + "application/vnd.oma-scws-http-request": { + source: "iana" + }, + "application/vnd.oma-scws-http-response": { + source: "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.imd+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.ltkm": { + source: "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.provisioningtrigger": { + source: "iana" + }, + "application/vnd.oma.bcast.sgboot": { + source: "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.sgdu": { + source: "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + source: "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.sprov+xml": { + source: "iana" + }, + "application/vnd.oma.bcast.stkm": { + source: "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + source: "iana" + }, + "application/vnd.oma.cab-feature-handler+xml": { + source: "iana" + }, + "application/vnd.oma.cab-pcc+xml": { + source: "iana" + }, + "application/vnd.oma.cab-subs-invite+xml": { + source: "iana" + }, + "application/vnd.oma.cab-user-prefs+xml": { + source: "iana" + }, + "application/vnd.oma.dcd": { + source: "iana" + }, + "application/vnd.oma.dcdc": { + source: "iana" + }, + "application/vnd.oma.dd2+xml": { + source: "iana", + extensions: ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + source: "iana" + }, + "application/vnd.oma.group-usage-list+xml": { + source: "iana" + }, + "application/vnd.oma.lwm2m+json": { + source: "iana", + compressible: true + }, + "application/vnd.oma.lwm2m+tlv": { + source: "iana" + }, + "application/vnd.oma.pal+xml": { + source: "iana" + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + source: "iana" + }, + "application/vnd.oma.poc.final-report+xml": { + source: "iana" + }, + "application/vnd.oma.poc.groups+xml": { + source: "iana" + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + source: "iana" + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + source: "iana" + }, + "application/vnd.oma.push": { + source: "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + source: "iana" + }, + "application/vnd.oma.xcap-directory+xml": { + source: "iana" + }, + "application/vnd.omads-email+xml": { + source: "iana" + }, + "application/vnd.omads-file+xml": { + source: "iana" + }, + "application/vnd.omads-folder+xml": { + source: "iana" + }, + "application/vnd.omaloc-supl-init": { + source: "iana" + }, + "application/vnd.onepager": { + source: "iana" + }, + "application/vnd.openblox.game+xml": { + source: "iana" + }, + "application/vnd.openblox.game-binary": { + source: "iana" + }, + "application/vnd.openeye.oeb": { + source: "iana" + }, + "application/vnd.openofficeorg.extension": { + source: "apache", + extensions: ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml-template": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + source: "iana", + compressible: false, + extensions: ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + source: "iana", + extensions: ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + source: "iana", + extensions: ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + source: "apache", + extensions: ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml-template": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + source: "iana", + compressible: false, + extensions: ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + source: "apache", + extensions: ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml-template": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + source: "iana", + compressible: false, + extensions: ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + source: "apache", + extensions: ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + source: "iana" + }, + "application/vnd.openxmlformats-package.relationships+xml": { + source: "iana" + }, + "application/vnd.oracle.resource+json": { + source: "iana", + compressible: true + }, + "application/vnd.orange.indata": { + source: "iana" + }, + "application/vnd.osa.netdeploy": { + source: "iana" + }, + "application/vnd.osgeo.mapguide.package": { + source: "iana", + extensions: ["mgp"] + }, + "application/vnd.osgi.bundle": { + source: "iana" + }, + "application/vnd.osgi.dp": { + source: "iana", + extensions: ["dp"] + }, + "application/vnd.osgi.subsystem": { + source: "iana", + extensions: ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + source: "iana" + }, + "application/vnd.oxli.countgraph": { + source: "iana" + }, + "application/vnd.pagerduty+json": { + source: "iana", + compressible: true + }, + "application/vnd.palm": { + source: "iana", + extensions: ["pdb", "pqa", "oprc"] + }, + "application/vnd.panoply": { + source: "iana" + }, + "application/vnd.paos+xml": { + source: "iana" + }, + "application/vnd.paos.xml": { + source: "apache" + }, + "application/vnd.pawaafile": { + source: "iana", + extensions: ["paw"] + }, + "application/vnd.pcos": { + source: "iana" + }, + "application/vnd.pg.format": { + source: "iana", + extensions: ["str"] + }, + "application/vnd.pg.osasli": { + source: "iana", + extensions: ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + source: "iana" + }, + "application/vnd.picsel": { + source: "iana", + extensions: ["efif"] + }, + "application/vnd.pmi.widget": { + source: "iana", + extensions: ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + source: "iana" + }, + "application/vnd.pocketlearn": { + source: "iana", + extensions: ["plf"] + }, + "application/vnd.powerbuilder6": { + source: "iana", + extensions: ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + source: "iana" + }, + "application/vnd.powerbuilder7": { + source: "iana" + }, + "application/vnd.powerbuilder7-s": { + source: "iana" + }, + "application/vnd.powerbuilder75": { + source: "iana" + }, + "application/vnd.powerbuilder75-s": { + source: "iana" + }, + "application/vnd.preminet": { + source: "iana" + }, + "application/vnd.previewsystems.box": { + source: "iana", + extensions: ["box"] + }, + "application/vnd.proteus.magazine": { + source: "iana", + extensions: ["mgz"] + }, + "application/vnd.publishare-delta-tree": { + source: "iana", + extensions: ["qps"] + }, + "application/vnd.pvi.ptid1": { + source: "iana", + extensions: ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + source: "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + source: "iana" + }, + "application/vnd.qualcomm.brew-app-res": { + source: "iana" + }, + "application/vnd.quarantainenet": { + source: "iana" + }, + "application/vnd.quark.quarkxpress": { + source: "iana", + extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] + }, + "application/vnd.quobject-quoxdocument": { + source: "iana" + }, + "application/vnd.radisys.moml+xml": { + source: "iana" + }, + "application/vnd.radisys.msml+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-audit+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-audit-conf+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-audit-conn+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-audit-stream+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-conf+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-base+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-group+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + source: "iana" + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + source: "iana" + }, + "application/vnd.rainstor.data": { + source: "iana" + }, + "application/vnd.rapid": { + source: "iana" + }, + "application/vnd.rar": { + source: "iana" + }, + "application/vnd.realvnc.bed": { + source: "iana", + extensions: ["bed"] + }, + "application/vnd.recordare.musicxml": { + source: "iana", + extensions: ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + source: "iana", + extensions: ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + source: "iana" + }, + "application/vnd.rig.cryptonote": { + source: "iana", + extensions: ["cryptonote"] + }, + "application/vnd.rim.cod": { + source: "apache", + extensions: ["cod"] + }, + "application/vnd.rn-realmedia": { + source: "apache", + extensions: ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + source: "apache", + extensions: ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + source: "iana", + extensions: ["link66"] + }, + "application/vnd.rs-274x": { + source: "iana" + }, + "application/vnd.ruckus.download": { + source: "iana" + }, + "application/vnd.s3sms": { + source: "iana" + }, + "application/vnd.sailingtracker.track": { + source: "iana", + extensions: ["st"] + }, + "application/vnd.sbm.cid": { + source: "iana" + }, + "application/vnd.sbm.mid2": { + source: "iana" + }, + "application/vnd.scribus": { + source: "iana" + }, + "application/vnd.sealed.3df": { + source: "iana" + }, + "application/vnd.sealed.csf": { + source: "iana" + }, + "application/vnd.sealed.doc": { + source: "iana" + }, + "application/vnd.sealed.eml": { + source: "iana" + }, + "application/vnd.sealed.mht": { + source: "iana" + }, + "application/vnd.sealed.net": { + source: "iana" + }, + "application/vnd.sealed.ppt": { + source: "iana" + }, + "application/vnd.sealed.tiff": { + source: "iana" + }, + "application/vnd.sealed.xls": { + source: "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + source: "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + source: "iana" + }, + "application/vnd.seemail": { + source: "iana", + extensions: ["see"] + }, + "application/vnd.sema": { + source: "iana", + extensions: ["sema"] + }, + "application/vnd.semd": { + source: "iana", + extensions: ["semd"] + }, + "application/vnd.semf": { + source: "iana", + extensions: ["semf"] + }, + "application/vnd.shana.informed.formdata": { + source: "iana", + extensions: ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + source: "iana", + extensions: ["itp"] + }, + "application/vnd.shana.informed.interchange": { + source: "iana", + extensions: ["iif"] + }, + "application/vnd.shana.informed.package": { + source: "iana", + extensions: ["ipk"] + }, + "application/vnd.simtech-mindmapper": { + source: "iana", + extensions: ["twd", "twds"] + }, + "application/vnd.siren+json": { + source: "iana", + compressible: true + }, + "application/vnd.smaf": { + source: "iana", + extensions: ["mmf"] + }, + "application/vnd.smart.notebook": { + source: "iana" + }, + "application/vnd.smart.teacher": { + source: "iana", + extensions: ["teacher"] + }, + "application/vnd.software602.filler.form+xml": { + source: "iana" + }, + "application/vnd.software602.filler.form-xml-zip": { + source: "iana" + }, + "application/vnd.solent.sdkm+xml": { + source: "iana", + extensions: ["sdkm", "sdkd"] + }, + "application/vnd.spotfire.dxp": { + source: "iana", + extensions: ["dxp"] + }, + "application/vnd.spotfire.sfs": { + source: "iana", + extensions: ["sfs"] + }, + "application/vnd.sss-cod": { + source: "iana" + }, + "application/vnd.sss-dtf": { + source: "iana" + }, + "application/vnd.sss-ntf": { + source: "iana" + }, + "application/vnd.stardivision.calc": { + source: "apache", + extensions: ["sdc"] + }, + "application/vnd.stardivision.draw": { + source: "apache", + extensions: ["sda"] + }, + "application/vnd.stardivision.impress": { + source: "apache", + extensions: ["sdd"] + }, + "application/vnd.stardivision.math": { + source: "apache", + extensions: ["smf"] + }, + "application/vnd.stardivision.writer": { + source: "apache", + extensions: ["sdw", "vor"] + }, + "application/vnd.stardivision.writer-global": { + source: "apache", + extensions: ["sgl"] + }, + "application/vnd.stepmania.package": { + source: "iana", + extensions: ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + source: "iana", + extensions: ["sm"] + }, + "application/vnd.street-stream": { + source: "iana" + }, + "application/vnd.sun.wadl+xml": { + source: "iana" + }, + "application/vnd.sun.xml.calc": { + source: "apache", + extensions: ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + source: "apache", + extensions: ["stc"] + }, + "application/vnd.sun.xml.draw": { + source: "apache", + extensions: ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + source: "apache", + extensions: ["std"] + }, + "application/vnd.sun.xml.impress": { + source: "apache", + extensions: ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + source: "apache", + extensions: ["sti"] + }, + "application/vnd.sun.xml.math": { + source: "apache", + extensions: ["sxm"] + }, + "application/vnd.sun.xml.writer": { + source: "apache", + extensions: ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + source: "apache", + extensions: ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + source: "apache", + extensions: ["stw"] + }, + "application/vnd.sus-calendar": { + source: "iana", + extensions: ["sus", "susp"] + }, + "application/vnd.svd": { + source: "iana", + extensions: ["svd"] + }, + "application/vnd.swiftview-ics": { + source: "iana" + }, + "application/vnd.symbian.install": { + source: "apache", + extensions: ["sis", "sisx"] + }, + "application/vnd.syncml+xml": { + source: "iana", + extensions: ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + source: "iana", + extensions: ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + source: "iana", + extensions: ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + source: "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmddf+xml": { + source: "iana" + }, + "application/vnd.syncml.dmtnds+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + source: "iana" + }, + "application/vnd.syncml.ds.notification": { + source: "iana" + }, + "application/vnd.tao.intent-module-archive": { + source: "iana", + extensions: ["tao"] + }, + "application/vnd.tcpdump.pcap": { + source: "iana", + extensions: ["pcap", "cap", "dmp"] + }, + "application/vnd.tmd.mediaflex.api+xml": { + source: "iana" + }, + "application/vnd.tml": { + source: "iana" + }, + "application/vnd.tmobile-livetv": { + source: "iana", + extensions: ["tmo"] + }, + "application/vnd.tri.onesource": { + source: "iana" + }, + "application/vnd.trid.tpt": { + source: "iana", + extensions: ["tpt"] + }, + "application/vnd.triscape.mxs": { + source: "iana", + extensions: ["mxs"] + }, + "application/vnd.trueapp": { + source: "iana", + extensions: ["tra"] + }, + "application/vnd.truedoc": { + source: "iana" + }, + "application/vnd.ubisoft.webplayer": { + source: "iana" + }, + "application/vnd.ufdl": { + source: "iana", + extensions: ["ufd", "ufdl"] + }, + "application/vnd.uiq.theme": { + source: "iana", + extensions: ["utz"] + }, + "application/vnd.umajin": { + source: "iana", + extensions: ["umj"] + }, + "application/vnd.unity": { + source: "iana", + extensions: ["unityweb"] + }, + "application/vnd.uoml+xml": { + source: "iana", + extensions: ["uoml"] + }, + "application/vnd.uplanet.alert": { + source: "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.bearer-choice": { + source: "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.cacheop": { + source: "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.channel": { + source: "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.list": { + source: "iana" + }, + "application/vnd.uplanet.list-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.listcmd": { + source: "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.signal": { + source: "iana" + }, + "application/vnd.uri-map": { + source: "iana" + }, + "application/vnd.valve.source.material": { + source: "iana" + }, + "application/vnd.vcx": { + source: "iana", + extensions: ["vcx"] + }, + "application/vnd.vd-study": { + source: "iana" + }, + "application/vnd.vectorworks": { + source: "iana" + }, + "application/vnd.vel+json": { + source: "iana", + compressible: true + }, + "application/vnd.verimatrix.vcas": { + source: "iana" + }, + "application/vnd.vidsoft.vidconference": { + source: "iana" + }, + "application/vnd.visio": { + source: "iana", + extensions: ["vsd", "vst", "vss", "vsw"] + }, + "application/vnd.visionary": { + source: "iana", + extensions: ["vis"] + }, + "application/vnd.vividence.scriptfile": { + source: "iana" + }, + "application/vnd.vsf": { + source: "iana", + extensions: ["vsf"] + }, + "application/vnd.wap.sic": { + source: "iana" + }, + "application/vnd.wap.slc": { + source: "iana" + }, + "application/vnd.wap.wbxml": { + source: "iana", + extensions: ["wbxml"] + }, + "application/vnd.wap.wmlc": { + source: "iana", + extensions: ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + source: "iana", + extensions: ["wmlsc"] + }, + "application/vnd.webturbo": { + source: "iana", + extensions: ["wtb"] + }, + "application/vnd.wfa.p2p": { + source: "iana" + }, + "application/vnd.wfa.wsc": { + source: "iana" + }, + "application/vnd.windows.devicepairing": { + source: "iana" + }, + "application/vnd.wmc": { + source: "iana" + }, + "application/vnd.wmf.bootstrap": { + source: "iana" + }, + "application/vnd.wolfram.mathematica": { + source: "iana" + }, + "application/vnd.wolfram.mathematica.package": { + source: "iana" + }, + "application/vnd.wolfram.player": { + source: "iana", + extensions: ["nbp"] + }, + "application/vnd.wordperfect": { + source: "iana", + extensions: ["wpd"] + }, + "application/vnd.wqd": { + source: "iana", + extensions: ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + source: "iana" + }, + "application/vnd.wt.stf": { + source: "iana", + extensions: ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + source: "iana" + }, + "application/vnd.wv.csp+xml": { + source: "iana" + }, + "application/vnd.wv.ssp+xml": { + source: "iana" + }, + "application/vnd.xacml+json": { + source: "iana", + compressible: true + }, + "application/vnd.xara": { + source: "iana", + extensions: ["xar"] + }, + "application/vnd.xfdl": { + source: "iana", + extensions: ["xfdl"] + }, + "application/vnd.xfdl.webform": { + source: "iana" + }, + "application/vnd.xmi+xml": { + source: "iana" + }, + "application/vnd.xmpie.cpkg": { + source: "iana" + }, + "application/vnd.xmpie.dpkg": { + source: "iana" + }, + "application/vnd.xmpie.plan": { + source: "iana" + }, + "application/vnd.xmpie.ppkg": { + source: "iana" + }, + "application/vnd.xmpie.xlim": { + source: "iana" + }, + "application/vnd.yamaha.hv-dic": { + source: "iana", + extensions: ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + source: "iana", + extensions: ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + source: "iana", + extensions: ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + source: "iana", + extensions: ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + source: "iana", + extensions: ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + source: "iana" + }, + "application/vnd.yamaha.smaf-audio": { + source: "iana", + extensions: ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + source: "iana", + extensions: ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + source: "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + source: "iana" + }, + "application/vnd.yaoweme": { + source: "iana" + }, + "application/vnd.yellowriver-custom-menu": { + source: "iana", + extensions: ["cmp"] + }, + "application/vnd.zul": { + source: "iana", + extensions: ["zir", "zirz"] + }, + "application/vnd.zzazz.deck+xml": { + source: "iana", + extensions: ["zaz"] + }, + "application/voicexml+xml": { + source: "iana", + extensions: ["vxml"] + }, + "application/vq-rtcpxr": { + source: "iana" + }, + "application/watcherinfo+xml": { + source: "iana" + }, + "application/whoispp-query": { + source: "iana" + }, + "application/whoispp-response": { + source: "iana" + }, + "application/widget": { + source: "iana", + extensions: ["wgt"] + }, + "application/winhlp": { + source: "apache", + extensions: ["hlp"] + }, + "application/wita": { + source: "iana" + }, + "application/wordperfect5.1": { + source: "iana" + }, + "application/wsdl+xml": { + source: "iana", + extensions: ["wsdl"] + }, + "application/wspolicy+xml": { + source: "iana", + extensions: ["wspolicy"] + }, + "application/x-7z-compressed": { + source: "apache", + compressible: false, + extensions: ["7z"] + }, + "application/x-abiword": { + source: "apache", + extensions: ["abw"] + }, + "application/x-ace-compressed": { + source: "apache", + extensions: ["ace"] + }, + "application/x-amf": { + source: "apache" + }, + "application/x-apple-diskimage": { + source: "apache", + extensions: ["dmg"] + }, + "application/x-authorware-bin": { + source: "apache", + extensions: ["aab", "x32", "u32", "vox"] + }, + "application/x-authorware-map": { + source: "apache", + extensions: ["aam"] + }, + "application/x-authorware-seg": { + source: "apache", + extensions: ["aas"] + }, + "application/x-bcpio": { + source: "apache", + extensions: ["bcpio"] + }, + "application/x-bdoc": { + compressible: false, + extensions: ["bdoc"] + }, + "application/x-bittorrent": { + source: "apache", + extensions: ["torrent"] + }, + "application/x-blorb": { + source: "apache", + extensions: ["blb", "blorb"] + }, + "application/x-bzip": { + source: "apache", + compressible: false, + extensions: ["bz"] + }, + "application/x-bzip2": { + source: "apache", + compressible: false, + extensions: ["bz2", "boz"] + }, + "application/x-cbr": { + source: "apache", + extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] + }, + "application/x-cdlink": { + source: "apache", + extensions: ["vcd"] + }, + "application/x-cfs-compressed": { + source: "apache", + extensions: ["cfs"] + }, + "application/x-chat": { + source: "apache", + extensions: ["chat"] + }, + "application/x-chess-pgn": { + source: "apache", + extensions: ["pgn"] + }, + "application/x-chrome-extension": { + extensions: ["crx"] + }, + "application/x-cocoa": { + source: "nginx", + extensions: ["cco"] + }, + "application/x-compress": { + source: "apache" + }, + "application/x-conference": { + source: "apache", + extensions: ["nsc"] + }, + "application/x-cpio": { + source: "apache", + extensions: ["cpio"] + }, + "application/x-csh": { + source: "apache", + extensions: ["csh"] + }, + "application/x-deb": { + compressible: false + }, + "application/x-debian-package": { + source: "apache", + extensions: ["deb", "udeb"] + }, + "application/x-dgc-compressed": { + source: "apache", + extensions: ["dgc"] + }, + "application/x-director": { + source: "apache", + extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] + }, + "application/x-doom": { + source: "apache", + extensions: ["wad"] + }, + "application/x-dtbncx+xml": { + source: "apache", + extensions: ["ncx"] + }, + "application/x-dtbook+xml": { + source: "apache", + extensions: ["dtb"] + }, + "application/x-dtbresource+xml": { + source: "apache", + extensions: ["res"] + }, + "application/x-dvi": { + source: "apache", + compressible: false, + extensions: ["dvi"] + }, + "application/x-envoy": { + source: "apache", + extensions: ["evy"] + }, + "application/x-eva": { + source: "apache", + extensions: ["eva"] + }, + "application/x-font-bdf": { + source: "apache", + extensions: ["bdf"] + }, + "application/x-font-dos": { + source: "apache" + }, + "application/x-font-framemaker": { + source: "apache" + }, + "application/x-font-ghostscript": { + source: "apache", + extensions: ["gsf"] + }, + "application/x-font-libgrx": { + source: "apache" + }, + "application/x-font-linux-psf": { + source: "apache", + extensions: ["psf"] + }, + "application/x-font-otf": { + source: "apache", + compressible: true, + extensions: ["otf"] + }, + "application/x-font-pcf": { + source: "apache", + extensions: ["pcf"] + }, + "application/x-font-snf": { + source: "apache", + extensions: ["snf"] + }, + "application/x-font-speedo": { + source: "apache" + }, + "application/x-font-sunos-news": { + source: "apache" + }, + "application/x-font-ttf": { + source: "apache", + compressible: true, + extensions: ["ttf", "ttc"] + }, + "application/x-font-type1": { + source: "apache", + extensions: ["pfa", "pfb", "pfm", "afm"] + }, + "application/x-font-vfont": { + source: "apache" + }, + "application/x-freearc": { + source: "apache", + extensions: ["arc"] + }, + "application/x-futuresplash": { + source: "apache", + extensions: ["spl"] + }, + "application/x-gca-compressed": { + source: "apache", + extensions: ["gca"] + }, + "application/x-glulx": { + source: "apache", + extensions: ["ulx"] + }, + "application/x-gnumeric": { + source: "apache", + extensions: ["gnumeric"] + }, + "application/x-gramps-xml": { + source: "apache", + extensions: ["gramps"] + }, + "application/x-gtar": { + source: "apache", + extensions: ["gtar"] + }, + "application/x-gzip": { + source: "apache" + }, + "application/x-hdf": { + source: "apache", + extensions: ["hdf"] + }, + "application/x-httpd-php": { + compressible: true, + extensions: ["php"] + }, + "application/x-install-instructions": { + source: "apache", + extensions: ["install"] + }, + "application/x-iso9660-image": { + source: "apache", + extensions: ["iso"] + }, + "application/x-java-archive-diff": { + source: "nginx", + extensions: ["jardiff"] + }, + "application/x-java-jnlp-file": { + source: "apache", + compressible: false, + extensions: ["jnlp"] + }, + "application/x-javascript": { + compressible: true + }, + "application/x-latex": { + source: "apache", + compressible: false, + extensions: ["latex"] + }, + "application/x-lua-bytecode": { + extensions: ["luac"] + }, + "application/x-lzh-compressed": { + source: "apache", + extensions: ["lzh", "lha"] + }, + "application/x-makeself": { + source: "nginx", + extensions: ["run"] + }, + "application/x-mie": { + source: "apache", + extensions: ["mie"] + }, + "application/x-mobipocket-ebook": { + source: "apache", + extensions: ["prc", "mobi"] + }, + "application/x-mpegurl": { + compressible: false + }, + "application/x-ms-application": { + source: "apache", + extensions: ["application"] + }, + "application/x-ms-shortcut": { + source: "apache", + extensions: ["lnk"] + }, + "application/x-ms-wmd": { + source: "apache", + extensions: ["wmd"] + }, + "application/x-ms-wmz": { + source: "apache", + extensions: ["wmz"] + }, + "application/x-ms-xbap": { + source: "apache", + extensions: ["xbap"] + }, + "application/x-msaccess": { + source: "apache", + extensions: ["mdb"] + }, + "application/x-msbinder": { + source: "apache", + extensions: ["obd"] + }, + "application/x-mscardfile": { + source: "apache", + extensions: ["crd"] + }, + "application/x-msclip": { + source: "apache", + extensions: ["clp"] + }, + "application/x-msdos-program": { + extensions: ["exe"] + }, + "application/x-msdownload": { + source: "apache", + extensions: ["exe", "dll", "com", "bat", "msi"] + }, + "application/x-msmediaview": { + source: "apache", + extensions: ["mvb", "m13", "m14"] + }, + "application/x-msmetafile": { + source: "apache", + extensions: ["wmf", "wmz", "emf", "emz"] + }, + "application/x-msmoney": { + source: "apache", + extensions: ["mny"] + }, + "application/x-mspublisher": { + source: "apache", + extensions: ["pub"] + }, + "application/x-msschedule": { + source: "apache", + extensions: ["scd"] + }, + "application/x-msterminal": { + source: "apache", + extensions: ["trm"] + }, + "application/x-mswrite": { + source: "apache", + extensions: ["wri"] + }, + "application/x-netcdf": { + source: "apache", + extensions: ["nc", "cdf"] + }, + "application/x-ns-proxy-autoconfig": { + compressible: true, + extensions: ["pac"] + }, + "application/x-nzb": { + source: "apache", + extensions: ["nzb"] + }, + "application/x-perl": { + source: "nginx", + extensions: ["pl", "pm"] + }, + "application/x-pilot": { + source: "nginx", + extensions: ["prc", "pdb"] + }, + "application/x-pkcs12": { + source: "apache", + compressible: false, + extensions: ["p12", "pfx"] + }, + "application/x-pkcs7-certificates": { + source: "apache", + extensions: ["p7b", "spc"] + }, + "application/x-pkcs7-certreqresp": { + source: "apache", + extensions: ["p7r"] + }, + "application/x-rar-compressed": { + source: "apache", + compressible: false, + extensions: ["rar"] + }, + "application/x-redhat-package-manager": { + source: "nginx", + extensions: ["rpm"] + }, + "application/x-research-info-systems": { + source: "apache", + extensions: ["ris"] + }, + "application/x-sea": { + source: "nginx", + extensions: ["sea"] + }, + "application/x-sh": { + source: "apache", + compressible: true, + extensions: ["sh"] + }, + "application/x-shar": { + source: "apache", + extensions: ["shar"] + }, + "application/x-shockwave-flash": { + source: "apache", + compressible: false, + extensions: ["swf"] + }, + "application/x-silverlight-app": { + source: "apache", + extensions: ["xap"] + }, + "application/x-sql": { + source: "apache", + extensions: ["sql"] + }, + "application/x-stuffit": { + source: "apache", + compressible: false, + extensions: ["sit"] + }, + "application/x-stuffitx": { + source: "apache", + extensions: ["sitx"] + }, + "application/x-subrip": { + source: "apache", + extensions: ["srt"] + }, + "application/x-sv4cpio": { + source: "apache", + extensions: ["sv4cpio"] + }, + "application/x-sv4crc": { + source: "apache", + extensions: ["sv4crc"] + }, + "application/x-t3vm-image": { + source: "apache", + extensions: ["t3"] + }, + "application/x-tads": { + source: "apache", + extensions: ["gam"] + }, + "application/x-tar": { + source: "apache", + compressible: true, + extensions: ["tar"] + }, + "application/x-tcl": { + source: "apache", + extensions: ["tcl", "tk"] + }, + "application/x-tex": { + source: "apache", + extensions: ["tex"] + }, + "application/x-tex-tfm": { + source: "apache", + extensions: ["tfm"] + }, + "application/x-texinfo": { + source: "apache", + extensions: ["texinfo", "texi"] + }, + "application/x-tgif": { + source: "apache", + extensions: ["obj"] + }, + "application/x-ustar": { + source: "apache", + extensions: ["ustar"] + }, + "application/x-wais-source": { + source: "apache", + extensions: ["src"] + }, + "application/x-web-app-manifest+json": { + compressible: true, + extensions: ["webapp"] + }, + "application/x-www-form-urlencoded": { + source: "iana", + compressible: true + }, + "application/x-x509-ca-cert": { + source: "apache", + extensions: ["der", "crt", "pem"] + }, + "application/x-xfig": { + source: "apache", + extensions: ["fig"] + }, + "application/x-xliff+xml": { + source: "apache", + extensions: ["xlf"] + }, + "application/x-xpinstall": { + source: "apache", + compressible: false, + extensions: ["xpi"] + }, + "application/x-xz": { + source: "apache", + extensions: ["xz"] + }, + "application/x-zmachine": { + source: "apache", + extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] + }, + "application/x400-bp": { + source: "iana" + }, + "application/xacml+xml": { + source: "iana" + }, + "application/xaml+xml": { + source: "apache", + extensions: ["xaml"] + }, + "application/xcap-att+xml": { + source: "iana" + }, + "application/xcap-caps+xml": { + source: "iana" + }, + "application/xcap-diff+xml": { + source: "iana", + extensions: ["xdf"] + }, + "application/xcap-el+xml": { + source: "iana" + }, + "application/xcap-error+xml": { + source: "iana" + }, + "application/xcap-ns+xml": { + source: "iana" + }, + "application/xcon-conference-info+xml": { + source: "iana" + }, + "application/xcon-conference-info-diff+xml": { + source: "iana" + }, + "application/xenc+xml": { + source: "iana", + extensions: ["xenc"] + }, + "application/xhtml+xml": { + source: "iana", + compressible: true, + extensions: ["xhtml", "xht"] + }, + "application/xhtml-voice+xml": { + source: "apache" + }, + "application/xml": { + source: "iana", + compressible: true, + extensions: ["xml", "xsl", "xsd", "rng"] + }, + "application/xml-dtd": { + source: "iana", + compressible: true, + extensions: ["dtd"] + }, + "application/xml-external-parsed-entity": { + source: "iana" + }, + "application/xml-patch+xml": { + source: "iana" + }, + "application/xmpp+xml": { + source: "iana" + }, + "application/xop+xml": { + source: "iana", + compressible: true, + extensions: ["xop"] + }, + "application/xproc+xml": { + source: "apache", + extensions: ["xpl"] + }, + "application/xslt+xml": { + source: "iana", + extensions: ["xslt"] + }, + "application/xspf+xml": { + source: "apache", + extensions: ["xspf"] + }, + "application/xv+xml": { + source: "iana", + extensions: ["mxml", "xhvml", "xvml", "xvm"] + }, + "application/yang": { + source: "iana", + extensions: ["yang"] + }, + "application/yang-data+json": { + source: "iana", + compressible: true + }, + "application/yang-data+xml": { + source: "iana" + }, + "application/yin+xml": { + source: "iana", + extensions: ["yin"] + }, + "application/zip": { + source: "iana", + compressible: false, + extensions: ["zip"] + }, + "application/zlib": { + source: "iana" + }, + "audio/1d-interleaved-parityfec": { + source: "iana" + }, + "audio/32kadpcm": { + source: "iana" + }, + "audio/3gpp": { + source: "iana", + compressible: false, + extensions: ["3gpp"] + }, + "audio/3gpp2": { + source: "iana" + }, + "audio/ac3": { + source: "iana" + }, + "audio/adpcm": { + source: "apache", + extensions: ["adp"] + }, + "audio/amr": { + source: "iana" + }, + "audio/amr-wb": { + source: "iana" + }, + "audio/amr-wb+": { + source: "iana" + }, + "audio/aptx": { + source: "iana" + }, + "audio/asc": { + source: "iana" + }, + "audio/atrac-advanced-lossless": { + source: "iana" + }, + "audio/atrac-x": { + source: "iana" + }, + "audio/atrac3": { + source: "iana" + }, + "audio/basic": { + source: "iana", + compressible: false, + extensions: ["au", "snd"] + }, + "audio/bv16": { + source: "iana" + }, + "audio/bv32": { + source: "iana" + }, + "audio/clearmode": { + source: "iana" + }, + "audio/cn": { + source: "iana" + }, + "audio/dat12": { + source: "iana" + }, + "audio/dls": { + source: "iana" + }, + "audio/dsr-es201108": { + source: "iana" + }, + "audio/dsr-es202050": { + source: "iana" + }, + "audio/dsr-es202211": { + source: "iana" + }, + "audio/dsr-es202212": { + source: "iana" + }, + "audio/dv": { + source: "iana" + }, + "audio/dvi4": { + source: "iana" + }, + "audio/eac3": { + source: "iana" + }, + "audio/encaprtp": { + source: "iana" + }, + "audio/evrc": { + source: "iana" + }, + "audio/evrc-qcp": { + source: "iana" + }, + "audio/evrc0": { + source: "iana" + }, + "audio/evrc1": { + source: "iana" + }, + "audio/evrcb": { + source: "iana" + }, + "audio/evrcb0": { + source: "iana" + }, + "audio/evrcb1": { + source: "iana" + }, + "audio/evrcnw": { + source: "iana" + }, + "audio/evrcnw0": { + source: "iana" + }, + "audio/evrcnw1": { + source: "iana" + }, + "audio/evrcwb": { + source: "iana" + }, + "audio/evrcwb0": { + source: "iana" + }, + "audio/evrcwb1": { + source: "iana" + }, + "audio/evs": { + source: "iana" + }, + "audio/fwdred": { + source: "iana" + }, + "audio/g711-0": { + source: "iana" + }, + "audio/g719": { + source: "iana" + }, + "audio/g722": { + source: "iana" + }, + "audio/g7221": { + source: "iana" + }, + "audio/g723": { + source: "iana" + }, + "audio/g726-16": { + source: "iana" + }, + "audio/g726-24": { + source: "iana" + }, + "audio/g726-32": { + source: "iana" + }, + "audio/g726-40": { + source: "iana" + }, + "audio/g728": { + source: "iana" + }, + "audio/g729": { + source: "iana" + }, + "audio/g7291": { + source: "iana" + }, + "audio/g729d": { + source: "iana" + }, + "audio/g729e": { + source: "iana" + }, + "audio/gsm": { + source: "iana" + }, + "audio/gsm-efr": { + source: "iana" + }, + "audio/gsm-hr-08": { + source: "iana" + }, + "audio/ilbc": { + source: "iana" + }, + "audio/ip-mr_v2.5": { + source: "iana" + }, + "audio/isac": { + source: "apache" + }, + "audio/l16": { + source: "iana" + }, + "audio/l20": { + source: "iana" + }, + "audio/l24": { + source: "iana", + compressible: false + }, + "audio/l8": { + source: "iana" + }, + "audio/lpc": { + source: "iana" + }, + "audio/midi": { + source: "apache", + extensions: ["mid", "midi", "kar", "rmi"] + }, + "audio/mobile-xmf": { + source: "iana" + }, + "audio/mp3": { + compressible: false, + extensions: ["mp3"] + }, + "audio/mp4": { + source: "iana", + compressible: false, + extensions: ["m4a", "mp4a"] + }, + "audio/mp4a-latm": { + source: "iana" + }, + "audio/mpa": { + source: "iana" + }, + "audio/mpa-robust": { + source: "iana" + }, + "audio/mpeg": { + source: "iana", + compressible: false, + extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] + }, + "audio/mpeg4-generic": { + source: "iana" + }, + "audio/musepack": { + source: "apache" + }, + "audio/ogg": { + source: "iana", + compressible: false, + extensions: ["oga", "ogg", "spx"] + }, + "audio/opus": { + source: "iana" + }, + "audio/parityfec": { + source: "iana" + }, + "audio/pcma": { + source: "iana" + }, + "audio/pcma-wb": { + source: "iana" + }, + "audio/pcmu": { + source: "iana" + }, + "audio/pcmu-wb": { + source: "iana" + }, + "audio/prs.sid": { + source: "iana" + }, + "audio/qcelp": { + source: "iana" + }, + "audio/raptorfec": { + source: "iana" + }, + "audio/red": { + source: "iana" + }, + "audio/rtp-enc-aescm128": { + source: "iana" + }, + "audio/rtp-midi": { + source: "iana" + }, + "audio/rtploopback": { + source: "iana" + }, + "audio/rtx": { + source: "iana" + }, + "audio/s3m": { + source: "apache", + extensions: ["s3m"] + }, + "audio/silk": { + source: "apache", + extensions: ["sil"] + }, + "audio/smv": { + source: "iana" + }, + "audio/smv-qcp": { + source: "iana" + }, + "audio/smv0": { + source: "iana" + }, + "audio/sp-midi": { + source: "iana" + }, + "audio/speex": { + source: "iana" + }, + "audio/t140c": { + source: "iana" + }, + "audio/t38": { + source: "iana" + }, + "audio/telephone-event": { + source: "iana" + }, + "audio/tone": { + source: "iana" + }, + "audio/uemclip": { + source: "iana" + }, + "audio/ulpfec": { + source: "iana" + }, + "audio/vdvi": { + source: "iana" + }, + "audio/vmr-wb": { + source: "iana" + }, + "audio/vnd.3gpp.iufp": { + source: "iana" + }, + "audio/vnd.4sb": { + source: "iana" + }, + "audio/vnd.audiokoz": { + source: "iana" + }, + "audio/vnd.celp": { + source: "iana" + }, + "audio/vnd.cisco.nse": { + source: "iana" + }, + "audio/vnd.cmles.radio-events": { + source: "iana" + }, + "audio/vnd.cns.anp1": { + source: "iana" + }, + "audio/vnd.cns.inf1": { + source: "iana" + }, + "audio/vnd.dece.audio": { + source: "iana", + extensions: ["uva", "uvva"] + }, + "audio/vnd.digital-winds": { + source: "iana", + extensions: ["eol"] + }, + "audio/vnd.dlna.adts": { + source: "iana" + }, + "audio/vnd.dolby.heaac.1": { + source: "iana" + }, + "audio/vnd.dolby.heaac.2": { + source: "iana" + }, + "audio/vnd.dolby.mlp": { + source: "iana" + }, + "audio/vnd.dolby.mps": { + source: "iana" + }, + "audio/vnd.dolby.pl2": { + source: "iana" + }, + "audio/vnd.dolby.pl2x": { + source: "iana" + }, + "audio/vnd.dolby.pl2z": { + source: "iana" + }, + "audio/vnd.dolby.pulse.1": { + source: "iana" + }, + "audio/vnd.dra": { + source: "iana", + extensions: ["dra"] + }, + "audio/vnd.dts": { + source: "iana", + extensions: ["dts"] + }, + "audio/vnd.dts.hd": { + source: "iana", + extensions: ["dtshd"] + }, + "audio/vnd.dvb.file": { + source: "iana" + }, + "audio/vnd.everad.plj": { + source: "iana" + }, + "audio/vnd.hns.audio": { + source: "iana" + }, + "audio/vnd.lucent.voice": { + source: "iana", + extensions: ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + source: "iana", + extensions: ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + source: "iana" + }, + "audio/vnd.nortel.vbk": { + source: "iana" + }, + "audio/vnd.nuera.ecelp4800": { + source: "iana", + extensions: ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + source: "iana", + extensions: ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + source: "iana", + extensions: ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + source: "iana" + }, + "audio/vnd.qcelp": { + source: "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + source: "iana" + }, + "audio/vnd.rip": { + source: "iana", + extensions: ["rip"] + }, + "audio/vnd.rn-realaudio": { + compressible: false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + source: "iana" + }, + "audio/vnd.vmx.cvsd": { + source: "iana" + }, + "audio/vnd.wave": { + compressible: false + }, + "audio/vorbis": { + source: "iana", + compressible: false + }, + "audio/vorbis-config": { + source: "iana" + }, + "audio/wav": { + compressible: false, + extensions: ["wav"] + }, + "audio/wave": { + compressible: false, + extensions: ["wav"] + }, + "audio/webm": { + source: "apache", + compressible: false, + extensions: ["weba"] + }, + "audio/x-aac": { + source: "apache", + compressible: false, + extensions: ["aac"] + }, + "audio/x-aiff": { + source: "apache", + extensions: ["aif", "aiff", "aifc"] + }, + "audio/x-caf": { + source: "apache", + compressible: false, + extensions: ["caf"] + }, + "audio/x-flac": { + source: "apache", + extensions: ["flac"] + }, + "audio/x-m4a": { + source: "nginx", + extensions: ["m4a"] + }, + "audio/x-matroska": { + source: "apache", + extensions: ["mka"] + }, + "audio/x-mpegurl": { + source: "apache", + extensions: ["m3u"] + }, + "audio/x-ms-wax": { + source: "apache", + extensions: ["wax"] + }, + "audio/x-ms-wma": { + source: "apache", + extensions: ["wma"] + }, + "audio/x-pn-realaudio": { + source: "apache", + extensions: ["ram", "ra"] + }, + "audio/x-pn-realaudio-plugin": { + source: "apache", + extensions: ["rmp"] + }, + "audio/x-realaudio": { + source: "nginx", + extensions: ["ra"] + }, + "audio/x-tta": { + source: "apache" + }, + "audio/x-wav": { + source: "apache", + extensions: ["wav"] + }, + "audio/xm": { + source: "apache", + extensions: ["xm"] + }, + "chemical/x-cdx": { + source: "apache", + extensions: ["cdx"] + }, + "chemical/x-cif": { + source: "apache", + extensions: ["cif"] + }, + "chemical/x-cmdf": { + source: "apache", + extensions: ["cmdf"] + }, + "chemical/x-cml": { + source: "apache", + extensions: ["cml"] + }, + "chemical/x-csml": { + source: "apache", + extensions: ["csml"] + }, + "chemical/x-pdb": { + source: "apache" + }, + "chemical/x-xyz": { + source: "apache", + extensions: ["xyz"] + }, + "font/opentype": { + compressible: true, + extensions: ["otf"] + }, + "image/bmp": { + source: "iana", + compressible: true, + extensions: ["bmp"] + }, + "image/cgm": { + source: "iana", + extensions: ["cgm"] + }, + "image/dicom-rle": { + source: "iana" + }, + "image/emf": { + source: "iana" + }, + "image/fits": { + source: "iana" + }, + "image/g3fax": { + source: "iana", + extensions: ["g3"] + }, + "image/gif": { + source: "iana", + compressible: false, + extensions: ["gif"] + }, + "image/ief": { + source: "iana", + extensions: ["ief"] + }, + "image/jls": { + source: "iana" + }, + "image/jp2": { + source: "iana" + }, + "image/jpeg": { + source: "iana", + compressible: false, + extensions: ["jpeg", "jpg", "jpe"] + }, + "image/jpm": { + source: "iana" + }, + "image/jpx": { + source: "iana" + }, + "image/ktx": { + source: "iana", + extensions: ["ktx"] + }, + "image/naplps": { + source: "iana" + }, + "image/pjpeg": { + compressible: false + }, + "image/png": { + source: "iana", + compressible: false, + extensions: ["png"] + }, + "image/prs.btif": { + source: "iana", + extensions: ["btif"] + }, + "image/prs.pti": { + source: "iana" + }, + "image/pwg-raster": { + source: "iana" + }, + "image/sgi": { + source: "apache", + extensions: ["sgi"] + }, + "image/svg+xml": { + source: "iana", + compressible: true, + extensions: ["svg", "svgz"] + }, + "image/t38": { + source: "iana" + }, + "image/tiff": { + source: "iana", + compressible: false, + extensions: ["tiff", "tif"] + }, + "image/tiff-fx": { + source: "iana" + }, + "image/vnd.adobe.photoshop": { + source: "iana", + compressible: true, + extensions: ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + source: "iana" + }, + "image/vnd.cns.inf2": { + source: "iana" + }, + "image/vnd.dece.graphic": { + source: "iana", + extensions: ["uvi", "uvvi", "uvg", "uvvg"] + }, + "image/vnd.djvu": { + source: "iana", + extensions: ["djvu", "djv"] + }, + "image/vnd.dvb.subtitle": { + source: "iana", + extensions: ["sub"] + }, + "image/vnd.dwg": { + source: "iana", + extensions: ["dwg"] + }, + "image/vnd.dxf": { + source: "iana", + extensions: ["dxf"] + }, + "image/vnd.fastbidsheet": { + source: "iana", + extensions: ["fbs"] + }, + "image/vnd.fpx": { + source: "iana", + extensions: ["fpx"] + }, + "image/vnd.fst": { + source: "iana", + extensions: ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + source: "iana", + extensions: ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + source: "iana", + extensions: ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + source: "iana" + }, + "image/vnd.microsoft.icon": { + source: "iana" + }, + "image/vnd.mix": { + source: "iana" + }, + "image/vnd.mozilla.apng": { + source: "iana" + }, + "image/vnd.ms-modi": { + source: "iana", + extensions: ["mdi"] + }, + "image/vnd.ms-photo": { + source: "apache", + extensions: ["wdp"] + }, + "image/vnd.net-fpx": { + source: "iana", + extensions: ["npx"] + }, + "image/vnd.radiance": { + source: "iana" + }, + "image/vnd.sealed.png": { + source: "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + source: "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + source: "iana" + }, + "image/vnd.svf": { + source: "iana" + }, + "image/vnd.tencent.tap": { + source: "iana" + }, + "image/vnd.valve.source.texture": { + source: "iana" + }, + "image/vnd.wap.wbmp": { + source: "iana", + extensions: ["wbmp"] + }, + "image/vnd.xiff": { + source: "iana", + extensions: ["xif"] + }, + "image/vnd.zbrush.pcx": { + source: "iana" + }, + "image/webp": { + source: "apache", + extensions: ["webp"] + }, + "image/wmf": { + source: "iana" + }, + "image/x-3ds": { + source: "apache", + extensions: ["3ds"] + }, + "image/x-cmu-raster": { + source: "apache", + extensions: ["ras"] + }, + "image/x-cmx": { + source: "apache", + extensions: ["cmx"] + }, + "image/x-freehand": { + source: "apache", + extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] + }, + "image/x-icon": { + source: "apache", + compressible: true, + extensions: ["ico"] + }, + "image/x-jng": { + source: "nginx", + extensions: ["jng"] + }, + "image/x-mrsid-image": { + source: "apache", + extensions: ["sid"] + }, + "image/x-ms-bmp": { + source: "nginx", + compressible: true, + extensions: ["bmp"] + }, + "image/x-pcx": { + source: "apache", + extensions: ["pcx"] + }, + "image/x-pict": { + source: "apache", + extensions: ["pic", "pct"] + }, + "image/x-portable-anymap": { + source: "apache", + extensions: ["pnm"] + }, + "image/x-portable-bitmap": { + source: "apache", + extensions: ["pbm"] + }, + "image/x-portable-graymap": { + source: "apache", + extensions: ["pgm"] + }, + "image/x-portable-pixmap": { + source: "apache", + extensions: ["ppm"] + }, + "image/x-rgb": { + source: "apache", + extensions: ["rgb"] + }, + "image/x-tga": { + source: "apache", + extensions: ["tga"] + }, + "image/x-xbitmap": { + source: "apache", + extensions: ["xbm"] + }, + "image/x-xcf": { + compressible: false + }, + "image/x-xpixmap": { + source: "apache", + extensions: ["xpm"] + }, + "image/x-xwindowdump": { + source: "apache", + extensions: ["xwd"] + }, + "message/cpim": { + source: "iana" + }, + "message/delivery-status": { + source: "iana" + }, + "message/disposition-notification": { + source: "iana" + }, + "message/external-body": { + source: "iana" + }, + "message/feedback-report": { + source: "iana" + }, + "message/global": { + source: "iana" + }, + "message/global-delivery-status": { + source: "iana" + }, + "message/global-disposition-notification": { + source: "iana" + }, + "message/global-headers": { + source: "iana" + }, + "message/http": { + source: "iana", + compressible: false + }, + "message/imdn+xml": { + source: "iana", + compressible: true + }, + "message/news": { + source: "iana" + }, + "message/partial": { + source: "iana", + compressible: false + }, + "message/rfc822": { + source: "iana", + compressible: true, + extensions: ["eml", "mime"] + }, + "message/s-http": { + source: "iana" + }, + "message/sip": { + source: "iana" + }, + "message/sipfrag": { + source: "iana" + }, + "message/tracking-status": { + source: "iana" + }, + "message/vnd.si.simp": { + source: "iana" + }, + "message/vnd.wfa.wsc": { + source: "iana" + }, + "model/gltf+json": { + source: "iana", + compressible: true + }, + "model/iges": { + source: "iana", + compressible: false, + extensions: ["igs", "iges"] + }, + "model/mesh": { + source: "iana", + compressible: false, + extensions: ["msh", "mesh", "silo"] + }, + "model/vnd.collada+xml": { + source: "iana", + extensions: ["dae"] + }, + "model/vnd.dwf": { + source: "iana", + extensions: ["dwf"] + }, + "model/vnd.flatland.3dml": { + source: "iana" + }, + "model/vnd.gdl": { + source: "iana", + extensions: ["gdl"] + }, + "model/vnd.gs-gdl": { + source: "apache" + }, + "model/vnd.gs.gdl": { + source: "iana" + }, + "model/vnd.gtw": { + source: "iana", + extensions: ["gtw"] + }, + "model/vnd.moml+xml": { + source: "iana" + }, + "model/vnd.mts": { + source: "iana", + extensions: ["mts"] + }, + "model/vnd.opengex": { + source: "iana" + }, + "model/vnd.parasolid.transmit.binary": { + source: "iana" + }, + "model/vnd.parasolid.transmit.text": { + source: "iana" + }, + "model/vnd.rosette.annotated-data-model": { + source: "iana" + }, + "model/vnd.valve.source.compiled-map": { + source: "iana" + }, + "model/vnd.vtu": { + source: "iana", + extensions: ["vtu"] + }, + "model/vrml": { + source: "iana", + compressible: false, + extensions: ["wrl", "vrml"] + }, + "model/x3d+binary": { + source: "apache", + compressible: false, + extensions: ["x3db", "x3dbz"] + }, + "model/x3d+fastinfoset": { + source: "iana" + }, + "model/x3d+vrml": { + source: "apache", + compressible: false, + extensions: ["x3dv", "x3dvz"] + }, + "model/x3d+xml": { + source: "iana", + compressible: true, + extensions: ["x3d", "x3dz"] + }, + "model/x3d-vrml": { + source: "iana" + }, + "multipart/alternative": { + source: "iana", + compressible: false + }, + "multipart/appledouble": { + source: "iana" + }, + "multipart/byteranges": { + source: "iana" + }, + "multipart/digest": { + source: "iana" + }, + "multipart/encrypted": { + source: "iana", + compressible: false + }, + "multipart/form-data": { + source: "iana", + compressible: false + }, + "multipart/header-set": { + source: "iana" + }, + "multipart/mixed": { + source: "iana", + compressible: false + }, + "multipart/parallel": { + source: "iana" + }, + "multipart/related": { + source: "iana", + compressible: false + }, + "multipart/report": { + source: "iana" + }, + "multipart/signed": { + source: "iana", + compressible: false + }, + "multipart/voice-message": { + source: "iana" + }, + "multipart/x-mixed-replace": { + source: "iana" + }, + "text/1d-interleaved-parityfec": { + source: "iana" + }, + "text/cache-manifest": { + source: "iana", + compressible: true, + extensions: ["appcache", "manifest"] + }, + "text/calendar": { + source: "iana", + extensions: ["ics", "ifb"] + }, + "text/calender": { + compressible: true + }, + "text/cmd": { + compressible: true + }, + "text/coffeescript": { + extensions: ["coffee", "litcoffee"] + }, + "text/css": { + source: "iana", + compressible: true, + extensions: ["css"] + }, + "text/csv": { + source: "iana", + compressible: true, + extensions: ["csv"] + }, + "text/csv-schema": { + source: "iana" + }, + "text/directory": { + source: "iana" + }, + "text/dns": { + source: "iana" + }, + "text/ecmascript": { + source: "iana" + }, + "text/encaprtp": { + source: "iana" + }, + "text/enriched": { + source: "iana" + }, + "text/fwdred": { + source: "iana" + }, + "text/grammar-ref-list": { + source: "iana" + }, + "text/hjson": { + extensions: ["hjson"] + }, + "text/html": { + source: "iana", + compressible: true, + extensions: ["html", "htm", "shtml"] + }, + "text/jade": { + extensions: ["jade"] + }, + "text/javascript": { + source: "iana", + compressible: true + }, + "text/jcr-cnd": { + source: "iana" + }, + "text/jsx": { + compressible: true, + extensions: ["jsx"] + }, + "text/less": { + extensions: ["less"] + }, + "text/markdown": { + source: "iana" + }, + "text/mathml": { + source: "nginx", + extensions: ["mml"] + }, + "text/mizar": { + source: "iana" + }, + "text/n3": { + source: "iana", + compressible: true, + extensions: ["n3"] + }, + "text/parameters": { + source: "iana" + }, + "text/parityfec": { + source: "iana" + }, + "text/plain": { + source: "iana", + compressible: true, + extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] + }, + "text/provenance-notation": { + source: "iana" + }, + "text/prs.fallenstein.rst": { + source: "iana" + }, + "text/prs.lines.tag": { + source: "iana", + extensions: ["dsc"] + }, + "text/prs.prop.logic": { + source: "iana" + }, + "text/raptorfec": { + source: "iana" + }, + "text/red": { + source: "iana" + }, + "text/rfc822-headers": { + source: "iana" + }, + "text/richtext": { + source: "iana", + compressible: true, + extensions: ["rtx"] + }, + "text/rtf": { + source: "iana", + compressible: true, + extensions: ["rtf"] + }, + "text/rtp-enc-aescm128": { + source: "iana" + }, + "text/rtploopback": { + source: "iana" + }, + "text/rtx": { + source: "iana" + }, + "text/sgml": { + source: "iana", + extensions: ["sgml", "sgm"] + }, + "text/slim": { + extensions: ["slim", "slm"] + }, + "text/stylus": { + extensions: ["stylus", "styl"] + }, + "text/t140": { + source: "iana" + }, + "text/tab-separated-values": { + source: "iana", + compressible: true, + extensions: ["tsv"] + }, + "text/troff": { + source: "iana", + extensions: ["t", "tr", "roff", "man", "me", "ms"] + }, + "text/turtle": { + source: "iana", + extensions: ["ttl"] + }, + "text/ulpfec": { + source: "iana" + }, + "text/uri-list": { + source: "iana", + compressible: true, + extensions: ["uri", "uris", "urls"] + }, + "text/vcard": { + source: "iana", + compressible: true, + extensions: ["vcard"] + }, + "text/vnd.a": { + source: "iana" + }, + "text/vnd.abc": { + source: "iana" + }, + "text/vnd.ascii-art": { + source: "iana" + }, + "text/vnd.curl": { + source: "iana", + extensions: ["curl"] + }, + "text/vnd.curl.dcurl": { + source: "apache", + extensions: ["dcurl"] + }, + "text/vnd.curl.mcurl": { + source: "apache", + extensions: ["mcurl"] + }, + "text/vnd.curl.scurl": { + source: "apache", + extensions: ["scurl"] + }, + "text/vnd.debian.copyright": { + source: "iana" + }, + "text/vnd.dmclientscript": { + source: "iana" + }, + "text/vnd.dvb.subtitle": { + source: "iana", + extensions: ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + source: "iana" + }, + "text/vnd.fly": { + source: "iana", + extensions: ["fly"] + }, + "text/vnd.fmi.flexstor": { + source: "iana", + extensions: ["flx"] + }, + "text/vnd.graphviz": { + source: "iana", + extensions: ["gv"] + }, + "text/vnd.in3d.3dml": { + source: "iana", + extensions: ["3dml"] + }, + "text/vnd.in3d.spot": { + source: "iana", + extensions: ["spot"] + }, + "text/vnd.iptc.newsml": { + source: "iana" + }, + "text/vnd.iptc.nitf": { + source: "iana" + }, + "text/vnd.latex-z": { + source: "iana" + }, + "text/vnd.motorola.reflex": { + source: "iana" + }, + "text/vnd.ms-mediapackage": { + source: "iana" + }, + "text/vnd.net2phone.commcenter.command": { + source: "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + source: "iana" + }, + "text/vnd.si.uricatalogue": { + source: "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + source: "iana", + extensions: ["jad"] + }, + "text/vnd.trolltech.linguist": { + source: "iana" + }, + "text/vnd.wap.si": { + source: "iana" + }, + "text/vnd.wap.sl": { + source: "iana" + }, + "text/vnd.wap.wml": { + source: "iana", + extensions: ["wml"] + }, + "text/vnd.wap.wmlscript": { + source: "iana", + extensions: ["wmls"] + }, + "text/vtt": { + charset: "UTF-8", + compressible: true, + extensions: ["vtt"] + }, + "text/x-asm": { + source: "apache", + extensions: ["s", "asm"] + }, + "text/x-c": { + source: "apache", + extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] + }, + "text/x-component": { + source: "nginx", + extensions: ["htc"] + }, + "text/x-fortran": { + source: "apache", + extensions: ["f", "for", "f77", "f90"] + }, + "text/x-gwt-rpc": { + compressible: true + }, + "text/x-handlebars-template": { + extensions: ["hbs"] + }, + "text/x-java-source": { + source: "apache", + extensions: ["java"] + }, + "text/x-jquery-tmpl": { + compressible: true + }, + "text/x-lua": { + extensions: ["lua"] + }, + "text/x-markdown": { + compressible: true, + extensions: ["markdown", "md", "mkd"] + }, + "text/x-nfo": { + source: "apache", + extensions: ["nfo"] + }, + "text/x-opml": { + source: "apache", + extensions: ["opml"] + }, + "text/x-pascal": { + source: "apache", + extensions: ["p", "pas"] + }, + "text/x-processing": { + compressible: true, + extensions: ["pde"] + }, + "text/x-sass": { + extensions: ["sass"] + }, + "text/x-scss": { + extensions: ["scss"] + }, + "text/x-setext": { + source: "apache", + extensions: ["etx"] + }, + "text/x-sfv": { + source: "apache", + extensions: ["sfv"] + }, + "text/x-suse-ymp": { + compressible: true, + extensions: ["ymp"] + }, + "text/x-uuencode": { + source: "apache", + extensions: ["uu"] + }, + "text/x-vcalendar": { + source: "apache", + extensions: ["vcs"] + }, + "text/x-vcard": { + source: "apache", + extensions: ["vcf"] + }, + "text/xml": { + source: "iana", + compressible: true, + extensions: ["xml"] + }, + "text/xml-external-parsed-entity": { + source: "iana" + }, + "text/yaml": { + extensions: ["yaml", "yml"] + }, + "video/1d-interleaved-parityfec": { + source: "apache" + }, + "video/3gpp": { + source: "apache", + extensions: ["3gp", "3gpp"] + }, + "video/3gpp-tt": { + source: "apache" + }, + "video/3gpp2": { + source: "apache", + extensions: ["3g2"] + }, + "video/bmpeg": { + source: "apache" + }, + "video/bt656": { + source: "apache" + }, + "video/celb": { + source: "apache" + }, + "video/dv": { + source: "apache" + }, + "video/encaprtp": { + source: "apache" + }, + "video/h261": { + source: "apache", + extensions: ["h261"] + }, + "video/h263": { + source: "apache", + extensions: ["h263"] + }, + "video/h263-1998": { + source: "apache" + }, + "video/h263-2000": { + source: "apache" + }, + "video/h264": { + source: "apache", + extensions: ["h264"] + }, + "video/h264-rcdo": { + source: "apache" + }, + "video/h264-svc": { + source: "apache" + }, + "video/h265": { + source: "apache" + }, + "video/iso.segment": { + source: "apache" + }, + "video/jpeg": { + source: "apache", + extensions: ["jpgv"] + }, + "video/jpeg2000": { + source: "apache" + }, + "video/jpm": { + source: "apache", + extensions: ["jpm", "jpgm"] + }, + "video/mj2": { + source: "apache", + extensions: ["mj2", "mjp2"] + }, + "video/mp1s": { + source: "apache" + }, + "video/mp2p": { + source: "apache" + }, + "video/mp2t": { + source: "apache", + extensions: ["ts"] + }, + "video/mp4": { + source: "apache", + compressible: false, + extensions: ["mp4", "mp4v", "mpg4"] + }, + "video/mp4v-es": { + source: "apache" + }, + "video/mpeg": { + source: "apache", + compressible: false, + extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] + }, + "video/mpeg4-generic": { + source: "apache" + }, + "video/mpv": { + source: "apache" + }, + "video/nv": { + source: "apache" + }, + "video/ogg": { + source: "apache", + compressible: false, + extensions: ["ogv"] + }, + "video/parityfec": { + source: "apache" + }, + "video/pointer": { + source: "apache" + }, + "video/quicktime": { + source: "apache", + compressible: false, + extensions: ["qt", "mov"] + }, + "video/raptorfec": { + source: "apache" + }, + "video/raw": { + source: "apache" + }, + "video/rtp-enc-aescm128": { + source: "apache" + }, + "video/rtploopback": { + source: "apache" + }, + "video/rtx": { + source: "apache" + }, + "video/smpte292m": { + source: "apache" + }, + "video/ulpfec": { + source: "apache" + }, + "video/vc1": { + source: "apache" + }, + "video/vnd.cctv": { + source: "apache" + }, + "video/vnd.dece.hd": { + source: "apache", + extensions: ["uvh", "uvvh"] + }, + "video/vnd.dece.mobile": { + source: "apache", + extensions: ["uvm", "uvvm"] + }, + "video/vnd.dece.mp4": { + source: "apache" + }, + "video/vnd.dece.pd": { + source: "apache", + extensions: ["uvp", "uvvp"] + }, + "video/vnd.dece.sd": { + source: "apache", + extensions: ["uvs", "uvvs"] + }, + "video/vnd.dece.video": { + source: "apache", + extensions: ["uvv", "uvvv"] + }, + "video/vnd.directv.mpeg": { + source: "apache" + }, + "video/vnd.directv.mpeg-tts": { + source: "apache" + }, + "video/vnd.dlna.mpeg-tts": { + source: "apache" + }, + "video/vnd.dvb.file": { + source: "apache", + extensions: ["dvb"] + }, + "video/vnd.fvt": { + source: "apache", + extensions: ["fvt"] + }, + "video/vnd.hns.video": { + source: "apache" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + source: "apache" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + source: "apache" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + source: "apache" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + source: "apache" + }, + "video/vnd.iptvforum.ttsavc": { + source: "apache" + }, + "video/vnd.iptvforum.ttsmpeg2": { + source: "apache" + }, + "video/vnd.motorola.video": { + source: "apache" + }, + "video/vnd.motorola.videop": { + source: "apache" + }, + "video/vnd.mpegurl": { + source: "apache", + extensions: ["mxu", "m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + source: "apache", + extensions: ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + source: "apache" + }, + "video/vnd.nokia.videovoip": { + source: "apache" + }, + "video/vnd.objectvideo": { + source: "apache" + }, + "video/vnd.radgamettools.bink": { + source: "apache" + }, + "video/vnd.radgamettools.smacker": { + source: "apache" + }, + "video/vnd.sealed.mpeg1": { + source: "apache" + }, + "video/vnd.sealed.mpeg4": { + source: "apache" + }, + "video/vnd.sealed.swf": { + source: "apache" + }, + "video/vnd.sealedmedia.softseal.mov": { + source: "apache" + }, + "video/vnd.uvvu.mp4": { + source: "apache", + extensions: ["uvu", "uvvu"] + }, + "video/vnd.vivo": { + source: "apache", + extensions: ["viv"] + }, + "video/vp8": { + source: "apache" + }, + "video/webm": { + source: "apache", + compressible: false, + extensions: ["webm"] + }, + "video/x-f4v": { + source: "apache", + extensions: ["f4v"] + }, + "video/x-fli": { + source: "apache", + extensions: ["fli"] + }, + "video/x-flv": { + source: "apache", + compressible: false, + extensions: ["flv"] + }, + "video/x-m4v": { + source: "apache", + extensions: ["m4v"] + }, + "video/x-matroska": { + source: "apache", + compressible: false, + extensions: ["mkv", "mk3d", "mks"] + }, + "video/x-mng": { + source: "apache", + extensions: ["mng"] + }, + "video/x-ms-asf": { + source: "apache", + extensions: ["asf", "asx"] + }, + "video/x-ms-vob": { + source: "apache", + extensions: ["vob"] + }, + "video/x-ms-wm": { + source: "apache", + extensions: ["wm"] + }, + "video/x-ms-wmv": { + source: "apache", + compressible: false, + extensions: ["wmv"] + }, + "video/x-ms-wmx": { + source: "apache", + extensions: ["wmx"] + }, + "video/x-ms-wvx": { + source: "apache", + extensions: ["wvx"] + }, + "video/x-msvideo": { + source: "apache", + extensions: ["avi"] + }, + "video/x-sgi-movie": { + source: "apache", + extensions: ["movie"] + }, + "video/x-smv": { + source: "apache", + extensions: ["smv"] + }, + "x-conference/x-cooltalk": { + source: "apache", + extensions: ["ice"] + }, + "x-shader/x-fragment": { + compressible: true + }, + "x-shader/x-vertex": { + compressible: true + } + }; + } +}); + +// node_modules/mime-db/index.js +var require_mime_db = __commonJS({ + "node_modules/mime-db/index.js"(exports, module2) { + module2.exports = require_db(); + } +}); + +// node_modules/mime-types/index.js +var require_mime_types = __commonJS({ + "node_modules/mime-types/index.js"(exports) { + "use strict"; + var db = require_mime_db(); + var extname = require("path").extname; + var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/; + var textTypeRegExp = /^text\//i; + exports.charset = charset; + exports.charsets = { lookup: charset }; + exports.contentType = contentType; + exports.extension = extension; + exports.extensions = /* @__PURE__ */ Object.create(null); + exports.lookup = lookup2; + exports.types = /* @__PURE__ */ Object.create(null); + populateMaps(exports.extensions, exports.types); + function charset(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = extractTypeRegExp.exec(type); + var mime3 = match && db[match[1].toLowerCase()]; + if (mime3 && mime3.charset) { + return mime3.charset; + } + if (match && textTypeRegExp.test(match[1])) { + return "UTF-8"; + } + return false; + } + function contentType(str) { + if (!str || typeof str !== "string") { + return false; + } + var mime3 = str.indexOf("/") === -1 ? exports.lookup(str) : str; + if (!mime3) { + return false; + } + if (mime3.indexOf("charset") === -1) { + var charset2 = exports.charset(mime3); + if (charset2) + mime3 += "; charset=" + charset2.toLowerCase(); + } + return mime3; + } + function extension(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = extractTypeRegExp.exec(type); + var exts = match && exports.extensions[match[1].toLowerCase()]; + if (!exts || !exts.length) { + return false; + } + return exts[0]; + } + function lookup2(path) { + if (!path || typeof path !== "string") { + return false; + } + var extension2 = extname("x." + path).toLowerCase().substr(1); + if (!extension2) { + return false; + } + return exports.types[extension2] || false; + } + function populateMaps(extensions2, types) { + var preference = ["nginx", "apache", void 0, "iana"]; + Object.keys(db).forEach(function forEachMimeType(type) { + var mime3 = db[type]; + var exts = mime3.extensions; + if (!exts || !exts.length) { + return; + } + extensions2[type] = exts; + for (var i = 0; i < exts.length; i++) { + var extension2 = exts[i]; + if (types[extension2]) { + var from = preference.indexOf(db[types[extension2]].source); + var to = preference.indexOf(mime3.source); + if (types[extension2] !== "application/octet-stream" && from > to || from === to && types[extension2].substr(0, 12) === "application/") { + continue; + } + } + types[extension2] = type; + } + }); + } + } +}); + +// node_modules/xml/lib/escapeForXML.js +var require_escapeForXML = __commonJS({ + "node_modules/xml/lib/escapeForXML.js"(exports, module2) { + var XML_CHARACTER_MAP = { + "&": "&", + '"': """, + "'": "'", + "<": "<", + ">": ">" + }; + function escapeForXML(string) { + return string && string.replace ? string.replace(/([&"<>'])/g, function(str, item) { + return XML_CHARACTER_MAP[item]; + }) : string; + } + module2.exports = escapeForXML; + } +}); + +// node_modules/xml/lib/xml.js +var require_xml = __commonJS({ + "node_modules/xml/lib/xml.js"(exports, module2) { + var escapeForXML = require_escapeForXML(); + var Stream = require("stream").Stream; + var DEFAULT_INDENT = " "; + function xml(input, options) { + if (typeof options !== "object") { + options = { + indent: options + }; + } + var stream = options.stream ? new Stream() : null, output = "", interrupted = false, indent = !options.indent ? "" : options.indent === true ? DEFAULT_INDENT : options.indent, instant = true; + function delay(func) { + if (!instant) { + func(); + } else { + process.nextTick(func); + } + } + function append(interrupt, out) { + if (out !== void 0) { + output += out; + } + if (interrupt && !interrupted) { + stream = stream || new Stream(); + interrupted = true; + } + if (interrupt && interrupted) { + var data = output; + delay(function() { + stream.emit("data", data); + }); + output = ""; + } + } + function add(value, last2) { + format(append, resolve(value, indent, indent ? 1 : 0), last2); + } + function end() { + if (stream) { + var data = output; + delay(function() { + stream.emit("data", data); + stream.emit("end"); + stream.readable = false; + stream.emit("close"); + }); + } + } + function addXmlDeclaration(declaration) { + var encoding = declaration.encoding || "UTF-8", attr = { version: "1.0", encoding }; + if (declaration.standalone) { + attr.standalone = declaration.standalone; + } + add({ "?xml": { _attr: attr } }); + output = output.replace("/>", "?>"); + } + delay(function() { + instant = false; + }); + if (options.declaration) { + addXmlDeclaration(options.declaration); + } + if (input && input.forEach) { + input.forEach(function(value, i) { + var last2; + if (i + 1 === input.length) + last2 = end; + add(value, last2); + }); + } else { + add(input, end); + } + if (stream) { + stream.readable = true; + return stream; + } + return output; + } + function element() { + var input = Array.prototype.slice.call(arguments), self2 = { + _elem: resolve(input) + }; + self2.push = function(input2) { + if (!this.append) { + throw new Error("not assigned to a parent!"); + } + var that = this; + var indent = this._elem.indent; + format(this.append, resolve(input2, indent, this._elem.icount + (indent ? 1 : 0)), function() { + that.append(true); + }); + }; + self2.close = function(input2) { + if (input2 !== void 0) { + this.push(input2); + } + if (this.end) { + this.end(); + } + }; + return self2; + } + function create_indent(character, count) { + return new Array(count || 0).join(character || ""); + } + function resolve(data, indent, indent_count) { + indent_count = indent_count || 0; + var indent_spaces = create_indent(indent, indent_count); + var name; + var values = data; + var interrupt = false; + if (typeof data === "object") { + var keys = Object.keys(data); + name = keys[0]; + values = data[name]; + if (values && values._elem) { + values._elem.name = name; + values._elem.icount = indent_count; + values._elem.indent = indent; + values._elem.indents = indent_spaces; + values._elem.interrupt = values; + return values._elem; + } + } + var attributes = [], content = []; + var isStringContent; + function get_attributes(obj) { + var keys2 = Object.keys(obj); + keys2.forEach(function(key) { + attributes.push(attribute(key, obj[key])); + }); + } + switch (typeof values) { + case "object": + if (values === null) + break; + if (values._attr) { + get_attributes(values._attr); + } + if (values._cdata) { + content.push(("/g, "]]]]>") + "]]>"); + } + if (values.forEach) { + isStringContent = false; + content.push(""); + values.forEach(function(value) { + if (typeof value == "object") { + var _name = Object.keys(value)[0]; + if (_name == "_attr") { + get_attributes(value._attr); + } else { + content.push(resolve(value, indent, indent_count + 1)); + } + } else { + content.pop(); + isStringContent = true; + content.push(escapeForXML(value)); + } + }); + if (!isStringContent) { + content.push(""); + } + } + break; + default: + content.push(escapeForXML(values)); + } + return { + name, + interrupt, + attributes, + content, + icount: indent_count, + indents: indent_spaces, + indent + }; + } + function format(append, elem, end) { + if (typeof elem != "object") { + return append(false, elem); + } + var len = elem.interrupt ? 1 : elem.content.length; + function proceed() { + while (elem.content.length) { + var value = elem.content.shift(); + if (value === void 0) + continue; + if (interrupt(value)) + return; + format(append, value); + } + append(false, (len > 1 ? elem.indents : "") + (elem.name ? "" : "") + (elem.indent && !end ? "\n" : "")); + if (end) { + end(); + } + } + function interrupt(value) { + if (value.interrupt) { + value.interrupt.append = append; + value.interrupt.end = proceed; + value.interrupt = false; + append(true); + return true; + } + return false; + } + append(false, elem.indents + (elem.name ? "<" + elem.name : "") + (elem.attributes.length ? " " + elem.attributes.join(" ") : "") + (len ? elem.name ? ">" : "" : elem.name ? "/>" : "") + (elem.indent && len > 1 ? "\n" : "")); + if (!len) { + return append(false, elem.indent ? "\n" : ""); + } + if (!interrupt(elem)) { + proceed(); + } + } + function attribute(key, value) { + return key + '="' + escapeForXML(value) + '"'; + } + module2.exports = xml; + module2.exports.element = module2.exports.Element = element; + } +}); + +// node_modules/rss/lib/index.js +var require_lib3 = __commonJS({ + "node_modules/rss/lib/index.js"(exports, module2) { + "use strict"; + var mime3 = require_mime_types(); + var xml = require_xml(); + var fs2 = require("fs"); + function ifTruePush(bool, array, data) { + if (bool) { + array.push(data); + } + } + function ifTruePushArray(bool, array, dataArray) { + if (!bool) { + return; + } + dataArray.forEach(function(item) { + ifTruePush(item, array, item); + }); + } + function getSize(filename) { + if (typeof fs2 === "undefined") { + return 0; + } + return fs2.statSync(filename).size; + } + function generateXML(data) { + var channel = []; + channel.push({ title: { _cdata: data.title } }); + channel.push({ description: { _cdata: data.description || data.title } }); + channel.push({ link: data.site_url || "http://github.com/dylang/node-rss" }); + if (data.image_url) { + channel.push({ image: [{ url: data.image_url }, { title: data.title }, { link: data.site_url }] }); + } + channel.push({ generator: data.generator }); + channel.push({ lastBuildDate: new Date().toUTCString() }); + ifTruePush(data.feed_url, channel, { "atom:link": { _attr: { href: data.feed_url, rel: "self", type: "application/rss+xml" } } }); + ifTruePush(data.author, channel, { "author": { _cdata: data.author } }); + ifTruePush(data.pubDate, channel, { "pubDate": new Date(data.pubDate).toGMTString() }); + ifTruePush(data.copyright, channel, { "copyright": { _cdata: data.copyright } }); + ifTruePush(data.language, channel, { "language": { _cdata: data.language } }); + ifTruePush(data.managingEditor, channel, { "managingEditor": { _cdata: data.managingEditor } }); + ifTruePush(data.webMaster, channel, { "webMaster": { _cdata: data.webMaster } }); + ifTruePush(data.docs, channel, { "docs": data.docs }); + ifTruePush(data.ttl, channel, { "ttl": data.ttl }); + ifTruePush(data.hub, channel, { "atom:link": { _attr: { href: data.hub, rel: "hub" } } }); + if (data.categories) { + data.categories.forEach(function(category) { + ifTruePush(category, channel, { category: { _cdata: category } }); + }); + } + ifTruePushArray(data.custom_elements, channel, data.custom_elements); + data.items.forEach(function(item) { + var item_values = [ + { title: { _cdata: item.title } } + ]; + ifTruePush(item.description, item_values, { description: { _cdata: item.description } }); + ifTruePush(item.url, item_values, { link: item.url }); + ifTruePush(item.link || item.guid || item.title, item_values, { guid: [{ _attr: { isPermaLink: !item.guid && !!item.url } }, item.guid || item.url || item.title] }); + item.categories.forEach(function(category) { + ifTruePush(category, item_values, { category: { _cdata: category } }); + }); + ifTruePush(item.author || data.author, item_values, { "dc:creator": { _cdata: item.author || data.author } }); + ifTruePush(item.date, item_values, { pubDate: new Date(item.date).toGMTString() }); + data.geoRSS = data.geoRSS || item.lat && item.long; + ifTruePush(item.lat, item_values, { "geo:lat": item.lat }); + ifTruePush(item.long, item_values, { "geo:long": item.long }); + if (item.enclosure && item.enclosure.url) { + if (item.enclosure.file) { + item_values.push({ + enclosure: { + _attr: { + url: item.enclosure.url, + length: item.enclosure.size || getSize(item.enclosure.file), + type: item.enclosure.type || mime3.lookup(item.enclosure.file) + } + } + }); + } else { + item_values.push({ + enclosure: { + _attr: { + url: item.enclosure.url, + length: item.enclosure.size || 0, + type: item.enclosure.type || mime3.lookup(item.enclosure.url) + } + } + }); + } + } + ifTruePushArray(item.custom_elements, item_values, item.custom_elements); + channel.push({ item: item_values }); + }); + var _attr = { + "xmlns:dc": "http://purl.org/dc/elements/1.1/", + "xmlns:content": "http://purl.org/rss/1.0/modules/content/", + "xmlns:atom": "http://www.w3.org/2005/Atom", + version: "2.0" + }; + Object.keys(data.custom_namespaces).forEach(function(name) { + _attr["xmlns:" + name] = data.custom_namespaces[name]; + }); + if (data.geoRSS) { + _attr["xmlns:geo"] = "http://www.w3.org/2003/01/geo/wgs84_pos#"; + } + return { + rss: [ + { _attr }, + { channel } + ] + }; + } + function RSS2(options, items) { + options = options || {}; + this.title = options.title || "Untitled RSS Feed"; + this.description = options.description || ""; + this.generator = options.generator || "RSS for Node"; + this.feed_url = options.feed_url; + this.site_url = options.site_url; + this.image_url = options.image_url; + this.author = options.author; + this.categories = options.categories; + this.pubDate = options.pubDate; + this.hub = options.hub; + this.docs = options.docs; + this.copyright = options.copyright; + this.language = options.language; + this.managingEditor = options.managingEditor; + this.webMaster = options.webMaster; + this.ttl = options.ttl; + this.geoRSS = options.geoRSS || false; + this.custom_namespaces = options.custom_namespaces || {}; + this.custom_elements = options.custom_elements || []; + this.items = items || []; + this.item = function(options2) { + options2 = options2 || {}; + var item = { + title: options2.title || "No title", + description: options2.description || "", + url: options2.url, + guid: options2.guid, + categories: options2.categories || [], + author: options2.author, + date: options2.date, + lat: options2.lat, + long: options2.long, + enclosure: options2.enclosure || false, + custom_elements: options2.custom_elements || [] + }; + this.items.push(item); + return this; + }; + this.xml = function(indent) { + return '' + xml(generateXML(this), indent); + }; + } + module2.exports = RSS2; + } +}); + +// node_modules/upath/build/code/upath.js +var require_upath = __commonJS({ + "node_modules/upath/build/code/upath.js"(exports) { + var VERSION = "2.0.1"; + var extraFn; + var extraFunctions; + var isFunction; + var isString; + var isValidExt; + var name; + var path; + var propName; + var propValue; + var toUnix; + var upath; + var slice = [].slice; + var indexOf = [].indexOf || function(item) { + for (var i = 0, l = this.length; i < l; i++) { + if (i in this && this[i] === item) + return i; + } + return -1; + }; + var hasProp = {}.hasOwnProperty; + path = require("path"); + isFunction = function(val) { + return typeof val === "function"; + }; + isString = function(val) { + return typeof val === "string" || !!val && typeof val === "object" && Object.prototype.toString.call(val) === "[object String]"; + }; + upath = exports; + upath.VERSION = typeof VERSION !== "undefined" && VERSION !== null ? VERSION : "NO-VERSION"; + toUnix = function(p) { + p = p.replace(/\\/g, "/"); + p = p.replace(/(? 0) { + p0 = toUnix(p[0]); + if (p0.startsWith("./") && !result.startsWith("./") && !result.startsWith("..")) { + result = "./" + result; + } else if (p0.startsWith("//") && !result.startsWith("//")) { + if (p0.startsWith("//./")) { + result = "//." + result; + } else { + result = "/" + result; + } + } + } + return result; + }, + addExt: function(file, ext) { + if (!ext) { + return file; + } else { + if (ext[0] !== ".") { + ext = "." + ext; + } + return file + (file.endsWith(ext) ? "" : ext); + } + }, + trimExt: function(filename, ignoreExts, maxSize) { + var oldExt; + if (maxSize == null) { + maxSize = 7; + } + oldExt = upath.extname(filename); + if (isValidExt(oldExt, ignoreExts, maxSize)) { + return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9e9); + } else { + return filename; + } + }, + removeExt: function(filename, ext) { + if (!ext) { + return filename; + } else { + ext = ext[0] === "." ? ext : "." + ext; + if (upath.extname(filename) === ext) { + return upath.trimExt(filename, [], ext.length); + } else { + return filename; + } + } + }, + changeExt: function(filename, ext, ignoreExts, maxSize) { + if (maxSize == null) { + maxSize = 7; + } + return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? "" : ext[0] === "." ? ext : "." + ext); + }, + defaultExt: function(filename, ext, ignoreExts, maxSize) { + var oldExt; + if (maxSize == null) { + maxSize = 7; + } + oldExt = upath.extname(filename); + if (isValidExt(oldExt, ignoreExts, maxSize)) { + return filename; + } else { + return upath.addExt(filename, ext); + } + } + }; + isValidExt = function(ext, ignoreExts, maxSize) { + if (ignoreExts == null) { + ignoreExts = []; + } + return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function(e) { + return (e && e[0] !== "." ? "." : "") + e; + }), ext) < 0; + }; + for (name in extraFunctions) { + if (!hasProp.call(extraFunctions, name)) + continue; + extraFn = extraFunctions[name]; + if (upath[name] !== void 0) { + throw new Error("path." + name + " already exists."); + } else { + upath[name] = extraFn; + } + } + } +}); + +// node_modules/readable-stream/lib/internal/streams/stream-browser.js +var require_stream_browser = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/stream-browser.js"(exports, module2) { + module2.exports = require("events").EventEmitter; + } +}); + +// node_modules/readable-stream/lib/internal/streams/buffer_list.js +var require_buffer_list = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/buffer_list.js"(exports, module2) { + "use strict"; + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function(sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + return keys; + } + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), true).forEach(function(key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + return target; + } + function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); + } else { + obj[key] = value; + } + return obj; + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) + descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) + _defineProperties(Constructor.prototype, protoProps); + if (staticProps) + _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { writable: false }); + return Constructor; + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) + return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== void 0) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") + return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + var _require = require("buffer"); + var Buffer5 = _require.Buffer; + var _require2 = require("util"); + var inspect = _require2.inspect; + var custom = inspect && inspect.custom || "inspect"; + function copyBuffer(src, target, offset) { + Buffer5.prototype.copy.call(src, target, offset); + } + module2.exports = /* @__PURE__ */ function() { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + _createClass(BufferList, [{ + key: "push", + value: function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) + this.tail.next = entry; + else + this.head = entry; + this.tail = entry; + ++this.length; + } + }, { + key: "unshift", + value: function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) + this.tail = entry; + this.head = entry; + ++this.length; + } + }, { + key: "shift", + value: function shift() { + if (this.length === 0) + return; + var ret = this.head.data; + if (this.length === 1) + this.head = this.tail = null; + else + this.head = this.head.next; + --this.length; + return ret; + } + }, { + key: "clear", + value: function clear() { + this.head = this.tail = null; + this.length = 0; + } + }, { + key: "join", + value: function join(s) { + if (this.length === 0) + return ""; + var p = this.head; + var ret = "" + p.data; + while (p = p.next) + ret += s + p.data; + return ret; + } + }, { + key: "concat", + value: function concat(n) { + if (this.length === 0) + return Buffer5.alloc(0); + var ret = Buffer5.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + } + }, { + key: "consume", + value: function consume(n, hasStrings) { + var ret; + if (n < this.head.data.length) { + ret = this.head.data.slice(0, n); + this.head.data = this.head.data.slice(n); + } else if (n === this.head.data.length) { + ret = this.shift(); + } else { + ret = hasStrings ? this._getString(n) : this._getBuffer(n); + } + return ret; + } + }, { + key: "first", + value: function first() { + return this.head.data; + } + }, { + key: "_getString", + value: function _getString(n) { + var p = this.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) + ret += str; + else + ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) + this.head = p.next; + else + this.head = this.tail = null; + } else { + this.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + }, { + key: "_getBuffer", + value: function _getBuffer(n) { + var ret = Buffer5.allocUnsafe(n); + var p = this.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) + this.head = p.next; + else + this.head = this.tail = null; + } else { + this.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + }, { + key: custom, + value: function value(_, options) { + return inspect(this, _objectSpread(_objectSpread({}, options), {}, { + depth: 0, + customInspect: false + })); + } + }]); + return BufferList; + }(); + } +}); + +// node_modules/readable-stream/lib/internal/streams/destroy.js +var require_destroy = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/destroy.js"(exports, module2) { + "use strict"; + function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + return this; + } + if (this._readableState) { + this._readableState.destroyed = true; + } + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function(err2) { + if (!cb && err2) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err2); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err2); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err2); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + return this; + } + function emitErrorAndCloseNT(self2, err) { + emitErrorNT(self2, err); + emitCloseNT(self2); + } + function emitCloseNT(self2) { + if (self2._writableState && !self2._writableState.emitClose) + return; + if (self2._readableState && !self2._readableState.emitClose) + return; + self2.emit("close"); + } + function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } + } + function emitErrorNT(self2, err) { + self2.emit("error", err); + } + function errorOrDestroy(stream, err) { + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) + stream.destroy(err); + else + stream.emit("error", err); + } + module2.exports = { + destroy, + undestroy, + errorOrDestroy + }; + } +}); + +// node_modules/readable-stream/errors-browser.js +var require_errors_browser = __commonJS({ + "node_modules/readable-stream/errors-browser.js"(exports, module2) { + "use strict"; + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var codes = {}; + function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + function getMessage(arg1, arg2, arg3) { + if (typeof message === "string") { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + var NodeError = /* @__PURE__ */ function(_Base) { + _inheritsLoose(NodeError2, _Base); + function NodeError2(arg1, arg2, arg3) { + return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; + } + return NodeError2; + }(Base); + NodeError.prototype.name = Base.name; + NodeError.prototype.code = code; + codes[code] = NodeError; + } + function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function(i) { + return String(i); + }); + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(", "), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } + } + function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + } + function endsWith(str, search, this_len) { + if (this_len === void 0 || this_len > str.length) { + this_len = str.length; + } + return str.substring(this_len - search.length, this_len) === search; + } + function includes(str, search, start) { + if (typeof start !== "number") { + start = 0; + } + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } + } + createErrorType("ERR_INVALID_OPT_VALUE", function(name, value) { + return 'The value "' + value + '" is invalid for option "' + name + '"'; + }, TypeError); + createErrorType("ERR_INVALID_ARG_TYPE", function(name, expected, actual) { + var determiner; + if (typeof expected === "string" && startsWith(expected, "not ")) { + determiner = "must not be"; + expected = expected.replace(/^not /, ""); + } else { + determiner = "must be"; + } + var msg; + if (endsWith(name, " argument")) { + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, "type")); + } else { + var type = includes(name, ".") ? "property" : "argument"; + msg = 'The "'.concat(name, '" ').concat(type, " ").concat(determiner, " ").concat(oneOf(expected, "type")); + } + msg += ". Received type ".concat(typeof actual); + return msg; + }, TypeError); + createErrorType("ERR_STREAM_PUSH_AFTER_EOF", "stream.push() after EOF"); + createErrorType("ERR_METHOD_NOT_IMPLEMENTED", function(name) { + return "The " + name + " method is not implemented"; + }); + createErrorType("ERR_STREAM_PREMATURE_CLOSE", "Premature close"); + createErrorType("ERR_STREAM_DESTROYED", function(name) { + return "Cannot call " + name + " after a stream was destroyed"; + }); + createErrorType("ERR_MULTIPLE_CALLBACK", "Callback called multiple times"); + createErrorType("ERR_STREAM_CANNOT_PIPE", "Cannot pipe, not readable"); + createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end"); + createErrorType("ERR_STREAM_NULL_VALUES", "May not write null values to stream", TypeError); + createErrorType("ERR_UNKNOWN_ENCODING", function(arg) { + return "Unknown encoding: " + arg; + }, TypeError); + createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "stream.unshift() after end event"); + module2.exports.codes = codes; + } +}); + +// node_modules/readable-stream/lib/internal/streams/state.js +var require_state = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/state.js"(exports, module2) { + "use strict"; + var ERR_INVALID_OPT_VALUE = require_errors_browser().codes.ERR_INVALID_OPT_VALUE; + function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; + } + function getHighWaterMark(state, options, duplexKey, isDuplex) { + var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + if (hwm != null) { + if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { + var name = isDuplex ? duplexKey : "highWaterMark"; + throw new ERR_INVALID_OPT_VALUE(name, hwm); + } + return Math.floor(hwm); + } + return state.objectMode ? 16 : 16 * 1024; + } + module2.exports = { + getHighWaterMark + }; + } +}); + +// node_modules/inherits/inherits_browser.js +var require_inherits_browser = __commonJS({ + "node_modules/inherits/inherits_browser.js"(exports, module2) { + if (typeof Object.create === "function") { + module2.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + } + }; + } else { + module2.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function() { + }; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; + } + } +}); + +// node_modules/util-deprecate/browser.js +var require_browser = __commonJS({ + "node_modules/util-deprecate/browser.js"(exports, module2) { + module2.exports = deprecate; + function deprecate(fn, msg) { + if (config("noDeprecation")) { + return fn; + } + var warned = false; + function deprecated() { + if (!warned) { + if (config("throwDeprecation")) { + throw new Error(msg); + } else if (config("traceDeprecation")) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + return deprecated; + } + function config(name) { + try { + if (!global.localStorage) + return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (val == null) + return false; + return String(val).toLowerCase() === "true"; + } + } +}); + +// node_modules/readable-stream/lib/_stream_writable.js +var require_stream_writable = __commonJS({ + "node_modules/readable-stream/lib/_stream_writable.js"(exports, module2) { + "use strict"; + module2.exports = Writable; + function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function() { + onCorkedFinish(_this, state); + }; + } + var Duplex; + Writable.WritableState = WritableState; + var internalUtil = { + deprecate: require_browser() + }; + var Stream = require_stream_browser(); + var Buffer5 = require("buffer").Buffer; + var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() { + }; + function _uint8ArrayToBuffer(chunk) { + return Buffer5.from(chunk); + } + function _isUint8Array(obj) { + return Buffer5.isBuffer(obj) || obj instanceof OurUint8Array; + } + var destroyImpl = require_destroy(); + var _require = require_state(); + var getHighWaterMark = _require.getHighWaterMark; + var _require$codes = require_errors_browser().codes; + var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE; + var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED; + var ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK; + var ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE; + var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; + var ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES; + var ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END; + var ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; + var errorOrDestroy = destroyImpl.errorOrDestroy; + require_inherits_browser()(Writable, Stream); + function nop() { + } + function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require_stream_duplex(); + options = options || {}; + if (typeof isDuplex !== "boolean") + isDuplex = stream instanceof Duplex; + this.objectMode = !!options.objectMode; + if (isDuplex) + this.objectMode = this.objectMode || !!options.writableObjectMode; + this.highWaterMark = getHighWaterMark(this, options, "writableHighWaterMark", isDuplex); + this.finalCalled = false; + this.needDrain = false; + this.ending = false; + this.ended = false; + this.finished = false; + this.destroyed = false; + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + this.defaultEncoding = options.defaultEncoding || "utf8"; + this.length = 0; + this.writing = false; + this.corked = 0; + this.sync = true; + this.bufferProcessing = false; + this.onwrite = function(er) { + onwrite(stream, er); + }; + this.writecb = null; + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + this.pendingcb = 0; + this.prefinished = false; + this.errorEmitted = false; + this.emitClose = options.emitClose !== false; + this.autoDestroy = !!options.autoDestroy; + this.bufferedRequestCount = 0; + this.corkedRequestsFree = new CorkedRequest(this); + } + WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; + }; + (function() { + try { + Object.defineProperty(WritableState.prototype, "buffer", { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003") + }); + } catch (_) { + } + })(); + var realHasInstance; + if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) + return true; + if (this !== Writable) + return false; + return object && object._writableState instanceof WritableState; + } + }); + } else { + realHasInstance = function realHasInstance2(object) { + return object instanceof this; + }; + } + function Writable(options) { + Duplex = Duplex || require_stream_duplex(); + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) + return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); + this.writable = true; + if (options) { + if (typeof options.write === "function") + this._write = options.write; + if (typeof options.writev === "function") + this._writev = options.writev; + if (typeof options.destroy === "function") + this._destroy = options.destroy; + if (typeof options.final === "function") + this._final = options.final; + } + Stream.call(this); + } + Writable.prototype.pipe = function() { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); + }; + function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); + errorOrDestroy(stream, er); + process.nextTick(cb, er); + } + function validChunk(stream, state, chunk, cb) { + var er; + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== "string" && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer"], chunk); + } + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } + return true; + } + Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer5.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === "function") { + cb = encoding; + encoding = null; + } + if (isBuf) + encoding = "buffer"; + else if (!encoding) + encoding = state.defaultEncoding; + if (typeof cb !== "function") + cb = nop; + if (state.ending) + writeAfterEnd(this, cb); + else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; + }; + Writable.prototype.cork = function() { + this._writableState.corked++; + }; + Writable.prototype.uncork = function() { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) + clearBuffer(this, state); + } + }; + Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + if (typeof encoding === "string") + encoding = encoding.toLowerCase(); + if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1)) + throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; + }; + Object.defineProperty(Writable.prototype, "writableBuffer", { + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } + }); + function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === "string") { + chunk = Buffer5.from(chunk, encoding); + } + return chunk; + } + Object.defineProperty(Writable.prototype, "writableHighWaterMark", { + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } + }); + function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = "buffer"; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + if (!ret) + state.needDrain = true; + if (state.writing || state.corked) { + var last2 = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk, + encoding, + isBuf, + callback: cb, + next: null + }; + if (last2) { + last2.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; + } + function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) + state.onwrite(new ERR_STREAM_DESTROYED("write")); + else if (writev) + stream._writev(chunk, state.onwrite); + else + stream._write(chunk, encoding, state.onwrite); + state.sync = false; + } + function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + process.nextTick(cb, er); + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + } else { + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + finishMaybe(stream, state); + } + } + function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; + } + function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== "function") + throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) + onwriteError(stream, state, sync, er, cb); + else { + var finished = needFinish(state) || stream.destroyed; + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); + } else { + afterWrite(stream, state, finished, cb); + } + } + } + function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); + } + function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit("drain"); + } + } + function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) + allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, "", holder.finish); + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + if (state.writing) { + break; + } + } + if (entry === null) + state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; + } + Writable.prototype._write = function(chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED("_write()")); + }; + Writable.prototype._writev = null; + Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === "function") { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === "function") { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== void 0) + this.write(chunk, encoding); + if (state.corked) { + state.corked = 1; + this.uncork(); + } + if (!state.ending) + endWritable(this, state, cb); + return this; + }; + Object.defineProperty(Writable.prototype, "writableLength", { + enumerable: false, + get: function get() { + return this._writableState.length; + } + }); + function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + } + function callFinal(stream, state) { + stream._final(function(err) { + state.pendingcb--; + if (err) { + errorOrDestroy(stream, err); + } + state.prefinished = true; + stream.emit("prefinish"); + finishMaybe(stream, state); + }); + } + function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === "function" && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit("prefinish"); + } + } + } + function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit("finish"); + if (state.autoDestroy) { + var rState = stream._readableState; + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } + } + } + return need; + } + function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) + process.nextTick(cb); + else + stream.once("finish", cb); + } + state.ended = true; + stream.writable = false; + } + function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + state.corkedRequestsFree.next = corkReq; + } + Object.defineProperty(Writable.prototype, "destroyed", { + enumerable: false, + get: function get() { + if (this._writableState === void 0) { + return false; + } + return this._writableState.destroyed; + }, + set: function set(value) { + if (!this._writableState) { + return; + } + this._writableState.destroyed = value; + } + }); + Writable.prototype.destroy = destroyImpl.destroy; + Writable.prototype._undestroy = destroyImpl.undestroy; + Writable.prototype._destroy = function(err, cb) { + cb(err); + }; + } +}); + +// node_modules/readable-stream/lib/_stream_duplex.js +var require_stream_duplex = __commonJS({ + "node_modules/readable-stream/lib/_stream_duplex.js"(exports, module2) { + "use strict"; + var objectKeys = Object.keys || function(obj) { + var keys2 = []; + for (var key in obj) + keys2.push(key); + return keys2; + }; + module2.exports = Duplex; + var Readable = require_stream_readable(); + var Writable = require_stream_writable(); + require_inherits_browser()(Duplex, Readable); + { + keys = objectKeys(Writable.prototype); + for (v = 0; v < keys.length; v++) { + method = keys[v]; + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; + } + } + var keys; + var method; + var v; + function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; + if (options) { + if (options.readable === false) + this.readable = false; + if (options.writable === false) + this.writable = false; + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once("end", onend); + } + } + } + Object.defineProperty(Duplex.prototype, "writableHighWaterMark", { + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } + }); + Object.defineProperty(Duplex.prototype, "writableBuffer", { + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } + }); + Object.defineProperty(Duplex.prototype, "writableLength", { + enumerable: false, + get: function get() { + return this._writableState.length; + } + }); + function onend() { + if (this._writableState.ended) + return; + process.nextTick(onEndNT, this); + } + function onEndNT(self2) { + self2.end(); + } + Object.defineProperty(Duplex.prototype, "destroyed", { + enumerable: false, + get: function get() { + if (this._readableState === void 0 || this._writableState === void 0) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + if (this._readableState === void 0 || this._writableState === void 0) { + return; + } + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } + }); + } +}); + +// node_modules/readable-stream/lib/internal/streams/end-of-stream.js +var require_end_of_stream = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/end-of-stream.js"(exports, module2) { + "use strict"; + var ERR_STREAM_PREMATURE_CLOSE = require_errors_browser().codes.ERR_STREAM_PREMATURE_CLOSE; + function once(callback) { + var called = false; + return function() { + if (called) + return; + called = true; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + callback.apply(this, args); + }; + } + function noop() { + } + function isRequest(stream) { + return stream.setHeader && typeof stream.abort === "function"; + } + function eos(stream, opts, callback) { + if (typeof opts === "function") + return eos(stream, null, opts); + if (!opts) + opts = {}; + callback = once(callback || noop); + var readable = opts.readable || opts.readable !== false && stream.readable; + var writable = opts.writable || opts.writable !== false && stream.writable; + var onlegacyfinish = function onlegacyfinish2() { + if (!stream.writable) + onfinish(); + }; + var writableEnded = stream._writableState && stream._writableState.finished; + var onfinish = function onfinish2() { + writable = false; + writableEnded = true; + if (!readable) + callback.call(stream); + }; + var readableEnded = stream._readableState && stream._readableState.endEmitted; + var onend = function onend2() { + readable = false; + readableEnded = true; + if (!writable) + callback.call(stream); + }; + var onerror = function onerror2(err) { + callback.call(stream, err); + }; + var onclose = function onclose2() { + var err; + if (readable && !readableEnded) { + if (!stream._readableState || !stream._readableState.ended) + err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + if (writable && !writableEnded) { + if (!stream._writableState || !stream._writableState.ended) + err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + }; + var onrequest = function onrequest2() { + stream.req.on("finish", onfinish); + }; + if (isRequest(stream)) { + stream.on("complete", onfinish); + stream.on("abort", onclose); + if (stream.req) + onrequest(); + else + stream.on("request", onrequest); + } else if (writable && !stream._writableState) { + stream.on("end", onlegacyfinish); + stream.on("close", onlegacyfinish); + } + stream.on("end", onend); + stream.on("finish", onfinish); + if (opts.error !== false) + stream.on("error", onerror); + stream.on("close", onclose); + return function() { + stream.removeListener("complete", onfinish); + stream.removeListener("abort", onclose); + stream.removeListener("request", onrequest); + if (stream.req) + stream.req.removeListener("finish", onfinish); + stream.removeListener("end", onlegacyfinish); + stream.removeListener("close", onlegacyfinish); + stream.removeListener("finish", onfinish); + stream.removeListener("end", onend); + stream.removeListener("error", onerror); + stream.removeListener("close", onclose); + }; + } + module2.exports = eos; + } +}); + +// node_modules/readable-stream/lib/internal/streams/async_iterator.js +var require_async_iterator = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/async_iterator.js"(exports, module2) { + "use strict"; + var _Object$setPrototypeO; + function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); + } else { + obj[key] = value; + } + return obj; + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) + return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== void 0) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") + return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + var finished = require_end_of_stream(); + var kLastResolve = Symbol("lastResolve"); + var kLastReject = Symbol("lastReject"); + var kError = Symbol("error"); + var kEnded = Symbol("ended"); + var kLastPromise = Symbol("lastPromise"); + var kHandlePromise = Symbol("handlePromise"); + var kStream = Symbol("stream"); + function createIterResult(value, done) { + return { + value, + done + }; + } + function readAndResolve(iter) { + var resolve = iter[kLastResolve]; + if (resolve !== null) { + var data = iter[kStream].read(); + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); + } + } + } + function onReadable(iter) { + process.nextTick(readAndResolve, iter); + } + function wrapForNext(lastPromise, iter) { + return function(resolve, reject) { + lastPromise.then(function() { + if (iter[kEnded]) { + resolve(createIterResult(void 0, true)); + return; + } + iter[kHandlePromise](resolve, reject); + }, reject); + }; + } + var AsyncIteratorPrototype = Object.getPrototypeOf(function() { + }); + var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, + next: function next() { + var _this = this; + var error = this[kError]; + if (error !== null) { + return Promise.reject(error); + } + if (this[kEnded]) { + return Promise.resolve(createIterResult(void 0, true)); + } + if (this[kStream].destroyed) { + return new Promise(function(resolve, reject) { + process.nextTick(function() { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(void 0, true)); + } + }); + }); + } + var lastPromise = this[kLastPromise]; + var promise; + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + var data = this[kStream].read(); + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } + promise = new Promise(this[kHandlePromise]); + } + this[kLastPromise] = promise; + return promise; + } + }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function() { + return this; + }), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; + return new Promise(function(resolve, reject) { + _this2[kStream].destroy(null, function(err) { + if (err) { + reject(err); + return; + } + resolve(createIterResult(void 0, true)); + }); + }); + }), _Object$setPrototypeO), AsyncIteratorPrototype); + var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator2(stream) { + var _Object$create; + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function(err) { + if (err && err.code !== "ERR_STREAM_PREMATURE_CLOSE") { + var reject = iterator[kLastReject]; + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } + iterator[kError] = err; + return; + } + var resolve = iterator[kLastResolve]; + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(void 0, true)); + } + iterator[kEnded] = true; + }); + stream.on("readable", onReadable.bind(null, iterator)); + return iterator; + }; + module2.exports = createReadableStreamAsyncIterator; + } +}); + +// node_modules/readable-stream/lib/internal/streams/from-browser.js +var require_from_browser = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/from-browser.js"(exports, module2) { + module2.exports = function() { + throw new Error("Readable.from is not available in the browser"); + }; + } +}); + +// node_modules/readable-stream/lib/_stream_readable.js +var require_stream_readable = __commonJS({ + "node_modules/readable-stream/lib/_stream_readable.js"(exports, module2) { + "use strict"; + module2.exports = Readable; + var Duplex; + Readable.ReadableState = ReadableState; + var EE = require("events").EventEmitter; + var EElistenerCount = function EElistenerCount2(emitter, type) { + return emitter.listeners(type).length; + }; + var Stream = require_stream_browser(); + var Buffer5 = require("buffer").Buffer; + var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() { + }; + function _uint8ArrayToBuffer(chunk) { + return Buffer5.from(chunk); + } + function _isUint8Array(obj) { + return Buffer5.isBuffer(obj) || obj instanceof OurUint8Array; + } + var debugUtil = require("util"); + var debug; + if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog("stream"); + } else { + debug = function debug2() { + }; + } + var BufferList = require_buffer_list(); + var destroyImpl = require_destroy(); + var _require = require_state(); + var getHighWaterMark = _require.getHighWaterMark; + var _require$codes = require_errors_browser().codes; + var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE; + var ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF; + var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED; + var ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; + var StringDecoder; + var createReadableStreamAsyncIterator; + var from; + require_inherits_browser()(Readable, Stream); + var errorOrDestroy = destroyImpl.errorOrDestroy; + var kProxyEvents = ["error", "close", "destroy", "pause", "resume"]; + function prependListener(emitter, event, fn) { + if (typeof emitter.prependListener === "function") + return emitter.prependListener(event, fn); + if (!emitter._events || !emitter._events[event]) + emitter.on(event, fn); + else if (Array.isArray(emitter._events[event])) + emitter._events[event].unshift(fn); + else + emitter._events[event] = [fn, emitter._events[event]]; + } + function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || require_stream_duplex(); + options = options || {}; + if (typeof isDuplex !== "boolean") + isDuplex = stream instanceof Duplex; + this.objectMode = !!options.objectMode; + if (isDuplex) + this.objectMode = this.objectMode || !!options.readableObjectMode; + this.highWaterMark = getHighWaterMark(this, options, "readableHighWaterMark", isDuplex); + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + this.sync = true; + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; + this.emitClose = options.emitClose !== false; + this.autoDestroy = !!options.autoDestroy; + this.destroyed = false; + this.defaultEncoding = options.defaultEncoding || "utf8"; + this.awaitDrain = 0; + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require("string_decoder/").StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } + } + function Readable(options) { + Duplex = Duplex || require_stream_duplex(); + if (!(this instanceof Readable)) + return new Readable(options); + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); + this.readable = true; + if (options) { + if (typeof options.read === "function") + this._read = options.read; + if (typeof options.destroy === "function") + this._destroy = options.destroy; + } + Stream.call(this); + } + Object.defineProperty(Readable.prototype, "destroyed", { + enumerable: false, + get: function get() { + if (this._readableState === void 0) { + return false; + } + return this._readableState.destroyed; + }, + set: function set(value) { + if (!this._readableState) { + return; + } + this._readableState.destroyed = value; + } + }); + Readable.prototype.destroy = destroyImpl.destroy; + Readable.prototype._undestroy = destroyImpl.undestroy; + Readable.prototype._destroy = function(err, cb) { + cb(err); + }; + Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === "string") { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer5.from(chunk, encoding); + encoding = ""; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); + }; + Readable.prototype.unshift = function(chunk) { + return readableAddChunk(this, chunk, null, true, false); + }; + function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug("readableAddChunk", chunk); + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) + er = chunkInvalid(state, chunk); + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== "string" && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer5.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) + errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT()); + else + addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) + addChunk(stream, state, chunk, false); + else + maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } + return !state.ended && (state.length < state.highWaterMark || state.length === 0); + } + function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit("data", chunk); + } else { + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) + state.buffer.unshift(chunk); + else + state.buffer.push(chunk); + if (state.needReadable) + emitReadable(stream); + } + maybeReadMore(stream, state); + } + function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== void 0 && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer", "Uint8Array"], chunk); + } + return er; + } + Readable.prototype.isPaused = function() { + return this._readableState.flowing === false; + }; + Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require("string_decoder/").StringDecoder; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; + this._readableState.encoding = this._readableState.decoder.encoding; + var p = this._readableState.buffer.head; + var content = ""; + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + this._readableState.buffer.clear(); + if (content !== "") + this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; + }; + var MAX_HWM = 1073741824; + function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; + } + function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) + return 0; + if (state.objectMode) + return 1; + if (n !== n) { + if (state.flowing && state.length) + return state.buffer.head.data.length; + else + return state.length; + } + if (n > state.highWaterMark) + state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) + return n; + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; + } + Readable.prototype.read = function(n) { + debug("read", n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) + state.emittedReadable = false; + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug("read: emitReadable", state.length, state.ended); + if (state.length === 0 && state.ended) + endReadable(this); + else + emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + var doRead = state.needReadable; + debug("need readable", doRead); + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug("length less than watermark", doRead); + } + if (state.ended || state.reading) { + doRead = false; + debug("reading or ended", doRead); + } else if (doRead) { + debug("do read"); + state.reading = true; + state.sync = true; + if (state.length === 0) + state.needReadable = true; + this._read(state.highWaterMark); + state.sync = false; + if (!state.reading) + n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } + if (state.length === 0) { + if (!state.ended) + state.needReadable = true; + if (nOrig !== n && state.ended) + endReadable(this); + } + if (ret !== null) + this.emit("data", ret); + return ret; + }; + function onEofChunk(stream, state) { + debug("onEofChunk"); + if (state.ended) + return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + if (state.sync) { + emitReadable(stream); + } else { + state.needReadable = false; + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } + } + function emitReadable(stream) { + var state = stream._readableState; + debug("emitReadable", state.needReadable, state.emittedReadable); + state.needReadable = false; + if (!state.emittedReadable) { + debug("emitReadable", state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } + } + function emitReadable_(stream) { + var state = stream._readableState; + debug("emitReadable_", state.destroyed, state.length, state.ended); + if (!state.destroyed && (state.length || state.ended)) { + stream.emit("readable"); + state.emittedReadable = false; + } + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); + } + function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } + } + function maybeReadMore_(stream, state) { + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug("maybeReadMore read 0"); + stream.read(0); + if (len === state.length) + break; + } + state.readingMore = false; + } + Readable.prototype._read = function(n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED("_read()")); + }; + Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug("pipe count=%d opts=%j", state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once("end", endFn); + dest.on("unpipe", onunpipe); + function onunpipe(readable, unpipeInfo) { + debug("onunpipe"); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup2(); + } + } + } + function onend() { + debug("onend"); + dest.end(); + } + var ondrain = pipeOnDrain(src); + dest.on("drain", ondrain); + var cleanedUp = false; + function cleanup2() { + debug("cleanup"); + dest.removeListener("close", onclose); + dest.removeListener("finish", onfinish); + dest.removeListener("drain", ondrain); + dest.removeListener("error", onerror); + dest.removeListener("unpipe", onunpipe); + src.removeListener("end", onend); + src.removeListener("end", unpipe); + src.removeListener("data", ondata); + cleanedUp = true; + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) + ondrain(); + } + src.on("data", ondata); + function ondata(chunk) { + debug("ondata"); + var ret = dest.write(chunk); + debug("dest.write", ret); + if (ret === false) { + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug("false write response, pause", state.awaitDrain); + state.awaitDrain++; + } + src.pause(); + } + } + function onerror(er) { + debug("onerror", er); + unpipe(); + dest.removeListener("error", onerror); + if (EElistenerCount(dest, "error") === 0) + errorOrDestroy(dest, er); + } + prependListener(dest, "error", onerror); + function onclose() { + dest.removeListener("finish", onfinish); + unpipe(); + } + dest.once("close", onclose); + function onfinish() { + debug("onfinish"); + dest.removeListener("close", onclose); + unpipe(); + } + dest.once("finish", onfinish); + function unpipe() { + debug("unpipe"); + src.unpipe(dest); + } + dest.emit("pipe", src); + if (!state.flowing) { + debug("pipe resume"); + src.resume(); + } + return dest; + }; + function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug("pipeOnDrain", state.awaitDrain); + if (state.awaitDrain) + state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, "data")) { + state.flowing = true; + flow(src); + } + }; + } + Readable.prototype.unpipe = function(dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + if (state.pipesCount === 0) + return this; + if (state.pipesCount === 1) { + if (dest && dest !== state.pipes) + return this; + if (!dest) + dest = state.pipes; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) + dest.emit("unpipe", this, unpipeInfo); + return this; + } + if (!dest) { + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) + dests[i].emit("unpipe", this, { + hasUnpiped: false + }); + return this; + } + var index = indexOf(state.pipes, dest); + if (index === -1) + return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; + dest.emit("unpipe", this, unpipeInfo); + return this; + }; + Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; + if (ev === "data") { + state.readableListening = this.listenerCount("readable") > 0; + if (state.flowing !== false) + this.resume(); + } else if (ev === "readable") { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug("on readable", state.length, state.reading); + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } + return res; + }; + Readable.prototype.addListener = Readable.prototype.on; + Readable.prototype.removeListener = function(ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + if (ev === "readable") { + process.nextTick(updateReadableListening, this); + } + return res; + }; + Readable.prototype.removeAllListeners = function(ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + if (ev === "readable" || ev === void 0) { + process.nextTick(updateReadableListening, this); + } + return res; + }; + function updateReadableListening(self2) { + var state = self2._readableState; + state.readableListening = self2.listenerCount("readable") > 0; + if (state.resumeScheduled && !state.paused) { + state.flowing = true; + } else if (self2.listenerCount("data") > 0) { + self2.resume(); + } + } + function nReadingNextTick(self2) { + debug("readable nexttick read 0"); + self2.read(0); + } + Readable.prototype.resume = function() { + var state = this._readableState; + if (!state.flowing) { + debug("resume"); + state.flowing = !state.readableListening; + resume(this, state); + } + state.paused = false; + return this; + }; + function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } + } + function resume_(stream, state) { + debug("resume", state.reading); + if (!state.reading) { + stream.read(0); + } + state.resumeScheduled = false; + stream.emit("resume"); + flow(stream); + if (state.flowing && !state.reading) + stream.read(0); + } + Readable.prototype.pause = function() { + debug("call pause flowing=%j", this._readableState.flowing); + if (this._readableState.flowing !== false) { + debug("pause"); + this._readableState.flowing = false; + this.emit("pause"); + } + this._readableState.paused = true; + return this; + }; + function flow(stream) { + var state = stream._readableState; + debug("flow", state.flowing); + while (state.flowing && stream.read() !== null) + ; + } + Readable.prototype.wrap = function(stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on("end", function() { + debug("wrapped end"); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + _this.push(chunk); + } + _this.push(null); + }); + stream.on("data", function(chunk) { + debug("wrapped data"); + if (state.decoder) + chunk = state.decoder.write(chunk); + if (state.objectMode && (chunk === null || chunk === void 0)) + return; + else if (!state.objectMode && (!chunk || !chunk.length)) + return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + for (var i in stream) { + if (this[i] === void 0 && typeof stream[i] === "function") { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + this._read = function(n2) { + debug("wrapped _read", n2); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; + }; + if (typeof Symbol === "function") { + Readable.prototype[Symbol.asyncIterator] = function() { + if (createReadableStreamAsyncIterator === void 0) { + createReadableStreamAsyncIterator = require_async_iterator(); + } + return createReadableStreamAsyncIterator(this); + }; + } + Object.defineProperty(Readable.prototype, "readableHighWaterMark", { + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } + }); + Object.defineProperty(Readable.prototype, "readableBuffer", { + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } + }); + Object.defineProperty(Readable.prototype, "readableFlowing", { + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } + }); + Readable._fromList = fromList; + Object.defineProperty(Readable.prototype, "readableLength", { + enumerable: false, + get: function get() { + return this._readableState.length; + } + }); + function fromList(n, state) { + if (state.length === 0) + return null; + var ret; + if (state.objectMode) + ret = state.buffer.shift(); + else if (!n || n >= state.length) { + if (state.decoder) + ret = state.buffer.join(""); + else if (state.buffer.length === 1) + ret = state.buffer.first(); + else + ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + ret = state.buffer.consume(n, state.decoder); + } + return ret; + } + function endReadable(stream) { + var state = stream._readableState; + debug("endReadable", state.endEmitted); + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); + } + } + function endReadableNT(state, stream) { + debug("endReadableNT", state.endEmitted, state.length); + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit("end"); + if (state.autoDestroy) { + var wState = stream._writableState; + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } + } + } + if (typeof Symbol === "function") { + Readable.from = function(iterable, opts) { + if (from === void 0) { + from = require_from_browser(); + } + return from(Readable, iterable, opts); + }; + } + function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) + return i; + } + return -1; + } + } +}); + +// node_modules/readable-stream/lib/_stream_transform.js +var require_stream_transform = __commonJS({ + "node_modules/readable-stream/lib/_stream_transform.js"(exports, module2) { + "use strict"; + module2.exports = Transform; + var _require$codes = require_errors_browser().codes; + var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED; + var ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK; + var ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING; + var ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; + var Duplex = require_stream_duplex(); + require_inherits_browser()(Transform, Duplex); + function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (cb === null) { + return this.emit("error", new ERR_MULTIPLE_CALLBACK()); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } + } + function Transform(options) { + if (!(this instanceof Transform)) + return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + this._readableState.needReadable = true; + this._readableState.sync = false; + if (options) { + if (typeof options.transform === "function") + this._transform = options.transform; + if (typeof options.flush === "function") + this._flush = options.flush; + } + this.on("prefinish", prefinish); + } + function prefinish() { + var _this = this; + if (typeof this._flush === "function" && !this._readableState.destroyed) { + this._flush(function(er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } + } + Transform.prototype.push = function(chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); + }; + Transform.prototype._transform = function(chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED("_transform()")); + }; + Transform.prototype._write = function(chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) + this._read(rs.highWaterMark); + } + }; + Transform.prototype._read = function(n) { + var ts = this._transformState; + if (ts.writechunk !== null && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + ts.needTransform = true; + } + }; + Transform.prototype._destroy = function(err, cb) { + Duplex.prototype._destroy.call(this, err, function(err2) { + cb(err2); + }); + }; + function done(stream, er, data) { + if (er) + return stream.emit("error", er); + if (data != null) + stream.push(data); + if (stream._writableState.length) + throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) + throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); + return stream.push(null); + } + } +}); + +// node_modules/readable-stream/lib/_stream_passthrough.js +var require_stream_passthrough = __commonJS({ + "node_modules/readable-stream/lib/_stream_passthrough.js"(exports, module2) { + "use strict"; + module2.exports = PassThrough; + var Transform = require_stream_transform(); + require_inherits_browser()(PassThrough, Transform); + function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); + Transform.call(this, options); + } + PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/pipeline.js +var require_pipeline = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/pipeline.js"(exports, module2) { + "use strict"; + var eos; + function once(callback) { + var called = false; + return function() { + if (called) + return; + called = true; + callback.apply(void 0, arguments); + }; + } + var _require$codes = require_errors_browser().codes; + var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS; + var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; + function noop(err) { + if (err) + throw err; + } + function isRequest(stream) { + return stream.setHeader && typeof stream.abort === "function"; + } + function destroyer(stream, reading, writing, callback) { + callback = once(callback); + var closed = false; + stream.on("close", function() { + closed = true; + }); + if (eos === void 0) + eos = require_end_of_stream(); + eos(stream, { + readable: reading, + writable: writing + }, function(err) { + if (err) + return callback(err); + closed = true; + callback(); + }); + var destroyed = false; + return function(err) { + if (closed) + return; + if (destroyed) + return; + destroyed = true; + if (isRequest(stream)) + return stream.abort(); + if (typeof stream.destroy === "function") + return stream.destroy(); + callback(err || new ERR_STREAM_DESTROYED("pipe")); + }; + } + function call(fn) { + fn(); + } + function pipe(from, to) { + return from.pipe(to); + } + function popCallback(streams) { + if (!streams.length) + return noop; + if (typeof streams[streams.length - 1] !== "function") + return noop; + return streams.pop(); + } + function pipeline() { + for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { + streams[_key] = arguments[_key]; + } + var callback = popCallback(streams); + if (Array.isArray(streams[0])) + streams = streams[0]; + if (streams.length < 2) { + throw new ERR_MISSING_ARGS("streams"); + } + var error; + var destroys = streams.map(function(stream, i) { + var reading = i < streams.length - 1; + var writing = i > 0; + return destroyer(stream, reading, writing, function(err) { + if (!error) + error = err; + if (err) + destroys.forEach(call); + if (reading) + return; + destroys.forEach(call); + callback(error); + }); + }); + return streams.reduce(pipe); + } + module2.exports = pipeline; + } +}); + +// node_modules/readable-stream/readable-browser.js +var require_readable_browser = __commonJS({ + "node_modules/readable-stream/readable-browser.js"(exports, module2) { + exports = module2.exports = require_stream_readable(); + exports.Stream = exports; + exports.Readable = exports; + exports.Writable = require_stream_writable(); + exports.Duplex = require_stream_duplex(); + exports.Transform = require_stream_transform(); + exports.PassThrough = require_stream_passthrough(); + exports.finished = require_end_of_stream(); + exports.pipeline = require_pipeline(); + } +}); + +// node_modules/readable-web-to-node-stream/lib/index.js +var require_lib4 = __commonJS({ + "node_modules/readable-web-to-node-stream/lib/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ReadableWebToNodeStream = void 0; + var readable_stream_1 = require_readable_browser(); + var ReadableWebToNodeStream2 = class extends readable_stream_1.Readable { + constructor(stream) { + super(); + this.bytesRead = 0; + this.released = false; + this.reader = stream.getReader(); + } + async _read() { + if (this.released) { + this.push(null); + return; + } + this.pendingRead = this.reader.read(); + const data = await this.pendingRead; + delete this.pendingRead; + if (data.done || this.released) { + this.push(null); + } else { + this.bytesRead += data.value.length; + this.push(data.value); + } + } + async waitForReadToComplete() { + if (this.pendingRead) { + await this.pendingRead; + } + } + async close() { + await this.syncAndRelease(); + } + async syncAndRelease() { + this.released = true; + await this.waitForReadToComplete(); + await this.reader.releaseLock(); + } + }; + exports.ReadableWebToNodeStream = ReadableWebToNodeStream2; + } +}); + +// node_modules/ieee754/index.js +var require_ieee754 = __commonJS({ + "node_modules/ieee754/index.js"(exports) { + exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) { + } + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) { + } + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); + }; + exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) { + } + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) { + } + buffer[offset + i - d] |= s * 128; + }; + } +}); + +// scripts/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => HTMLExportPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian13 = require("obsidian"); + +// assets/graph-view.txt.js +var graph_view_txt_default = `// -------------------------- GRAPH VIEW -------------------------- +var running = false; +let batchFraction = 1; // how much of the graph to update per frame +let minBatchFraction = 0.3; // batch fraction is updated dynamically, but never goes below this value +let dt = 1; +let targetFPS = 40; +let startingCameraRect = {minX: -1, minY: -1, maxX: 1, maxY: 1}; + +let mouseWorldPos = { x: undefined, y: undefined }; +let scrollVelocity = 0; +let averageFPS = targetFPS * 2; + +let pixiApp = undefined; +let graphRenderer = undefined; + +class GraphAssembly +{ + static nodeCount = 0; + static linkCount = 0; + static hoveredNode = -1; + + static #positionsPtr = 0; + static #positionsByteLength = 0; + static #radiiPtr = 0; + static #linkSourcesPtr = 0; + static #linkTargetsPtr = 0; + + static linkSources = new Int32Array(0); + static linkTargets = new Int32Array(0); + static radii = new Float32Array(0); + static maxRadius = 0; + static averageRadius = 0; + static minRadius = 0; + + /** + * @param {{graphOptions: {attractionForce: number, linkLength: number, repulsionForce: number, centralForce: number, edgePruning: number, minNodeRadius: number, maxNodeRadius: number}, nodeCount: number, linkCount:number, radii: number[], labels: string[], paths: string[], linkSources: number[], linkTargets: number[], linkCounts: number[]}} graphData + */ + static init(graphData) + { + GraphAssembly.nodeCount = graphData.nodeCount; + GraphAssembly.linkCount = graphData.linkCount; + + // create arrays for the data + let positions = new Float32Array(GraphAssembly.nodeCount * 2); + GraphAssembly.radii = new Float32Array(graphData.radii); + GraphAssembly.linkSources = new Int32Array(graphData.linkSources); + GraphAssembly.linkTargets = new Int32Array(graphData.linkTargets); + + // allocate memory on the heap + GraphAssembly.#positionsPtr = Module._malloc(positions.byteLength); + GraphAssembly.#positionsByteLength = positions.byteLength; + GraphAssembly.#radiiPtr = Module._malloc(GraphAssembly.radii.byteLength); + GraphAssembly.#linkSourcesPtr = Module._malloc(GraphAssembly.linkSources.byteLength); + GraphAssembly.#linkTargetsPtr = Module._malloc(GraphAssembly.linkTargets.byteLength); + + GraphAssembly.maxRadius = GraphAssembly.radii.reduce((a, b) => Math.max(a, b)); + GraphAssembly.averageRadius = GraphAssembly.radii.reduce((a, b) => a + b) / GraphAssembly.radii.length; + GraphAssembly.minRadius = GraphAssembly.radii.reduce((a, b) => Math.min(a, b)); + + positions = this.loadState(); + + // copy the data to the heap + Module.HEAP32.set(new Int32Array(positions.buffer), GraphAssembly.#positionsPtr / positions.BYTES_PER_ELEMENT); + Module.HEAP32.set(new Int32Array(GraphAssembly.radii.buffer), GraphAssembly.#radiiPtr / GraphAssembly.radii.BYTES_PER_ELEMENT); + Module.HEAP32.set(new Int32Array(GraphAssembly.linkSources.buffer), GraphAssembly.#linkSourcesPtr / GraphAssembly.linkSources.BYTES_PER_ELEMENT); + Module.HEAP32.set(new Int32Array(GraphAssembly.linkTargets.buffer), GraphAssembly.#linkTargetsPtr / GraphAssembly.linkTargets.BYTES_PER_ELEMENT); + + Module._Init( + GraphAssembly.#positionsPtr, + GraphAssembly.#radiiPtr, + GraphAssembly.#linkSourcesPtr, + GraphAssembly.#linkTargetsPtr, + GraphAssembly.nodeCount, + GraphAssembly.linkCount, + batchFraction, + dt, + graphData.graphOptions.attractionForce, + graphData.graphOptions.linkLength, + graphData.graphOptions.repulsionForce, + graphData.graphOptions.centralForce, + ); + } + + /** + * @returns {Float32Array} + */ + static get positions() + { + return Module.HEAP32.buffer.slice(GraphAssembly.#positionsPtr, GraphAssembly.#positionsPtr + GraphAssembly.#positionsByteLength); + } + + /** + * @param {GraphRenderWorker} renderWorker + * */ + static saveState(renderWorker) + { + // save all rounded to int + localStorage.setItem("positions", JSON.stringify(new Float32Array(GraphAssembly.positions).map(x => Math.round(x)))); + } + + /** + * @returns {Float32Array} + * */ + static loadState() + { + let positionsLoad = localStorage.getItem("positions"); + let positions = null; + if(positionsLoad) positions = new Float32Array(Object.values(JSON.parse(positionsLoad))); + if (!positions || !positionsLoad || positions.length != GraphAssembly.nodeCount * 2) + { + positions = new Float32Array(GraphAssembly.nodeCount * 2); + let spawnRadius = (GraphAssembly.averageRadius * Math.sqrt(GraphAssembly.nodeCount)) * 2; + for (let i = 0; i < GraphAssembly.nodeCount; i++) + { + let distance = (1 - GraphAssembly.radii[i] / GraphAssembly.maxRadius) * spawnRadius; + positions[i * 2] = Math.cos(i/GraphAssembly.nodeCount * 7.41 * 2 * Math.PI) * distance; + positions[i * 2 + 1] = Math.sin(i/GraphAssembly.nodeCount * 7.41 * 2 * Math.PI) * distance; + } + } + + // fit view to positions + let minX = Infinity; + let maxX = -Infinity; + let minY = Infinity; + let maxY = -Infinity; + for (let i = 0; i < GraphAssembly.nodeCount-1; i+=2) + { + let pos = { x: positions[i], y: positions[i + 1] }; + minX = Math.min(minX, pos.x); + maxX = Math.max(maxX, pos.x); + minY = Math.min(minY, pos.y); + maxY = Math.max(maxY, pos.y); + } + + let margin = 50; + + startingCameraRect = { minX: minX - margin, minY: minY - margin, maxX: maxX + margin, maxY: maxY + margin }; + + return positions; + } + + /** + * @param {{x: number, y: number}} mousePosition + * @param {number} grabbedNode + */ + static update(mousePosition, grabbedNode, cameraScale) + { + GraphAssembly.hoveredNode = Module._Update(mousePosition.x, mousePosition.y, grabbedNode, cameraScale); + } + + static free() + { + Module._free(GraphAssembly.#positionsPtr); + Module._free(GraphAssembly.#radiiPtr); + Module._free(GraphAssembly.#linkSourcesPtr); + Module._free(GraphAssembly.#linkTargetsPtr); + Module._FreeMemory(); + } + + /** + * @param {number} value + */ + static set batchFraction(value) + { + Module._SetBatchFractionSize(value); + } + + /** + * @param {number} value + */ + static set attractionForce(value) + { + Module._SetAttractionForce(value); + } + + /** + * @param {number} value + */ + static set repulsionForce(value) + { + Module._SetRepulsionForce(value); + } + + /** + * @param {number} value + */ + static set centralForce(value) + { + Module._SetCentralForce(value); + } + + /** + * @param {number} value + */ + static set linkLength(value) + { + Module._SetLinkLength(value); + } + + /** + * @param {number} value + */ + static set dt(value) + { + Module._SetDt(value); + } +} + +class GraphRenderWorker +{ + #cameraOffset; + #cameraScale; + #hoveredNode; + #grabbedNode; + #colors; + #width; + #height; + + + constructor() + { + this.canvas = document.querySelector("#graph-canvas"); + this.canvasSidebar = undefined; + + try + { + this.canvasSidebar = document.querySelector(".sidebar:has(#graph-canvas)"); + } + catch(e) + { + console.log("Error: " + e + "\\n\\n Using fallback."); + + let rightSidebar = document.querySelector(".sidebar-right"); + let leftSidebar = document.querySelector(".sidebar-left"); + + this.canvasSidebar = rightSidebar.querySelector("#graph-canvas") ? rightSidebar : leftSidebar; + } + + this.view = this.canvas.transferControlToOffscreen(); + + this.worker = new Worker(new URL("./graph-render-worker.js", import.meta.url)); + + this.#cameraOffset = {x: 0, y: 0}; + this.#cameraScale = 1; + this.#hoveredNode = -1; + this.#grabbedNode = -1; + this.#colors = + { + background: 0x000000, + link: 0x000000, + node: 0x000000, + outline: 0x000000, + text: 0x000000, + accent: 0x000000, + } + this.#width = 0; + this.#height = 0; + + this.cameraOffset = {x: this.canvas.width / 2, y: this.canvas.height / 2}; + this.cameraScale = 1; + this.hoveredNode = -1; + this.grabbedNode = -1; + this.resampleColors(); + + this.#pixiInit(); + + this.width = this.canvas.width; + this.height = this.canvas.height; + + this.autoResizeCanvas(); + + this.fitToRect(startingCameraRect); + } + + #pixiInit() + { + let { width, height } = this.view; + + this.worker.postMessage( + { + type: 'init', + linkCount: GraphAssembly.linkCount, + linkSources: GraphAssembly.linkSources, + linkTargets: GraphAssembly.linkTargets, + nodeCount: GraphAssembly.nodeCount, + radii: GraphAssembly.radii, + labels: graphData.labels, + linkLength: graphData.graphOptions.linkLength, + edgePruning: graphData.graphOptions.edgePruning, + options: { width: width, height: height, view: this.view }, + }, [this.view]); + } + + fitToRect(rect) // {minX, minY, maxX, maxY} + { + let min = {x: rect.minX, y: rect.minY}; + let max = {x: rect.maxX, y: rect.maxY}; + + let width = max.x - min.x; + let height = max.y - min.y; + + let scale = 1/Math.min(width/this.width, height / this.height); + + this.cameraScale = scale; + this.cameraOffset = { x: (this.width / 2) - ((rect.minX + width / 2) * scale), y: (this.height / 2) - ((rect.minY + height / 2) * scale) }; + } + + fitToNodes() + { + this.fitToRect(startingCameraRect); + } + + sampleColor(variable) + { + let testEl = document.createElement('div'); + document.body.appendChild(testEl); + testEl.style.setProperty('display', 'none'); + testEl.style.setProperty('color', 'var(' + variable + ')'); + + let col = getComputedStyle(testEl).color; + let opacity = getComputedStyle(testEl).opacity; + + testEl.remove(); + + function toColorObject(str) + { + var match = str.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/); + return match ? { + red: parseInt(match[1]), + green: parseInt(match[2]), + blue: parseInt(match[3]), + alpha: 1 + } : null + } + + let color = toColorObject(col); + let alpha = parseFloat(opacity); + let result = + { + a: (alpha * color?.alpha ?? 1) ?? 1, + rgb: (color?.red << 16 | color?.green << 8 | color?.blue) ?? 0x888888 + }; + + return result; + }; + + resampleColors() + { + this.colors = + { + background: this.sampleColor('--background-secondary').rgb, + link: this.sampleColor('--graph-line').rgb, + node: this.sampleColor('--graph-node').rgb, + outline: this.sampleColor('--graph-line').rgb, + text: this.sampleColor('--graph-text').rgb, + accent: this.sampleColor('--interactive-accent').rgb, + }; + } + + draw(_positions) + { + this.worker.postMessage( + { + type: 'draw', + positions: _positions, + }, [_positions]); + } + + resizeCanvas(width, height) + { + this.worker.postMessage( + { + type: "resize", + width: width, + height: height, + }); + + this.#width = width; + this.#height = height; + } + + autoResizeCanvas() + { + if (this.width != this.canvas.offsetWidth || this.height != this.canvas.offsetHeight) + { + this.centerCamera(); + this.resizeCanvas(this.canvas.offsetWidth, this.canvas.offsetHeight); + } + } + + centerCamera() + { + this.cameraOffset = { x: this.width / 2, y: this.height / 2 }; + } + + #pixiSetInteraction(hoveredNodeIndex, grabbedNodeIndex) + { + let obj = + { + type: "update_interaction", + hoveredNode: hoveredNodeIndex, + grabbedNode: grabbedNodeIndex, + } + + this.worker.postMessage(obj); + } + + #pixiSetCamera(cameraOffset, cameraScale) + { + this.worker.postMessage( + { + type: "update_camera", + cameraOffset: cameraOffset, + cameraScale: cameraScale, + }); + } + + #pixiSetColors(colors) + { + this.worker.postMessage( + { + type: "update_colors", + colors: colors, + }); + + } + + set cameraOffset(offset) + { + this.#cameraOffset = offset; + this.#pixiSetCamera(offset, this.cameraScale); + } + + set cameraScale(scale) + { + this.#cameraScale = scale; + this.#pixiSetCamera(this.cameraOffset, scale); + } + + get cameraOffset() + { + return this.#cameraOffset; + } + + get cameraScale() + { + return this.#cameraScale; + } + + /** + * @param {number} node + */ + set hoveredNode(node) + { + this.#hoveredNode = node; + this.#pixiSetInteraction(node, this.#grabbedNode); + } + + /** + * @param {number} node + */ + set grabbedNode(node) + { + this.#grabbedNode = node; + this.#pixiSetInteraction(this.#hoveredNode, node); + } + + /** + * @param {number} node + */ + set activeNode(node) + { + this.worker.postMessage( + { + type: 'set_active', + active: node, + }); + } + + get hoveredNode() + { + return this.#hoveredNode; + } + + get grabbedNode() + { + return this.#grabbedNode; + } + + /** + * @param {{ background: number; link: number; node: number; outline: number; text: number; accent: number; }} colors + */ + set colors(colors) + { + this.#colors = colors; + this.#pixiSetColors(colors); + } + + get colors() + { + return this.#colors; + } + + set width(width) + { + this.#width = width; + this.resizeCanvas(width, this.#height); + } + + set height(height) + { + this.#height = height; + this.resizeCanvas(this.#width, height); + } + + get height() + { + return this.#height; + } + + get width() + { + return this.#width; + } + + /** + * @param {number} x + * @param {number} y + * @param {boolean} floor + * @returns {{x: number; y: number;}} + */ + toScreenSpace(x, y, floor = true) + { + if (floor) + { + return {x: Math.floor((x * this.cameraScale) + this.cameraOffset.x), y: Math.floor((y * this.cameraScale) + this.cameraOffset.y)}; + } + else + { + return {x: (x * this.cameraScale) + this.cameraOffset.x, y: (y * this.cameraScale) + this.cameraOffset.y}; + } + } + + /** + * @param {{x: number; y: number;}} vector + * @param {boolean} floor + * @returns {{x: number; y: number;}} + */ + vecToScreenSpace(vector, floor = true) + { + return this.toScreenSpace(vector.x, vector.y, floor); + } + + /** + * @param {number} x + * @param {number} y + * @returns {{x: number; y: number;}} + */ + toWorldspace(x, y) + { + return {x: (x - this.cameraOffset.x) / this.cameraScale, y: (y - this.cameraOffset.y) / this.cameraScale}; + } + + /** + * @param {{x: number; y: number;}} vector + * @returns {{x: number; y: number;}} + */ + vecToWorldspace(vector) + { + return this.toWorldspace(vector.x, vector.y); + } + + setCameraCenterWorldspace({x, y}) + { + this.cameraOffset = {x: (this.width / 2) - (x * this.cameraScale), y: (this.height / 2) - (y * this.cameraScale)}; + } + + getCameraCenterWorldspace() + { + return this.toWorldspace(this.width / 2, this.height / 2); + } +} + +async function initializeGraphView() +{ + if(running) return; + running = true; + + graphData.graphOptions.repulsionForce /= batchFraction; // compensate for batch fraction + pixiApp = new PIXI.Application(); + + console.log("Module Ready"); + GraphAssembly.init(graphData); // graphData is a global variable set in another script + + graphRenderer = new GraphRenderWorker(); + window.graphRenderer = graphRenderer; + + initializeGraphEvents(); + + pixiApp.ticker.maxFPS = targetFPS; + pixiApp.ticker.add(updateGraph); + + setActiveDocument(new URL(window.location.href), false, false); + + setInterval(() => + { + function isHidden(el) { + var style = window.getComputedStyle(el); + return (style.display === 'none') + } + + try + { + var hidden = (graphRenderer.canvasSidebar.classList.contains("is-collapsed")); + } + catch(e) + { + return; + } + + if(running && hidden) + { + running = false; + } + else if (!running && !hidden) + { + running = true; + graphRenderer.autoResizeCanvas(); + graphRenderer.centerCamera(); + } + + }, 1000); +} + +let firstUpdate = true; +function updateGraph() +{ + if(!running) return; + + if (graphRenderer.canvasSidebar.classList.contains("is-collapsed")) return; + + if (firstUpdate) + { + setTimeout(() => graphRenderer?.canvas?.classList.remove("hide"), 500); + firstUpdate = false; + } + + GraphAssembly.update(mouseWorldPos, graphRenderer.grabbedNode, graphRenderer.cameraScale); + + if (GraphAssembly.hoveredNode != graphRenderer.hoveredNode) + { + graphRenderer.hoveredNode = GraphAssembly.hoveredNode; + graphRenderer.canvas.style.cursor = GraphAssembly.hoveredNode == -1 ? "default" : "pointer"; + } + + graphRenderer.autoResizeCanvas(); + graphRenderer.draw(GraphAssembly.positions); + + averageFPS = averageFPS * 0.95 + pixiApp.ticker.FPS * 0.05; + + if (averageFPS < targetFPS * 0.8 && batchFraction > minBatchFraction) + { + batchFraction = Math.max(batchFraction - 0.5 * 1/targetFPS, minBatchFraction); + GraphAssembly.batchFraction = batchFraction; + GraphAssembly.repulsionForce = graphData.graphOptions.repulsionForce / batchFraction; + } + + if (averageFPS > targetFPS * 1.2 && batchFraction < 1) + { + batchFraction = Math.min(batchFraction + 0.5 * 1/targetFPS, 1); + GraphAssembly.batchFraction = batchFraction; + GraphAssembly.repulsionForce = graphData.graphOptions.repulsionForce / batchFraction; + } + + if (scrollVelocity != 0) + { + let cameraCenter = graphRenderer.getCameraCenterWorldspace(); + + if (Math.abs(scrollVelocity) < 0.001) + { + scrollVelocity = 0; + } + + zoomGraphViewAroundPoint(mouseWorldPos, scrollVelocity); + + scrollVelocity *= 0.65; + } +} + +function zoomGraphViewAroundPoint(point, zoom, minScale = 0.15, maxScale = 15.0) +{ + let cameraCenter = graphRenderer.getCameraCenterWorldspace(); + + graphRenderer.cameraScale = Math.max(Math.min(graphRenderer.cameraScale + zoom * graphRenderer.cameraScale, maxScale), minScale); + if(graphRenderer.cameraScale != minScale && graphRenderer.cameraScale != maxScale && scrollVelocity > 0 && mouseWorldPos.x != undefined && mouseWorldPos.y != undefined) + { + let aroundDiff = {x: point.x - cameraCenter.x, y: point.y - cameraCenter.y}; + let movePos = {x: cameraCenter.x + aroundDiff.x * zoom, y: cameraCenter.y + aroundDiff.y * zoom}; + graphRenderer.setCameraCenterWorldspace(movePos); + } + else graphRenderer.setCameraCenterWorldspace(cameraCenter); +} + +function scaleGraphViewAroundPoint(point, scale, minScale = 0.15, maxScale = 15.0) +{ + let cameraCenter = graphRenderer.getCameraCenterWorldspace(); + + let scaleBefore = graphRenderer.cameraScale; + graphRenderer.cameraScale = Math.max(Math.min(scale * graphRenderer.cameraScale, maxScale), minScale); + let diff = (scaleBefore - graphRenderer.cameraScale) / scaleBefore; + if(graphRenderer.cameraScale != minScale && graphRenderer.cameraScale != maxScale && scale != 0) + { + let aroundDiff = {x: point.x - cameraCenter.x, y: point.y - cameraCenter.y}; + let movePos = {x: cameraCenter.x - aroundDiff.x * diff, y: cameraCenter.y - aroundDiff.y * diff}; + graphRenderer.setCameraCenterWorldspace(movePos); + } + else graphRenderer.setCameraCenterWorldspace(cameraCenter); +} + +function initializeGraphEvents() +{ + window.addEventListener('beforeunload', () => + { + running = false; + GraphAssembly.free(); + }); + + let graphExpanded = false; + let lastCanvasWidth = graphRenderer.canvas.width; + window.addEventListener('resize', () => + { + if(graphExpanded) + { + graphRenderer.autoResizeCanvas(); + graphRenderer.centerCamera(); + } + else + { + if (graphRenderer.canvas.width != lastCanvasWidth) + { + graphRenderer.autoResizeCanvas(); + graphRenderer.centerCamera(); + } + } + }); + + let container = document.querySelector(".graph-view-container"); + + function handleOutsideClick(event) + { + if (event.composedPath().includes(container)) + { + return; + } + toggleExpandedGraph(); + } + + function toggleExpandedGraph() + { + let initialWidth = container.clientWidth; + let initialHeight = container.clientHeight; + + // scale and fade out animation: + container.classList.add("scale-down"); + let fadeOutAnimation = container.animate({ opacity: 0 }, {duration: 100, easing: "ease-in", fill: "forwards"}); + fadeOutAnimation.addEventListener("finish", function() + { + container.classList.toggle("expanded"); + + graphRenderer.autoResizeCanvas(); + graphRenderer.centerCamera(); + + let finalWidth = container.clientWidth; + let finalHeight = container.clientHeight; + graphRenderer.cameraScale *= ((finalWidth / initialWidth) + (finalHeight / initialHeight)) / 2; + + container.classList.remove("scale-down"); + container.classList.add("scale-up"); + + updateGraph(); + + let fadeInAnimation = container.animate({ opacity: 1 }, {duration: 200, easing: "ease-out", fill: "forwards"}); + fadeInAnimation.addEventListener("finish", function() + { + container.classList.remove("scale-up"); + }); + }); + + graphExpanded = !graphExpanded; + + if (graphExpanded) document.addEventListener("pointerdown", handleOutsideClick); + else document.removeEventListener("pointerdown", handleOutsideClick); + } + + async function navigateToNode(nodeIndex) + { + if (!graphExpanded) GraphAssembly.saveState(graphRenderer); + else toggleExpandedGraph(); + let url = graphData.paths[nodeIndex]; + if(window.location.pathname.endsWith(graphData.paths[nodeIndex])) return; + await loadDocument(url, true, true); + } + + // Get the mouse position relative to the canvas. + function getPointerPosOnCanvas(event) + { + var rect = graphRenderer.canvas.getBoundingClientRect(); + let pos = getPointerPosition(event); + + return { + x: pos.x - rect.left, + y: pos.y - rect.top + }; + } + + let startPointerPos = { x: 0, y: 0 }; + let pointerPos = { x: 0, y: 0 }; + let lastPointerPos = { x: 0, y: 0 }; + let pointerDelta = { x: 0, y: 0 }; + let dragDisplacement = { x: 0, y: 0 }; + let startDragTime = 0; + let pointerDown = false; + let middleDown = false; + let pointerInside = false; + let graphContainer = document.querySelector(".graph-view-container"); + let firstPointerDownId = -1; + + function handlePointerEnter(enter) + { + let lastDistance = 0; + let startZoom = false; + + function handleMouseMove(move) + { + pointerPos = getPointerPosOnCanvas(move); + mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos); + pointerDelta = { x: pointerPos.x - lastPointerPos.x, y: pointerPos.y - lastPointerPos.y }; + lastPointerPos = pointerPos; + + if (graphRenderer.grabbedNode != -1) dragDisplacement = { x: pointerPos.x - startPointerPos.x, y: pointerPos.y - startPointerPos.y }; + + if (pointerDown && graphRenderer.hoveredNode != -1 && graphRenderer.grabbedNode == -1 && graphRenderer.hoveredNode != graphRenderer.grabbedNode) + { + graphRenderer.grabbedNode = graphRenderer.hoveredNode; + } + + if ((pointerDown && graphRenderer.hoveredNode == -1 && graphRenderer.grabbedNode == -1) || middleDown) + { + graphRenderer.cameraOffset = { x: graphRenderer.cameraOffset.x + pointerDelta.x, y: graphRenderer.cameraOffset.y + pointerDelta.y }; + } + else + { + if (graphRenderer.hoveredNode != -1) graphRenderer.canvas.style.cursor = "pointer"; + else graphRenderer.canvas.style.cursor = "default"; + } + } + + function handleTouchMove(move) + { + if (move.touches?.length == 1) + { + if(startZoom) + { + lastPointerPos = getPointerPosOnCanvas(move); + startZoom = false; + } + + handleMouseMove(move); + return; + } + + // pinch zoom + if (move.touches?.length == 2) + { + let touch1 = getTouchPosition(move.touches[0]); + let touch2 = getTouchPosition(move.touches[1]); + + pointerPos = getPointerPosOnCanvas(move); + pointerDelta = { x: pointerPos.x - lastPointerPos.x, y: pointerPos.y - lastPointerPos.y }; + lastPointerPos = pointerPos; + + let distance = Math.sqrt(Math.pow(touch1.x - touch2.x, 2) + Math.pow(touch1.y - touch2.y, 2)); + + if (!startZoom) + { + startZoom = true; + lastDistance = distance; + pointerDelta = { x: 0, y: 0 }; + mouseWorldPos = { x: undefined, y: undefined}; + graphRenderer.grabbedNode = -1; + graphRenderer.hoveredNode = -1; + } + + let distanceDelta = distance - lastDistance; + let scaleDelta = distanceDelta / lastDistance; + + scaleGraphViewAroundPoint(graphRenderer.vecToWorldspace(pointerPos), 1 + scaleDelta, 0.15, 15.0); + graphRenderer.cameraOffset = { x: graphRenderer.cameraOffset.x + pointerDelta.x, y: graphRenderer.cameraOffset.y + pointerDelta.y }; + + lastDistance = distance; + } + } + + function handlePointerUp(up) + { + document.removeEventListener("pointerup", handlePointerUp); + + let pointerUpTime = Date.now(); + + setTimeout(() => + { + if (pointerDown && graphRenderer.hoveredNode != -1 && Math.abs(dragDisplacement.x) <= 4 && Math.abs(dragDisplacement.y) <= 4 && pointerUpTime - startDragTime < 300) + { + navigateToNode(graphRenderer.hoveredNode); + } + + if (pointerDown && graphRenderer.grabbedNode != -1) + { + graphRenderer.grabbedNode = -1; + } + + if (up.button == 0) pointerDown = false; + if (up.pointerType == "touch" && firstPointerDownId == up.pointerId) + { + firstPointerDownId = -1; + pointerDown = false; + } + if (up.button == 1) middleDown = false; + if (!pointerInside) + { + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("touchmove", handleTouchMove); + } + }, 0); + } + + function handlePointerDown(down) + { + document.addEventListener("pointerup", handlePointerUp); + mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos); + dragDisplacement = { x: 0, y: 0 }; + if (down.button == 0) pointerDown = true; + if (down.pointerType == "touch" && firstPointerDownId == -1) + { + firstPointerDownId = down.pointerId; + pointerDown = true; + } + if (down.button == 1) middleDown = true; + + startPointerPos = pointerPos; + startDragTime = Date.now(); + + if (pointerDown && graphRenderer.hoveredNode != -1) + { + graphRenderer.grabbedNode = graphRenderer.hoveredNode; + } + } + + function handlePointerLeave(leave) + { + setTimeout(() => + { + pointerInside = false; + if (!pointerDown) + { + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("touchmove", handleTouchMove); + mouseWorldPos = { x: undefined, y: undefined }; + } + graphContainer.removeEventListener("pointerdown", handlePointerDown); + graphContainer.removeEventListener("pointerleave", handlePointerLeave); + }, 1); + } + + pointerPos = getPointerPosOnCanvas(enter); + mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos); + lastPointerPos = getPointerPosOnCanvas(enter); + pointerInside = true; + + document.addEventListener("mousemove", handleMouseMove); + document.addEventListener("touchmove", handleTouchMove); + graphContainer.addEventListener("pointerdown", handlePointerDown); + graphContainer.addEventListener("pointerleave", handlePointerLeave); + } + + graphContainer.addEventListener("pointerenter", handlePointerEnter); + + document.querySelector(".graph-expand.graph-icon")?.addEventListener("click", event => + { + event.stopPropagation(); + + toggleExpandedGraph(); + }); + + graphContainer.addEventListener("wheel", function(e) + { + let startingScrollVelocity = 0.09; + let delta = e.deltaY; + if (delta > 0) + { + if(scrollVelocity >= -startingScrollVelocity) + { + scrollVelocity = -startingScrollVelocity; + } + scrollVelocity *= 1.4; + } + else + { + if(scrollVelocity <= startingScrollVelocity) + { + scrollVelocity = startingScrollVelocity; + } + scrollVelocity *= 1.4; + } + }); + + // recenter the graph on double click + graphContainer.addEventListener("dblclick", function(e) + { + graphRenderer.fitToNodes(); + }); + + document.querySelector(".theme-toggle-input")?.addEventListener("change", event => + { + setTimeout(() => graphRenderer.resampleColors(), 0); + }); +} + +window.addEventListener("load", () => +{ + waitLoadScripts(["pixi", "graph-data", "graph-render-worker", "graph-wasm"], () => + { + Module['onRuntimeInitialized'] = initializeGraphView; + setTimeout(() => Module['onRuntimeInitialized'](), 300); + }); +}); +`; + +// assets/graph-wasm.txt.js +var graph_wasm_txt_default = ` +// Wasm glue +var Module = typeof Module != "undefined" ? Module : {}; +var moduleOverrides = Object.assign({}, Module); +var arguments_ = []; +var thisProgram = "./this.program"; +var quit_ = (status,toThrow)=>{ + throw toThrow +} +; +var ENVIRONMENT_IS_WEB = typeof window == "object"; +var ENVIRONMENT_IS_WORKER = typeof importScripts == "function"; +var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string"; +var scriptDirectory = ""; +function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory) + } + return scriptDirectory + path +} +var read_, readAsync, readBinary, setWindowTitle; +if (ENVIRONMENT_IS_NODE) { + var fs = require("fs"); + var nodePath = require("path"); + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = nodePath.dirname(scriptDirectory) + "/" + } else { + scriptDirectory = __dirname + "/" + } + read_ = (filename,binary)=>{ + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + return fs.readFileSync(filename, binary ? undefined : "utf8") + } + ; + readBinary = filename=>{ + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret) + } + return ret + } + ; + readAsync = (filename,onload,onerror)=>{ + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + fs.readFile(filename, function(err, data) { + if (err) + onerror(err); + else + onload(data.buffer) + }) + } + ; + if (!Module["thisProgram"] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\\\/g, "/") + } + arguments_ = process.argv.slice(2); + if (typeof module != "undefined") { + module["exports"] = Module + } + process.on("uncaughtException", function(ex) { + if (ex !== "unwind" && !(ex instanceof ExitStatus) && !(ex.context instanceof ExitStatus)) { + throw ex + } + }); + var nodeMajor = process.versions.node.split(".")[0]; + if (nodeMajor < 15) { + process.on("unhandledRejection", function(reason) { + throw reason + }) + } + quit_ = (status,toThrow)=>{ + process.exitCode = status; + throw toThrow + } + ; + Module["inspect"] = function() { + return "[Emscripten Module object]" + } +} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href + } else if (typeof document != "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1) + } else { + scriptDirectory = "" + } + { + read_ = url=>{ + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText + } + ; + if (ENVIRONMENT_IS_WORKER) { + readBinary = url=>{ + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response) + } + } + readAsync = (url,onload,onerror)=>{ + var xhr = new XMLHttpRequest; + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = ()=>{ + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return + } + onerror() + } + ; + xhr.onerror = onerror; + xhr.send(null) + } + } + setWindowTitle = title=>document.title = title +} else {} +var out = Module["print"] || console.log.bind(console); +var err = Module["printErr"] || console.warn.bind(console); +Object.assign(Module, moduleOverrides); +moduleOverrides = null; +if (Module["arguments"]) + arguments_ = Module["arguments"]; +if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; +if (Module["quit"]) + quit_ = Module["quit"]; +var wasmBinary; +if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; +var noExitRuntime = Module["noExitRuntime"] || true; +if (typeof WebAssembly != "object") { + abort("no native wasm support detected") +} +var wasmMemory; +var ABORT = false; +var EXITSTATUS; +var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module["HEAP8"] = HEAP8 = new Int8Array(b); + Module["HEAP16"] = HEAP16 = new Int16Array(b); + Module["HEAP32"] = HEAP32 = new Int32Array(b); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(b); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); + Module["HEAPF32"] = HEAPF32 = new Float32Array(b); + Module["HEAPF64"] = HEAPF64 = new Float64Array(b) +} +var wasmTable; +var __ATPRERUN__ = []; +var __ATINIT__ = []; +var __ATPOSTRUN__ = []; +var runtimeInitialized = false; +function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()) + } + } + callRuntimeCallbacks(__ATPRERUN__) +} +function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__) +} +function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()) + } + } + callRuntimeCallbacks(__ATPOSTRUN__) +} +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb) +} +function addOnInit(cb) { + __ATINIT__.unshift(cb) +} +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb) +} +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; +function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } +} +function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback() + } + } +} +function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what) + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -sASSERTIONS for more info."; + var e = new WebAssembly.RuntimeError(what); + throw e +} +var dataURIPrefix = "data:application/octet-stream;base64,"; +function isDataURI(filename) { + return filename.startsWith(dataURIPrefix) +} +function isFileURI(filename) { + return filename.startsWith("file://") +} +var wasmBinaryFile; +wasmBinaryFile = "graph-wasm.wasm"; +if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile) +} +function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary) + } + if (readBinary) { + return readBinary(file) + } + throw "both async and sync fetching of the wasm failed" + } catch (err) { + abort(err) + } +} +function getBinaryPromise(binaryFile) { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == "function" && !isFileURI(binaryFile)) { + return fetch(binaryFile, { + credentials: "same-origin" + }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + binaryFile + "'" + } + return response["arrayBuffer"]() + }).catch(function() { + return getBinary(binaryFile) + }) + } else { + if (readAsync) { + return new Promise(function(resolve, reject) { + readAsync(binaryFile, function(response) { + resolve(new Uint8Array(response)) + }, reject) + } + ) + } + } + } + return Promise.resolve().then(function() { + return getBinary(binaryFile) + }) +} +function instantiateArrayBuffer(binaryFile, imports, receiver) { + return getBinaryPromise(binaryFile).then(function(binary) { + return WebAssembly.instantiate(binary, imports) + }).then(function(instance) { + return instance + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason) + }) +} +function instantiateAsync(binary, binaryFile, imports, callback) { + if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") { + return fetch(binaryFile, { + credentials: "same-origin" + }).then(function(response) + { + let responseClone = new Response(response.body, { headers: new Headers({"Content-Type": "application/wasm"}) }); + var result = WebAssembly.instantiateStreaming(responseClone, imports); + return result.then(callback, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(binaryFile, imports, callback) + }) + }) + } else { + return instantiateArrayBuffer(binaryFile, imports, callback) + } +} +function createWasm() { + var info = { + "a": wasmImports + }; + function receiveInstance(instance, module) { + var exports = instance.exports; + Module["asm"] = exports; + wasmMemory = Module["asm"]["f"]; + updateMemoryViews(); + wasmTable = Module["asm"]["r"]; + addOnInit(Module["asm"]["g"]); + removeRunDependency("wasm-instantiate"); + return exports + } + addRunDependency("wasm-instantiate"); + function receiveInstantiationResult(result) { + receiveInstance(result["instance"]) + } + if (Module["instantiateWasm"]) { + try { + return Module["instantiateWasm"](info, receiveInstance) + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false + } + } + instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult); + return {} +} +var tempDouble; +var tempI64; +var ASM_CONSTS = { + 2304: $0=>{ + console.log(UTF8ToString($0)) + } +}; +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status +} +function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + callbacks.shift()(Module) + } +} +function getValue(ptr, type="i8") { + if (type.endsWith("*")) + type = "*"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return HEAP16[ptr >> 1]; + case "i32": + return HEAP32[ptr >> 2]; + case "i64": + return HEAP32[ptr >> 2]; + case "float": + return HEAPF32[ptr >> 2]; + case "double": + return HEAPF64[ptr >> 3]; + case "*": + return HEAPU32[ptr >> 2]; + default: + abort("invalid type for getValue: " + type) + } +} +function setValue(ptr, value, type="i8") { + if (type.endsWith("*")) + type = "*"; + switch (type) { + case "i1": + HEAP8[ptr >> 0] = value; + break; + case "i8": + HEAP8[ptr >> 0] = value; + break; + case "i16": + HEAP16[ptr >> 1] = value; + break; + case "i32": + HEAP32[ptr >> 2] = value; + break; + case "i64": + tempI64 = [value >>> 0, (tempDouble = value, + +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], + HEAP32[ptr >> 2] = tempI64[0], + HEAP32[ptr + 4 >> 2] = tempI64[1]; + break; + case "float": + HEAPF32[ptr >> 2] = value; + break; + case "double": + HEAPF64[ptr >> 3] = value; + break; + case "*": + HEAPU32[ptr >> 2] = value; + break; + default: + abort("invalid type for setValue: " + type) + } +} +function _abort() { + abort("") +} +var readEmAsmArgsArray = []; +function readEmAsmArgs(sigPtr, buf) { + readEmAsmArgsArray.length = 0; + var ch; + buf >>= 2; + while (ch = HEAPU8[sigPtr++]) { + buf += ch != 105 & buf; + readEmAsmArgsArray.push(ch == 105 ? HEAP32[buf] : HEAPF64[buf++ >> 1]); + ++buf + } + return readEmAsmArgsArray +} +function runEmAsmFunction(code, sigPtr, argbuf) { + var args = readEmAsmArgs(sigPtr, argbuf); + return ASM_CONSTS[code].apply(null, args) +} +function _emscripten_asm_const_int(code, sigPtr, argbuf) { + return runEmAsmFunction(code, sigPtr, argbuf) +} +function _emscripten_date_now() { + return Date.now() +} +function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num) +} +function getHeapMax() { + return 2147483648 +} +function emscripten_realloc_buffer(size) { + var b = wasmMemory.buffer; + try { + wasmMemory.grow(size - b.byteLength + 65535 >>> 16); + updateMemoryViews(); + return 1 + } catch (e) {} +} +function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false + } + let alignUp = (x,multiple)=>x + (multiple - x % multiple) % multiple; + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + .2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true + } + } + return false +} +function getCFunc(ident) { + var func = Module["_" + ident]; + return func +} +function writeArrayToMemory(array, buffer) { + HEAP8.set(array, buffer) +} +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var c = str.charCodeAt(i); + if (c <= 127) { + len++ + } else if (c <= 2047) { + len += 2 + } else if (c >= 55296 && c <= 57343) { + len += 4; + ++i + } else { + len += 3 + } + } + return len +} +function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023 + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63 + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } + } + heap[outIdx] = 0; + return outIdx - startIdx +} +function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) +} +function stringToUTF8OnStack(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret +} +var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; +function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)) + } + var str = ""; + while (idx < endPtr) { + var u0 = heapOrArray[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2 + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63 + } + if (u0 < 65536) { + str += String.fromCharCode(u0) + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) + } + } + return str +} +function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" +} +function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + "string": str=>{ + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { + ret = stringToUTF8OnStack(str) + } + return ret + } + , + "array": arr=>{ + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret + } + }; + function convertReturnValue(ret) { + if (returnType === "string") { + return UTF8ToString(ret) + } + if (returnType === "boolean") + return Boolean(ret); + return ret + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) + stack = stackSave(); + cArgs[i] = converter(args[i]) + } else { + cArgs[i] = args[i] + } + } + } + var ret = func.apply(null, cArgs); + function onDone(ret) { + if (stack !== 0) + stackRestore(stack); + return convertReturnValue(ret) + } + ret = onDone(ret); + return ret +} +function cwrap(ident, returnType, argTypes, opts) { + var numericArgs = !argTypes || argTypes.every(type=>type === "number" || type === "boolean"); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident) + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts) + } +} +var wasmImports = { + "b": _abort, + "e": _emscripten_asm_const_int, + "d": _emscripten_date_now, + "c": _emscripten_memcpy_big, + "a": _emscripten_resize_heap +}; +var asm = createWasm(); +var ___wasm_call_ctors = function() { + return (___wasm_call_ctors = Module["asm"]["g"]).apply(null, arguments) +}; +var _SetBatchFractionSize = Module["_SetBatchFractionSize"] = function() { + return (_SetBatchFractionSize = Module["_SetBatchFractionSize"] = Module["asm"]["h"]).apply(null, arguments) +} +; +var _SetAttractionForce = Module["_SetAttractionForce"] = function() { + return (_SetAttractionForce = Module["_SetAttractionForce"] = Module["asm"]["i"]).apply(null, arguments) +} +; +var _SetLinkLength = Module["_SetLinkLength"] = function() { + return (_SetLinkLength = Module["_SetLinkLength"] = Module["asm"]["j"]).apply(null, arguments) +} +; +var _SetRepulsionForce = Module["_SetRepulsionForce"] = function() { + return (_SetRepulsionForce = Module["_SetRepulsionForce"] = Module["asm"]["k"]).apply(null, arguments) +} +; +var _SetCentralForce = Module["_SetCentralForce"] = function() { + return (_SetCentralForce = Module["_SetCentralForce"] = Module["asm"]["l"]).apply(null, arguments) +} +; +var _SetDt = Module["_SetDt"] = function() { + return (_SetDt = Module["_SetDt"] = Module["asm"]["m"]).apply(null, arguments) +} +; +var _Init = Module["_Init"] = function() { + return (_Init = Module["_Init"] = Module["asm"]["n"]).apply(null, arguments) +} +; +var _Update = Module["_Update"] = function() { + return (_Update = Module["_Update"] = Module["asm"]["o"]).apply(null, arguments) +} +; +var _SetPosition = Module["_SetPosition"] = function() { + return (_SetPosition = Module["_SetPosition"] = Module["asm"]["p"]).apply(null, arguments) +} +; +var _FreeMemory = Module["_FreeMemory"] = function() { + return (_FreeMemory = Module["_FreeMemory"] = Module["asm"]["q"]).apply(null, arguments) +} +; +var ___errno_location = function() { + return (___errno_location = Module["asm"]["__errno_location"]).apply(null, arguments) +}; +var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["s"]).apply(null, arguments) +} +; +var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["t"]).apply(null, arguments) +} +; +var stackSave = function() { + return (stackSave = Module["asm"]["u"]).apply(null, arguments) +}; +var stackRestore = function() { + return (stackRestore = Module["asm"]["v"]).apply(null, arguments) +}; +var stackAlloc = function() { + return (stackAlloc = Module["asm"]["w"]).apply(null, arguments) +}; +var ___cxa_is_pointer_type = function() { + return (___cxa_is_pointer_type = Module["asm"]["__cxa_is_pointer_type"]).apply(null, arguments) +}; +Module["cwrap"] = cwrap; +Module["setValue"] = setValue; +Module["getValue"] = getValue; +var calledRun; +dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller +} +; +function run() { + if (runDependencies > 0) { + return + } + preRun(); + if (runDependencies > 0) { + return + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun() + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"]("") + }, 1); + doRun() + }, 1) + } else { + doRun() + } +} +if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()() + } +} + +try +{ + run(); +} +catch(e) +{ + console.error(e); +} +`; + +// assets/graph-render-worker.txt.js +var graph_render_worker_txt_default = `// Import Pixi.js library +if( 'function' === typeof importScripts) +{ + importScripts('https://d157l7jdn8e5sf.cloudfront.net/v7.2.0/webworker.js', './tinycolor.js'); + + addEventListener('message', onMessage); + + let app; + let container; + let graphics; + + isDrawing = false; + + let linkCount = 0; + let linkSources = []; + let linkTargets = []; + let nodeCount = 0; + let radii = []; + let labels = []; + let labelFade = []; + let labelWidths = []; + let pixiLabels = []; + let cameraOffset = {x: 0, y: 0}; + let positions = new Float32Array(0); + let linkLength = 0; + let edgePruning = 0; + let colors = + { + background: 0x232323, + link: 0xAAAAAA, + node: 0xCCCCCC, + outline: 0xAAAAAA, + text: 0xFFFFFF, + accent: 0x4023AA + } + + let hoveredNode = -1; + let lastHoveredNode = -1; + let grabbedNode = -1; + let updateAttached = false; + let attachedToGrabbed = []; + let activeNode = -1; + let attachedToActive = []; + + let cameraScale = 1; + let cameraScaleRoot = 1; + + function toScreenSpace(x, y, floor = true) + { + if (floor) + { + return {x: Math.floor((x * cameraScale) + cameraOffset.x), y: Math.floor((y * cameraScale) + cameraOffset.y)}; + } + else + { + return {x: (x * cameraScale) + cameraOffset.x, y: (y * cameraScale) + cameraOffset.y}; + } + } + + function vecToScreenSpace({x, y}, floor = true) + { + return toScreenSpace(x, y, floor); + } + + function toWorldspace(x, y) + { + return {x: (x - cameraOffset.x) / cameraScale, y: (y - cameraOffset.y) / cameraScale}; + } + + function vecToWorldspace({x, y}) + { + return toWorldspace(x, y); + } + + function setCameraCenterWorldspace({x, y}) + { + cameraOffset.x = (canvas.width / 2) - (x * cameraScale); + cameraOffset.y = (canvas.height / 2) - (y * cameraScale); + } + + function getCameraCenterWorldspace() + { + return toWorldspace(canvas.width / 2, canvas.height / 2); + } + + function getNodeScreenRadius(radius) + { + return radius * cameraScaleRoot; + } + + function getNodeWorldspaceRadius(radius) + { + return radius / cameraScaleRoot; + } + + function getPosition(index) + { + return {x: positions[index * 2], y: positions[index * 2 + 1]}; + } + + function mixColors(hexStart, hexEnd, factor) + { + return tinycolor.mix(tinycolor(hexStart.toString(16)), tinycolor(hexEnd.toString(16)), factor).toHexNumber() + } + + function darkenColor(hexColor, factor) + { + return tinycolor(hexColor.toString(16)).darken(factor).toHexNumber(); + } + + function lightenColor(hexColor, factor) + { + return tinycolor(hexColor.toString(16)).lighten(factor).toHexNumber(); + } + + function invertColor(hex, bw) + { + hex = hex.toString(16); // force conversion + // fill extra space up to 6 characters with 0 + while (hex.length < 6) hex = "0" + hex; + + if (hex.indexOf('#') === 0) { + hex = hex.slice(1); + } + // convert 3-digit hex to 6-digits. + if (hex.length === 3) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + if (hex.length !== 6) { + throw new Error('Invalid HEX color:' + hex); + } + var r = parseInt(hex.slice(0, 2), 16), + g = parseInt(hex.slice(2, 4), 16), + b = parseInt(hex.slice(4, 6), 16); + if (bw) { + // https://stackoverflow.com/a/3943023/112731 + return (r * 0.299 + g * 0.587 + b * 0.114) > 186 + ? '#000000' + : '#FFFFFF'; + } + // invert color components + r = (255 - r).toString(16); + g = (255 - g).toString(16); + b = (255 - b).toString(16); + // pad each with zeros and return + return "#" + padZero(r) + padZero(g) + padZero(b); + } + + function clamp(value, min, max) + { + return Math.min(Math.max(value, min), max); + } + + function lerp(a, b, t) + { + return a + (b - a) * t; + } + + let hoverFade = 0; + let hoverFadeSpeed = 0.2; + let hoverFontSize = 15; + let normalFontSize = 12; + let fontRatio = hoverFontSize / normalFontSize; + + function showLabel(index, fade, hovered = false) + { + let label = pixiLabels[index]; + if (!label) return; + labelFade[index] = fade; + + if(fade > 0.01) label.visible = true; + else + { + hideLabel(index); + return; + } + + if (hovered) label.style.fontSize = hoverFontSize; + else label.style.fontSize = normalFontSize; + + + let nodePos = vecToScreenSpace(getPosition(index)); + let width = (labelWidths[index] * (hovered ? fontRatio : 1)) / 2; + label.x = nodePos.x - width; + label.y = nodePos.y + getNodeScreenRadius(radii[index]) + 9; + label.alpha = fade; + } + + function hideLabel(index) + { + let label = pixiLabels[index]; + label.visible = false; + } + + function draw() + { + graphics.clear(); + + let topLines = []; + if (updateAttached) + { + attachedToGrabbed = []; + // hoverFade = 0; + } + + if (hoveredNode != -1 || grabbedNode != -1) + { + hoverFade = Math.min(1, hoverFade + hoverFadeSpeed); + } + else + { + hoverFade = Math.max(0, hoverFade - hoverFadeSpeed); + } + + graphics.lineStyle(1, mixColors(colors.link, colors.background, hoverFade * 50), 0.7); + + for (let i = 0; i < linkCount; i++) + { + let target = linkTargets[i]; + let source = linkSources[i]; + + if (hoveredNode == source || hoveredNode == target || ((lastHoveredNode == source || lastHoveredNode == target) && hoverFade != 0)) + { + if (updateAttached && hoveredNode == source) + attachedToGrabbed.push(target); + + else if (updateAttached && hoveredNode == target) + attachedToGrabbed.push(source); + + topLines.push(i); + } + + let startWorld = getPosition(source); + let endWorld = getPosition(target); + + let start = vecToScreenSpace(startWorld); + let end = vecToScreenSpace(endWorld); + + let dist = Math.sqrt(Math.pow(startWorld.x - endWorld.x, 2) + Math.pow(startWorld.y - endWorld.y, 2)); + + if (dist < (radii[source] + radii[target]) * edgePruning) + { + graphics.moveTo(start.x, start.y); + graphics.lineTo(end.x, end.y); + } + } + + let opacity = 1 - (hoverFade * 0.5); + graphics.beginFill(mixColors(colors.node, colors.background, hoverFade * 50), opacity); + graphics.lineStyle(0, 0xffffff); + for (let i = 0; i < nodeCount; i++) + { + let screenRadius = getNodeScreenRadius(radii[i]); + + if (hoveredNode != i) + { + if (screenRadius > 2) + { + + let labelFade = lerp(0, (screenRadius - 4) / 8 - (1/cameraScaleRoot)/6 * 0.9, Math.max(1 - hoverFade, 0.2)); + showLabel(i, labelFade); + } + else + { + hideLabel(i); + } + } + + if (hoveredNode == i || (lastHoveredNode == i && hoverFade != 0) || (hoveredNode != -1 && attachedToGrabbed.includes(i))) continue; + + let pos = vecToScreenSpace(getPosition(i)); + graphics.drawCircle(pos.x, pos.y, screenRadius); + } + + graphics.endFill(); + + + opacity = hoverFade * 0.7; + graphics.lineStyle(1, mixColors(mixColors(colors.link, colors.accent, hoverFade * 100), colors.background, 20), opacity); + + for (let i = 0; i < topLines.length; i++) + { + let target = linkTargets[topLines[i]]; + let source = linkSources[topLines[i]]; + + // draw lines on top when hovered + let start = vecToScreenSpace(getPosition(source)); + let end = vecToScreenSpace(getPosition(target)); + + + graphics.moveTo(start.x, start.y); + graphics.lineTo(end.x, end.y); + } + + if(hoveredNode != -1 || (lastHoveredNode != -1 && hoverFade != 0)) + { + graphics.beginFill(mixColors(colors.node, colors.accent, hoverFade * 20), 0.9); + graphics.lineStyle(0, 0xffffff); + for (let i = 0; i < attachedToGrabbed.length; i++) + { + let point = attachedToGrabbed[i]; + + let pos = vecToScreenSpace(getPosition(point)); + + graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[point])); + showLabel(point, Math.max(hoverFade * 0.6, labelFade[point])); + } + graphics.endFill(); + + let index = hoveredNode != -1 ? hoveredNode : lastHoveredNode; + + let pos = vecToScreenSpace(getPosition(index)); + graphics.beginFill(mixColors(colors.node, colors.accent, hoverFade * 100), 1); + graphics.lineStyle(hoverFade, mixColors(invertColor(colors.background, true), colors.accent, 50)); + graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[index])); + graphics.endFill(); + + showLabel(index, Math.max(hoverFade, labelFade[index]), true); + } + + + + updateAttached = false; + + graphics.lineStyle(2, colors.accent); + // draw the active node + if (activeNode != -1) + { + let pos = vecToScreenSpace(getPosition(activeNode)); + graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[activeNode]) + 4); + + } + } + + function onMessage(event) + { + if(event.data.type == "draw") + { + positions = new Float32Array(event.data.positions); + draw(); + } + else if(event.data.type == "update_camera") + { + cameraOffset = event.data.cameraOffset; + cameraScale = event.data.cameraScale; + cameraScaleRoot = Math.sqrt(cameraScale); + } + else if(event.data.type == "update_interaction") + { + if(hoveredNode != event.data.hoveredNode && event.data.hoveredNode != -1) updateAttached = true; + if(grabbedNode != event.data.grabbedNode && event.data.hoveredNode != -1) updateAttached = true; + + if(event.data.hoveredNode == -1) lastHoveredNode = hoveredNode; + else lastHoveredNode = -1; + + hoveredNode = event.data.hoveredNode; + grabbedNode = event.data.grabbedNode; + } + else if(event.data.type == "resize") + { + app.renderer.resize(event.data.width, event.data.height); + } + else if(event.data.type == "set_active") + { + activeNode = event.data.active; + } + else if(event.data.type == "update_colors") + { + colors = event.data.colors; + + for (let label of pixiLabels) + { + label.style.fill = invertColor(colors.background, true); + } + } + else if(event.data.type == "init") + { + // Extract data from message + linkCount = event.data.linkCount; + linkSources = event.data.linkSources; + linkTargets = event.data.linkTargets; + nodeCount = event.data.nodeCount; + radii = event.data.radii; + labels = event.data.labels; + linkLength = event.data.linkLength; + edgePruning = event.data.edgePruning; + + app = new PIXI.Application({... event.data.options, antialias: true, resolution: 2, backgroundAlpha: 0, transparent: true}); + container = new PIXI.Container(); + graphics = new PIXI.Graphics(); + app.stage.addChild(container); + container.addChild(graphics); + + pixiLabels = []; + for (let i = 0; i < nodeCount; i++) + { + let label = new PIXI.Text(labels[i], {fontFamily : 'Arial', fontSize: 12, fontWeight: "normal", fill : invertColor(colors.background, true), align : 'center', anchor: 0.5}); + pixiLabels.push(label); + labelWidths.push(label.width); + labelFade.push(0); + app.stage.addChild(label); + } + + } + else + { + console.log("Unknown message type sent to graph worker: " + event.data.type); + } + } +} + + + + + + + +`; + +// assets/graph-wasm.wasm +var graph_wasm_default = __toBinary("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AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALOAEBf0EBIAAgAEEBTRshAAJAA0AgABAQIgFFBEBB7BgoAgAiAUUNAiABEQgADAELCyABDwsQAQAL/AMBAn8gAkGABE8EQCAAIAEgAhACDwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIAQcAASQ0AIAIgAEFAaiIESw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBE0NAAsLIAAgAk0NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIABJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsLwAMBB38jAEGgCGsiAyQAIANBADYCnAgjAEGgAWsiASQAIAEgA0EQaiIHNgKUASABQf7///8HNgKYASABQQBBkAEQCyIBQX82AkwgAUECNgIkIAFBfzYCUCABIAFBnwFqNgIsIAEgAUGUAWo2AlQgA0EAOgAQIwBB0AFrIgIkACACQQA2AswBIAJBoAFqIgVBAEEoEAsaIAIgAigCzAE2AsgBAkBBACAAIAJByAFqIAJB0ABqIAUQF0EASA0AIAEoAkxBAE4hBSABKAIAIQYgASgCSEEATARAIAEgBkFfcTYCAAsCfwJAAkAgASgCMEUEQCABQdAANgIwIAFBADYCHCABQgA3AxAgASgCLCEEIAEgAjYCLAwBCyABKAIQDQELQX8gARAaDQEaCyABIAAgAkHIAWogAkHQAGogAkGgAWoQFwshACAEBH8gAUEAQQAgASgCJBEBABogAUEANgIwIAEgBDYCLCABQQA2AhwgASgCFBogAUIANwMQQQAFIAALGiABIAEoAgAgBkEgcXI2AgAgBUUNAAsgAkHQAWokACABQaABaiQAIAMgBzYCAEGAEkGgCiADEAQaIANBoAhqJAALUwBB9BZCADcCAEHsFkIANwIAQYAXQgA3AgBB/BZBgICA/AM2AgBBiBdCADcCAEGQF0GAgID8AzYCAEGcF0EANgIAQcgYQdAXNgIAQYAYQSo2AgALlSgBC38jAEEQayILJAACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEGoEigCACIGQRAgAEELakF4cSAAQQtJGyIFQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQdASaiIAIAFB2BJqKAIAIgEoAggiBEYEQEGoEiAGQX4gAndxNgIADAELIAQgADYCDCAAIAQ2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwKCyAFQbASKAIAIgdNDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxIgBBACAAa3FoIgFBA3QiAEHQEmoiAiAAQdgSaigCACIAKAIIIgRGBEBBqBIgBkF+IAF3cSIGNgIADAELIAQgAjYCDCACIAQ2AggLIAAgBUEDcjYCBCAAIAVqIgggAUEDdCIBIAVrIgRBAXI2AgQgACABaiAENgIAIAcEQCAHQXhxQdASaiEBQbwSKAIAIQICfyAGQQEgB0EDdnQiA3FFBEBBqBIgAyAGcjYCACABDAELIAEoAggLIQMgASACNgIIIAMgAjYCDCACIAE2AgwgAiADNgIICyAAQQhqIQBBvBIgCDYCAEGwEiAENgIADAoLQawSKAIAIgpFDQEgCkEAIAprcWhBAnRB2BRqKAIAIgIoAgRBeHEgBWshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiBEcEQEG4EigCABogAigCCCIAIAQ2AgwgBCAANgIIDAkLIAJBFGoiASgCACIARQRAIAIoAhAiAEUNAyACQRBqIQELA0AgASEIIAAiBEEUaiIBKAIAIgANACAEQRBqIQEgBCgCECIADQALIAhBADYCAAwIC0F/IQUgAEG/f0sNACAAQQtqIgBBeHEhBUGsEigCACIIRQ0AQQAgBWshAwJAAkACQAJ/QQAgBUGAAkkNABpBHyAFQf///wdLDQAaIAVBJiAAQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIgdBAnRB2BRqKAIAIgFFBEBBACEADAELQQAhACAFQRkgB0EBdmtBACAHQR9HG3QhAgNAAkAgASgCBEF4cSAFayIGIANPDQAgASEEIAYiAw0AQQAhAyABIQAMAwsgACABKAIUIgYgBiABIAJBHXZBBHFqKAIQIgFGGyAAIAYbIQAgAkEBdCECIAENAAsLIAAgBHJFBEBBACEEQQIgB3QiAEEAIABrciAIcSIARQ0DIABBACAAa3FoQQJ0QdgUaigCACEACyAARQ0BCwNAIAAoAgRBeHEgBWsiAiADSSEBIAIgAyABGyEDIAAgBCABGyEEIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIARFDQAgA0GwEigCACAFa08NACAEKAIYIQcgBCAEKAIMIgJHBEBBuBIoAgAaIAQoAggiACACNgIMIAIgADYCCAwHCyAEQRRqIgEoAgAiAEUEQCAEKAIQIgBFDQMgBEEQaiEBCwNAIAEhBiAAIgJBFGoiASgCACIADQAgAkEQaiEBIAIoAhAiAA0ACyAGQQA2AgAMBgsgBUGwEigCACIETQRAQbwSKAIAIQACQCAEIAVrIgFBEE8EQCAAIAVqIgIgAUEBcjYCBCAAIARqIAE2AgAgACAFQQNyNgIEDAELIAAgBEEDcjYCBCAAIARqIgEgASgCBEEBcjYCBEEAIQJBACEBC0GwEiABNgIAQbwSIAI2AgAgAEEIaiEADAgLIAVBtBIoAgAiAkkEQEG0EiACIAVrIgE2AgBBwBJBwBIoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQQAhACAFQS9qIgMCf0GAFigCAARAQYgWKAIADAELQYwWQn83AgBBhBZCgKCAgICABDcCAEGAFiALQQxqQXBxQdiq1aoFczYCAEGUFkEANgIAQeQVQQA2AgBBgCALIgFqIgZBACABayIIcSIBIAVNDQdB4BUoAgAiBARAQdgVKAIAIgcgAWoiCSAHTQ0IIAQgCUkNCAsCQEHkFS0AAEEEcUUEQAJAAkACQAJAQcASKAIAIgQEQEHoFSEAA0AgBCAAKAIAIgdPBEAgByAAKAIEaiAESw0DCyAAKAIIIgANAAsLQQAQCSICQX9GDQMgASEGQYQWKAIAIgBBAWsiBCACcQRAIAEgAmsgAiAEakEAIABrcWohBgsgBSAGTw0DQeAVKAIAIgAEQEHYFSgCACIEIAZqIgggBE0NBCAAIAhJDQQLIAYQCSIAIAJHDQEMBQsgBiACayAIcSIGEAkiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAYgBUEwak8EQCAAIQIMBAtBiBYoAgAiAiADIAZrakEAIAJrcSICEAlBf0YNASACIAZqIQYgACECDAMLIAJBf0cNAgtB5BVB5BUoAgBBBHI2AgALIAEQCSECQQAQCSEAIAJBf0YNBSAAQX9GDQUgACACTQ0FIAAgAmsiBiAFQShqTQ0FC0HYFUHYFSgCACAGaiIANgIAQdwVKAIAIABJBEBB3BUgADYCAAsCQEHAEigCACIDBEBB6BUhAANAIAIgACgCACIBIAAoAgQiBGpGDQIgACgCCCIADQALDAQLQbgSKAIAIgBBACAAIAJNG0UEQEG4EiACNgIAC0EAIQBB7BUgBjYCAEHoFSACNgIAQcgSQX82AgBBzBJBgBYoAgA2AgBB9BVBADYCAANAIABBA3QiAUHYEmogAUHQEmoiBDYCACABQdwSaiAENgIAIABBAWoiAEEgRw0AC0G0EiAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgQ2AgBBwBIgASACaiIBNgIAIAEgBEEBcjYCBCAAIAJqQSg2AgRBxBJBkBYoAgA2AgAMBAsgAC0ADEEIcQ0CIAEgA0sNAiACIANNDQIgACAEIAZqNgIEQcASIANBeCADa0EHcUEAIANBCGpBB3EbIgBqIgE2AgBBtBJBtBIoAgAgBmoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBxBJBkBYoAgA2AgAMAwtBACEEDAULQQAhAgwDC0G4EigCACACSwRAQbgSIAI2AgALIAIgBmohAUHoFSEAAkACQAJAAkACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0HoFSEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgcgBUEDcjYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiBiAFIAdqIgVrIQAgAyAGRgRAQcASIAU2AgBBtBJBtBIoAgAgAGoiADYCACAFIABBAXI2AgQMAwtBvBIoAgAgBkYEQEG8EiAFNgIAQbASQbASKAIAIABqIgA2AgAgBSAAQQFyNgIEIAAgBWogADYCAAwDCyAGKAIEIgNBA3FBAUYEQCADQXhxIQkCQCADQf8BTQRAIAYoAgwiASAGKAIIIgJGBEBBqBJBqBIoAgBBfiADQQN2d3E2AgAMAgsgAiABNgIMIAEgAjYCCAwBCyAGKAIYIQgCQCAGIAYoAgwiAkcEQCAGKAIIIgEgAjYCDCACIAE2AggMAQsCQCAGQRRqIgMoAgAiAQ0AIAZBEGoiAygCACIBDQBBACECDAELA0AgAyEEIAEiAkEUaiIDKAIAIgENACACQRBqIQMgAigCECIBDQALIARBADYCAAsgCEUNAAJAIAYoAhwiAUECdEHYFGoiBCgCACAGRgRAIAQgAjYCACACDQFBrBJBrBIoAgBBfiABd3E2AgAMAgsgCEEQQRQgCCgCECAGRhtqIAI2AgAgAkUNAQsgAiAINgIYIAYoAhAiAQRAIAIgATYCECABIAI2AhgLIAYoAhQiAUUNACACIAE2AhQgASACNgIYCyAGIAlqIgYoAgQhAyAAIAlqIQALIAYgA0F+cTYCBCAFIABBAXI2AgQgACAFaiAANgIAIABB/wFNBEAgAEF4cUHQEmohAQJ/QagSKAIAIgJBASAAQQN2dCIAcUUEQEGoEiAAIAJyNgIAIAEMAQsgASgCCAshACABIAU2AgggACAFNgIMIAUgATYCDCAFIAA2AggMAwtBHyEDIABB////B00EQCAAQSYgAEEIdmciAWt2QQFxIAFBAXRrQT5qIQMLIAUgAzYCHCAFQgA3AhAgA0ECdEHYFGohAQJAQawSKAIAIgJBASADdCIEcUUEQEGsEiACIARyNgIAIAEgBTYCAAwBCyAAQRkgA0EBdmtBACADQR9HG3QhAyABKAIAIQIDQCACIgEoAgRBeHEgAEYNAyADQR12IQIgA0EBdCEDIAEgAkEEcWoiBCgCECICDQALIAQgBTYCEAsgBSABNgIYIAUgBTYCDCAFIAU2AggMAgtBtBIgBkEoayIAQXggAmtBB3FBACACQQhqQQdxGyIBayIINgIAQcASIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQcQSQZAWKAIANgIAIAMgBEEnIARrQQdxQQAgBEEna0EHcRtqQS9rIgAgACADQRBqSRsiAUEbNgIEIAFB8BUpAgA3AhAgAUHoFSkCADcCCEHwFSABQQhqNgIAQewVIAY2AgBB6BUgAjYCAEH0FUEANgIAIAFBGGohAANAIABBBzYCBCAAQQhqIQIgAEEEaiEAIAIgBEkNAAsgASADRg0DIAEgASgCBEF+cTYCBCADIAEgA2siAkEBcjYCBCABIAI2AgAgAkH/AU0EQCACQXhxQdASaiEAAn9BqBIoAgAiAUEBIAJBA3Z0IgJxRQRAQagSIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwEC0EfIQAgAkH///8HTQRAIAJBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAAsgAyAANgIcIANCADcCECAAQQJ0QdgUaiEBAkBBrBIoAgAiBEEBIAB0IgZxRQRAQawSIAQgBnI2AgAgASADNgIADAELIAJBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBANAIAQiASgCBEF4cSACRg0EIABBHXYhBCAAQQF0IQAgASAEQQRxaiIGKAIQIgQNAAsgBiADNgIQCyADIAE2AhggAyADNgIMIAMgAzYCCAwDCyABKAIIIgAgBTYCDCABIAU2AgggBUEANgIYIAUgATYCDCAFIAA2AggLIAdBCGohAAwFCyABKAIIIgAgAzYCDCABIAM2AgggA0EANgIYIAMgATYCDCADIAA2AggLQbQSKAIAIgAgBU0NAEG0EiAAIAVrIgE2AgBBwBJBwBIoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAMLQaAXQTA2AgBBACEADAILAkAgB0UNAAJAIAQoAhwiAEECdEHYFGoiASgCACAERgRAIAEgAjYCACACDQFBrBIgCEF+IAB3cSIINgIADAILIAdBEEEUIAcoAhAgBEYbaiACNgIAIAJFDQELIAIgBzYCGCAEKAIQIgAEQCACIAA2AhAgACACNgIYCyAEKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsCQCADQQ9NBEAgBCADIAVqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAFQQNyNgIEIAQgBWoiAiADQQFyNgIEIAIgA2ogAzYCACADQf8BTQRAIANBeHFB0BJqIQACf0GoEigCACIBQQEgA0EDdnQiA3FFBEBBqBIgASADcjYCACAADAELIAAoAggLIQEgACACNgIIIAEgAjYCDCACIAA2AgwgAiABNgIIDAELQR8hACADQf///wdNBEAgA0EmIANBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyACIAA2AhwgAkIANwIQIABBAnRB2BRqIQECQAJAIAhBASAAdCIGcUUEQEGsEiAGIAhyNgIAIAEgAjYCAAwBCyADQRkgAEEBdmtBACAAQR9HG3QhACABKAIAIQUDQCAFIgEoAgRBeHEgA0YNAiAAQR12IQYgAEEBdCEAIAEgBkEEcWoiBigCECIFDQALIAYgAjYCEAsgAiABNgIYIAIgAjYCDCACIAI2AggMAQsgASgCCCIAIAI2AgwgASACNgIIIAJBADYCGCACIAE2AgwgAiAANgIICyAEQQhqIQAMAQsCQCAJRQ0AAkAgAigCHCIAQQJ0QdgUaiIBKAIAIAJGBEAgASAENgIAIAQNAUGsEiAKQX4gAHdxNgIADAILIAlBEEEUIAkoAhAgAkYbaiAENgIAIARFDQELIAQgCTYCGCACKAIQIgAEQCAEIAA2AhAgACAENgIYCyACKAIUIgBFDQAgBCAANgIUIAAgBDYCGAsCQCADQQ9NBEAgAiADIAVqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQsgAiAFQQNyNgIEIAIgBWoiBCADQQFyNgIEIAMgBGogAzYCACAHBEAgB0F4cUHQEmohAEG8EigCACEBAn9BASAHQQN2dCIFIAZxRQRAQagSIAUgBnI2AgAgAAwBCyAAKAIICyEGIAAgATYCCCAGIAE2AgwgASAANgIMIAEgBjYCCAtBvBIgBDYCAEGwEiADNgIACyACQQhqIQALIAtBEGokACAAC5oBACAAQQE6ADUCQCAAKAIEIAJHDQAgAEEBOgA0AkAgACgCECICRQRAIABBATYCJCAAIAM2AhggACABNgIQIANBAUcNAiAAKAIwQQFGDQEMAgsgASACRgRAIAAoAhgiAkECRgRAIAAgAzYCGCADIQILIAAoAjBBAUcNAiACQQFGDQEMAgsgACAAKAIkQQFqNgIkCyAAQQE6ADYLC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwsGACAAEAULlwIAIABFBEBBAA8LAn8CQCAABH8gAUH/AE0NAQJAQcgYKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDAQLIAFBgEBxQYDAA0cgAUGAsANPcUUEQCAAIAFBP3FBgAFyOgACIAAgAUEMdkHgAXI6AAAgACABQQZ2QT9xQYABcjoAAUEDDAQLIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDAQLC0GgF0EZNgIAQX8FQQELDAELIAAgAToAAEEBCwu7BwIGfgF/AkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyACIAIoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEEIAEpAwghByMAQSBrIgIkAAJAIAdC////////////AIMiBUKAgICAgIDAgDx9IAVCgICAgICAwP/DAH1UBEAgB0IEhiAEQjyIhCEFIARC//////////8PgyIEQoGAgICAgICACFoEQCAFQoGAgICAgICAwAB8IQMMAgsgBUKAgICAgICAgEB9IQMgBEKAgICAgICAgAhSDQEgAyAFQgGDfCEDDAELIARQIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgB0IEhiAEQjyIhEL/////////A4NCgICAgICAgPz/AIQhAwwBC0KAgICAgICA+P8AIQMgBUL///////+//8MAVg0AQgAhAyAFQjCIpyIAQZH3AEkNACAEIQMgB0L///////8/g0KAgICAgIDAAIQiBiEIAkAgAEGB9wBrIgFBwABxBEAgAyABQUBqrYYhCEIAIQMMAQsgAUUNACAIIAGtIgWGIANBwAAgAWutiIQhCCADIAWGIQMLIAIgAzcDECACIAg3AxgCQEGB+AAgAGsiAEHAAHEEQCAGIABBQGqtiCEEQgAhBgwBCyAARQ0AIAZBwAAgAGuthiAEIACtIgOIhCEEIAYgA4ghBgsgAiAENwMAIAIgBjcDCCACKQMIQgSGIAIpAwAiBEI8iIQhAyACKQMQIAIpAxiEQgBSrSAEQv//////////D4OEIgRCgYCAgICAgIAIWgRAIANCAXwhAwwBCyAEQoCAgICAgICACFINACADQgGDIAN8IQMLIAJBIGokACAJIAMgB0KAgICAgICAgIB/g4S/OQMACw8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAtyAQN/IAAoAgAsAABBMGtBCk8EQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABIAJB/////wdzShshAQsgACADQQFqNgIAIAEhAiADLAABQTBrQQpJDQALIAILlywDHH8CfAJ+IwBB0ABrIgwkACAMIAE2AkwgDEE3aiEeIAxBOGohGAJAAkACQAJAA0AgASEGIAUgE0H/////B3NKDQEgBSATaiETAkACQAJAIAYiBS0AACILBEADQAJAAkAgC0H/AXEiAUUEQCAF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"); + +// assets/website.txt.js +var website_txt_default = `//#region ----------------- Initializations ----------------- + +let loadedURL = new URL(window.location.href); +let absoluteBasePath = undefined; +let relativeBasePath = undefined; +let relativePathname = undefined; + +let webpageContainer; +let documentContainer; +let viewContent; + +let leftSidebar; +let rightSidebar; +let sidebarCollapseIcons; +let sidebarGutters; +let sidebars; +let sidebarDefaultWidth; +let sidebarTargetWidth; +let contentTargetWidth; + +let themeToggle; +let searchInput; + +let fileTree; +let outlineTree; +let fileTreeItems; +let outlineTreeItems; + +let canvasWrapper; +let canvas; +let canvasNodes; +let canvasBackground; +let canvasBackgroundPattern; +let focusedCanvasNode; + +let loadingIcon; +let isOffline = false; + +let collapseIconUp = ["m7 15 5 5 5-5", "m7 9 5-5 5 5"]; // path 1, path 2 - svg paths +let collapseIconDown = ["m7 20 5-5 5 5", "m7 4 5 5 5-5"]; // path 1, path 2 - svg paths + +let isTouchDevice = isTouchCapable(); + +let documentType; // "markdown" | "canvas" | "embed" | "custom" | "none" +let embedType; // "img" | "video" | "audio" | "embed" | "none" +let customType; // "kanban" | "excalidraw" | "none" +let deviceSize; // "large-screen" | "small screen" | "tablet" | "phone" + +let fullyInitialized = false; + +async function initGlobalObjects() +{ + if(window.location.protocol != "file:") + { + await loadIncludes(); + } + + + + loadingIcon = document.createElement("div"); + loadingIcon.classList.add("loading-icon"); + document.body.appendChild(loadingIcon); + loadingIcon.innerHTML = \`
    \`; + + webpageContainer = document.querySelector(".webpage-container"); + documentContainer = document.querySelector(".document-container"); + leftSidebar = document.querySelector(".sidebar-left"); + rightSidebar = document.querySelector(".sidebar-right"); + + fileTree = document.querySelector(".file-tree"); + outlineTree = document.querySelector(".outline-tree"); + fileTreeItems = Array.from(document.querySelectorAll(".tree-container.file-tree .tree-item")); + + sidebars = [] + sidebarGutters = [] + sidebarCollapseIcons = [] + if (leftSidebar && rightSidebar) + { + sidebarCollapseIcons = Array.from(document.querySelectorAll(".sidebar-collapse-icon")); + sidebarGutters = [sidebarCollapseIcons[0].parentElement, sidebarCollapseIcons[1].parentElement]; + sidebars = [sidebarGutters[0].parentElement, sidebarGutters[1].parentElement]; + } + + themeToggle = document.querySelector(".theme-toggle-input"); +} + +async function initializePage() +{ + focusedCanvasNode = null; + canvasWrapper = document.querySelector(".canvas-wrapper") ?? canvasWrapper; + canvas = document.querySelector(".canvas") ?? canvas; + + let canvasNodesTemp = document.querySelectorAll(".canvas-node"); + canvasNodes = canvasNodesTemp.length > 0 ? canvasNodesTemp : canvasNodes; + + canvasBackground = document.querySelector(".canvas-background") ?? canvasBackground; + canvasBackgroundPattern = document.querySelector(".canvas-background pattern") ?? canvasBackgroundPattern; + viewContent = document.querySelector(".document-container > .view-content") ?? document.querySelector(".document-container > .markdown-preview-view") ?? viewContent; + outlineTreeItems = Array.from(document.querySelectorAll(".tree-container.outline-tree .tree-item")); + + if(!fullyInitialized) + { + if (window.location.protocol == "file:") initializeForFileProtocol(); + await initGlobalObjects(); + initializeDocumentTypes(document); + setupSidebars(); + setupThemeToggle(); + await setupSearch(); + setupRootPath(document); + + sidebarDefaultWidth = await getComputedPixelValue("--sidebar-width"); + contentTargetWidth = await getComputedPixelValue("--line-width") * 0.9; + + window.addEventListener('resize', () => onResize()); + onResize(); + } + + setTimeout(() => documentContainer.classList.remove("hide")); + + // hide the right sidebar when viewing specific file types + if (rightSidebar && (embedType == "video" || embedType == "embed" || customType == "excalidraw" || customType == "kanban" || documentType == "canvas")) + { + if(!rightSidebar.collapsed) + { + rightSidebar.temporaryCollapse(); + } + } + else + { + // if the right sidebar was temporarily collapsed and it is still collapsed, uncollapse it + if (rightSidebar && rightSidebar.temporarilyCollapsed && rightSidebar.collapsed) + { + rightSidebar.collapse(false); + rightSidebar.temporarilyCollapsed = false; + } + } + + parseURLParams(); + relativePathname = getVaultRelativePath(loadedURL.href); +} + +function initializePageEvents(setupOnNode) +{ + if (!setupOnNode) return; + setupHeaders(setupOnNode); + setupTrees(setupOnNode); + setupLists(setupOnNode); + setupCallouts(setupOnNode); + setupCheckboxes(setupOnNode); + setupCanvas(setupOnNode); + setupCodeblocks(setupOnNode); + setupLinks(setupOnNode); + setupScroll(setupOnNode); +} + +function initializeDocumentTypes(fromDocument) +{ + if (fromDocument.querySelector(".document-container > .markdown-preview-view")) documentType = "markdown"; + else if (fromDocument.querySelector(".canvas-wrapper")) documentType = "canvas"; + else + { + documentType = "custom"; + if (fromDocument.querySelector(".kanban-plugin")) customType = "kanban"; + else if (fromDocument.querySelector(".excalidraw-plugin")) customType = "excalidraw"; + } +} + +function initializeForFileProtocol() +{ + let graphEl = document.querySelector(".graph-view-placeholder"); + if(graphEl) + { + console.log("Running locally, skipping graph view initialization and hiding graph."); + graphEl.style.display = "none"; + graphEl.previousElementSibling.style.display = "none"; // hide the graph's header + } +} + +window.onload = async function() +{ + await initializePage(); + initializePageEvents(document); + setActiveDocument(loadedURL, true, false, false); + fullyInitialized = true; +}; + +window.onpopstate = function(event) +{ + event.preventDefault(); + event.stopPropagation(); + + if (document.body.classList.contains("floating-sidebars") && (!leftSidebar.collapsed || !rightSidebar.collapsed)) + { + leftSidebar.collapse(true); + rightSidebar.collapse(true); + return; + } + + loadDocument(getURLPath(), false, true); + console.log("Popped state: " + getURLPath()); +} + +//#endregion + +//#region ----------------- Resize ----------------- + +function onEndResize() +{ + document.body.classList.toggle("resizing", false); +} + +function onStartResize() +{ + document.body.classList.toggle("resizing", true); +} + +let lastScreenWidth = undefined; +let isResizing = false; +let checkStillResizingTimeout = undefined; +function onResize(isInitial = false) +{ + if (!isResizing) + { + onStartResize(); + isResizing = true; + } + + function widthNowInRange(low, high) + { + let w = window.innerWidth; + return (w > low && w < high && lastScreenWidth == undefined) || ((w > low && w < high) && (lastScreenWidth <= low || lastScreenWidth >= high)); + } + + function widthNowGreaterThan(value) + { + let w = window.innerWidth; + return (w > value && lastScreenWidth == undefined) || (w > value && lastScreenWidth < value); + } + + function widthNowLessThan(value) + { + let w = window.innerWidth; + return (w < value && lastScreenWidth == undefined) || (w < value && lastScreenWidth > value); + } + + if (widthNowGreaterThan(contentTargetWidth + sidebarDefaultWidth * 2) || widthNowGreaterThan(1025)) + { + deviceSize = "large-screen"; + document.body.classList.toggle("floating-sidebars", false); + document.body.classList.toggle("is-large-screen", true); + document.body.classList.toggle("is-small-screen", false); + document.body.classList.toggle("is-tablet", false); + document.body.classList.toggle("is-phone", false); + sidebars.forEach(function (sidebar) { sidebar.collapse(false) }); + sidebarGutters.forEach(function (gutter) { gutter.collapse(false) }); + } + else if (widthNowInRange((contentTargetWidth + sidebarDefaultWidth) * 1, contentTargetWidth + sidebarDefaultWidth * 2) || widthNowInRange(769, 1024)) + { + deviceSize = "small screen"; + document.body.classList.toggle("floating-sidebars", false); + document.body.classList.toggle("is-large-screen", false); + document.body.classList.toggle("is-small-screen", true); + document.body.classList.toggle("is-tablet", false); + document.body.classList.toggle("is-phone", false); + sidebarGutters.forEach(function (gutter) { gutter.collapse(false) }); + + if (leftSidebar && rightSidebar && !leftSidebar.collapsed) + { + rightSidebar.collapse(true); + } + } + else if (widthNowInRange(sidebarDefaultWidth * 2, (contentTargetWidth + sidebarDefaultWidth) * 1) || widthNowInRange(481, 768)) + { + deviceSize = "tablet"; + document.body.classList.toggle("floating-sidebars", true); + document.body.classList.toggle("is-large-screen", false); + document.body.classList.toggle("is-small-screen", false); + document.body.classList.toggle("is-tablet", true); + document.body.classList.toggle("is-phone", false); + sidebarGutters.forEach(function (gutter) { gutter.collapse(false) }); + + if (leftSidebar && rightSidebar && !leftSidebar.collapsed) + { + rightSidebar.collapse(true); + } + + if(leftSidebar && !fullyInitialized) leftSidebar.collapse(true); + } + else if (widthNowLessThan(sidebarDefaultWidth * 2) || widthNowLessThan(480)) + { + deviceSize = "phone"; + document.body.classList.toggle("floating-sidebars", true); + document.body.classList.toggle("is-large-screen", false); + document.body.classList.toggle("is-small-screen", false); + document.body.classList.toggle("is-tablet", false); + document.body.classList.toggle("is-phone", true); + sidebars.forEach(function (sidebar) { sidebar.collapse(true) }); + sidebarGutters.forEach(function (gutter) { gutter.collapse(false) }); + } + + lastScreenWidth = window.innerWidth; + + if (checkStillResizingTimeout != undefined) clearTimeout(checkStillResizingTimeout); + + // wait a little bit of time and if the width is still the same then we are done resizing + let screenWidthSnapshot = window.innerWidth; + checkStillResizingTimeout = setTimeout(function () + { + if (window.innerWidth == screenWidthSnapshot) + { + checkStillResizingTimeout = undefined; + isResizing = false; + onEndResize(); + } + }, 200); + +} + +// #endregion + +//#region ----------------- Helper Functions ----------------- + +function clamp(value, min, max) +{ + return Math.min(Math.max(value, min), max); +} + +async function delay(ms) +{ + return new Promise(resolve => setTimeout(resolve, ms)); +} + +async function waitUntil(condition, interval = 100, timeout = 2000) +{ + return new Promise(resolve => + { + let intervalId = 0; + + let timeoutId = setTimeout(() => + { + clearInterval(intervalId); + resolve(); + }, timeout); + + intervalId = setInterval(() => + { + if (condition()) + { + clearInterval(intervalId); + clearTimeout(timeoutId); + resolve(); + } + }, interval); + }); +} + +/**Gets the bounding rect of a given element*/ +function getElBounds(El) +{ + let elRect = El.getBoundingClientRect(); + + let x = elRect.x; + let y = elRect.y; + let width = elRect.width; + let height = elRect.height; + let centerX = elRect.x + elRect.width / 2; + let centerY = elRect.y + elRect.height / 2; + + return { x: x, y: y, width: width, height: height, minX: x, minY: y, maxX: x + width, maxY: y + height, centerX: centerX, centerY: centerY }; +} + +async function getComputedPixelValue(variableName) +{ + const tempElement = document.createElement('div'); + document.body.appendChild(tempElement); + tempElement.style.position = 'absolute'; + tempElement.style.width = \`var(\${variableName})\`; + + await new Promise(resolve => setTimeout(resolve, 10)); + + const computedWidth = window.getComputedStyle(tempElement).width; + tempElement.remove(); + + return parseFloat(computedWidth); +} + +function getPointerPosition(event) +{ + let touches = event.touches ? Array.from(event.touches) : []; + let x = touches.length > 0 ? (touches.reduce((acc, cur) => acc + cur.clientX, 0) / event.touches.length) : event.clientX; + let y = touches.length > 0 ? (touches.reduce((acc, cur) => acc + cur.clientY, 0) / event.touches.length) : event.clientY; + return {x: x, y: y}; +} + +function getTouchPosition(touch) +{ + return {x: touch.clientX, y: touch.clientY}; +} + +function getAllChildrenRecursive(element) +{ + let children = []; + + for (let i = 0; i < element.children.length; i++) { + const child = element.children[i]; + children.push(child); + children = children.concat(getAllChildrenRecursive(child)); + } + + return children; +} + +function isMobile() +{ + let check = false; + (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); + return check; +} + +function isTouchCapable() +{ + return (('ontouchstart' in window) || + (navigator.maxTouchPoints > 0) || + (navigator.msMaxTouchPoints > 0)); +} + +function downloadBlob(blob, name = 'file.txt') { + if ( + window.navigator && + window.navigator.msSaveOrOpenBlob + ) return window.navigator.msSaveOrOpenBlob(blob); + + // For other browsers: + // Create a link pointing to the ObjectURL containing the blob. + const data = window.URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = data; + link.download = name; + + // this is necessary as link.click() does not work on the latest firefox + link.dispatchEvent( + new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: window + }) + ); + + setTimeout(() => { + // For Firefox it is necessary to delay revoking the ObjectURL + window.URL.revokeObjectURL(data); + link.remove(); + }, 100); +} + +function extentionToTag(extention) +{ + if (["png", "jpg", "jpeg", "svg", "gif", "bmp", "ico"].includes(extention)) return "img"; + if (["mp4", "mov", "avi", "webm", "mpeg"].includes(extention)) return "video"; + if (["mp3", "wav", "ogg", "aac"].includes(extention)) return "audio"; + if (["pdf"].includes(extention)) return "embed"; + return; +} + +let slideUp = (target, duration=500) => { + + target.style.transitionProperty = 'height, margin, padding'; + target.style.transitionDuration = duration + 'ms'; + target.style.boxSizing = 'border-box'; + target.style.height = target.offsetHeight + 'px'; + target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + window.setTimeout(async () => { + target.style.display = 'none'; + target.style.removeProperty('height'); + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }, duration); +} + +let slideUpAll = (targets, duration=500) => { + + targets.forEach(async target => { + if (!target) return; + target.style.transitionProperty = 'height, margin, padding'; + target.style.transitionDuration = duration + 'ms'; + target.style.boxSizing = 'border-box'; + target.style.height = target.offsetHeight + 'px'; + target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + }); + + window.setTimeout(async () => { + targets.forEach(async target => { + if (!target) return; + target.style.display = 'none'; + target.style.removeProperty('height'); + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }); + }, duration); +} + +let slideDown = (target, duration=500) => { + target.style.removeProperty('display'); + let display = window.getComputedStyle(target).display; + if (display === 'none') display = 'block'; + target.style.display = display; + let height = target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + target.offsetHeight; + target.style.boxSizing = 'border-box'; + target.style.transitionProperty = "height, margin, padding"; + target.style.transitionDuration = duration + 'ms'; + target.style.height = height + 'px'; + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + window.setTimeout(async () => { + target.style.removeProperty('height'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }, duration); +} + +let slideDownAll = (targets, duration=500) => { + + targets.forEach(async target => { + if (!target) return; + target.style.removeProperty('display'); + let display = window.getComputedStyle(target).display; + if (display === 'none') display = 'block'; + target.style.display = display; + let height = target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + target.offsetHeight; + target.style.boxSizing = 'border-box'; + target.style.transitionProperty = "height, margin, padding"; + target.style.transitionDuration = duration + 'ms'; + target.style.height = height + 'px'; + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + }); + + window.setTimeout( async () => { + targets.forEach(async target => { + if (!target) return; + target.style.removeProperty('height'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }); + }, duration); +} + +var slideToggle = (target, duration = 500) => { + if (window.getComputedStyle(target).display === 'none') { + return slideDown(target, duration); + } else { + return slideUp(target, duration); + } +} + +var slideToggleAll = (targets, duration = 500) => { + if (window.getComputedStyle(targets[0]).display === 'none') { + return slideDownAll(targets, duration); + } else { + return slideUpAll(targets, duration); + } +} + +function getURLExtention(url) +{ + return url.split(".").pop().split("?")[0].split("#")[0].toLowerCase().trim(); +} + +//#endregion + +//#region ----------------- Loading & Paths ----------------- + +let transferDocument = document.implementation.createHTMLDocument(); +let loading = false; +async function loadDocument(url, changeURL, showInTree) +{ + url = decodeURI(url); + if (loading) + { + console.log("Already loading document."); + return; + } + + loading = true; + let newLoadedURL = new URL(url, absoluteBasePath); + relativePathname = getVaultRelativePath(newLoadedURL.href); + console.log("Loading document: ", newLoadedURL.pathname); + + if (newLoadedURL.pathname == loadedURL?.pathname ?? "") + { + console.log("Document already loaded."); + loadedURL = newLoadedURL; + setActiveDocument(loadedURL, false, false); + await initializePage(); + loading = false; + return; + } + + loadedURL = newLoadedURL; + let pathname = loadedURL.pathname; + + await showLoading(true); + + let response; + try { response = await fetch(pathname); } + catch (error) + { + window.location.assign(pathname); + loading = false; + return; + } + + if (response.ok) + { + setActiveDocument(loadedURL, showInTree, changeURL); + let extention = getURLExtention(url); + if (extention == "/") extention = "html"; // if no extention assume it is html + + documentType = "none"; + embedType = "none"; + customType = "none"; + + if(extention == "html") + { + let html = (await response.text()).replaceAll("", "").replaceAll("", "").replaceAll("", ""); + transferDocument.write(html); + + setupRootPath(transferDocument); + initializeDocumentTypes(transferDocument); + + // copy document content into DOM + let newDocumentEl = transferDocument.querySelector(".document-container"); + documentContainer.innerHTML = newDocumentEl.innerHTML; + + // copy the outline tree into the DOM + let newOutline = transferDocument.querySelector(".outline-tree"); + if (outlineTree && newOutline) outlineTree.innerHTML = newOutline.innerHTML; + + document.title = transferDocument.title; + transferDocument.close(); + } + else + { + documentType = "embed"; + + embedType = extentionToTag(extention); + + if(embedType != undefined) + { + let media = document.createElement(embedType); + media.controls = true; + media.src = url; + + media.style.maxWidth = "100%"; + if(embedType == "embed") + { + media.style.width = "100%"; + media.style.height = "100%"; + } + + media.style.objectFit = "contain"; + + viewContent.innerHTML = ""; + viewContent.setAttribute("class", "view-content embed"); + viewContent.appendChild(media); + + if (document.querySelector(".outline-tree")) + document.querySelector(".outline-tree").innerHTML = ""; + + document.title = url.split("/").pop(); + } + else // just download the file + { + let blob = await response.blob(); + downloadBlob(blob, url.split("/").pop()); + } + } + + await initializePage(); + initializePageEvents(documentContainer); + initializePageEvents(outlineTree); + } + else + { + pageNotFound(viewContent); + } + + await showLoading(false); + loading = false; + + return; +} + +function setActiveDocument(url, showInTree, changeURL, animate = true) +{ + let relativePath = getVaultRelativePath(url.href); + let decodedRelativePath = decodeURI(relativePath); + let searchlessHeaderlessPath = decodedRelativePath.split("#")[0].split("?")[0].replace("\\"", "\\\\\\"").replace("\\'", "\\\\\\'"); + + if (searchlessHeaderlessPath == "/" || searchlessHeaderlessPath == "") searchlessHeaderlessPath = "index.html"; + + // switch active file in file tree + let oldActiveTreeItem = document.querySelector(".file-tree .tree-item.mod-active"); + let newActiveTreeItem = document.querySelector(\`.file-tree .tree-item:has(>.tree-link[href^="\${searchlessHeaderlessPath}"])\`); + if(newActiveTreeItem && !newActiveTreeItem.isEqualNode(oldActiveTreeItem)) + { + oldActiveTreeItem?.classList.remove("mod-active"); + newActiveTreeItem.classList.add("mod-active"); + if(showInTree) scrollIntoView(newActiveTreeItem, {block: "center", inline: "nearest"}, animate); + } + + // set the active file in the graph view + if(typeof graphData != 'undefined' && window.graphRenderer) + { + let activeNode = graphData?.paths.findIndex(function(item) { return item.endsWith(searchlessHeaderlessPath); }) ?? -1; + + if(activeNode >= 0) + { + window.graphRenderer.activeNode = activeNode; + } + } + + console.log("Active document: " + changeURL); + + if(changeURL && window.location.protocol != "file:") + { + window.history.pushState({ path: relativePath }, '', relativePath); + console.log("Pushed state: " + relativePath); + } +} + +function parseURLParams() +{ + const highlightParam = loadedURL.searchParams.get('mark'); + const searchParam = loadedURL.searchParams.get('query'); + const hashParam = decodeURI(loadedURL.hash); + + if (highlightParam) + { + searchCurrentDocument(highlightParam); + } + + if (searchParam) + { + search(searchParam); + } + + if (hashParam) + { + const headingTarget = document.getElementById(hashParam.substring(1)); + if (headingTarget) + { + scrollIntoView(headingTarget, { behavior: "smooth", block: "start"}); + } + else + { + console.log("Heading not found: " + hashParam); + } + } +} + +async function showLoading(loading) +{ + documentContainer.style.transitionDuration = ""; + loadingIcon.classList.toggle("show", loading); + documentContainer.classList.toggle("hide", loading); + if(loading) + { + // position loading icon in the center of the screen + let viewBounds = getViewBounds(); + loadingIcon.style.left = (viewBounds.centerX - loadingIcon.offsetWidth / 2) + "px"; + loadingIcon.style.top = (viewBounds.centerY - loadingIcon.offsetHeight / 2) + "px"; + + // hide the left sidebar if on phone + if (deviceSize == "phone") leftSidebar.collapse(true); + } + + await delay(200); +} + +function pageNotFound(viewContent) +{ + viewContent.innerHTML = + \` +
    +
    +

    Page Not Found

    +
    +
    + \`; + + if (document.querySelector(".outline-tree")) + document.querySelector(".outline-tree").innerHTML = ""; + + console.log("Page not found: " + absoluteBasePath + loadedURL.pathname); + let newRootPath = getURLRootPath(absoluteBasePath + loadedURL.pathname); + relativeBasePath = newRootPath; + document.querySelector("base").href = newRootPath; + + document.title = "Page Not Found"; +} + +function setupRootPath(fromDocument) +{ + let rootEl = fromDocument.getElementById("root-path"); + if (!rootEl) return; + let basePath = rootEl.getAttribute("root-path"); + let newBase = document.createElement("base"); + newBase.href = basePath; + console.log("Setting root path: " + basePath); + document.querySelector("base").replaceWith(newBase); + document.querySelector("#root-path").setAttribute("root-path", basePath); + relativeBasePath = basePath; + absoluteBasePath = new URL(basePath, window.location.href).href; +} + +function getURLPath(url = window.location.pathname) +{ + if (absoluteBasePath == undefined) setupRootPath(document); + let pathname = url.replace(absoluteBasePath, ""); + return pathname; +} + +function getURLRootPath(url = window.location.pathname) +{ + let path = getURLPath(url); + let splitPath = path.split("/"); + let rootPath = ""; + for (let i = 0; i < splitPath.length - 1; i++) + { + rootPath += "../"; + } + return rootPath; +} + +function getVaultRelativePath(absolutePath) +{ + return absolutePath.replace(absoluteBasePath, "") +} + +//#endregion + +//#region ----------------- Headers ----------------- + +function setupHeaders(setupOnNode) +{ + setupOnNode.querySelectorAll(".heading-collapse-indicator").forEach(function (element) + { + element.addEventListener("click", function () + { + toggleTreeHeaderOpen(element.parentElement.parentElement, true); + }); + }); + + setupOnNode.querySelectorAll(".heading-wrapper").forEach(function (element) + { + element.collapsed = false; + element.childrenContainer = element.querySelector(".heading-children"); + element.parentHeader = element.parentElement.parentElement; + element.headerElement = element.querySelector(".heading"); + + element.markdownPreviewSizer = getHeaderSizerEl(element); + element.collapse = function (collapse, openParents = true, instant = false) { collapseHeader(element, collapse, openParents, instant) }; + element.toggleCollapse = function (openParents = true) { toggleTreeHeaderOpen(element, openParents) }; + element.hide = function () { hideHeader(element) }; + element.show = function (parents = false, children = false, forceStay = false) { showHeader(element, parents, children, forceStay) }; + }); + + setupOnNode.querySelectorAll(".heading").forEach(function (element) + { + element.headingWrapper = element.parentElement; + }); +} + +function isHeadingWrapper(headingWrapper) +{ + if (!headingWrapper) return false; + return headingWrapper.classList.contains("heading-wrapper"); +} + +function getHeaderSizerEl(headingWrapper) +{ + // go up the tree until we find a markdown-preview-sizer + let parent = headingWrapper; + while (parent && !parent.classList.contains("markdown-preview-sizer")) parent = parent.parentElement; + + if (parent) return parent; + else return; +} + +async function collapseHeader(headingWrapper, collapse, openParents = true, instant = false) +{ + let collapseContainer = headingWrapper.childrenContainer; + + if (openParents && !collapse) + { + let parent = headingWrapper.parentHeader; + if (isHeadingWrapper(parent)) parent.collapse(false, true, instant); + } + + let needsChange = headingWrapper.classList.contains("is-collapsed") != collapse; + if (!needsChange) + { + // if opening show the header + if (!collapse && documentType == "canvas") headingWrapper.show(true); + return; + } + + + if (headingWrapper.timeout) + { + clearTimeout(headingWrapper.timeout); + collapseContainer.style.transitionDuration = ""; + collapseContainer.style.height = ""; + headingWrapper.classList.toggle("is-animating", false); + } + + + if (collapse) + { + headingWrapper.collapseHeight = collapseContainer.offsetHeight + parseFloat(collapseContainer.lastChild?.marginBottom || 0); + + // show all sibling headers after this one + // this is so that when the header slides down you aren't left with a blank space + let next = headingWrapper.nextElementSibling; + while (next && documentType == "canvas") + { + let localNext = next; + + // force show the sibling header for 500ms while this one is collapsing + if (isHeadingWrapper(localNext)) localNext.show(false, true, true); + setTimeout(function() + { + localNext.forceShown = false; + }, 500); + + next = next.nextElementSibling; + } + } + + let height = headingWrapper.collapseHeight; + collapseContainer.style.height = height + "px"; + + // if opening show the header + if (!collapse && documentType == "canvas") headingWrapper.show(true); + + headingWrapper.collapsed = collapse; + + function adjustSizerHeight(customHeight = undefined) + { + if (customHeight != undefined) headingWrapper.markdownPreviewSizer.style.minHeight = customHeight + "px"; + else + { + let newTotalHeight = Array.from(headingWrapper.markdownPreviewSizer.children).reduce((acc, cur) => acc + cur.offsetHeight, 0); + headingWrapper.markdownPreviewSizer.style.minHeight = newTotalHeight + "px"; + } + } + + if (instant) + { + collapseContainer.style.transitionDuration = "0s"; + headingWrapper.classList.toggle("is-collapsed", collapse); + collapseContainer.style.height = ""; + collapseContainer.style.transitionDuration = ""; + adjustSizerHeight() + return; + } + + // get the length of the height transition on heading container and wait for that time before not displaying the contents + let transitionDuration = getComputedStyle(collapseContainer).transitionDuration; + if (transitionDuration.endsWith("s")) transitionDuration = parseFloat(transitionDuration); + else if (transitionDuration.endsWith("ms")) transitionDuration = parseFloat(transitionDuration) / 1000; + else transitionDuration = 0; + + // multiply the duration by the height so that the transition is the same speed regardless of the height of the header + let transitionDurationMod = Math.min(transitionDuration * Math.sqrt(height) / 16, 0.5); // longest transition is 0.5s + collapseContainer.style.transitionDuration = \`\${transitionDurationMod}s\`; + + + if (collapse) collapseContainer.style.height = "0px"; + else collapseContainer.style.height = height + "px"; + headingWrapper.classList.toggle("is-animating", true); + headingWrapper.classList.toggle("is-collapsed", collapse); + + if (headingWrapper.markdownPreviewSizer.closest(".markdown-embed")) // dont change the size of transcluded docments + { + adjustSizerHeight(collapse ? 0 : undefined); + } + + setTimeout(function() + { + collapseContainer.style.transitionDuration = ""; + if(!collapse) collapseContainer.style.height = ""; + headingWrapper.classList.toggle("is-animating", false); + + adjustSizerHeight() + + }, transitionDurationMod * 1000); +} + +function toggleTreeHeaderOpen(headingWrapper, openParents = true) +{ + headingWrapper.collapse(!headingWrapper.collapsed, openParents); +} + +/**Hides everything in a header and then makes the header div take up the same space as the header element */ +function hideHeader(headingWrapper) +{ + if(headingWrapper.forceShown) return; + if(headingWrapper.classList.contains("is-hidden") || headingWrapper.classList.contains("is-collapsed")) return; + if(getComputedStyle(headingWrapper).display == "none") return; + + let height = headingWrapper.offsetHeight; + headingWrapper.classList.toggle("is-hidden", true); + if (height != 0) headingWrapper.style.height = height + "px"; + headingWrapper.style.visibility = "hidden"; +} + +/**Restores a hidden header back to it's normal function */ +function showHeader(headingWrapper, showParents = true, showChildren = false, forceStayShown = false) +{ + if (forceStayShown) headingWrapper.forceShown = true; + + if (showParents) + { + let parent = headingWrapper.parentHeader; + if (isHeadingWrapper(parent)) parent.show(true, false, forceStayShown); + } + + if (showChildren) + { + let children = headingWrapper.querySelectorAll(".heading-wrapper"); + children.forEach(function(child) { child.show(false, true, forceStayShown); }); + } + + if(!headingWrapper.classList.contains("is-hidden") || headingWrapper.classList.contains("is-collapsed")) return; + + + headingWrapper.classList.toggle("is-hidden", false); + headingWrapper.style.height = ""; + headingWrapper.style.visibility = ""; +} + +//#endregion + +//#region ----------------- Trees ----------------- + +function setupTrees(setupOnNode) +{ + + setupOnNode.querySelectorAll(".collapse-tree-button").forEach(function(button) + { + button.treeRoot = button.closest(".tree-container"); + button.icon = button.firstChild; + button.icon.innerHTML = ""; + + button.setIcon = function(collapse) + { + button.icon.children[0].setAttribute("d", collapse ? collapseIconUp[0] : collapseIconDown[0]); + button.icon.children[1].setAttribute("d", collapse ? collapseIconUp[1] : collapseIconDown[1]); + } + button.collapse = function(collapse) + { + let treeItems = button.treeRoot.classList.contains("file-tree") ? fileTreeItems : outlineTreeItems; + setTreeCollapsedAll(treeItems, collapse); + button.setIcon(collapse); + button.collapsed = collapse; + }; + button.toggleCollapse = function() { button.collapse(!button.collapsed); }; + button.toggleState = function(state) + { + if (state === undefined) state = !button.collapsed; + button.collapsed = state; + button.setIcon(state); + }; + + button.addEventListener("click", function(event) + { + event.preventDefault(); + event.stopPropagation(); + button.toggleCollapse(); + return false; + }); + + // if any outline items are unncollapsed, toggle collapse all button state + let treeItems = button.treeRoot.classList.contains("file-tree") ? fileTreeItems : outlineTreeItems; + if (treeItems.some(item => !item.classList.contains("is-collapsed") && item.classList.contains("mod-collapsible"))) + { + button.toggleState(false); + } + }); + + let fileTreeClick = Array.from(setupOnNode.querySelectorAll(".tree-container.file-tree .tree-item:has(.collapse-icon) > .tree-link")); + let outlineTreeClick = Array.from(setupOnNode.querySelectorAll(".tree-container.outline-tree .tree-item:has(.collapse-icon) > .tree-link .collapse-icon")); + let collapsable = Array.from(fileTreeClick).concat(Array.from(outlineTreeClick)); + + for (let item of collapsable) + { + let closestItem = item?.closest(".tree-item"); + if (closestItem && item) item?.addEventListener("click", function(event) + { + event.preventDefault(); + event.stopPropagation(); + toggleTreeCollapsed(closestItem); + }); + } + +} + +async function setTreeCollapsed(element, collapsed, animate = true, openParents = true) +{ + if (!element.classList.contains("mod-collapsible")) + element = element.closest(".mod-collapsible"); + + if (!element || !element.classList.contains("mod-collapsible")) + { + return; + } + + if (element.classList.contains("is-collapsed") == collapsed) + { + return; + } + + if (openParents) + { + let parent = element.parentElement.closest(".mod-collapsible"); + if (parent) await setTreeCollapsed(parent, false, animate, openParents); + } + + let children = element.querySelector(".tree-item-children"); + + if (collapsed) + { + element.classList.add("is-collapsed"); + if(animate) slideUp(children, 100); + else children.style.display = "none"; + } + else + { + element.classList.remove("is-collapsed"); + if(animate) slideDown(children, 100); + else children.style.display = ""; + + // make close all button collapse the tree instead of opening it if it's already open + let treeContainer = element.closest(".tree-container"); + if (treeContainer) + { + let collapseButton = treeContainer.querySelector(".collapse-tree-button"); + if (collapseButton) collapseButton.toggleState(false); + } + } + +} + +async function setTreeCollapsedAll(elements, collapsed, animate = true) +{ + let childrenList = []; + elements.forEach(async element => + { + if (!element || !element.classList.contains("mod-collapsible")) return; + + let children = element.querySelector(".tree-item-children"); + + if (collapsed) + { + element.classList.add("is-collapsed"); + } + else + { + element.classList.remove("is-collapsed"); + } + + childrenList.push(children); + }); + + if (collapsed) + { + if(animate) slideUpAll(childrenList, 100); + else childrenList.forEach(async (children) => + { + if(children) children.style.display = "none"; + }); + } + else + { + if(animate) slideDownAll(childrenList, 100); + else childrenList.forEach(async (children) => + { + if(children) children.style.display = ""; + }); + } +} + +function toggleTreeCollapsed(element) +{ + element = element.closest(".tree-item"); + if (!element) return; + setTreeCollapsed(element, !element.classList.contains("is-collapsed")); +} + +function toggleTreeCollapsedAll(elements) +{ + if (!elements) return; + setTreeCollapsedAll(elements, !elements[0].classList.contains("is-collapsed")); +} + +function getFileTreeItemFromPath(path) +{ + return document.querySelector(\`.file-tree .tree-item:has(> .tree-link[href^="\${path}"])\`); +} + +// hide all files and folder except the ones in the list (show parents of shown files) +async function filterFileTree(showPathList, hintLabelLists, query, openFileTree = true) +{ + if (openFileTree) await setTreeCollapsedAll(fileTreeItems, false, false); + // hide all files and folders + let allItems = Array.from(document.querySelectorAll(".file-tree .tree-item:not(.filtered-out)")); + for await (let item of allItems) + { + item.classList.add("filtered-out"); + } + + await removeTreeHintLabels(); + + for (let i = 0; i < showPathList.length; i++) + { + let path = showPathList[i]; + let hintLabels = hintLabelLists[i]; + + let treeItem = getFileTreeItemFromPath(path); + if (treeItem) + { + // show the file and it's parent tree items + treeItem.classList.remove("filtered-out"); + let itemLink = treeItem.querySelector(".tree-link"); + if(itemLink) itemLink.href = path + "?mark=" + query; + let parent = treeItem.parentElement.closest(".tree-item"); + + while (parent) + { + parent.classList.remove("filtered-out"); + parent = parent.parentElement.closest(".tree-item"); + } + + if (hintLabels.length > 0) + { + let treeLink = treeItem.querySelector(".tree-link"); + let hintContainer = treeLink.appendChild(document.createElement("div")); + hintContainer.classList.add("tree-hint-container"); + + function createHintLabel(text, link) + { + text = text.trim(); + if (text == "") return; + + let hintLabelEl = document.createElement("a"); + hintLabelEl.classList.add("tree-hint-label"); + hintLabelEl.classList.add("internal-link"); + hintLabelEl.textContent = text; + hintLabelEl.href = decodeURI(link).replaceAll(" ", "_"); + hintContainer.appendChild(hintLabelEl); + } + + // create the hint labels + for (let label of hintLabels) + { + createHintLabel(label, path + "#" + label); + } + + setupLinks(hintContainer); + } + } + } +} + +async function clearFileTreeFilter(closeFileTree = true) +{ + await removeTreeHintLabels(); + + let filteredItems = document.querySelectorAll(".file-tree .filtered-out"); + for await (let item of filteredItems) + { + item.classList.remove("filtered-out"); + } + + let markItems = document.querySelectorAll(".file-tree .tree-link[href*='?mark=']"); + for await (let item of markItems) + { + let href = item.href.split("?")[0]; + href = getVaultRelativePath(href); + item.href = href; + } + + if (closeFileTree) await setTreeCollapsedAll(fileTreeItems, true, false); +} + +async function removeTreeHintLabels() +{ + let hintLabels = document.querySelectorAll(".tree-hint-container"); + for await (let item of hintLabels) + { + item.remove(); + } +} + +function sortFileTreeDocuments(sortByFunction) +{ + let treeItems = Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)")); + treeItems.sort(sortByFunction); + + // sort the files within their parent folders + for (let i = 1; i < treeItems.length; i++) + { + let item = treeItems[i]; + let lastItem = treeItems[i - 1]; + if (item.parentElement == lastItem.parentElement) + { + lastItem.after(item); + } + } + + // sort the folders using their contents + let folders = Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-folder:not(.filtered-out)")); + folders.sort(function (a, b) + { + let aFirst = a.querySelector(".tree-item.mod-tree-file:not(.filtered-out)"); + let bFirst = b.querySelector(".tree-item.mod-tree-file:not(.filtered-out)"); + return treeItems.indexOf(aFirst) - treeItems.indexOf(bFirst); + }); + + // sort the folders within their parent folders + for (let i = 1; i < folders.length; i++) + { + let item = folders[i]; + + let foundPlace = false; + // iterate backwards until we find an item with the same parent + for (let j = i - 1; j >= 0; j--) + { + let lastItem = folders[j]; + if (item.parentElement == lastItem.parentElement) + { + lastItem.after(item); + foundPlace = true; + break; + } + } + + // if we didn't find an item with the same parent, move it to the top + if (!foundPlace) + { + item.parentElement.prepend(item); + } + } +} + +function sortFileTree(sortByFunction) +{ + let treeItems = Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)")); + treeItems.sort(sortByFunction); + + // sort the files within their parent folders + for (let i = 1; i < treeItems.length; i++) + { + let item = treeItems[i]; + let lastItem = treeItems[i - 1]; + if (item.parentElement == lastItem.parentElement) + { + lastItem.after(item); + } + } + + // sort the folders using their contents + let folders = Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-folder:not(.filtered-out)")); + folders.sort(sortByFunction); + + // sort the folders within their parent folders + for (let i = 1; i < folders.length; i++) + { + let item = folders[i]; + + let foundPlace = false; + // iterate backwards until we find an item with the same parent + for (let j = i - 1; j >= 0; j--) + { + let lastItem = folders[j]; + if (item.parentElement == lastItem.parentElement) + { + lastItem.after(item); + foundPlace = true; + break; + } + } + + // if we didn't find an item with the same parent, move it to the top + if (!foundPlace) + { + item.parentElement.prepend(item); + } + } +} + +function sortFileTreeAlphabetically(reverse = false) +{ + sortFileTree(function (a, b) + { + const aTitle = a.querySelector(".tree-item-title"); + const bTitle = b.querySelector(".tree-item-title"); + if (!aTitle || !bTitle) return 0; + const aName = aTitle.textContent.toLowerCase(); + const bName = bTitle.textContent.toLowerCase(); + return aName.localeCompare(bName, undefined, { numeric: true }) * (reverse ? -1 : 1); + }); +} + +//#endregion + +//#region ----------------- Lists ----------------- + +function setupLists(setupOnNode) +{ + let listCollpaseIcons = Array.from(setupOnNode.querySelectorAll(".list-collapse-indicator")); + for (let i = 0; i < listCollpaseIcons.length; i++) + { + let icon = listCollpaseIcons[i]; + icon.addEventListener("click", function (event) + { + let listItem = icon.closest("li"); + if (listItem) + { + listItem.classList.toggle("is-collapsed"); + icon.classList.toggle("is-collapsed"); + } + }); + } +} + +//#endregion + +//#region ----------------- Canvas ----------------- + + +function setupCanvas(setupOnNode) +{ + if(documentType != "canvas" || !setupOnNode.querySelector(".canvas-wrapper")) return; + + // initialize canvas tranformations + setupOnNode.querySelector(".canvas")?.setAttribute("style", "translate: 0px 1px; scale: 1;"); + + let nodeBounds = getNodesBounds(); + setViewCenter(nodeBounds.centerX, nodeBounds.centerY); + + // let nodes be focused when hovered over + setupOnNode.querySelectorAll(".canvas-node-container").forEach(function (element) + { + var parent = element.parentElement; + + function onEnter(event) + { + parent.classList.toggle("is-focused"); + + if (focusedCanvasNode != null && focusedCanvasNode != parent) + { + focusedCanvasNode.classList.remove("is-focused"); + focusedCanvasNode.querySelector(".canvas-node-container").style.display = ""; + } + + focusedCanvasNode = parent; + + parent.addEventListener("mouseleave", onLeave); + parent.addEventListener("touchend", onLeave); + } + + function onLeave(event) + { + if (focusedCanvasNode) + { + focusedCanvasNode.classList.remove("is-focused"); + focusedCanvasNode = null; + } + + parent.removeEventListener("mouseleave", onLeave); + parent.removeEventListener("touchend", onLeave); + } + + element.addEventListener("mouseenter", onEnter); + element.addEventListener("touchstart", onEnter); + }); + + // make nodes fit to view when double clicked + setupOnNode.querySelectorAll(".canvas-node").forEach(function (element) + { + element.addEventListener("dblclick", function (event) + { + fitViewToNode(element); + }); + }); + + // make whole canvas fit to view when double clicked on background + setupOnNode.querySelectorAll(".canvas-background").forEach(function (element) + { + element.addEventListener("dblclick", function (event) + { + fitViewToCanvas(); + }); + }); + + // make canvas draggable / panable + canvasWrapper.addEventListener("mousedown", canvasWrapperMouseDownHandler); + canvasWrapper.addEventListener("touchstart", canvasWrapperMouseDownHandler); + let scrollInterferance = false; + function canvasWrapperMouseDownHandler(mouseDownEv) + { + let touchesDown = mouseDownEv.touches ?? []; + + scrollInterferance = false; + + // if there is already one tough down we don't want to start another mouse down event + // extra fingers are already being handled in the move event below + if (touchesDown.length > 1) return; + + if (mouseDownEv.button == 1 || mouseDownEv.button == 0 || touchesDown.length > 0) + { + let lastPointerPos = getPointerPosition(mouseDownEv); + let startZoom = false; + let lastDistance = 0; + let lastTouchCount = touchesDown.length; + + let mouseMoveHandler = function (mouseMoveEv) + { + let touchesMove = mouseMoveEv.touches ?? []; + + let pointer = getPointerPosition(mouseMoveEv); + + if (lastTouchCount != touchesMove.length) + { + lastPointerPos = pointer; + lastTouchCount = touchesMove.length; + } + + let deltaX = pointer.x - lastPointerPos.x; + let deltaY = pointer.y - lastPointerPos.y; + + if ((mouseDownEv.button == 1 || touchesMove.length == 1) && focusedCanvasNode) + { + let mouseHoriz = Math.abs(deltaX) > Math.abs(deltaY * 1.5); + let mouseVert = Math.abs(deltaY) > Math.abs(deltaX * 1.5); + + // only skip if the focused node can be scrolled in the direction of mouse movement + let sizer = focusedCanvasNode.querySelector(".markdown-preview-sizer"); + if(sizer) + { + let scrollableVert = sizer.scrollHeight > sizer.parentElement.clientHeight + 1; + let scrollableHoriz = sizer.scrollWidth > sizer.parentElement.clientWidth + 1; + + if (((mouseHoriz && scrollableHoriz) || (mouseVert && scrollableVert)) && (window?.navigator?.platform?.startsWith("Win") ?? true)) + { + scrollInterferance = true; + } + else + { + scrollInterferance = false; + } + } + } + + if (mouseDownEv.button == 0 && focusedCanvasNode) + { + if (focusedCanvasNode.querySelector(".canvas-node-content").textContent.trim() != "") + { + scrollInterferance = true; + } + } + + + if (!scrollInterferance) + { + translateCanvas(deltaX, deltaY); + lastPointerPos = pointer; + } + + if (touchesMove.length == 2) + { + let touchCenter = getPointerPosition(mouseMoveEv, false); + let touch1 = getTouchPosition(mouseMoveEv.touches[0]); + let touch2 = getTouchPosition(mouseMoveEv.touches[1]); + let distance = Math.sqrt(Math.pow(touch1.x - touch2.x, 2) + Math.pow(touch1.y - touch2.y, 2)); + + if (!startZoom) + { + startZoom = true; + lastDistance = distance; + } + + let distanceDelta = distance - lastDistance; + let scaleDelta = distanceDelta / lastDistance; + + scaleCanvasAroundPoint(1 + scaleDelta, touchCenter.x, touchCenter.y); + + lastDistance = distance; + } + }; + + let mouseUpHandler = function (mouseUpEv) + { + document.body.removeEventListener("mousemove", mouseMoveHandler); + document.body.removeEventListener("mouseup", mouseUpHandler); + document.body.removeEventListener("mouseenter", mouseEnterHandler); + document.body.removeEventListener("touchmove", mouseMoveHandler); + document.body.removeEventListener("touchend", mouseUpHandler); + document.body.removeEventListener("touchcancel", mouseUpHandler); + scrollInterferance = false; + }; + + let mouseEnterHandler = function (mouseEnterEv) + { + if (mouseEnterEv.buttons == 1 || mouseEnterEv.buttons == 4) return; + + mouseUpHandler(mouseEnterEv); + } + + document.body.addEventListener("mousemove", mouseMoveHandler); + document.body.addEventListener("mouseup", mouseUpHandler); + document.body.addEventListener("mouseenter", mouseEnterHandler); + document.body.addEventListener("touchmove", mouseMoveHandler); + document.body.addEventListener("touchend", mouseUpHandler); + document.body.addEventListener("touchcancel", mouseUpHandler); + } + } + + // get mouse position on the canvas + let mouseX = 0; + let mouseY = 0; + canvasWrapper.addEventListener("mousemove", function (event) + { + let pointer = getPointerPosition(event); + mouseX = pointer.x; + mouseY = pointer.y; + }); + + let scale = 1; + let speed = 0; + let instant = false; + // make canvas zoomable + canvasWrapper.addEventListener("wheel", function (event) + { + if (focusedCanvasNode) + { + // only skip if the focused node can be scrolled + let sizer = focusedCanvasNode.querySelector(".markdown-preview-sizer"); + if(sizer && sizer.scrollHeight > sizer.parentElement.clientHeight) return; + } + + event.preventDefault(); + event.stopPropagation(); + + if(instant) + { + let scale = 1; + scale -= event.deltaY / 700 * scale; + scale = clamp(scale, 0.1, 10); + let viewBounds = getViewBounds(); + scaleCanvasAroundPoint(scale, viewBounds.centerX, viewBounds.centerY); + } + else + { + let isFirstFrame = speed == 0; + speed -= (event.deltaY / 200); + const maxSpeed = 0.14 * scale; + speed = clamp(speed, -maxSpeed, maxSpeed); + if (isFirstFrame) requestAnimationFrame(scrollAnimation); + } + }); + + let dt = 0; + let lastTime = 0; + let averageDt = 0; + function scrollAnimation(currentTime) + { + dt = currentTime - lastTime; + if (lastTime == 0) dt = 30; + lastTime = currentTime; + + averageDt = dt * 0.05 + averageDt * 0.95; + + if (averageDt > 50) + { + console.log("Scrolling too slow, turning on instant scroll"); + instant = true; + return; + } + + let oldScale = scale; + scale += speed * (dt / 1000) * 30; + scale = clamp(scale, 0.1, 10); + + let viewBounds = getViewBounds(); + scaleCanvasAroundPoint(scale / oldScale, mouseX, mouseY); + + speed *= 0.4; + if (Math.abs(speed) < 0.01) + { + speed = 0; + lastTime = 0; + } + else requestAnimationFrame(scrollAnimation); + } + + // fit all nodes to view on initialization after centering the camera + // after any animations have possibly played + setTimeout(fitViewToCanvas, 300); +} + +/**Gets the bounding rect of the voew-content or markdown-preview-sizer*/ +function getViewBounds() +{ + let viewContentRect = viewContent.getBoundingClientRect(); + + let minX = viewContentRect.x; + let minY = viewContentRect.y; + let maxX = viewContentRect.x + viewContentRect.width; + let maxY = viewContentRect.y + viewContentRect.height; + let centerX = viewContentRect.x + viewContentRect.width / 2; + let centerY = viewContentRect.y + viewContentRect.height / 2; + + return { x: minX, y: minY, width: maxX - minX, height: maxY - minY, minX: minX, minY: minY, maxX: maxX, maxY: maxY, centerX: centerX, centerY: centerY }; +} + +/**Gets the bounding rect of all nodes in the canvas*/ +function getNodesBounds() +{ + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + canvasNodes.forEach(function (node) + { + let nodeRect = node.getBoundingClientRect(); + + if (nodeRect.x < minX) minX = nodeRect.x; + if (nodeRect.y < minY) minY = nodeRect.y; + if (nodeRect.x + nodeRect.width > maxX) maxX = nodeRect.x + nodeRect.width; + if (nodeRect.y + nodeRect.height > maxY) maxY = nodeRect.y + nodeRect.height; + + }); + + let x = minX; + let y = minY; + let width = maxX - minX; + let height = maxY - minY; + let centerX = minX + width / 2; + let centerY = minY + height / 2; + + return { x: x, y: y, width: width, height: height, minX: minX, minY: minY, maxX: maxX, maxY: maxY, centerX: centerX, centerY: centerY }; +} + +function getCanvasBounds() +{ + let canvasRect = canvas.getBoundingClientRect(); + + let x = canvasRect.x; + let y = canvasRect.y; + let width = canvasRect.width; + let height = canvasRect.height; + let centerX = canvasRect.x + canvasRect.width / 2; + let centerY = canvasRect.y + canvasRect.height / 2; + + return { x: x, y: y, width: width, height: height, minX: x, minY: y, maxX: x + width, maxY: y + height, centerX: centerX, centerY: centerY }; +} + +/**Sets the relative scale of the canvas around a point*/ +function scaleCanvasAroundPoint(scaleBy, aroundPointX, aroundPointY) +{ + let canvasBounds = getCanvasBounds(); + + let xCenterToTarget = aroundPointX - canvasBounds.x; + let yCenterToTarget = aroundPointY - canvasBounds.y; + + let xCenterPin = canvasBounds.x + xCenterToTarget * scaleBy; + let yCenterPin = canvasBounds.y + yCenterToTarget * scaleBy; + + let offsetX = aroundPointX - xCenterPin; + let offsetY = aroundPointY - yCenterPin; + + scaleCanvas(scaleBy); + translateCanvas(offsetX, offsetY); + return { x: offsetX, y: offsetY }; +} + +/**Sets the relative scale of the canvas*/ +function scaleCanvas(scaleBy) +{ + let newScale = Math.max(scaleBy * canvas.style.scale, 0.001); + canvas.style.scale = newScale; + canvasWrapper.style.setProperty("--zoom-multiplier", (1/(Math.sqrt(newScale))) ); +} + +/**Sets the relative translation of the canvas*/ +function translateCanvas(x, y) +{ + let translate = canvas.style.translate; + let split = translate.split(" "); + let translateX = split.length > 0 ? parseFloat(translate.split(" ")[0].trim()) : 0; + let translateY = split.length > 1 ? parseFloat(translate.split(" ")[1].trim()) : translateX; + + canvas.style.translate = \`\${translateX + x}px \${translateY + y}px\`; +} + +/**Sets the absolute center of the view*/ +function setViewCenter(x, y) +{ + let viewContentRect = getViewBounds(); + let deltaX = viewContentRect.centerX - x; + let deltaY = viewContentRect.centerY - y; + + translateCanvas(deltaX, deltaY); +} + +function getCanvasTranslation() +{ + let translate = canvas.style.translate; + let split = translate.split(" "); + let translateX = split.length > 0 ? parseFloat(translate.split(" ")[0].trim()) : 0; + let translateY = split.length > 1 ? parseFloat(translate.split(" ")[1].trim()) : translateX; + + return { x: translateX, y: translateY }; +} + +/**Sets the absolute scale of the canvas background pattern*/ +function scaleCanvasBackground(scaleBy) +{ + let scaleX = scaleBy * canvasBackgroundPattern.getAttribute("width"); + let scaleY = scaleBy * canvasBackgroundPattern.getAttribute("height"); + + canvasBackgroundPattern.setAttribute("width", scaleX); + canvasBackgroundPattern.setAttribute("height", scaleY); +} + +/**Sets the absolute translation of the canvas background pattern*/ +function translateCanvasBackground(x, y) +{ + canvasBackgroundPattern.setAttribute("x", x + canvasBackgroundPattern.getAttribute("x")); + canvasBackgroundPattern.setAttribute("y", y + canvasBackgroundPattern.getAttribute("y")); +} + +/**Fits the view to contain the given node*/ +function fitViewToNode(node) +{ + let nodeRect = getElBounds(node); + let viewContentRect = getViewBounds(); + let canvasBounds = getCanvasBounds(); + + let scale = 0.8 * Math.min(viewContentRect.width/nodeRect.width, viewContentRect.height/nodeRect.height); + + let canvasX = canvasBounds.x; + let canvasY = canvasBounds.y; + + let canvToNodeX = (nodeRect.centerX - canvasX) * scale; + let canvToNodeY = (nodeRect.centerY - canvasY) * scale; + + let newNodeX = canvasX + canvToNodeX; + let newNodeY = canvasY + canvToNodeY; + + let deltaX = viewContentRect.centerX - newNodeX; + let deltaY = viewContentRect.centerY - newNodeY; + + nodeRect = getElBounds(node); + + canvas.style.transition = "scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)"; + scaleCanvas(scale); + translateCanvas(deltaX, deltaY); + + setTimeout(function() + { + canvas.style.transition = ""; + }, 550); +} + +/**Fits the view to contain all nodes in the graph*/ +function fitViewToCanvas() +{ + let nodesRect = getNodesBounds(); + let viewContentRect = getViewBounds(); + let canvasBounds = getCanvasBounds(); + + let scale = 0.8 * Math.min(viewContentRect.width/nodesRect.width, viewContentRect.height/nodesRect.height); + + let canvasX = canvasBounds.x; + let canvasY = canvasBounds.y; + + let canvToNodeX = (nodesRect.centerX - canvasX) * scale; + let canvToNodeY = (nodesRect.centerY - canvasY) * scale; + + let newNodeX = canvasX + canvToNodeX; + let newNodeY = canvasY + canvToNodeY; + + let deltaX = viewContentRect.centerX - newNodeX; + let deltaY = viewContentRect.centerY - newNodeY; + + canvas.style.transition = "scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)"; + scaleCanvas(scale); + translateCanvas(deltaX, deltaY); + + setTimeout(function() + { + canvas.style.transition = ""; + }, 550); +} + +//#endregion + +//#region ----------------- Callouts ----------------- + +function setupCallouts(setupOnNode) +{ + // MAKE CALLOUTS COLLAPSIBLE + // if the callout title is clicked, toggle the display of .callout-content + setupOnNode.querySelectorAll(".callout.is-collapsible .callout-title").forEach(function (element) + { + element.addEventListener("click", function () + { + var parent = this.parentElement; + + parent.classList.toggle("is-collapsed"); + element.querySelector(".callout-fold").classList.toggle("is-collapsed"); + + slideToggle(parent.querySelector(".callout-content"), 100); + }); + }); + +} + +//#endregion + +//#region ----------------- Checkboxes ----------------- + +function setupCheckboxes(setupOnNode) +{ + // Fix checkboxed toggling .is-checked + setupOnNode.querySelectorAll(".task-list-item-checkbox").forEach(function (element) + { + element.addEventListener("click", function () + { + var parent = this.parentElement; + parent.classList.toggle("is-checked"); + parent.setAttribute("data-task", parent.classList.contains("is-checked") ? "x" : " "); + }); + }); + + setupOnNode.querySelectorAll(\`.plugin-tasks-list-item input[type="checkbox"]\`).forEach(function(checkbox) + { + checkbox.checked = checkbox.parentElement.classList.contains("is-checked"); + }); + + setupOnNode.querySelectorAll('.kanban-plugin__item.is-complete').forEach(function(checkbox) + { + checkbox.querySelector('input[type="checkbox"]').checked = true; + }); +} + +//#endregion + +//#region ----------------- Code Blocks ----------------- + +function setupCodeblocks(setupOnNode) +{ + // make code snippet block copy button copy the code to the clipboard + setupOnNode.querySelectorAll(".copy-code-button").forEach(function (element) + { + element.addEventListener("click", function () + { + var code = this.parentElement.querySelector("code").textContent; + navigator.clipboard.writeText(code); + this.textContent = "Copied!"; + // set a timeout to change the text back + setTimeout(function () + { + setupOnNode.querySelectorAll(".copy-code-button").forEach(function (button) + { + button.textContent = "Copy"; + }); + }, 2000); + }); + }); +} + +//#endregion + +//#region ----------------- Links ----------------- + +function setupLinks(setupOnNode) +{ + setupOnNode.querySelectorAll(".internal-link, a.tag, .tree-link, .footnote-link").forEach(function(link) + { + link.addEventListener("click", function(event) + { + let target = link.getAttribute("href"); + + event.preventDefault(); + event.stopPropagation(); + + if(!target) + { + console.log("No target found for link"); + return; + } + + let relativePathnameStrip = relativePathname.split("#")[0].split("?")[0]; + + if(target.startsWith("#") || target.startsWith("?")) target = relativePathnameStrip + target; + + loadDocument(target, true, !link.classList.contains("tree-link")); + }); + }); +} + +//#endregion + +//#region ----------------- Sidebars ----------------- + +function setupSidebars() +{ + if (!rightSidebar || !leftSidebar) return; + + //#region sidebar object references + sidebarCollapseIcons[0].otherIcon = sidebarCollapseIcons[1]; + sidebarCollapseIcons[1].otherIcon = sidebarCollapseIcons[0]; + sidebarCollapseIcons[0].gutter = sidebarGutters[0]; + sidebarCollapseIcons[1].gutter = sidebarGutters[1]; + sidebarCollapseIcons[0].sidebar = sidebars[0]; + sidebarCollapseIcons[1].sidebar = sidebars[1]; + sidebarGutters[0].otherGutter = sidebarGutters[1]; + sidebarGutters[1].otherGutter = sidebarGutters[0]; + sidebarGutters[0].collapseIcon = sidebarCollapseIcons[0]; + sidebarGutters[1].collapseIcon = sidebarCollapseIcons[1]; + sidebars[0].otherSidebar = sidebars[1]; + sidebars[1].otherSidebar = sidebars[0]; + sidebars[0].gutter = sidebarGutters[0]; + sidebars[1].gutter = sidebarGutters[1]; + //#endregion + + sidebars.forEach(function (sidebar) + { + sidebar.collapsed = sidebar.classList.contains("is-collapsed"); + sidebar.collapse = function (collapsed = true) + { + if (!collapsed && this.temporarilyCollapsed && deviceSize == "large-screen") this.gutter.collapse(true); + + + if (!collapsed && document.body.classList.contains("floating-sidebars")) + { + function clickOutsideCollapse(event) + { + // don't allow bubbling into sidebar + if (event.target.closest(".sidebar")) return; + + sidebar.collapse(true); + document.body.removeEventListener("click", clickOutsideCollapse); + } + + document.body.addEventListener("click", clickOutsideCollapse); + } + + // if there isn't enough space for both sidebars then close the other one + if (deviceSize == "phone") + { + if (!collapsed) sidebar.otherSidebar.fullCollapse(true, true); + if (collapsed) sidebar.gutter.otherGutter.collapse(false, true); + } + + if (deviceSize == "tablet") + { + if (!collapsed) sidebar.otherSidebar.collapse(true); + } + + this.classList.toggle("is-collapsed", collapsed); + this.collapsed = collapsed; + } + sidebar.temporaryCollapse = function (collapsed = true) + { + this.temporarilyCollapsed = true; + this.collapse(true); + this.gutter.collapse(false); + this.collapsed = collapsed; + } + sidebar.fullCollapse = function (collapsed = true, force = false) + { + this.collapse(collapsed); + this.gutter.collapse(true, force); + this.collapsed = collapsed; + } + sidebar.toggleCollapse = function () + { + this.collapse(!this.collapsed); + } + sidebar.toggleFullCollapse = function () + { + this.fullCollapse(!this.collapsed); + } + }); + + sidebarGutters.forEach(function (gutter) + { + gutter.collapsed = gutter.classList.contains("is-collapsed"); + gutter.collapse = function (collapsed, force = false) + { + if(!force) return; + + this.classList.toggle("is-collapsed", collapsed); + this.collapsed = collapsed; + } + gutter.toggleCollapse = function () + { + this.collapse(!this.collapsed); + } + }); + + sidebarCollapseIcons.forEach(function (icon) + { + icon.addEventListener("click", function (event) + { + event.stopPropagation(); + icon.sidebar.toggleCollapse(); + }); + }); + + if (!isMobile()) setupSidebarResize(); +} + +function setupSidebarResize() +{ + let leftHandle = document.querySelector('.sidebar-left .sidebar-handle'); + let rightHandle = document.querySelector('.sidebar-right .sidebar-handle'); + if (!leftHandle || !rightHandle) return; + let resizingSidebar = null; + + let minResizeWidth = parseFloat(getComputedStyle(leftHandle.parentElement).fontSize) * 15; + let collapseWidth = minResizeWidth / 4.0; + + let rightWidth = localStorage.getItem('sidebar-right-width'); + let leftWidth = localStorage.getItem('sidebar-left-width'); + if (rightWidth) document.querySelector('.sidebar-right').style.setProperty('--sidebar-width', rightWidth); + if (leftWidth) document.querySelector('.sidebar-left').style.setProperty('--sidebar-width', leftWidth); + + function resizeMove(e) + { + if (!resizingSidebar) return; + + let isLeft = resizingSidebar.classList.contains("sidebar-left"); + var distance = isLeft ? e.clientX : window.innerWidth - e.clientX; + var newWidth = \`min(max(\${distance}px, 15em), 40vw)\`; // 15em is minResizeWidth + + if (distance < collapseWidth) + { + resizingSidebar.collapse(true); + resizingSidebar.style.removeProperty('transition-duration'); + } + else + { + resizingSidebar.collapse(false); + resizingSidebar.style.setProperty('--sidebar-width', newWidth); + if (distance > minResizeWidth) resizingSidebar.style.transitionDuration = "0s"; + } + } + + function handleClick(e) + { + resizingSidebar = e.target.closest('.sidebar'); + resizingSidebar.classList.add('is-resizing'); + document.addEventListener('pointermove', resizeMove); + document.addEventListener('pointerup', function () + { + document.removeEventListener('pointermove', resizeMove); + var finalWidth = getComputedStyle(resizingSidebar).getPropertyValue('--sidebar-width'); + + let isLeft = resizingSidebar.classList.contains("sidebar-left"); + localStorage.setItem(isLeft ? 'sidebar-left-width' : 'sidebar-right-width', finalWidth); + resizingSidebar.classList.remove('is-resizing'); + resizingSidebar.style.removeProperty('transition-duration'); + }); + } + + leftHandle.addEventListener('pointerdown', handleClick); + rightHandle.addEventListener('pointerdown', handleClick); + + // reset sidebar width on double click + function resetSidebarEvent(e) + { + let sidebar = e.target.closest('.sidebar'); + if (sidebar) + { + sidebar.style.removeProperty('transition-duration'); + sidebar.style.removeProperty('--sidebar-width'); + let isLeft = sidebar.classList.contains("sidebar-left"); + localStorage.removeItem(isLeft ? 'sidebar-left-width' : 'sidebar-right-width'); + } + } + + leftHandle.addEventListener('dblclick', resetSidebarEvent); + rightHandle.addEventListener('dblclick', resetSidebarEvent); +} + +/**Get the computed target sidebar width in px*/ +function getSidebarWidthProp() +{ + return getComputedPixelValue("--sidebar-width"); +} + +//#endregion + +//#region ----------------- Theme ----------------- + +function setupThemeToggle() +{ + if (!themeToggle) return; + + if (localStorage.getItem("theme") != null) + { + setThemeToggle(localStorage.getItem("theme") == "light"); + } + + // set initial toggle state based on body theme class + if (document.body.classList.contains("theme-light")) + { + setThemeToggle(true); + } + else + { + setThemeToggle(false); + } + + function setThemeToggle(state, instant = false) + { + + themeToggle.checked = state; + + if (instant) + { + var oldTransition = document.body.style.transition; + document.body.style.transition = "none"; + } + + if(!themeToggle.classList.contains("is-checked") && state) + { + themeToggle.classList.add("is-checked"); + } + else if (themeToggle.classList.contains("is-checked") && !state) + { + themeToggle.classList.remove("is-checked"); + } + + if(!state) + { + if (document.body.classList.contains("theme-light")) + { + document.body.classList.remove("theme-light"); + } + + if (!document.body.classList.contains("theme-dark")) + { + document.body.classList.add("theme-dark"); + } + } + else + { + if (document.body.classList.contains("theme-dark")) + { + document.body.classList.remove("theme-dark"); + } + + if (!document.body.classList.contains("theme-light")) + { + document.body.classList.add("theme-light"); + } + } + + if (instant) + { + setTimeout(function() + { + document.body.style.transition = oldTransition; + }, 100); + } + + localStorage.setItem("theme", state ? "light" : "dark"); + } + + document.querySelector(".theme-toggle-input")?.addEventListener("change", event => + { + let newVal = !(localStorage.getItem("theme") == "light"); + console.log("Theme toggle changed to: " + newVal); + setThemeToggle(newVal); + }); +} + +//#endregion + +//#region ----------------- Scroll ----------------- + +let flashElement = null; +let flashAnimation = null; +function scrollIntoView(element, options, animate = true) +{ + setTreeCollapsed(element, false, animate); + + const flashTiming = + { + duration: 1500, + iterations: 1, + delay: 300, + }; + + const flashAnimationData = + [ + { opacity: 0 }, + { opacity: 0.8 }, + { opacity: 0.8 }, + { opacity: 0.8 }, + { opacity: 0.8 }, + { opacity: 0.8 }, + { opacity: 0 }, + ]; + + if(flashElement) + { + flashElement.remove(); + flashAnimation.cancel(); + } + + flashElement = document.createElement("div"); + flashElement.classList.add("scroll-highlight"); + element.appendChild(flashElement); + + if(options) flashElement.scrollIntoView({ behavior: animate ? "smooth" : "auto", ...options }); + else flashElement.scrollIntoView({ behavior: animate ? "smooth" : "auto" }); + + var savePos = element.style.position; + element.style.position = "relative"; + + flashAnimation = flashElement.animate(flashAnimationData, flashTiming); + flashAnimation.onfinish = function() + { + flashElement.remove(); + element.style.position = savePos; + } +} + +function setupScroll(setupOnNode) +{ + // hide elements clipped by scrollable areas in markdown-preview-view elements + if(documentType != "canvas") return; + + let markdownViews = Array.from(setupOnNode.querySelectorAll(".markdown-preview-view")); + let nextMarkdownViewId = 0; + + let marginMultiplier = 0.1; + let maxMargin = 150; + let margin = 0; + + markdownViews.forEach(async function (view) + { + console.log("Setting up markdown view"); + let headers = Array.from(view.querySelectorAll(".heading-wrapper")); + + view.updateVisibleWindowMarkdown = function updateVisibleWindowMarkdown(allowVirtualization = true, allowDevirtualization = true) + { + let scrollBounds = view.getBoundingClientRect(); + margin = Math.min(scrollBounds.height * marginMultiplier, maxMargin); + let scrollBoundsTop = scrollBounds.top - margin; + let scrollBoundsBottom = scrollBounds.bottom + margin; + + async function updateHeader(header) + { + let bounds = header?.getBoundingClientRect(); + + if (!bounds) return; + + let isClipped = (bounds.top < scrollBoundsTop && bounds.bottom < scrollBoundsTop) || (bounds.top > scrollBoundsBottom && bounds.bottom > scrollBoundsBottom); + + if (isClipped && allowVirtualization) + { + header.hide(); + } + else if (!isClipped && allowDevirtualization) + { + header.show(); + } + } + + for (let i = 0; i < headers.length; i++) + { + let h = headers[i]; + if(h) updateHeader(h); + } + } + + let lastScrollTop = 0; + view.addEventListener("scroll", function() + { + if (Math.abs(view.scrollTop - lastScrollTop) > margin / 3) + { + view.updateVisibleWindowMarkdown(false, true); + } + + lastScrollTop = view.scrollTop; + }); + }); + + async function periodicUpdate() + { + if(markdownViews.length > 0) + { + markdownViews[nextMarkdownViewId].updateVisibleWindowMarkdown(); + nextMarkdownViewId = (nextMarkdownViewId + 1) % markdownViews.length; + } + } + + setInterval(periodicUpdate, 200); +} + +//#endregion + +//#region ----------------- Plugins ----------------- + +// Excalidraw +function setupExcalidraw(setupOnNode) +{ + setupOnNode.querySelectorAll(".excalidraw-svg svg").forEach(function (svg) + { + let isLight = svg.querySelector("rect").getAttribute("fill") > "#7F7F7F"; + svg.classList.add(isLight ? "light" : "dark"); + }); +} + + +//#endregion + +//#region ----------------- Search ----------------- + +// search box +let index; +let searchResults; + +async function setupSearch() +{ + if (isFileProtocol) return; + searchInput = document.querySelector('input[type="search"]'); + if (!searchInput) return; + + const indexResp = await fetch('lib/search-index.json'); + const indexJSON = await indexResp.text(); + index = MiniSearch.loadJSON(indexJSON, { fields: ['title', 'path', 'tags', 'headers'] }); + + const inputClear = document.querySelector('.search-input-clear-button'); + + inputClear.addEventListener('click', (event) => + { + search(""); + }); + + searchInput.addEventListener('input', (event) => + { + const query = event.target.value ?? ""; + + if (startsWithAny(query, ["#", "tag:", "title:", "name:", "header:", "H:"])) + { + searchInput.style.color = "var(--text-accent)"; + } + else + { + searchInput.style.color = ""; + } + + search(query); + }); + + searchResults = document.createElement('div'); + searchResults.setAttribute('id', 'search-results'); +} + +async function search(query) +{ + searchInput.value = query; + + // parse special query filters + let searchFields = ['title', 'content', 'tags', 'headers', 'path']; + if (query.startsWith("#")) searchFields = ['tags', 'headers']; + if (query.startsWith("tag:")) + { + query = query.substring(query.indexOf(":") + 1); + searchFields = ['tags']; + } + if (startsWithAny(query, ["title:", "name:"])) + { + query = query.substring(query.indexOf(":") + 1); + searchFields = ['title']; + } + if (startsWithAny(query, ["header:", "H:"])) + { + query = query.substring(query.indexOf(":") + 1); + searchFields = ['headers']; + } + if (startsWithAny(query, ["path:"])) + { + query = query.substring(query.indexOf(":") + 1); + searchFields = ['path']; + } + + if (query.length >= 1) + { + const results = index.search(query, { prefix: true, fuzzy: 0.3, boost: { title: 4, headers: 3, tags: 2, path: 1 }, fields: searchFields }); + // search through the file tree and hide documents that don't match the search + let showPaths = []; + let hintLabels = []; + for (let result of results) + { + // only show the most relevant results + if (((result.score < results[0].score * 0.33 || showPaths.length > 12) && showPaths.length > 3) || result.score < results[0].score * 0.1) break; + showPaths.push(result.path); + + let hints = []; + let breakEarly = false; + for (match in result.match) + { + if (result.match[match].includes("headers")) + { + for (let header of result.headers) + { + if (header.toLowerCase().includes(match.toLowerCase())) + { + hints.push(header); + if (query.toLowerCase() != match.toLowerCase()) + { + breakEarly = true; + break; + } + } + } + } + + if (breakEarly) break; + } + + hintLabels.push(hints); + } + + let fileTree = document.querySelector(".file-tree"); + if (fileTree) + { + // filter the file tree and sort it by the order of the search results + filterFileTree(showPaths, hintLabels, query).then(() => + sortFileTreeDocuments((a, b) => + { + if (!a || !b) return 0; + let aPath = getVaultRelativePath(a.firstChild.href); + let bPath = getVaultRelativePath(b.firstChild.href); + return showPaths.findIndex((path) => aPath.startsWith(path)) - showPaths.findIndex((path) => bPath.startsWith(path)); + })); + } + else + { + const list = document.createElement('div'); + results.slice(0, 10).forEach(result => { + + const item = document.createElement('div'); + item.classList.add('search-result'); + + const link = document.createElement('a'); + link.classList.add('tree-link'); + + const searchURL = result.path + '?mark=' + encodeURIComponent(query); + link.setAttribute('href', searchURL); + link.appendChild(document.createTextNode(result.title)); + item.appendChild(link); + list.append(item); + }); + + searchResults.replaceChildren(list); + searchInput.parentElement.after(searchResults); + initializePageEvents(searchResults); + } + + } + else + { + if (searchResults && searchResults.parentElement) searchResults.parentNode.removeChild(searchResults); + clearCurrentDocumentSearch(); + if (fileTree) clearFileTreeFilter().then(() => sortFileTreeAlphabetically()); + } + +} + +function startsWithAny(string, prefixes) +{ + for (let i = 0; i < prefixes.length; i++) + { + if (string.startsWith(prefixes[i])) return true; + } + + return false; +} + +async function searchCurrentDocument(query) +{ + clearCurrentDocumentSearch(); + const textNodes = getTextNodes(document.querySelector(".markdown-preview-sizer") ?? documentContainer); + + textNodes.forEach(async node => + { + const content = node.nodeValue; + const newContent = content.replace(new RegExp(query, 'gi'), match => \`\${match}\`); + + if (newContent !== content) + { + const tempDiv = document.createElement('div'); + tempDiv.innerHTML = newContent; + + const newNodes = Array.from(tempDiv.childNodes); + + newNodes.forEach(newNode => + { + if (newNode.nodeType != Node.TEXT_NODE) + { + newNode.setAttribute('class', 'search-mark'); + + } + node.parentNode.insertBefore(newNode, node); + }); + + node.parentNode.removeChild(node); + } + }); + + let firstMark = document.querySelector(".search-mark"); + + // wait for page to fade in + setTimeout(() => + { + if(firstMark) scrollIntoView(firstMark, { behavior: "smooth", block: "start" }); + }, 500); +} + +function clearCurrentDocumentSearch() +{ + document.querySelectorAll(".search-mark").forEach(node => + { + node.outerHTML = node.innerHTML; + }); +} + +function getTextNodes(element) +{ + const textNodes = []; + const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false); + + let node; + while (node = walker.nextNode()) { + textNodes.push(node); + } + + return textNodes; +} + +//#endregion +`; + +// assets/plugin-styles.txt.css +var plugin_styles_txt_default = `/*#region Variables */ +body +{ + --color-fade-speed: 0.2s; +} + +/*#endregion */ + +/*#region Tree */ + +/* Base tree */ + +.tree-container +{ + position: relative; + height: 100%; + width: auto; + margin-top: 3em; + margin-bottom: 0; +} + +.tree-container .tree-header +{ + display: flex; + flex-direction: row; + align-items: center; + position: absolute; + top: -3em; +} + +.tree-container .tree-header .sidebar-section-header +{ + margin-block: 1em; + white-space: nowrap; +} + +.tree-container:has(.tree-scroll-area:empty) +{ + display: none; +} + +body .webpage-container .tree-container .tree-scroll-area +{ + width: 100%; + height: 100%; + max-height: 100%; + overflow-y: auto; + border-radius: 0; + position: absolute; + margin: 0; + background-color: transparent; +} + +.tree-container .tree-item +{ + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 0; + padding-block: 1px; + overflow: hidden !important; + flex: none; +} + +.tree-container .tree-item-children +{ + padding: 0; + margin: 0; + border-left: none; + width: 100%; +} + +.tree-item-title > * +{ + padding: 0; + margin: 0; + overflow: hidden; + display: inline; + text-overflow: ellipsis; +} + +.tree-container .tree-item-icon * +{ + color: var(--text-muted); + font-family: emoji; +} + +.tree-container .tree-item-icon :is(svg,img) +{ + -webkit-mask-image-repeat: no-repeat; + -webkit-mask-image-position: center; + max-width: 1.3em; + height: 100%; +} + +/* Skip outer wrappers around icons */ +.tree-container .tree-item-icon *:has(svg) +{ + display: contents !important; +} + +.tree-container .tree-item-icon +{ + min-width: 1.6em; + max-width: 1.6em; + margin-left: 2px; + display: flex; + align-items: center; + justify-content: flex-start; +} + +.tree-container .tree-item.mod-active > .tree-link > .tree-item-contents +{ + color: var(--interactive-accent); +} + +.tree-container .tree-link { + position: relative; + display: flex; + flex-direction: row; + align-items: center; + flex-wrap: wrap; + + border-radius: var(--radius-s); + color: var(--nav-item-color); + text-decoration-line: none; + + width: -webkit-fill-available; + width: -moz-available; + width: fill-available; + + margin-left: var(--tree-horizontal-spacing); +} + +.tree-container .tree-link:active +{ + color: var(--nav-item-color-active); +} + +.tree-container .tree-item-contents +{ + width: 100%; + height: 100%; + margin: 0 !important; + padding: 0 !important; + font-size: unset !important; + padding-left: calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size)) !important; + border-radius: var(--radius-s); + + display: flex !important; + flex-direction: row !important; + align-items: center !important; + + color: var(--nav-item-color); + transition: background-color .1s; +} + +.tree-container .tree-item-title { + overflow: hidden; + text-overflow: ellipsis !important; + text-wrap: nowrap !important; + white-space: nowrap !important; + position: relative !important; + border: none !important; + + width: 100%; + width: -webkit-fill-available; + width: -moz-available; + width: fill-available; + + background-color: transparent !important; + padding-top: calc(var(--tree-vertical-spacing)/ 2) !important; + padding-bottom: calc(var(--tree-vertical-spacing)/ 2) !important; + margin: 0 !important; + left: 0 !important; + right: 0 !important; + top: 0 !important; + bottom: 0 !important; +} + +.tree-container .tree-item-title::after +{ + right: 0; + position: absolute !important; + margin-right: 0.5em !important; +} + +/* Find tree contents in folders with no other folders in them */ +.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file > .tree-link > .tree-item-contents +{ + padding-left: calc(var(--tree-horizontal-spacing) * 2) !important; +} + +.tree-container .collapse-icon { + translate: calc(0px - var(--collapse-arrow-size) - var(--tree-horizontal-spacing) * 2) 0; + position: absolute; + height: 100%; + padding: var(--tree-horizontal-spacing); +} + +.tree-container .tree-item.mod-tree-folder > .tree-link > .collapse-icon +{ + width: 100%; +} + +.collapse-icon:hover +{ + color: var(--nav-item-color-hover); +} + +.tree-container .clickable-icon +{ + width: 3.2em; + height: 2.2em; +} + +.tree-container .tree-item.is-collapsed > .tree-link > .tree-item-contents > .collapse-icon > svg +{ + transition: transform 0.1s ease-in-out; + transform: rotate(-90deg); +} + +.tree-container .tree-item-contents:hover +{ + color: var(--nav-item-color-hover); +} + +.filtered-out +{ + display: none !important; +} + +/* Indentation guide */ + +.tree-container > .tree-scroll-area > * .tree-item +{ + margin-left: calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size)/2); + +} +.tree-container > .tree-scroll-area > * .tree-item +{ + border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); +} + +.tree-container .tree-scroll-area > * > * > .tree-item +{ + margin-left: calc(var(--tree-horizontal-spacing) + var(--collapse-arrow-size)/2); +} + +.tree-container:not(.mod-nav-indicator) .tree-scroll-area .tree-item +{ + border-color: transparent !important; +} + +.tree-container .tree-item.mod-active +{ + border-color: var(--interactive-accent) !important; + box-shadow: 2px 0px 0px 0px var(--interactive-accent) inset; + transition: box-shadow 0.4s ease-in-out; +} + + +.tree-container .tree-item:hover:not(.mod-active):not(.mod-collapsible):not(:has(.tree-item:hover)):not(.mod-root > * > *) /* Hover */ +{ + border-left: var(--nav-indentation-guide-width) solid var(--nav-item-color-hover); +} + +.tree-container .tree-link:hover, .tree-container .mod-active > .tree-link +{ + background-color: var(--nav-item-background-hover); + cursor: pointer; +} + +.webpage-container .tree-container .tree-item:not(.mod-collapsible) > .tree-item-children > .tree-item > .tree-link, +.webpage-container .tree-container > .tree-scroll-area > .tree-item > .tree-link +{ + margin-left: 0 !important; +} + +/* Special */ + +.tree-container.outline-tree .tree-item[data-depth='1'] > .tree-link > .tree-item-contents +{ + font-weight: 900; + font-size: 1.1em; + margin-left: 0; + padding-left: 1em; +} + +.nav-folder.mod-root .nav-folder>.nav-folder-children +{ + padding: 0 !important; + margin: 0 !important; + border: none !important; +} + +.nav-file +{ + border-radius: 0 !important; +} + +.nav-folder.mod-root .nav-folder > .nav-folder-children +{ + border-radius: var(--radius-s) !important;; +} + +.webpage-container .nav-file-tag +{ + margin-right: 1em; +} + +.nav-file-title-content, .nav-folder-title-content +{ + margin-bottom: unset !important; + display: unset !important; + border-radius: unset !important; + cursor: unset !important; + font-size: unset !important; + font-weight: unset !important; + line-height: unset !important; + padding: unset !important; +} + +/*#endregion */ + +/*#region Headers */ + +#webpage-icon :is(svg, img) +{ + width: 100%; + height: 100%; + box-shadow: none !important; + border: none !important; + border-radius: 0 !important; + stroke: currentColor; +} + +#webpage-icon *:has(:is(svg, img)) +{ + display: contents !important; +} + +#webpage-icon:has(:is(svg, img)) +{ + font-size: 40px; + width: 40px; + height: 40px; +} + +#webpage-icon { + font-size: 40px; + margin-bottom: 8px; + font-family: emoji; + width: fit-content; +} + +body.show-inline-title .page-title +{ + font-weight: var(--inline-title-weight); + font-size: var(--inline-title-size); + font-style: var(--inline-title-style); + font-variant: var(--inline-title-variant); + font-family: var(--inline-title-font); + letter-spacing: -0.015em; + color: var(--inline-title-color); +} + +.heading +{ + position: relative; +} + +.heading-wrapper.is-collapsed > .heading::after +{ + content: "..." !important; + display: inline-block !important; + position: absolute !important; + margin: 0 !important; + padding: 0 !important; + margin-left: 0.3em !important; + color: var(--text-muted); +} + +.heading-wrapper +{ + transition: height ease-in-out, margin-bottom ease-in-out; + transition-duration: 0.2s; + display: flex; + flex-direction: column; + position: relative; +} + +/* high specificity in order to override other style */ +html > body > .webpage-container > .document-container > .markdown-preview-view > .markdown-preview-sizer > div +{ + margin-inline: 0 !important; + margin: 0 !important; + padding: 0 !important; + width: 100%; + max-width: 100%; +} + +.markdown-rendered .heading-wrapper:has(> .heading-children > div:last-child > :is(p,pre,table,ul,ol)) + .heading-wrapper > .heading:first-child +{ + margin-top: var(--heading-spacing); +} + +.heading-children +{ + transition: height ease-in-out, margin-bottom ease-in-out; + transition-duration: 0.2s; + display: flow; + position: relative; + contain: inline-size; +} + +.heading-children.is-collapsed +{ + padding-top: 0em; +} + +.heading-wrapper.is-collapsed > .heading-children, .heading-wrapper.is-animating > .heading-children +{ + overflow: hidden; overflow: clip; +} + +.heading-wrapper > .heading > .heading-after +{ + display: none; +} + +.heading-wrapper.is-collapsed > .heading > .heading-after +{ + display: inline-block; + margin-left: 0.3em; + opacity: 0.4; + font-size: 1em; + cursor: auto; + user-select: none; +} + +.heading-wrapper.is-hidden > * +{ + display: none; +} + +.heading-wrapper.is-hidden +{ + visibility: hidden; +} + +.collapse-icon:not(.list-collapse-indicator) svg.svg-icon { + color: var(--nav-collapse-icon-color); + width: var(--collapse-arrow-size); + height: var(--collapse-arrow-size); + transition: transform 100ms ease-in-out 0s; + stroke-width: 4px; + min-width: 10px; + min-height: 10px; +} + +div.is-collapsed > * > .heading-collapse-indicator.collapse-icon > svg +{ + transition: transform 0.1s ease-in-out; + transform: rotate(-90deg); +} + +.heading-wrapper .heading-collapse-indicator +{ + opacity: 0; + transition: opacity 0.15s ease-in-out; + position: absolute; + z-index: 1; + padding: 0 !important; + padding-left: 40px !important; + padding-right: 40px !important; + left: -40px !important; +} + +.heading:hover > .heading-collapse-indicator, +.heading-wrapper .heading-collapse-indicator:hover +{ + opacity: 1; +} + +.heading-wrapper-span +{ + position: absolute; + width: 200vw; + height: calc(100% + var(--p-spacing) * 2); + top: calc(0px - var(--p-spacing)); + left: -100vw; + z-index: -1; +} + +.markdown-embed .markdown-embed-content .markdown-preview-view .heading-wrapper-span +{ + width: 100%; +} + +/*#endregion */ + +/*#region Theme Toggle */ + +.theme-toggle-container { + --toggle-width: 3.5em; + --toggle-height: 1.75em; + --border-radius: calc(var(--toggle-height) / 2); + --handle-width: calc(var(--toggle-height) * 0.65); + --handle-radius: calc(var(--handle-width) / 2); + --handle-margin: calc((var(--toggle-height) / 2.0) - var(--handle-radius)); + --handle-translation: calc(var(--toggle-width) - var(--handle-width) - (var(--handle-margin) * 2)); + + display: inline-block; + cursor: pointer; +} + +.sidebar-section-header, .clickable-icon +{ + transition: color var(--color-fade-speed) ease-in-out; +} + +/* animation to expand width, move handle, then contract width */ +@keyframes toggle-slide-right +{ + 0% + { + width: var(--handle-width); + transform: translateX(0); + } + 50% + { + width: calc(var(--toggle-width) * 0.5); + } + 90% + { + width: var(--handle-width); + } + 100% + { + transform: translateX(var(--handle-translation)); + } +} + +@keyframes toggle-slide-left +{ + 0% + { + width: var(--handle-width); + transform: translateX(calc(var(--handle-translation) - ((var(--toggle-width) * 0.33) - var(--handle-width)))); + } + 70% + { + width: calc(var(--toggle-width) * 0.5); + } + 100% + { + width: var(--handle-width); + transform: translateX(0); + } +} + +/* just exapnd and contract */ +@keyframes toggle-expand-right +{ + 0% + { + width: var(--handle-width); + } + 100% + { + width: calc(var(--toggle-width) * 0.33); + } +} + +@keyframes toggle-expand-left +{ + 0% + { + width: var(--handle-width); + transform: translateX(var(--handle-translation)); + } + 100% + { + width: calc(var(--toggle-width) * 0.33); + transform: translateX(calc(var(--handle-translation) - ((var(--toggle-width) * 0.33) - var(--handle-width)))); + } +} + +@keyframes toggle-contract +{ + 0% + { + width: calc(var(--toggle-width) * 0.33); + } + 100% + { + width: var(--handle-width); + } +} + +.theme-toggle-input { + display: none; + z-index: 1000; +} + +/* Fill in dark mode / default */ +.toggle-background { + position: relative; + width: var(--toggle-width); + height: var(--toggle-height); + border-radius: var(--border-radius); + background-color: var(--background-modifier-border); + + transition: background-color var(--color-fade-speed); + z-index: 1000; + + animation-duration: 0.2s; +} + +/* Handle default */ +.toggle-background::before +{ + content: ""; + position: absolute; + left: var(--handle-margin); + top: var(--handle-margin); + height: var(--handle-width); + width: var(--handle-width); + + border-radius: var(--handle-radius); + background-color: var(--text-normal); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); + animation: toggle-slide-left ease-in-out normal both; + animation-duration: inherit; + z-index: 1000; +} + +/* handle light*/ +.theme-toggle-input:checked ~ .toggle-background::before +{ + animation: toggle-slide-right ease-in-out normal both; + animation-duration: inherit; +} + +.theme-toggle-input:active ~ .toggle-background::before +{ + animation: toggle-expand-right ease-in-out normal both; + animation-duration: inherit; +} + +.theme-toggle-input:active:checked ~ .toggle-background::before +{ + animation: toggle-expand-left ease-in-out normal both; + animation-duration: inherit; +} + +/* sun moon icon icon default */ +.toggle-background::after +{ + content: ""; + position: absolute; + right: var(--handle-margin); + top: calc(var(--handle-margin)); + height: var(--handle-width); + width: var(--handle-width); + transition: transform 0.3s; + background: url('data:image/svg+xml,') + no-repeat center center; + transform: scale(0.9); +} + +/* sun moon icon icon light */ +.theme-toggle-input:checked ~ .toggle-background::after +{ + transform: translateX(calc(var(--handle-translation) * -1)) scale(0.9); + background: url('data:image/svg+xml,') + no-repeat center center; +} + +/*#endregion */ + +/*#region Graph View */ + +.graph-view-wrapper +{ + --graph-view-max-height: 35vh; +} + +#graph-canvas +{ + width: 100%; + height: 100%; + aspect-ratio: 1; + transition: opacity 0.2s ease-in-out; +} + +.graph-view-container.expanded +{ + position: fixed; + width: 90%; + height: 90%; + max-height: unset; + right: 5%; + top: 5%; + background-color: var(--background-secondary); + z-index: 100; +} + +body:is(.is-phone, .is-tablet) .graph-view-container.expanded +{ + width: 95%; + height: 95%; + right: 2.5%; + top: 2.5%; +} + +.graph-view-container +{ + position: relative; + width: 100%; + aspect-ratio: 1; + max-height: var(--graph-view-max-height); + display: flex; + transition: background-color var(--color-fade-speed) ease-in-out; + touch-action: none; + border: 1px solid var(--modal-border-color); + border-radius: var(--modal-radius); + overflow: hidden; +} + +.graph-icon +{ + cursor: pointer; + color: var(--text-muted); +} + +.graph-view-container .graph-icon>svg { + width: 24px; + height: 24px; + + background-color: var(--color-base-00); + outline-width: 6px; + outline-color: var(--color-base-00); + outline-offset: -1px; + outline-style: solid; + border-radius: 100px; + margin: 10px; + + transition: outline-color, background-color; + transition-timing-function: ease-in-out; + transition-duration: var(--color-fade-speed); +} + +.graph-view-placeholder +{ + padding: 0; + width: 100%; + aspect-ratio: 1; + max-height: var(--graph-view-max-height); + position: relative; + flex: none; +} + +.graph-view-placeholder:has(.expanded) +{ + border-radius: var(--modal-radius); + border: 1px solid var(--modal-border-color); +} + +.scale-down +{ + transition: transform 0.2s ease-in-out; + transform: scale(0.9); +} + +.scale-up +{ + transition: transform 0.2s ease-in-out; + transform: scale(1); +} + +.graph-expand +{ + position: absolute; + top: 5px; + right: 5px; +} + + + +/*#endregion */ + +/*#region Canvas */ + +body :is(.canvas-node-container, .canvas-wrapper) +{ + cursor: unset !important; +} + +.canvas +{ + translate: 0 0; + scale: 1 1; + will-change: translate, scale; +} + +.canvas-controls +{ + display: none; + cursor: default !important; +} + +.canvas-card-menu +{ + display: none; + cursor: default !important; +} + +.canvas-node-content-blocker +{ + pointer-events: none; +} + +/*#endregion */ + +/*#region Phone */ + +body.is-phone .sidebar +{ + font-size: 1.15em; + --tree-vertical-spacing: 0.9em; + --sidebar-width: 85vw !important; +} + +body.is-phone +{ + --collapse-arrow-size: 13px; + --tree-vertical-spacing: 0.8em; + --tree-horizontal-spacing: 0.5em; +} + +body.is-phone .heading-wrapper .heading-collapse-indicator +{ + transition: transform 0.2s ease-in-out 0.2s; +} + +/*#endregion */ + +/*#region Loading */ + +.loading-icon +{ + --width: 80px; + --height: 80px; + + display: inline-block; + position: fixed; + left: calc(50% - var(--width) / 2); + top: calc(50% - var(--height) / 2); + width: var(--width); + height: var(--height); + + opacity: 0; + transition: opacity 0.5s ease-in-out; + pointer-events: none; +} + +.loading-icon.show +{ + opacity: 1; +} + +.loading-icon div { + position: absolute; + top: 33px; + width: 13px; + height: 13px; + border-radius: 50%; + background: var(--interactive-accent); + animation-timing-function: cubic-bezier(0, 1, 1, 0); +} + +.loading-icon div:nth-child(1) { + left: 8px; + animation: lds-ellipsis1 0.6s infinite; +} + +.loading-icon div:nth-child(2) { + left: 8px; + animation: lds-ellipsis2 0.6s infinite; +} + +.loading-icon div:nth-child(3) { + left: 32px; + animation: lds-ellipsis2 0.6s infinite; +} + +.loading-icon div:nth-child(4) { + left: 56px; + animation: lds-ellipsis3 0.6s infinite; +} + +.loading-icon:not(.show) div +{ + animation-play-state: paused; +} + +@keyframes lds-ellipsis1 { + 0% { + transform: scale(0); + } + + 100% { + transform: scale(1); + } +} + +@keyframes lds-ellipsis3 { + 0% { + transform: scale(1); + } + + 100% { + transform: scale(0); + } +} + +@keyframes lds-ellipsis2 { + 0% { + transform: translate(0, 0); + } + + 100% { + transform: translate(24px, 0); + } +} + +/*#endregion */ + +/*#region Media Queries */ + +@media print +{ + body .webpage-container .document-container * + { + overflow: visible !important; + overflow-y: visible !important; + overflow-x: visible !important; + } + + html body.publish :is(.sidebar, script, style, include) + { + display: none !important; + } + + :root, html body.publish > :is(.webpage-container, .document-container, .markdown-preview-view):not(script, style, include) + { + display: contents !important; + } + + :root, html body.publish .document-container > .markdown-preview-view + { + background-color: transparent !important; + } + + body + { + display: inline !important; + background: var(--background-primary); + } + + .document-container > .markdown-preview-view > .markdown-preview-sizer + { + padding: 0 !important; + margin: 0 !important; + padding: var(--file-margins) !important; + padding-bottom: 0 !important; + } + + html body.publish :is(.document-container, .markdown-preview-view) + { + margin: 0 !important; + padding: 0 !important; + } + + +} + +/*#endregion */ + +/*#region Search */ + +.tree-hint-label +{ + font-size: var(--font-smallest); + color: var(--text-accent); + width: 100%; + width: -webkit-fill-available; + width: -moz-available; + width: fill-available; + white-space: pre-wrap; + text-decoration-line: none; +} + +.tree-hint-label:hover +{ + text-decoration-line: underline; +} + +.tree-hint-container +{ + width: 100%; + padding-left: calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size)); + padding-bottom: calc(var(--tree-vertical-spacing) / 2); + display: flex; + flex-direction: column; +} + +/* find hints inside folders with no other folders in them */ +.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file > .tree-link > .tree-hint-container +{ + padding-left: calc(var(--tree-horizontal-spacing) * 2); +} + +.tree-item-contents:has(.tree-item-icon) + .tree-hint-container +{ + margin-left: calc(1.6em + 2px); +} + +a.tree-hint-label:hover +{ + text-decoration-line: underline; +} + +.search-mark +{ + margin: 0 !important; + padding: 0 !important; + scroll-margin: 2em !important; +} + +.search-input-container:has(+ #search-results) > input[type="search"] +{ + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +input[type=search] { + box-shadow: none!important; + height: 2.5em; + font-size: 1em; + transition: background, background-color, border; + transition-duration: var(--color-fade-speed); + transition-timing-function: ease-in-out; +} + +.search-input-container +{ + width: 100% !important; +} + +.search-input-container::before +{ + mask-image: url("data:image/svg+xml,"); + mask-repeat: no-repeat; + top: 50%; + transform: translateY(-50%); +} + +/*#endregion */ + +/*#region Sidebar Resize */ + +.sidebar .sidebar-handle:hover ~ .sidebar-content, .sidebar.is-resizing .sidebar-content +{ + box-shadow: 0 0 0 var(--divider-width-hover) var(--divider-color-hover); +} + +.sidebar-handle { + width: min(max(calc(var(--sidebar-margin) / 2.0), 3px), 12px); + height: calc(100vh - 2 * var(--radius-l)); + margin-top: var(--radius-l); + margin-bottom: var(--radius-l); + top: 0; + position: absolute; + cursor: ew-resize; + z-index: 1; + transition: background-color .2s ease-in-out; +} + +.sidebar-left .sidebar-handle { + right: 0; +} + +.sidebar-right .sidebar-handle { + left: 0; +} + + + +/*#endregion */ + +/* Themes */ + +/*#region General */ + +.nav-folder-children .nav-folder-title-content::before +{ + margin-right: 0.5em; +} + +.tree-item::before +{ + margin-left: calc(var(--tree-horizontal-spacing) - 0.3em); +} + +.tree-item-contents:has(.tree-item-icon) .tree-item-title::before, +.tree-item-contents:has(.tree-item-icon)::before, +.tree-item:has(.tree-item-contents > .tree-item-icon)::before +{ + display: none !important; +} + +/*#endregion */ + +/*#region AnuPpuccin */ + +/* AnuPpuccin rainbow indent support */ +.anp-simple-rainbow-color-toggle.anp-simple-rainbow-indentation-toggle .tree-container.file-tree .tree-item +{ + border-color: rgba(var(--rainbow-folder-color), 0.5); +} + +/* AnuPpuccin folder icon support */ +.anp-collapse-folders .tree-container .tree-item .collapse-icon +{ + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A"); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + + background-color: currentColor; + display: flex; + flex-basis: 100%; + height: 16px; + width: 17px; +} + +.anp-collapse-folders .tree-container .tree-item.is-collapsed .collapse-icon +{ + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A"); +} + +.anp-file-icons .nav-file .nav-file-title::before +{ + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A"); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + background-color: currentColor; + content: ""; + display: flex; + flex-shrink: 0; + height: var(--size-4-4); + margin-left: calc(-1 * var(--size-4-5)); + opacity: var(--icon-opacity); + position: absolute; + width: var(--size-4-4); +} + +.anp-collapse-folders .tree-container .tree-item .collapse-icon:hover +{ + color: currentColor; +} + +.anp-collapse-folders .tree-container .tree-item .collapse-icon svg +{ + display: none; +} + +/*#endregion */ + +/* Plugins: */ + +/*#region Kanban */ + +.document-container .kanban-plugin +{ + position: absolute; + padding: 0; + margin: 0; + height: 100%; +} + +.document-container .kanban-plugin +{ + font-family: var(--font-text, var(--default-font)); + font-size: .875rem; + line-height: var(--line-height-tight); + width: unset; + overflow-y: unset; + overflow-wrap: unset; + color: unset; + user-select: unset; + -webkit-user-select: unset; +} + +.document-container .kanban-plugin__item-button-wrapper, .kanban-plugin__lane-grip, .kanban-plugin__lane-settings-button.clickable-icon, .kanban-plugin__item-postfix-button.clickable-icon +{ + display: none; +} + +/*#endregion */ + +/*#region Excalidraw */ + +.excalidraw-svg rect, .excalidraw-plugin rect +{ + fill: transparent; +} + +body.theme-dark .excalidraw-svg svg.dark, body.theme-dark .excalidraw-plugin svg.dark, +body.theme-light .excalidraw-svg svg.light, body.theme-light .excalidraw-plugin svg.light +{ + filter: invert(93%) hue-rotate(180deg); +} + + +.excalidraw-plugin > svg +{ + width: 100%; + height: 100%; +} + +.excalidraw-plugin +{ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + height: 100%; + width: 100%; + + padding: 10px; +} + +/*#endregion */ + +/*#region Obsidian Columns Plugin */ +.columnParent { + display: flex; + padding: 15px 20px; + flex-wrap: wrap; + gap: 20px; +} + +.columnParent { + white-space: normal; +} + +.columnChild { + flex-grow: 1; + flex-basis: 0px; +} +/*#endregion */ + +/*#region Banners */ + +.obsidian-banner .lock-button +{ + display: none; +} + +.markdown-preview-view:has(.obsidian-banner-wrapper) +{ + padding-top: 0 !important; +} + +/*#endregion */ + +/*#region Mind Map */ + +.view-content:has(.mm-mindmap) +{ + overflow-y: none; +} + +.view-content .mm-mindmap +{ + transform: scale(1); + translate: -4000px -4000px; + top: 70%; + left: 50%; + position: absolute; + overflow: hidden; + width: 100vw; +} + +/*#endregion */ +`; + +// assets/deferred.txt.js +var deferred_txt_default = `async function loadIncludes() +{ + if (location.protocol != "file:") + { + // replace include tags with the contents of the file + let includeTags = document.querySelectorAll("include"); + for (let i = 0; i < includeTags.length; i++) + { + let includeTag = includeTags[i]; + let includePath = includeTag.getAttribute("src"); + + try + { + const request = await fetch(includePath); + if (!request.ok) + { + console.log("Could not include file: " + includePath); + includeTag?.remove(); + continue; + } + + let includeText = await request.text(); + let docFrag = document.createRange().createContextualFragment(includeText); + let includeChildren = Array.from(docFrag.children); + for (let child of includeChildren) + { + child.classList.add("hide"); + child.style.transition = "opacity 0.5s ease-in-out"; + + setTimeout(() => + { + child.classList.remove("hide"); + }, 10); + }; + + includeTag.before(docFrag); + includeTag.remove(); + + console.log("Included file: " + includePath); + } + catch (e) + { + includeTag?.remove(); + console.log("Could not include file: " + includePath, e); + continue; + } + } + } + else + { + let e = document.querySelectorAll("include"); + if (e.length > 0) + { + var error = document.createElement("div"); + error.id = "error"; + error.textContent = "Web server exports must be hosted on an http / web server to be viewed correctly."; + error.style.position = "fixed"; + error.style.top = "50%"; + error.style.left = "50%"; + error.style.transform = "translate(-50%, -50%)"; + error.style.fontSize = "1.5em"; + error.style.fontWeight = "bold"; + error.style.textAlign = "center"; + document.body.appendChild(error); + document.querySelector(".document-container")?.classList.remove("hide"); + } + } +} + +document.addEventListener("DOMContentLoaded", () => +{ + loadIncludes(); +}); + +let isFileProtocol = location.protocol == "file:"; + +function waitLoadScripts(scriptNames, callback) +{ + let scripts = scriptNames.map(name => document.getElementById(name + "-script")); + let index = 0; + + function loadNext() + { + let script = scripts[index]; + index++; + + if (!script || script.getAttribute('loaded') == "true") // if already loaded + { + if (index < scripts.length) + loadNext(); + } + + if (index < scripts.length) script.addEventListener("load", loadNext); + else callback(); + } + + loadNext(); +} +`; + +// assets/deferred.txt.css +var deferred_txt_default2 = "/* Define default values for variables */\nbody\n{\n --line-width: 40em;\n --line-width-adaptive: 40em;\n --file-line-width: 40em;\n --sidebar-width: min(20em, 80vw);\n --collapse-arrow-size: 11px;\n --tree-horizontal-spacing: 0.6em;\n --tree-vertical-spacing: 0.6em;\n --sidebar-margin: 12px;\n}\n\n/*#region Sidebars */\n\n.sidebar {\n height: 100%;\n min-width: calc(var(--sidebar-width) + var(--divider-width-hover));\n max-width: calc(var(--sidebar-width) + var(--divider-width-hover));\n font-size: 14px;\n z-index: 10;\n\n position: relative;\n overflow: hidden;\n /* overflow: clip; */\n \n transition: min-width ease-in-out, max-width ease-in-out;\n transition-duration: .2s;\n contain: size;\n}\n\n.sidebar-left {\n left: 0;\n}\n\n.sidebar-right {\n right: 0;\n}\n\n.sidebar.is-collapsed {\n min-width: 0;\n max-width: 0;\n}\n\nbody.floating-sidebars .sidebar {\n position: absolute;\n}\n\n.sidebar-content {\n height: 100%;\n min-width: calc(var(--sidebar-width) - var(--divider-width-hover));\n top: 0;\n padding: var(--sidebar-margin);\n padding-top: 4em;\n line-height: var(--line-height-tight);\n background-color: var(--background-secondary);\n transition: background-color,border-right,border-left,box-shadow;\n transition-duration: var(--color-fade-speed);\n transition-timing-function: ease-in-out;\n position: absolute;\n display: flex;\n flex-direction: column;\n}\n\n/* If the sidebar isn't collapsed the content should have the same width as it */\n.sidebar:not(.is-collapsed) .sidebar-content {\n min-width: calc(max(100%,var(--sidebar-width)) - 3px);\n max-width: calc(max(100%,var(--sidebar-width)) - 3px);\n}\n\n.sidebar-left .sidebar-content\n{\n left: 0;\n border-top-right-radius: var(--radius-l);\n border-bottom-right-radius: var(--radius-l);\n}\n\n.sidebar-right .sidebar-content \n{\n right: 0;\n border-top-left-radius: var(--radius-l);\n border-bottom-left-radius: var(--radius-l);\n}\n\n/* Hide empty sidebars */\n.sidebar:has(.sidebar-content:empty):has(.topbar-content:empty)\n{\n display: none;\n}\n\n.sidebar-topbar {\n height: 2em;\n width: var(--sidebar-width);\n top: var(--sidebar-margin);\n padding-inline: var(--sidebar-margin);\n z-index: 1;\n\n position: fixed;\n display: flex;\n align-items: center;\n\n transition: width ease-in-out;\n transition-duration: inherit;\n}\n\n.sidebar.is-collapsed .sidebar-topbar {\n width: calc(2.3em + var(--sidebar-margin) * 2);\n}\n\n.sidebar .sidebar-topbar.is-collapsed\n{\n width: 0;\n}\n\n.sidebar-left .sidebar-topbar {\n left: 0;\n}\n\n.sidebar-right .sidebar-topbar {\n right: 0;\n}\n\n.topbar-content {\n overflow: hidden;\n overflow: clip;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n transition: inherit;\n}\n\n.sidebar.is-collapsed .topbar-content {\n width: 0;\n transition: inherit;\n}\n\n.clickable-icon.sidebar-collapse-icon {\n background-color: transparent;\n color: var(--icon-color-focused);\n padding: 0!important;\n margin: 0!important;\n height: 100%!important;\n width: 2.3em !important;\n margin-inline: 0.14em!important;\n position: absolute;\n}\n\n.sidebar-left .clickable-icon.sidebar-collapse-icon {\n transform: rotateY(180deg);\n right: var(--sidebar-margin);\n}\n\n.sidebar-right .clickable-icon.sidebar-collapse-icon {\n transform: rotateY(180deg);\n left: var(--sidebar-margin);\n}\n\n.clickable-icon.sidebar-collapse-icon svg.svg-icon {\n width: 100%;\n height: 100%;\n}\n\n.sidebar-section-header\n{\n margin: 0 0 1em 0;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 600;\n}\n\n/*#endregion */\n\n/*#region Content / Markdown Preview View */\n\nbody\n{\n transition: background-color var(--color-fade-speed) ease-in-out;\n}\n\n.webpage-container {\n display: flex;\n flex-direction: row;\n height: 100%;\n width: 100%;\n align-items: stretch;\n justify-content: center;\n}\n\n.document-container \n{\n opacity: 1;\n flex-basis: 100%;\n max-width: 100%;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n transition: opacity 0.2s ease-in-out;\n contain: inline-size;\n}\n\n.hide\n{\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n}\n\n.document-container > .markdown-preview-view \n{\n margin: var(--sidebar-margin);\n margin-bottom: 0;\n width: 100%;\n width: -webkit-fill-available;\n width: -moz-available;\n width: fill-available;\n background-color: var(--background-primary);\n transition: background-color var(--color-fade-speed) ease-in-out;\n border-top-right-radius: var(--window-radius, var(--radius-m));\n border-top-left-radius: var(--window-radius, var(--radius-m));\n overflow-x: hidden !important;\n overflow-y: auto !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n contain: inline-size;\n}\n\n.document-container>.markdown-preview-view>.markdown-preview-sizer \n{\n padding-bottom: 80vh !important;\n width: 100% !important;\n max-width: var(--line-width) !important;\n flex-basis: var(--line-width) !important;\n transition: background-color var(--color-fade-speed) ease-in-out;\n contain: inline-size;\n}\n\n.view-content img:not([width]), .markdown-rendered img:not([width]) \n{\n max-width: 100%;\n outline: none;\n}\n\n/* If the markdown view is displaying a raw file or embed then increase it's size to make everything as large as possible */\n.document-container > .view-content.embed {\n display: flex;\n padding: 1em;\n height: 100%;\n width: 100%;\n align-items: center;\n justify-content: center;\n}\n\n.document-container > .view-content.embed > *\n{\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n}\n\n*:has(> :is(.math, table)) {\n overflow-x: auto !important;\n}\n\n/* For custom view exports */\n.document-container > .view-content\n{\n overflow-x: auto;\n contain: content;\n padding: 0;\n margin: 0;\n height: 100%;\n}\n\n/*#endregion */\n\n/*#region Loading */\n\n.scroll-highlight \n{\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1000;\n background-color: hsla(var(--color-accent-hsl),.25);\n opacity: 0;\n padding: 1em;\n inset: 50%;\n translate: -50% -50%;\n border-radius: var(--radius-s);\n}\n\n/*#endregion */\n"; + +// assets/theme-load.txt.js +var theme_load_txt_default = 'let theme = localStorage.getItem("theme") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");\nif (theme == "dark")\n{\n document.body.classList.add("theme-dark");\n document.body.classList.remove("theme-light");\n}\nelse\n{\n document.body.classList.add("theme-light");\n document.body.classList.remove("theme-dark");\n}\n\nif (window.innerWidth < 480) document.body.classList.add("is-phone");\nelse if (window.innerWidth < 768) document.body.classList.add("is-tablet");\nelse if (window.innerWidth < 1024) document.body.classList.add("is-small-screen");\nelse document.body.classList.add("is-large-screen");\n'; + +// assets/tinycolor.txt.js +var tinycolor_txt_default = 'function w3color(t, e) { return this instanceof w3color ? "object" == typeof t ? t : void (this.attachValues(toColorObject(t)), e && (e.style.backgroundColor = this.toRgbString())) : new w3color(t, e) } function toColorObject(t) { var e, r, n, $, a, s, o, f, h, u, l, c = [], b = [], d = []; if (e = (t = w3trim(t.toLowerCase())).substr(0, 1).toUpperCase(), r = t.substr(1), f = 1, "R" != e && "Y" != e && "G" != e && "C" != e && "B" != e && "M" != e && "W" != e || isNaN(r) || (6 != t.length || -1 != t.indexOf(",")) && (t = "ncol(" + t + ")"), 3 == t.length || 6 == t.length || isNaN(t) || (t = "ncol(" + t + ")"), t.indexOf(",") > 0 && -1 == t.indexOf("(") && (t = "ncol(" + t + ")"), "rgb" == t.substr(0, 3) || "hsl" == t.substr(0, 3) || "hwb" == t.substr(0, 3) || "ncol" == t.substr(0, 4) || "cmyk" == t.substr(0, 4)) { if ("ncol" == t.substr(0, 4) ? (4 == t.split(",").length && -1 == t.indexOf("ncola") && (t = t.replace("ncol", "ncola")), n = "ncol", t = t.substr(4)) : "cmyk" == t.substr(0, 4) ? (n = "cmyk", t = t.substr(4)) : (n = t.substr(0, 3), t = t.substr(3)), $ = 3, s = !1, "a" == t.substr(0, 1).toLowerCase() ? ($ = 4, s = !0, t = t.substr(1)) : "cmyk" == n && ($ = 4, 5 == t.split(",").length && ($ = 5, s = !0)), c = (t = (t = t.replace("(", "")).replace(")", "")).split(","), "rgb" == n) { if (c.length != $) return emptyObject(); for (a = 0; a < $; a++) { if (("" == c[a] || " " == c[a]) && (c[a] = "0"), c[a].indexOf("%") > -1 && (c[a] = c[a].replace("%", ""), c[a] = Number(c[a] / 100), a < 3 && (c[a] = Math.round(255 * c[a]))), isNaN(c[a])) return emptyObject(); parseInt(c[a]) > 255 && (c[a] = 255), a < 3 && (c[a] = parseInt(c[a])), 3 == a && Number(c[a]) > 1 && (c[a] = 1) } l = { r: c[0], g: c[1], b: c[2] }, !0 == s && (f = Number(c[3])) } if ("hsl" == n || "hwb" == n || "ncol" == n) { for (; c.length < $;)c.push("0"); for (("hsl" == n || "hwb" == n) && parseInt(c[0]) >= 360 && (c[0] = 0), a = 1; a < $; a++) { if (c[a].indexOf("%") > -1) { if (c[a] = c[a].replace("%", ""), c[a] = Number(c[a]), isNaN(c[a])) return emptyObject(); c[a] = c[a] / 100 } else c[a] = Number(c[a]); Number(c[a]) > 1 && (c[a] = 1), 0 > Number(c[a]) && (c[a] = 0) } "hsl" == n && (l = hslToRgb(c[0], c[1], c[2]), h = Number(c[0]), u = Number(c[1])), "hwb" == n && (l = hwbToRgb(c[0], c[1], c[2])), "ncol" == n && (l = ncolToRgb(c[0], c[1], c[2])), !0 == s && (f = Number(c[3])) } if ("cmyk" == n) { for (; c.length < $;)c.push("0"); for (a = 0; a < $; a++) { if (c[a].indexOf("%") > -1) { if (c[a] = c[a].replace("%", ""), c[a] = Number(c[a]), isNaN(c[a])) return emptyObject(); c[a] = c[a] / 100 } else c[a] = Number(c[a]); Number(c[a]) > 1 && (c[a] = 1), 0 > Number(c[a]) && (c[a] = 0) } l = cmykToRgb(c[0], c[1], c[2], c[3]), !0 == s && (f = Number(c[4])) } } else if ("ncs" == t.substr(0, 3)) l = ncsToRgb(t); else { for (a = 0, o = !1, b = getColorArr("names"); a < b.length; a++)if (t.toLowerCase() == b[a].toLowerCase()) { d = getColorArr("hexs"), o = !0, l = { r: parseInt(d[a].substr(0, 2), 16), g: parseInt(d[a].substr(2, 2), 16), b: parseInt(d[a].substr(4, 2), 16) }; break } if (!1 == o) { for (3 == (t = t.replace("#", "")).length && (t = t.substr(0, 1) + t.substr(0, 1) + t.substr(1, 1) + t.substr(1, 1) + t.substr(2, 1) + t.substr(2, 1)), a = 0; a < t.length; a++)if (!isHex(t.substr(a, 1))) return emptyObject(); for (a = 0, c[0] = parseInt(t.substr(0, 2), 16), c[1] = parseInt(t.substr(2, 2), 16), c[2] = parseInt(t.substr(4, 2), 16); a < 3; a++)if (isNaN(c[a])) return emptyObject(); l = { r: c[0], g: c[1], b: c[2] } } } return colorObject(l, f, h, u) } function colorObject(t, e, r, n) { var $, a, s, o, f, h, u; return t ? (null === e && (e = 1), $ = rgbToHsl(t.r, t.g, t.b), a = rgbToHwb(t.r, t.g, t.b), s = rgbToCmyk(t.r, t.g, t.b), h = r || $.h, u = n || $.s, o = hueToNcol(h), f = roundDecimals(f = { red: t.r, green: t.g, blue: t.b, hue: h, sat: u, lightness: $.l, whiteness: a.w, blackness: a.b, cyan: s.c, magenta: s.m, yellow: s.y, black: s.k, ncol: o, opacity: e, valid: !0 })) : emptyObject() } function emptyObject() { return { red: 0, green: 0, blue: 0, hue: 0, sat: 0, lightness: 0, whiteness: 0, blackness: 0, cyan: 0, magenta: 0, yellow: 0, black: 0, ncol: "R", opacity: 1, valid: !1 } } function getColorArr(t) { return "names" == t ? ["AliceBlue", "AntiqueWhite", "Aqua", "Aquamarine", "Azure", "Beige", "Bisque", "Black", "BlanchedAlmond", "Blue", "BlueViolet", "Brown", "BurlyWood", "CadetBlue", "Chartreuse", "Chocolate", "Coral", "CornflowerBlue", "Cornsilk", "Crimson", "Cyan", "DarkBlue", "DarkCyan", "DarkGoldenRod", "DarkGray", "DarkGrey", "DarkGreen", "DarkKhaki", "DarkMagenta", "DarkOliveGreen", "DarkOrange", "DarkOrchid", "DarkRed", "DarkSalmon", "DarkSeaGreen", "DarkSlateBlue", "DarkSlateGray", "DarkSlateGrey", "DarkTurquoise", "DarkViolet", "DeepPink", "DeepSkyBlue", "DimGray", "DimGrey", "DodgerBlue", "FireBrick", "FloralWhite", "ForestGreen", "Fuchsia", "Gainsboro", "GhostWhite", "Gold", "GoldenRod", "Gray", "Grey", "Green", "GreenYellow", "HoneyDew", "HotPink", "IndianRed", "Indigo", "Ivory", "Khaki", "Lavender", "LavenderBlush", "LawnGreen", "LemonChiffon", "LightBlue", "LightCoral", "LightCyan", "LightGoldenRodYellow", "LightGray", "LightGrey", "LightGreen", "LightPink", "LightSalmon", "LightSeaGreen", "LightSkyBlue", "LightSlateGray", "LightSlateGrey", "LightSteelBlue", "LightYellow", "Lime", "LimeGreen", "Linen", "Magenta", "Maroon", "MediumAquaMarine", "MediumBlue", "MediumOrchid", "MediumPurple", "MediumSeaGreen", "MediumSlateBlue", "MediumSpringGreen", "MediumTurquoise", "MediumVioletRed", "MidnightBlue", "MintCream", "MistyRose", "Moccasin", "NavajoWhite", "Navy", "OldLace", "Olive", "OliveDrab", "Orange", "OrangeRed", "Orchid", "PaleGoldenRod", "PaleGreen", "PaleTurquoise", "PaleVioletRed", "PapayaWhip", "PeachPuff", "Peru", "Pink", "Plum", "PowderBlue", "Purple", "RebeccaPurple", "Red", "RosyBrown", "RoyalBlue", "SaddleBrown", "Salmon", "SandyBrown", "SeaGreen", "SeaShell", "Sienna", "Silver", "SkyBlue", "SlateBlue", "SlateGray", "SlateGrey", "Snow", "SpringGreen", "SteelBlue", "Tan", "Teal", "Thistle", "Tomato", "Turquoise", "Violet", "Wheat", "White", "WhiteSmoke", "Yellow", "YellowGreen"] : "hexs" == t ? ["f0f8ff", "faebd7", "00ffff", "7fffd4", "f0ffff", "f5f5dc", "ffe4c4", "000000", "ffebcd", "0000ff", "8a2be2", "a52a2a", "deb887", "5f9ea0", "7fff00", "d2691e", "ff7f50", "6495ed", "fff8dc", "dc143c", "00ffff", "00008b", "008b8b", "b8860b", "a9a9a9", "a9a9a9", "006400", "bdb76b", "8b008b", "556b2f", "ff8c00", "9932cc", "8b0000", "e9967a", "8fbc8f", "483d8b", "2f4f4f", "2f4f4f", "00ced1", "9400d3", "ff1493", "00bfff", "696969", "696969", "1e90ff", "b22222", "fffaf0", "228b22", "ff00ff", "dcdcdc", "f8f8ff", "ffd700", "daa520", "808080", "808080", "008000", "adff2f", "f0fff0", "ff69b4", "cd5c5c", "4b0082", "fffff0", "f0e68c", "e6e6fa", "fff0f5", "7cfc00", "fffacd", "add8e6", "f08080", "e0ffff", "fafad2", "d3d3d3", "d3d3d3", "90ee90", "ffb6c1", "ffa07a", "20b2aa", "87cefa", "778899", "778899", "b0c4de", "ffffe0", "00ff00", "32cd32", "faf0e6", "ff00ff", "800000", "66cdaa", "0000cd", "ba55d3", "9370db", "3cb371", "7b68ee", "00fa9a", "48d1cc", "c71585", "191970", "f5fffa", "ffe4e1", "ffe4b5", "ffdead", "000080", "fdf5e6", "808000", "6b8e23", "ffa500", "ff4500", "da70d6", "eee8aa", "98fb98", "afeeee", "db7093", "ffefd5", "ffdab9", "cd853f", "ffc0cb", "dda0dd", "b0e0e6", "800080", "663399", "ff0000", "bc8f8f", "4169e1", "8b4513", "fa8072", "f4a460", "2e8b57", "fff5ee", "a0522d", "c0c0c0", "87ceeb", "6a5acd", "708090", "708090", "fffafa", "00ff7f", "4682b4", "d2b48c", "008080", "d8bfd8", "ff6347", "40e0d0", "ee82ee", "f5deb3", "ffffff", "f5f5f5", "ffff00", "9acd32"] : void 0 } function roundDecimals(t) { return t.red = Number(t.red.toFixed(0)), t.green = Number(t.green.toFixed(0)), t.blue = Number(t.blue.toFixed(0)), t.hue = Number(t.hue.toFixed(0)), t.sat = Number(t.sat.toFixed(2)), t.lightness = Number(t.lightness.toFixed(2)), t.whiteness = Number(t.whiteness.toFixed(2)), t.blackness = Number(t.blackness.toFixed(2)), t.cyan = Number(t.cyan.toFixed(2)), t.magenta = Number(t.magenta.toFixed(2)), t.yellow = Number(t.yellow.toFixed(2)), t.black = Number(t.black.toFixed(2)), t.ncol = t.ncol.substr(0, 1) + Math.round(Number(t.ncol.substr(1))), t.opacity = Number(t.opacity.toFixed(2)), t } function hslToRgb(t, e, r) { var n, $, a, s, o; return t /= 60, $ = r <= .5 ? r * (e + 1) : r + e - r * e, a = 255 * hueToRgb(n = 2 * r - $, $, t + 2), { r: a, g: s = 255 * hueToRgb(n, $, t), b: o = 255 * hueToRgb(n, $, t - 2) } } function hueToRgb(t, e, r) { return (r < 0 && (r += 6), r >= 6 && (r -= 6), r < 1) ? (e - t) * r + t : r < 3 ? e : r < 4 ? (e - t) * (4 - r) + t : t } function hwbToRgb(t, e, r) { var n, $, a, s = []; for ($ = hslToRgb(t, 1, .5), s[0] = $.r / 255, s[1] = $.g / 255, s[2] = $.b / 255, (a = e + r) > 1 && (e = Number((e / a).toFixed(2)), r = Number((r / a).toFixed(2))), n = 0; n < 3; n++)s[n] *= 1 - e - r, s[n] += e, s[n] = Number(255 * s[n]); return { r: s[0], g: s[1], b: s[2] } } function cmykToRgb(t, e, r, n) { var $, a, s; return $ = 255 - 255 * Math.min(1, t * (1 - n) + n), { r: $, g: a = 255 - 255 * Math.min(1, e * (1 - n) + n), b: s = 255 - 255 * Math.min(1, r * (1 - n) + n) } } function ncolToRgb(t, e, r) { var n, $, a; if (a = t, isNaN(t.substr(0, 1))) { if (n = t.substr(0, 1).toUpperCase(), "" == ($ = t.substr(1)) && ($ = 0), isNaN($ = Number($))) return !1; "R" == n && (a = 0 + .6 * $), "Y" == n && (a = 60 + .6 * $), "G" == n && (a = 120 + .6 * $), "C" == n && (a = 180 + .6 * $), "B" == n && (a = 240 + .6 * $), "M" == n && (a = 300 + .6 * $), "W" == n && (a = 0, e = 1 - $ / 100, r = $ / 100) } return hwbToRgb(a, e, r) } function hueToNcol(t) { for (; t >= 360;)t -= 360; return t < 60 ? "R" + t / .6 : t < 120 ? "Y" + (t - 60) / .6 : t < 180 ? "G" + (t - 120) / .6 : t < 240 ? "C" + (t - 180) / .6 : t < 300 ? "B" + (t - 240) / .6 : t < 360 ? "M" + (t - 300) / .6 : void 0 } function ncsToRgb(t) { var e, r, n, $, a, s, o, f, h, u, l, c, b, d, g, _, m, p; return -1 == (t = (t = (t = (t = (t = w3trim(t).toUpperCase()).replace("(", "")).replace(")", "")).replace("NCS", "NCS ")).replace(/ /g, " ")).indexOf("NCS") && (t = "NCS " + t), null !== (t = t.match(/^(?:NCS|NCS\\sS)\\s(\\d{2})(\\d{2})-(N|[A-Z])(\\d{2})?([A-Z])?$/)) && (e = parseInt(t[1], 10), r = parseInt(t[2], 10), ("N" == (n = t[3]) || "Y" == n || "R" == n || "B" == n || "G" == n) && ($ = parseInt(t[4], 10) || 0, "N" !== n ? (a = 1.05 * e - 5.25, s = r, "Y" === n && $ <= 60 ? o = 1 : "Y" === n && $ > 60 || "R" === n && $ <= 80 ? o = (Math.sqrt(14884 - Math.pow(f = "Y" === n ? $ - 60 : $ + 40, 2)) - 22) / 100 : "R" === n && $ > 80 || "B" === n ? o = 0 : "G" === n && (o = (Math.sqrt(33800 - Math.pow(f = $ - 170, 2)) - 70) / 100), "Y" === n && $ <= 80 ? h = 0 : "Y" === n && $ > 80 || "R" === n && $ <= 60 ? h = (104 - Math.sqrt(11236 - Math.pow(f = "Y" === n ? $ - 80 + 20.5 : $ + 20 + 20.5, 2))) / 100 : "R" === n && $ > 60 || "B" === n && $ <= 80 ? h = (Math.sqrt(1e4 - Math.pow(f = "R" === n ? $ - 60 - 60 : $ + 40 - 60, 2)) - 10) / 100 : "B" === n && $ > 80 || "G" === n && $ <= 40 ? h = (122 - Math.sqrt(19881 - Math.pow(f = "B" === n ? $ - 80 - 131 : $ + 20 - 131, 2))) / 100 : "G" === n && $ > 40 && (h = 0), "Y" === n ? green1 = (85 - .85 * $) / 100 : "R" === n && $ <= 60 ? green1 = 0 : "R" === n && $ > 60 ? green1 = (67.5 - Math.sqrt(5776 - Math.pow(f = $ - 60 + 35, 2))) / 100 : "B" === n && $ <= 60 ? green1 = (6.5 + Math.sqrt(7044.5 - Math.pow(f = 1 * $ - 68.5, 2))) / 100 : "B" === n && $ > 60 || "G" === n && $ <= 60 ? green1 = .9 : "G" === n && $ > 60 && (green1 = (90 - 1 / 8 * (f = $ - 60)) / 100), u = ((f = (o + green1 + h) / 3) - o) * (100 - s) / 100 + o, l = (f - green1) * (100 - s) / 100 + green1, c = (f - h) * (100 - s) / 100 + h, d = 1 / (b = u > l && u > c ? u : l > u && l > c ? l : c > u && c > l ? c : (u + l + c) / 3), _ = parseInt(u * d * (100 - a) / 100 * 255, 10), m = parseInt(l * d * (100 - a) / 100 * 255, 10), p = parseInt(c * d * (100 - a) / 100 * 255, 10), _ > 255 && (_ = 255), m > 255 && (m = 255), p > 255 && (p = 255), _ < 0 && (_ = 0), m < 0 && (m = 0), p < 0 && (p = 0)) : ((g = parseInt((1 - e / 100) * 255, 10)) > 255 && (g = 255), g < 0 && (g = 0), _ = g, m = g, p = g), { r: _, g: m, b: p })) } function rgbToHsl(t, e, r) { var n, $, a, s, o, f, h, u = []; for (a = 0, u[0] = t / 255, u[1] = e / 255, u[2] = r / 255, n = u[0], $ = u[0], f = 0; a < u.length - 1; a++)u[a + 1] <= n && (n = u[a + 1]), u[a + 1] >= $ && ($ = u[a + 1], f = a + 1); return 0 == f && (h = (u[1] - u[2]) / ($ - n)), 1 == f && (h = 2 + (u[2] - u[0]) / ($ - n)), 2 == f && (h = 4 + (u[0] - u[1]) / ($ - n)), isNaN(h) && (h = 0), (h *= 60) < 0 && (h += 360), s = (n + $) / 2, { h: h, s: o = n == $ ? 0 : s < .5 ? ($ - n) / ($ + n) : ($ - n) / (2 - $ - n), l: s } } function rgbToHwb(t, e, r) { var n, $, a; return t /= 255, e /= 255, r /= 255, n = 0 == (chroma = (max = Math.max(t, e, r)) - (min = Math.min(t, e, r))) ? 0 : t == max ? (e - r) / chroma % 6 * 360 : e == max ? ((r - t) / chroma + 2) % 6 * 360 : ((t - e) / chroma + 4) % 6 * 360, { h: n, w: $ = min, b: a = 1 - max } } function rgbToCmyk(t, e, r) { var n, $, a, s; return t /= 255, e /= 255, r /= 255, 1 == (s = 1 - (max = Math.max(t, e, r))) ? (n = 0, $ = 0, a = 0) : (n = (1 - t - s) / (1 - s), $ = (1 - e - s) / (1 - s), a = (1 - r - s) / (1 - s)), { c: n, m: $, y: a, k: s } } function toHex(t) { for (var e = t.toString(16); e.length < 2;)e = "0" + e; return e } function cl(t) { console.log(t) } function w3trim(t) { return t.replace(/^\\s+|\\s+$/g, "") } function isHex(t) { return "0123456789ABCDEFabcdef".indexOf(t) > -1 } function w3SetColorsByAttribute() { var t, e, r; for (e = 0, t = document.getElementsByTagName("*"); e < t.length; e++)(r = t[e].getAttribute("data-w3-color")) && (t[e].style.backgroundColor = w3color(r).toRgbString()) } !function (t, e) { "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).tinycolor = e() }(this, function () { "use strict"; function t(e) { return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t })(e) } var e = /^\\s+/, r = /\\s+$/; function n($, a) { if (a = a || {}, ($ = $ || "") instanceof n) return $; if (!(this instanceof n)) return new n($, a); var s, o, f, h, u, l, c, b, d, g, _, m, p, y, v, S, R, H, B, T, O, L, M, q = (s = $, o = { r: 0, g: 0, b: 0 }, f = 1, h = null, u = null, l = null, c = !1, b = !1, "string" == typeof s && (s = function t(n) { n = n.replace(e, "").replace(r, "").toLowerCase(); var $, a = !1; if (k[n]) n = k[n], a = !0; else if ("transparent" == n) return { r: 0, g: 0, b: 0, a: 0, format: "name" }; return ($ = F.rgb.exec(n)) ? { r: $[1], g: $[2], b: $[3] } : ($ = F.rgba.exec(n)) ? { r: $[1], g: $[2], b: $[3], a: $[4] } : ($ = F.hsl.exec(n)) ? { h: $[1], s: $[2], l: $[3] } : ($ = F.hsla.exec(n)) ? { h: $[1], s: $[2], l: $[3], a: $[4] } : ($ = F.hsv.exec(n)) ? { h: $[1], s: $[2], v: $[3] } : ($ = F.hsva.exec(n)) ? { h: $[1], s: $[2], v: $[3], a: $[4] } : ($ = F.hex8.exec(n)) ? { r: A($[1]), g: A($[2]), b: A($[3]), a: G($[4]), format: a ? "name" : "hex8" } : ($ = F.hex6.exec(n)) ? { r: A($[1]), g: A($[2]), b: A($[3]), format: a ? "name" : "hex" } : ($ = F.hex4.exec(n)) ? { r: A($[1] + "" + $[1]), g: A($[2] + "" + $[2]), b: A($[3] + "" + $[3]), a: G($[4] + "" + $[4]), format: a ? "name" : "hex8" } : !!($ = F.hex3.exec(n)) && { r: A($[1] + "" + $[1]), g: A($[2] + "" + $[2]), b: A($[3] + "" + $[3]), format: a ? "name" : "hex" } }(s)), "object" == t(s) && (D(s.r) && D(s.g) && D(s.b) ? (o = (d = s.r, g = s.g, _ = s.b, { r: 255 * x(d, 255), g: 255 * x(g, 255), b: 255 * x(_, 255) }), c = !0, b = "%" === String(s.r).substr(-1) ? "prgb" : "rgb") : D(s.h) && D(s.s) && D(s.v) ? (h = C(s.s), u = C(s.v), o = (m = s.h, p = h, y = u, m = 6 * x(m, 360), p = x(p, 100), y = x(y, 100), v = Math.floor(m), S = m - v, R = y * (1 - p), H = y * (1 - S * p), B = y * (1 - (1 - S) * p), T = v % 6, O = [y, H, R, R, B, y][T], L = [B, y, y, H, R, R][T], M = [R, R, B, y, y, H][T], { r: 255 * O, g: 255 * L, b: 255 * M }), c = !0, b = "hsv") : D(s.h) && D(s.s) && D(s.l) && (h = C(s.s), l = C(s.l), o = function t(e, r, n) { var $, a, s; function o(t, e, r) { return (r < 0 && (r += 1), r > 1 && (r -= 1), r < 1 / 6) ? t + (e - t) * 6 * r : r < .5 ? e : r < 2 / 3 ? t + (e - t) * (2 / 3 - r) * 6 : t } if (e = x(e, 360), r = x(r, 100), n = x(n, 100), 0 === r) $ = a = s = n; else { var f = n < .5 ? n * (1 + r) : n + r - n * r, h = 2 * n - f; $ = o(h, f, e + 1 / 3), a = o(h, f, e), s = o(h, f, e - 1 / 3) } return { r: 255 * $, g: 255 * a, b: 255 * s } }(s.h, h, l), c = !0, b = "hsl"), s.hasOwnProperty("a") && (f = s.a)), f = w(f), { ok: c, format: s.format || b, r: Math.min(255, Math.max(o.r, 0)), g: Math.min(255, Math.max(o.g, 0)), b: Math.min(255, Math.max(o.b, 0)), a: f }); this._originalInput = $, this._r = q.r, this._g = q.g, this._b = q.b, this._a = q.a, this._roundA = Math.round(100 * this._a) / 100, this._format = a.format || q.format, this._gradientType = a.gradientType, this._r < 1 && (this._r = Math.round(this._r)), this._g < 1 && (this._g = Math.round(this._g)), this._b < 1 && (this._b = Math.round(this._b)), this._ok = q.ok } function $(t, e, r) { t = x(t, 255), e = x(e, 255), r = x(r, 255); var n, $, a = Math.max(t, e, r), s = Math.min(t, e, r), o = (a + s) / 2; if (a == s) n = $ = 0; else { var f = a - s; switch ($ = o > .5 ? f / (2 - a - s) : f / (a + s), a) { case t: n = (e - r) / f + (e < r ? 6 : 0); break; case e: n = (r - t) / f + 2; break; case r: n = (t - e) / f + 4 }n /= 6 } return { h: n, s: $, l: o } } function a(t, e, r) { t = x(t, 255), e = x(e, 255), r = x(r, 255); var n, $, a = Math.max(t, e, r), s = Math.min(t, e, r), o = a - s; if ($ = 0 === a ? 0 : o / a, a == s) n = 0; else { switch (a) { case t: n = (e - r) / o + (e < r ? 6 : 0); break; case e: n = (r - t) / o + 2; break; case r: n = (t - e) / o + 4 }n /= 6 } return { h: n, s: $, v: a } } function s(t, e, r, n) { var $ = [R(Math.round(t).toString(16)), R(Math.round(e).toString(16)), R(Math.round(r).toString(16))]; return n && $[0].charAt(0) == $[0].charAt(1) && $[1].charAt(0) == $[1].charAt(1) && $[2].charAt(0) == $[2].charAt(1) ? $[0].charAt(0) + $[1].charAt(0) + $[2].charAt(0) : $.join("") } function o(t, e, r, n) { return [R(H(n)), R(Math.round(t).toString(16)), R(Math.round(e).toString(16)), R(Math.round(r).toString(16))].join("") } function f(t, e) { e = 0 === e ? 0 : e || 10; var r = n(t).toHsl(); return r.s -= e / 100, r.s = S(r.s), n(r) } function h(t, e) { e = 0 === e ? 0 : e || 10; var r = n(t).toHsl(); return r.s += e / 100, r.s = S(r.s), n(r) } function u(t) { return n(t).desaturate(100) } function l(t, e) { e = 0 === e ? 0 : e || 10; var r = n(t).toHsl(); return r.l += e / 100, r.l = S(r.l), n(r) } function c(t, e) { e = 0 === e ? 0 : e || 10; var r = n(t).toRgb(); return r.r = Math.max(0, Math.min(255, r.r - Math.round(-(255 * (e / 100))))), r.g = Math.max(0, Math.min(255, r.g - Math.round(-(255 * (e / 100))))), r.b = Math.max(0, Math.min(255, r.b - Math.round(-(255 * (e / 100))))), n(r) } function b(t, e) { e = 0 === e ? 0 : e || 10; var r = n(t).toHsl(); return r.l -= e / 100, r.l = S(r.l), n(r) } function d(t, e) { var r = n(t).toHsl(), $ = (r.h + e) % 360; return r.h = $ < 0 ? 360 + $ : $, n(r) } function g(t) { var e = n(t).toHsl(); return e.h = (e.h + 180) % 360, n(e) } function _(t, e) { if (isNaN(e) || e <= 0) throw Error("Argument to polyad must be a positive number"); for (var r = n(t).toHsl(), $ = [n(t)], a = 360 / e, s = 1; s < e; s++)$.push(n({ h: (r.h + s * a) % 360, s: r.s, l: r.l })); return $ } function m(t) { var e = n(t).toHsl(), r = e.h; return [n(t), n({ h: (r + 72) % 360, s: e.s, l: e.l }), n({ h: (r + 216) % 360, s: e.s, l: e.l })] } function p(t, e, r) { e = e || 6, r = r || 30; var $ = n(t).toHsl(), a = 360 / r, s = [n(t)]; for ($.h = ($.h - (a * e >> 1) + 720) % 360; --e;)$.h = ($.h + a) % 360, s.push(n($)); return s } function y(t, e) { e = e || 6; for (var r = n(t).toHsv(), $ = r.h, a = r.s, s = r.v, o = [], f = 1 / e; e--;)o.push(n({ h: $, s: a, v: s })), s = (s + f) % 1; return o } n.prototype = { isDark: function t() { return 128 > this.getBrightness() }, isLight: function t() { return !this.isDark() }, isValid: function t() { return this._ok }, getOriginalInput: function t() { return this._originalInput }, getFormat: function t() { return this._format }, getAlpha: function t() { return this._a }, getBrightness: function t() { var e = this.toRgb(); return (299 * e.r + 587 * e.g + 114 * e.b) / 1e3 }, getLuminance: function t() { var e, r, n, $, a, s, o = this.toRgb(); return e = o.r / 255, r = o.g / 255, n = o.b / 255, $ = e <= .03928 ? e / 12.92 : Math.pow((e + .055) / 1.055, 2.4), .2126 * $ + .7152 * (a = r <= .03928 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4)) + .0722 * (s = n <= .03928 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)) }, setAlpha: function t(e) { return this._a = w(e), this._roundA = Math.round(100 * this._a) / 100, this }, toHsv: function t() { var e = a(this._r, this._g, this._b); return { h: 360 * e.h, s: e.s, v: e.v, a: this._a } }, toHsvString: function t() { var e = a(this._r, this._g, this._b), r = Math.round(360 * e.h), n = Math.round(100 * e.s), $ = Math.round(100 * e.v); return 1 == this._a ? "hsv(" + r + ", " + n + "%, " + $ + "%)" : "hsva(" + r + ", " + n + "%, " + $ + "%, " + this._roundA + ")" }, toHsl: function t() { var e = $(this._r, this._g, this._b); return { h: 360 * e.h, s: e.s, l: e.l, a: this._a } }, toHslString: function t() { var e = $(this._r, this._g, this._b), r = Math.round(360 * e.h), n = Math.round(100 * e.s), a = Math.round(100 * e.l); return 1 == this._a ? "hsl(" + r + ", " + n + "%, " + a + "%)" : "hsla(" + r + ", " + n + "%, " + a + "%, " + this._roundA + ")" }, toHex: function t(e) { return s(this._r, this._g, this._b, e) }, toHexString: function t(e) { return "#" + this.toHex(e) }, toHexNumber: function t() { return Number("0x" + this.toHex()) }, toHex8: function t(e) { var r, n, $, a, s, o; return r = this._r, n = this._g, $ = this._b, a = this._a, s = e, o = [R(Math.round(r).toString(16)), R(Math.round(n).toString(16)), R(Math.round($).toString(16)), R(H(a))], s && o[0].charAt(0) == o[0].charAt(1) && o[1].charAt(0) == o[1].charAt(1) && o[2].charAt(0) == o[2].charAt(1) && o[3].charAt(0) == o[3].charAt(1) ? o[0].charAt(0) + o[1].charAt(0) + o[2].charAt(0) + o[3].charAt(0) : o.join("") }, toHex8String: function t(e) { return "#" + this.toHex8(e) }, toRgb: function t() { return { r: Math.round(this._r), g: Math.round(this._g), b: Math.round(this._b), a: this._a } }, toRgbString: function t() { return 1 == this._a ? "rgb(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ")" : "rgba(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ", " + this._roundA + ")" }, toPercentageRgb: function t() { return { r: Math.round(100 * x(this._r, 255)) + "%", g: Math.round(100 * x(this._g, 255)) + "%", b: Math.round(100 * x(this._b, 255)) + "%", a: this._a } }, toPercentageRgbString: function t() { return 1 == this._a ? "rgb(" + Math.round(100 * x(this._r, 255)) + "%, " + Math.round(100 * x(this._g, 255)) + "%, " + Math.round(100 * x(this._b, 255)) + "%)" : "rgba(" + Math.round(100 * x(this._r, 255)) + "%, " + Math.round(100 * x(this._g, 255)) + "%, " + Math.round(100 * x(this._b, 255)) + "%, " + this._roundA + ")" }, toName: function t() { return 0 === this._a ? "transparent" : !(this._a < 1) && !!v[s(this._r, this._g, this._b, !0)] }, toFilter: function t(e) { var r = "#" + o(this._r, this._g, this._b, this._a), $ = r, a = this._gradientType ? "GradientType = 1, " : ""; if (e) { var s = n(e); $ = "#" + o(s._r, s._g, s._b, s._a) } return "progid:DXImageTransform.Microsoft.gradient(" + a + "startColorstr=" + r + ",endColorstr=" + $ + ")" }, toString: function t(e) { var r = !!e; e = e || this._format; var n = !1, $ = this._a < 1 && this._a >= 0; return !r && $ && ("hex" === e || "hex6" === e || "hex3" === e || "hex4" === e || "hex8" === e || "name" === e) ? "name" === e && 0 === this._a ? this.toName() : this.toRgbString() : ("rgb" === e && (n = this.toRgbString()), "prgb" === e && (n = this.toPercentageRgbString()), ("hex" === e || "hex6" === e) && (n = this.toHexString()), "hex3" === e && (n = this.toHexString(!0)), "hex4" === e && (n = this.toHex8String(!0)), "hex8" === e && (n = this.toHex8String()), "name" === e && (n = this.toName()), "hsl" === e && (n = this.toHslString()), "hsv" === e && (n = this.toHsvString()), n || this.toHexString()) }, clone: function t() { return n(this.toString()) }, _applyModification: function t(e, r) { var n = e.apply(null, [this].concat([].slice.call(r))); return this._r = n._r, this._g = n._g, this._b = n._b, this.setAlpha(n._a), this }, lighten: function t() { return this._applyModification(l, arguments) }, brighten: function t() { return this._applyModification(c, arguments) }, darken: function t() { return this._applyModification(b, arguments) }, desaturate: function t() { return this._applyModification(f, arguments) }, saturate: function t() { return this._applyModification(h, arguments) }, greyscale: function t() { return this._applyModification(u, arguments) }, spin: function t() { return this._applyModification(d, arguments) }, _applyCombination: function t(e, r) { return e.apply(null, [this].concat([].slice.call(r))) }, analogous: function t() { return this._applyCombination(p, arguments) }, complement: function t() { return this._applyCombination(g, arguments) }, monochromatic: function t() { return this._applyCombination(y, arguments) }, splitcomplement: function t() { return this._applyCombination(m, arguments) }, triad: function t() { return this._applyCombination(_, [3]) }, tetrad: function t() { return this._applyCombination(_, [4]) } }, n.fromRatio = function (e, r) { if ("object" == t(e)) { var $ = {}; for (var a in e) e.hasOwnProperty(a) && ("a" === a ? $[a] = e[a] : $[a] = C(e[a])); e = $ } return n(e, r) }, n.equals = function (t, e) { return !!t && !!e && n(t).toRgbString() == n(e).toRgbString() }, n.random = function () { return n.fromRatio({ r: Math.random(), g: Math.random(), b: Math.random() }) }, n.mix = function (t, e, r) { r = 0 === r ? 0 : r || 50; var $ = n(t).toRgb(), a = n(e).toRgb(), s = r / 100; return n({ r: (a.r - $.r) * s + $.r, g: (a.g - $.g) * s + $.g, b: (a.b - $.b) * s + $.b, a: (a.a - $.a) * s + $.a }) }, n.readability = function (t, e) { var r = n(t), $ = n(e); return (Math.max(r.getLuminance(), $.getLuminance()) + .05) / (Math.min(r.getLuminance(), $.getLuminance()) + .05) }, n.isReadable = function (t, e, r) { var $, a, s, o, f, h = n.readability(t, e); switch (a = !1, ($ = (s = r, o = ((s = s || { level: "AA", size: "small" }).level || "AA").toUpperCase(), f = (s.size || "small").toLowerCase(), "AA" !== o && "AAA" !== o && (o = "AA"), "small" !== f && "large" !== f && (f = "small"), { level: o, size: f })).level + $.size) { case "AAsmall": case "AAAlarge": a = h >= 4.5; break; case "AAlarge": a = h >= 3; break; case "AAAsmall": a = h >= 7 }return a }, n.mostReadable = function (t, e, r) { var $, a, s, o, f = null, h = 0; a = (r = r || {}).includeFallbackColors, s = r.level, o = r.size; for (var u = 0; u < e.length; u++)($ = n.readability(t, e[u])) > h && (h = $, f = n(e[u])); return n.isReadable(t, f, { level: s, size: o }) || !a ? f : (r.includeFallbackColors = !1, n.mostReadable(t, ["#fff", "#000"], r)) }; var k = n.names = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000", blanchedalmond: "ffebcd", blue: "00f", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", burntsienna: "ea7e5d", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "0ff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkgrey: "a9a9a9", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "f0f", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", grey: "808080", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgreen: "90ee90", lightgrey: "d3d3d3", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "789", lightslategrey: "789", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "0f0", limegreen: "32cd32", linen: "faf0e6", magenta: "f0f", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370db", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "db7093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", rebeccapurple: "663399", red: "f00", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "fff", whitesmoke: "f5f5f5", yellow: "ff0", yellowgreen: "9acd32" }, v = n.hexNames = function t(e) { var r = {}; for (var n in e) e.hasOwnProperty(n) && (r[e[n]] = n); return r }(k); function w(t) { return (isNaN(t = parseFloat(t)) || t < 0 || t > 1) && (t = 1), t } function x(t, e) { r = t, "string" == typeof r && -1 != r.indexOf(".") && 1 === parseFloat(r) && (t = "100%"); var r, n, $ = (n = t, "string" == typeof n && -1 != n.indexOf("%")); return (t = Math.min(e, Math.max(0, parseFloat(t))), $ && (t = parseInt(t * e, 10) / 100), 1e-6 > Math.abs(t - e)) ? 1 : t % e / parseFloat(e) } function S(t) { return Math.min(1, Math.max(0, t)) } function A(t) { return parseInt(t, 16) } function R(t) { return 1 == t.length ? "0" + t : "" + t } function C(t) { return t <= 1 && (t = 100 * t + "%"), t } function H(t) { return Math.round(255 * parseFloat(t)).toString(16) } function G(t) { return A(t) / 255 } var B, T, O, F = (T = "[\\\\s|\\\\(]+(" + (B = "(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)") + ")[,|\\\\s]+(" + B + ")[,|\\\\s]+(" + B + ")\\\\s*\\\\)?", O = "[\\\\s|\\\\(]+(" + B + ")[,|\\\\s]+(" + B + ")[,|\\\\s]+(" + B + ")[,|\\\\s]+(" + B + ")\\\\s*\\\\)?", { CSS_UNIT: RegExp(B), rgb: RegExp("rgb" + T), rgba: RegExp("rgba" + O), hsl: RegExp("hsl" + T), hsla: RegExp("hsla" + O), hsv: RegExp("hsv" + T), hsva: RegExp("hsva" + O), hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }); function D(t) { return !!F.CSS_UNIT.exec(t) } return n }), w3color.prototype = { toRgbString: function () { return "rgb(" + this.red + ", " + this.green + ", " + this.blue + ")" }, toRgbaString: function () { return "rgba(" + this.red + ", " + this.green + ", " + this.blue + ", " + this.opacity + ")" }, toHwbString: function () { return "hwb(" + this.hue + ", " + Math.round(100 * this.whiteness) + "%, " + Math.round(100 * this.blackness) + "%)" }, toHwbStringDecimal: function () { return "hwb(" + this.hue + ", " + this.whiteness + ", " + this.blackness + ")" }, toHwbaString: function () { return "hwba(" + this.hue + ", " + Math.round(100 * this.whiteness) + "%, " + Math.round(100 * this.blackness) + "%, " + this.opacity + ")" }, toHslString: function () { return "hsl(" + this.hue + ", " + Math.round(100 * this.sat) + "%, " + Math.round(100 * this.lightness) + "%)" }, toHslStringDecimal: function () { return "hsl(" + this.hue + ", " + this.sat + ", " + this.lightness + ")" }, toHslaString: function () { return "hsla(" + this.hue + ", " + Math.round(100 * this.sat) + "%, " + Math.round(100 * this.lightness) + "%, " + this.opacity + ")" }, toCmykString: function () { return "cmyk(" + Math.round(100 * this.cyan) + "%, " + Math.round(100 * this.magenta) + "%, " + Math.round(100 * this.yellow) + "%, " + Math.round(100 * this.black) + "%)" }, toCmykStringDecimal: function () { return "cmyk(" + this.cyan + ", " + this.magenta + ", " + this.yellow + ", " + this.black + ")" }, toNcolString: function () { return this.ncol + ", " + Math.round(100 * this.whiteness) + "%, " + Math.round(100 * this.blackness) + "%" }, toNcolStringDecimal: function () { return this.ncol + ", " + this.whiteness + ", " + this.blackness }, toNcolaString: function () { return this.ncol + ", " + Math.round(100 * this.whiteness) + "%, " + Math.round(100 * this.blackness) + "%, " + this.opacity }, toName: function () { var t, e, r, n = getColorArr("hexs"); for (i = 0; i < n.length; i++)if (t = parseInt(n[i].substr(0, 2), 16), e = parseInt(n[i].substr(2, 2), 16), r = parseInt(n[i].substr(4, 2), 16), this.red == t && this.green == e && this.blue == r) return getColorArr("names")[i]; return "" }, toHexString: function () { var t = toHex(this.red), e = toHex(this.green), r = toHex(this.blue); return "#" + t + e + r }, toRgb: function () { return { r: this.red, g: this.green, b: this.blue, a: this.opacity } }, toHsl: function () { return { h: this.hue, s: this.sat, l: this.lightness, a: this.opacity } }, toHwb: function () { return { h: this.hue, w: this.whiteness, b: this.blackness, a: this.opacity } }, toCmyk: function () { return { c: this.cyan, m: this.magenta, y: this.yellow, k: this.black, a: this.opacity } }, toNcol: function () { return { ncol: this.ncol, w: this.whiteness, b: this.blackness, a: this.opacity } }, isDark: function (t) { return (299 * this.red + 587 * this.green + 114 * this.blue) / 1e3 < (t || 128) }, saturate: function (t) { var e, r, n; e = t / 100 || .1, this.sat += e, this.sat > 1 && (this.sat = 1), n = colorObject(r = hslToRgb(this.hue, this.sat, this.lightness), this.opacity, this.hue, this.sat), this.attachValues(n) }, desaturate: function (t) { var e, r, n; e = t / 100 || .1, this.sat -= e, this.sat < 0 && (this.sat = 0), n = colorObject(r = hslToRgb(this.hue, this.sat, this.lightness), this.opacity, this.hue, this.sat), this.attachValues(n) }, lighter: function (t) { var e, r, n; e = t / 100 || .1, this.lightness += e, this.lightness > 1 && (this.lightness = 1), n = colorObject(r = hslToRgb(this.hue, this.sat, this.lightness), this.opacity, this.hue, this.sat), this.attachValues(n) }, darker: function (t) { var e, r, n; e = t / 100 || .1, this.lightness -= e, this.lightness < 0 && (this.lightness = 0), n = colorObject(r = hslToRgb(this.hue, this.sat, this.lightness), this.opacity, this.hue, this.sat), this.attachValues(n) }, attachValues: function (t) { this.red = t.red, this.green = t.green, this.blue = t.blue, this.hue = t.hue, this.sat = t.sat, this.lightness = t.lightness, this.whiteness = t.whiteness, this.blackness = t.blackness, this.cyan = t.cyan, this.magenta = t.magenta, this.yellow = t.yellow, this.black = t.black, this.ncol = t.ncol, this.opacity = t.opacity, this.valid = t.valid } };\n'; + +// assets/pixi.txt.js +var pixi_txt_default = 'var qd=Object.defineProperty,Kd=Object.defineProperties;var Zd=Object.getOwnPropertyDescriptors;var ir=Object.getOwnPropertySymbols;var $h=Object.prototype.hasOwnProperty,jh=Object.prototype.propertyIsEnumerable;var Wh=(m,et,pt)=>et in m?qd(m,et,{enumerable:!0,configurable:!0,writable:!0,value:pt}):m[et]=pt,bt=(m,et)=>{for(var pt in et||(et={}))$h.call(et,pt)&&Wh(m,pt,et[pt]);if(ir)for(var pt of ir(et))jh.call(et,pt)&&Wh(m,pt,et[pt]);return m},Qi=(m,et)=>Kd(m,Zd(et));var zn=(m,et)=>{var pt={};for(var Rt in m)$h.call(m,Rt)&&et.indexOf(Rt)<0&&(pt[Rt]=m[Rt]);if(m!=null&&ir)for(var Rt of ir(m))et.indexOf(Rt)<0&&jh.call(m,Rt)&&(pt[Rt]=m[Rt]);return pt};/*!\n * pixi.js - v7.2.4\n * Compiled Thu, 06 Apr 2023 19:36:45 UTC\n *\n * pixi.js is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */var PIXI=function(m){var zh;"use strict";var et=(e=>(e[e.WEBGL_LEGACY=0]="WEBGL_LEGACY",e[e.WEBGL=1]="WEBGL",e[e.WEBGL2=2]="WEBGL2",e))(et||{}),pt=(e=>(e[e.UNKNOWN=0]="UNKNOWN",e[e.WEBGL=1]="WEBGL",e[e.CANVAS=2]="CANVAS",e))(pt||{}),Rt=(e=>(e[e.COLOR=16384]="COLOR",e[e.DEPTH=256]="DEPTH",e[e.STENCIL=1024]="STENCIL",e))(Rt||{}),G=(e=>(e[e.NORMAL=0]="NORMAL",e[e.ADD=1]="ADD",e[e.MULTIPLY=2]="MULTIPLY",e[e.SCREEN=3]="SCREEN",e[e.OVERLAY=4]="OVERLAY",e[e.DARKEN=5]="DARKEN",e[e.LIGHTEN=6]="LIGHTEN",e[e.COLOR_DODGE=7]="COLOR_DODGE",e[e.COLOR_BURN=8]="COLOR_BURN",e[e.HARD_LIGHT=9]="HARD_LIGHT",e[e.SOFT_LIGHT=10]="SOFT_LIGHT",e[e.DIFFERENCE=11]="DIFFERENCE",e[e.EXCLUSION=12]="EXCLUSION",e[e.HUE=13]="HUE",e[e.SATURATION=14]="SATURATION",e[e.COLOR=15]="COLOR",e[e.LUMINOSITY=16]="LUMINOSITY",e[e.NORMAL_NPM=17]="NORMAL_NPM",e[e.ADD_NPM=18]="ADD_NPM",e[e.SCREEN_NPM=19]="SCREEN_NPM",e[e.NONE=20]="NONE",e[e.SRC_OVER=0]="SRC_OVER",e[e.SRC_IN=21]="SRC_IN",e[e.SRC_OUT=22]="SRC_OUT",e[e.SRC_ATOP=23]="SRC_ATOP",e[e.DST_OVER=24]="DST_OVER",e[e.DST_IN=25]="DST_IN",e[e.DST_OUT=26]="DST_OUT",e[e.DST_ATOP=27]="DST_ATOP",e[e.ERASE=26]="ERASE",e[e.SUBTRACT=28]="SUBTRACT",e[e.XOR=29]="XOR",e))(G||{}),zt=(e=>(e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN",e))(zt||{}),C=(e=>(e[e.RGBA=6408]="RGBA",e[e.RGB=6407]="RGB",e[e.RG=33319]="RG",e[e.RED=6403]="RED",e[e.RGBA_INTEGER=36249]="RGBA_INTEGER",e[e.RGB_INTEGER=36248]="RGB_INTEGER",e[e.RG_INTEGER=33320]="RG_INTEGER",e[e.RED_INTEGER=36244]="RED_INTEGER",e[e.ALPHA=6406]="ALPHA",e[e.LUMINANCE=6409]="LUMINANCE",e[e.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",e[e.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",e[e.DEPTH_STENCIL=34041]="DEPTH_STENCIL",e))(C||{}),Re=(e=>(e[e.TEXTURE_2D=3553]="TEXTURE_2D",e[e.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",e[e.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",e[e.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",e[e.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",e[e.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",e[e.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",e))(Re||{}),k=(e=>(e[e.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",e[e.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",e[e.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",e[e.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",e[e.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",e[e.UNSIGNED_INT=5125]="UNSIGNED_INT",e[e.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",e[e.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",e[e.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",e[e.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",e[e.BYTE=5120]="BYTE",e[e.SHORT=5122]="SHORT",e[e.INT=5124]="INT",e[e.FLOAT=5126]="FLOAT",e[e.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",e[e.HALF_FLOAT=36193]="HALF_FLOAT",e))(k||{}),ts=(e=>(e[e.FLOAT=0]="FLOAT",e[e.INT=1]="INT",e[e.UINT=2]="UINT",e))(ts||{}),ee=(e=>(e[e.NEAREST=0]="NEAREST",e[e.LINEAR=1]="LINEAR",e))(ee||{}),ie=(e=>(e[e.CLAMP=33071]="CLAMP",e[e.REPEAT=10497]="REPEAT",e[e.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",e))(ie||{}),Wt=(e=>(e[e.OFF=0]="OFF",e[e.POW2=1]="POW2",e[e.ON=2]="ON",e[e.ON_MANUAL=3]="ON_MANUAL",e))(Wt||{}),Nt=(e=>(e[e.NPM=0]="NPM",e[e.UNPACK=1]="UNPACK",e[e.PMA=2]="PMA",e[e.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",e[e.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",e[e.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA",e))(Nt||{}),$t=(e=>(e[e.NO=0]="NO",e[e.YES=1]="YES",e[e.AUTO=2]="AUTO",e[e.BLEND=0]="BLEND",e[e.CLEAR=1]="CLEAR",e[e.BLIT=2]="BLIT",e))($t||{}),es=(e=>(e[e.AUTO=0]="AUTO",e[e.MANUAL=1]="MANUAL",e))(es||{}),Pt=(e=>(e.LOW="lowp",e.MEDIUM="mediump",e.HIGH="highp",e))(Pt||{}),ct=(e=>(e[e.NONE=0]="NONE",e[e.SCISSOR=1]="SCISSOR",e[e.STENCIL=2]="STENCIL",e[e.SPRITE=3]="SPRITE",e[e.COLOR=4]="COLOR",e))(ct||{}),Wn=(e=>(e[e.RED=1]="RED",e[e.GREEN=2]="GREEN",e[e.BLUE=4]="BLUE",e[e.ALPHA=8]="ALPHA",e))(Wn||{}),ht=(e=>(e[e.NONE=0]="NONE",e[e.LOW=2]="LOW",e[e.MEDIUM=4]="MEDIUM",e[e.HIGH=8]="HIGH",e))(ht||{}),jt=(e=>(e[e.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",e[e.ARRAY_BUFFER=34962]="ARRAY_BUFFER",e[e.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",e))(jt||{});const $n={createCanvas:(e,t)=>{const i=document.createElement("canvas");return i.width=e,i.height=t,i},getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>{var e;return(e=document.baseURI)!=null?e:window.location.href},getFontFaceSet:()=>document.fonts,fetch:(e,t)=>fetch(e,t),parseXML:e=>new DOMParser().parseFromString(e,"text/xml")},P={ADAPTER:$n,RESOLUTION:1,CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1};var sr=/iPhone/i,jn=/iPod/i,Yn=/iPad/i,qn=/\\biOS-universal(?:.+)Mac\\b/i,rr=/\\bAndroid(?:.+)Mobile\\b/i,Kn=/Android/i,Xe=/(?:SD4930UR|\\bSilk(?:.+)Mobile\\b)/i,is=/Silk/i,ce=/Windows Phone/i,Zn=/\\bWindows(?:.+)ARM\\b/i,Jn=/BlackBerry/i,Qn=/BB10/i,to=/Opera Mini/i,eo=/\\b(CriOS|Chrome)(?:.+)Mobile/i,io=/Mobile(?:.+)Firefox\\b/i,so=function(e){return typeof e!="undefined"&&e.platform==="MacIntel"&&typeof e.maxTouchPoints=="number"&&e.maxTouchPoints>1&&typeof MSStream=="undefined"};function Yh(e){return function(t){return t.test(e)}}function ro(e){var t={userAgent:"",platform:"",maxTouchPoints:0};!e&&typeof navigator!="undefined"?t={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof e=="string"?t.userAgent=e:e&&e.userAgent&&(t={userAgent:e.userAgent,platform:e.platform,maxTouchPoints:e.maxTouchPoints||0});var i=t.userAgent,s=i.split("[FBAN");typeof s[1]!="undefined"&&(i=s[0]),s=i.split("Twitter"),typeof s[1]!="undefined"&&(i=s[0]);var r=Yh(i),n={apple:{phone:r(sr)&&!r(ce),ipod:r(jn),tablet:!r(sr)&&(r(Yn)||so(t))&&!r(ce),universal:r(qn),device:(r(sr)||r(jn)||r(Yn)||r(qn)||so(t))&&!r(ce)},amazon:{phone:r(Xe),tablet:!r(Xe)&&r(is),device:r(Xe)||r(is)},android:{phone:!r(ce)&&r(Xe)||!r(ce)&&r(rr),tablet:!r(ce)&&!r(Xe)&&!r(rr)&&(r(is)||r(Kn)),device:!r(ce)&&(r(Xe)||r(is)||r(rr)||r(Kn))||r(/\\bokhttp\\b/i)},windows:{phone:r(ce),tablet:r(Zn),device:r(ce)||r(Zn)},other:{blackberry:r(Jn),blackberry10:r(Qn),opera:r(to),firefox:r(io),chrome:r(eo),device:r(Jn)||r(Qn)||r(to)||r(io)||r(eo)},any:!1,phone:!1,tablet:!1};return n.any=n.apple.device||n.android.device||n.windows.device||n.other.device,n.phone=n.apple.phone||n.android.phone||n.windows.phone,n.tablet=n.apple.tablet||n.android.tablet||n.windows.tablet,n}const Yt=((zh=ro.default)!=null?zh:ro)(globalThis.navigator);P.RETINA_PREFIX=/@([0-9\\.]+)x/,P.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var nr=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function Qd(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function or(e,t,i){return i={path:t,exports:{},require:function(s,r){return qh(s,r==null?i.path:r)}},e(i,i.exports),i.exports}function tf(e){return e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function ef(e){return e&&Object.prototype.hasOwnProperty.call(e,"default")&&Object.keys(e).length===1?e.default:e}function sf(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach(function(i){var s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return e[i]}})}),t}function qh(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var Ve=or(function(e){"use strict";var t=Object.prototype.hasOwnProperty,i="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(i=!1));function r(h,l,c){this.fn=h,this.context=l,this.once=c||!1}function n(h,l,c,u,d){if(typeof c!="function")throw new TypeError("The listener must be a function");var f=new r(c,u||h,d),p=i?i+l:l;return h._events[p]?h._events[p].fn?h._events[p]=[h._events[p],f]:h._events[p].push(f):(h._events[p]=f,h._eventsCount++),h}function o(h,l){--h._eventsCount===0?h._events=new s:delete h._events[l]}function a(){this._events=new s,this._eventsCount=0}a.prototype.eventNames=function(){var l=[],c,u;if(this._eventsCount===0)return l;for(u in c=this._events)t.call(c,u)&&l.push(i?u.slice(1):u);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(c)):l},a.prototype.listeners=function(l){var c=i?i+l:l,u=this._events[c];if(!u)return[];if(u.fn)return[u.fn];for(var d=0,f=u.length,p=new Array(f);d80*i){a=l=e[0],h=c=e[1];for(var p=i;pl&&(l=u),d>c&&(c=d);f=Math.max(l-a,c-h),f=f!==0?32767/f:0}return li(n,o,i,a,h,f,0),o}function no(e,t,i,s,r){var n,o;if(r===cr(e,t,i,s)>0)for(n=t;n=t;n-=s)o=ho(n,e[n],e[n+1],o);return o&&rs(o,o.next)&&(ui(o),o=o.next),o}function Ce(e,t){if(!e)return e;t||(t=e);var i=e,s;do if(s=!1,!i.steiner&&(rs(i,i.next)||nt(i.prev,i,i.next)===0)){if(ui(i),i=t=i.prev,i===i.next)break;s=!0}else i=i.next;while(s||i!==t);return t}function li(e,t,i,s,r,n,o){if(!!e){!o&&n&&ol(e,s,r,n);for(var a=e,h,l;e.prev!==e.next;){if(h=e.prev,l=e.next,n?Jh(e,s,r,n):Zh(e)){t.push(h.i/i|0),t.push(e.i/i|0),t.push(l.i/i|0),ui(e),e=l.next,a=l.next;continue}if(e=l,e===a){o?o===1?(e=Qh(Ce(e),t,i),li(e,t,i,s,r,n,2)):o===2&&tl(e,t,i,s,r,n):li(Ce(e),t,i,s,r,n,1);break}}}}function Zh(e){var t=e.prev,i=e,s=e.next;if(nt(t,i,s)>=0)return!1;for(var r=t.x,n=i.x,o=s.x,a=t.y,h=i.y,l=s.y,c=rn?r>o?r:o:n>o?n:o,f=a>h?a>l?a:l:h>l?h:l,p=s.next;p!==t;){if(p.x>=c&&p.x<=d&&p.y>=u&&p.y<=f&&ze(r,a,n,h,o,l,p.x,p.y)&&nt(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function Jh(e,t,i,s){var r=e.prev,n=e,o=e.next;if(nt(r,n,o)>=0)return!1;for(var a=r.x,h=n.x,l=o.x,c=r.y,u=n.y,d=o.y,f=ah?a>l?a:l:h>l?h:l,g=c>u?c>d?c:d:u>d?u:d,v=hr(f,p,t,i,s),b=hr(_,g,t,i,s),y=e.prevZ,x=e.nextZ;y&&y.z>=v&&x&&x.z<=b;){if(y.x>=f&&y.x<=_&&y.y>=p&&y.y<=g&&y!==r&&y!==o&&ze(a,c,h,u,l,d,y.x,y.y)&&nt(y.prev,y,y.next)>=0||(y=y.prevZ,x.x>=f&&x.x<=_&&x.y>=p&&x.y<=g&&x!==r&&x!==o&&ze(a,c,h,u,l,d,x.x,x.y)&&nt(x.prev,x,x.next)>=0))return!1;x=x.nextZ}for(;y&&y.z>=v;){if(y.x>=f&&y.x<=_&&y.y>=p&&y.y<=g&&y!==r&&y!==o&&ze(a,c,h,u,l,d,y.x,y.y)&&nt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;x&&x.z<=b;){if(x.x>=f&&x.x<=_&&x.y>=p&&x.y<=g&&x!==r&&x!==o&&ze(a,c,h,u,l,d,x.x,x.y)&&nt(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function Qh(e,t,i){var s=e;do{var r=s.prev,n=s.next.next;!rs(r,n)&&oo(r,s,s.next,n)&&ci(r,n)&&ci(n,r)&&(t.push(r.i/i|0),t.push(s.i/i|0),t.push(n.i/i|0),ui(s),ui(s.next),s=e=n),s=s.next}while(s!==e);return Ce(s)}function tl(e,t,i,s,r,n){var o=e;do{for(var a=o.next.next;a!==o.prev;){if(o.i!==a.i&&ll(o,a)){var h=ao(o,a);o=Ce(o,o.next),h=Ce(h,h.next),li(o,t,i,s,r,n,0),li(h,t,i,s,r,n,0);return}a=a.next}o=o.next}while(o!==e)}function el(e,t,i,s){var r=[],n,o,a,h,l;for(n=0,o=t.length;n=i.next.y&&i.next.y!==i.y){var a=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(a<=s&&a>n&&(n=a,o=i.x=i.x&&i.x>=l&&s!==i.x&&ze(ro.x||i.x===o.x&&nl(o,i)))&&(o=i,u=d)),i=i.next;while(i!==h);return o}function nl(e,t){return nt(e.prev,e,t.prev)<0&&nt(t.next,e,e.next)<0}function ol(e,t,i,s){var r=e;do r.z===0&&(r.z=hr(r.x,r.y,t,i,s)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,al(r)}function al(e){var t,i,s,r,n,o,a,h,l=1;do{for(i=e,e=null,n=null,o=0;i;){for(o++,s=i,a=0,t=0;t0||h>0&&s;)a!==0&&(h===0||!s||i.z<=s.z)?(r=i,i=i.nextZ,a--):(r=s,s=s.nextZ,h--),n?n.nextZ=r:e=r,r.prevZ=n,n=r;i=s}n.nextZ=null,l*=2}while(o>1);return e}function hr(e,t,i,s,r){return e=(e-i)*r|0,t=(t-s)*r|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function hl(e){var t=e,i=e;do(t.x=(e-o)*(n-a)&&(e-o)*(s-a)>=(i-o)*(t-a)&&(i-o)*(n-a)>=(r-o)*(s-a)}function ll(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!cl(e,t)&&(ci(e,t)&&ci(t,e)&&ul(e,t)&&(nt(e.prev,e,t.prev)||nt(e,t.prev,t))||rs(e,t)&&nt(e.prev,e,e.next)>0&&nt(t.prev,t,t.next)>0)}function nt(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function rs(e,t){return e.x===t.x&&e.y===t.y}function oo(e,t,i,s){var r=os(nt(e,t,i)),n=os(nt(e,t,s)),o=os(nt(i,s,e)),a=os(nt(i,s,t));return!!(r!==n&&o!==a||r===0&&ns(e,i,t)||n===0&&ns(e,s,t)||o===0&&ns(i,e,s)||a===0&&ns(i,t,s))}function ns(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function os(e){return e>0?1:e<0?-1:0}function cl(e,t){var i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&oo(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}function ci(e,t){return nt(e.prev,e,e.next)<0?nt(e,t,e.next)>=0&&nt(e,e.prev,t)>=0:nt(e,t,e.prev)<0||nt(e,e.next,t)<0}function ul(e,t){var i=e,s=!1,r=(e.x+t.x)/2,n=(e.y+t.y)/2;do i.y>n!=i.next.y>n&&i.next.y!==i.y&&r<(i.next.x-i.x)*(n-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next;while(i!==e);return s}function ao(e,t){var i=new lr(e.i,e.x,e.y),s=new lr(t.i,t.x,t.y),r=e.next,n=t.prev;return e.next=t,t.prev=e,i.next=r,r.prev=i,s.next=i,i.prev=s,n.next=s,s.prev=n,s}function ho(e,t,i,s){var r=new lr(e,t,i);return s?(r.next=s.next,r.prev=s,s.next.prev=r,s.next=r):(r.prev=r,r.next=r),r}function ui(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function lr(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}ss.deviation=function(e,t,i,s){var r=t&&t.length,n=r?t[0]*i:e.length,o=Math.abs(cr(e,0,n,i));if(r)for(var a=0,h=t.length;a0&&(s+=e[r-1].length,i.holes.push(s))}return i},ar.default=Kh;var dl=or(function(e,t){/*! https://mths.be/punycode v1.3.2 by @mathias */(function(i){var s=t&&!t.nodeType&&t,r=e&&!e.nodeType&&e,n=typeof nr=="object"&&nr;(n.global===n||n.window===n||n.self===n)&&(i=n);var o,a=2147483647,h=36,l=1,c=26,u=38,d=700,f=72,p=128,_="-",g=/^xn--/,v=/[^\\x20-\\x7E]/,b=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},x=h-l,A=Math.floor,D=String.fromCharCode,R;function E(S){throw RangeError(y[S])}function O(S,X){for(var K=S.length,J=[];K--;)J[K]=X(S[K]);return J}function H(S,X){var K=S.split("@"),J="";K.length>1&&(J=K[0]+"@",S=K[1]),S=S.replace(b,".");var Q=S.split("."),vt=O(Q,X).join(".");return J+vt}function I(S){for(var X=[],K=0,J=S.length,Q,vt;K=55296&&Q<=56319&&K65535&&(X-=65536,K+=D(X>>>10&1023|55296),X=56320|X&1023),K+=D(X),K}).join("")}function w(S){return S-48<10?S-22:S-65<26?S-65:S-97<26?S-97:h}function T(S,X){return S+22+75*(S<26)-((X!=0)<<5)}function W(S,X,K){var J=0;for(S=K?A(S/d):S>>1,S+=A(S/X);S>x*c>>1;J+=h)S=A(S/x);return A(J+(x+1)*S/(S+u))}function q(S){var X=[],K=S.length,J,Q=0,vt=p,ut=f,xt,wt,Ft,Et,rt,dt,ft,he,le;for(xt=S.lastIndexOf(_),xt<0&&(xt=0),wt=0;wt=128&&E("not-basic"),X.push(S.charCodeAt(wt));for(Ft=xt>0?xt+1:0;Ft=K&&E("invalid-input"),ft=w(S.charCodeAt(Ft++)),(ft>=h||ft>A((a-Q)/rt))&&E("overflow"),Q+=ft*rt,he=dt<=ut?l:dt>=ut+c?c:dt-ut,!(ftA(a/le)&&E("overflow"),rt*=le;J=X.length+1,ut=W(Q-Et,J,Et==0),A(Q/J)>a-vt&&E("overflow"),vt+=A(Q/J),Q%=J,X.splice(Q++,0,vt)}return N(X)}function F(S){var X,K,J,Q,vt,ut,xt,wt,Ft,Et,rt,dt=[],ft,he,le,Ji;for(S=I(S),ft=S.length,X=p,K=0,vt=f,ut=0;ut=X&&rtA((a-K)/he)&&E("overflow"),K+=(xt-X)*he,X=xt,ut=0;uta&&E("overflow"),rt==X){for(wt=K,Ft=h;Et=Ft<=vt?l:Ft>=vt+c?c:Ft-vt,!(wt0&&a>o&&(a=o);for(var h=0;h=0?(u=l.substr(0,c),d=l.substr(c+1)):(u=l,d=""),f=decodeURIComponent(u),p=decodeURIComponent(d),fl(r,f)?Array.isArray(r[f])?r[f].push(p):r[f]=[r[f],p]:r[f]=p}return r},di=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},ml=function(e,t,i,s){return t=t||"&",i=i||"=",e===null&&(e=void 0),typeof e=="object"?Object.keys(e).map(function(r){var n=encodeURIComponent(di(r))+i;return Array.isArray(e[r])?e[r].map(function(o){return n+encodeURIComponent(di(o))}).join(t):n+encodeURIComponent(di(e[r]))}).join(t):s?encodeURIComponent(di(s))+i+encodeURIComponent(di(e)):""},ur=or(function(e,t){"use strict";t.decode=t.parse=pl,t.encode=t.stringify=ml}),lo=fi,co=Rl,_l=Cl,uo=Al,gl=Lt;function Lt(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var yl=/^([a-z0-9.+-]+:)/i,vl=/:[0-9]*$/,xl=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,bl=["<",">",\'"\',"`"," ","\\r",`\n`," "],Tl=["{","}","|","\\\\","^","`"].concat(bl),dr=["\'"].concat(Tl),fo=["%","/","?",";","#"].concat(dr),po=["/","?","#"],El=255,mo=/^[+a-z0-9A-Z_-]{0,63}$/,wl=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Sl={javascript:!0,"javascript:":!0},fr={javascript:!0,"javascript:":!0},We={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function fi(e,t,i){if(e&&se.isObject(e)&&e instanceof Lt)return e;var s=new Lt;return s.parse(e,t,i),s}Lt.prototype.parse=function(e,t,i){if(!se.isString(e))throw new TypeError("Parameter \'url\' must be a string, not "+typeof e);var s=e.indexOf("?"),r=s!==-1&&s127?A+="x":A+=x[D];if(!A.match(mo)){var E=b.slice(0,f),O=b.slice(f+1),H=x.match(wl);H&&(E.push(H[1]),O.unshift(H[2])),O.length&&(a="/"+O.join(".")+a),this.hostname=E.join(".");break}}}this.hostname.length>El?this.hostname="":this.hostname=this.hostname.toLowerCase(),v||(this.hostname=dl.toASCII(this.hostname));var I=this.port?":"+this.port:"",N=this.hostname||"";this.host=N+I,this.href+=this.host,v&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),a[0]!=="/"&&(a="/"+a))}if(!Sl[c])for(var f=0,y=dr.length;f0?i.host.split("@"):!1;A&&(i.auth=A.shift(),i.host=i.hostname=A.shift())}return i.search=e.search,i.query=e.query,(!se.isNull(i.pathname)||!se.isNull(i.search))&&(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.href=i.format(),i}if(!b.length)return i.pathname=null,i.search?i.path="/"+i.search:i.path=null,i.href=i.format(),i;for(var D=b.slice(-1)[0],R=(i.host||e.host||b.length>1)&&(D==="."||D==="..")||D==="",E=0,O=b.length;O>=0;O--)D=b[O],D==="."?b.splice(O,1):D===".."?(b.splice(O,1),E++):E&&(b.splice(O,1),E--);if(!g&&!v)for(;E--;E)b.unshift("..");g&&b[0]!==""&&(!b[0]||b[0].charAt(0)!=="/")&&b.unshift(""),R&&b.join("/").substr(-1)!=="/"&&b.push("");var H=b[0]===""||b[0]&&b[0].charAt(0)==="/";if(x){i.hostname=i.host=H?"":b.length?b.shift():"";var A=i.host&&i.host.indexOf("@")>0?i.host.split("@"):!1;A&&(i.auth=A.shift(),i.host=i.hostname=A.shift())}return g=g||i.host&&b.length,g&&!H&&b.unshift(""),b.length?i.pathname=b.join("/"):(i.pathname=null,i.path=null),(!se.isNull(i.pathname)||!se.isNull(i.search))&&(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.auth=e.auth||i.auth,i.slashes=i.slashes||e.slashes,i.href=i.format(),i},Lt.prototype.parseHost=function(){var e=this.host,t=vl.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var rf={parse:lo,resolve:co,resolveObject:_l,format:uo,Url:gl};const _o={parse:lo,format:uo,resolve:co};function qt(e){if(typeof e!="string")throw new TypeError(`Path must be a string. Received ${JSON.stringify(e)}`)}function pi(e){return e.split("?")[0].split("#")[0]}function Il(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}function Pl(e,t,i){return e.replace(new RegExp(Il(t),"g"),i)}function Ml(e,t){let i="",s=0,r=-1,n=0,o=-1;for(let a=0;a<=e.length;++a){if(a2){const h=i.lastIndexOf("/");if(h!==i.length-1){h===-1?(i="",s=0):(i=i.slice(0,h),s=i.length-1-i.lastIndexOf("/")),r=a,n=0;continue}}else if(i.length===2||i.length===1){i="",s=0,r=a,n=0;continue}}t&&(i.length>0?i+="/..":i="..",s=2)}else i.length>0?i+=`/${e.slice(r+1,a)}`:i=e.slice(r+1,a),s=a-r-1;r=a,n=0}else o===46&&n!==-1?++n:n=-1}return i}const Tt={toPosix(e){return Pl(e,"\\\\","/")},isUrl(e){return/^https?:/.test(this.toPosix(e))},isDataUrl(e){return/^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&\',()*+;=\\-._~:@\\/?%\\s<>]*?)$/i.test(e)},hasProtocol(e){return/^[^/:]+:\\//.test(this.toPosix(e))},getProtocol(e){qt(e),e=this.toPosix(e);let t="";const i=/^file:\\/\\/\\//.exec(e),s=/^[^/:]+:\\/\\//.exec(e),r=/^[^/:]+:\\//.exec(e);if(i||s||r){const n=(i==null?void 0:i[0])||(s==null?void 0:s[0])||(r==null?void 0:r[0]);t=n,e=e.slice(n.length)}return t},toAbsolute(e,t,i){if(this.isDataUrl(e))return e;const s=pi(this.toPosix(t!=null?t:P.ADAPTER.getBaseUrl())),r=pi(this.toPosix(i!=null?i:this.rootname(s)));return qt(e),e=this.toPosix(e),e.startsWith("/")?Tt.join(r,e.slice(1)):this.isAbsolute(e)?e:this.join(s,e)},normalize(e){if(e=this.toPosix(e),qt(e),e.length===0)return".";let t="";const i=e.startsWith("/");this.hasProtocol(e)&&(t=this.rootname(e),e=e.slice(t.length));const s=e.endsWith("/");return e=Ml(e,!1),e.length>0&&s&&(e+="/"),i?`/${e}`:t+e},isAbsolute(e){return qt(e),e=this.toPosix(e),this.hasProtocol(e)?!0:e.startsWith("/")},join(...e){var i;if(e.length===0)return".";let t;for(let s=0;s0)if(t===void 0)t=r;else{const n=(i=e[s-1])!=null?i:"";this.extname(n)?t+=`/../${r}`:t+=`/${r}`}}return t===void 0?".":this.normalize(t)},dirname(e){if(qt(e),e.length===0)return".";e=this.toPosix(e);let t=e.charCodeAt(0);const i=t===47;let s=-1,r=!0;const n=this.getProtocol(e),o=e;e=e.slice(n.length);for(let a=e.length-1;a>=1;--a)if(t=e.charCodeAt(a),t===47){if(!r){s=a;break}}else r=!1;return s===-1?i?"/":this.isUrl(o)?n+e:n:i&&s===1?"//":n+e.slice(0,s)},rootname(e){qt(e),e=this.toPosix(e);let t="";if(e.startsWith("/")?t="/":t=this.getProtocol(e),this.isUrl(e)){const i=e.indexOf("/",t.length);i!==-1?t=e.slice(0,i):t=e,t.endsWith("/")||(t+="/")}return t},basename(e,t){qt(e),t&&qt(t),e=pi(this.toPosix(e));let i=0,s=-1,r=!0,n;if(t!==void 0&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";let o=t.length-1,a=-1;for(n=e.length-1;n>=0;--n){const h=e.charCodeAt(n);if(h===47){if(!r){i=n+1;break}}else a===-1&&(r=!1,a=n+1),o>=0&&(h===t.charCodeAt(o)?--o===-1&&(s=n):(o=-1,s=a))}return i===s?s=a:s===-1&&(s=e.length),e.slice(i,s)}for(n=e.length-1;n>=0;--n)if(e.charCodeAt(n)===47){if(!r){i=n+1;break}}else s===-1&&(r=!1,s=n+1);return s===-1?"":e.slice(i,s)},extname(e){qt(e),e=pi(this.toPosix(e));let t=-1,i=0,s=-1,r=!0,n=0;for(let o=e.length-1;o>=0;--o){const a=e.charCodeAt(o);if(a===47){if(!r){i=o+1;break}continue}s===-1&&(r=!1,s=o+1),a===46?t===-1?t=o:n!==1&&(n=1):t!==-1&&(n=-1)}return t===-1||s===-1||n===0||n===1&&t===s-1&&t===i+1?"":e.slice(t,s)},parse(e){qt(e);const t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;e=pi(this.toPosix(e));let i=e.charCodeAt(0);const s=this.isAbsolute(e);let r;const n="";t.root=this.rootname(e),s||this.hasProtocol(e)?r=1:r=0;let o=-1,a=0,h=-1,l=!0,c=e.length-1,u=0;for(;c>=r;--c){if(i=e.charCodeAt(c),i===47){if(!l){a=c+1;break}continue}h===-1&&(l=!1,h=c+1),i===46?o===-1?o=c:u!==1&&(u=1):o!==-1&&(u=-1)}return o===-1||h===-1||u===0||u===1&&o===h-1&&o===a+1?h!==-1&&(a===0&&s?t.base=t.name=e.slice(1,h):t.base=t.name=e.slice(a,h)):(a===0&&s?(t.name=e.slice(1,o),t.base=e.slice(1,h)):(t.name=e.slice(a,o),t.base=e.slice(a,h)),t.ext=e.slice(o,h)),t.dir=this.dirname(e),n&&(t.dir=n+t.dir),t},sep:"/",delimiter:":"},go={};function z(e,t,i=3){if(go[t])return;let s=new Error().stack;typeof s=="undefined"?console.warn("PixiJS Deprecation Warning: ",`${t}\nDeprecated since v${e}`):(s=s.split(`\n`).splice(i).join(`\n`),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",`${t}\nDeprecated since v${e}`),console.warn(s),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",`${t}\nDeprecated since v${e}`),console.warn(s))),go[t]=!0}function Bl(){z("7.0.0","skipHello is deprecated, please use settings.RENDER_OPTIONS.hello")}function Dl(){z("7.0.0",`sayHello is deprecated, please use Renderer\'s "hello" option`)}let pr;function yo(){return typeof pr=="undefined"&&(pr=function(){var i;const t={stencil:!0,failIfMajorPerformanceCaveat:P.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!P.ADAPTER.getWebGLRenderingContext())return!1;const s=P.ADAPTER.createCanvas();let r=s.getContext("webgl",t)||s.getContext("experimental-webgl",t);const n=!!((i=r==null?void 0:r.getContextAttributes())!=null&&i.stencil);if(r){const o=r.getExtension("WEBGL_lose_context");o&&o.loseContext()}return r=null,n}catch(s){return!1}}()),pr}var Fl={grad:.9,turn:360,rad:360/(2*Math.PI)},ue=function(e){return typeof e=="string"?e.length>0:typeof e=="number"},mt=function(e,t,i){return t===void 0&&(t=0),i===void 0&&(i=Math.pow(10,t)),Math.round(i*e)/i+0},Ot=function(e,t,i){return t===void 0&&(t=0),i===void 0&&(i=1),e>i?i:e>t?e:t},vo=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},xo=function(e){return{r:Ot(e.r,0,255),g:Ot(e.g,0,255),b:Ot(e.b,0,255),a:Ot(e.a)}},mr=function(e){return{r:mt(e.r),g:mt(e.g),b:mt(e.b),a:mt(e.a,3)}},Nl=/^#([0-9a-f]{3,8})$/i,as=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},bo=function(e){var t=e.r,i=e.g,s=e.b,r=e.a,n=Math.max(t,i,s),o=n-Math.min(t,i,s),a=o?n===t?(i-s)/o:n===i?2+(s-t)/o:4+(t-i)/o:0;return{h:60*(a<0?a+6:a),s:n?o/n*100:0,v:n/255*100,a:r}},To=function(e){var t=e.h,i=e.s,s=e.v,r=e.a;t=t/360*6,i/=100,s/=100;var n=Math.floor(t),o=s*(1-i),a=s*(1-(t-n)*i),h=s*(1-(1-t+n)*i),l=n%6;return{r:255*[s,a,o,o,h,s][l],g:255*[h,s,s,a,o,o][l],b:255*[o,o,h,s,s,a][l],a:r}},Eo=function(e){return{h:vo(e.h),s:Ot(e.s,0,100),l:Ot(e.l,0,100),a:Ot(e.a)}},wo=function(e){return{h:mt(e.h),s:mt(e.s),l:mt(e.l),a:mt(e.a,3)}},So=function(e){return To((i=(t=e).s,{h:t.h,s:(i*=((s=t.l)<50?s:100-s)/100)>0?2*i/(s+i)*100:0,v:s+i,a:t.a}));var t,i,s},mi=function(e){return{h:(t=bo(e)).h,s:(r=(200-(i=t.s))*(s=t.v)/100)>0&&r<200?i*s/100/(r<=100?r:200-r)*100:0,l:r/2,a:t.a};var t,i,s,r},Ll=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,Ol=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,Ul=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,kl=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,_r={string:[[function(e){var t=Nl.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?mt(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?mt(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=Ul.exec(e)||kl.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:xo({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=Ll.exec(e)||Ol.exec(e);if(!t)return null;var i,s,r=Eo({h:(i=t[1],s=t[2],s===void 0&&(s="deg"),Number(i)*(Fl[s]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)});return So(r)},"hsl"]],object:[[function(e){var t=e.r,i=e.g,s=e.b,r=e.a,n=r===void 0?1:r;return ue(t)&&ue(i)&&ue(s)?xo({r:Number(t),g:Number(i),b:Number(s),a:Number(n)}):null},"rgb"],[function(e){var t=e.h,i=e.s,s=e.l,r=e.a,n=r===void 0?1:r;if(!ue(t)||!ue(i)||!ue(s))return null;var o=Eo({h:Number(t),s:Number(i),l:Number(s),a:Number(n)});return So(o)},"hsl"],[function(e){var t=e.h,i=e.s,s=e.v,r=e.a,n=r===void 0?1:r;if(!ue(t)||!ue(i)||!ue(s))return null;var o=function(a){return{h:vo(a.h),s:Ot(a.s,0,100),v:Ot(a.v,0,100),a:Ot(a.a)}}({h:Number(t),s:Number(i),v:Number(s),a:Number(n)});return To(o)},"hsv"]]},Ao=function(e,t){for(var i=0;i=.5},e.prototype.toHex=function(){return t=mr(this.rgba),i=t.r,s=t.g,r=t.b,o=(n=t.a)<1?as(mt(255*n)):"","#"+as(i)+as(s)+as(r)+o;var t,i,s,r,n,o},e.prototype.toRgb=function(){return mr(this.rgba)},e.prototype.toRgbString=function(){return t=mr(this.rgba),i=t.r,s=t.g,r=t.b,(n=t.a)<1?"rgba("+i+", "+s+", "+r+", "+n+")":"rgb("+i+", "+s+", "+r+")";var t,i,s,r,n},e.prototype.toHsl=function(){return wo(mi(this.rgba))},e.prototype.toHslString=function(){return t=wo(mi(this.rgba)),i=t.h,s=t.s,r=t.l,(n=t.a)<1?"hsla("+i+", "+s+"%, "+r+"%, "+n+")":"hsl("+i+", "+s+"%, "+r+"%)";var t,i,s,r,n},e.prototype.toHsv=function(){return t=bo(this.rgba),{h:mt(t.h),s:mt(t.s),v:mt(t.v),a:mt(t.a,3)};var t},e.prototype.invert=function(){return re({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},e.prototype.saturate=function(t){return t===void 0&&(t=.1),re(gr(this.rgba,t))},e.prototype.desaturate=function(t){return t===void 0&&(t=.1),re(gr(this.rgba,-t))},e.prototype.grayscale=function(){return re(gr(this.rgba,-1))},e.prototype.lighten=function(t){return t===void 0&&(t=.1),re(Co(this.rgba,t))},e.prototype.darken=function(t){return t===void 0&&(t=.1),re(Co(this.rgba,-t))},e.prototype.rotate=function(t){return t===void 0&&(t=15),this.hue(this.hue()+t)},e.prototype.alpha=function(t){return typeof t=="number"?re({r:(i=this.rgba).r,g:i.g,b:i.b,a:t}):mt(this.rgba.a,3);var i},e.prototype.hue=function(t){var i=mi(this.rgba);return typeof t=="number"?re({h:t,s:i.s,l:i.l,a:i.a}):mt(i.h)},e.prototype.isEqual=function(t){return this.toHex()===re(t).toHex()},e}(),re=function(e){return e instanceof hs?e:new hs(e)},Io=[],Gl=function(e){e.forEach(function(t){Io.indexOf(t)<0&&(t(hs,_r),Io.push(t))})},of=function(){return new hs({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};function Hl(e,t){var i={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},s={};for(var r in i)s[i[r]]=r;var n={};e.prototype.toName=function(o){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var a,h,l=s[this.toHex()];if(l)return l;if(o!=null&&o.closest){var c=this.toRgb(),u=1/0,d="black";if(!n.length)for(var f in i)n[f]=new e(i[f]).toRgb();for(var p in i){var _=(a=c,h=n[p],Math.pow(a.r-h.r,2)+Math.pow(a.g-h.g,2)+Math.pow(a.b-h.b,2));_r===t[n]);if(e!==null&&t!==null){const r=Object.keys(e),n=Object.keys(t);return r.length!==n.length?!1:r.every(o=>e[o]===t[o])}return e===t}toRgba(){const[e,t,i,s]=this._components;return{r:e,g:t,b:i,a:s}}toRgb(){const[e,t,i]=this._components;return{r:e,g:t,b:i}}toRgbaString(){const[e,t,i]=this.toUint8RgbArray();return`rgba(${e},${t},${i},${this.alpha})`}toUint8RgbArray(e){const[t,i,s]=this._components;return e=e!=null?e:[],e[0]=Math.round(t*255),e[1]=Math.round(i*255),e[2]=Math.round(s*255),e}toRgbArray(e){e=e!=null?e:[];const[t,i,s]=this._components;return e[0]=t,e[1]=i,e[2]=s,e}toNumber(){return this._int}toLittleEndianNumber(){const e=this._int;return(e>>16)+(e&65280)+((e&255)<<16)}multiply(e){const[t,i,s,r]=$e.temp.setValue(e)._components;return this._components[0]*=t,this._components[1]*=i,this._components[2]*=s,this._components[3]*=r,this.refreshInt(),this._value=null,this}premultiply(e,t=!0){return t&&(this._components[0]*=e,this._components[1]*=e,this._components[2]*=e),this._components[3]=e,this.refreshInt(),this._value=null,this}toPremultiplied(e,t=!0){if(e===1)return(255<<24)+this._int;if(e===0)return t?0:this._int;let i=this._int>>16&255,s=this._int>>8&255,r=this._int&255;return t&&(i=i*e+.5|0,s=s*e+.5|0,r=r*e+.5|0),(e*255<<24)+(i<<16)+(s<<8)+r}toHex(){const e=this._int.toString(16);return`#${"000000".substring(0,6-e.length)+e}`}toHexa(){const t=Math.round(this._components[3]*255).toString(16);return this.toHex()+"00".substring(0,2-t.length)+t}setAlpha(e){return this._components[3]=this._clamp(e),this}round(e){const[t,i,s]=this._components;return this._components[0]=Math.round(t*e)/e,this._components[1]=Math.round(i*e)/e,this._components[2]=Math.round(s*e)/e,this.refreshInt(),this._value=null,this}toArray(e){e=e!=null?e:[];const[t,i,s,r]=this._components;return e[0]=t,e[1]=i,e[2]=s,e[3]=r,e}normalize(e){let t,i,s,r;if((typeof e=="number"||e instanceof Number)&&e>=0&&e<=16777215){const n=e;t=(n>>16&255)/255,i=(n>>8&255)/255,s=(n&255)/255,r=1}else if((Array.isArray(e)||e instanceof Float32Array)&&e.length>=3&&e.length<=4)e=this._clamp(e),[t,i,s,r=1]=e;else if((e instanceof Uint8Array||e instanceof Uint8ClampedArray)&&e.length>=3&&e.length<=4)e=this._clamp(e,0,255),[t,i,s,r=255]=e,t/=255,i/=255,s/=255,r/=255;else if(typeof e=="string"||typeof e=="object"){if(typeof e=="string"){const o=$e.HEX_PATTERN.exec(e);o&&(e=`#${o[2]}`)}const n=re(e);n.isValid()&&({r:t,g:i,b:s,a:r}=n.rgba,t/=255,i/=255,s/=255)}if(t!==void 0)this._components[0]=t,this._components[1]=i,this._components[2]=s,this._components[3]=r,this.refreshInt();else throw new Error(`Unable to convert color ${e}`)}refreshInt(){this._clamp(this._components);const[e,t,i]=this._components;this._int=(e*255<<16)+(t*255<<8)+(i*255|0)}_clamp(e,t=0,i=1){return typeof e=="number"?Math.min(Math.max(e,t),i):(e.forEach((s,r)=>{e[r]=Math.min(Math.max(s,t),i)}),e)}};let j=$e;j.shared=new $e,j.temp=new $e,j.HEX_PATTERN=/^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;function Xl(e,t=[]){return z("7.2.0","utils.hex2rgb is deprecated, use Color#toRgbArray instead"),j.shared.setValue(e).toRgbArray(t)}function Po(e){return z("7.2.0","utils.hex2string is deprecated, use Color#toHex instead"),j.shared.setValue(e).toHex()}function Vl(e){return z("7.2.0","utils.string2hex is deprecated, use Color#toNumber instead"),j.shared.setValue(e).toNumber()}function Mo(e){return z("7.2.0","utils.rgb2hex is deprecated, use Color#toNumber instead"),j.shared.setValue(e).toNumber()}function zl(){const e=[],t=[];for(let s=0;s<32;s++)e[s]=s,t[s]=s;e[G.NORMAL_NPM]=G.NORMAL,e[G.ADD_NPM]=G.ADD,e[G.SCREEN_NPM]=G.SCREEN,t[G.NORMAL]=G.NORMAL_NPM,t[G.ADD]=G.ADD_NPM,t[G.SCREEN]=G.SCREEN_NPM;const i=[];return i.push(t),i.push(e),i}const vr=zl();function xr(e,t){return vr[t?1:0][e]}function Wl(e,t,i,s=!0){return z("7.2.0","utils.premultiplyRgba has moved to Color.premultiply"),j.shared.setValue(e).premultiply(t,s).toArray(i!=null?i:new Float32Array(4))}function $l(e,t){return z("7.2.0","utils.premultiplyTint has moved to Color.toPremultiplied"),j.shared.setValue(e).toPremultiplied(t)}function jl(e,t,i,s=!0){return z("7.2.0","utils.premultiplyTintToRgba has moved to Color.premultiply"),j.shared.setValue(e).premultiply(t,s).toArray(i!=null?i:new Float32Array(4))}const Bo=/^\\s*data:(?:([\\w-]+)\\/([\\w+.-]+))?(?:;charset=([\\w-]+))?(?:;(base64))?,(.*)/i;function Do(e,t=null){const i=e*6;if(t=t||new Uint16Array(i),t.length!==i)throw new Error(`Out buffer length is incorrect, got ${t.length} and expected ${i}`);for(let s=0,r=0;s>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1}function br(e){return!(e&e-1)&&!!e}function Tr(e){let t=(e>65535?1:0)<<4;e>>>=t;let i=(e>255?1:0)<<3;return e>>>=i,t|=i,i=(e>15?1:0)<<2,e>>>=i,t|=i,i=(e>3?1:0)<<1,e>>>=i,t|=i,t|e>>1}function Ie(e,t,i){const s=e.length;let r;if(t>=s||i===0)return;i=t+i>s?s-t:i;const n=s-i;for(r=t;r(e.Renderer="renderer",e.Application="application",e.RendererSystem="renderer-webgl-system",e.RendererPlugin="renderer-webgl-plugin",e.CanvasRendererSystem="renderer-canvas-system",e.CanvasRendererPlugin="renderer-canvas-plugin",e.Asset="asset",e.LoadParser="load-parser",e.ResolveParser="resolve-parser",e.CacheParser="cache-parser",e.DetectionParser="detection-parser",e))(M||{});const wr=e=>{if(typeof e=="function"||typeof e=="object"&&e.extension){if(!e.extension)throw new Error("Extension class must have an extension object");const t=typeof e.extension!="object"?{type:e.extension}:e.extension;e=Qi(bt({},t),{ref:e})}if(typeof e=="object")e=bt({},e);else throw new Error("Invalid extension type");return typeof e.type=="string"&&(e.type=[e.type]),e},Ho=(e,t)=>{var i;return(i=wr(e).priority)!=null?i:t},U={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...e){return e.map(wr).forEach(t=>{t.type.forEach(i=>{var s,r;return(r=(s=this._removeHandlers)[i])==null?void 0:r.call(s,t)})}),this},add(...e){return e.map(wr).forEach(t=>{t.type.forEach(i=>{const s=this._addHandlers,r=this._queue;s[i]?s[i](t):(r[i]=r[i]||[],r[i].push(t))})}),this},handle(e,t,i){const s=this._addHandlers,r=this._removeHandlers;if(s[e]||r[e])throw new Error(`Extension type ${e} already has a handler`);s[e]=t,r[e]=i;const n=this._queue;return n[e]&&(n[e].forEach(o=>t(o)),delete n[e]),this},handleByMap(e,t){return this.handle(e,i=>{t[i.name]=i.ref},i=>{delete t[i.name]})},handleByList(e,t,i=-1){return this.handle(e,s=>{t.includes(s.ref)||(t.push(s.ref),t.sort((r,n)=>Ho(n,i)-Ho(r,i)))},s=>{const r=t.indexOf(s.ref);r!==-1&&t.splice(r,1)})}};class ds{constructor(t){typeof t=="number"?this.rawBinaryData=new ArrayBuffer(t):t instanceof Uint8Array?this.rawBinaryData=t.buffer:this.rawBinaryData=t,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData)}get int8View(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View}get uint8View(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View}get int16View(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View}get uint16View(){return this._uint16View||(this._uint16View=new Uint16Array(this.rawBinaryData)),this._uint16View}get int32View(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View}view(t){return this[`${t}View`]}destroy(){this.rawBinaryData=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._uint16View=null,this._int32View=null,this.uint32View=null,this.float32View=null}static sizeOf(t){switch(t){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(`${t} isn\'t a valid view type`)}}}const ec=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join(`\n`);function ic(e){let t="";for(let i=0;i0&&(t+=`\nelse `),i=0;--s){const r=fs[s];if(r.test&&r.test(e,i))return new r(e,t)}throw new Error("Unrecognized source type to auto-detect Resource")}class Bt{constructor(t){this.items=[],this._name=t,this._aliasCount=0}emit(t,i,s,r,n,o,a,h){if(arguments.length>8)throw new Error("max arguments reached");const{name:l,items:c}=this;this._aliasCount++;for(let u=0,d=c.length;u0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))}add(t){return t[this._name]&&(this.ensureNonAliasedItems(),this.remove(t),this.items.push(t)),this}remove(t){const i=this.items.indexOf(t);return i!==-1&&(this.ensureNonAliasedItems(),this.items.splice(i,1)),this}contains(t){return this.items.includes(t)}removeAll(){return this.ensureNonAliasedItems(),this.items.length=0,this}destroy(){this.removeAll(),this.items=null,this._name=null}get empty(){return this.items.length===0}get name(){return this._name}}Object.defineProperties(Bt.prototype,{dispatch:{value:Bt.prototype.emit},run:{value:Bt.prototype.emit}});class je{constructor(t=0,i=0){this._width=t,this._height=i,this.destroyed=!1,this.internal=!1,this.onResize=new Bt("setRealSize"),this.onUpdate=new Bt("update"),this.onError=new Bt("onError")}bind(t){this.onResize.add(t),this.onUpdate.add(t),this.onError.add(t),(this._width||this._height)&&this.onResize.emit(this._width,this._height)}unbind(t){this.onResize.remove(t),this.onUpdate.remove(t),this.onError.remove(t)}resize(t,i){(t!==this._width||i!==this._height)&&(this._width=t,this._height=i,this.onResize.emit(t,i))}get valid(){return!!this._width&&!!this._height}update(){this.destroyed||this.onUpdate.emit()}load(){return Promise.resolve(this)}get width(){return this._width}get height(){return this._height}style(t,i,s){return!1}dispose(){}destroy(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)}static test(t,i){return!1}}class Ye extends je{constructor(t,i){const{width:s,height:r}=i||{};if(!s||!r)throw new Error("BufferResource width or height invalid");super(s,r),this.data=t}upload(t,i,s){const r=t.gl;r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Nt.UNPACK);const n=i.realWidth,o=i.realHeight;return s.width===n&&s.height===o?r.texSubImage2D(i.target,0,0,0,n,o,i.format,s.type,this.data):(s.width=n,s.height=o,r.texImage2D(i.target,0,s.internalFormat,n,o,0,i.format,s.type,this.data)),!0}dispose(){this.data=null}static test(t){return t instanceof Float32Array||t instanceof Uint8Array||t instanceof Uint32Array}}const sc={scaleMode:ee.NEAREST,format:C.RGBA,alphaMode:Nt.NPM},qe=class extends Ve{constructor(e=null,t=null){super(),t=Object.assign({},qe.defaultOptions,t);const{alphaMode:i,mipmap:s,anisotropicLevel:r,scaleMode:n,width:o,height:a,wrapMode:h,format:l,type:c,target:u,resolution:d,resourceOptions:f}=t;e&&!(e instanceof je)&&(e=Mr(e,f),e.internal=!0),this.resolution=d||P.RESOLUTION,this.width=Math.round((o||0)*this.resolution)/this.resolution,this.height=Math.round((a||0)*this.resolution)/this.resolution,this._mipmap=s,this.anisotropicLevel=r,this._wrapMode=h,this._scaleMode=n,this.format=l,this.type=c,this.target=u,this.alphaMode=i,this.uid=xe(),this.touched=0,this.isPowerOfTwo=!1,this._refreshPOT(),this._glTextures={},this.dirtyId=0,this.dirtyStyleId=0,this.cacheId=null,this.valid=o>0&&a>0,this.textureCacheIds=[],this.destroyed=!1,this.resource=null,this._batchEnabled=0,this._batchLocation=0,this.parentTextureArray=null,this.setResource(e)}get realWidth(){return Math.round(this.width*this.resolution)}get realHeight(){return Math.round(this.height*this.resolution)}get mipmap(){return this._mipmap}set mipmap(e){this._mipmap!==e&&(this._mipmap=e,this.dirtyStyleId++)}get scaleMode(){return this._scaleMode}set scaleMode(e){this._scaleMode!==e&&(this._scaleMode=e,this.dirtyStyleId++)}get wrapMode(){return this._wrapMode}set wrapMode(e){this._wrapMode!==e&&(this._wrapMode=e,this.dirtyStyleId++)}setStyle(e,t){let i;return e!==void 0&&e!==this.scaleMode&&(this.scaleMode=e,i=!0),t!==void 0&&t!==this.mipmap&&(this.mipmap=t,i=!0),i&&this.dirtyStyleId++,this}setSize(e,t,i){return i=i||this.resolution,this.setRealSize(e*i,t*i,i)}setRealSize(e,t,i){return this.resolution=i||this.resolution,this.width=Math.round(e)/this.resolution,this.height=Math.round(t)/this.resolution,this._refreshPOT(),this.update(),this}_refreshPOT(){this.isPowerOfTwo=br(this.realWidth)&&br(this.realHeight)}setResolution(e){const t=this.resolution;return t===e?this:(this.resolution=e,this.valid&&(this.width=Math.round(this.width*t)/e,this.height=Math.round(this.height*t)/e,this.emit("update",this)),this._refreshPOT(),this)}setResource(e){if(this.resource===e)return this;if(this.resource)throw new Error("Resource can be set only once");return e.bind(this),this.resource=e,this}update(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))}onError(e){this.emit("error",this,e)}destroy(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete Mt[this.cacheId],delete St[this.cacheId],this.cacheId=null),this.dispose(),qe.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0}dispose(){this.emit("dispose",this)}castToBaseTexture(){return this}static from(e,t,i=P.STRICT_TEXTURE_CACHE){const s=typeof e=="string";let r=null;if(s)r=e;else{if(!e._pixiId){const o=(t==null?void 0:t.pixiIdPrefix)||"pixiid";e._pixiId=`${o}_${xe()}`}r=e._pixiId}let n=Mt[r];if(s&&i&&!n)throw new Error(`The cacheId "${r}" does not exist in BaseTextureCache.`);return n||(n=new qe(e,t),n.cacheId=r,qe.addToCache(n,r)),n}static fromBuffer(e,t,i,s){e=e||new Float32Array(t*i*4);const r=new Ye(e,{width:t,height:i}),n=e instanceof Float32Array?k.FLOAT:k.UNSIGNED_BYTE;return new qe(r,Object.assign({},sc,{type:n},s))}static addToCache(e,t){t&&(e.textureCacheIds.includes(t)||e.textureCacheIds.push(t),Mt[t]&&Mt[t]!==e&&console.warn(`BaseTexture added to the cache with an id [${t}] that already had an entry`),Mt[t]=e)}static removeFromCache(e){if(typeof e=="string"){const t=Mt[e];if(t){const i=t.textureCacheIds.indexOf(e);return i>-1&&t.textureCacheIds.splice(i,1),delete Mt[e],t}}else if(e!=null&&e.textureCacheIds){for(let t=0;t1){for(let u=0;u(e[e.POLY=0]="POLY",e[e.RECT=1]="RECT",e[e.CIRC=2]="CIRC",e[e.ELIP=3]="ELIP",e[e.RREC=4]="RREC",e))(_t||{});class Y{constructor(t=0,i=0){this.x=0,this.y=0,this.x=t,this.y=i}clone(){return new Y(this.x,this.y)}copyFrom(t){return this.set(t.x,t.y),this}copyTo(t){return t.set(this.x,this.y),t}equals(t){return t.x===this.x&&t.y===this.y}set(t=0,i=t){return this.x=t,this.y=i,this}toString(){return`[@pixi/math:Point x=${this.x} y=${this.y}]`}}const ms=[new Y,new Y,new Y,new Y];class ${constructor(t=0,i=0,s=0,r=0){this.x=Number(t),this.y=Number(i),this.width=Number(s),this.height=Number(r),this.type=_t.RECT}get left(){return this.x}get right(){return this.x+this.width}get top(){return this.y}get bottom(){return this.y+this.height}static get EMPTY(){return new $(0,0,0,0)}clone(){return new $(this.x,this.y,this.width,this.height)}copyFrom(t){return this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this}copyTo(t){return t.x=this.x,t.y=this.y,t.width=this.width,t.height=this.height,t}contains(t,i){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&it.right?t.right:this.right)<=E)return!1;const H=this.yt.bottom?t.bottom:this.bottom)>H}const s=this.left,r=this.right,n=this.top,o=this.bottom;if(r<=s||o<=n)return!1;const a=ms[0].set(t.left,t.top),h=ms[1].set(t.left,t.bottom),l=ms[2].set(t.right,t.top),c=ms[3].set(t.right,t.bottom);if(l.x<=a.x||h.y<=a.y)return!1;const u=Math.sign(i.a*i.d-i.b*i.c);if(u===0||(i.apply(a,a),i.apply(h,h),i.apply(l,l),i.apply(c,c),Math.max(a.x,h.x,l.x,c.x)<=s||Math.min(a.x,h.x,l.x,c.x)>=r||Math.max(a.y,h.y,l.y,c.y)<=n||Math.min(a.y,h.y,l.y,c.y)>=o))return!1;const d=u*(h.y-a.y),f=u*(a.x-h.x),p=d*s+f*n,_=d*r+f*n,g=d*s+f*o,v=d*r+f*o;if(Math.max(p,_,g,v)<=d*a.x+f*a.y||Math.min(p,_,g,v)>=d*c.x+f*c.y)return!1;const b=u*(a.y-l.y),y=u*(l.x-a.x),x=b*s+y*n,A=b*r+y*n,D=b*s+y*o,R=b*r+y*o;return!(Math.max(x,A,D,R)<=b*a.x+y*a.y||Math.min(x,A,D,R)>=b*c.x+y*c.y)}pad(t=0,i=t){return this.x-=t,this.y-=i,this.width+=t*2,this.height+=i*2,this}fit(t){const i=Math.max(this.x,t.x),s=Math.min(this.x+this.width,t.x+t.width),r=Math.max(this.y,t.y),n=Math.min(this.y+this.height,t.y+t.height);return this.x=i,this.width=Math.max(s-i,0),this.y=r,this.height=Math.max(n-r,0),this}ceil(t=1,i=.001){const s=Math.ceil((this.x+this.width-i)*t)/t,r=Math.ceil((this.y+this.height-i)*t)/t;return this.x=Math.floor((this.x+i)*t)/t,this.y=Math.floor((this.y+i)*t)/t,this.width=s-this.x,this.height=r-this.y,this}enlarge(t){const i=Math.min(this.x,t.x),s=Math.max(this.x+this.width,t.x+t.width),r=Math.min(this.y,t.y),n=Math.max(this.y+this.height,t.y+t.height);return this.x=i,this.width=s-i,this.y=r,this.height=n-r,this}toString(){return`[@pixi/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`}}class _s{constructor(t=0,i=0,s=0){this.x=t,this.y=i,this.radius=s,this.type=_t.CIRC}clone(){return new _s(this.x,this.y,this.radius)}contains(t,i){if(this.radius<=0)return!1;const s=this.radius*this.radius;let r=this.x-t,n=this.y-i;return r*=r,n*=n,r+n<=s}getBounds(){return new $(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)}toString(){return`[@pixi/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`}}class gs{constructor(t=0,i=0,s=0,r=0){this.x=t,this.y=i,this.width=s,this.height=r,this.type=_t.ELIP}clone(){return new gs(this.x,this.y,this.width,this.height)}contains(t,i){if(this.width<=0||this.height<=0)return!1;let s=(t-this.x)/this.width,r=(i-this.y)/this.height;return s*=s,r*=r,s+r<=1}getBounds(){return new $(this.x-this.width,this.y-this.height,this.width,this.height)}toString(){return`[@pixi/math:Ellipse x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`}}class Pe{constructor(...t){let i=Array.isArray(t[0])?t[0]:t;if(typeof i[0]!="number"){const s=[];for(let r=0,n=i.length;ri!=c>i&&t<(l-a)*((i-h)/(c-h))+a&&(s=!s)}return s}toString(){return`[@pixi/math:PolygoncloseStroke=${this.closeStroke}points=${this.points.reduce((t,i)=>`${t}, ${i}`,"")}]`}}class ys{constructor(t=0,i=0,s=0,r=0,n=20){this.x=t,this.y=i,this.width=s,this.height=r,this.radius=n,this.type=_t.RREC}clone(){return new ys(this.x,this.y,this.width,this.height,this.radius)}contains(t,i){if(this.width<=0||this.height<=0)return!1;if(t>=this.x&&t<=this.x+this.width&&i>=this.y&&i<=this.y+this.height){const s=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(i>=this.y+s&&i<=this.y+this.height-s||t>=this.x+s&&t<=this.x+this.width-s)return!0;let r=t-(this.x+s),n=i-(this.y+s);const o=s*s;if(r*r+n*n<=o||(r=t-(this.x+this.width-s),r*r+n*n<=o)||(n=i-(this.y+this.height-s),r*r+n*n<=o)||(r=t-(this.x+s),r*r+n*n<=o))return!0}return!1}toString(){return`[@pixi/math:RoundedRectangle x=${this.x} y=${this.y}width=${this.width} height=${this.height} radius=${this.radius}]`}}class tt{constructor(t=1,i=0,s=0,r=1,n=0,o=0){this.array=null,this.a=t,this.b=i,this.c=s,this.d=r,this.tx=n,this.ty=o}fromArray(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]}set(t,i,s,r,n,o){return this.a=t,this.b=i,this.c=s,this.d=r,this.tx=n,this.ty=o,this}toArray(t,i){this.array||(this.array=new Float32Array(9));const s=i||this.array;return t?(s[0]=this.a,s[1]=this.b,s[2]=0,s[3]=this.c,s[4]=this.d,s[5]=0,s[6]=this.tx,s[7]=this.ty,s[8]=1):(s[0]=this.a,s[1]=this.c,s[2]=this.tx,s[3]=this.b,s[4]=this.d,s[5]=this.ty,s[6]=0,s[7]=0,s[8]=1),s}apply(t,i){i=i||new Y;const s=t.x,r=t.y;return i.x=this.a*s+this.c*r+this.tx,i.y=this.b*s+this.d*r+this.ty,i}applyInverse(t,i){i=i||new Y;const s=1/(this.a*this.d+this.c*-this.b),r=t.x,n=t.y;return i.x=this.d*s*r+-this.c*s*n+(this.ty*this.c-this.tx*this.d)*s,i.y=this.a*s*n+-this.b*s*r+(-this.ty*this.a+this.tx*this.b)*s,i}translate(t,i){return this.tx+=t,this.ty+=i,this}scale(t,i){return this.a*=t,this.d*=i,this.c*=t,this.b*=i,this.tx*=t,this.ty*=i,this}rotate(t){const i=Math.cos(t),s=Math.sin(t),r=this.a,n=this.c,o=this.tx;return this.a=r*i-this.b*s,this.b=r*s+this.b*i,this.c=n*i-this.d*s,this.d=n*s+this.d*i,this.tx=o*i-this.ty*s,this.ty=o*s+this.ty*i,this}append(t){const i=this.a,s=this.b,r=this.c,n=this.d;return this.a=t.a*i+t.b*r,this.b=t.a*s+t.b*n,this.c=t.c*i+t.d*r,this.d=t.c*s+t.d*n,this.tx=t.tx*i+t.ty*r+this.tx,this.ty=t.tx*s+t.ty*n+this.ty,this}setTransform(t,i,s,r,n,o,a,h,l){return this.a=Math.cos(a+l)*n,this.b=Math.sin(a+l)*n,this.c=-Math.sin(a-h)*o,this.d=Math.cos(a-h)*o,this.tx=t-(s*this.a+r*this.c),this.ty=i-(s*this.b+r*this.d),this}prepend(t){const i=this.tx;if(t.a!==1||t.b!==0||t.c!==0||t.d!==1){const s=this.a,r=this.c;this.a=s*t.a+this.b*t.c,this.b=s*t.b+this.b*t.d,this.c=r*t.a+this.d*t.c,this.d=r*t.b+this.d*t.d}return this.tx=i*t.a+this.ty*t.c+t.tx,this.ty=i*t.b+this.ty*t.d+t.ty,this}decompose(t){const i=this.a,s=this.b,r=this.c,n=this.d,o=t.pivot,a=-Math.atan2(-r,n),h=Math.atan2(s,i),l=Math.abs(a+h);return l<1e-5||Math.abs(yi-l)<1e-5?(t.rotation=h,t.skew.x=t.skew.y=0):(t.rotation=0,t.skew.x=a,t.skew.y=h),t.scale.x=Math.sqrt(i*i+s*s),t.scale.y=Math.sqrt(r*r+n*n),t.position.x=this.tx+(o.x*i+o.y*r),t.position.y=this.ty+(o.x*s+o.y*n),t}invert(){const t=this.a,i=this.b,s=this.c,r=this.d,n=this.tx,o=t*r-i*s;return this.a=r/o,this.b=-i/o,this.c=-s/o,this.d=t/o,this.tx=(s*this.ty-r*n)/o,this.ty=-(t*this.ty-i*n)/o,this}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){const t=new tt;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t}copyTo(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t}copyFrom(t){return this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.tx=t.tx,this.ty=t.ty,this}toString(){return`[@pixi/math:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`}static get IDENTITY(){return new tt}static get TEMP_MATRIX(){return new tt}}const Me=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],Be=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],De=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],Fe=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],Dr=[],$o=[],vs=Math.sign;function lc(){for(let e=0;e<16;e++){const t=[];Dr.push(t);for(let i=0;i<16;i++){const s=vs(Me[e]*Me[i]+De[e]*Be[i]),r=vs(Be[e]*Me[i]+Fe[e]*Be[i]),n=vs(Me[e]*De[i]+De[e]*Fe[i]),o=vs(Be[e]*De[i]+Fe[e]*Fe[i]);for(let a=0;a<16;a++)if(Me[a]===s&&Be[a]===r&&De[a]===n&&Fe[a]===o){t.push(a);break}}}for(let e=0;e<16;e++){const t=new tt;t.set(Me[e],Be[e],De[e],Fe[e],0,0),$o.push(t)}}lc();const it={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:e=>Me[e],uY:e=>Be[e],vX:e=>De[e],vY:e=>Fe[e],inv:e=>e&8?e&15:-e&7,add:(e,t)=>Dr[e][t],sub:(e,t)=>Dr[e][it.inv(t)],rotate180:e=>e^4,isVertical:e=>(e&3)===2,byDirection:(e,t)=>Math.abs(e)*2<=Math.abs(t)?t>=0?it.S:it.N:Math.abs(t)*2<=Math.abs(e)?e>0?it.E:it.W:t>0?e>0?it.SE:it.SW:e>0?it.NE:it.NW,matrixAppendRotationInv:(e,t,i=0,s=0)=>{const r=$o[it.inv(t)];r.tx=i,r.ty=s,e.append(r)}};class me{constructor(t,i,s=0,r=0){this._x=s,this._y=r,this.cb=t,this.scope=i}clone(t=this.cb,i=this.scope){return new me(t,i,this._x,this._y)}set(t=0,i=t){return(this._x!==t||this._y!==i)&&(this._x=t,this._y=i,this.cb.call(this.scope)),this}copyFrom(t){return(this._x!==t.x||this._y!==t.y)&&(this._x=t.x,this._y=t.y,this.cb.call(this.scope)),this}copyTo(t){return t.set(this._x,this._y),t}equals(t){return t.x===this._x&&t.y===this._y}toString(){return`[@pixi/math:ObservablePoint x=${0} y=${0} scope=${this.scope}]`}get x(){return this._x}set x(t){this._x!==t&&(this._x=t,this.cb.call(this.scope))}get y(){return this._y}set y(t){this._y!==t&&(this._y=t,this.cb.call(this.scope))}}const jo=class{constructor(){this.worldTransform=new tt,this.localTransform=new tt,this.position=new me(this.onChange,this,0,0),this.scale=new me(this.onChange,this,1,1),this.pivot=new me(this.onChange,this,0,0),this.skew=new me(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}onChange(){this._localID++}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++}toString(){return`[@pixi/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`}updateLocalTransform(){const e=this.localTransform;this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1)}updateTransform(e){const t=this.localTransform;if(this._localID!==this._currentLocalID&&(t.a=this._cx*this.scale.x,t.b=this._sx*this.scale.x,t.c=this._cy*this.scale.y,t.d=this._sy*this.scale.y,t.tx=this.position.x-(this.pivot.x*t.a+this.pivot.y*t.c),t.ty=this.position.y-(this.pivot.x*t.b+this.pivot.y*t.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==e._worldID){const i=e.worldTransform,s=this.worldTransform;s.a=t.a*i.a+t.b*i.c,s.b=t.a*i.b+t.b*i.d,s.c=t.c*i.a+t.d*i.c,s.d=t.c*i.b+t.d*i.d,s.tx=t.tx*i.a+t.ty*i.c+i.tx,s.ty=t.tx*i.b+t.ty*i.d+i.ty,this._parentID=e._worldID,this._worldID++}}setFromMatrix(e){e.decompose(this),this._localID++}get rotation(){return this._rotation}set rotation(e){this._rotation!==e&&(this._rotation=e,this.updateSkew())}};let vi=jo;vi.IDENTITY=new jo;var cc=`varying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void){\n gl_FragColor *= texture2D(uSampler, vTextureCoord);\n}`,uc=`attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n}\n`;function Yo(e,t,i){const s=e.createShader(t);return e.shaderSource(s,i),e.compileShader(s),s}function Fr(e){const t=new Array(e);for(let i=0;ie.type==="float"&&e.size===1&&!e.isArray,code:e=>`\n if(uv["${e}"] !== ud["${e}"].value)\n {\n ud["${e}"].value = uv["${e}"]\n gl.uniform1f(ud["${e}"].location, uv["${e}"])\n }\n `},{test:(e,t)=>(e.type==="sampler2D"||e.type==="samplerCube"||e.type==="sampler2DArray")&&e.size===1&&!e.isArray&&(t==null||t.castToBaseTexture!==void 0),code:e=>`t = syncData.textureCount++;\n\n renderer.texture.bind(uv["${e}"], t);\n\n if(ud["${e}"].value !== t)\n {\n ud["${e}"].value = t;\n gl.uniform1i(ud["${e}"].location, t);\n; // eslint-disable-line max-len\n }`},{test:(e,t)=>e.type==="mat3"&&e.size===1&&!e.isArray&&t.a!==void 0,code:e=>`\n gl.uniformMatrix3fv(ud["${e}"].location, false, uv["${e}"].toArray(true));\n `,codeUbo:e=>`\n var ${e}_matrix = uv.${e}.toArray(true);\n\n data[offset] = ${e}_matrix[0];\n data[offset+1] = ${e}_matrix[1];\n data[offset+2] = ${e}_matrix[2];\n \n data[offset + 4] = ${e}_matrix[3];\n data[offset + 5] = ${e}_matrix[4];\n data[offset + 6] = ${e}_matrix[5];\n \n data[offset + 8] = ${e}_matrix[6];\n data[offset + 9] = ${e}_matrix[7];\n data[offset + 10] = ${e}_matrix[8];\n `},{test:(e,t)=>e.type==="vec2"&&e.size===1&&!e.isArray&&t.x!==void 0,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v.x || cv[1] !== v.y)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud["${e}"].location, v.x, v.y);\n }`,codeUbo:e=>`\n v = uv.${e};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n `},{test:e=>e.type==="vec2"&&e.size===1&&!e.isArray,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2f(ud["${e}"].location, v[0], v[1]);\n }\n `},{test:(e,t)=>e.type==="vec4"&&e.size===1&&!e.isArray&&t.width!==void 0,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud["${e}"].location, v.x, v.y, v.width, v.height)\n }`,codeUbo:e=>`\n v = uv.${e};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n data[offset+2] = v.width;\n data[offset+3] = v.height;\n `},{test:(e,t)=>e.type==="vec4"&&e.size===1&&!e.isArray&&t.red!==void 0,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud["${e}"].location, v.red, v.green, v.blue, v.alpha)\n }`,codeUbo:e=>`\n v = uv.${e};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n data[offset+3] = v.alpha;\n `},{test:(e,t)=>e.type==="vec3"&&e.size===1&&!e.isArray&&t.red!==void 0,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.a)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n \n gl.uniform3f(ud["${e}"].location, v.red, v.green, v.blue)\n }`,codeUbo:e=>`\n v = uv.${e};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n `},{test:e=>e.type==="vec4"&&e.size===1&&!e.isArray,code:e=>`\n cv = ud["${e}"].value;\n v = uv["${e}"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(ud["${e}"].location, v[0], v[1], v[2], v[3])\n }`}],dc={float:`\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1f(location, v);\n }`,vec2:`\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2f(location, v[0], v[1])\n }`,vec3:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3f(location, v[0], v[1], v[2])\n }`,vec4:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(location, v[0], v[1], v[2], v[3]);\n }`,int:`\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,ivec2:`\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }`,ivec3:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,ivec4:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,uint:`\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1ui(location, v);\n }`,uvec2:`\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2ui(location, v[0], v[1]);\n }`,uvec3:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3ui(location, v[0], v[1], v[2]);\n }`,uvec4:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4ui(location, v[0], v[1], v[2], v[3]);\n }`,bool:`\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1i(location, v);\n }`,bvec2:`\n if (cv[0] != v[0] || cv[1] != v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }`,bvec3:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,bvec4:`\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,mat2:"gl.uniformMatrix2fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",sampler2D:`\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,samplerCube:`\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,sampler2DArray:`\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`},fc={float:"gl.uniform1fv(location, v)",vec2:"gl.uniform2fv(location, v)",vec3:"gl.uniform3fv(location, v)",vec4:"gl.uniform4fv(location, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat2:"gl.uniformMatrix2fv(location, false, v)",int:"gl.uniform1iv(location, v)",ivec2:"gl.uniform2iv(location, v)",ivec3:"gl.uniform3iv(location, v)",ivec4:"gl.uniform4iv(location, v)",uint:"gl.uniform1uiv(location, v)",uvec2:"gl.uniform2uiv(location, v)",uvec3:"gl.uniform3uiv(location, v)",uvec4:"gl.uniform4uiv(location, v)",bool:"gl.uniform1iv(location, v)",bvec2:"gl.uniform2iv(location, v)",bvec3:"gl.uniform3iv(location, v)",bvec4:"gl.uniform4iv(location, v)",sampler2D:"gl.uniform1iv(location, v)",samplerCube:"gl.uniform1iv(location, v)",sampler2DArray:"gl.uniform1iv(location, v)"};function pc(e,t){var s;const i=[`\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n `];for(const r in e.uniforms){const n=t[r];if(!n){(s=e.uniforms[r])!=null&&s.group&&(e.uniforms[r].ubo?i.push(`\n renderer.shader.syncUniformBufferGroup(uv.${r}, \'${r}\');\n `):i.push(`\n renderer.shader.syncUniformGroup(uv.${r}, syncData);\n `));continue}const o=e.uniforms[r];let a=!1;for(let h=0;h=et.WEBGL2&&(t=e.getContext("webgl2",{})),t||(t=e.getContext("webgl",{})||e.getContext("experimental-webgl",{}),t?t.getExtension("WEBGL_draw_buffers"):t=null),Ke=t}return Ke}let xs;function mc(){if(!xs){xs=Pt.MEDIUM;const e=Zo();e&&e.getShaderPrecisionFormat&&(xs=e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision?Pt.HIGH:Pt.MEDIUM)}return xs}function Jo(e,t){const i=e.getShaderSource(t).split(`\n`).map((l,c)=>`${c}: ${l}`),s=e.getShaderInfoLog(t),r=s.split(`\n`),n={},o=r.map(l=>parseFloat(l.replace(/^ERROR\\: 0\\:([\\d]+)\\:.*$/,"$1"))).filter(l=>l&&!n[l]?(n[l]=!0,!0):!1),a=[""];o.forEach(l=>{i[l-1]=`%c${i[l-1]}%c`,a.push("background: #FF0000; color:#FFFFFF; font-size: 10px","font-size: 10px")});const h=i.join(`\n`);a[0]=h,console.error(s),console.groupCollapsed("click to view full shader code"),console.warn(...a),console.groupEnd()}function _c(e,t,i,s){e.getProgramParameter(t,e.LINK_STATUS)||(e.getShaderParameter(i,e.COMPILE_STATUS)||Jo(e,i),e.getShaderParameter(s,e.COMPILE_STATUS)||Jo(e,s),console.error("PixiJS Error: Could not initialize shader."),e.getProgramInfoLog(t)!==""&&console.warn("PixiJS Warning: gl.getProgramInfoLog()",e.getProgramInfoLog(t)))}const gc={float:1,vec2:2,vec3:3,vec4:4,int:1,ivec2:2,ivec3:3,ivec4:4,uint:1,uvec2:2,uvec3:3,uvec4:4,bool:1,bvec2:2,bvec3:3,bvec4:4,mat2:4,mat3:9,mat4:16,sampler2D:1};function Qo(e){return gc[e]}let bs=null;const ta={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",UNSIGNED_INT:"uint",UNSIGNED_INT_VEC2:"uvec2",UNSIGNED_INT_VEC3:"uvec3",UNSIGNED_INT_VEC4:"uvec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",INT_SAMPLER_2D:"sampler2D",UNSIGNED_INT_SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube",INT_SAMPLER_CUBE:"samplerCube",UNSIGNED_INT_SAMPLER_CUBE:"samplerCube",SAMPLER_2D_ARRAY:"sampler2DArray",INT_SAMPLER_2D_ARRAY:"sampler2DArray",UNSIGNED_INT_SAMPLER_2D_ARRAY:"sampler2DArray"};function ea(e,t){if(!bs){const i=Object.keys(ta);bs={};for(let s=0;s0&&(i+=`\nelse `),sthis.size&&this.flush(),this._vertexCount+=e.vertexData.length/2,this._indexCount+=e.indices.length,this._bufferedTextures[this._bufferSize]=e._texture.baseTexture,this._bufferedElements[this._bufferSize++]=e)}buildTexturesAndDrawCalls(){const{_bufferedTextures:e,maxTextures:t}=this,i=Zt._textureArrayPool,s=this.renderer.batch,r=this._tempBoundTextures,n=this.renderer.textureGC.count;let o=++V._globalBatch,a=0,h=i[0],l=0;s.copyBoundTextures(r,t);for(let c=0;c=t&&(s.boundArray(h,r,o,t),this.buildDrawCalls(h,l,c),l=c,h=i[++a],++o),u._batchEnabled=o,u.touched=n,h.elements[h.count++]=u)}h.count>0&&(s.boundArray(h,r,o,t),this.buildDrawCalls(h,l,this._bufferSize),++a,++o);for(let c=0;c0);for(let p=0;p=0;--r)t[r]=s[r]||null,t[r]&&(t[r]._batchLocation=r)}boundArray(t,i,s,r){const{elements:n,ids:o,count:a}=t;let h=0;for(let l=0;l=0&&u=et.WEBGL2&&(s=t.getContext("webgl2",i)),s)this.webGLVersion=2;else if(this.webGLVersion=1,s=t.getContext("webgl",i)||t.getContext("experimental-webgl",i),!s)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=s,this.getExtensions(),this.gl}getExtensions(){const{gl:t}=this,i={loseContext:t.getExtension("WEBGL_lose_context"),anisotropicFiltering:t.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),s3tc:t.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:t.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:t.getExtension("WEBGL_compressed_texture_etc"),etc1:t.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:t.getExtension("WEBGL_compressed_texture_atc"),astc:t.getExtension("WEBGL_compressed_texture_astc")};this.webGLVersion===1?Object.assign(this.extensions,i,{drawBuffers:t.getExtension("WEBGL_draw_buffers"),depthTexture:t.getExtension("WEBGL_depth_texture"),vertexArrayObject:t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:t.getExtension("OES_element_index_uint"),floatTexture:t.getExtension("OES_texture_float"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),textureHalfFloat:t.getExtension("OES_texture_half_float"),textureHalfFloatLinear:t.getExtension("OES_texture_half_float_linear")}):this.webGLVersion===2&&Object.assign(this.extensions,i,{colorBufferFloat:t.getExtension("EXT_color_buffer_float")})}handleContextLost(t){t.preventDefault(),setTimeout(()=>{this.gl.isContextLost()&&this.extensions.loseContext&&this.extensions.loseContext.restoreContext()},0)}handleContextRestored(){this.renderer.runners.contextChange.emit(this.gl)}destroy(){const t=this.renderer.view;this.renderer=null,t.removeEventListener!==void 0&&(t.removeEventListener("webglcontextlost",this.handleContextLost),t.removeEventListener("webglcontextrestored",this.handleContextRestored)),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()}postrender(){this.renderer.objectRenderer.renderingToScreen&&this.gl.flush()}validateContext(t){const i=t.getContextAttributes(),s="WebGL2RenderingContext"in globalThis&&t instanceof globalThis.WebGL2RenderingContext;s&&(this.webGLVersion=2),i&&!i.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");const r=s||!!t.getExtension("OES_element_index_uint");this.supports.uint32Indices=r,r||console.warn("Provided WebGL context does not support 32 index buffer, complex graphics may not render correctly")}}wi.defaultOptions={context:null,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:"default"},wi.extension={type:M.RendererSystem,name:"context"},U.add(wi);class Ac extends Ye{upload(t,i,s){const r=t.gl;r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Nt.UNPACK);const n=i.realWidth,o=i.realHeight;return s.width===n&&s.height===o?r.texSubImage2D(i.target,0,0,0,n,o,i.format,s.type,this.data):(s.width=n,s.height=o,r.texImage2D(i.target,0,s.internalFormat,n,o,0,i.format,s.type,this.data)),!0}}class ws{constructor(t,i){this.width=Math.round(t||100),this.height=Math.round(i||100),this.stencil=!1,this.depth=!1,this.dirtyId=0,this.dirtyFormat=0,this.dirtySize=0,this.depthTexture=null,this.colorTextures=[],this.glFramebuffers={},this.disposeRunner=new Bt("disposeFramebuffer"),this.multisample=ht.NONE}get colorTexture(){return this.colorTextures[0]}addColorTexture(t=0,i){return this.colorTextures[t]=i||new V(null,{scaleMode:ee.NEAREST,resolution:1,mipmap:Wt.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this}addDepthTexture(t){return this.depthTexture=t||new V(new Ac(null,{width:this.width,height:this.height}),{scaleMode:ee.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:Wt.OFF,format:C.DEPTH_COMPONENT,type:k.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this}enableDepth(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this}enableStencil(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this}resize(t,i){if(t=Math.round(t),i=Math.round(i),!(t===this.width&&i===this.height)){this.width=t,this.height=i,this.dirtyId++,this.dirtySize++;for(let s=0;s{const r=this.source;this.url=r.src;const n=()=>{this.destroyed||(r.onload=null,r.onerror=null,this.resize(r.width,r.height),this._load=null,this.createBitmap?i(this.process()):i(this))};r.complete&&r.src?n():(r.onload=n,r.onerror=o=>{s(o),this.onError.emit(o)})}),this._load)}process(){const t=this.source;if(this._process!==null)return this._process;if(this.bitmap!==null||!globalThis.createImageBitmap)return Promise.resolve(this);const i=globalThis.createImageBitmap,s=!t.crossOrigin||t.crossOrigin==="anonymous";return this._process=fetch(t.src,{mode:s?"cors":"no-cors"}).then(r=>r.blob()).then(r=>i(r,0,0,t.width,t.height,{premultiplyAlpha:this.alphaMode===null||this.alphaMode===Nt.UNPACK?"premultiply":"none"})).then(r=>this.destroyed?Promise.reject():(this.bitmap=r,this.update(),this._process=null,Promise.resolve(this))),this._process}upload(t,i,s){if(typeof this.alphaMode=="number"&&(i.alphaMode=this.alphaMode),!this.createBitmap)return super.upload(t,i,s);if(!this.bitmap&&(this.process(),!this.bitmap))return!1;if(super.upload(t,i,s,this.bitmap),!this.preserveBitmap){let r=!0;const n=i._glTextures;for(const o in n){const a=n[o];if(a!==s&&a.dirtyId!==i.dirtyId){r=!1;break}}r&&(this.bitmap.close&&this.bitmap.close(),this.bitmap=null)}return!0}dispose(){this.source.onload=null,this.source.onerror=null,super.dispose(),this.bitmap&&(this.bitmap.close(),this.bitmap=null),this._process=null,this._load=null}static test(t){return typeof HTMLImageElement!="undefined"&&(typeof t=="string"||t instanceof HTMLImageElement)}}class Ur{constructor(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.uvsFloat32=new Float32Array(8)}set(t,i,s){const r=i.width,n=i.height;if(s){const o=t.width/2/r,a=t.height/2/n,h=t.x/r+o,l=t.y/n+a;s=it.add(s,it.NW),this.x0=h+o*it.uX(s),this.y0=l+a*it.uY(s),s=it.add(s,2),this.x1=h+o*it.uX(s),this.y1=l+a*it.uY(s),s=it.add(s,2),this.x2=h+o*it.uX(s),this.y2=l+a*it.uY(s),s=it.add(s,2),this.x3=h+o*it.uX(s),this.y3=l+a*it.uY(s)}else this.x0=t.x/r,this.y0=t.y/n,this.x1=(t.x+t.width)/r,this.y1=t.y/n,this.x2=(t.x+t.width)/r,this.y2=(t.y+t.height)/n,this.x3=t.x/r,this.y3=(t.y+t.height)/n;this.uvsFloat32[0]=this.x0,this.uvsFloat32[1]=this.y0,this.uvsFloat32[2]=this.x1,this.uvsFloat32[3]=this.y1,this.uvsFloat32[4]=this.x2,this.uvsFloat32[5]=this.y2,this.uvsFloat32[6]=this.x3,this.uvsFloat32[7]=this.y3}toString(){return`[@pixi/core:TextureUvs x0=${this.x0} y0=${this.y0} x1=${this.x1} y1=${this.y1} x2=${this.x2} y2=${this.y2} x3=${this.x3} y3=${this.y3}]`}}const oa=new Ur;function Ss(e){e.destroy=function(){},e.on=function(){},e.once=function(){},e.emit=function(){}}class B extends Ve{constructor(t,i,s,r,n,o,a){if(super(),this.noFrame=!1,i||(this.noFrame=!0,i=new $(0,0,1,1)),t instanceof B&&(t=t.baseTexture),this.baseTexture=t,this._frame=i,this.trim=r,this.valid=!1,this._uvs=oa,this.uvMatrix=null,this.orig=s||i,this._rotate=Number(n||0),n===!0)this._rotate=2;else if(this._rotate%2!==0)throw new Error("attempt to use diamond-shaped UVs. If you are sure, set rotation manually");this.defaultAnchor=o?new Y(o.x,o.y):new Y(0,0),this.defaultBorders=a,this._updateID=0,this.textureCacheIds=[],t.valid?this.noFrame?t.valid&&this.onBaseTextureUpdated(t):this.frame=i:t.once("loaded",this.onBaseTextureUpdated,this),this.noFrame&&t.on("update",this.onBaseTextureUpdated,this)}update(){this.baseTexture.resource&&this.baseTexture.resource.update()}onBaseTextureUpdated(t){if(this.noFrame){if(!this.baseTexture.valid)return;this._frame.width=t.width,this._frame.height=t.height,this.valid=!0,this.updateUvs()}else this.frame=this._frame;this.emit("update",this)}destroy(t){if(this.baseTexture){if(t){const{resource:i}=this.baseTexture;(i==null?void 0:i.url)&&St[i.url]&&B.removeFromCache(i.url),this.baseTexture.destroy()}this.baseTexture.off("loaded",this.onBaseTextureUpdated,this),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture=null}this._frame=null,this._uvs=null,this.trim=null,this.orig=null,this.valid=!1,B.removeFromCache(this),this.textureCacheIds=null}clone(){var r;const t=this._frame.clone(),i=this._frame===this.orig?t:this.orig.clone(),s=new B(this.baseTexture,!this.noFrame&&t,i,(r=this.trim)==null?void 0:r.clone(),this.rotate,this.defaultAnchor,this.defaultBorders);return this.noFrame&&(s._frame=t),s}updateUvs(){this._uvs===oa&&(this._uvs=new Ur),this._uvs.set(this._frame,this.baseTexture,this.rotate),this._updateID++}static from(t,i={},s=P.STRICT_TEXTURE_CACHE){const r=typeof t=="string";let n=null;if(r)n=t;else if(t instanceof V){if(!t.cacheId){const a=(i==null?void 0:i.pixiIdPrefix)||"pixiid";t.cacheId=`${a}-${xe()}`,V.addToCache(t,t.cacheId)}n=t.cacheId}else{if(!t._pixiId){const a=(i==null?void 0:i.pixiIdPrefix)||"pixiid";t._pixiId=`${a}_${xe()}`}n=t._pixiId}let o=St[n];if(r&&s&&!o)throw new Error(`The cacheId "${n}" does not exist in TextureCache.`);return!o&&!(t instanceof V)?(i.resolution||(i.resolution=fe(t)),o=new B(new V(t,i)),o.baseTexture.cacheId=n,V.addToCache(o.baseTexture,n),B.addToCache(o,n)):!o&&t instanceof V&&(o=new B(t),B.addToCache(o,n)),o}static fromURL(t,i){const s=Object.assign({autoLoad:!1},i==null?void 0:i.resourceOptions),r=B.from(t,Object.assign({resourceOptions:s},i),!1),n=r.baseTexture.resource;return r.baseTexture.valid?Promise.resolve(r):n.load().then(()=>Promise.resolve(r))}static fromBuffer(t,i,s,r){return new B(V.fromBuffer(t,i,s,r))}static fromLoader(t,i,s,r){const n=new V(t,Object.assign({scaleMode:V.defaultOptions.scaleMode,resolution:fe(i)},r)),{resource:o}=n;o instanceof Or&&(o.url=i);const a=new B(n);return s||(s=i),V.addToCache(a.baseTexture,s),B.addToCache(a,s),s!==i&&(V.addToCache(a.baseTexture,i),B.addToCache(a,i)),a.baseTexture.valid?Promise.resolve(a):new Promise(h=>{a.baseTexture.once("loaded",()=>h(a))})}static addToCache(t,i){i&&(t.textureCacheIds.includes(i)||t.textureCacheIds.push(i),St[i]&&St[i]!==t&&console.warn(`Texture added to the cache with an id [${i}] that already had an entry`),St[i]=t)}static removeFromCache(t){if(typeof t=="string"){const i=St[t];if(i){const s=i.textureCacheIds.indexOf(t);return s>-1&&i.textureCacheIds.splice(s,1),delete St[t],i}}else if(t!=null&&t.textureCacheIds){for(let i=0;ithis.baseTexture.width,a=s+n>this.baseTexture.height;if(o||a){const h=o&&a?"and":"or",l=`X: ${i} + ${r} = ${i+r} > ${this.baseTexture.width}`,c=`Y: ${s} + ${n} = ${s+n} > ${this.baseTexture.height}`;throw new Error(`Texture Error: frame does not fit inside the base Texture dimensions: ${l} ${h} ${c}`)}this.valid=r&&n&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=t),this.valid&&this.updateUvs()}get rotate(){return this._rotate}set rotate(t){this._rotate=t,this.valid&&this.updateUvs()}get width(){return this.orig.width}get height(){return this.orig.height}castToBaseTexture(){return this.baseTexture}static get EMPTY(){return B._EMPTY||(B._EMPTY=new B(new V),Ss(B._EMPTY),Ss(B._EMPTY.baseTexture)),B._EMPTY}static get WHITE(){if(!B._WHITE){const t=P.ADAPTER.createCanvas(16,16),i=t.getContext("2d");t.width=16,t.height=16,i.fillStyle="white",i.fillRect(0,0,16,16),B._WHITE=new B(V.from(t)),Ss(B._WHITE),Ss(B._WHITE.baseTexture)}return B._WHITE}}class be extends B{constructor(t,i){super(t,i),this.valid=!0,this.filterFrame=null,this.filterPoolKey=null,this.updateUvs()}get framebuffer(){return this.baseTexture.framebuffer}get multisample(){return this.framebuffer.multisample}set multisample(t){this.framebuffer.multisample=t}resize(t,i,s=!0){const r=this.baseTexture.resolution,n=Math.round(t*r)/r,o=Math.round(i*r)/r;this.valid=n>0&&o>0,this._frame.width=this.orig.width=n,this._frame.height=this.orig.height=o,s&&this.baseTexture.resize(n,o),this.updateUvs()}setResolution(t){const{baseTexture:i}=this;i.resolution!==t&&(i.setResolution(t),this.resize(i.width,i.height,!1))}static create(t){return new be(new Lr(t))}}class kr{constructor(t){this.texturePool={},this.textureOptions=t||{},this.enableFullScreen=!1,this._pixelsWidth=0,this._pixelsHeight=0}createTexture(t,i,s=ht.NONE){const r=new Lr(Object.assign({width:t,height:i,resolution:1,multisample:s},this.textureOptions));return new be(r)}getOptimalTexture(t,i,s=1,r=ht.NONE){let n;t=Math.ceil(t*s-1e-6),i=Math.ceil(i*s-1e-6),!this.enableFullScreen||t!==this._pixelsWidth||i!==this._pixelsHeight?(t=_i(t),i=_i(i),n=((t&65535)<<16|i&65535)>>>0,r>1&&(n+=r*4294967296)):n=r>1?-r:-1,this.texturePool[n]||(this.texturePool[n]=[]);let o=this.texturePool[n].pop();return o||(o=this.createTexture(t,i,r)),o.filterPoolKey=n,o.setResolution(s),o}getFilterTexture(t,i,s){const r=this.getOptimalTexture(t.width,t.height,i||t.resolution,s||ht.NONE);return r.filterFrame=t.filterFrame,r}returnTexture(t){const i=t.filterPoolKey;t.filterFrame=null,this.texturePool[i].push(t)}returnFilterTexture(t){this.returnTexture(t)}clear(t){if(t=t!==!1,t)for(const i in this.texturePool){const s=this.texturePool[i];if(s)for(let r=0;r0&&t.height>0;for(const i in this.texturePool){if(!(Number(i)<0))continue;const s=this.texturePool[i];if(s)for(let r=0;r1&&(c=this.getOptimalFilterTexture(l.width,l.height,i.resolution),c.filterFrame=l.filterFrame),s[u].apply(this,l,c,$t.CLEAR,i);const d=l;l=c,c=d}s[u].apply(this,l,h.renderTexture,$t.BLEND,i),u>1&&i.multisample>1&&this.returnFilterTexture(i.renderTexture),this.returnFilterTexture(l),this.returnFilterTexture(c)}i.clear(),this.statePool.push(i)}bindAndClear(t,i=$t.CLEAR){const{renderTexture:s,state:r}=this.renderer;if(t===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,t!=null&&t.filterFrame){const o=this.tempRect;o.x=0,o.y=0,o.width=t.filterFrame.width,o.height=t.filterFrame.height,s.bind(t,t.filterFrame,o)}else t!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?s.bind(t):this.renderer.renderTexture.bind(t,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);const n=r.stateId&1||this.forceClear;(i===$t.CLEAR||i===$t.BLIT&&n)&&this.renderer.framebuffer.clear(0,0,0,0)}applyFilter(t,i,s,r){const n=this.renderer;n.state.set(t.state),this.bindAndClear(s,r),t.uniforms.uSampler=i,t.uniforms.filterGlobals=this.globalUniforms,n.shader.bind(t),t.legacy=!!t.program.attributeData.aTextureCoord,t.legacy?(this.quadUv.map(i._frame,i.filterFrame),n.geometry.bind(this.quadUv),n.geometry.draw(zt.TRIANGLES)):(n.geometry.bind(this.quad),n.geometry.draw(zt.TRIANGLE_STRIP))}calculateSpriteMatrix(t,i){const{sourceFrame:s,destinationFrame:r}=this.activeState,{orig:n}=i._texture,o=t.set(r.width,0,0,r.height,s.x,s.y),a=i.worldTransform.copyTo(tt.TEMP_MATRIX);return a.invert(),o.prepend(a),o.scale(1/n.width,1/n.height),o.translate(i.anchor.x,i.anchor.y),o}destroy(){this.renderer=null,this.texturePool.clear(!1)}getOptimalFilterTexture(t,i,s=1,r=ht.NONE){return this.texturePool.getOptimalTexture(t,i,s,r)}getFilterTexture(t,i,s){if(typeof t=="number"){const n=t;t=i,i=n}t=t||this.activeState.renderTexture;const r=this.texturePool.getOptimalTexture(t.width,t.height,i||t.resolution,s||ht.NONE);return r.filterFrame=t.filterFrame,r}returnFilterTexture(t){this.texturePool.returnTexture(t)}emptyPool(){this.texturePool.clear(!0)}resize(){this.texturePool.setScreenSize(this.renderer.view)}transformAABB(t,i){const s=As[0],r=As[1],n=As[2],o=As[3];s.set(i.left,i.top),r.set(i.left,i.bottom),n.set(i.right,i.top),o.set(i.right,i.bottom),t.apply(s,s),t.apply(r,r),t.apply(n,n),t.apply(o,o);const a=Math.min(s.x,r.x,n.x,o.x),h=Math.min(s.y,r.y,n.y,o.y),l=Math.max(s.x,r.x,n.x,o.x),c=Math.max(s.y,r.y,n.y,o.y);i.x=a,i.y=h,i.width=l-a,i.height=c-h}roundFrame(t,i,s,r,n){if(!(t.width<=0||t.height<=0||s.width<=0||s.height<=0)){if(n){const{a:o,b:a,c:h,d:l}=n;if((Math.abs(a)>1e-4||Math.abs(h)>1e-4)&&(Math.abs(o)>1e-4||Math.abs(l)>1e-4))return}n=n?Hr.copyFrom(n):Hr.identity(),n.translate(-s.x,-s.y).scale(r.width/s.width,r.height/s.height).translate(r.x,r.y),this.transformAABB(n,t),t.ceil(i),this.transformAABB(n.invert(),t)}}}Xr.extension={type:M.RendererSystem,name:"filter"},U.add(Xr);class la{constructor(t){this.framebuffer=t,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=ht.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}}const Rc=new $;class Vr{constructor(t){this.renderer=t,this.managedFramebuffers=[],this.unknownFramebuffer=new ws(10,10),this.msaaSamples=null}contextChange(){this.disposeAll(!0);const t=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new $,this.hasMRT=!0,this.writeDepthTexture=!0,this.renderer.context.webGLVersion===1){let i=this.renderer.context.extensions.drawBuffers,s=this.renderer.context.extensions.depthTexture;P.PREFER_ENV===et.WEBGL_LEGACY&&(i=null,s=null),i?t.drawBuffers=r=>i.drawBuffersWEBGL(r):(this.hasMRT=!1,t.drawBuffers=()=>{}),s||(this.writeDepthTexture=!1)}else this.msaaSamples=t.getInternalformatParameter(t.RENDERBUFFER,t.RGBA8,t.SAMPLES)}bind(t,i,s=0){const{gl:r}=this;if(t){const n=t.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(t);this.current!==t&&(this.current=t,r.bindFramebuffer(r.FRAMEBUFFER,n.framebuffer)),n.mipLevel!==s&&(t.dirtyId++,t.dirtyFormat++,n.mipLevel=s),n.dirtyId!==t.dirtyId&&(n.dirtyId=t.dirtyId,n.dirtyFormat!==t.dirtyFormat?(n.dirtyFormat=t.dirtyFormat,n.dirtySize=t.dirtySize,this.updateFramebuffer(t,s)):n.dirtySize!==t.dirtySize&&(n.dirtySize=t.dirtySize,this.resizeFramebuffer(t)));for(let o=0;o>s,a=i.height>>s,h=o/i.width;this.setViewport(i.x*h,i.y*h,o,a)}else{const o=t.width>>s,a=t.height>>s;this.setViewport(0,0,o,a)}}else this.current&&(this.current=null,r.bindFramebuffer(r.FRAMEBUFFER,null)),i?this.setViewport(i.x,i.y,i.width,i.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)}setViewport(t,i,s,r){const n=this.viewport;t=Math.round(t),i=Math.round(i),s=Math.round(s),r=Math.round(r),(n.width!==s||n.height!==r||n.x!==t||n.y!==i)&&(n.x=t,n.y=i,n.width=s,n.height=r,this.gl.viewport(t,i,s,r))}get size(){return this.current?{x:0,y:0,width:this.current.width,height:this.current.height}:{x:0,y:0,width:this.renderer.width,height:this.renderer.height}}clear(t,i,s,r,n=Rt.COLOR|Rt.DEPTH){const{gl:o}=this;o.clearColor(t,i,s,r),o.clear(n)}initFramebuffer(t){const{gl:i}=this,s=new la(i.createFramebuffer());return s.multisample=this.detectSamples(t.multisample),t.glFramebuffers[this.CONTEXT_UID]=s,this.managedFramebuffers.push(t),t.disposeRunner.add(this),s}resizeFramebuffer(t){const{gl:i}=this,s=t.glFramebuffers[this.CONTEXT_UID];s.stencil&&(i.bindRenderbuffer(i.RENDERBUFFER,s.stencil),s.msaaBuffer?i.renderbufferStorageMultisample(i.RENDERBUFFER,s.multisample,i.DEPTH24_STENCIL8,t.width,t.height):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,t.width,t.height));const r=t.colorTextures;let n=r.length;i.drawBuffers||(n=Math.min(n,1));for(let o=0;o1&&this.canMultisampleFramebuffer(t)?r.msaaBuffer=r.msaaBuffer||s.createRenderbuffer():r.msaaBuffer&&(s.deleteRenderbuffer(r.msaaBuffer),r.msaaBuffer=null,r.blitFramebuffer&&(r.blitFramebuffer.dispose(),r.blitFramebuffer=null));const a=[];for(let h=0;h1&&s.drawBuffers(a),t.depthTexture&&this.writeDepthTexture){const l=t.depthTexture;this.renderer.texture.bind(l,0),s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,l._glTextures[this.CONTEXT_UID].texture,i)}(t.stencil||t.depth)&&!(t.depthTexture&&this.writeDepthTexture)?(r.stencil=r.stencil||s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,r.stencil),r.msaaBuffer?s.renderbufferStorageMultisample(s.RENDERBUFFER,r.multisample,s.DEPTH24_STENCIL8,t.width,t.height):s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_STENCIL,t.width,t.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.RENDERBUFFER,r.stencil)):r.stencil&&(s.deleteRenderbuffer(r.stencil),r.stencil=null)}canMultisampleFramebuffer(t){return this.renderer.context.webGLVersion!==1&&t.colorTextures.length<=1&&!t.depthTexture}detectSamples(t){const{msaaSamples:i}=this;let s=ht.NONE;if(t<=1||i===null)return s;for(let r=0;r=0&&this.managedFramebuffers.splice(n,1),t.disposeRunner.remove(this),i||(r.deleteFramebuffer(s.framebuffer),s.msaaBuffer&&r.deleteRenderbuffer(s.msaaBuffer),s.stencil&&r.deleteRenderbuffer(s.stencil)),s.blitFramebuffer&&this.disposeFramebuffer(s.blitFramebuffer,i)}disposeAll(t){const i=this.managedFramebuffers;this.managedFramebuffers=[];for(let s=0;ss.createVertexArrayOES(),t.bindVertexArray=r=>s.bindVertexArrayOES(r),t.deleteVertexArray=r=>s.deleteVertexArrayOES(r)):(this.hasVao=!1,t.createVertexArray=()=>null,t.bindVertexArray=()=>null,t.deleteVertexArray=()=>null)}if(i.webGLVersion!==2){const s=t.getExtension("ANGLE_instanced_arrays");s?(t.vertexAttribDivisor=(r,n)=>s.vertexAttribDivisorANGLE(r,n),t.drawElementsInstanced=(r,n,o,a,h)=>s.drawElementsInstancedANGLE(r,n,o,a,h),t.drawArraysInstanced=(r,n,o,a)=>s.drawArraysInstancedANGLE(r,n,o,a)):this.hasInstance=!1}this.canUseUInt32ElementIndex=i.webGLVersion===2||!!i.extensions.uint32ElementIndex}bind(t,i){i=i||this.renderer.shader.shader;const{gl:s}=this;let r=t.glVertexArrayObjects[this.CONTEXT_UID],n=!1;r||(this.managedGeometries[t.id]=t,t.disposeRunner.add(this),t.glVertexArrayObjects[this.CONTEXT_UID]=r={},n=!0);const o=r[i.program.id]||this.initGeometryVao(t,i,n);this._activeGeometry=t,this._activeVao!==o&&(this._activeVao=o,this.hasVao?s.bindVertexArray(o):this.activateVao(t,i.program)),this.updateBuffers()}reset(){this.unbind()}updateBuffers(){const t=this._activeGeometry,i=this.renderer.buffer;for(let s=0;s0?this.maskStack[this.maskStack.length-1]._colorMask:15;s!==i&&this.renderer.gl.colorMask((s&1)!==0,(s&2)!==0,(s&4)!==0,(s&8)!==0)}destroy(){this.renderer=null}}$r.extension={type:M.RendererSystem,name:"mask"},U.add($r);class fa{constructor(t){this.renderer=t,this.maskStack=[],this.glConst=0}getStackLength(){return this.maskStack.length}setMaskStack(t){const{gl:i}=this.renderer,s=this.getStackLength();this.maskStack=t;const r=this.getStackLength();r!==s&&(r===0?i.disable(this.glConst):(i.enable(this.glConst),this._useCurrent()))}_useCurrent(){}destroy(){this.renderer=null,this.maskStack=null}}const pa=new tt,ma=[],Cs=class extends fa{constructor(e){super(e),this.glConst=P.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST}getStackLength(){const e=this.maskStack[this.maskStack.length-1];return e?e._scissorCounter:0}calcScissorRect(e){var o;if(e._scissorRectLocal)return;const t=e._scissorRect,{maskObject:i}=e,{renderer:s}=this,r=s.renderTexture,n=i.getBounds(!0,(o=ma.pop())!=null?o:new $);this.roundFrameToPixels(n,r.current?r.current.resolution:s.resolution,r.sourceFrame,r.destinationFrame,s.projection.transform),t&&n.fit(t),e._scissorRectLocal=n}static isMatrixRotated(e){if(!e)return!1;const{a:t,b:i,c:s,d:r}=e;return(Math.abs(i)>1e-4||Math.abs(s)>1e-4)&&(Math.abs(t)>1e-4||Math.abs(r)>1e-4)}testScissor(e){const{maskObject:t}=e;if(!t.isFastRect||!t.isFastRect()||Cs.isMatrixRotated(t.worldTransform)||Cs.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(e);const i=e._scissorRectLocal;return i.width>0&&i.height>0}roundFrameToPixels(e,t,i,s,r){Cs.isMatrixRotated(r)||(r=r?pa.copyFrom(r):pa.identity(),r.translate(-i.x,-i.y).scale(s.width/i.width,s.height/i.height).translate(s.x,s.y),this.renderer.filter.transformAABB(r,e),e.fit(s),e.x=Math.round(e.x*t),e.y=Math.round(e.y*t),e.width=Math.round(e.width*t),e.height=Math.round(e.height*t))}push(e){e._scissorRectLocal||this.calcScissorRect(e);const{gl:t}=this.renderer;e._scissorRect||t.enable(t.SCISSOR_TEST),e._scissorCounter++,e._scissorRect=e._scissorRectLocal,this._useCurrent()}pop(e){const{gl:t}=this.renderer;e&&ma.push(e._scissorRectLocal),this.getStackLength()>0?this._useCurrent():t.disable(t.SCISSOR_TEST)}_useCurrent(){const e=this.maskStack[this.maskStack.length-1]._scissorRect;let t;this.renderer.renderTexture.current?t=e.y:t=this.renderer.height-e.height-e.y,this.renderer.gl.scissor(e.x,t,e.width,e.height)}};let jr=Cs;jr.extension={type:M.RendererSystem,name:"scissor"},U.add(jr);class Yr extends fa{constructor(t){super(t),this.glConst=P.ADAPTER.getWebGLRenderingContext().STENCIL_TEST}getStackLength(){const t=this.maskStack[this.maskStack.length-1];return t?t._stencilCounter:0}push(t){const i=t.maskObject,{gl:s}=this.renderer,r=t._stencilCounter;r===0&&(this.renderer.framebuffer.forceStencil(),s.clearStencil(0),s.clear(s.STENCIL_BUFFER_BIT),s.enable(s.STENCIL_TEST)),t._stencilCounter++;const n=t._colorMask;n!==0&&(t._colorMask=0,s.colorMask(!1,!1,!1,!1)),s.stencilFunc(s.EQUAL,r,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.INCR),i.renderable=!0,i.render(this.renderer),this.renderer.batch.flush(),i.renderable=!1,n!==0&&(t._colorMask=n,s.colorMask((n&1)!==0,(n&2)!==0,(n&4)!==0,(n&8)!==0)),this._useCurrent()}pop(t){const i=this.renderer.gl;if(this.getStackLength()===0)i.disable(i.STENCIL_TEST);else{const s=this.maskStack.length!==0?this.maskStack[this.maskStack.length-1]:null,r=s?s._colorMask:15;r!==0&&(s._colorMask=0,i.colorMask(!1,!1,!1,!1)),i.stencilOp(i.KEEP,i.KEEP,i.DECR),t.renderable=!0,t.render(this.renderer),this.renderer.batch.flush(),t.renderable=!1,r!==0&&(s._colorMask=r,i.colorMask((r&1)!==0,(r&2)!==0,(r&4)!==0,(r&8)!==0)),this._useCurrent()}}_useCurrent(){const t=this.renderer.gl;t.stencilFunc(t.EQUAL,this.getStackLength(),4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP)}}Yr.extension={type:M.RendererSystem,name:"stencil"},U.add(Yr);class qr{constructor(t){this.renderer=t,this.plugins={},Object.defineProperties(this.plugins,{extract:{enumerable:!1,get(){return z("7.0.0","renderer.plugins.extract has moved to renderer.extract"),t.extract}},prepare:{enumerable:!1,get(){return z("7.0.0","renderer.plugins.prepare has moved to renderer.prepare"),t.prepare}},interaction:{enumerable:!1,get(){return z("7.0.0","renderer.plugins.interaction has been deprecated, use renderer.events"),t.events}}})}init(){const t=this.rendererPlugins;for(const i in t)this.plugins[i]=new t[i](this.renderer)}destroy(){for(const t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null}}qr.extension={type:[M.RendererSystem,M.CanvasRendererSystem],name:"_plugin"},U.add(qr);class Kr{constructor(t){this.renderer=t,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new tt,this.transform=null}update(t,i,s,r){this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=i||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame,s,r),this.transform&&this.projectionMatrix.append(this.transform);const n=this.renderer;n.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,n.globalUniforms.update(),n.shader.shader&&n.shader.syncUniformGroup(n.shader.shader.uniforms.globals)}calculateProjection(t,i,s,r){const n=this.projectionMatrix,o=r?-1:1;n.identity(),n.a=1/i.width*2,n.d=o*(1/i.height*2),n.tx=-1-i.x*n.a,n.ty=-o-i.y*n.d}setTransform(t){}destroy(){this.renderer=null}}Kr.extension={type:M.RendererSystem,name:"projection"},U.add(Kr);const Pc=new vi;class Zr{constructor(t){this.renderer=t,this._tempMatrix=new tt}generateTexture(t,i){const h=i||{},{region:s}=h,r=zn(h,["region"]),n=s||t.getLocalBounds(null,!0);n.width===0&&(n.width=1),n.height===0&&(n.height=1);const o=be.create(bt({width:n.width,height:n.height},r));this._tempMatrix.tx=-n.x,this._tempMatrix.ty=-n.y;const a=t.transform;return t.transform=Pc,this.renderer.render(t,{renderTexture:o,transform:this._tempMatrix,skipUpdateTransform:!!t.parent,blit:!0}),t.transform=a,o}destroy(){}}Zr.extension={type:[M.RendererSystem,M.CanvasRendererSystem],name:"textureGenerator"},U.add(Zr);const Le=new $,Si=new $;class Jr{constructor(t){this.renderer=t,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new $,this.destinationFrame=new $,this.viewportFrame=new $}contextChange(){var i;const t=(i=this.renderer)==null?void 0:i.gl.getContextAttributes();this._rendererPremultipliedAlpha=!!(t&&t.alpha&&t.premultipliedAlpha)}bind(t=null,i,s){const r=this.renderer;this.current=t;let n,o,a;t?(n=t.baseTexture,a=n.resolution,i||(Le.width=t.frame.width,Le.height=t.frame.height,i=Le),s||(Si.x=t.frame.x,Si.y=t.frame.y,Si.width=i.width,Si.height=i.height,s=Si),o=n.framebuffer):(a=r.resolution,i||(Le.width=r._view.screen.width,Le.height=r._view.screen.height,i=Le),s||(s=Le,s.width=i.width,s.height=i.height));const h=this.viewportFrame;h.x=s.x*a,h.y=s.y*a,h.width=s.width*a,h.height=s.height*a,t||(h.y=r.view.height-(h.y+h.height)),h.ceil(),this.renderer.framebuffer.bind(o,h),this.renderer.projection.update(s,i,a,!o),t?this.renderer.mask.setMaskStack(n.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(i),this.destinationFrame.copyFrom(s)}clear(t,i){const s=this.current?this.current.baseTexture.clear:this.renderer.background.backgroundColor,r=j.shared.setValue(t||s);(this.current&&this.current.baseTexture.alphaMode>0||!this.current&&this._rendererPremultipliedAlpha)&&r.premultiply(r.alpha);const n=this.destinationFrame,o=this.current?this.current.baseTexture:this.renderer._view.screen,a=n.width!==o.width||n.height!==o.height;if(a){let{x:h,y:l,width:c,height:u}=this.viewportFrame;h=Math.round(h),l=Math.round(l),c=Math.round(c),u=Math.round(u),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(h,l,c,u)}this.renderer.framebuffer.clear(r.red,r.green,r.blue,r.alpha,i),a&&this.renderer.scissor.pop()}resize(){this.bind(null)}reset(){this.bind(null)}destroy(){this.renderer=null}}Jr.extension={type:M.RendererSystem,name:"renderTexture"},U.add(Jr);class Mc{}class _a{constructor(t,i){this.program=t,this.uniformData=i,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}destroy(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null}}function Bc(e,t){const i={},s=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let r=0;rc>u?1:-1);for(let c=0;c({data:n,offset:0,dataLen:0,dirty:0}));let i=0,s=0,r=0;for(let n=0;n1&&(i=Math.max(i,16)*o.data.size),o.dataLen=i,s%i!==0&&s<16){const a=s%i%16;s+=a,r+=a}s+i>16?(r=Math.ceil(r/16)*16,o.offset=r,r+=i,s=i):(o.offset=r,s+=i,r+=i)}return r=Math.ceil(r/16)*16,{uboElements:t,size:r}}function xa(e,t){const i=[];for(const s in e)t[s]&&i.push(t[s]);return i.sort((s,r)=>s.index-r.index),i}function ba(e,t){if(!e.autoManage)return{size:0,syncFunc:Fc};const i=xa(e.uniforms,t),{uboElements:s,size:r}=va(i),n=[`\n var v = null;\n var v2 = null;\n var cv = null;\n var t = 0;\n var gl = renderer.gl\n var index = 0;\n var data = buffer.data;\n `];for(let o=0;o1){const u=Qo(a.data.type),d=Math.max(ya[a.data.type]/16,1),f=u/d,p=(4-f%4)%4;n.push(`\n cv = ud.${l}.value;\n v = uv.${l};\n offset = ${a.offset/4};\n\n t = 0;\n\n for(var i=0; i < ${a.data.size*d}; i++)\n {\n for(var j = 0; j < ${f}; j++)\n {\n data[offset++] = v[t++];\n }\n offset += ${p};\n }\n\n `)}else{const u=Nc[a.data.type];n.push(`\n cv = ud.${l}.value;\n v = uv.${l};\n offset = ${a.offset/4};\n ${u};\n `)}}return n.push(`\n renderer.buffer.update(buffer);\n `),{size:r,syncFunc:new Function("ud","uv","renderer","syncData","buffer",n.join(`\n`))}}let Lc=0;const Is={textureCount:0,uboCount:0};class Qr{constructor(t){this.destroyed=!1,this.renderer=t,this.systemCheck(),this.gl=null,this.shader=null,this.program=null,this.cache={},this._uboCache={},this.id=Lc++}systemCheck(){if(!sa())throw new Error("Current environment does not allow unsafe-eval, please use @pixi/unsafe-eval module to enable support.")}contextChange(t){this.gl=t,this.reset()}bind(t,i){t.disposeRunner.add(this),t.uniforms.globals=this.renderer.globalUniforms;const s=t.program,r=s.glPrograms[this.renderer.CONTEXT_UID]||this.generateProgram(t);return this.shader=t,this.program!==s&&(this.program=s,this.gl.useProgram(r.program)),i||(Is.textureCount=0,Is.uboCount=0,this.syncUniformGroup(t.uniformGroup,Is)),r}setUniforms(t){const i=this.shader.program,s=i.glPrograms[this.renderer.CONTEXT_UID];i.syncUniforms(s.uniformData,t,this.renderer)}syncUniformGroup(t,i){const s=this.getGlProgram();(!t.static||t.dirtyId!==s.uniformDirtyGroups[t.id])&&(s.uniformDirtyGroups[t.id]=t.dirtyId,this.syncUniforms(t,s,i))}syncUniforms(t,i,s){(t.syncUniforms[this.shader.program.id]||this.createSyncGroups(t))(i.uniformData,t.uniforms,this.renderer,s)}createSyncGroups(t){const i=this.getSignature(t,this.shader.program.uniformData,"u");return this.cache[i]||(this.cache[i]=pc(t,this.shader.program.uniformData)),t.syncUniforms[this.shader.program.id]=this.cache[i],t.syncUniforms[this.shader.program.id]}syncUniformBufferGroup(t,i){const s=this.getGlProgram();if(!t.static||t.dirtyId!==0||!s.uniformGroups[t.id]){t.dirtyId=0;const r=s.uniformGroups[t.id]||this.createSyncBufferGroup(t,s,i);t.buffer.update(),r(s.uniformData,t.uniforms,this.renderer,Is,t.buffer)}this.renderer.buffer.bindBufferBase(t.buffer,s.uniformBufferBindings[i])}createSyncBufferGroup(t,i,s){const{gl:r}=this.renderer;this.renderer.buffer.bind(t.buffer);const n=this.gl.getUniformBlockIndex(i.program,s);i.uniformBufferBindings[s]=this.shader.uniformBindCount,r.uniformBlockBinding(i.program,n,this.shader.uniformBindCount),this.shader.uniformBindCount++;const o=this.getSignature(t,this.shader.program.uniformData,"ubo");let a=this._uboCache[o];if(a||(a=this._uboCache[o]=ba(t,this.shader.program.uniformData)),t.autoManage){const h=new Float32Array(a.size/4);t.buffer.update(h)}return i.uniformGroups[t.id]=a.syncFunc,i.uniformGroups[t.id]}getSignature(t,i,s){const r=t.uniforms,n=[`${s}-`];for(const o in r)n.push(o),i[o]&&n.push(i[o].type);return n.join("-")}getGlProgram(){return this.shader?this.shader.program.glPrograms[this.renderer.CONTEXT_UID]:null}generateProgram(t){const i=this.gl,s=t.program,r=ga(i,s);return s.glPrograms[this.renderer.CONTEXT_UID]=r,r}reset(){this.program=null,this.shader=null}disposeShader(t){this.shader===t&&(this.shader=null)}destroy(){this.renderer=null,this.destroyed=!0}}Qr.extension={type:M.RendererSystem,name:"shader"},U.add(Qr);class Ai{constructor(t){this.renderer=t}run(t){const{renderer:i}=this;i.runners.init.emit(i.options),t.hello&&console.log(`PixiJS 7.2.4 - ${i.rendererLogId} - https://pixijs.com`),i.resize(i.screen.width,i.screen.height)}destroy(){}}Ai.defaultOptions={hello:!1},Ai.extension={type:[M.RendererSystem,M.CanvasRendererSystem],name:"startup"},U.add(Ai);function Oc(e,t=[]){return t[G.NORMAL]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.ADD]=[e.ONE,e.ONE],t[G.MULTIPLY]=[e.DST_COLOR,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.SCREEN]=[e.ONE,e.ONE_MINUS_SRC_COLOR,e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.OVERLAY]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.DARKEN]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.LIGHTEN]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.COLOR_DODGE]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.COLOR_BURN]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.HARD_LIGHT]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.SOFT_LIGHT]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.DIFFERENCE]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.EXCLUSION]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.HUE]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.SATURATION]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.COLOR]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.LUMINOSITY]=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.NONE]=[0,0],t[G.NORMAL_NPM]=[e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.ADD_NPM]=[e.SRC_ALPHA,e.ONE,e.ONE,e.ONE],t[G.SCREEN_NPM]=[e.SRC_ALPHA,e.ONE_MINUS_SRC_COLOR,e.ONE,e.ONE_MINUS_SRC_ALPHA],t[G.SRC_IN]=[e.DST_ALPHA,e.ZERO],t[G.SRC_OUT]=[e.ONE_MINUS_DST_ALPHA,e.ZERO],t[G.SRC_ATOP]=[e.DST_ALPHA,e.ONE_MINUS_SRC_ALPHA],t[G.DST_OVER]=[e.ONE_MINUS_DST_ALPHA,e.ONE],t[G.DST_IN]=[e.ZERO,e.SRC_ALPHA],t[G.DST_OUT]=[e.ZERO,e.ONE_MINUS_SRC_ALPHA],t[G.DST_ATOP]=[e.ONE_MINUS_DST_ALPHA,e.SRC_ALPHA],t[G.XOR]=[e.ONE_MINUS_DST_ALPHA,e.ONE_MINUS_SRC_ALPHA],t[G.SUBTRACT]=[e.ONE,e.ONE,e.ONE,e.ONE,e.FUNC_REVERSE_SUBTRACT,e.FUNC_ADD],t}const Uc=0,kc=1,Gc=2,Hc=3,Xc=4,Vc=5,tn=class{constructor(){this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode=G.NONE,this._blendEq=!1,this.map=[],this.map[Uc]=this.setBlend,this.map[kc]=this.setOffset,this.map[Gc]=this.setCullFace,this.map[Hc]=this.setDepthTest,this.map[Xc]=this.setFrontFace,this.map[Vc]=this.setDepthMask,this.checks=[],this.defaultState=new ne,this.defaultState.blend=!0}contextChange(e){this.gl=e,this.blendModes=Oc(e),this.set(this.defaultState),this.reset()}set(e){if(e=e||this.defaultState,this.stateId!==e.data){let t=this.stateId^e.data,i=0;for(;t;)t&1&&this.map[i].call(this,!!(e.data&1<>1,i++;this.stateId=e.data}for(let t=0;tt.systems[n]),s=[...i,...Object.keys(t.systems).filter(n=>!i.includes(n))];for(const n of s)this.addSystem(t.systems[n],n)}addRunners(...t){t.forEach(i=>{this.runners[i]=new Bt(i)})}addSystem(t,i){const s=new t(this);if(this[i])throw new Error(`Whoops! The name "${i}" is already in use`);this[i]=s,this._systemsHash[i]=s;for(const r in this.runners)this.runners[r].add(s);return this}emitWithCustomOptions(t,i){const s=Object.keys(this._systemsHash);t.items.forEach(r=>{const n=s.find(o=>this._systemsHash[o]===r);r[t.name](i[n])})}destroy(){Object.values(this.runners).forEach(t=>{t.destroy()}),this._systemsHash={}}}const Ps=class{constructor(e){this.renderer=e,this.count=0,this.checkCount=0,this.maxIdle=Ps.defaultMaxIdle,this.checkCountMax=Ps.defaultCheckCountMax,this.mode=Ps.defaultMode}postrender(){!this.renderer.objectRenderer.renderingToScreen||(this.count++,this.mode!==es.MANUAL&&(this.checkCount++,this.checkCount>this.checkCountMax&&(this.checkCount=0,this.run())))}run(){const e=this.renderer.texture,t=e.managedTextures;let i=!1;for(let s=0;sthis.maxIdle&&(e.destroyTexture(r,!0),t[s]=null,i=!0)}if(i){let s=0;for(let r=0;r=0;s--)this.unload(e.children[s])}destroy(){this.renderer=null}};let Ht=Ps;Ht.defaultMode=es.AUTO,Ht.defaultMaxIdle=3600,Ht.defaultCheckCountMax=600,Ht.extension={type:M.RendererSystem,name:"textureGC"},U.add(Ht);class Ms{constructor(t){this.texture=t,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=k.UNSIGNED_BYTE,this.internalFormat=C.RGBA,this.samplerType=0}}function zc(e){let t;return"WebGL2RenderingContext"in globalThis&&e instanceof globalThis.WebGL2RenderingContext?t={[k.UNSIGNED_BYTE]:{[C.RGBA]:e.RGBA8,[C.RGB]:e.RGB8,[C.RG]:e.RG8,[C.RED]:e.R8,[C.RGBA_INTEGER]:e.RGBA8UI,[C.RGB_INTEGER]:e.RGB8UI,[C.RG_INTEGER]:e.RG8UI,[C.RED_INTEGER]:e.R8UI,[C.ALPHA]:e.ALPHA,[C.LUMINANCE]:e.LUMINANCE,[C.LUMINANCE_ALPHA]:e.LUMINANCE_ALPHA},[k.BYTE]:{[C.RGBA]:e.RGBA8_SNORM,[C.RGB]:e.RGB8_SNORM,[C.RG]:e.RG8_SNORM,[C.RED]:e.R8_SNORM,[C.RGBA_INTEGER]:e.RGBA8I,[C.RGB_INTEGER]:e.RGB8I,[C.RG_INTEGER]:e.RG8I,[C.RED_INTEGER]:e.R8I},[k.UNSIGNED_SHORT]:{[C.RGBA_INTEGER]:e.RGBA16UI,[C.RGB_INTEGER]:e.RGB16UI,[C.RG_INTEGER]:e.RG16UI,[C.RED_INTEGER]:e.R16UI,[C.DEPTH_COMPONENT]:e.DEPTH_COMPONENT16},[k.SHORT]:{[C.RGBA_INTEGER]:e.RGBA16I,[C.RGB_INTEGER]:e.RGB16I,[C.RG_INTEGER]:e.RG16I,[C.RED_INTEGER]:e.R16I},[k.UNSIGNED_INT]:{[C.RGBA_INTEGER]:e.RGBA32UI,[C.RGB_INTEGER]:e.RGB32UI,[C.RG_INTEGER]:e.RG32UI,[C.RED_INTEGER]:e.R32UI,[C.DEPTH_COMPONENT]:e.DEPTH_COMPONENT24},[k.INT]:{[C.RGBA_INTEGER]:e.RGBA32I,[C.RGB_INTEGER]:e.RGB32I,[C.RG_INTEGER]:e.RG32I,[C.RED_INTEGER]:e.R32I},[k.FLOAT]:{[C.RGBA]:e.RGBA32F,[C.RGB]:e.RGB32F,[C.RG]:e.RG32F,[C.RED]:e.R32F,[C.DEPTH_COMPONENT]:e.DEPTH_COMPONENT32F},[k.HALF_FLOAT]:{[C.RGBA]:e.RGBA16F,[C.RGB]:e.RGB16F,[C.RG]:e.RG16F,[C.RED]:e.R16F},[k.UNSIGNED_SHORT_5_6_5]:{[C.RGB]:e.RGB565},[k.UNSIGNED_SHORT_4_4_4_4]:{[C.RGBA]:e.RGBA4},[k.UNSIGNED_SHORT_5_5_5_1]:{[C.RGBA]:e.RGB5_A1},[k.UNSIGNED_INT_2_10_10_10_REV]:{[C.RGBA]:e.RGB10_A2,[C.RGBA_INTEGER]:e.RGB10_A2UI},[k.UNSIGNED_INT_10F_11F_11F_REV]:{[C.RGB]:e.R11F_G11F_B10F},[k.UNSIGNED_INT_5_9_9_9_REV]:{[C.RGB]:e.RGB9_E5},[k.UNSIGNED_INT_24_8]:{[C.DEPTH_STENCIL]:e.DEPTH24_STENCIL8},[k.FLOAT_32_UNSIGNED_INT_24_8_REV]:{[C.DEPTH_STENCIL]:e.DEPTH32F_STENCIL8}}:t={[k.UNSIGNED_BYTE]:{[C.RGBA]:e.RGBA,[C.RGB]:e.RGB,[C.ALPHA]:e.ALPHA,[C.LUMINANCE]:e.LUMINANCE,[C.LUMINANCE_ALPHA]:e.LUMINANCE_ALPHA},[k.UNSIGNED_SHORT_5_6_5]:{[C.RGB]:e.RGB},[k.UNSIGNED_SHORT_4_4_4_4]:{[C.RGBA]:e.RGBA},[k.UNSIGNED_SHORT_5_5_5_1]:{[C.RGBA]:e.RGBA}},t}class sn{constructor(t){this.renderer=t,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new V,this.hasIntegerTextures=!1}contextChange(){const t=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=zc(t);const i=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=i;for(let r=0;r=0;--n){const o=i[n];o&&o._glTextures[r].samplerType!==ts.FLOAT&&this.renderer.texture.unbind(o)}}initTexture(t){const i=new Ms(this.gl.createTexture());return i.dirtyId=-1,t._glTextures[this.CONTEXT_UID]=i,this.managedTextures.push(t),t.on("dispose",this.destroyTexture,this),i}initTextureType(t,i){var s,r;i.internalFormat=(r=(s=this.internalFormats[t.type])==null?void 0:s[t.format])!=null?r:t.format,this.webGLVersion===2&&t.type===k.HALF_FLOAT?i.type=this.gl.HALF_FLOAT:i.type=t.type}updateTexture(t){var r;const i=t._glTextures[this.CONTEXT_UID];if(!i)return;const s=this.renderer;if(this.initTextureType(t,i),(r=t.resource)!=null&&r.upload(s,t,i))i.samplerType!==ts.FLOAT&&(this.hasIntegerTextures=!0);else{const n=t.realWidth,o=t.realHeight,a=s.gl;(i.width!==n||i.height!==o||i.dirtyId<0)&&(i.width=n,i.height=o,a.texImage2D(t.target,0,i.internalFormat,n,o,0,t.format,i.type,null))}t.dirtyStyleId!==i.dirtyStyleId&&this.updateTextureStyle(t),i.dirtyId=t.dirtyId}destroyTexture(t,i){const{gl:s}=this;if(t=t.castToBaseTexture(),t._glTextures[this.CONTEXT_UID]&&(this.unbind(t),s.deleteTexture(t._glTextures[this.CONTEXT_UID].texture),t.off("dispose",this.destroyTexture,this),delete t._glTextures[this.CONTEXT_UID],!i)){const r=this.managedTextures.indexOf(t);r!==-1&&Ie(this.managedTextures,r,1)}}updateTextureStyle(t){var s;const i=t._glTextures[this.CONTEXT_UID];!i||((t.mipmap===Wt.POW2||this.webGLVersion!==2)&&!t.isPowerOfTwo?i.mipmap=!1:i.mipmap=t.mipmap>=1,this.webGLVersion!==2&&!t.isPowerOfTwo?i.wrapMode=ie.CLAMP:i.wrapMode=t.wrapMode,(s=t.resource)!=null&&s.style(this.renderer,t,i)||this.setStyle(t,i),i.dirtyStyleId=t.dirtyStyleId)}setStyle(t,i){const s=this.gl;if(i.mipmap&&t.mipmap!==Wt.ON_MANUAL&&s.generateMipmap(t.target),s.texParameteri(t.target,s.TEXTURE_WRAP_S,i.wrapMode),s.texParameteri(t.target,s.TEXTURE_WRAP_T,i.wrapMode),i.mipmap){s.texParameteri(t.target,s.TEXTURE_MIN_FILTER,t.scaleMode===ee.LINEAR?s.LINEAR_MIPMAP_LINEAR:s.NEAREST_MIPMAP_NEAREST);const r=this.renderer.context.extensions.anisotropicFiltering;if(r&&t.anisotropicLevel>0&&t.scaleMode===ee.LINEAR){const n=Math.min(t.anisotropicLevel,s.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT));s.texParameterf(t.target,r.TEXTURE_MAX_ANISOTROPY_EXT,n)}}else s.texParameteri(t.target,s.TEXTURE_MIN_FILTER,t.scaleMode===ee.LINEAR?s.LINEAR:s.NEAREST);s.texParameteri(t.target,s.TEXTURE_MAG_FILTER,t.scaleMode===ee.LINEAR?s.LINEAR:s.NEAREST)}destroy(){this.renderer=null}}sn.extension={type:M.RendererSystem,name:"texture"},U.add(sn);class rn{constructor(t){this.renderer=t}contextChange(){this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(t){const{gl:i,CONTEXT_UID:s}=this,r=t._glTransformFeedbacks[s]||this.createGLTransformFeedback(t);i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,r)}unbind(){const{gl:t}=this;t.bindTransformFeedback(t.TRANSFORM_FEEDBACK,null)}beginTransformFeedback(t,i){const{gl:s,renderer:r}=this;i&&r.shader.bind(i),s.beginTransformFeedback(t)}endTransformFeedback(){const{gl:t}=this;t.endTransformFeedback()}createGLTransformFeedback(t){const{gl:i,renderer:s,CONTEXT_UID:r}=this,n=i.createTransformFeedback();t._glTransformFeedbacks[r]=n,i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,n);for(let o=0;o(e[e.INTERACTION=50]="INTERACTION",e[e.HIGH=25]="HIGH",e[e.NORMAL=0]="NORMAL",e[e.LOW=-25]="LOW",e[e.UTILITY=-50]="UTILITY",e))(ge||{});class nn{constructor(t,i=null,s=0,r=!1){this.next=null,this.previous=null,this._destroyed=!1,this.fn=t,this.context=i,this.priority=s,this.once=r}match(t,i=null){return this.fn===t&&this.context===i}emit(t){this.fn&&(this.context?this.fn.call(this.context,t):this.fn(t));const i=this.next;return this.once&&this.destroy(!0),this._destroyed&&(this.next=null),i}connect(t){this.previous=t,t.next&&(t.next.previous=this),this.next=t.next,t.next=this}destroy(t=!1){this._destroyed=!0,this.fn=null,this.context=null,this.previous&&(this.previous.next=this.next),this.next&&(this.next.previous=this.previous);const i=this.next;return this.next=t?null:i,this.previous=null,i}}const Dt=class{constructor(){this.autoStart=!1,this.deltaTime=1,this.lastTime=-1,this.speed=1,this.started=!1,this._requestId=null,this._maxElapsedMS=100,this._minElapsedMS=0,this._protected=!1,this._lastFrame=-1,this._head=new nn(null,null,1/0),this.deltaMS=1/Dt.targetFPMS,this.elapsedMS=1/Dt.targetFPMS,this._tick=e=>{this._requestId=null,this.started&&(this.update(e),this.started&&this._requestId===null&&this._head.next&&(this._requestId=requestAnimationFrame(this._tick)))}}_requestIfNeeded(){this._requestId===null&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))}_cancelIfNeeded(){this._requestId!==null&&(cancelAnimationFrame(this._requestId),this._requestId=null)}_startIfPossible(){this.started?this._requestIfNeeded():this.autoStart&&this.start()}add(e,t,i=ge.NORMAL){return this._addListener(new nn(e,t,i))}addOnce(e,t,i=ge.NORMAL){return this._addListener(new nn(e,t,i,!0))}_addListener(e){let t=this._head.next,i=this._head;if(!t)e.connect(i);else{for(;t;){if(e.priority>t.priority){e.connect(i);break}i=t,t=t.next}e.previous||e.connect(i)}return this._startIfPossible(),this}remove(e,t){let i=this._head.next;for(;i;)i.match(e,t)?i=i.destroy():i=i.next;return this._head.next||this._cancelIfNeeded(),this}get count(){if(!this._head)return 0;let e=0,t=this._head;for(;t=t.next;)e++;return e}start(){this.started||(this.started=!0,this._requestIfNeeded())}stop(){this.started&&(this.started=!1,this._cancelIfNeeded())}destroy(){if(!this._protected){this.stop();let e=this._head.next;for(;e;)e=e.destroy(!0);this._head.destroy(),this._head=null}}update(e=performance.now()){let t;if(e>this.lastTime){if(t=this.elapsedMS=e-this.lastTime,t>this._maxElapsedMS&&(t=this._maxElapsedMS),t*=this.speed,this._minElapsedMS){const r=e-this._lastFrame|0;if(r{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=t.sharedTicker?lt.shared:new lt,t.autoStart&&this.start()}static destroy(){if(this._ticker){const t=this._ticker;this.ticker=null,t.destroy()}}}on.extension=M.Application,U.add(on);const Ea=[];U.handleByList(M.Renderer,Ea);function wa(e){for(const t of Ea)if(t.test(e))return new t(e);throw new Error("Unable to auto-detect a suitable renderer.")}var Wc=`attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n}`,$c=`attribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n`;const Sa=Wc,an=$c;class hn{constructor(t){this.renderer=t}contextChange(t){let i;if(this.renderer.context.webGLVersion===1){const s=t.getParameter(t.FRAMEBUFFER_BINDING);t.bindFramebuffer(t.FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.FRAMEBUFFER,s)}else{const s=t.getParameter(t.DRAW_FRAMEBUFFER_BINDING);t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,s)}i>=ht.HIGH?this.multisample=ht.HIGH:i>=ht.MEDIUM?this.multisample=ht.MEDIUM:i>=ht.LOW?this.multisample=ht.LOW:this.multisample=ht.NONE}destroy(){}}hn.extension={type:M.RendererSystem,name:"_multisample"},U.add(hn);class jc{constructor(t){this.buffer=t||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}}class ln{constructor(t){this.renderer=t,this.managedBuffers={},this.boundBufferBases={}}destroy(){this.renderer=null}contextChange(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(t){const{gl:i,CONTEXT_UID:s}=this,r=t._glBuffers[s]||this.createGLBuffer(t);i.bindBuffer(t.type,r.buffer)}unbind(t){const{gl:i}=this;i.bindBuffer(t,null)}bindBufferBase(t,i){const{gl:s,CONTEXT_UID:r}=this;if(this.boundBufferBases[i]!==t){const n=t._glBuffers[r]||this.createGLBuffer(t);this.boundBufferBases[i]=t,s.bindBufferBase(s.UNIFORM_BUFFER,i,n.buffer)}}bindBufferRange(t,i,s){const{gl:r,CONTEXT_UID:n}=this;s=s||0;const o=t._glBuffers[n]||this.createGLBuffer(t);r.bindBufferRange(r.UNIFORM_BUFFER,i||0,o.buffer,s*256,256)}update(t){const{gl:i,CONTEXT_UID:s}=this,r=t._glBuffers[s]||this.createGLBuffer(t);if(t._updateID!==r.updateID)if(r.updateID=t._updateID,i.bindBuffer(t.type,r.buffer),r.byteLength>=t.data.byteLength)i.bufferSubData(t.type,0,t.data);else{const n=t.static?i.STATIC_DRAW:i.DYNAMIC_DRAW;r.byteLength=t.data.byteLength,i.bufferData(t.type,t.data,n)}}dispose(t,i){if(!this.managedBuffers[t.id])return;delete this.managedBuffers[t.id];const s=t._glBuffers[this.CONTEXT_UID],r=this.gl;t.disposeRunner.remove(this),s&&(i||r.deleteBuffer(s.buffer),delete t._glBuffers[this.CONTEXT_UID])}disposeAll(t){const i=Object.keys(this.managedBuffers);for(let s=0;ss.resource).filter(s=>s).map(s=>s.load());return this._load=Promise.all(i).then(()=>{const{realWidth:s,realHeight:r}=this.items[0];return this.resize(s,r),Promise.resolve(this)}),this._load}}class Aa extends dn{constructor(t,i){const{width:s,height:r}=i||{};let n,o;Array.isArray(t)?(n=t,o=t.length):o=t,super(o,{width:s,height:r}),n&&this.initFromArray(n,i)}addBaseTextureAt(t,i){if(t.resource)this.addResourceAt(t.resource,i);else throw new Error("ArrayResource does not support RenderTexture");return this}bind(t){super.bind(t),t.target=Re.TEXTURE_2D_ARRAY}upload(t,i,s){const{length:r,itemDirtyIds:n,items:o}=this,{gl:a}=t;s.dirtyId<0&&a.texImage3D(a.TEXTURE_2D_ARRAY,0,s.internalFormat,this._width,this._height,r,0,i.format,s.type,null);for(let h=0;h0)if(e.resource)this.addResourceAt(e.resource,t);else throw new Error("CubeResource does not support copying of renderTexture.");else e.target=Re.TEXTURE_CUBE_MAP_POSITIVE_X+t,e.parentTextureArray=this.baseTexture,this.items[t]=e;return e.valid&&!this.valid&&this.resize(e.realWidth,e.realHeight),this.items[t]=e,this}upload(e,t,i){const s=this.itemDirtyIds;for(let r=0;r{if(this.url===null){t(this);return}try{const s=await P.ADAPTER.fetch(this.url,{mode:this.crossOrigin?"cors":"no-cors"});if(this.destroyed)return;const r=await s.blob();if(this.destroyed)return;const n=await createImageBitmap(r,{premultiplyAlpha:this.alphaMode===null||this.alphaMode===Nt.UNPACK?"premultiply":"none"});if(this.destroyed)return;this.source=n,this.update(),t(this)}catch(s){if(this.destroyed)return;i(s),this.onError.emit(s)}}),this._load)}upload(t,i,s){return this.source instanceof ImageBitmap?(typeof this.alphaMode=="number"&&(i.alphaMode=this.alphaMode),super.upload(t,i,s)):(this.load(),!1)}dispose(){this.source instanceof ImageBitmap&&this.source.close(),super.dispose(),this._load=null}static test(t){return!!globalThis.createImageBitmap&&typeof ImageBitmap!="undefined"&&(typeof t=="string"||t instanceof ImageBitmap)}static get EMPTY(){var t;return Ue._EMPTY=(t=Ue._EMPTY)!=null?t:P.ADAPTER.createCanvas(0,0),Ue._EMPTY}}const Bs=class extends _e{constructor(e,t){t=t||{},super(P.ADAPTER.createCanvas()),this._width=0,this._height=0,this.svg=e,this.scale=t.scale||1,this._overrideWidth=t.width,this._overrideHeight=t.height,this._resolve=null,this._crossorigin=t.crossorigin,this._load=null,t.autoLoad!==!1&&this.load()}load(){return this._load?this._load:(this._load=new Promise(e=>{if(this._resolve=()=>{this.resize(this.source.width,this.source.height),e(this)},Bs.SVG_XML.test(this.svg.trim())){if(!btoa)throw new Error("Your browser doesn\'t support base64 conversions.");this.svg=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(this.svg)))}`}this._loadSvg()}),this._load)}_loadSvg(){const e=new Image;_e.crossOrigin(e,this.svg,this._crossorigin),e.src=this.svg,e.onerror=t=>{!this._resolve||(e.onerror=null,this.onError.emit(t))},e.onload=()=>{if(!this._resolve)return;const t=e.width,i=e.height;if(!t||!i)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");let s=t*this.scale,r=i*this.scale;(this._overrideWidth||this._overrideHeight)&&(s=this._overrideWidth||this._overrideHeight/i*t,r=this._overrideHeight||this._overrideWidth/t*i),s=Math.round(s),r=Math.round(r);const n=this.source;n.width=s,n.height=r,n._pixiId=`canvas_${xe()}`,n.getContext("2d").drawImage(e,0,0,t,i,0,0,s,r),this._resolve(),this._resolve=null}}static getSize(e){const t=Bs.SVG_SIZE.exec(e),i={};return t&&(i[t[1]]=Math.round(parseFloat(t[3])),i[t[5]]=Math.round(parseFloat(t[7]))),i}dispose(){super.dispose(),this._resolve=null,this._crossorigin=null}static test(e,t){return t==="svg"||typeof e=="string"&&e.startsWith("data:image/svg+xml")||typeof e=="string"&&Bs.SVG_XML.test(e)}};let Je=Bs;Je.SVG_XML=/^(<\\?xml[^?]+\\?>)?\\s*()]*-->)?\\s*\\]*(?:\\s(width|height)=(\'|")(\\d*(?:\\.\\d+)?)(?:px)?(\'|"))[^>]*(?:\\s(width|height)=(\'|")(\\d*(?:\\.\\d+)?)(?:px)?(\'|"))[^>]*>/i;const pn=class extends _e{constructor(e,t){if(t=t||{},!(e instanceof HTMLVideoElement)){const i=document.createElement("video");i.setAttribute("preload","auto"),i.setAttribute("webkit-playsinline",""),i.setAttribute("playsinline",""),typeof e=="string"&&(e=[e]);const s=e[0].src||e[0];_e.crossOrigin(i,s,t.crossorigin);for(let r=0;r{this.valid?t(this):(this._resolve=t,e.load())}),this._load}_onError(e){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(e)}_isSourcePlaying(){const e=this.source;return!e.paused&&!e.ended&&this._isSourceReady()}_isSourceReady(){return this.source.readyState>2}_onPlayStart(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&(lt.shared.add(this.update,this),this._isConnectedToTicker=!0)}_onPlayStop(){this._isConnectedToTicker&&(lt.shared.remove(this.update,this),this._isConnectedToTicker=!1)}_onCanPlay(){const e=this.source;e.removeEventListener("canplay",this._onCanPlay),e.removeEventListener("canplaythrough",this._onCanPlay);const t=this.valid;this.resize(e.videoWidth,e.videoHeight),!t&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&e.play()}dispose(){this._isConnectedToTicker&&(lt.shared.remove(this.update,this),this._isConnectedToTicker=!1);const e=this.source;e&&(e.removeEventListener("error",this._onError,!0),e.pause(),e.src="",e.load()),super.dispose()}get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e!==this._autoUpdate&&(this._autoUpdate=e,!this._autoUpdate&&this._isConnectedToTicker?(lt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&(lt.shared.add(this.update,this),this._isConnectedToTicker=!0))}get updateFPS(){return this._updateFPS}set updateFPS(e){e!==this._updateFPS&&(this._updateFPS=e)}static test(e,t){return globalThis.HTMLVideoElement&&e instanceof HTMLVideoElement||pn.TYPES.includes(t)}};let Ds=pn;Ds.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],Ds.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},fs.push(Ue,Or,Ra,Ds,Je,Ye,fn,Aa);class Yc{constructor(){this._glTransformFeedbacks={},this.buffers=[],this.disposeRunner=new Bt("disposeTransformFeedback")}bindBuffer(t,i){this.buffers[t]=i}destroy(){this.disposeRunner.emit(this,!1)}}const qc="7.2.4";class Ii{constructor(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}isEmpty(){return this.minX>this.maxX||this.minY>this.maxY}clear(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0}getRectangle(t){return this.minX>this.maxX||this.minY>this.maxY?$.EMPTY:(t=t||new $(0,0,1,1),t.x=this.minX,t.y=this.minY,t.width=this.maxX-this.minX,t.height=this.maxY-this.minY,t)}addPoint(t){this.minX=Math.min(this.minX,t.x),this.maxX=Math.max(this.maxX,t.x),this.minY=Math.min(this.minY,t.y),this.maxY=Math.max(this.maxY,t.y)}addPointMatrix(t,i){const{a:s,b:r,c:n,d:o,tx:a,ty:h}=t,l=s*i.x+n*i.y+a,c=r*i.x+o*i.y+h;this.minX=Math.min(this.minX,l),this.maxX=Math.max(this.maxX,l),this.minY=Math.min(this.minY,c),this.maxY=Math.max(this.maxY,c)}addQuad(t){let i=this.minX,s=this.minY,r=this.maxX,n=this.maxY,o=t[0],a=t[1];i=or?o:r,n=a>n?a:n,o=t[2],a=t[3],i=or?o:r,n=a>n?a:n,o=t[4],a=t[5],i=or?o:r,n=a>n?a:n,o=t[6],a=t[7],i=or?o:r,n=a>n?a:n,this.minX=i,this.minY=s,this.maxX=r,this.maxY=n}addFrame(t,i,s,r,n){this.addFrameMatrix(t.worldTransform,i,s,r,n)}addFrameMatrix(t,i,s,r,n){const o=t.a,a=t.b,h=t.c,l=t.d,c=t.tx,u=t.ty;let d=this.minX,f=this.minY,p=this.maxX,_=this.maxY,g=o*i+h*s+c,v=a*i+l*s+u;d=gp?g:p,_=v>_?v:_,g=o*r+h*s+c,v=a*r+l*s+u,d=gp?g:p,_=v>_?v:_,g=o*i+h*n+c,v=a*i+l*n+u,d=gp?g:p,_=v>_?v:_,g=o*r+h*n+c,v=a*r+l*n+u,d=gp?g:p,_=v>_?v:_,this.minX=d,this.minY=f,this.maxX=p,this.maxY=_}addVertexData(t,i,s){let r=this.minX,n=this.minY,o=this.maxX,a=this.maxY;for(let h=i;ho?l:o,a=c>a?c:a}this.minX=r,this.minY=n,this.maxX=o,this.maxY=a}addVertices(t,i,s,r){this.addVerticesMatrix(t.worldTransform,i,s,r)}addVerticesMatrix(t,i,s,r,n=0,o=n){const a=t.a,h=t.b,l=t.c,c=t.d,u=t.tx,d=t.ty;let f=this.minX,p=this.minY,_=this.maxX,g=this.maxY;for(let v=s;vr?t.maxX:r,this.maxY=t.maxY>n?t.maxY:n}addBoundsMask(t,i){const s=t.minX>i.minX?t.minX:i.minX,r=t.minY>i.minY?t.minY:i.minY,n=t.maxXl?n:l,this.maxY=o>c?o:c}}addBoundsMatrix(t,i){this.addFrameMatrix(i,t.minX,t.minY,t.maxX,t.maxY)}addBoundsArea(t,i){const s=t.minX>i.x?t.minX:i.x,r=t.minY>i.y?t.minY:i.y,n=t.maxXl?n:l,this.maxY=o>c?o:c}}pad(t=0,i=t){this.isEmpty()||(this.minX-=t,this.maxX+=t,this.minY-=i,this.maxY+=i)}addFramePad(t,i,s,r,n,o){t-=n,i-=o,s+=n,r+=o,this.minX=this.minXs?this.maxX:s,this.minY=this.minYr?this.maxY:r}}class st extends Ve{constructor(){super(),this.tempDisplayObjectParent=null,this.transform=new vi,this.alpha=1,this.visible=!0,this.renderable=!0,this.cullable=!1,this.cullArea=null,this.parent=null,this.worldAlpha=1,this._lastSortedIndex=0,this._zIndex=0,this.filterArea=null,this.filters=null,this._enabledFilters=null,this._bounds=new Ii,this._localBounds=null,this._boundsID=0,this._boundsRect=null,this._localBoundsRect=null,this._mask=null,this._maskRefCount=0,this._destroyed=!1,this.isSprite=!1,this.isMask=!1}static mixin(t){const i=Object.keys(t);for(let s=0;s1)for(let t=0;tthis.children.length)throw new Error(`${e}addChildAt: The index ${t} supplied is out of bounds ${this.children.length}`);return e.parent&&e.parent.removeChild(e),e.parent=this,this.sortDirty=!0,e.transform._parentID=-1,this.children.splice(t,0,e),this._boundsID++,this.onChildrenChange(t),e.emit("added",this),this.emit("childAdded",e,this,t),e}swapChildren(e,t){if(e===t)return;const i=this.getChildIndex(e),s=this.getChildIndex(t);this.children[i]=t,this.children[s]=e,this.onChildrenChange(i=this.children.length)throw new Error(`The index ${t} supplied is out of bounds ${this.children.length}`);const i=this.getChildIndex(e);Ie(this.children,i,1),this.children.splice(t,0,e),this.onChildrenChange(t)}getChildAt(e){if(e<0||e>=this.children.length)throw new Error(`getChildAt: Index (${e}) does not exist.`);return this.children[e]}removeChild(...e){if(e.length>1)for(let t=0;t0&&r<=s){n=this.children.splice(i,r);for(let o=0;o1&&this.children.sort(Zc),this.sortDirty=!1}updateTransform(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(let e=0,t=this.children.length;e0&&t.height>0))return;let i,s;this.cullArea?(i=this.cullArea,s=this.worldTransform):this._render!==mn.prototype._render&&(i=this.getBounds(!0));const r=e.projection.transform;if(r&&(s?(s=Kc.copyFrom(s),s.prepend(r)):s=r),i&&t.intersects(i,s))this._render(e);else if(this.cullArea)return;for(let n=0,o=this.children.length;n=r&&Pi.x=n&&Pi.y=i&&(o=e-a-1),h=h.replace("%value%",t[o].toString()),r+=h,r+=`\n`}return s=s.replace("%blur%",r),s=s.replace("%size%",e.toString()),s}const ru=`\n attribute vec2 aVertexPosition;\n\n uniform mat3 projectionMatrix;\n\n uniform float strength;\n\n varying vec2 vBlurTexCoords[%size%];\n\n uniform vec4 inputSize;\n uniform vec4 outputFrame;\n\n vec4 filterVertexPosition( void )\n {\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n }\n\n vec2 filterTextureCoord( void )\n {\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n }\n\n void main(void)\n {\n gl_Position = filterVertexPosition();\n\n vec2 textureCoord = filterTextureCoord();\n %blur%\n }`;function nu(e,t){const i=Math.ceil(e/2);let s=ru,r="",n;t?n="vBlurTexCoords[%index%] = textureCoord + vec2(%sampleIndex% * strength, 0.0);":n="vBlurTexCoords[%index%] = textureCoord + vec2(0.0, %sampleIndex% * strength);";for(let o=0;o 0.0) {\n c.rgb /= c.a;\n }\n\n vec4 result;\n\n result.r = (m[0] * c.r);\n result.r += (m[1] * c.g);\n result.r += (m[2] * c.b);\n result.r += (m[3] * c.a);\n result.r += m[4];\n\n result.g = (m[5] * c.r);\n result.g += (m[6] * c.g);\n result.g += (m[7] * c.b);\n result.g += (m[8] * c.a);\n result.g += m[9];\n\n result.b = (m[10] * c.r);\n result.b += (m[11] * c.g);\n result.b += (m[12] * c.b);\n result.b += (m[13] * c.a);\n result.b += m[14];\n\n result.a = (m[15] * c.r);\n result.a += (m[16] * c.g);\n result.a += (m[17] * c.b);\n result.a += (m[18] * c.a);\n result.a += m[19];\n\n vec3 rgb = mix(c.rgb, result.rgb, uAlpha);\n\n // Premultiply alpha again.\n rgb *= result.a;\n\n gl_FragColor = vec4(rgb, result.a);\n}\n`;class Ns extends gt{constructor(){const t={m:new Float32Array([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]),uAlpha:1};super(an,ou,t),this.alpha=1}_loadMatrix(t,i=!1){let s=t;i&&(this._multiply(s,this.uniforms.m,t),s=this._colorMatrix(s)),this.uniforms.m=s}_multiply(t,i,s){return t[0]=i[0]*s[0]+i[1]*s[5]+i[2]*s[10]+i[3]*s[15],t[1]=i[0]*s[1]+i[1]*s[6]+i[2]*s[11]+i[3]*s[16],t[2]=i[0]*s[2]+i[1]*s[7]+i[2]*s[12]+i[3]*s[17],t[3]=i[0]*s[3]+i[1]*s[8]+i[2]*s[13]+i[3]*s[18],t[4]=i[0]*s[4]+i[1]*s[9]+i[2]*s[14]+i[3]*s[19]+i[4],t[5]=i[5]*s[0]+i[6]*s[5]+i[7]*s[10]+i[8]*s[15],t[6]=i[5]*s[1]+i[6]*s[6]+i[7]*s[11]+i[8]*s[16],t[7]=i[5]*s[2]+i[6]*s[7]+i[7]*s[12]+i[8]*s[17],t[8]=i[5]*s[3]+i[6]*s[8]+i[7]*s[13]+i[8]*s[18],t[9]=i[5]*s[4]+i[6]*s[9]+i[7]*s[14]+i[8]*s[19]+i[9],t[10]=i[10]*s[0]+i[11]*s[5]+i[12]*s[10]+i[13]*s[15],t[11]=i[10]*s[1]+i[11]*s[6]+i[12]*s[11]+i[13]*s[16],t[12]=i[10]*s[2]+i[11]*s[7]+i[12]*s[12]+i[13]*s[17],t[13]=i[10]*s[3]+i[11]*s[8]+i[12]*s[13]+i[13]*s[18],t[14]=i[10]*s[4]+i[11]*s[9]+i[12]*s[14]+i[13]*s[19]+i[14],t[15]=i[15]*s[0]+i[16]*s[5]+i[17]*s[10]+i[18]*s[15],t[16]=i[15]*s[1]+i[16]*s[6]+i[17]*s[11]+i[18]*s[16],t[17]=i[15]*s[2]+i[16]*s[7]+i[17]*s[12]+i[18]*s[17],t[18]=i[15]*s[3]+i[16]*s[8]+i[17]*s[13]+i[18]*s[18],t[19]=i[15]*s[4]+i[16]*s[9]+i[17]*s[14]+i[18]*s[19]+i[19],t}_colorMatrix(t){const i=new Float32Array(t);return i[4]/=255,i[9]/=255,i[14]/=255,i[19]/=255,i}brightness(t,i){const s=[t,0,0,0,0,0,t,0,0,0,0,0,t,0,0,0,0,0,1,0];this._loadMatrix(s,i)}tint(t,i){const[s,r,n]=j.shared.setValue(t).toArray(),o=[s,0,0,0,0,0,r,0,0,0,0,0,n,0,0,0,0,0,1,0];this._loadMatrix(o,i)}greyscale(t,i){const s=[t,t,t,0,0,t,t,t,0,0,t,t,t,0,0,0,0,0,1,0];this._loadMatrix(s,i)}blackAndWhite(t){const i=[.3,.6,.1,0,0,.3,.6,.1,0,0,.3,.6,.1,0,0,0,0,0,1,0];this._loadMatrix(i,t)}hue(t,i){t=(t||0)/180*Math.PI;const s=Math.cos(t),r=Math.sin(t),n=Math.sqrt,o=1/3,a=n(o),h=s+(1-s)*o,l=o*(1-s)-a*r,c=o*(1-s)+a*r,u=o*(1-s)+a*r,d=s+o*(1-s),f=o*(1-s)-a*r,p=o*(1-s)-a*r,_=o*(1-s)+a*r,g=s+o*(1-s),v=[h,l,c,0,0,u,d,f,0,0,p,_,g,0,0,0,0,0,1,0];this._loadMatrix(v,i)}contrast(t,i){const s=(t||0)+1,r=-.5*(s-1),n=[s,0,0,0,r,0,s,0,0,r,0,0,s,0,r,0,0,0,1,0];this._loadMatrix(n,i)}saturate(t=0,i){const s=t*2/3+1,r=(s-1)*-.5,n=[s,r,r,0,0,r,s,r,0,0,r,r,s,0,0,0,0,0,1,0];this._loadMatrix(n,i)}desaturate(){this.saturate(-1)}negative(t){const i=[-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,0,0,0,1,0];this._loadMatrix(i,t)}sepia(t){const i=[.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0];this._loadMatrix(i,t)}technicolor(t){const i=[1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0];this._loadMatrix(i,t)}polaroid(t){const i=[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0];this._loadMatrix(i,t)}toBGR(t){const i=[0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0];this._loadMatrix(i,t)}kodachrome(t){const i=[1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0];this._loadMatrix(i,t)}browni(t){const i=[.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0];this._loadMatrix(i,t)}vintage(t){const i=[.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0];this._loadMatrix(i,t)}colorTone(t,i,s,r,n){t=t||.2,i=i||.15,s=s||16770432,r=r||3375104;const o=j.shared,[a,h,l]=o.setValue(s).toArray(),[c,u,d]=o.setValue(r).toArray(),f=[.3,.59,.11,0,0,a,h,l,t,0,c,u,d,i,0,a-c,h-u,l-d,0,0];this._loadMatrix(f,n)}night(t,i){t=t||.1;const s=[t*-2,-t,0,0,0,-t,0,t,0,0,0,t,t*2,0,0,0,0,0,1,0];this._loadMatrix(s,i)}predator(t,i){const s=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(s,i)}lsd(t){const i=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(i,t)}reset(){const t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)}get matrix(){return this.uniforms.m}set matrix(t){this.uniforms.m=t}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}}Ns.prototype.grayscale=Ns.prototype.greyscale;var au=`varying vec2 vFilterCoord;\nvarying vec2 vTextureCoord;\n\nuniform vec2 scale;\nuniform mat2 rotation;\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nuniform highp vec4 inputSize;\nuniform vec4 inputClamp;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vFilterCoord);\n\n map -= 0.5;\n map.xy = scale * inputSize.zw * (rotation * map.xy);\n\n gl_FragColor = texture2D(uSampler, clamp(vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y), inputClamp.xy, inputClamp.zw));\n}\n`,hu=`attribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\nuniform mat3 filterMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vFilterCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n vFilterCoord = ( filterMatrix * vec3( vTextureCoord, 1.0) ).xy;\n}\n`;class Ba extends gt{constructor(t,i){const s=new tt;t.renderable=!1,super(hu,au,{mapSampler:t._texture,filterMatrix:s,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])}),this.maskSprite=t,this.maskMatrix=s,i==null&&(i=20),this.scale=new Y(i,i)}apply(t,i,s,r){this.uniforms.filterMatrix=t.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;const n=this.maskSprite.worldTransform,o=Math.sqrt(n.a*n.a+n.b*n.b),a=Math.sqrt(n.c*n.c+n.d*n.d);o!==0&&a!==0&&(this.uniforms.rotation[0]=n.a/o,this.uniforms.rotation[1]=n.b/o,this.uniforms.rotation[2]=n.c/a,this.uniforms.rotation[3]=n.d/a),t.applyFilter(this,i,s,r)}get map(){return this.uniforms.mapSampler}set map(t){this.uniforms.mapSampler=t}}var lu=`varying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nvarying vec2 vFragCoord;\nuniform sampler2D uSampler;\nuniform highp vec4 inputSize;\n\n\n/**\n Basic FXAA implementation based on the code on geeks3d.com with the\n modification that the texture2DLod stuff was removed since it\'s\n unsupported by WebGL.\n\n --\n\n From:\n https://github.com/mitsuhiko/webgl-meincraft\n\n Copyright (c) 2011 by Armin Ronacher.\n\n Some rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef FXAA_REDUCE_MIN\n#define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n#define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n#define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 inverseVP,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\nvoid main() {\n\n vec4 color;\n\n color = fxaa(uSampler, vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n gl_FragColor = color;\n}\n`,cu=`\nattribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nvarying vec2 vFragCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvoid texcoords(vec2 fragCoord, vec2 inverseVP,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void) {\n\n gl_Position = filterVertexPosition();\n\n vFragCoord = aVertexPosition * outputFrame.zw;\n\n texcoords(vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n`;class Da extends gt{constructor(){super(cu,lu)}}var uu=`precision highp float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform float uNoise;\nuniform float uSeed;\nuniform sampler2D uSampler;\n\nfloat rand(vec2 co)\n{\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float randomValue = rand(gl_FragCoord.xy * uSeed);\n float diff = (randomValue - 0.5) * uNoise;\n\n // Un-premultiply alpha before applying the color matrix. See issue #3539.\n if (color.a > 0.0) {\n color.rgb /= color.a;\n }\n\n color.r += diff;\n color.g += diff;\n color.b += diff;\n\n // Premultiply alpha again.\n color.rgb *= color.a;\n\n gl_FragColor = color;\n}\n`;class Fa extends gt{constructor(t=.5,i=Math.random()){super(an,uu,{uNoise:0,uSeed:0}),this.noise=t,this.seed=i}get noise(){return this.uniforms.uNoise}set noise(t){this.uniforms.uNoise=t}get seed(){return this.uniforms.uSeed}set seed(t){this.uniforms.uSeed=t}}const _n={AlphaFilter:Pa,BlurFilter:Ma,BlurFilterPass:Fs,ColorMatrixFilter:Ns,DisplacementFilter:Ba,FXAAFilter:Da,NoiseFilter:Fa};Object.entries(_n).forEach(([e,t])=>{Object.defineProperty(_n,e,{get(){return t}})});class du{constructor(){this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this.tickerAdded=!1,this._pauseUpdate=!0}init(t){this.removeTickerListener(),this.events=t,this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this.tickerAdded=!1,this._pauseUpdate=!0}get pauseUpdate(){return this._pauseUpdate}set pauseUpdate(t){this._pauseUpdate=t}addTickerListener(){this.tickerAdded||!this.domElement||(lt.system.add(this.tickerUpdate,this,ge.INTERACTION),this.tickerAdded=!0)}removeTickerListener(){!this.tickerAdded||(lt.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)}pointerMoved(){this._didMove=!0}update(){if(!this.domElement||this._pauseUpdate)return;if(this._didMove){this._didMove=!1;return}const t=this.events.rootPointerEvent;this.events.supportsTouchEvents&&t.pointerType==="touch"||globalThis.document.dispatchEvent(new PointerEvent("pointermove",{clientX:t.clientX,clientY:t.clientY}))}tickerUpdate(t){this._deltaTime+=t,!(this._deltaTimes.priority-r.priority)}dispatchEvent(t,i){t.propagationStopped=!1,t.propagationImmediatelyStopped=!1,this.propagate(t,i),this.dispatch.emit(i||t.type,t)}mapEvent(t){if(!this.rootTarget)return;const i=this.mappingTable[t.type];if(i)for(let s=0,r=i.length;s=0;r--)if(t.currentTarget=s[r],this.notifyTarget(t,i),t.propagationStopped||t.propagationImmediatelyStopped)return}}all(t,i,s=this._allInteractiveElements){if(s.length===0)return;t.eventPhase=t.BUBBLING_PHASE;const r=Array.isArray(i)?i:[i];for(let n=s.length-1;n>=0;n--)r.forEach(o=>{t.currentTarget=s[n],this.notifyTarget(t,o)})}propagationPath(t){const i=[t];for(let s=0;s=0;u--){const d=c[u],f=this.hitTestMoveRecursive(d,this._isInteractive(i)?i:d.eventMode,s,r,n,o||n(t,s));if(f){if(f.length>0&&!f[f.length-1].parent)continue;const p=t.isInteractive();(f.length>0||p)&&(p&&this._allInteractiveElements.push(t),f.push(t)),this._hitElements.length===0&&(this._hitElements=f),a=!0}}}const h=this._isInteractive(i),l=t.isInteractive();return l&&l&&this._allInteractiveElements.push(t),o||this._hitElements.length>0?null:a?this._hitElements:h&&!n(t,s)&&r(t,s)?l?[t]:[]:null}hitTestRecursive(t,i,s,r,n){if(this._interactivePrune(t)||n(t,s))return null;if((t.eventMode==="dynamic"||i==="dynamic")&&(Te.pauseUpdate=!1),t.interactiveChildren&&t.children){const h=t.children;for(let l=h.length-1;l>=0;l--){const c=h[l],u=this.hitTestRecursive(c,this._isInteractive(i)?i:c.eventMode,s,r,n);if(u){if(u.length>0&&!u[u.length-1].parent)continue;const d=t.isInteractive();return(u.length>0||d)&&u.push(t),u}}}const o=this._isInteractive(i),a=t.isInteractive();return o&&r(t,s)?a?[t]:[]:null}_isInteractive(t){return t==="static"||t==="dynamic"}_interactivePrune(t){return!!(!t||t.isMask||!t.visible||!t.renderable||t.eventMode==="none"||t.eventMode==="passive"&&!t.interactiveChildren||t.isMask)}hitPruneFn(t,i){var s;if(t.hitArea&&(t.worldTransform.applyInverse(i,gn),!t.hitArea.contains(gn.x,gn.y)))return!0;if(t._mask){const r=t._mask.isMaskData?t._mask.maskObject:t._mask;if(r&&!((s=r.containsPoint)!=null&&s.call(r,i)))return!0}return!1}hitTestFn(t,i){return t.eventMode==="passive"?!1:t.hitArea?!0:t.containsPoint?t.containsPoint(i):!1}notifyTarget(t,i){var n,o;i=i!=null?i:t.type;const s=`on${i}`;(o=(n=t.currentTarget)[s])==null||o.call(n,t);const r=t.eventPhase===t.CAPTURING_PHASE||t.eventPhase===t.AT_TARGET?`${i}capture`:i;this.notifyListeners(t,r),t.eventPhase===t.AT_TARGET&&this.notifyListeners(t,i)}mapPointerDown(t){if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}const i=this.createPointerEvent(t);if(this.dispatchEvent(i,"pointerdown"),i.pointerType==="touch")this.dispatchEvent(i,"touchstart");else if(i.pointerType==="mouse"||i.pointerType==="pen"){const r=i.button===2;this.dispatchEvent(i,r?"rightdown":"mousedown")}const s=this.trackingData(t.pointerId);s.pressTargetsByButton[t.button]=i.composedPath(),this.freeEvent(i)}mapPointerMove(t){var h,l,c;if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}this._allInteractiveElements.length=0,this._hitElements.length=0,this._isPointerMoveEvent=!0;const i=this.createPointerEvent(t);this._isPointerMoveEvent=!1;const s=i.pointerType==="mouse"||i.pointerType==="pen",r=this.trackingData(t.pointerId),n=this.findMountedTarget(r.overTargets);if(((h=r.overTargets)==null?void 0:h.length)>0&&n!==i.target){const u=t.type==="mousemove"?"mouseout":"pointerout",d=this.createPointerEvent(t,u,n);if(this.dispatchEvent(d,"pointerout"),s&&this.dispatchEvent(d,"mouseout"),!i.composedPath().includes(n)){const f=this.createPointerEvent(t,"pointerleave",n);for(f.eventPhase=f.AT_TARGET;f.target&&!i.composedPath().includes(f.target);)f.currentTarget=f.target,this.notifyTarget(f),s&&this.notifyTarget(f,"mouseleave"),f.target=f.target.parent;this.freeEvent(f)}this.freeEvent(d)}if(n!==i.target){const u=t.type==="mousemove"?"mouseover":"pointerover",d=this.clonePointerEvent(i,u);this.dispatchEvent(d,"pointerover"),s&&this.dispatchEvent(d,"mouseover");let f=n==null?void 0:n.parent;for(;f&&f!==this.rootTarget.parent&&f!==i.target;)f=f.parent;if(!f||f===this.rootTarget.parent){const _=this.clonePointerEvent(i,"pointerenter");for(_.eventPhase=_.AT_TARGET;_.target&&_.target!==n&&_.target!==this.rootTarget.parent;)_.currentTarget=_.target,this.notifyTarget(_),s&&this.notifyTarget(_,"mouseenter"),_.target=_.target.parent;this.freeEvent(_)}this.freeEvent(d)}const o=[],a=(l=this.enableGlobalMoveEvents)!=null?l:!0;this.moveOnAll?o.push("pointermove"):this.dispatchEvent(i,"pointermove"),a&&o.push("globalpointermove"),i.pointerType==="touch"&&(this.moveOnAll?o.splice(1,0,"touchmove"):this.dispatchEvent(i,"touchmove"),a&&o.push("globaltouchmove")),s&&(this.moveOnAll?o.splice(1,0,"mousemove"):this.dispatchEvent(i,"mousemove"),a&&o.push("globalmousemove"),this.cursor=(c=i.target)==null?void 0:c.cursor),o.length>0&&this.all(i,o),this._allInteractiveElements.length=0,this._hitElements.length=0,r.overTargets=i.composedPath(),this.freeEvent(i)}mapPointerOver(t){var o;if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}const i=this.trackingData(t.pointerId),s=this.createPointerEvent(t),r=s.pointerType==="mouse"||s.pointerType==="pen";this.dispatchEvent(s,"pointerover"),r&&this.dispatchEvent(s,"mouseover"),s.pointerType==="mouse"&&(this.cursor=(o=s.target)==null?void 0:o.cursor);const n=this.clonePointerEvent(s,"pointerenter");for(n.eventPhase=n.AT_TARGET;n.target&&n.target!==this.rootTarget.parent;)n.currentTarget=n.target,this.notifyTarget(n),r&&this.notifyTarget(n,"mouseenter"),n.target=n.target.parent;i.overTargets=s.composedPath(),this.freeEvent(s),this.freeEvent(n)}mapPointerOut(t){if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}const i=this.trackingData(t.pointerId);if(i.overTargets){const s=t.pointerType==="mouse"||t.pointerType==="pen",r=this.findMountedTarget(i.overTargets),n=this.createPointerEvent(t,"pointerout",r);this.dispatchEvent(n),s&&this.dispatchEvent(n,"mouseout");const o=this.createPointerEvent(t,"pointerleave",r);for(o.eventPhase=o.AT_TARGET;o.target&&o.target!==this.rootTarget.parent;)o.currentTarget=o.target,this.notifyTarget(o),s&&this.notifyTarget(o,"mouseleave"),o.target=o.target.parent;i.overTargets=null,this.freeEvent(n),this.freeEvent(o)}this.cursor=null}mapPointerUp(t){if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}const i=performance.now(),s=this.createPointerEvent(t);if(this.dispatchEvent(s,"pointerup"),s.pointerType==="touch")this.dispatchEvent(s,"touchend");else if(s.pointerType==="mouse"||s.pointerType==="pen"){const a=s.button===2;this.dispatchEvent(s,a?"rightup":"mouseup")}const r=this.trackingData(t.pointerId),n=this.findMountedTarget(r.pressTargetsByButton[t.button]);let o=n;if(n&&!s.composedPath().includes(n)){let a=n;for(;a&&!s.composedPath().includes(a);){if(s.currentTarget=a,this.notifyTarget(s,"pointerupoutside"),s.pointerType==="touch")this.notifyTarget(s,"touchendoutside");else if(s.pointerType==="mouse"||s.pointerType==="pen"){const h=s.button===2;this.notifyTarget(s,h?"rightupoutside":"mouseupoutside")}a=a.parent}delete r.pressTargetsByButton[t.button],o=a}if(o){const a=this.clonePointerEvent(s,"click");a.target=o,a.path=null,r.clicksByButton[t.button]||(r.clicksByButton[t.button]={clickCount:0,target:a.target,timeStamp:i});const h=r.clicksByButton[t.button];if(h.target===a.target&&i-h.timeStamp<200?++h.clickCount:h.clickCount=1,h.target=a.target,h.timeStamp=i,a.detail=h.clickCount,a.pointerType==="mouse"){const l=a.button===2;this.dispatchEvent(a,l?"rightclick":"click")}else a.pointerType==="touch"&&this.dispatchEvent(a,"tap");this.dispatchEvent(a,"pointertap"),this.freeEvent(a)}this.freeEvent(s)}mapPointerUpOutside(t){if(!(t instanceof Xt)){console.warn("EventBoundary cannot map a non-pointer event as a pointer event");return}const i=this.trackingData(t.pointerId),s=this.findMountedTarget(i.pressTargetsByButton[t.button]),r=this.createPointerEvent(t);if(s){let n=s;for(;n;)r.currentTarget=n,this.notifyTarget(r,"pointerupoutside"),r.pointerType==="touch"?this.notifyTarget(r,"touchendoutside"):(r.pointerType==="mouse"||r.pointerType==="pen")&&this.notifyTarget(r,r.button===2?"rightupoutside":"mouseupoutside"),n=n.parent;delete i.pressTargetsByButton[t.button]}this.freeEvent(r)}mapWheel(t){if(!(t instanceof ke)){console.warn("EventBoundary cannot map a non-wheel event as a wheel event");return}const i=this.createWheelEvent(t);this.dispatchEvent(i),this.freeEvent(i)}findMountedTarget(t){if(!t)return null;let i=t[0];for(let s=1;s(i==="globalMove"&&(this.rootBoundary.enableGlobalMoveEvents=s),t[i]=s,!0)}),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onPointerOverOut=this.onPointerOverOut.bind(this),this.onWheel=this.onWheel.bind(this)}static get defaultEventMode(){return this._defaultEventMode}init(e){var s,r;const{view:t,resolution:i}=this.renderer;this.setTargetElement(t),this.resolution=i,yn._defaultEventMode=(s=e.eventMode)!=null?s:"auto",Object.assign(this.features,(r=e.eventFeatures)!=null?r:{}),this.rootBoundary.enableGlobalMoveEvents=this.features.globalMove}resolutionChange(e){this.resolution=e}destroy(){this.setTargetElement(null),this.renderer=null}setCursor(e){e=e||"default";let t=!0;if(globalThis.OffscreenCanvas&&this.domElement instanceof OffscreenCanvas&&(t=!1),this.currentCursor===e)return;this.currentCursor=e;const i=this.cursorStyles[e];if(i)switch(typeof i){case"string":t&&(this.domElement.style.cursor=i);break;case"function":i(e);break;case"object":t&&Object.assign(this.domElement.style,i);break}else t&&typeof e=="string"&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,e)&&(this.domElement.style.cursor=e)}get pointer(){return this.rootPointerEvent}onPointerDown(e){if(!this.features.click||(this.rootBoundary.rootTarget=this.renderer.lastObjectRendered,this.supportsTouchEvents&&e.pointerType==="touch"))return;const t=this.normalizeToPointerData(e);this.autoPreventDefault&&t[0].isNormalized&&(e.cancelable||!("cancelable"in e))&&e.preventDefault();for(let i=0,s=t.length;i0&&(t=e.composedPath()[0]);const i=t!==this.domElement?"outside":"",s=this.normalizeToPointerData(e);for(let r=0,n=s.length;r{this._isMobileAccessibility=!0,this.activate(),this.destroyTouchHook()}),document.body.appendChild(t),this._hookDiv=t}destroyTouchHook(){!this._hookDiv||(document.body.removeChild(this._hookDiv),this._hookDiv=null)}activate(){var t;this._isActive||(this._isActive=!0,globalThis.document.addEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),(t=this.renderer.view.parentNode)==null||t.appendChild(this.div))}deactivate(){var t;!this._isActive||this._isMobileAccessibility||(this._isActive=!1,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),(t=this.div.parentNode)==null||t.removeChild(this.div))}updateAccessibleObjects(t){if(!t.visible||!t.accessibleChildren)return;t.accessible&&t.isInteractive()&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);const i=t.children;if(i)for(let s=0;s title : ${t.title}
    tabIndex: ${t.tabIndex}`}capHitArea(t){t.x<0&&(t.width+=t.x,t.x=0),t.y<0&&(t.height+=t.y,t.y=0);const{width:i,height:s}=this.renderer;t.x+t.width>i&&(t.width=i-t.x),t.y+t.height>s&&(t.height=s-t.y)}addChild(t){let i=this.pool.pop();i||(i=document.createElement("button"),i.style.width=`${Ls}px`,i.style.height=`${Ls}px`,i.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",i.style.position="absolute",i.style.zIndex=ka.toString(),i.style.borderStyle="none",navigator.userAgent.toLowerCase().includes("chrome")?i.setAttribute("aria-live","off"):i.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\\//)?i.setAttribute("aria-relevant","additions"):i.setAttribute("aria-relevant","text"),i.addEventListener("click",this._onClick.bind(this)),i.addEventListener("focus",this._onFocus.bind(this)),i.addEventListener("focusout",this._onFocusOut.bind(this))),i.style.pointerEvents=t.accessiblePointerEvents,i.type=t.accessibleType,t.accessibleTitle&&t.accessibleTitle!==null?i.title=t.accessibleTitle:(!t.accessibleHint||t.accessibleHint===null)&&(i.title=`displayObject ${t.tabIndex}`),t.accessibleHint&&t.accessibleHint!==null&&i.setAttribute("aria-label",t.accessibleHint),this.debug&&this.updateDebugHTML(i),t._accessibleActive=!0,t._accessibleDiv=i,i.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex}_dispatchEvent(t,i){const{displayObject:s}=t.target,r=this.renderer.events.rootBoundary,n=Object.assign(new Qe(r),{target:s});r.rootTarget=this.renderer.lastObjectRendered,i.forEach(o=>r.dispatchEvent(n,o))}_onClick(t){this._dispatchEvent(t,["click","pointertap","tap"])}_onFocus(t){t.target.getAttribute("aria-live")||t.target.setAttribute("aria-live","assertive"),this._dispatchEvent(t,["mouseover"])}_onFocusOut(t){t.target.getAttribute("aria-live")||t.target.setAttribute("aria-live","polite"),this._dispatchEvent(t,["mouseout"])}_onKeyDown(t){t.keyCode===gu&&this.activate()}_onMouseMove(t){t.movementX===0&&t.movementY===0||this.deactivate()}destroy(){this.destroyTouchHook(),this.div=null,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown),this.pool=null,this.children=null,this.renderer=null}}vn.extension={name:"accessibility",type:[M.RendererPlugin,M.CanvasRendererPlugin]},U.add(vn);const xn=class{constructor(e){this.stage=new Ct,e=Object.assign({forceCanvas:!1},e),this.renderer=wa(e),xn._plugins.forEach(t=>{t.init.call(this,e)})}render(){this.renderer.render(this.stage)}get view(){return this.renderer.view}get screen(){return this.renderer.screen}destroy(e,t){const i=xn._plugins.slice(0);i.reverse(),i.forEach(s=>{s.destroy.call(this)}),this.stage.destroy(t),this.stage=null,this.renderer.destroy(e),this.renderer=null}};let bn=xn;bn._plugins=[],U.handleByList(M.Application,bn._plugins);class Tn{static init(t){Object.defineProperty(this,"resizeTo",{set(i){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=i,i&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{!this._resizeTo||(this.cancelResize(),this._resizeId=requestAnimationFrame(()=>this.resize()))},this.cancelResize=()=>{this._resizeId&&(cancelAnimationFrame(this._resizeId),this._resizeId=null)},this.resize=()=>{if(!this._resizeTo)return;this.cancelResize();let i,s;if(this._resizeTo===globalThis.window)i=globalThis.innerWidth,s=globalThis.innerHeight;else{const{clientWidth:r,clientHeight:n}=this._resizeTo;i=r,s=n}this.renderer.resize(i,s),this.render()},this._resizeId=null,this._resizeTo=null,this.resizeTo=t.resizeTo||null}static destroy(){globalThis.removeEventListener("resize",this.queueResize),this.cancelResize(),this.cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}}Tn.extension=M.Application,U.add(Tn);const Ha={loader:M.LoadParser,resolver:M.ResolveParser,cache:M.CacheParser,detection:M.DetectionParser};U.handle(M.Asset,e=>{const t=e.ref;Object.entries(Ha).filter(([i])=>!!t[i]).forEach(([i,s])=>{var r;return U.add(Object.assign(t[i],{extension:(r=t[i].extension)!=null?r:s}))})},e=>{const t=e.ref;Object.keys(Ha).filter(i=>!!t[i]).forEach(i=>U.remove(t[i]))});class Eu{constructor(t,i=!1){this._loader=t,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=i}add(t){t.forEach(i=>{this._assetList.push(i)}),this.verbose&&console.log("[BackgroundLoader] assets: ",this._assetList),this._isActive&&!this._isLoading&&this._next()}async _next(){if(this._assetList.length&&this._isActive){this._isLoading=!0;const t=[],i=Math.min(this._assetList.length,this._maxConcurrent);for(let s=0;s(Array.isArray(e)||(e=[e]),t?e.map(i=>typeof i=="string"?t(i):i):e),Os=(e,t)=>{const i=t.split("?")[1];return i&&(e+=`?${i}`),e};function Xa(e,t,i,s,r){const n=t[i];for(let o=0;o{const o=n.substring(1,n.length-1).split(",");r.push(o)}),Xa(e,r,0,i,s)}else s.push(e);return s}const Bi=e=>!Array.isArray(e);class wu{constructor(){this._parsers=[],this._cache=new Map,this._cacheMap=new Map}reset(){this._cacheMap.clear(),this._cache.clear()}has(t){return this._cache.has(t)}get(t){const i=this._cache.get(t);return i||console.warn(`[Assets] Asset id ${t} was not found in the Cache`),i}set(t,i){const s=oe(t);let r;for(let a=0;a{r[a]=i}));const n=Object.keys(r),o={cacheKeys:n,keys:s};if(s.forEach(a=>{this._cacheMap.set(a,o)}),n.forEach(a=>{this._cache.has(a)&&this._cache.get(a)!==i&&console.warn("[Cache] already has key:",a),this._cache.set(a,r[a])}),i instanceof B){const a=i;s.forEach(h=>{a.baseTexture!==B.EMPTY.baseTexture&&V.addToCache(a.baseTexture,h),B.addToCache(a,h)})}}remove(t){if(this._cacheMap.get(t),!this._cacheMap.has(t)){console.warn(`[Assets] Asset id ${t} was not found in the Cache`);return}const i=this._cacheMap.get(t);i.cacheKeys.forEach(r=>{this._cache.delete(r)}),i.keys.forEach(r=>{this._cacheMap.delete(r)})}get parsers(){return this._parsers}}const ii=new wu;class Su{constructor(){this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(t,i,s)=>(this._parsersValidated=!1,t[i]=s,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(t,i){const s={promise:null,parser:null};return s.promise=(async()=>{var o,a;let r=null,n=null;if(i.loadParser&&(n=this._parserHash[i.loadParser],n||console.warn(`[Assets] specified load parser "${i.loadParser}" not found while loading ${t}`)),!n){for(let h=0;h({src:l})),a=o.length,h=o.map(async l=>{const c=Tt.toAbsolute(l.src);if(!r[l.src])try{this.promiseCache[c]||(this.promiseCache[c]=this._getLoadPromiseAndParser(c,l)),r[l.src]=await this.promiseCache[c].promise,i&&i(++s/a)}catch(u){throw delete this.promiseCache[c],delete r[l.src],new Error(`[Loader.load] Failed to load ${c}.\n${u}`)}});return await Promise.all(h),n?r[o[0].src]:r}async unload(t){const s=oe(t,r=>({src:r})).map(async r=>{var a,h;const n=Tt.toAbsolute(r.src),o=this.promiseCache[n];if(o){const l=await o.promise;(h=(a=o.parser)==null?void 0:a.unload)==null||h.call(a,l,r,this),delete this.promiseCache[n]}});await Promise.all(s)}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter(t=>t.name).reduce((t,i)=>(t[i.name]&&console.warn(`[Assets] loadParser name conflict "${i.name}"`),Qi(bt({},t),{[i.name]:i})),{})}}var Jt=(e=>(e[e.Low=0]="Low",e[e.Normal=1]="Normal",e[e.High=2]="High",e))(Jt||{});const Au=".json",Ru="application/json",za={extension:{type:M.LoadParser,priority:Jt.Low},name:"loadJson",test(e){return ei(e,Ru)||Ee(e,Au)},async load(e){return await(await P.ADAPTER.fetch(e)).json()}};U.add(za);const Cu=".txt",Iu="text/plain",Wa={name:"loadTxt",extension:{type:M.LoadParser,priority:Jt.Low},test(e){return ei(e,Iu)||Ee(e,Cu)},async load(e){return await(await P.ADAPTER.fetch(e)).text()}};U.add(Wa);const Pu=["normal","bold","100","200","300","400","500","600","700","800","900"],Mu=[".ttf",".otf",".woff",".woff2"],Bu=["font/ttf","font/otf","font/woff","font/woff2"],Du=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;function $a(e){const t=Tt.extname(e),r=Tt.basename(e,t).replace(/(-|_)/g," ").toLowerCase().split(" ").map(a=>a.charAt(0).toUpperCase()+a.slice(1));let n=r.length>0;for(const a of r)if(!a.match(Du)){n=!1;break}let o=r.join(" ");return n||(o=`"${o.replace(/[\\\\"]/g,"\\\\$&")}"`),o}const ja={extension:{type:M.LoadParser,priority:Jt.Low},name:"loadWebFont",test(e){return ei(e,Bu)||Ee(e,Mu)},async load(e,t){var s,r,n,o,a,h;const i=P.ADAPTER.getFontFaceSet();if(i){const l=[],c=(r=(s=t.data)==null?void 0:s.family)!=null?r:$a(e),u=(a=(o=(n=t.data)==null?void 0:n.weights)==null?void 0:o.filter(f=>Pu.includes(f)))!=null?a:["normal"],d=(h=t.data)!=null?h:{};for(let f=0;fP.ADAPTER.getFontFaceSet().delete(t))}};U.add(ja);let Ya=0,En;const Fu={id:"checkImageBitmap",code:`\n async function checkImageBitmap()\n {\n try\n {\n if (typeof createImageBitmap !== \'function\') return false;\n\n const response = await fetch(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=\');\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n }\n catch (e)\n {\n return false;\n }\n }\n checkImageBitmap().then((result) => { self.postMessage(result); });\n `},Nu={id:"loadImageBitmap",code:`\n async function loadImageBitmap(url)\n {\n const response = await fetch(url);\n\n if (!response.ok)\n {\n throw new Error(\\`[WorkerManager.loadImageBitmap] Failed to fetch \\${url}: \\`\n + \\`\\${response.status} \\${response.statusText}\\`);\n }\n\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap;\n }\n self.onmessage = async (event) =>\n {\n try\n {\n const imageBitmap = await loadImageBitmap(event.data.data[0]);\n\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id,\n }, [imageBitmap]);\n }\n catch(e)\n {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id,\n });\n }\n };`};let wn;class Lu{constructor(){this._initialized=!1,this._createdWorkers=0,this.workerPool=[],this.queue=[],this.resolveHash={}}isImageBitmapSupported(){return this._isImageBitmapSupported!==void 0?this._isImageBitmapSupported:(this._isImageBitmapSupported=new Promise(t=>{const i=URL.createObjectURL(new Blob([Fu.code],{type:"application/javascript"})),s=new Worker(i);s.addEventListener("message",r=>{s.terminate(),URL.revokeObjectURL(i),t(r.data)})}),this._isImageBitmapSupported)}loadImageBitmap(t){return this._run("loadImageBitmap",[t])}async _initWorkers(){this._initialized||(this._initialized=!0)}getWorker(){En===void 0&&(En=navigator.hardwareConcurrency||4);let t=this.workerPool.pop();return!t&&this._createdWorkers{this.complete(i.data),this.returnWorker(i.target),this.next()})),t}returnWorker(t){this.workerPool.push(t)}complete(t){t.error!==void 0?this.resolveHash[t.uuid].reject(t.error):this.resolveHash[t.uuid].resolve(t.data),this.resolveHash[t.uuid]=null}async _run(t,i){await this._initWorkers();const s=new Promise((r,n)=>{this.queue.push({id:t,arguments:i,resolve:r,reject:n})});return this.next(),s}next(){if(!this.queue.length)return;const t=this.getWorker();if(!t)return;const i=this.queue.pop(),s=i.id;this.resolveHash[Ya]={resolve:i.resolve,reject:i.reject},t.postMessage({data:i.arguments,uuid:Ya++,id:s})}}const qa=new Lu;function Di(e,t,i){const s=new B(e);return s.baseTexture.on("dispose",()=>{delete t.promiseCache[i]}),s}const Ou=[".jpeg",".jpg",".png",".webp",".avif"],Uu=["image/jpeg","image/png","image/webp","image/avif"];async function Ka(e){const t=await P.ADAPTER.fetch(e);if(!t.ok)throw new Error(`[loadImageBitmap] Failed to fetch ${e}: ${t.status} ${t.statusText}`);const i=await t.blob();return await createImageBitmap(i)}const Fi={name:"loadTextures",extension:{type:M.LoadParser,priority:Jt.High},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test(e){return ei(e,Uu)||Ee(e,Ou)},async load(e,t,i){let s=null;globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&await qa.isImageBitmapSupported()?s=await qa.loadImageBitmap(e):s=await Ka(e):s=await new Promise(n=>{s=new Image,s.crossOrigin=this.config.crossOrigin,s.src=e,s.complete?n(s):s.onload=()=>{n(s)}});const r=new V(s,bt({resolution:fe(e)},t.data));return r.resource.src=e,Di(r,i,e)},unload(e){e.destroy(!0)}};U.add(Fi);const ku=".svg",Gu="image/svg+xml",Za={extension:{type:M.LoadParser,priority:Jt.High},name:"loadSVG",test(e){return ei(e,Gu)||Ee(e,ku)},async testParse(e){return Je.test(e)},async parse(e,t,i){var o;const s=new Je(e,(o=t==null?void 0:t.data)==null?void 0:o.resourceOptions);await s.load();const r=new V(s,bt({resolution:fe(e)},t==null?void 0:t.data));return r.resource.src=e,Di(r,i,e)},async load(e,t){return(await P.ADAPTER.fetch(e)).text()},unload:Fi.unload};U.add(Za);class Hu{constructor(){this._defaultBundleIdentifierOptions={connector:"-",createBundleAssetId:(t,i)=>`${t}${this._bundleIdConnector}${i}`,extractAssetIdFromBundle:(t,i)=>i.replace(`${t}${this._bundleIdConnector}`,"")},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(t){var i,s,r;if(this._bundleIdConnector=(i=t.connector)!=null?i:this._bundleIdConnector,this._createBundleAssetId=(s=t.createBundleAssetId)!=null?s:this._createBundleAssetId,this._extractAssetIdFromBundle=(r=t.extractAssetIdFromBundle)!=null?r:this._extractAssetIdFromBundle,this._extractAssetIdFromBundle("foo",this._createBundleAssetId("foo","bar"))!=="bar")throw new Error("[Resolver] GenerateBundleAssetId are not working correctly")}prefer(...t){t.forEach(i=>{this._preferredOrder.push(i),i.priority||(i.priority=Object.keys(i.params))}),this._resolverHash={}}set basePath(t){this._basePath=t}get basePath(){return this._basePath}set rootPath(t){this._rootPath=t}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(t){if(typeof t=="string")this._defaultSearchParams=t;else{const i=t;this._defaultSearchParams=Object.keys(i).map(s=>`${encodeURIComponent(s)}=${encodeURIComponent(i[s])}`).join("&")}}addManifest(t){this._manifest&&console.warn("[Resolver] Manifest already exists, this will be overwritten"),this._manifest=t,t.bundles.forEach(i=>{this.addBundle(i.name,i.assets)})}addBundle(t,i){const s=[];Array.isArray(i)?i.forEach(r=>{if(typeof r.name=="string"){const n=this._createBundleAssetId(t,r.name);s.push(n),this.add([r.name,n],r.srcs,r.data)}else{const n=r.name.map(o=>this._createBundleAssetId(t,o));n.forEach(o=>{s.push(o)}),this.add([...r.name,...n],r.srcs)}}):Object.keys(i).forEach(r=>{s.push(this._createBundleAssetId(t,r)),this.add([r,this._createBundleAssetId(t,r)],i[r])}),this._bundles[t]=s}add(t,i,s){const r=oe(t);r.forEach(o=>{this.hasKey(o)&&console.warn(`[Resolver] already has key: ${o} overwriting`)}),Array.isArray(i)||(typeof i=="string"?i=Va(i):i=[i]);const n=i.map(o=>{var h;let a=o;if(typeof o=="string"){let l=!1;for(let c=0;c{this._assetMap[o]=n})}resolveBundle(t){const i=Bi(t);t=oe(t);const s={};return t.forEach(r=>{const n=this._bundles[r];if(n){const o=this.resolve(n),a={};for(const h in o){const l=o[h];a[this._extractAssetIdFromBundle(r,h)]=l}s[r]=a}}),i?s[t[0]]:s}resolveUrl(t){const i=this.resolve(t);if(typeof t!="string"){const s={};for(const r in i)s[r]=i[r].src;return s}return i.src}resolve(t){const i=Bi(t);t=oe(t);const s={};return t.forEach(r=>{var n;if(!this._resolverHash[r])if(this._assetMap[r]){let o=this._assetMap[r];const a=this._getPreferredOrder(o),h=o[0];a==null||a.priority.forEach(l=>{a.params[l].forEach(c=>{const u=o.filter(d=>d[l]?d[l]===c:!1);u.length&&(o=u)})}),this._resolverHash[r]=(n=o[0])!=null?n:h}else{let o=r;(this._basePath||this._rootPath)&&(o=Tt.toAbsolute(o,this._basePath,this._rootPath)),o=this._appendDefaultSearchParams(o),this._resolverHash[r]={src:o}}s[r]=this._resolverHash[r]}),i?s[t[0]]:s}hasKey(t){return!!this._assetMap[t]}hasBundle(t){return!!this._bundles[t]}_getPreferredOrder(t){for(let i=0;in.params.format.includes(s.format));if(r)return r}return this._preferredOrder[0]}_appendDefaultSearchParams(t){if(!this._defaultSearchParams)return t;const i=/\\?/.test(t)?"&":"?";return`${t}${i}${this._defaultSearchParams}`}}class Ja{constructor(){this._detections=[],this._initialized=!1,this.resolver=new Hu,this.loader=new Su,this.cache=ii,this._backgroundLoader=new Eu(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(t={}){var n,o,a,h;if(this._initialized){console.warn("[Assets]AssetManager already initialized, did you load before calling this Asset.init()?");return}if(this._initialized=!0,t.defaultSearchParams&&this.resolver.setDefaultSearchParams(t.defaultSearchParams),t.basePath&&(this.resolver.basePath=t.basePath),t.bundleIdentifier&&this.resolver.setBundleIdentifier(t.bundleIdentifier),t.manifest){let l=t.manifest;typeof l=="string"&&(l=await this.load(l)),this.resolver.addManifest(l)}const i=(o=(n=t.texturePreference)==null?void 0:n.resolution)!=null?o:1,s=typeof i=="number"?[i]:i;let r=[];if((a=t.texturePreference)!=null&&a.format){const l=(h=t.texturePreference)==null?void 0:h.format;r=typeof l=="string"?[l]:l;for(const c of this._detections)await c.test()||(r=await c.remove(r))}else for(const l of this._detections)await l.test()&&(r=await l.add(r));this.resolver.prefer({params:{format:r,resolution:s}}),t.preferences&&this.setPreferences(t.preferences)}add(t,i,s){this.resolver.add(t,i,s)}async load(t,i){this._initialized||await this.init();const s=Bi(t),r=oe(t).map(a=>typeof a!="string"?(this.resolver.add(a.src,a),a.src):(this.resolver.hasKey(a)||this.resolver.add(a,a),a)),n=this.resolver.resolve(r),o=await this._mapLoadToResolve(n,i);return s?o[r[0]]:o}addBundle(t,i){this.resolver.addBundle(t,i)}async loadBundle(t,i){this._initialized||await this.init();let s=!1;typeof t=="string"&&(s=!0,t=[t]);const r=this.resolver.resolveBundle(t),n={},o=Object.keys(r);let a=0,h=0;const l=()=>{i==null||i(++a/h)},c=o.map(u=>{const d=r[u];return h+=Object.keys(d).length,this._mapLoadToResolve(d,l).then(f=>{n[u]=f})});return await Promise.all(c),s?n[t[0]]:n}async backgroundLoad(t){this._initialized||await this.init(),typeof t=="string"&&(t=[t]);const i=this.resolver.resolve(t);this._backgroundLoader.add(Object.values(i))}async backgroundLoadBundle(t){this._initialized||await this.init(),typeof t=="string"&&(t=[t]);const i=this.resolver.resolveBundle(t);Object.values(i).forEach(s=>{this._backgroundLoader.add(Object.values(s))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(t){if(typeof t=="string")return ii.get(t);const i={};for(let s=0;s{const l=n[a.src],c=[a.src];a.alias&&c.push(...a.alias),o[r[h]]=l,ii.set(c,l)}),o}async unload(t){this._initialized||await this.init();const i=oe(t).map(r=>typeof r!="string"?r.src:r),s=this.resolver.resolve(i);await this._unloadFromResolved(s)}async unloadBundle(t){this._initialized||await this.init(),t=oe(t);const i=this.resolver.resolveBundle(t),s=Object.keys(i).map(r=>this._unloadFromResolved(i[r]));await Promise.all(s)}async _unloadFromResolved(t){const i=Object.values(t);i.forEach(s=>{ii.remove(s.src)}),await this.loader.unload(i)}get detections(){return this._detections}get preferWorkers(){return Fi.config.preferWorkers}set preferWorkers(t){z("7.2.0","Assets.prefersWorkers is deprecated, use Assets.setPreferences({ preferWorkers: true }) instead."),this.setPreferences({preferWorkers:t})}setPreferences(t){this.loader.parsers.forEach(i=>{!i.config||Object.keys(i.config).filter(s=>s in t).forEach(s=>{i.config[s]=t[s]})})}}const Ni=new Ja;U.handleByList(M.LoadParser,Ni.loader.parsers).handleByList(M.ResolveParser,Ni.resolver.parsers).handleByList(M.CacheParser,Ni.cache.parsers).handleByList(M.DetectionParser,Ni.detections);const Qa={extension:M.CacheParser,test:e=>Array.isArray(e)&&e.every(t=>t instanceof B),getCacheableAssets:(e,t)=>{const i={};return e.forEach(s=>{t.forEach((r,n)=>{i[s+(n===0?"":n+1)]=r})}),i}};U.add(Qa);const th={extension:{type:M.DetectionParser,priority:1},test:async()=>{if(!globalThis.createImageBitmap)return!1;const e="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=",t=await P.ADAPTER.fetch(e).then(i=>i.blob());return createImageBitmap(t).then(()=>!0,()=>!1)},add:async e=>[...e,"avif"],remove:async e=>e.filter(t=>t!=="avif")};U.add(th);const eh={extension:{type:M.DetectionParser,priority:0},test:async()=>{if(!globalThis.createImageBitmap)return!1;const e="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=",t=await P.ADAPTER.fetch(e).then(i=>i.blob());return createImageBitmap(t).then(()=>!0,()=>!1)},add:async e=>[...e,"webp"],remove:async e=>e.filter(t=>t!=="webp")};U.add(eh);const ih=["png","jpg","jpeg"],sh={extension:{type:M.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async e=>[...e,...ih],remove:async e=>e.filter(t=>!ih.includes(t))};U.add(sh);const rh={extension:M.ResolveParser,test:Fi.test,parse:e=>{var t,i;return{resolution:parseFloat((i=(t=P.RETINA_PREFIX.exec(e))==null?void 0:t[1])!=null?i:"1"),format:e.split(".").pop(),src:e}}};U.add(rh);var It=(e=>(e[e.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",e[e.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",e[e.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",e[e.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",e[e.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",e[e.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",e[e.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",e[e.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",e[e.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",e[e.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",e[e.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",e[e.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",e[e.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",e[e.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",e[e.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",e[e.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",e[e.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",e[e.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",e[e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",e[e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",e[e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",e[e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",e[e.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",e[e.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",e[e.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",e[e.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",e[e.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",e))(It||{});const Li={[33776]:.5,[33777]:.5,[33778]:1,[33779]:1,[35916]:.5,[35917]:.5,[35918]:1,[35919]:1,[37488]:.5,[37489]:.5,[37490]:1,[37491]:1,[37492]:.5,[37496]:1,[37493]:.5,[37497]:1,[37494]:.5,[37495]:.5,[35840]:.5,[35842]:.5,[35841]:.25,[35843]:.25,[36196]:.5,[35986]:.5,[35986]:1,[34798]:1,[37808]:1};let ve,si;function nh(){si={s3tc:ve.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:ve.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:ve.getExtension("WEBGL_compressed_texture_etc"),etc1:ve.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:ve.getExtension("WEBGL_compressed_texture_pvrtc")||ve.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:ve.getExtension("WEBGL_compressed_texture_atc"),astc:ve.getExtension("WEBGL_compressed_texture_astc")}}const oh={extension:{type:M.DetectionParser,priority:2},test:async()=>{const t=P.ADAPTER.createCanvas().getContext("webgl");return t?(ve=t,!0):(console.warn("WebGL not available for compressed textures."),!1)},add:async e=>{si||nh();const t=[];for(const i in si)!si[i]||t.push(i);return[...t,...e]},remove:async e=>(si||nh(),e.filter(t=>!(t in si)))};U.add(oh);class ah extends Ye{constructor(t,i={width:1,height:1,autoLoad:!0}){let s,r;typeof t=="string"?(s=t,r=new Uint8Array):(s=null,r=t),super(r,i),this.origin=s,this.buffer=r?new ds(r):null,this._load=null,this.loaded=!1,this.origin!==null&&i.autoLoad!==!1&&this.load(),this.origin===null&&this.buffer&&(this._load=Promise.resolve(this),this.loaded=!0,this.onBlobLoaded(this.buffer.rawBinaryData))}onBlobLoaded(t){}load(){return this._load?this._load:(this._load=fetch(this.origin).then(t=>t.blob()).then(t=>t.arrayBuffer()).then(t=>(this.data=new Uint32Array(t),this.buffer=new ds(t),this.loaded=!0,this.onBlobLoaded(t),this.update(),this)),this._load)}}class we extends ah{constructor(t,i){super(t,i),this.format=i.format,this.levels=i.levels||1,this._width=i.width,this._height=i.height,this._extension=we._formatToExtension(this.format),(i.levelBuffers||this.buffer)&&(this._levelBuffers=i.levelBuffers||we._createLevelBuffers(t instanceof Uint8Array?t:this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height))}upload(t,i,s){const r=t.gl;if(!t.context.extensions[this._extension])throw new Error(`${this._extension} textures are not supported on the current machine`);if(!this._levelBuffers)return!1;for(let o=0,a=this.levels;o=33776&&t<=33779)return"s3tc";if(t>=37488&&t<=37497)return"etc";if(t>=35840&&t<=35843)return"pvrtc";if(t>=36196)return"etc1";if(t>=35986&&t<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")}static _createLevelBuffers(t,i,s,r,n,o,a){const h=new Array(s);let l=t.byteOffset,c=o,u=a,d=c+r-1&~(r-1),f=u+n-1&~(n-1),p=d*f*Li[i];for(let _=0;_1?c:d,levelHeight:s>1?u:f,levelBuffer:new Uint8Array(t.buffer,l,p)},l+=p,c=c>>1||1,u=u>>1||1,d=c+r-1&~(r-1),f=u+n-1&~(n-1),p=d*f*Li[i];return h}}const Sn=4,Us=124,Xu=32,hh=20,Vu=542327876,ks={SIZE:1,FLAGS:2,HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19},zu={SIZE:0,FLAGS:1,FOURCC:2,RGB_BITCOUNT:3,R_BIT_MASK:4,G_BIT_MASK:5,B_BIT_MASK:6,A_BIT_MASK:7},Gs={DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3,MISC_FLAGS2:4};var Wu=(e=>(e[e.DXGI_FORMAT_UNKNOWN=0]="DXGI_FORMAT_UNKNOWN",e[e.DXGI_FORMAT_R32G32B32A32_TYPELESS=1]="DXGI_FORMAT_R32G32B32A32_TYPELESS",e[e.DXGI_FORMAT_R32G32B32A32_FLOAT=2]="DXGI_FORMAT_R32G32B32A32_FLOAT",e[e.DXGI_FORMAT_R32G32B32A32_UINT=3]="DXGI_FORMAT_R32G32B32A32_UINT",e[e.DXGI_FORMAT_R32G32B32A32_SINT=4]="DXGI_FORMAT_R32G32B32A32_SINT",e[e.DXGI_FORMAT_R32G32B32_TYPELESS=5]="DXGI_FORMAT_R32G32B32_TYPELESS",e[e.DXGI_FORMAT_R32G32B32_FLOAT=6]="DXGI_FORMAT_R32G32B32_FLOAT",e[e.DXGI_FORMAT_R32G32B32_UINT=7]="DXGI_FORMAT_R32G32B32_UINT",e[e.DXGI_FORMAT_R32G32B32_SINT=8]="DXGI_FORMAT_R32G32B32_SINT",e[e.DXGI_FORMAT_R16G16B16A16_TYPELESS=9]="DXGI_FORMAT_R16G16B16A16_TYPELESS",e[e.DXGI_FORMAT_R16G16B16A16_FLOAT=10]="DXGI_FORMAT_R16G16B16A16_FLOAT",e[e.DXGI_FORMAT_R16G16B16A16_UNORM=11]="DXGI_FORMAT_R16G16B16A16_UNORM",e[e.DXGI_FORMAT_R16G16B16A16_UINT=12]="DXGI_FORMAT_R16G16B16A16_UINT",e[e.DXGI_FORMAT_R16G16B16A16_SNORM=13]="DXGI_FORMAT_R16G16B16A16_SNORM",e[e.DXGI_FORMAT_R16G16B16A16_SINT=14]="DXGI_FORMAT_R16G16B16A16_SINT",e[e.DXGI_FORMAT_R32G32_TYPELESS=15]="DXGI_FORMAT_R32G32_TYPELESS",e[e.DXGI_FORMAT_R32G32_FLOAT=16]="DXGI_FORMAT_R32G32_FLOAT",e[e.DXGI_FORMAT_R32G32_UINT=17]="DXGI_FORMAT_R32G32_UINT",e[e.DXGI_FORMAT_R32G32_SINT=18]="DXGI_FORMAT_R32G32_SINT",e[e.DXGI_FORMAT_R32G8X24_TYPELESS=19]="DXGI_FORMAT_R32G8X24_TYPELESS",e[e.DXGI_FORMAT_D32_FLOAT_S8X24_UINT=20]="DXGI_FORMAT_D32_FLOAT_S8X24_UINT",e[e.DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS=21]="DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",e[e.DXGI_FORMAT_X32_TYPELESS_G8X24_UINT=22]="DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",e[e.DXGI_FORMAT_R10G10B10A2_TYPELESS=23]="DXGI_FORMAT_R10G10B10A2_TYPELESS",e[e.DXGI_FORMAT_R10G10B10A2_UNORM=24]="DXGI_FORMAT_R10G10B10A2_UNORM",e[e.DXGI_FORMAT_R10G10B10A2_UINT=25]="DXGI_FORMAT_R10G10B10A2_UINT",e[e.DXGI_FORMAT_R11G11B10_FLOAT=26]="DXGI_FORMAT_R11G11B10_FLOAT",e[e.DXGI_FORMAT_R8G8B8A8_TYPELESS=27]="DXGI_FORMAT_R8G8B8A8_TYPELESS",e[e.DXGI_FORMAT_R8G8B8A8_UNORM=28]="DXGI_FORMAT_R8G8B8A8_UNORM",e[e.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB=29]="DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",e[e.DXGI_FORMAT_R8G8B8A8_UINT=30]="DXGI_FORMAT_R8G8B8A8_UINT",e[e.DXGI_FORMAT_R8G8B8A8_SNORM=31]="DXGI_FORMAT_R8G8B8A8_SNORM",e[e.DXGI_FORMAT_R8G8B8A8_SINT=32]="DXGI_FORMAT_R8G8B8A8_SINT",e[e.DXGI_FORMAT_R16G16_TYPELESS=33]="DXGI_FORMAT_R16G16_TYPELESS",e[e.DXGI_FORMAT_R16G16_FLOAT=34]="DXGI_FORMAT_R16G16_FLOAT",e[e.DXGI_FORMAT_R16G16_UNORM=35]="DXGI_FORMAT_R16G16_UNORM",e[e.DXGI_FORMAT_R16G16_UINT=36]="DXGI_FORMAT_R16G16_UINT",e[e.DXGI_FORMAT_R16G16_SNORM=37]="DXGI_FORMAT_R16G16_SNORM",e[e.DXGI_FORMAT_R16G16_SINT=38]="DXGI_FORMAT_R16G16_SINT",e[e.DXGI_FORMAT_R32_TYPELESS=39]="DXGI_FORMAT_R32_TYPELESS",e[e.DXGI_FORMAT_D32_FLOAT=40]="DXGI_FORMAT_D32_FLOAT",e[e.DXGI_FORMAT_R32_FLOAT=41]="DXGI_FORMAT_R32_FLOAT",e[e.DXGI_FORMAT_R32_UINT=42]="DXGI_FORMAT_R32_UINT",e[e.DXGI_FORMAT_R32_SINT=43]="DXGI_FORMAT_R32_SINT",e[e.DXGI_FORMAT_R24G8_TYPELESS=44]="DXGI_FORMAT_R24G8_TYPELESS",e[e.DXGI_FORMAT_D24_UNORM_S8_UINT=45]="DXGI_FORMAT_D24_UNORM_S8_UINT",e[e.DXGI_FORMAT_R24_UNORM_X8_TYPELESS=46]="DXGI_FORMAT_R24_UNORM_X8_TYPELESS",e[e.DXGI_FORMAT_X24_TYPELESS_G8_UINT=47]="DXGI_FORMAT_X24_TYPELESS_G8_UINT",e[e.DXGI_FORMAT_R8G8_TYPELESS=48]="DXGI_FORMAT_R8G8_TYPELESS",e[e.DXGI_FORMAT_R8G8_UNORM=49]="DXGI_FORMAT_R8G8_UNORM",e[e.DXGI_FORMAT_R8G8_UINT=50]="DXGI_FORMAT_R8G8_UINT",e[e.DXGI_FORMAT_R8G8_SNORM=51]="DXGI_FORMAT_R8G8_SNORM",e[e.DXGI_FORMAT_R8G8_SINT=52]="DXGI_FORMAT_R8G8_SINT",e[e.DXGI_FORMAT_R16_TYPELESS=53]="DXGI_FORMAT_R16_TYPELESS",e[e.DXGI_FORMAT_R16_FLOAT=54]="DXGI_FORMAT_R16_FLOAT",e[e.DXGI_FORMAT_D16_UNORM=55]="DXGI_FORMAT_D16_UNORM",e[e.DXGI_FORMAT_R16_UNORM=56]="DXGI_FORMAT_R16_UNORM",e[e.DXGI_FORMAT_R16_UINT=57]="DXGI_FORMAT_R16_UINT",e[e.DXGI_FORMAT_R16_SNORM=58]="DXGI_FORMAT_R16_SNORM",e[e.DXGI_FORMAT_R16_SINT=59]="DXGI_FORMAT_R16_SINT",e[e.DXGI_FORMAT_R8_TYPELESS=60]="DXGI_FORMAT_R8_TYPELESS",e[e.DXGI_FORMAT_R8_UNORM=61]="DXGI_FORMAT_R8_UNORM",e[e.DXGI_FORMAT_R8_UINT=62]="DXGI_FORMAT_R8_UINT",e[e.DXGI_FORMAT_R8_SNORM=63]="DXGI_FORMAT_R8_SNORM",e[e.DXGI_FORMAT_R8_SINT=64]="DXGI_FORMAT_R8_SINT",e[e.DXGI_FORMAT_A8_UNORM=65]="DXGI_FORMAT_A8_UNORM",e[e.DXGI_FORMAT_R1_UNORM=66]="DXGI_FORMAT_R1_UNORM",e[e.DXGI_FORMAT_R9G9B9E5_SHAREDEXP=67]="DXGI_FORMAT_R9G9B9E5_SHAREDEXP",e[e.DXGI_FORMAT_R8G8_B8G8_UNORM=68]="DXGI_FORMAT_R8G8_B8G8_UNORM",e[e.DXGI_FORMAT_G8R8_G8B8_UNORM=69]="DXGI_FORMAT_G8R8_G8B8_UNORM",e[e.DXGI_FORMAT_BC1_TYPELESS=70]="DXGI_FORMAT_BC1_TYPELESS",e[e.DXGI_FORMAT_BC1_UNORM=71]="DXGI_FORMAT_BC1_UNORM",e[e.DXGI_FORMAT_BC1_UNORM_SRGB=72]="DXGI_FORMAT_BC1_UNORM_SRGB",e[e.DXGI_FORMAT_BC2_TYPELESS=73]="DXGI_FORMAT_BC2_TYPELESS",e[e.DXGI_FORMAT_BC2_UNORM=74]="DXGI_FORMAT_BC2_UNORM",e[e.DXGI_FORMAT_BC2_UNORM_SRGB=75]="DXGI_FORMAT_BC2_UNORM_SRGB",e[e.DXGI_FORMAT_BC3_TYPELESS=76]="DXGI_FORMAT_BC3_TYPELESS",e[e.DXGI_FORMAT_BC3_UNORM=77]="DXGI_FORMAT_BC3_UNORM",e[e.DXGI_FORMAT_BC3_UNORM_SRGB=78]="DXGI_FORMAT_BC3_UNORM_SRGB",e[e.DXGI_FORMAT_BC4_TYPELESS=79]="DXGI_FORMAT_BC4_TYPELESS",e[e.DXGI_FORMAT_BC4_UNORM=80]="DXGI_FORMAT_BC4_UNORM",e[e.DXGI_FORMAT_BC4_SNORM=81]="DXGI_FORMAT_BC4_SNORM",e[e.DXGI_FORMAT_BC5_TYPELESS=82]="DXGI_FORMAT_BC5_TYPELESS",e[e.DXGI_FORMAT_BC5_UNORM=83]="DXGI_FORMAT_BC5_UNORM",e[e.DXGI_FORMAT_BC5_SNORM=84]="DXGI_FORMAT_BC5_SNORM",e[e.DXGI_FORMAT_B5G6R5_UNORM=85]="DXGI_FORMAT_B5G6R5_UNORM",e[e.DXGI_FORMAT_B5G5R5A1_UNORM=86]="DXGI_FORMAT_B5G5R5A1_UNORM",e[e.DXGI_FORMAT_B8G8R8A8_UNORM=87]="DXGI_FORMAT_B8G8R8A8_UNORM",e[e.DXGI_FORMAT_B8G8R8X8_UNORM=88]="DXGI_FORMAT_B8G8R8X8_UNORM",e[e.DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM=89]="DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",e[e.DXGI_FORMAT_B8G8R8A8_TYPELESS=90]="DXGI_FORMAT_B8G8R8A8_TYPELESS",e[e.DXGI_FORMAT_B8G8R8A8_UNORM_SRGB=91]="DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",e[e.DXGI_FORMAT_B8G8R8X8_TYPELESS=92]="DXGI_FORMAT_B8G8R8X8_TYPELESS",e[e.DXGI_FORMAT_B8G8R8X8_UNORM_SRGB=93]="DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",e[e.DXGI_FORMAT_BC6H_TYPELESS=94]="DXGI_FORMAT_BC6H_TYPELESS",e[e.DXGI_FORMAT_BC6H_UF16=95]="DXGI_FORMAT_BC6H_UF16",e[e.DXGI_FORMAT_BC6H_SF16=96]="DXGI_FORMAT_BC6H_SF16",e[e.DXGI_FORMAT_BC7_TYPELESS=97]="DXGI_FORMAT_BC7_TYPELESS",e[e.DXGI_FORMAT_BC7_UNORM=98]="DXGI_FORMAT_BC7_UNORM",e[e.DXGI_FORMAT_BC7_UNORM_SRGB=99]="DXGI_FORMAT_BC7_UNORM_SRGB",e[e.DXGI_FORMAT_AYUV=100]="DXGI_FORMAT_AYUV",e[e.DXGI_FORMAT_Y410=101]="DXGI_FORMAT_Y410",e[e.DXGI_FORMAT_Y416=102]="DXGI_FORMAT_Y416",e[e.DXGI_FORMAT_NV12=103]="DXGI_FORMAT_NV12",e[e.DXGI_FORMAT_P010=104]="DXGI_FORMAT_P010",e[e.DXGI_FORMAT_P016=105]="DXGI_FORMAT_P016",e[e.DXGI_FORMAT_420_OPAQUE=106]="DXGI_FORMAT_420_OPAQUE",e[e.DXGI_FORMAT_YUY2=107]="DXGI_FORMAT_YUY2",e[e.DXGI_FORMAT_Y210=108]="DXGI_FORMAT_Y210",e[e.DXGI_FORMAT_Y216=109]="DXGI_FORMAT_Y216",e[e.DXGI_FORMAT_NV11=110]="DXGI_FORMAT_NV11",e[e.DXGI_FORMAT_AI44=111]="DXGI_FORMAT_AI44",e[e.DXGI_FORMAT_IA44=112]="DXGI_FORMAT_IA44",e[e.DXGI_FORMAT_P8=113]="DXGI_FORMAT_P8",e[e.DXGI_FORMAT_A8P8=114]="DXGI_FORMAT_A8P8",e[e.DXGI_FORMAT_B4G4R4A4_UNORM=115]="DXGI_FORMAT_B4G4R4A4_UNORM",e[e.DXGI_FORMAT_P208=116]="DXGI_FORMAT_P208",e[e.DXGI_FORMAT_V208=117]="DXGI_FORMAT_V208",e[e.DXGI_FORMAT_V408=118]="DXGI_FORMAT_V408",e[e.DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE=119]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE",e[e.DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE=120]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE",e[e.DXGI_FORMAT_FORCE_UINT=121]="DXGI_FORMAT_FORCE_UINT",e))(Wu||{}),$u=(e=>(e[e.DDS_DIMENSION_TEXTURE1D=2]="DDS_DIMENSION_TEXTURE1D",e[e.DDS_DIMENSION_TEXTURE2D=3]="DDS_DIMENSION_TEXTURE2D",e[e.DDS_DIMENSION_TEXTURE3D=6]="DDS_DIMENSION_TEXTURE3D",e))($u||{});const ju=1,Yu=2,qu=4,Ku=64,Zu=512,Ju=131072,Qu=827611204,td=861165636,ed=894720068,id=808540228,sd=4,rd={[Qu]:It.COMPRESSED_RGBA_S3TC_DXT1_EXT,[td]:It.COMPRESSED_RGBA_S3TC_DXT3_EXT,[ed]:It.COMPRESSED_RGBA_S3TC_DXT5_EXT},nd={[70]:It.COMPRESSED_RGBA_S3TC_DXT1_EXT,[71]:It.COMPRESSED_RGBA_S3TC_DXT1_EXT,[73]:It.COMPRESSED_RGBA_S3TC_DXT3_EXT,[74]:It.COMPRESSED_RGBA_S3TC_DXT3_EXT,[76]:It.COMPRESSED_RGBA_S3TC_DXT5_EXT,[77]:It.COMPRESSED_RGBA_S3TC_DXT5_EXT,[72]:It.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,[75]:It.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,[78]:It.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT};function lh(e){const t=new Uint32Array(e);if(t[0]!==Vu)throw new Error("Invalid DDS file magic word");const s=new Uint32Array(e,0,Us/Uint32Array.BYTES_PER_ELEMENT),r=s[ks.HEIGHT],n=s[ks.WIDTH],o=s[ks.MIPMAP_COUNT],a=new Uint32Array(e,ks.PIXEL_FORMAT*Uint32Array.BYTES_PER_ELEMENT,Xu/Uint32Array.BYTES_PER_ELEMENT),h=a[ju];if(h&qu){const l=a[zu.FOURCC];if(l!==id){const y=rd[l],x=Sn+Us,A=new Uint8Array(e,x);return[new we(A,{format:y,width:n,height:r,levels:o})]}const c=Sn+Us,u=new Uint32Array(t.buffer,c,hh/Uint32Array.BYTES_PER_ELEMENT),d=u[Gs.DXGI_FORMAT],f=u[Gs.RESOURCE_DIMENSION],p=u[Gs.MISC_FLAG],_=u[Gs.ARRAY_SIZE],g=nd[d];if(g===void 0)throw new Error(`DDSParser cannot parse texture data with DXGI format ${d}`);if(p===sd)throw new Error("DDSParser does not support cubemap textures");if(f===6)throw new Error("DDSParser does not supported 3D texture data");const v=new Array,b=Sn+Us+hh;if(_===1)v.push(new Uint8Array(e,b));else{const y=Li[g];let x=0,A=n,D=r;for(let E=0;E>>1,D=D>>>1}let R=b;for(let E=0;E<_;E++)v.push(new Uint8Array(e,R,x)),R+=x}return v.map(y=>new we(y,{format:g,width:n,height:r,levels:o}))}throw h&Ku?new Error("DDSParser does not support uncompressed texture data."):h&Zu?new Error("DDSParser does not supported YUV uncompressed texture data."):h&Ju?new Error("DDSParser does not support single-channel (lumninance) texture data!"):h&Yu?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}const ch=[171,75,84,88,32,49,49,187,13,10,26,10],od=67305985,Qt={FILE_IDENTIFIER:0,ENDIANNESS:12,GL_TYPE:16,GL_TYPE_SIZE:20,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,GL_BASE_INTERNAL_FORMAT:32,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},An=64,Rn={[k.UNSIGNED_BYTE]:1,[k.UNSIGNED_SHORT]:2,[k.INT]:4,[k.UNSIGNED_INT]:4,[k.FLOAT]:4,[k.HALF_FLOAT]:8},uh={[C.RGBA]:4,[C.RGB]:3,[C.RG]:2,[C.RED]:1,[C.LUMINANCE]:1,[C.LUMINANCE_ALPHA]:2,[C.ALPHA]:1},dh={[k.UNSIGNED_SHORT_4_4_4_4]:2,[k.UNSIGNED_SHORT_5_5_5_1]:2,[k.UNSIGNED_SHORT_5_6_5]:2};function fh(e,t,i=!1){const s=new DataView(t);if(!ad(e,s))return null;const r=s.getUint32(Qt.ENDIANNESS,!0)===od,n=s.getUint32(Qt.GL_TYPE,r),o=s.getUint32(Qt.GL_FORMAT,r),a=s.getUint32(Qt.GL_INTERNAL_FORMAT,r),h=s.getUint32(Qt.PIXEL_WIDTH,r),l=s.getUint32(Qt.PIXEL_HEIGHT,r)||1,c=s.getUint32(Qt.PIXEL_DEPTH,r)||1,u=s.getUint32(Qt.NUMBER_OF_ARRAY_ELEMENTS,r)||1,d=s.getUint32(Qt.NUMBER_OF_FACES,r),f=s.getUint32(Qt.NUMBER_OF_MIPMAP_LEVELS,r),p=s.getUint32(Qt.BYTES_OF_KEY_VALUE_DATA,r);if(l===0||c!==1)throw new Error("Only 2D textures are supported");if(d!==1)throw new Error("CubeTextures are not supported by KTXLoader yet!");if(u!==1)throw new Error("WebGL does not support array textures");const _=4,g=4,v=h+3&-4,b=l+3&-4,y=new Array(u);let x=h*l;n===0&&(x=v*b);let A;if(n!==0?Rn[n]?A=Rn[n]*uh[o]:A=dh[n]:A=Li[a],A===void 0)throw new Error("Unable to resolve the pixel format stored in the *.ktx file!");const D=i?ld(s,p,r):null;let E=x*A,O=h,H=l,I=v,N=b,w=An+p;for(let T=0;T1||n!==0?O:I,levelHeight:f>1||n!==0?H:N,levelBuffer:new Uint8Array(t,q,E)},q+=E}w+=W+4,w=w%4!==0?w+4-w%4:w,O=O>>1||1,H=H>>1||1,I=O+_-1&~(_-1),N=H+g-1&~(g-1),E=I*N*A}return n!==0?{uncompressed:y.map(T=>{let W=T[0].levelBuffer,q=!1;return n===k.FLOAT?W=new Float32Array(T[0].levelBuffer.buffer,T[0].levelBuffer.byteOffset,T[0].levelBuffer.byteLength/4):n===k.UNSIGNED_INT?(q=!0,W=new Uint32Array(T[0].levelBuffer.buffer,T[0].levelBuffer.byteOffset,T[0].levelBuffer.byteLength/4)):n===k.INT&&(q=!0,W=new Int32Array(T[0].levelBuffer.buffer,T[0].levelBuffer.byteOffset,T[0].levelBuffer.byteLength/4)),{resource:new Ye(W,{width:T[0].levelWidth,height:T[0].levelHeight}),type:n,format:q?hd(o):o}}),kvData:D}:{compressed:y.map(T=>new we(null,{format:a,width:h,height:l,levels:f,levelBuffers:T})),kvData:D}}function ad(e,t){for(let i=0;it-r){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}let h=0;for(;h{const h=new V(a,bt({mipmap:Wt.OFF,alphaMode:Nt.NO_PREMULTIPLIED_ALPHA,resolution:fe(e)},t.data));return Di(h,i,e)});return o.length===1?o[0]:o},unload(e){Array.isArray(e)?e.forEach(t=>t.destroy(!0)):e.destroy(!0)}};U.add(ph);const mh={extension:{type:M.LoadParser,priority:Jt.High},name:"loadKTX",test(e){return Ee(e,".ktx")},async load(e,t,i){const r=await(await P.ADAPTER.fetch(e)).arrayBuffer(),{compressed:n,uncompressed:o,kvData:a}=fh(e,r),h=n!=null?n:o,l=bt({mipmap:Wt.OFF,alphaMode:Nt.NO_PREMULTIPLIED_ALPHA,resolution:fe(e)},t.data),c=h.map(u=>{h===o&&Object.assign(l,{type:u.type,format:u.format});const d=new V(u,l);return d.ktxKeyValueData=a,Di(d,i,e)});return c.length===1?c[0]:c},unload(e){Array.isArray(e)?e.forEach(t=>t.destroy(!0)):e.destroy(!0)}};U.add(mh);const _h={extension:M.ResolveParser,test:e=>{const i=e.split("?")[0].split(".").pop();return["basis","ktx","dds"].includes(i)},parse:e=>{var s,r,n,o;if(e.split("?")[0].split(".").pop()==="ktx"){const a=[".s3tc.ktx",".s3tc_sRGB.ktx",".etc.ktx",".etc1.ktx",".pvrt.ktx",".atc.ktx",".astc.ktx"];if(a.some(h=>e.endsWith(h)))return{resolution:parseFloat((r=(s=P.RETINA_PREFIX.exec(e))==null?void 0:s[1])!=null?r:"1"),format:a.find(h=>e.endsWith(h)),src:e}}return{resolution:parseFloat((o=(n=P.RETINA_PREFIX.exec(e))==null?void 0:n[1])!=null?o:"1"),format:e.split(".").pop(),src:e}}};U.add(_h);const cd=new $,ud=4,Oi=class{constructor(e){this.renderer=e}async image(e,t,i){const s=new Image;return s.src=await this.base64(e,t,i),s}async base64(e,t,i){const s=this.canvas(e);if(s.toBlob!==void 0)return new Promise((r,n)=>{s.toBlob(o=>{if(!o){n(new Error("ICanvas.toBlob failed!"));return}const a=new FileReader;a.onload=()=>r(a.result),a.onerror=n,a.readAsDataURL(o)},t,i)});if(s.toDataURL!==void 0)return s.toDataURL(t,i);if(s.convertToBlob!==void 0){const r=await s.convertToBlob({type:t,quality:i});return new Promise((n,o)=>{const a=new FileReader;a.onload=()=>n(a.result),a.onerror=o,a.readAsDataURL(r)})}throw new Error("Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, or ICanvas.convertToBlob to be implemented")}canvas(e,t){const{pixels:i,width:s,height:r,flipY:n}=this._rawPixels(e,t);n&&Oi._flipY(i,s,r),Oi._unpremultiplyAlpha(i);const o=new No(s,r,1),a=new ImageData(new Uint8ClampedArray(i.buffer),s,r);return o.context.putImageData(a,0,0),o.canvas}pixels(e,t){const{pixels:i,width:s,height:r,flipY:n}=this._rawPixels(e,t);return n&&Oi._flipY(i,s,r),Oi._unpremultiplyAlpha(i),i}_rawPixels(e,t){const i=this.renderer;if(!i)throw new Error("The Extract has already been destroyed");let s,r=!1,n,o=!1;if(e&&(e instanceof be?n=e:(n=i.generateTexture(e,{resolution:i.resolution,multisample:i.multisample}),o=!0)),n){if(s=n.baseTexture.resolution,t=t!=null?t:n.frame,r=!1,!o){i.renderTexture.bind(n);const u=n.framebuffer.glFramebuffers[i.CONTEXT_UID];u.blitFramebuffer&&i.framebuffer.bind(u.blitFramebuffer)}}else s=i.resolution,t||(t=cd,t.width=i.width/s,t.height=i.height/s),r=!0,i.renderTexture.bind();const a=Math.round(t.width*s),h=Math.round(t.height*s),l=new Uint8Array(ud*a*h),c=i.gl;return c.readPixels(Math.round(t.x*s),Math.round(t.y*s),a,h,c.RGBA,c.UNSIGNED_BYTE,l),o&&(n==null||n.destroy(!0)),{pixels:l,width:a,height:h,flipY:r}}destroy(){this.renderer=null}static _flipY(e,t,i){const s=t<<2,r=i>>1,n=new Uint8Array(s);for(let o=0;o=0&&a>=0&&r>=0&&n>=0)){t.length=0;return}const h=Math.ceil(2.3*Math.sqrt(o+a)),l=h*8+(r?4:0)+(n?4:0);if(t.length=l,l===0)return;if(h===0){t.length=8,t[0]=t[6]=i+r,t[1]=t[3]=s+n,t[2]=t[4]=i-r,t[5]=t[7]=s-n;return}let c=0,u=h*4+(r?2:0)+2,d=u,f=l;{const p=r+o,_=n,g=i+p,v=i-p,b=s+_;if(t[c++]=g,t[c++]=b,t[--u]=b,t[--u]=v,n){const y=s-_;t[d++]=v,t[d++]=y,t[--f]=y,t[--f]=g}}for(let p=1;p0||t&&s<=0){const r=i/2;for(let n=r+r%2;n=6){gh(i,!1);const o=[];for(let l=0;l=0&&n>=0&&o.push(i,s,i+r,s,i+r,s+n,i,s+n)},triangulate(e,t){const i=e.points,s=t.points;if(i.length===0)return;const r=s.length/2;s.push(i[0],i[1],i[2],i[3],i[6],i[7],i[4],i[5]),t.indices.push(r,r+1,r+2,r+1,r+2,r+3)}},vh={build(e){Ui.build(e)},triangulate(e,t){Ui.triangulate(e,t)}};var Vt=(e=>(e.MITER="miter",e.BEVEL="bevel",e.ROUND="round",e))(Vt||{}),Se=(e=>(e.BUTT="butt",e.ROUND="round",e.SQUARE="square",e))(Se||{});const Ae={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount(e,t=20){if(!this.adaptive||!e||isNaN(e))return t;let i=Math.ceil(e/this.maxLength);return ithis.maxSegments&&(i=this.maxSegments),i}},dd=Ae;class Pn{static curveTo(t,i,s,r,n,o){const a=o[o.length-2],l=o[o.length-1]-i,c=a-t,u=r-i,d=s-t,f=Math.abs(l*d-c*u);if(f<1e-8||n===0)return(o[o.length-2]!==t||o[o.length-1]!==i)&&o.push(t,i),null;const p=l*l+c*c,_=u*u+d*d,g=l*u+c*d,v=n*Math.sqrt(p)/f,b=n*Math.sqrt(_)/f,y=v*g/p,x=b*g/_,A=v*d+b*c,D=v*u+b*l,R=c*(b+y),E=l*(b+y),O=d*(v+x),H=u*(v+x),I=Math.atan2(E-D,R-A),N=Math.atan2(H-D,O-A);return{cx:A+t,cy:D+i,radius:n,startAngle:I,endAngle:N,anticlockwise:c*u>d*l}}static arc(t,i,s,r,n,o,a,h,l){const c=a-o,u=Ae._segmentsCount(Math.abs(c)*n,Math.ceil(Math.abs(c)/yi)*40),d=c/(u*2),f=d*2,p=Math.cos(d),_=Math.sin(d),g=u-1,v=g%1/g;for(let b=0;b<=g;++b){const y=b+v*b,x=d+o+f*y,A=Math.cos(x),D=-Math.sin(x);l.push((p*A+_*D)*n+s,(p*-D+_*A)*n+r)}}}class xh{constructor(){this.reset()}begin(t,i,s){this.reset(),this.style=t,this.start=i,this.attribStart=s}end(t,i){this.attribSize=i-this.attribStart,this.size=t-this.start}reset(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0}}class Hs{static curveLength(t,i,s,r,n,o,a,h){let c=0,u=0,d=0,f=0,p=0,_=0,g=0,v=0,b=0,y=0,x=0,A=t,D=i;for(let R=1;R<=10;++R)u=R/10,d=u*u,f=d*u,p=1-u,_=p*p,g=_*p,v=g*t+3*_*u*s+3*p*d*n+f*a,b=g*i+3*_*u*r+3*p*d*o+f*h,y=A-v,x=D-b,A=v,D=b,c+=Math.sqrt(y*y+x*x);return c}static curveTo(t,i,s,r,n,o,a){const h=a[a.length-2],l=a[a.length-1];a.length-=2;const c=Ae._segmentsCount(Hs.curveLength(h,l,t,i,s,r,n,o));let u=0,d=0,f=0,p=0,_=0;a.push(h,l);for(let g=1,v=0;g<=c;++g)v=g/c,u=1-v,d=u*u,f=d*u,p=v*v,_=p*v,a.push(f*h+3*d*v*t+3*u*p*s+_*n,f*l+3*d*v*i+3*u*p*r+_*o)}}function bh(e,t,i,s,r,n,o,a){const h=e-i*r,l=t-s*r,c=e+i*n,u=t+s*n;let d,f;o?(d=s,f=-i):(d=-s,f=i);const p=h+d,_=l+f,g=c+d,v=u+f;return a.push(p,_,g,v),2}function Ge(e,t,i,s,r,n,o,a){const h=i-e,l=s-t;let c=Math.atan2(h,l),u=Math.atan2(r-e,n-t);a&&cu&&(u+=Math.PI*2);let d=c;const f=u-c,p=Math.abs(f),_=Math.sqrt(h*h+l*l),g=(15*p*Math.sqrt(_)/Math.PI>>0)+1,v=f/g;if(d+=v,a){o.push(e,t,i,s);for(let b=1,y=d;b=0&&(n.join===Vt.ROUND?d+=Ge(y,x,y-R*w,x-E*w,y-O*w,x-H*w,c,!1)+4:d+=2,c.push(y-O*T,x-H*T,y+O*w,x+H*w));continue}const vt=(-R+v)*(-E+x)-(-R+y)*(-E+b),ut=(-O+A)*(-H+x)-(-O+y)*(-H+D),xt=(Z*ut-S*vt)/J,wt=(X*vt-at*ut)/J,Ft=(xt-y)*(xt-y)+(wt-x)*(wt-x),Et=y+(xt-y)*w,rt=x+(wt-x)*w,dt=y-(xt-y)*T,ft=x-(wt-x)*T,he=Math.min(Z*Z+at*at,S*S+X*X),le=Q?w:T,Ji=he+le*le*_,Yd=Ft<=Ji;let er=n.join;if(er===Vt.MITER&&Ft/_>g&&(er=Vt.BEVEL),Yd)switch(er){case Vt.MITER:{c.push(Et,rt,dt,ft);break}case Vt.BEVEL:{Q?c.push(Et,rt,y+R*T,x+E*T,Et,rt,y+O*T,x+H*T):c.push(y-R*w,x-E*w,dt,ft,y-O*w,x-H*w,dt,ft),d+=2;break}case Vt.ROUND:{Q?(c.push(Et,rt,y+R*T,x+E*T),d+=Ge(y,x,y+R*T,x+E*T,y+O*T,x+H*T,c,!0)+4,c.push(Et,rt,y+O*T,x+H*T)):(c.push(y-R*w,x-E*w,dt,ft),d+=Ge(y,x,y-R*w,x-E*w,y-O*w,x-H*w,c,!1)+4,c.push(y-O*w,x-H*w,dt,ft));break}}else{switch(c.push(y-R*w,x-E*w,y+R*T,x+E*T),er){case Vt.MITER:{Q?c.push(dt,ft,dt,ft):c.push(Et,rt,Et,rt),d+=2;break}case Vt.ROUND:{Q?d+=Ge(y,x,y+R*T,x+E*T,y+O*T,x+H*T,c,!0)+2:d+=Ge(y,x,y-R*w,x-E*w,y-O*w,x-H*w,c,!1)+2;break}}c.push(y-O*w,x-H*w,y+O*T,x+H*T),d+=2}}v=s[(u-2)*2],b=s[(u-2)*2+1],y=s[(u-1)*2],x=s[(u-1)*2+1],R=-(b-x),E=v-y,I=Math.sqrt(R*R+E*E),R/=I,E/=I,R*=p,E*=p,c.push(y-R*w,x-E*w,y+R*T,x+E*T),h||(n.cap===Se.ROUND?d+=Ge(y-R*(w-T)*.5,x-E*(w-T)*.5,y-R*w,x-E*w,y+R*T,x+E*T,c,!1)+2:n.cap===Se.SQUARE&&(d+=bh(y,x,R,E,w,T,!1,c)));const W=t.indices,q=Ae.epsilon*Ae.epsilon;for(let F=f;F0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this}drawShape(e,t=null,i=null,s=null){const r=new Gi(e,t,i,s);return this.graphicsData.push(r),this.dirty++,this}drawHole(e,t=null){if(!this.graphicsData.length)return null;const i=new Gi(e,null,null,t),s=this.graphicsData[this.graphicsData.length-1];return i.lineStyle=s.lineStyle,s.holes.push(i),this.dirty++,this}destroy(){super.destroy();for(let e=0;e0&&(i=this.batches[this.batches.length-1],s=i.style);for(let a=this.shapeIndex;a65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&o===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=o?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}_compareStyles(e,t){return!(!e||!t||e.texture.baseTexture!==t.texture.baseTexture||e.color+e.alpha!==t.color+t.alpha||!!e.native!=!!t.native)}validateBatching(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(let e=0,t=this.graphicsData.length;e65535*2)return!1;const e=this.batches;for(let t=0;t0&&(s=ki.pop(),s||(s=new ps,s.texArray=new Es),this.drawCalls.push(s)),s.start=l,s.size=0,s.texArray.count=0,s.type=h),p.touched=1,p._batchEnabled=e,p._batchLocation=r,p.wrapMode=ie.REPEAT,s.texArray.elements[s.texArray.count++]=p,r++)),s.size+=u.size,l+=u.size,o=p._batchLocation,this.addColors(t,f.color,f.alpha,u.attribSize,u.attribStart),this.addTextureIds(i,o,u.attribSize,u.attribStart)}V._globalBatch=e,this.packAttributes()}packAttributes(){const e=this.points,t=this.uvs,i=this.colors,s=this.textureIds,r=new ArrayBuffer(e.length*3*4),n=new Float32Array(r),o=new Uint32Array(r);let a=0;for(let h=0;h0&&e.alpha>0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._lineStyle,{visible:i},e)):this._lineStyle.reset(),this}startPoly(){if(this.currentPath){const e=this.currentPath.points,t=this.currentPath.points.length;t>2&&(this.drawShape(this.currentPath),this.currentPath=new Pe,this.currentPath.closeStroke=!1,this.currentPath.points.push(e[t-2],e[t-1]))}else this.currentPath=new Pe,this.currentPath.closeStroke=!1}finishPoly(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)}moveTo(e,t){return this.startPoly(),this.currentPath.points[0]=e,this.currentPath.points[1]=t,this}lineTo(e,t){this.currentPath||this.moveTo(0,0);const i=this.currentPath.points,s=i[i.length-2],r=i[i.length-1];return(s!==e||r!==t)&&i.push(e,t),this}_initCurve(e=0,t=0){this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[e,t]):this.moveTo(e,t)}quadraticCurveTo(e,t,i,s){this._initCurve();const r=this.currentPath.points;return r.length===0&&this.moveTo(0,0),Xs.curveTo(e,t,i,s,r),this}bezierCurveTo(e,t,i,s,r,n){return this._initCurve(),Hs.curveTo(e,t,i,s,r,n,this.currentPath.points),this}arcTo(e,t,i,s,r){this._initCurve(e,t);const n=this.currentPath.points,o=Pn.curveTo(e,t,i,s,r,n);if(o){const{cx:a,cy:h,radius:l,startAngle:c,endAngle:u,anticlockwise:d}=o;this.arc(a,h,l,c,u,d)}return this}arc(e,t,i,s,r,n=!1){if(s===r)return this;if(!n&&r<=s?r+=yi:n&&s<=r&&(s+=yi),r-s===0)return this;const a=e+Math.cos(s)*i,h=t+Math.sin(s)*i,l=this._geometry.closePointEps;let c=this.currentPath?this.currentPath.points:null;if(c){const u=Math.abs(c[c.length-2]-a),d=Math.abs(c[c.length-1]-h);u0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._fillStyle,{visible:i},e)):this._fillStyle.reset(),this}endFill(){return this.finishPoly(),this._fillStyle.reset(),this}drawRect(e,t,i,s){return this.drawShape(new $(e,t,i,s))}drawRoundedRect(e,t,i,s,r){return this.drawShape(new ys(e,t,i,s,r))}drawCircle(e,t,i){return this.drawShape(new _s(e,t,i))}drawEllipse(e,t,i,s){return this.drawShape(new gs(e,t,i,s))}drawPolygon(...e){let t,i=!0;const s=e[0];s.points?(i=s.closeStroke,t=s.points):Array.isArray(e[0])?t=e[0]:t=e;const r=new Pe(t);return r.closeStroke=i,this.drawShape(r),this}drawShape(e){return this._holeMode?this._geometry.drawHole(e,this._matrix):this._geometry.drawShape(e,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this}clear(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this}isFastRect(){const e=this._geometry.graphicsData;return e.length===1&&e[0].shape.type===_t.RECT&&!e[0].matrix&&!e[0].holes.length&&!(e[0].lineStyle.visible&&e[0].lineStyle.width)}_render(e){this.finishPoly();const t=this._geometry;t.updateBatches(),t.batchable?(this.batchDirty!==t.batchDirty&&this._populateBatches(),this._renderBatched(e)):(e.batch.flush(),this._renderDirect(e))}_populateBatches(){const e=this._geometry,t=this.blendMode,i=e.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=e.batchDirty,this.batches.length=i,this.vertexData=new Float32Array(e.points);for(let s=0;s0){const p=h.x-t[d].x,_=h.y-t[d].y,g=Math.sqrt(p*p+_*_);h=t[d],a+=g/l}else a=d/(c-1);n[f]=a,n[f+1]=0,n[f+2]=a,n[f+3]=1}let u=0;for(let d=0;d0?this.textureScale*this._width/2:this._width/2;for(let l=0;l1&&(d=1);const f=Math.sqrt(r*r+n*n);f<1e-6?(r=0,n=0):(r/=f,n/=f,r*=h,n*=h),o[u]=c.x+r,o[u+1]=c.y+n,o[u+2]=c.x-r,o[u+3]=c.y-n,i=c}this.buffers[0].update()}update(){this.textureScale>0?this.build():this.updateVertices()}}class Ch extends He{constructor(t,i,s){const r=new Ah(t.width,t.height,i,s),n=new ni(B.WHITE);super(r,n),this.texture=t,this.autoResize=!0}textureUpdated(){this._textureID=this.shader.texture._updateID;const t=this.geometry,{width:i,height:s}=this.shader.texture;this.autoResize&&(t.width!==i||t.height!==s)&&(t.width=this.shader.texture.width,t.height=this.shader.texture.height,t.build())}set texture(t){this.shader.texture!==t&&(this.shader.texture=t,this._textureID=-1,t.baseTexture.valid?this.textureUpdated():t.once("update",this.textureUpdated,this))}get texture(){return this.shader.texture}_render(t){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),super._render(t)}destroy(t){this.shader.texture.off("update",this.textureUpdated,this),super.destroy(t)}}const $s=10;class yd extends Ch{constructor(t,i,s,r,n){var o,a,h,l,c,u,d,f;super(B.WHITE,4,4),this._origWidth=t.orig.width,this._origHeight=t.orig.height,this._width=this._origWidth,this._height=this._origHeight,this._leftWidth=(a=i!=null?i:(o=t.defaultBorders)==null?void 0:o.left)!=null?a:$s,this._rightWidth=(l=r!=null?r:(h=t.defaultBorders)==null?void 0:h.right)!=null?l:$s,this._topHeight=(u=s!=null?s:(c=t.defaultBorders)==null?void 0:c.top)!=null?u:$s,this._bottomHeight=(f=n!=null?n:(d=t.defaultBorders)==null?void 0:d.bottom)!=null?f:$s,this.texture=t}textureUpdated(){this._textureID=this.shader.texture._updateID,this._refresh()}get vertices(){return this.geometry.getBuffer("aVertexPosition").data}set vertices(t){this.geometry.getBuffer("aVertexPosition").data=t}updateHorizontalVertices(){const t=this.vertices,i=this._getMinScale();t[9]=t[11]=t[13]=t[15]=this._topHeight*i,t[17]=t[19]=t[21]=t[23]=this._height-this._bottomHeight*i,t[25]=t[27]=t[29]=t[31]=this._height}updateVerticalVertices(){const t=this.vertices,i=this._getMinScale();t[2]=t[10]=t[18]=t[26]=this._leftWidth*i,t[4]=t[12]=t[20]=t[28]=this._width-this._rightWidth*i,t[6]=t[14]=t[22]=t[30]=this._width}_getMinScale(){const t=this._leftWidth+this._rightWidth,i=this._width>t?1:this._width/t,s=this._topHeight+this._bottomHeight,r=this._height>s?1:this._height/s;return Math.min(i,r)}get width(){return this._width}set width(t){this._width=t,this._refresh()}get height(){return this._height}set height(t){this._height=t,this._refresh()}get leftWidth(){return this._leftWidth}set leftWidth(t){this._leftWidth=t,this._refresh()}get rightWidth(){return this._rightWidth}set rightWidth(t){this._rightWidth=t,this._refresh()}get topHeight(){return this._topHeight}set topHeight(t){this._topHeight=t,this._refresh()}get bottomHeight(){return this._bottomHeight}set bottomHeight(t){this._bottomHeight=t,this._refresh()}_refresh(){const t=this.texture,i=this.geometry.buffers[1].data;this._origWidth=t.orig.width,this._origHeight=t.orig.height;const s=1/this._origWidth,r=1/this._origHeight;i[0]=i[8]=i[16]=i[24]=0,i[1]=i[3]=i[5]=i[7]=0,i[6]=i[14]=i[22]=i[30]=1,i[25]=i[27]=i[29]=i[31]=1,i[2]=i[10]=i[18]=i[26]=s*this._leftWidth,i[4]=i[12]=i[20]=i[28]=1-s*this._rightWidth,i[9]=i[11]=i[13]=i[15]=r*this._topHeight,i[17]=i[19]=i[21]=i[23]=1-r*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()}}class vd extends He{constructor(t=B.EMPTY,i,s,r,n){const o=new Vi(i,s,r);o.getBuffer("aVertexPosition").static=!1;const a=new ni(t);super(o,a,null,n),this.autoUpdate=!0}get vertices(){return this.geometry.getBuffer("aVertexPosition").data}set vertices(t){this.geometry.getBuffer("aVertexPosition").data=t}_render(t){this.autoUpdate&&this.geometry.getBuffer("aVertexPosition").update(),super._render(t)}}class xd extends He{constructor(t,i,s=0){const r=new Rh(t.height,i,s),n=new ni(t);s>0&&(t.baseTexture.wrapMode=ie.REPEAT),super(r,n),this.autoUpdate=!0}_render(t){const i=this.geometry;(this.autoUpdate||i._width!==this.shader.texture.height)&&(i._width=this.shader.texture.height,i.update()),super._render(t)}}class bd extends Ct{constructor(t=1500,i,s=16384,r=!1){super();const n=16384;s>n&&(s=n),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=s,this._buffers=null,this._bufferUpdateIDs=[],this._updateID=0,this.interactiveChildren=!1,this.blendMode=G.NORMAL,this.autoResize=r,this.roundPixels=!0,this.baseTexture=null,this.setProperties(i),this._tintColor=new j(0),this.tintRgb=new Float32Array(3),this.tint=16777215}setProperties(t){t&&(this._properties[0]="vertices"in t||"scale"in t?!!t.vertices||!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="tint"in t||"alpha"in t?!!t.tint||!!t.alpha:this._properties[4])}updateTransform(){this.displayObjectUpdateTransform()}get tint(){return this._tintColor.value}set tint(t){this._tintColor.setValue(t),this._tintColor.toRgbArray(this.tintRgb)}render(t){!this.visible||this.worldAlpha<=0||!this.children.length||!this.renderable||(this.baseTexture||(this.baseTexture=this.children[0]._texture.baseTexture,this.baseTexture.valid||this.baseTexture.once("update",()=>this.onChildrenChange(0))),t.batch.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))}onChildrenChange(t){const i=Math.floor(t/this._batchSize);for(;this._bufferUpdateIDs.lengths&&!t.autoResize&&(o=s);let a=t._buffers;a||(a=t._buffers=this.generateBuffers(t));const h=i[0]._texture.baseTexture,l=h.alphaMode>0;this.state.blendMode=xr(t.blendMode,l),n.state.set(this.state);const c=n.gl,u=t.worldTransform.copyTo(this.tempMatrix);u.prepend(n.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=u.toArray(!0),this.shader.uniforms.uColor=j.shared.setValue(t.tintRgb).premultiply(t.worldAlpha,l).toArray(this.shader.uniforms.uColor),this.shader.uniforms.uSampler=h,this.renderer.shader.bind(this.shader);let d=!1;for(let f=0,p=0;fr&&(_=r),p>=a.length&&a.push(this._generateOneMoreBuffer(t));const g=a[p];g.uploadDynamic(i,f,_);const v=t._bufferUpdateIDs[p]||0;d=d||g._updateID0);r[o]=l,r[o+n]=l,r[o+n*2]=l,r[o+n*3]=l,o+=n*4}}destroy(){super.destroy(),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null}}Ln.extension={name:"particle",type:M.RendererPlugin},U.add(Ln);var zi=(e=>(e[e.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",e[e.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL",e))(zi||{});const js={willReadFrequently:!0},L=class{static get experimentalLetterSpacingSupported(){let e=L._experimentalLetterSpacingSupported;if(e!==void 0){const t=P.ADAPTER.getCanvasRenderingContext2D().prototype;e=L._experimentalLetterSpacingSupported="letterSpacing"in t||"textLetterSpacing"in t}return e}constructor(e,t,i,s,r,n,o,a,h){this.text=e,this.style=t,this.width=i,this.height=s,this.lines=r,this.lineWidths=n,this.lineHeight=o,this.maxLineWidth=a,this.fontProperties=h}static measureText(e,t,i,s=L._canvas){i=i==null?t.wordWrap:i;const r=t.toFontString(),n=L.measureFont(r);n.fontSize===0&&(n.fontSize=t.fontSize,n.ascent=t.fontSize);const o=s.getContext("2d",js);o.font=r;const h=(i?L.wordWrap(e,t,s):e).split(/(?:\\r\\n|\\r|\\n)/),l=new Array(h.length);let c=0;for(let p=0;p0&&(s?r-=t:r+=(L.graphemeSegmenter(e).length-1)*t),r}static wordWrap(e,t,i=L._canvas){const s=i.getContext("2d",js);let r=0,n="",o="";const a=Object.create(null),{letterSpacing:h,whiteSpace:l}=t,c=L.collapseSpaces(l),u=L.collapseNewlines(l);let d=!c;const f=t.wordWrapWidth+h,p=L.tokenize(e);for(let _=0;_f)if(n!==""&&(o+=L.addLine(n),n="",r=0),L.canBreakWords(g,t.breakWords)){const b=L.wordWrapSplit(g);for(let y=0;yf&&(o+=L.addLine(n),d=!1,n="",r=0),n+=x,r+=R}}else{n.length>0&&(o+=L.addLine(n),n="",r=0);const b=_===p.length-1;o+=L.addLine(g,!b),d=!1,n="",r=0}else v+r>f&&(d=!1,o+=L.addLine(n),n="",r=0),(n.length>0||!L.isBreakingSpace(g)||d)&&(n+=g,r+=v)}return o+=L.addLine(n,!1),o}static addLine(e,t=!0){return e=L.trimRight(e),e=t?`${e}\n`:e,e}static getFromCache(e,t,i,s){let r=i[e];return typeof r!="number"&&(r=L._measureText(e,t,s)+t,i[e]=r),r}static collapseSpaces(e){return e==="normal"||e==="pre-line"}static collapseNewlines(e){return e==="normal"}static trimRight(e){if(typeof e!="string")return"";for(let t=e.length-1;t>=0;t--){const i=e[t];if(!L.isBreakingSpace(i))break;e=e.slice(0,-1)}return e}static isNewline(e){return typeof e!="string"?!1:L._newlines.includes(e.charCodeAt(0))}static isBreakingSpace(e,t){return typeof e!="string"?!1:L._breakingSpaces.includes(e.charCodeAt(0))}static tokenize(e){const t=[];let i="";if(typeof e!="string")return t;for(let s=0;so;--u){for(let p=0;p{if(typeof(Intl==null?void 0:Intl.Segmenter)=="function"){const e=new Intl.Segmenter;return t=>[...e.segment(t)].map(i=>i.segment)}return e=>[...e]})(),yt.experimentalLetterSpacing=!1,yt._fonts={},yt._newlines=[10,13],yt._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];const wd=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],Wi=class{constructor(e){this.styleID=0,this.reset(),Un(this,e,e)}clone(){const e={};return Un(e,this,Wi.defaultStyle),new Wi(e)}reset(){Un(this,Wi.defaultStyle,Wi.defaultStyle)}get align(){return this._align}set align(e){this._align!==e&&(this._align=e,this.styleID++)}get breakWords(){return this._breakWords}set breakWords(e){this._breakWords!==e&&(this._breakWords=e,this.styleID++)}get dropShadow(){return this._dropShadow}set dropShadow(e){this._dropShadow!==e&&(this._dropShadow=e,this.styleID++)}get dropShadowAlpha(){return this._dropShadowAlpha}set dropShadowAlpha(e){this._dropShadowAlpha!==e&&(this._dropShadowAlpha=e,this.styleID++)}get dropShadowAngle(){return this._dropShadowAngle}set dropShadowAngle(e){this._dropShadowAngle!==e&&(this._dropShadowAngle=e,this.styleID++)}get dropShadowBlur(){return this._dropShadowBlur}set dropShadowBlur(e){this._dropShadowBlur!==e&&(this._dropShadowBlur=e,this.styleID++)}get dropShadowColor(){return this._dropShadowColor}set dropShadowColor(e){const t=On(e);this._dropShadowColor!==t&&(this._dropShadowColor=t,this.styleID++)}get dropShadowDistance(){return this._dropShadowDistance}set dropShadowDistance(e){this._dropShadowDistance!==e&&(this._dropShadowDistance=e,this.styleID++)}get fill(){return this._fill}set fill(e){const t=On(e);this._fill!==t&&(this._fill=t,this.styleID++)}get fillGradientType(){return this._fillGradientType}set fillGradientType(e){this._fillGradientType!==e&&(this._fillGradientType=e,this.styleID++)}get fillGradientStops(){return this._fillGradientStops}set fillGradientStops(e){Sd(this._fillGradientStops,e)||(this._fillGradientStops=e,this.styleID++)}get fontFamily(){return this._fontFamily}set fontFamily(e){this.fontFamily!==e&&(this._fontFamily=e,this.styleID++)}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!==e&&(this._fontSize=e,this.styleID++)}get fontStyle(){return this._fontStyle}set fontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.styleID++)}get fontVariant(){return this._fontVariant}set fontVariant(e){this._fontVariant!==e&&(this._fontVariant=e,this.styleID++)}get fontWeight(){return this._fontWeight}set fontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.styleID++)}get letterSpacing(){return this._letterSpacing}set letterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.styleID++)}get lineHeight(){return this._lineHeight}set lineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.styleID++)}get leading(){return this._leading}set leading(e){this._leading!==e&&(this._leading=e,this.styleID++)}get lineJoin(){return this._lineJoin}set lineJoin(e){this._lineJoin!==e&&(this._lineJoin=e,this.styleID++)}get miterLimit(){return this._miterLimit}set miterLimit(e){this._miterLimit!==e&&(this._miterLimit=e,this.styleID++)}get padding(){return this._padding}set padding(e){this._padding!==e&&(this._padding=e,this.styleID++)}get stroke(){return this._stroke}set stroke(e){const t=On(e);this._stroke!==t&&(this._stroke=t,this.styleID++)}get strokeThickness(){return this._strokeThickness}set strokeThickness(e){this._strokeThickness!==e&&(this._strokeThickness=e,this.styleID++)}get textBaseline(){return this._textBaseline}set textBaseline(e){this._textBaseline!==e&&(this._textBaseline=e,this.styleID++)}get trim(){return this._trim}set trim(e){this._trim!==e&&(this._trim=e,this.styleID++)}get whiteSpace(){return this._whiteSpace}set whiteSpace(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.styleID++)}get wordWrap(){return this._wordWrap}set wordWrap(e){this._wordWrap!==e&&(this._wordWrap=e,this.styleID++)}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.styleID++)}toFontString(){const e=typeof this.fontSize=="number"?`${this.fontSize}px`:this.fontSize;let t=this.fontFamily;Array.isArray(this.fontFamily)||(t=this.fontFamily.split(","));for(let i=t.length-1;i>=0;i--){let s=t[i].trim();!/([\\"\\\'])[^\\\'\\"]+\\1/.test(s)&&!wd.includes(s)&&(s=`"${s}"`),t[i]=s}return`${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${e} ${t.join(",")}`}};let ae=Wi;ae.defaultStyle={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:zi.LINEAR_VERTICAL,fillGradientStops:[],fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,lineJoin:"miter",miterLimit:10,padding:0,stroke:"black",strokeThickness:0,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};function On(e){const t=j.shared;return Array.isArray(e)?e.map(i=>t.setValue(i).toHex()):t.setValue(e).toHex()}function Sd(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let i=0;i0&&f>p&&(_=(p+f)/2);const g=p+u,v=i.lineHeight*(d+1);let b=g;d+10}}function Rd(e,t){var s;let i=!1;if((s=e==null?void 0:e._textures)!=null&&s.length){for(let r=0;r{!this.queue||this.prepareItems()},this.registerFindHook(Bd),this.registerFindHook(Dd),this.registerFindHook(Rd),this.registerFindHook(Cd),this.registerFindHook(Id),this.registerUploadHook(Pd),this.registerUploadHook(Md)}upload(e){return new Promise(t=>{e&&this.add(e),this.queue.length?(this.completes.push(t),this.ticking||(this.ticking=!0,lt.system.addOnce(this.tick,this,ge.UTILITY))):t()})}tick(){setTimeout(this.delayedTick,0)}prepareItems(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){const e=this.queue[0];let t=!1;if(e&&!e._destroyed){for(let i=0,s=this.uploadHooks.length;i=0;t--)this.add(e.children[t]);return this}destroy(){this.ticking&<.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null}};let $i=Mh;$i.uploadsPerFrame=4,Object.defineProperties(P,{UPLOADS_PER_FRAME:{get(){return $i.uploadsPerFrame},set(e){z("7.1.0","settings.UPLOADS_PER_FRAME is deprecated, use prepare.BasePrepare.uploadsPerFrame"),$i.uploadsPerFrame=e}}});function Bh(e,t){return t instanceof V?(t._glTextures[e.CONTEXT_UID]||e.texture.bind(t),!0):!1}function Fd(e,t){if(!(t instanceof Xi))return!1;const{geometry:i}=t;t.finishPoly(),i.updateBatches();const{batches:s}=i;for(let r=0;r=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*n,this._currentTime+=n;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=i;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):s!==this.currentFrame&&(this.loop&&this.onLoop&&(this.animationSpeed>0&&this.currentFrames)&&this.onLoop(),this.updateTexture())}updateTexture(){const t=this.currentFrame;this._previousFrame!==t&&(this._previousFrame=t,this._texture=this._textures[t],this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this.uvs=this._texture._uvs.uvsFloat32,this.updateAnchor&&this._anchor.copyFrom(this._texture.defaultAnchor),this.onFrameChange&&this.onFrameChange(this.currentFrame))}destroy(t){this.stop(),super.destroy(t),this.onComplete=null,this.onFrameChange=null,this.onLoop=null}static fromFrames(t){const i=[];for(let s=0;sthis.totalFrames-1)throw new Error(`[AnimatedSprite]: Invalid frame index value ${t}, expected to be between 0 and totalFrames ${this.totalFrames}.`);const i=this.currentFrame;this._currentTime=t,i!==this.currentFrame&&this.updateTexture()}get playing(){return this._playing}get autoUpdate(){return this._autoUpdate}set autoUpdate(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?(lt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&(lt.shared.add(this.update,this),this._isConnectedToTicker=!0))}}const ji=new Y;class Hn extends ye{constructor(t,i=100,s=100){super(t),this.tileTransform=new vi,this._width=i,this._height=s,this.uvMatrix=this.texture.uvMatrix||new Rs(t),this.pluginName="tilingSprite",this.uvRespectAnchor=!1}get clampMargin(){return this.uvMatrix.clampMargin}set clampMargin(t){this.uvMatrix.clampMargin=t,this.uvMatrix.update(!0)}get tileScale(){return this.tileTransform.scale}set tileScale(t){this.tileTransform.scale.copyFrom(t)}get tilePosition(){return this.tileTransform.position}set tilePosition(t){this.tileTransform.position.copyFrom(t)}_onTextureUpdate(){this.uvMatrix&&(this.uvMatrix.texture=this._texture),this._cachedTint=16777215}_render(t){const i=this._texture;!i||!i.valid||(this.tileTransform.updateLocalTransform(),this.uvMatrix.update(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this))}_calculateBounds(){const t=this._width*-this._anchor._x,i=this._height*-this._anchor._y,s=this._width*(1-this._anchor._x),r=this._height*(1-this._anchor._y);this._bounds.addFrame(this.transform,t,i,s,r)}getLocalBounds(t){return this.children.length===0?(this._bounds.minX=this._width*-this._anchor._x,this._bounds.minY=this._height*-this._anchor._y,this._bounds.maxX=this._width*(1-this._anchor._x),this._bounds.maxY=this._height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new $),t=this._localBoundsRect),this._bounds.getRectangle(t)):super.getLocalBounds.call(this,t)}containsPoint(t){this.worldTransform.applyInverse(t,ji);const i=this._width,s=this._height,r=-i*this.anchor._x;if(ji.x>=r&&ji.x=n&&ji.y1?Kt.from(Ud,Od,i):Kt.from(Dh,kd,i)}render(t){const i=this.renderer,s=this.quad;let r=s.vertices;r[0]=r[6]=t._width*-t.anchor.x,r[1]=r[3]=t._height*-t.anchor.y,r[2]=r[4]=t._width*(1-t.anchor.x),r[5]=r[7]=t._height*(1-t.anchor.y);const n=t.uvRespectAnchor?t.anchor.x:0,o=t.uvRespectAnchor?t.anchor.y:0;r=s.uvs,r[0]=r[6]=-n,r[1]=r[3]=-o,r[2]=r[4]=1-n,r[5]=r[7]=1-o,s.invalidate();const a=t._texture,h=a.baseTexture,l=h.alphaMode>0,c=t.tileTransform.localTransform,u=t.uvMatrix;let d=h.isPowerOfTwo&&a.frame.width===h.width&&a.frame.height===h.height;d&&(h._glTextures[i.CONTEXT_UID]?d=h.wrapMode!==ie.CLAMP:h.wrapMode===ie.CLAMP&&(h.wrapMode=ie.REPEAT));const f=d?this.simpleShader:this.shader,p=a.width,_=a.height,g=t._width,v=t._height;Ks.set(c.a*p/g,c.b*p/v,c.c*_/g,c.d*_/v,c.tx/g,c.ty/v),Ks.invert(),d?Ks.prepend(u.mapCoord):(f.uniforms.uMapCoord=u.mapCoord.toArray(!0),f.uniforms.uClampFrame=u.uClampFrame,f.uniforms.uClampOffset=u.uClampOffset),f.uniforms.uTransform=Ks.toArray(!0),f.uniforms.uColor=j.shared.setValue(t.tint).premultiply(t.worldAlpha,l).toArray(f.uniforms.uColor),f.uniforms.translationMatrix=t.transform.worldTransform.toArray(!0),f.uniforms.uSampler=a,i.shader.bind(f),i.geometry.bind(s),this.state.blendMode=xr(t.blendMode,l),i.state.set(this.state),i.geometry.draw(this.renderer.gl.TRIANGLES,6,0)}}Xn.extension={name:"tilingSprite",type:M.RendererPlugin},U.add(Xn);const Yi=class{constructor(e,t,i=null){this.linkedSheets=[],this._texture=e instanceof B?e:null,this.baseTexture=e instanceof V?e:this._texture.baseTexture,this.textures={},this.animations={},this.data=t;const s=this.baseTexture.resource;this.resolution=this._updateResolution(i||(s?s.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}_updateResolution(e=null){const{scale:t}=this.data.meta;let i=fe(e,null);return i===null&&(i=parseFloat(t!=null?t:"1")),i!==1&&this.baseTexture.setResolution(i),i}parse(){return new Promise(e=>{this._callback=e,this._batchIndex=0,this._frameKeys.length<=Yi.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}_processFrames(e){let t=e;const i=Yi.BATCH_SIZE;for(;t-e{this._batchIndex*Yi.BATCH_SIZE{s[r]=t}),Object.keys(t.textures).forEach(r=>{s[r]=t.textures[r]}),!i){const r=Tt.dirname(e[0]);t.linkedSheets.forEach((n,o)=>{const a=Fh([`${r}/${t.data.meta.related_multi_packs[o]}`],n,!0);Object.assign(s,a)})}return s}const Nh={extension:M.Asset,cache:{test:e=>e instanceof Zs,getCacheableAssets:(e,t)=>Fh(e,t,!1)},resolver:{test:e=>{const i=e.split("?")[0].split("."),s=i.pop(),r=i.pop();return s==="json"&&Hd.includes(r)},parse:e=>{var i,s;const t=e.split(".");return{resolution:parseFloat((s=(i=P.RETINA_PREFIX.exec(e))==null?void 0:i[1])!=null?s:"1"),format:t[t.length-2],src:e}}},loader:{name:"spritesheetLoader",extension:{type:M.LoadParser,priority:Jt.Normal},async testParse(e,t){return Tt.extname(t.src).toLowerCase()===".json"&&!!e.frames},async parse(e,t,i){var l,c;let s=Tt.dirname(t.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");let r=s+e.meta.image;r=Os(r,t.src);const o=(await i.load([r]))[r],a=new Zs(o.baseTexture,e,t.src);await a.parse();const h=(l=e==null?void 0:e.meta)==null?void 0:l.related_multi_packs;if(Array.isArray(h)){const u=[];for(const f of h){if(typeof f!="string")continue;let p=s+f;(c=t.data)!=null&&c.ignoreMultiPack||(p=Os(p,t.src),u.push(i.load({src:p,data:{ignoreMultiPack:!0}})))}const d=await Promise.all(u);a.linkedSheets=d,d.forEach(f=>{f.linkedSheets=[a].concat(a.linkedSheets.filter(p=>p!==f))})}return a},unload(e){e.destroy(!0)}}};U.add(Nh);class qi{constructor(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}}class Ki{static test(t){return typeof t=="string"&&t.startsWith("info face=")}static parse(t){const i=t.match(/^[a-z]+\\s+.+$/gm),s={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(const n in i){const o=i[n].match(/^[a-z]+/gm)[0],a=i[n].match(/[a-zA-Z]+=([^\\s"\']+|"([^"]*)")/gm),h={};for(const l in a){const c=a[l].split("="),u=c[0],d=c[1].replace(/"/gm,""),f=parseFloat(d),p=isNaN(f)?d:f;h[u]=p}s[o].push(h)}const r=new qi;return s.info.forEach(n=>r.info.push({face:n.face,size:parseInt(n.size,10)})),s.common.forEach(n=>r.common.push({lineHeight:parseInt(n.lineHeight,10)})),s.page.forEach(n=>r.page.push({id:parseInt(n.id,10),file:n.file})),s.char.forEach(n=>r.char.push({id:parseInt(n.id,10),page:parseInt(n.page,10),x:parseInt(n.x,10),y:parseInt(n.y,10),width:parseInt(n.width,10),height:parseInt(n.height,10),xoffset:parseInt(n.xoffset,10),yoffset:parseInt(n.yoffset,10),xadvance:parseInt(n.xadvance,10)})),s.kerning.forEach(n=>r.kerning.push({first:parseInt(n.first,10),second:parseInt(n.second,10),amount:parseInt(n.amount,10)})),s.distanceField.forEach(n=>r.distanceField.push({distanceRange:parseInt(n.distanceRange,10),fieldType:n.fieldType})),r}}class Js{static test(t){const i=t;return"getElementsByTagName"in i&&i.getElementsByTagName("page").length&&i.getElementsByTagName("info")[0].getAttribute("face")!==null}static parse(t){const i=new qi,s=t.getElementsByTagName("info"),r=t.getElementsByTagName("common"),n=t.getElementsByTagName("page"),o=t.getElementsByTagName("char"),a=t.getElementsByTagName("kerning"),h=t.getElementsByTagName("distanceField");for(let l=0;l")?Js.test(P.ADAPTER.parseXML(t)):!1}static parse(t){return Js.parse(P.ADAPTER.parseXML(t))}}const Vn=[Ki,Js,Qs];function Lh(e){for(let t=0;t=a-I*n){if(p===0)throw new Error(`[BitmapFont] textureHeight ${a}px is too small (fontFamily: \'${c.fontFamily}\', fontSize: ${c.fontSize}px, char: \'${E}\')`);--R,_=null,g=null,v=null,p=0,f=0,b=0;continue}if(b=Math.max(I+O.fontProperties.descent,b),N*n+f>=u){if(f===0)throw new Error(`[BitmapFont] textureWidth ${o}px is too small (fontFamily: \'${c.fontFamily}\', fontSize: ${c.fontSize}px, char: \'${E}\')`);--R,p+=b*n,p=Math.ceil(p),f=0,b=0;continue}Vd(_,g,O,f,p,n,c);const w=tr(O.text);d.char.push({id:w,page:x.length-1,x:f/n,y:p/n,width:N,height:I,xoffset:0,yoffset:0,xadvance:H-(c.dropShadow?c.dropShadowDistance:0)-(c.stroke?c.strokeThickness:0)}),f+=(N+2*r)*n,f=Math.ceil(f)}for(let R=0,E=l.length;R 0.99) {\\r\n alpha = 1.0;\\r\n }\\r\n\\r\n // Gamma correction for coverage-like alpha\\r\n float luma = dot(uColor.rgb, vec3(0.299, 0.587, 0.114));\\r\n float gamma = mix(1.0, 1.0 / 2.2, luma);\\r\n float coverage = pow(uColor.a * alpha, gamma); \\r\n\\r\n // NPM Textures, NPM outputs\\r\n gl_FragColor = vec4(uColor.rgb, coverage);\\r\n}\\r\n`,$d=`// Mesh material default fragment\\r\nattribute vec2 aVertexPosition;\\r\nattribute vec2 aTextureCoord;\\r\n\\r\nuniform mat3 projectionMatrix;\\r\nuniform mat3 translationMatrix;\\r\nuniform mat3 uTextureMatrix;\\r\n\\r\nvarying vec2 vTextureCoord;\\r\n\\r\nvoid main(void)\\r\n{\\r\n gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\r\n\\r\n vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy;\\r\n}\\r\n`;const Uh=[],kh=[],Gh=[],Hh=class extends Ct{constructor(e,t={}){super();const{align:i,tint:s,maxWidth:r,letterSpacing:n,fontName:o,fontSize:a}=Object.assign({},Hh.styleDefaults,t);if(!At.available[o])throw new Error(`Missing BitmapFont "${o}"`);this._activePagesMeshData=[],this._textWidth=0,this._textHeight=0,this._align=i,this._tintColor=new j(s),this._font=void 0,this._fontName=o,this._fontSize=a,this.text=e,this._maxWidth=r,this._maxLineHeight=0,this._letterSpacing=n,this._anchor=new me(()=>{this.dirty=!0},this,0,0),this._roundPixels=P.ROUND_PIXELS,this.dirty=!0,this._resolution=P.RESOLUTION,this._autoResolution=!0,this._textureCache={}}updateText(){var H;const e=At.available[this._fontName],t=this.fontSize,i=t/e.size,s=new Y,r=[],n=[],o=[],a=this._text.replace(/(?:\\r\\n|\\r)/g,`\n`)||" ",h=Oh(a),l=this._maxWidth*e.size/t,c=e.distanceFieldType==="none"?Uh:kh;let u=null,d=0,f=0,p=0,_=-1,g=0,v=0,b=0,y=0;for(let I=0;I0&&s.x>l&&(++v,Ie(r,1+_-v,1+I-_),I=_,_=-1,n.push(g),o.push(r.length>0?r[r.length-1].prevSpaces:0),f=Math.max(f,g),p++,s.x=0,s.y+=e.lineHeight,u=null,y=0)}const x=h[h.length-1];x!=="\\r"&&x!==`\n`&&(/(?:\\s)/.test(x)&&(d=g),n.push(d),f=Math.max(f,d),o.push(-1));const A=[];for(let I=0;I<=p;I++){let N=0;this._align==="right"?N=f-n[I]:this._align==="center"?N=(f-n[I])/2:this._align==="justify"&&(N=o[I]<0?0:(f-n[I])/o[I]),A.push(N)}const D=r.length,R={},E=[],O=this._activePagesMeshData;c.push(...O);for(let I=0;I6*w)||N.vertices.lengtht[r.mesh.texture.baseTexture.uid]).forEach(r=>{r.mesh.texture=B.EMPTY});for(const r in t)t[r].destroy(),delete t[r];this._font=null,this._tintColor=null,this._textureCache=null,super.destroy(e)}};let Xh=Hh;Xh.styleDefaults={align:"left",tint:16777215,maxWidth:0,letterSpacing:0};const jd=[".xml",".fnt"],Vh={extension:{type:M.LoadParser,priority:Jt.Normal},name:"loadBitmapFont",test(e){return jd.includes(Tt.extname(e).toLowerCase())},async testParse(e){return Ki.test(e)||Qs.test(e)},async parse(e,t,i){const s=Ki.test(e)?Ki.parse(e):Qs.parse(e),{src:r}=t,{page:n}=s,o=[];for(let l=0;la[l]);return At.install(s,h,!0)},async load(e,t){return(await P.ADAPTER.fetch(e)).text()},unload(e){e.destroy()}};U.add(Vh);const oi=class extends ae{constructor(){super(...arguments),this._fonts=[],this._overrides=[],this._stylesheet="",this.fontsDirty=!1}static from(e){return new oi(Object.keys(oi.defaultOptions).reduce((t,i)=>Qi(bt({},t),{[i]:e[i]}),{}))}cleanFonts(){this._fonts.length>0&&(this._fonts.forEach(e=>{URL.revokeObjectURL(e.src),e.refs--,e.refs===0&&(e.fontFace&&document.fonts.delete(e.fontFace),delete oi.availableFonts[e.originalUrl])}),this.fontFamily="Arial",this._fonts.length=0,this.styleID++,this.fontsDirty=!0)}loadFont(e,t={}){const{availableFonts:i}=oi;if(i[e]){const s=i[e];return this._fonts.push(s),s.refs++,this.styleID++,this.fontsDirty=!0,Promise.resolve()}return P.ADAPTER.fetch(e).then(s=>s.blob()).then(async s=>new Promise((r,n)=>{const o=URL.createObjectURL(s),a=new FileReader;a.onload=()=>r([o,a.result]),a.onerror=n,a.readAsDataURL(s)})).then(async([s,r])=>{const n=Object.assign({family:Tt.basename(e,Tt.extname(e)),weight:"normal",style:"normal",src:s,dataSrc:r,refs:1,originalUrl:e,fontFace:null},t);i[e]=n,this._fonts.push(n),this.styleID++;const o=new FontFace(n.family,`url(${n.src})`,{weight:n.weight,style:n.style});n.fontFace=o,await o.load(),document.fonts.add(o),await document.fonts.ready,this.styleID++,this.fontsDirty=!0})}addOverride(...e){const t=e.filter(i=>!this._overrides.includes(i));t.length>0&&(this._overrides.push(...t),this.styleID++)}removeOverride(...e){const t=e.filter(i=>this._overrides.includes(i));t.length>0&&(this._overrides=this._overrides.filter(i=>!t.includes(i)),this.styleID++)}toCSS(e){return[`transform: scale(${e})`,"transform-origin: top left","display: inline-block",`color: ${this.normalizeColor(this.fill)}`,`font-size: ${this.fontSize}px`,`font-family: ${this.fontFamily}`,`font-weight: ${this.fontWeight}`,`font-style: ${this.fontStyle}`,`font-variant: ${this.fontVariant}`,`letter-spacing: ${this.letterSpacing}px`,`text-align: ${this.align}`,`padding: ${this.padding}px`,`white-space: ${this.whiteSpace}`,...this.lineHeight?[`line-height: ${this.lineHeight}px`]:[],...this.wordWrap?[`word-wrap: ${this.breakWords?"break-all":"break-word"}`,`max-width: ${this.wordWrapWidth}px`]:[],...this.strokeThickness?[`-webkit-text-stroke-width: ${this.strokeThickness}px`,`-webkit-text-stroke-color: ${this.normalizeColor(this.stroke)}`,`text-stroke-width: ${this.strokeThickness}px`,`text-stroke-color: ${this.normalizeColor(this.stroke)}`,"paint-order: stroke"]:[],...this.dropShadow?[this.dropShadowToCSS()]:[],...this._overrides].join(";")}toGlobalCSS(){return this._fonts.reduce((e,t)=>`${e}\n @font-face {\n font-family: "${t.family}";\n src: url(\'${t.dataSrc}\');\n font-weight: ${t.weight};\n font-style: ${t.style}; \n }`,this._stylesheet)}get stylesheet(){return this._stylesheet}set stylesheet(e){this._stylesheet!==e&&(this._stylesheet=e,this.styleID++)}normalizeColor(e){return Array.isArray(e)&&(e=Mo(e)),typeof e=="number"?Po(e):e}dropShadowToCSS(){let e=this.normalizeColor(this.dropShadowColor);const t=this.dropShadowAlpha,i=Math.round(Math.cos(this.dropShadowAngle)*this.dropShadowDistance),s=Math.round(Math.sin(this.dropShadowAngle)*this.dropShadowDistance);e.startsWith("#")&&t<1&&(e+=(t*255|0).toString(16).padStart(2,"0"));const r=`${i}px ${s}px`;return this.dropShadowBlur>0?`text-shadow: ${r} ${this.dropShadowBlur}px ${e}`:`text-shadow: ${r} ${e}`}reset(){Object.assign(this,oi.defaultOptions)}onBeforeDraw(){const{fontsDirty:e}=this;return this.fontsDirty=!1,this.isSafari&&this._fonts.length>0&&e?new Promise(t=>setTimeout(t,100)):Promise.resolve()}get isSafari(){const{userAgent:e}=P.ADAPTER.getNavigator();return/^((?!chrome|android).)*safari/i.test(e)}set fillGradientStops(e){console.warn("[HTMLTextStyle] fillGradientStops is not supported by HTMLText")}get fillGradientStops(){return super.fillGradientStops}set fillGradientType(e){console.warn("[HTMLTextStyle] fillGradientType is not supported by HTMLText")}get fillGradientType(){return super.fillGradientType}set miterLimit(e){console.warn("[HTMLTextStyle] miterLimit is not supported by HTMLText")}get miterLimit(){return super.miterLimit}set trim(e){console.warn("[HTMLTextStyle] trim is not supported by HTMLText")}get trim(){return super.trim}set textBaseline(e){console.warn("[HTMLTextStyle] textBaseline is not supported by HTMLText")}get textBaseline(){return super.textBaseline}set leading(e){console.warn("[HTMLTextStyle] leading is not supported by HTMLText")}get leading(){return super.leading}set lineJoin(e){console.warn("[HTMLTextStyle] lineJoin is not supported by HTMLText")}get lineJoin(){return super.lineJoin}};let ai=oi;ai.availableFonts={},ai.defaultOptions={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",letterSpacing:0,lineHeight:0,padding:0,stroke:"black",strokeThickness:0,whiteSpace:"normal",wordWrap:!1,wordWrapWidth:100};const hi=class extends ye{constructor(e="",t={}){var c;super(B.EMPTY),this._text=null,this._style=null,this._autoResolution=!0,this._loading=!1,this.localStyleID=-1,this.dirty=!1,this.ownsStyle=!1;const i=new Image,s=B.from(i,{scaleMode:P.SCALE_MODE,resourceOptions:{autoLoad:!1}});s.orig=new $,s.trim=new $,this.texture=s;const r="http://www.w3.org/2000/svg",n="http://www.w3.org/1999/xhtml",o=document.createElementNS(r,"svg"),a=document.createElementNS(r,"foreignObject"),h=document.createElementNS(n,"div"),l=document.createElementNS(n,"style");a.setAttribute("width","10000"),a.setAttribute("height","10000"),a.style.overflow="hidden",o.appendChild(a),this.maxWidth=hi.defaultMaxWidth,this.maxHeight=hi.defaultMaxHeight,this._domElement=h,this._styleElement=l,this._svgRoot=o,this._foreignObject=a,this._foreignObject.appendChild(l),this._foreignObject.appendChild(h),this._image=i,this._loadImage=new Image,this._autoResolution=hi.defaultAutoResolution,this._resolution=(c=hi.defaultResolution)!=null?c:P.RESOLUTION,this.text=e,this.style=t}measureText(e){var a,h;const{text:t,style:i,resolution:s}=Object.assign({text:this._text,style:this._style,resolution:this._resolution},e);Object.assign(this._domElement,{innerHTML:t,style:i.toCSS(s)}),this._styleElement.textContent=i.toGlobalCSS(),document.body.appendChild(this._svgRoot);const r=this._domElement.getBoundingClientRect();this._svgRoot.remove();const n=Math.min(this.maxWidth,Math.ceil(r.width)),o=Math.min(this.maxHeight,Math.ceil(r.height));return this._svgRoot.setAttribute("width",n.toString()),this._svgRoot.setAttribute("height",o.toString()),t!==this._text&&(this._domElement.innerHTML=this._text),i!==this._style&&(Object.assign(this._domElement,{style:(a=this._style)==null?void 0:a.toCSS(s)}),this._styleElement.textContent=(h=this._style)==null?void 0:h.toGlobalCSS()),{width:n+i.padding*2,height:o+i.padding*2}}async updateText(e=!0){const{style:t,_image:i,_loadImage:s}=this;if(this.localStyleID!==t.styleID&&(this.dirty=!0,this.localStyleID=t.styleID),!this.dirty&&e)return;const{width:r,height:n}=this.measureText();i.width=s.width=Math.ceil(Math.max(1,r)),i.height=s.height=Math.ceil(Math.max(1,n)),this._loading||(this._loading=!0,await new Promise(o=>{s.onload=async()=>{await t.onBeforeDraw(),this._loading=!1,i.src=s.src,s.onload=null,s.src="",this.updateTexture(),o()};const a=new XMLSerializer().serializeToString(this._svgRoot);s.src=`data:image/svg+xml;charset=utf8,${encodeURIComponent(a)}`}))}get source(){return this._image}updateTexture(){const{style:e,texture:t,_image:i,resolution:s}=this,{padding:r}=e,{baseTexture:n}=t;t.trim.width=t._frame.width=i.width/s,t.trim.height=t._frame.height=i.height/s,t.trim.x=-r,t.trim.y=-r,t.orig.width=t._frame.width-r*2,t.orig.height=t._frame.height-r*2,this._onTextureUpdate(),n.setRealSize(i.width,i.height,s),this.dirty=!1}_render(e){this._autoResolution&&this._resolution!==e.resolution&&(this._resolution=e.resolution,this.dirty=!0),this.updateText(!0),super._render(e)}_renderCanvas(e){this._autoResolution&&this._resolution!==e.resolution&&(this._resolution=e.resolution,this.dirty=!0),this.updateText(!0),super._renderCanvas(e)}getLocalBounds(e){return this.updateText(!0),super.getLocalBounds(e)}_calculateBounds(){this.updateText(!0),this.calculateVertices(),this._bounds.addQuad(this.vertexData)}_onStyleChange(){this.dirty=!0}destroy(e){var i,s,r,n,o;typeof e=="boolean"&&(e={children:e}),e=Object.assign({},hi.defaultDestroyOptions,e),super.destroy(e);const t=null;this.ownsStyle&&((i=this._style)==null||i.cleanFonts()),this._style=t,(s=this._svgRoot)==null||s.remove(),this._svgRoot=t,(r=this._domElement)==null||r.remove(),this._domElement=t,(n=this._foreignObject)==null||n.remove(),this._foreignObject=t,(o=this._styleElement)==null||o.remove(),this._styleElement=t,this._loadImage.src="",this._loadImage.onload=null,this._loadImage=t,this._image.src="",this._image=t}get width(){return this.updateText(!0),Math.abs(this.scale.x)*this._image.width/this.resolution}set width(e){this.updateText(!0);const t=de(this.scale.x)||1;this.scale.x=t*e/this._image.width/this.resolution,this._width=e}get height(){return this.updateText(!0),Math.abs(this.scale.y)*this._image.height/this.resolution}set height(e){this.updateText(!0);const t=de(this.scale.y)||1;this.scale.y=t*e/this._image.height/this.resolution,this._height=e}get style(){return this._style}set style(e){this._style!==e&&(e=e||{},e instanceof ai?(this.ownsStyle=!1,this._style=e):e instanceof ae?(console.warn("[HTMLText] Cloning TextStyle, if this is not what you want, use HTMLTextStyle"),this.ownsStyle=!0,this._style=ai.from(e)):(this.ownsStyle=!0,this._style=new ai(e)),this.localStyleID=-1,this.dirty=!0)}get text(){return this._text}set text(e){e=String(e===""||e===null||e===void 0?" ":e),e=this.sanitiseText(e),this._text!==e&&(this._text=e,this.dirty=!0)}get resolution(){return this._resolution}set resolution(e){this._autoResolution=!1,this._resolution!==e&&(this._resolution=e,this.dirty=!0)}sanitiseText(e){return e.replace(/

    /gi,"
    ").replace(/
    /gi,"
    ").replace(/ /gi," ")}};let Zi=hi;return Zi.defaultDestroyOptions={texture:!0,children:!1,baseTexture:!0},Zi.defaultMaxWidth=2024,Zi.defaultMaxHeight=2024,Zi.defaultAutoResolution=!0,m.ALPHA_MODES=Nt,m.AbstractMultiResource=dn,m.AccessibilityManager=vn,m.AlphaFilter=Pa,m.AnimatedSprite=qs,m.Application=bn,m.ArrayResource=Aa,m.Assets=Ni,m.AssetsClass=Ja,m.Attribute=gi,m.BLEND_MODES=G,m.BUFFER_BITS=Rt,m.BUFFER_TYPE=jt,m.BackgroundSystem=Ei,m.BaseImageResource=_e,m.BasePrepare=$i,m.BaseRenderTexture=Lr,m.BaseTexture=V,m.BatchDrawCall=ps,m.BatchGeometry=Br,m.BatchRenderer=Gt,m.BatchShaderGenerator=ra,m.BatchSystem=Nr,m.BatchTextureArray=Es,m.BitmapFont=At,m.BitmapFontData=qi,m.BitmapText=Xh,m.BlobResource=ah,m.BlurFilter=Ma,m.BlurFilterPass=Fs,m.Bounds=Ii,m.BrowserAdapter=$n,m.Buffer=ot,m.BufferResource=Ye,m.BufferSystem=ln,m.CLEAR_MODES=$t,m.COLOR_MASK_BITS=Wn,m.Cache=ii,m.CanvasResource=Ra,m.Circle=_s,m.Color=j,m.ColorMatrixFilter=Ns,m.CompressedTextureResource=we,m.Container=Ct,m.ContextSystem=wi,m.CountLimiter=Ph,m.CubeResource=fn,m.DEG_TO_RAD=Wo,m.DRAW_MODES=zt,m.DisplacementFilter=Ba,m.DisplayObject=st,m.ENV=et,m.Ellipse=gs,m.EventBoundary=Na,m.EventSystem=ti,m.ExtensionType=M,m.Extract=Cn,m.FORMATS=C,m.FORMATS_TO_COMPONENTS=uh,m.FXAAFilter=Da,m.FederatedDisplayObject=Oa,m.FederatedEvent=Qe,m.FederatedMouseEvent=Mi,m.FederatedPointerEvent=Xt,m.FederatedWheelEvent=ke,m.FillStyle=Hi,m.Filter=gt,m.FilterState=ha,m.FilterSystem=Xr,m.Framebuffer=ws,m.FramebufferSystem=Vr,m.GC_MODES=es,m.GLFramebuffer=la,m.GLProgram=_a,m.GLTexture=Ms,m.GRAPHICS_CURVES=dd,m.GenerateTextureSystem=Zr,m.Geometry=pe,m.GeometrySystem=Wr,m.Graphics=Xi,m.GraphicsData=Gi,m.GraphicsGeometry=Dn,m.HTMLText=Zi,m.HTMLTextStyle=ai,m.IGLUniformData=Mc,m.INSTALLED=fs,m.INTERNAL_FORMATS=It,m.INTERNAL_FORMAT_TO_BYTES_PER_PIXEL=Li,m.ImageBitmapResource=Ue,m.ImageResource=Or,m.LINE_CAP=Se,m.LINE_JOIN=Vt,m.LineStyle=zs,m.LoaderParserPriority=Jt,m.MASK_TYPES=ct,m.MIPMAP_MODES=Wt,m.MSAA_QUALITY=ht,m.MaskData=da,m.MaskSystem=$r,m.Matrix=tt,m.Mesh=He,m.MeshBatchUvs=Eh,m.MeshGeometry=Vi,m.MeshMaterial=ni,m.MultisampleSystem=hn,m.NineSlicePlane=yd,m.NoiseFilter=Fa,m.ObjectRenderer=bi,m.ObjectRendererSystem=cn,m.ObservablePoint=me,m.PI_2=yi,m.PRECISION=Pt,m.ParticleContainer=bd,m.ParticleRenderer=Ln,m.PlaneGeometry=Ah,m.PluginSystem=qr,m.Point=Y,m.Polygon=Pe,m.Prepare=Gn,m.Program=Ut,m.ProjectionSystem=Kr,m.Quad=aa,m.QuadUv=Gr,m.RAD_TO_DEG=zo,m.RENDERER_TYPE=pt,m.Rectangle=$,m.RenderTexture=be,m.RenderTexturePool=kr,m.RenderTextureSystem=Jr,m.Renderer=Oe,m.ResizePlugin=Tn,m.Resource=je,m.RopeGeometry=Rh,m.RoundedRectangle=ys,m.Runner=Bt,m.SAMPLER_TYPES=ts,m.SCALE_MODES=ee,m.SHAPES=_t,m.SVGResource=Je,m.ScissorSystem=jr,m.Shader=Kt,m.ShaderSystem=Qr,m.SimpleMesh=vd,m.SimplePlane=Ch,m.SimpleRope=xd,m.Sprite=ye,m.SpriteMaskFilter=ua,m.Spritesheet=Zs,m.StartupSystem=Ai,m.State=ne,m.StateSystem=en,m.StencilSystem=Yr,m.SystemManager=Ta,m.TARGETS=Re,m.TEXT_GRADIENT=zi,m.TYPES=k,m.TYPES_TO_BYTES_PER_COMPONENT=Rn,m.TYPES_TO_BYTES_PER_PIXEL=dh,m.TemporaryDisplayObject=Ca,m.Text=Ys,m.TextFormat=Ki,m.TextMetrics=yt,m.TextStyle=ae,m.Texture=B,m.TextureGCSystem=Ht,m.TextureMatrix=Rs,m.TextureSystem=sn,m.TextureUvs=Ur,m.Ticker=lt,m.TickerPlugin=on,m.TilingSprite=Hn,m.TilingSpriteRenderer=Xn,m.TimeLimiter=Ld,m.Transform=vi,m.TransformFeedback=Yc,m.TransformFeedbackSystem=rn,m.UPDATE_PRIORITY=ge,m.UniformGroup=kt,m.VERSION=qc,m.VideoResource=Ds,m.ViewSystem=Ri,m.ViewableBuffer=ds,m.WRAP_MODES=ie,m.XMLFormat=Js,m.XMLStringFormat=Qs,m.accessibleTarget=Ua,m.autoDetectFormat=Lh,m.autoDetectRenderer=wa,m.autoDetectResource=Mr,m.cacheTextureArray=Qa,m.checkDataUrl=ei,m.checkExtension=Ee,m.checkMaxIfStatementsInShader=Xo,m.convertToList=oe,m.copySearchParams=Os,m.createStringVariations=Va,m.createTexture=Di,m.createUBOElements=va,m.curves=Ae,m.defaultFilterVertex=an,m.defaultVertex=Sa,m.detectAvif=th,m.detectCompressedTextures=oh,m.detectDefaults=sh,m.detectWebp=eh,m.extensions=U,m.filters=_n,m.generateProgram=ga,m.generateUniformBufferSync=ba,m.getFontFamilyName=$a,m.getTestContext=Zo,m.getUBOData=xa,m.graphicsUtils=md,m.groupD8=it,m.isMobile=Yt,m.isSingleItem=Bi,m.loadBitmapFont=Vh,m.loadDDS=ph,m.loadImageBitmap=Ka,m.loadJson=za,m.loadKTX=mh,m.loadSVG=Za,m.loadTextures=Fi,m.loadTxt=Wa,m.loadWebFont=ja,m.parseDDS=lh,m.parseKTX=fh,m.resolveCompressedTextureUrl=_h,m.resolveTextureUrl=rh,m.settings=P,m.spritesheetAsset=Nh,m.uniformParsers=Ne,m.unsafeEvalSupported=sa,m.utils=tc,Object.defineProperty(m,"__esModule",{value:!0}),m}({});\n//# sourceMappingURL=pixi.min.js.map\n'; + +// assets/minisearch.txt.js +var minisearch_txt_default = `/** + * Minified by jsDelivr using Terser v5.19.2. + * Original file: /npm/minisearch@6.3.0/dist/umd/index.js + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).MiniSearch=e()}(this,(function(){"use strict";var t=function(){return t=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0&&i[i.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function i(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)u.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}"function"==typeof SuppressedError&&SuppressedError;var o,u="KEYS",a="VALUES",s="",l=function(){function t(t,e){var r=t._tree,n=Array.from(r.keys());this.set=t,this._type=e,this._path=n.length>0?[{node:r,keys:n}]:[]}return t.prototype.next=function(){var t=this.dive();return this.backtrack(),t},t.prototype.dive=function(){if(0===this._path.length)return{done:!0,value:void 0};var t=c(this._path),e=t.node,r=t.keys;if(c(r)===s)return{done:!1,value:this.result()};var n=e.get(c(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},t.prototype.backtrack=function(){if(0!==this._path.length){var t=c(this._path).keys;t.pop(),t.length>0||(this._path.pop(),this.backtrack())}},t.prototype.key=function(){return this.set._prefix+this._path.map((function(t){var e=t.keys;return c(e)})).filter((function(t){return t!==s})).join("")},t.prototype.value=function(){return c(this._path).node.get(s)},t.prototype.result=function(){switch(this._type){case a:return this.value();case u:return this.key();default:return[this.key(),this.value()]}},t.prototype[Symbol.iterator]=function(){return this},t}(),c=function(t){return t[t.length-1]},h=function(t,e,r,i,o,u,a,l){var c,d,f=u*a;try{t:for(var y=n(t.keys()),v=y.next();!v.done;v=y.next()){var p=v.value;if(p===s){var m=o[f-1];m<=r&&i.set(l,[t.get(p),m])}else{for(var _=u,g=0;gr)continue t}h(t.get(p),e,r,i,o,_,a,l+p)}}}catch(t){c={error:t}}finally{try{v&&!v.done&&(d=y.return)&&d.call(y)}finally{if(c)throw c.error}}},d=function(){function t(t,e){void 0===t&&(t=new Map),void 0===e&&(e=""),this._size=void 0,this._tree=t,this._prefix=e}return t.prototype.atPrefix=function(e){var r,o;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var u=i(f(this._tree,e.slice(this._prefix.length)),2),a=u[0],l=u[1];if(void 0===a){var c=i(g(l),2),h=c[0],d=c[1];try{for(var y=n(h.keys()),v=y.next();!v.done;v=y.next()){var p=v.value;if(p!==s&&p.startsWith(d)){var m=new Map;return m.set(p.slice(d.length),h.get(p)),new t(m,e)}}}catch(t){r={error:t}}finally{try{v&&!v.done&&(o=y.return)&&o.call(y)}finally{if(r)throw r.error}}}return new t(a,e)},t.prototype.clear=function(){this._size=void 0,this._tree.clear()},t.prototype.delete=function(t){return this._size=void 0,p(this._tree,t)},t.prototype.entries=function(){return new l(this,"ENTRIES")},t.prototype.forEach=function(t){var e,r;try{for(var o=n(this),u=o.next();!u.done;u=o.next()){var a=i(u.value,2);t(a[0],a[1],this)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.prototype.fuzzyGet=function(t,e){return function(t,e,r){var n=new Map;if(void 0===e)return n;for(var i=e.length+1,o=i+r,u=new Uint8Array(o*i).fill(r+1),a=0;a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new d,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(t){var e=this,r=this._idToShortId.get(t);if(null==r)throw new Error("MiniSearch: cannot discard document with ID ".concat(t,": it is not in the index"));this._idToShortId.delete(t),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach((function(t,n){e.removeFieldLength(r,n,e._documentCount,t)})),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(!1!==this._options.autoVacuum){var t=this._options.autoVacuum,e=t.minDirtFactor,r=t.minDirtCount,n=t.batchSize,i=t.batchWait;this.conditionalVacuum({batchSize:n,batchWait:i},{minDirtCount:r,minDirtFactor:e})}},o.prototype.discardAll=function(t){var e,r,i=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var o=n(t),u=o.next();!u.done;u=o.next()){var a=u.value;this.discard(a)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}}finally{this._options.autoVacuum=i}this.maybeAutoVacuum()},o.prototype.replace=function(t){var e=this._options,r=e.idField,n=(0,e.extractField)(t,r);this.discard(n),this.add(t)},o.prototype.vacuum=function(t){return void 0===t&&(t={}),this.conditionalVacuum(t)},o.prototype.conditionalVacuum=function(t,e){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&e,null!=this._enqueuedVacuum||(this._enqueuedVacuum=this._currentVacuum.then((function(){var e=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=I,r.performVacuuming(t,e)}))),this._enqueuedVacuum):!1===this.vacuumConditionsMet(e)?Promise.resolve():(this._currentVacuum=this.performVacuuming(t),this._currentVacuum)},o.prototype.performVacuuming=function(t,o){return e(this,void 0,void 0,(function(){var e,u,a,s,l,c,h,d,f,y,v,p,m,_,g,F,x,w,b,A,C,E,z,S,I;return r(this,(function(r){switch(r.label){case 0:if(e=this._dirtCount,!this.vacuumConditionsMet(o))return[3,10];u=t.batchSize||D.batchSize,a=t.batchWait||D.batchWait,s=1,r.label=1;case 1:r.trys.push([1,7,8,9]),l=n(this._index),c=l.next(),r.label=2;case 2:if(c.done)return[3,6];h=i(c.value,2),d=h[0],f=h[1];try{for(E=void 0,y=n(f),v=y.next();!v.done;v=y.next()){p=i(v.value,2),m=p[0],_=p[1];try{for(S=void 0,g=n(_),F=g.next();!F.done;F=g.next())x=i(F.value,1),w=x[0],this._documentIds.has(w)||(_.size<=1?f.delete(m):_.delete(w))}catch(t){S={error:t}}finally{try{F&&!F.done&&(I=g.return)&&I.call(g)}finally{if(S)throw S.error}}}}catch(t){E={error:t}}finally{try{v&&!v.done&&(z=y.return)&&z.call(y)}finally{if(E)throw E.error}}return 0===this._index.get(d).size&&this._index.delete(d),s%u!=0?[3,4]:[4,new Promise((function(t){return setTimeout(t,a)}))];case 3:r.sent(),r.label=4;case 4:s+=1,r.label=5;case 5:return c=l.next(),[3,2];case 6:return[3,9];case 7:return b=r.sent(),A={error:b},[3,9];case 8:try{c&&!c.done&&(C=l.return)&&C.call(l)}finally{if(A)throw A.error}return[7];case 9:this._dirtCount-=e,r.label=10;case 10:return[4,null];case 11:return r.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}}))}))},o.prototype.vacuumConditionsMet=function(t){if(null==t)return!0;var e=t.minDirtCount,r=t.minDirtFactor;return e=e||k.minDirtCount,r=r||k.minDirtFactor,this.dirtCount>=e&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return null!=this._currentVacuum},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(t){return this._idToShortId.has(t)},o.prototype.getStoredFields=function(t){var e=this._idToShortId.get(t);if(null!=e)return this._storedFields.get(e)},o.prototype.search=function(t,e){var r,u;void 0===e&&(e={});var a=this.executeQuery(t,e),s=[];try{for(var l=n(a),c=l.next();!c.done;c=l.next()){var h=i(c.value,2),d=h[0],f=h[1],y=f.score,v=f.terms,p=f.match,m=v.length||1,_={id:this._documentIds.get(d),score:y*m,terms:Object.keys(p),queryTerms:v,match:p};Object.assign(_,this._storedFields.get(d)),(null==e.filter||e.filter(_))&&s.push(_)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(u=l.return)&&u.call(l)}finally{if(r)throw r.error}}return t===o.wildcard&&null==e.boostDocument&&null==this._options.searchOptions.boostDocument||s.sort(V),s},o.prototype.autoSuggest=function(e,r){var o,u,a,s;void 0===r&&(r={}),r=t(t({},this._options.autoSuggestOptions),r);var l=new Map;try{for(var c=n(this.search(e,r)),h=c.next();!h.done;h=c.next()){var d=h.value,f=d.score,y=(x=d.terms).join(" ");null!=(g=l.get(y))?(g.score+=f,g.count+=1):l.set(y,{score:f,terms:x,count:1})}}catch(t){o={error:t}}finally{try{h&&!h.done&&(u=c.return)&&u.call(c)}finally{if(o)throw o.error}}var v=[];try{for(var p=n(l),m=p.next();!m.done;m=p.next()){var _=i(m.value,2),g=_[0],F=_[1],x=(f=F.score,F.terms),w=F.count;v.push({suggestion:g,terms:x,score:f/w})}}catch(t){a={error:t}}finally{try{m&&!m.done&&(s=p.return)&&s.call(p)}finally{if(a)throw a.error}}return v.sort(V),v},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(t,e){if(null==e)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(t),e)},o.getDefault=function(t){if(E.hasOwnProperty(t))return w(E,t);throw new Error('MiniSearch: unknown option "'.concat(t,'"'))},o.loadJS=function(t,e){var r,u,a,s,l,c,h=t.index,f=t.documentCount,y=t.nextId,v=t.documentIds,p=t.fieldIds,m=t.fieldLength,_=t.averageFieldLength,g=t.storedFields,F=t.dirtCount,x=t.serializationVersion;if(1!==x&&2!==x)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var w=new o(e);w._documentCount=f,w._nextId=y,w._documentIds=L(v),w._idToShortId=new Map,w._fieldIds=p,w._fieldLength=L(m),w._avgFieldLength=_,w._storedFields=L(g),w._dirtCount=F||0,w._index=new d;try{for(var b=n(w._documentIds),A=b.next();!A.done;A=b.next()){var C=i(A.value,2),E=C[0],z=C[1];w._idToShortId.set(z,E)}}catch(t){r={error:t}}finally{try{A&&!A.done&&(u=b.return)&&u.call(b)}finally{if(r)throw r.error}}try{for(var S=n(h),D=S.next();!D.done;D=S.next()){var I=i(D.value,2),k=I[0],M=I[1],O=new Map;try{for(var V=(l=void 0,n(Object.keys(M))),T=V.next();!T.done;T=V.next()){var j=T.value,B=M[j];1===x&&(B=B.ds),O.set(parseInt(j,10),L(B))}}catch(t){l={error:t}}finally{try{T&&!T.done&&(c=V.return)&&c.call(V)}finally{if(l)throw l.error}}w._index.set(k,O)}}catch(t){a={error:t}}finally{try{D&&!D.done&&(s=S.return)&&s.call(S)}finally{if(a)throw a.error}}return w},o.prototype.executeQuery=function(e,r){var n=this;if(void 0===r&&(r={}),e===o.wildcard)return this.executeWildcardQuery(r);if("string"!=typeof e){var i=t(t(t({},r),e),{queries:void 0}),u=e.queries.map((function(t){return n.executeQuery(t,i)}));return this.combineResults(u,i.combineWith)}var a=this._options,s=a.tokenize,l=a.processTerm,c=a.searchOptions,h=t(t({tokenize:s,processTerm:l},c),r),d=h.tokenize,f=h.processTerm,y=d(e).flatMap((function(t){return f(t)})).filter((function(t){return!!t})).map(C(h)).map((function(t){return n.executeQuerySpec(t,h)}));return this.combineResults(y,h.combineWith)},o.prototype.executeQuerySpec=function(e,r){var o,u,a,s,l,c,h=t(t({},this._options.searchOptions),r),d=(h.fields||this._options.fields).reduce((function(e,r){var n;return t(t({},e),((n={})[r]=w(h.boost,r)||1,n))}),{}),f=h.boostDocument,y=h.weights,v=h.maxFuzzy,p=h.bm25,m=t(t({},z.weights),y),_=m.fuzzy,g=m.prefix,F=this._index.get(e.term),x=this.termResults(e.term,e.term,1,F,d,f,p);if(e.prefix&&(l=this._index.atPrefix(e.term)),e.fuzzy){var b=!0===e.fuzzy?.2:e.fuzzy,A=b<1?Math.min(v,Math.round(e.term.length*b)):b;A&&(c=this._index.fuzzyGet(e.term,A))}if(l)try{for(var C=n(l),E=C.next();!E.done;E=C.next()){var S=i(E.value,2),D=S[0],I=S[1];if(V=D.length-e.term.length){null==c||c.delete(D);var k=g*D.length/(D.length+.3*V);this.termResults(e.term,D,k,I,d,f,p,x)}}}catch(t){o={error:t}}finally{try{E&&!E.done&&(u=C.return)&&u.call(C)}finally{if(o)throw o.error}}if(c)try{for(var M=n(c.keys()),O=M.next();!O.done;O=M.next()){D=O.value;var V,T=i(c.get(D),2),L=T[0];if(V=T[1]){k=_*D.length/(D.length+V);this.termResults(e.term,D,k,L,d,f,p,x)}}}catch(t){a={error:t}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(a)throw a.error}}return x},o.prototype.executeWildcardQuery=function(e){var r,o,u=new Map,a=t(t({},this._options.searchOptions),e);try{for(var s=n(this._documentIds),l=s.next();!l.done;l=s.next()){var c=i(l.value,2),h=c[0],d=c[1],f=a.boostDocument?a.boostDocument(d,"",this._storedFields.get(h)):1;u.set(h,{score:f,terms:[],match:{}})}}catch(t){r={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}return u},o.prototype.combineResults=function(t,e){if(void 0===e&&(e=F),0===t.length)return new Map;var r=e.toLowerCase();return t.reduce(b[r])||new Map},o.prototype.toJSON=function(){var t,e,r,o,u=[];try{for(var a=n(this._index),s=a.next();!s.done;s=a.next()){var l=i(s.value,2),c=l[0],h=l[1],d={};try{for(var f=(r=void 0,n(h)),y=f.next();!y.done;y=f.next()){var v=i(y.value,2),p=v[0],m=v[1];d[p]=Object.fromEntries(m)}}catch(t){r={error:t}}finally{try{y&&!y.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}u.push([c,d])}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:u,serializationVersion:2}},o.prototype.termResults=function(t,e,r,i,o,u,a,s){var l,c,h,d,f;if(void 0===s&&(s=new Map),null==i)return s;try{for(var y=n(Object.keys(o)),v=y.next();!v.done;v=y.next()){var p=v.value,m=o[p],_=this._fieldIds[p],g=i.get(_);if(null!=g){var F=g.size,x=this._avgFieldLength[_];try{for(var b=(h=void 0,n(g.keys())),C=b.next();!C.done;C=b.next()){var E=C.value;if(this._documentIds.has(E)){var z=u?u(this._documentIds.get(E),e,this._storedFields.get(E)):1;if(z){var S=g.get(E),D=this._fieldLength.get(E)[_],I=r*m*z*A(S,F,this._documentCount,D,x,a),k=s.get(E);if(k){k.score+=I,M(k.terms,t);var O=w(k.match,e);O?O.push(p):k.match[e]=[p]}else s.set(E,{score:I,terms:[t],match:(f={},f[e]=[p],f)})}}else this.removeTerm(_,E,e),F-=1}}catch(t){h={error:t}}finally{try{C&&!C.done&&(d=b.return)&&d.call(b)}finally{if(h)throw h.error}}}}}catch(t){l={error:t}}finally{try{v&&!v.done&&(c=y.return)&&c.call(y)}finally{if(l)throw l.error}}return s},o.prototype.addTerm=function(t,e,r){var n=this._index.fetch(r,T),i=n.get(t);if(null==i)(i=new Map).set(e,1),n.set(t,i);else{var o=i.get(e);i.set(e,(o||0)+1)}},o.prototype.removeTerm=function(t,e,r){if(this._index.has(r)){var n=this._index.fetch(r,T),i=n.get(t);null==i||null==i.get(e)?this.warnDocumentChanged(e,t,r):i.get(e)<=1?i.size<=1?n.delete(t):i.delete(e):i.set(e,i.get(e)-1),0===this._index.get(r).size&&this._index.delete(r)}else this.warnDocumentChanged(e,t,r)},o.prototype.warnDocumentChanged=function(t,e,r){var i,o;try{for(var u=n(Object.keys(this._fieldIds)),a=u.next();!a.done;a=u.next()){var s=a.value;if(this._fieldIds[s]===e)return void this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(t),' has changed before removal: term "').concat(r,'" was not present in field "').concat(s,'". Removing a document after it has changed can corrupt the index!'),"version_conflict")}}catch(t){i={error:t}}finally{try{a&&!a.done&&(o=u.return)&&o.call(u)}finally{if(i)throw i.error}}},o.prototype.addDocumentId=function(t){var e=this._nextId;return this._idToShortId.set(t,e),this._documentIds.set(e,t),this._documentCount+=1,this._nextId+=1,e},o.prototype.addFields=function(t){for(var e=0;e { + if (!checkbox.checked) { + checkbox.checked = true; + if (!this.checkedList.includes(key)) + this.checkedList.push(key); + } else { + checkbox.checked = false; + if (this.checkedList.includes(key)) + this.checkedList.remove(key); + } + onChange(checkbox.checked); + }); + checkbox.onclick = (evt) => { + checkbox.checked = !checkbox.checked; + }; + let label = item.createDiv({ cls: "flow-label" }); + label.setText(name); + return item; + } +}; + +// scripts/settings/export-modal.ts +var import_obsidian5 = require("obsidian"); + +// scripts/objects/file-picker.ts +var import_obsidian4 = require("obsidian"); + +// scripts/objects/file-tree.ts +var import_obsidian3 = require("obsidian"); + +// scripts/objects/tree.ts +var Tree = class { + constructor() { + this.children = []; + this.minCollapsableDepth = 1; + this.title = "Tree"; + this.class = "mod-tree-none"; + this.showNestingIndicator = true; + this.minDepth = 1; + this.generateWithItemsClosed = false; + this.makeLinksWebStyle = false; + this.renderMarkdownTitles = true; + this.container = void 0; + } + async buildTreeRecursive(tree, container, minDepth = 1, closeAllItems = false) { + tree.minCollapsableDepth = this.minCollapsableDepth; + let treeItem = await tree.generateItemHTML(container, closeAllItems); + if (!tree.childContainer) + return; + for (let item of tree.children) { + if (item.depth < minDepth) + continue; + await this.buildTreeRecursive(item, tree.childContainer, minDepth, closeAllItems); + } + } + async generateTree(container) { + for (let item of this.children) { + await this.buildTreeRecursive(item, container, this.minDepth, this.generateWithItemsClosed); + } + this.forAllChildren((child) => { + if (child.isCollapsed) + child.setCollapse(true, false); + }); + } + async generateTreeWithContainer(container) { + this.container = container; + let treeContainerEl = container.createDiv(); + let treeHeaderEl = container.createDiv(); + let sectionHeaderEl = container.createEl("span"); + let collapseAllEl = container.createEl("button"); + let treeScrollAreaEl = container.createDiv(); + treeContainerEl.classList.add("tree-container", "mod-root", "nav-folder", "tree-item", this.class); + treeHeaderEl.classList.add("tree-header"); + sectionHeaderEl.classList.add("sidebar-section-header"); + collapseAllEl.classList.add("clickable-icon", "collapse-tree-button"); + collapseAllEl.setAttribute("aria-label", "Collapse All"); + collapseAllEl.innerHTML = ""; + treeScrollAreaEl.classList.add("tree-scroll-area", "tree-item-children", "nav-folder-children"); + let invisFirst = treeScrollAreaEl.createDiv("tree-item mod-tree-folder nav-folder mod-collapsible is-collapsed"); + invisFirst.style.display = "none"; + if (this.generateWithItemsClosed) + collapseAllEl.classList.add("is-collapsed"); + if (this.showNestingIndicator) + treeContainerEl.classList.add("mod-nav-indicator"); + treeContainerEl.setAttribute("data-depth", "0"); + sectionHeaderEl.innerText = this.title; + treeContainerEl.appendChild(treeHeaderEl); + treeContainerEl.appendChild(treeScrollAreaEl); + treeHeaderEl.appendChild(sectionHeaderEl); + treeHeaderEl.appendChild(collapseAllEl); + await this.generateTree(treeScrollAreaEl); + } + sortAlphabetically(reverse = false) { + this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true })); + for (let child of this.children) { + child.sortAlphabetically(); + } + } + forAllChildren(func, recursive = true) { + for (let child of this.children) { + func(child); + if (recursive) + child.forAllChildren(func); + } + } +}; +var TreeItem = class { + constructor(tree, parent, depth) { + this.children = []; + this.depth = 0; + this.itemClass = ""; + this.title = ""; + this.icon = ""; + this.href = void 0; + this.minCollapsableDepth = 1; + this.isCollapsed = false; + this.childContainer = void 0; + this.itemEl = void 0; + this.tree = tree; + this.parent = parent; + this.depth = depth; + } + async generateItemHTML(container, startClosed = true) { + if (startClosed) + this.isCollapsed = true; + this.itemEl = this.createItemWrapper(container); + await this.createItemLink(this.itemEl); + this.createItemChildren(this.itemEl); + return this.itemEl; + } + forAllChildren(func, recursive = true) { + for (let child of this.children) { + func(child); + if (recursive) + child.forAllChildren(func); + } + } + async setCollapse(collapsed, animate = true) { + if (!this.isCollapsible()) + return; + if (!this.itemEl || !this.itemEl.classList.contains("mod-collapsible")) + return; + let children = this.itemEl.querySelector(".tree-item-children"); + if (children == null) + return; + if (collapsed) { + this.itemEl.classList.add("is-collapsed"); + if (animate) + this.slideUp(children, 100); + else + children.style.display = "none"; + } else { + this.itemEl.classList.remove("is-collapsed"); + if (animate) + this.slideDown(children, 100); + else + children.style.removeProperty("display"); + } + this.isCollapsed = collapsed; + } + toggleCollapse() { + if (!this.itemEl) + return; + this.setCollapse(!this.itemEl.classList.contains("is-collapsed")); + } + sortAlphabetically(reverse = false) { + this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true })); + for (let child of this.children) { + child.sortAlphabetically(); + } + } + isCollapsible() { + return this.children.length != 0 && this.depth >= this.minCollapsableDepth; + } + createItemWrapper(container) { + let itemEl = container.createDiv(); + itemEl.classList.add("tree-item"); + if (this.itemClass.trim() != "") + itemEl.classList.add(...this.itemClass.split(" ")); + itemEl.setAttribute("data-depth", this.depth.toString()); + if (this.isCollapsible()) + itemEl.classList.add("mod-collapsible"); + return itemEl; + } + async createItemContents(container) { + var _a2; + let itemContentsEl = container.createDiv("tree-item-contents"); + if (this.isCollapsible()) { + this.createItemCollapseIcon(itemContentsEl); + if (this.isCollapsed) { + (_a2 = this.itemEl) == null ? void 0 : _a2.classList.add("is-collapsed"); + } + } + this.createItemIcon(itemContentsEl); + await this.createItemTitle(itemContentsEl); + return itemContentsEl; + } + async createItemLink(container) { + if (this.tree.makeLinksWebStyle && this.href) + this.href = Path.toWebStyle(this.href); + let itemLinkEl = container.createEl(this.href ? "a" : "div", { cls: "tree-link" }); + if (this.href) + itemLinkEl.setAttribute("href", this.href); + let itemContentEl = await this.createItemContents(itemLinkEl); + return { linkEl: itemLinkEl, contentEl: itemContentEl }; + } + createItemCollapseIcon(container) { + const arrowIcon = ``; + let itemIconEl = container.createDiv("collapse-icon"); + itemIconEl.innerHTML = arrowIcon; + return itemIconEl; + } + async createItemTitle(container) { + let titleEl = container.createEl("span", { cls: "tree-item-title" }); + if (this.tree.renderMarkdownTitles) + MarkdownRendererAPI.renderMarkdownSimpleEl(this.title, titleEl); + else + titleEl.innerText = this.title; + return titleEl; + } + createItemIcon(container) { + if (this.icon.trim() == "") + return void 0; + let itemIconEl = container.createDiv("tree-item-icon"); + if (this.tree.renderMarkdownTitles) + MarkdownRendererAPI.renderMarkdownSimpleEl(this.icon, itemIconEl); + else + itemIconEl.innerText = this.icon; + return itemIconEl; + } + createItemChildren(container) { + this.childContainer = container.createDiv("tree-item-children nav-folder-children"); + return this.childContainer; + } + slideUp(target, duration = 500) { + target.style.transitionProperty = "height, margin, padding"; + target.style.transitionDuration = duration + "ms"; + target.style.boxSizing = "border-box"; + target.style.height = target.offsetHeight + "px"; + target.offsetHeight; + target.style.overflow = "hidden"; + target.style.height = "0"; + target.style.paddingTop = "0"; + target.style.paddingBottom = "0"; + target.style.marginTop = "0"; + target.style.marginBottom = "0"; + window.setTimeout(async () => { + target.style.display = "none"; + target.style.removeProperty("height"); + target.style.removeProperty("padding-top"); + target.style.removeProperty("padding-bottom"); + target.style.removeProperty("margin-top"); + target.style.removeProperty("margin-bottom"); + target.style.removeProperty("overflow"); + target.style.removeProperty("transition-duration"); + target.style.removeProperty("transition-property"); + }, duration); + } + slideDown(target, duration = 500) { + target.style.removeProperty("display"); + let display = window.getComputedStyle(target).display; + if (display === "none") + display = "block"; + target.style.display = display; + let height = target.offsetHeight; + target.style.overflow = "hidden"; + target.style.height = "0"; + target.style.paddingTop = "0"; + target.style.paddingBottom = "0"; + target.style.marginTop = "0"; + target.style.marginBottom = "0"; + target.offsetHeight; + target.style.boxSizing = "border-box"; + target.style.transitionProperty = "height, margin, padding"; + target.style.transitionDuration = duration + "ms"; + target.style.height = height + "px"; + target.style.removeProperty("padding-top"); + target.style.removeProperty("padding-bottom"); + target.style.removeProperty("margin-top"); + target.style.removeProperty("margin-bottom"); + window.setTimeout(async () => { + target.style.removeProperty("height"); + target.style.removeProperty("overflow"); + target.style.removeProperty("transition-duration"); + target.style.removeProperty("transition-property"); + }, duration); + } +}; + +// scripts/utils/downloadable.ts +var Downloadable = class { + constructor(filename, content, vaultRelativeDestination, encoding = "utf8") { + this.modifiedTime = 0; + if (vaultRelativeDestination.isFile) + throw new Error("vaultRelativeDestination must be a folder: " + vaultRelativeDestination.asString); + this.filename = filename; + this.content = content; + this.relativeDirectory = vaultRelativeDestination; + this.encoding = encoding; + } + get relativePath() { + return this.relativeDirectory.joinString(this.filename); + } + async download(downloadDirectory) { + let data = this.content instanceof Buffer ? this.content : Buffer.from(this.content.toString(), this.encoding); + let writePath = this.getAbsoluteDownloadDirectory(downloadDirectory).joinString(this.filename); + await writePath.writeFile(data, this.encoding); + } + getAbsoluteDownloadPath(downloadDirectory) { + return this.relativeDirectory.absolute(downloadDirectory).joinString(this.filename); + } + getAbsoluteDownloadDirectory(downloadDirectory) { + return this.relativeDirectory.absolute(downloadDirectory); + } +}; + +// scripts/objects/outline-tree.ts +var OutlineTree = class extends Tree { + constructor(webpage, minDepth = 1) { + var _a2, _b; + super(); + this.minDepth = 1; + this.depth = 0; + this.webpage = webpage; + this.file = webpage.source; + this.minDepth = minDepth; + let headings = webpage.headings; + this.depth = Math.min(...headings.map((h) => h.level)) - 1; + let parent = this; + for (let heading of headings) { + if (heading.level < minDepth) + continue; + if (heading.level > parent.depth) { + let child = this.createTreeItem(heading, parent); + parent.children.push(child); + if (heading.level == parent.depth + 1) + parent = child; + } else if (heading.level == parent.depth) { + if (parent instanceof OutlineTreeItem) { + let child = this.createTreeItem(heading, parent.parent); + parent.parent.children.push(child); + parent = child; + } + } else if (heading.level < parent.depth) { + if (parent instanceof OutlineTreeItem) { + let levelChange = parent.depth - heading.level; + let backParent = (_a2 = parent.parent) != null ? _a2 : parent; + for (let i = 0; i < levelChange; i++) { + if (backParent instanceof OutlineTreeItem) + backParent = (_b = backParent.parent) != null ? _b : backParent; + } + let child = this.createTreeItem(heading, backParent); + backParent.children.push(child); + parent = child; + } + } + } + } + createTreeItem(heading, parent) { + let item = new OutlineTreeItem(this, parent, heading); + item.title = heading.heading; + return item; + } +}; +var OutlineTreeItem = class extends TreeItem { + constructor(tree, parent, heading) { + super(tree, parent, heading.level); + this.children = []; + this.heading = heading.heading; + this.href = tree.webpage.relativePath + "#" + heading.headingEl.id; + } + forAllChildren(func, recursive = true) { + super.forAllChildren(func, recursive); + } + async createItemContents(container) { + let linkEl = await super.createItemContents(container); + linkEl == null ? void 0 : linkEl.setAttribute("heading-name", this.heading); + linkEl.classList.add("heading-link"); + return linkEl; + } +}; + +// scripts/objects/graph-view.ts +var GraphView = class { + constructor() { + this.graphOptions = new GraphViewOptions(); + this.isInitialized = false; + } + static InOutQuadBlend(start, end, t) { + t /= 2; + let t2 = 2 * t * (1 - t) + 0.5; + t2 -= 0.5; + t2 *= 2; + return start + (end - start) * t2; + } + async init(files, options) { + var _a2, _b; + if (this.isInitialized) + return; + Object.assign(this.graphOptions, options.graphViewOptions); + this.paths = files.map((f) => f.path); + this.nodeCount = this.paths.length; + this.linkSources = []; + this.linkTargets = []; + this.labels = []; + this.radii = []; + let linkCounts = []; + for (let i = 0; i < this.nodeCount; i++) { + linkCounts.push(0); + } + let resolvedLinks = Object.entries(app.metadataCache.resolvedLinks); + let values = Array.from(resolvedLinks.values()); + let sources = values.map((v) => v[0]); + let targets = values.map((v) => v[1]); + for (let source of this.paths) { + let sourceIndex = sources.indexOf(source); + let file = files.find((f) => f.path == source); + if (file) { + let titleInfo = await Website.getTitleAndIcon(file, true); + this.labels.push(titleInfo.title); + } + if (sourceIndex != -1) { + let target = targets[sourceIndex]; + for (let link of Object.entries(target)) { + if (link[0] == source) + continue; + if (this.paths.includes(link[0])) { + let path1 = source; + let path2 = link[0]; + let index1 = this.paths.indexOf(path1); + let index2 = this.paths.indexOf(path2); + if (index1 == -1 || index2 == -1) + continue; + this.linkSources.push(index1); + this.linkTargets.push(index2); + linkCounts[index1] = ((_a2 = linkCounts[index1]) != null ? _a2 : 0) + 1; + linkCounts[index2] = ((_b = linkCounts[index2]) != null ? _b : 0) + 1; + } + } + } + } + let maxLinks = Math.max(...linkCounts); + this.radii = linkCounts.map((l) => GraphView.InOutQuadBlend(this.graphOptions.minNodeRadius, this.graphOptions.maxNodeRadius, Math.min(l / (maxLinks * 0.8), 1))); + this.paths = this.paths.map((p) => new Path(p).setExtension(".html").makeUnixStyle().makeWebStyle(options.webStylePaths).asString); + this.linkCount = this.linkSources.length; + this.isInitialized = true; + } + static generateGraphEl(container) { + let graphWrapper = container.createDiv(); + graphWrapper.classList.add("graph-view-wrapper"); + let graphHeader = graphWrapper.createDiv(); + graphHeader.addClass("sidebar-section-header"); + graphHeader.innerText = "Interactive Graph"; + let graphEl = graphWrapper.createDiv(); + graphEl.className = "graph-view-placeholder"; + graphEl.innerHTML = ` +
    +
    + +
    + `; + return graphWrapper; + } + getExportData() { + if (!this.isInitialized) + throw new Error("Graph not initialized"); + return `let graphData= +${JSON.stringify(this)};`; + } +}; + +// scripts/html-generation/assets/asset.ts +var { minify: runMinify } = require_htmlminifier(); +var mime = require_mime(); +var Asset = class extends Downloadable { + constructor(filename, content, type, inlinePolicy, minify2, mutability, loadMethod = "async" /* Async */, loadPriority = 100, cdnPath = void 0, options = new MarkdownWebpageRendererAPIOptions2()) { + if (options.webStylePaths) + filename = Path.toWebStyle(filename); + super(filename, content, Asset.typeToPath(type)); + this.loadMethod = "" /* Default */; + this.loadPriority = 100; + this.onlineURL = void 0; + this.childAssets = []; + this.exportOptions = options; + this.type = type; + this.inlinePolicy = inlinePolicy; + this.mutability = mutability; + this.minify = minify2; + this.loadMethod = loadMethod; + this.loadPriority = loadPriority; + this.onlineURL = cdnPath; + this.modifiedTime = Date.now(); + switch (mutability) { + case "static" /* Static */: + AssetHandler.staticAssets.push(this); + this.modifiedTime = AssetHandler.mainJsModTime; + break; + case "dynamic" /* Dynamic */: + AssetHandler.dynamicAssets.push(this); + break; + case "temporary" /* Temporary */: + AssetHandler.temporaryAssets.push(this); + break; + } + if (mutability != "child" /* Child */) + AssetHandler.allAssets.push(this); + } + async load(options) { + this.exportOptions = options; + if (this.type == "style" /* Style */ && typeof this.content == "string") { + this.childAssets = []; + this.content = await AssetHandler.getStyleChildAssets(this, false); + } + if (this.minify) { + this.minifyAsset(); + } + } + async download(downloadDirectory) { + if (this.isInlineFormat(this.exportOptions)) + return; + await super.download(downloadDirectory); + } + static typeToPath(type) { + switch (type) { + case "style" /* Style */: + return AssetHandler.cssPath; + case "script" /* Script */: + return AssetHandler.jsPath; + case "media" /* Media */: + return AssetHandler.mediaPath; + case "html" /* HTML */: + return AssetHandler.htmlPath; + case "font" /* Font */: + return AssetHandler.fontPath; + case "other" /* Other */: + return AssetHandler.libraryPath; + } + } + static extentionToType(extention) { + const mediaTypes = ["png", "jpg", "jpeg", "gif", "svg", "webp", "ico", "mp4", "webm", "ogg", "mp3", "wav", "flac", "aac", "m4a", "opus"]; + const scriptTypes = ["js", "ts"]; + const styleTypes = ["css", "scss", "sass", "less"]; + const htmlTypes = ["html", "htm"]; + const fontTypes = ["ttf", "woff", "woff2", "eot", "otf"]; + extention = extention.toLowerCase().replace(".", ""); + if (mediaTypes.includes(extention)) + return "media" /* Media */; + if (scriptTypes.includes(extention)) + return "script" /* Script */; + if (styleTypes.includes(extention)) + return "style" /* Style */; + if (htmlTypes.includes(extention)) + return "html" /* HTML */; + if (fontTypes.includes(extention)) + return "font" /* Font */; + return "other" /* Other */; + } + async minifyAsset() { + if (this.type == "html" /* HTML */ || typeof this.content != "string") + return; + let isJS = this.type == "script" /* Script */; + let isCSS = this.type == "style" /* Style */; + let tempContent = this.content; + try { + if (isJS) + tempContent = `

    Alicia

    Alicia was a already lively as a kid. She ran, she shouted, she sang, she danced.
    +She loved music just as much as showing the boys she was a force to be reconned with. Yet, due to her lively nature she could never find the time or concentration to take up an instrument.

    test

    \ No newline at end of file diff --git a/.server/Party/Lyra.html b/.server/Party/Lyra.html new file mode 100644 index 0000000..c86b19c --- /dev/null +++ b/.server/Party/Lyra.html @@ -0,0 +1,19 @@ + + Lyra + + + + + + + + + + + +

    Lyra

    \ No newline at end of file diff --git a/.server/Party/Zafira Moonchild.html b/.server/Party/Zafira Moonchild.html new file mode 100644 index 0000000..7f3f88a --- /dev/null +++ b/.server/Party/Zafira Moonchild.html @@ -0,0 +1,14 @@ + + Zafira Moonchild + + + + + + + + + + + +

    Zafira Moonchild

    \ No newline at end of file diff --git a/.server/Party/zafira-moonchild.html b/.server/Party/zafira-moonchild.html new file mode 100644 index 0000000..1e9f44b --- /dev/null +++ b/.server/Party/zafira-moonchild.html @@ -0,0 +1,19 @@ + + Zafira Moonchild + + + + + + + + + + + +

    Zafira Moonchild

    \ No newline at end of file diff --git a/.server/lib/fonts/2d5198822ab091ce4305.woff2 b/.server/lib/fonts/2d5198822ab091ce4305.woff2 new file mode 100644 index 0000000..bc4be66 Binary files /dev/null and b/.server/lib/fonts/2d5198822ab091ce4305.woff2 differ diff --git a/.server/lib/fonts/454577c22304619db035.ttf b/.server/lib/fonts/454577c22304619db035.ttf new file mode 100644 index 0000000..91a2a44 Binary files /dev/null and b/.server/lib/fonts/454577c22304619db035.ttf differ diff --git a/.server/lib/fonts/4bb6ac751d1c5478ff3a.woff2 b/.server/lib/fonts/4bb6ac751d1c5478ff3a.woff2 new file mode 100644 index 0000000..a89cf4c Binary files /dev/null and b/.server/lib/fonts/4bb6ac751d1c5478ff3a.woff2 differ diff --git a/.server/lib/fonts/535a6cf662596b3bd6a6.woff2 b/.server/lib/fonts/535a6cf662596b3bd6a6.woff2 new file mode 100644 index 0000000..4a81dc7 Binary files /dev/null and b/.server/lib/fonts/535a6cf662596b3bd6a6.woff2 differ diff --git a/.server/lib/fonts/70cc7ff27245e82ad414.ttf b/.server/lib/fonts/70cc7ff27245e82ad414.ttf new file mode 100644 index 0000000..3563e73 Binary files /dev/null and b/.server/lib/fonts/70cc7ff27245e82ad414.ttf differ diff --git a/.server/lib/fonts/b5f0f109bc88052d4000.woff2 b/.server/lib/fonts/b5f0f109bc88052d4000.woff2 new file mode 100644 index 0000000..611e90c Binary files /dev/null and b/.server/lib/fonts/b5f0f109bc88052d4000.woff2 differ diff --git a/.server/lib/fonts/c8ba52b05a9ef10f4758.woff2 b/.server/lib/fonts/c8ba52b05a9ef10f4758.woff2 new file mode 100644 index 0000000..6c2b689 Binary files /dev/null and b/.server/lib/fonts/c8ba52b05a9ef10f4758.woff2 differ diff --git a/.server/lib/fonts/cb10ffd7684cd9836a05.woff2 b/.server/lib/fonts/cb10ffd7684cd9836a05.woff2 new file mode 100644 index 0000000..a619fc5 Binary files /dev/null and b/.server/lib/fonts/cb10ffd7684cd9836a05.woff2 differ diff --git a/.server/lib/fonts/cbe0ae49c52c920fd563.woff2 b/.server/lib/fonts/cbe0ae49c52c920fd563.woff2 new file mode 100644 index 0000000..c24c2bd Binary files /dev/null and b/.server/lib/fonts/cbe0ae49c52c920fd563.woff2 differ diff --git a/.server/lib/html/file-tree.html b/.server/lib/html/file-tree.html new file mode 100644 index 0000000..2ac7f0d --- /dev/null +++ b/.server/lib/html/file-tree.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/.server/lib/media/3d6c1bdc4d87cde4de67.svg b/.server/lib/media/3d6c1bdc4d87cde4de67.svg new file mode 100644 index 0000000..c74b0bd --- /dev/null +++ b/.server/lib/media/3d6c1bdc4d87cde4de67.svg @@ -0,0 +1 @@ + diff --git a/.server/lib/media/874d8b8e340f75575caa.svg b/.server/lib/media/874d8b8e340f75575caa.svg new file mode 100644 index 0000000..db5d5a6 --- /dev/null +++ b/.server/lib/media/874d8b8e340f75575caa.svg @@ -0,0 +1,2 @@ + + diff --git a/.server/lib/media/favicon.png b/.server/lib/media/favicon.png new file mode 100644 index 0000000..6f99489 Binary files /dev/null and b/.server/lib/media/favicon.png differ diff --git a/.server/lib/metadata.json b/.server/lib/metadata.json new file mode 100644 index 0000000..357221c --- /dev/null +++ b/.server/lib/metadata.json @@ -0,0 +1,283 @@ +{ + "vaultName": "TTRPG", + "lastExport": 1723632202027, + "pluginVersion": "1.8.01", + "validBodyClasses": "publish css-settings-manager theme-dark show-inline-title show-ribbon minimal-default-light minimal-default-dark minimal-readable colorful-headings colorful-frame colorful-active links-int-on links-ext-on full-width-media", + "useCustomHeadContent": false, + "useCustomFavicon": false, + "files": [ + "Party/Alicia.md", + "Party/Lyra.md", + "Party/Zafira Moonchild.md", + "lib/scripts/graph-wasm.wasm", + "lib/fonts/94f2f163d4b698242fef.otf", + "lib/fonts/72505e6a122c6acd5471.woff2", + "lib/fonts/2d5198822ab091ce4305.woff2", + "lib/fonts/c8ba52b05a9ef10f4758.woff2", + "lib/fonts/cb10ffd7684cd9836a05.woff2", + "lib/fonts/b5f0f109bc88052d4000.woff2", + "lib/fonts/cbe0ae49c52c920fd563.woff2", + "lib/fonts/535a6cf662596b3bd6a6.woff2", + "lib/fonts/70cc7ff27245e82ad414.ttf", + "lib/fonts/454577c22304619db035.ttf", + "lib/fonts/52ac8f3034507f1d9e53.ttf", + "lib/fonts/05b618077343fbbd92b7.ttf", + "lib/fonts/4bb6ac751d1c5478ff3a.woff2", + "lib/media/874d8b8e340f75575caa.svg", + "lib/media/3d6c1bdc4d87cde4de67.svg", + "lib/html/file-tree.html", + "lib/scripts/webpage.js", + "lib/scripts/graph-view.js", + "lib/scripts/graph-wasm.js", + "lib/scripts/graph-render-worker.js", + "lib/scripts/tinycolor.js", + "lib/scripts/pixi.js", + "lib/scripts/minisearch.js", + "lib/media/favicon.png", + "lib/scripts/graph-data.js", + "lib/styles/obsidian.css", + "lib/styles/theme.css", + "lib/styles/global-variable-styles.css", + "lib/styles/supported-plugins.css", + "lib/styles/main-styles.css" + ], + "mainDependencies": [ + "lib/scripts/graph-wasm.wasm", + "lib/fonts/94f2f163d4b698242fef.otf", + "lib/fonts/72505e6a122c6acd5471.woff2", + "lib/fonts/2d5198822ab091ce4305.woff2", + "lib/fonts/c8ba52b05a9ef10f4758.woff2", + "lib/fonts/cb10ffd7684cd9836a05.woff2", + "lib/fonts/b5f0f109bc88052d4000.woff2", + "lib/fonts/cbe0ae49c52c920fd563.woff2", + "lib/fonts/535a6cf662596b3bd6a6.woff2", + "lib/fonts/70cc7ff27245e82ad414.ttf", + "lib/fonts/454577c22304619db035.ttf", + "lib/fonts/52ac8f3034507f1d9e53.ttf", + "lib/fonts/05b618077343fbbd92b7.ttf", + "lib/fonts/4bb6ac751d1c5478ff3a.woff2", + "lib/media/874d8b8e340f75575caa.svg", + "lib/media/3d6c1bdc4d87cde4de67.svg", + "lib/html/file-tree.html", + "lib/scripts/webpage.js", + "lib/scripts/graph-view.js", + "lib/scripts/graph-wasm.js", + "lib/scripts/graph-render-worker.js", + "lib/scripts/tinycolor.js", + "lib/scripts/pixi.js", + "lib/scripts/minisearch.js", + "lib/media/favicon.png", + "lib/scripts/graph-data.js", + "lib/styles/obsidian.css", + "lib/styles/theme.css", + "lib/styles/global-variable-styles.css", + "lib/styles/supported-plugins.css", + "lib/styles/main-styles.css" + ], + "fileInfo": { + "Party/Alicia.md": { + "modifiedTime": 1723632202027, + "sourceSize": 277, + "exportedPath": "party/alicia.html", + "dependencies": [] + }, + "Party/Lyra.md": { + "modifiedTime": 1723632202027, + "sourceSize": 0, + "exportedPath": "party/lyra.html", + "dependencies": [] + }, + "Party/Zafira Moonchild.md": { + "modifiedTime": 1723632202027, + "sourceSize": 0, + "exportedPath": "party/zafira-moonchild.html", + "dependencies": [] + }, + "lib/fonts/94f2f163d4b698242fef.otf": { + "modifiedTime": 1723632202027, + "sourceSize": 66800, + "exportedPath": "lib/fonts/94f2f163d4b698242fef.otf", + "dependencies": [] + }, + "lib/fonts/72505e6a122c6acd5471.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 104232, + "exportedPath": "lib/fonts/72505e6a122c6acd5471.woff2", + "dependencies": [] + }, + "lib/fonts/2d5198822ab091ce4305.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 104332, + "exportedPath": "lib/fonts/2d5198822ab091ce4305.woff2", + "dependencies": [] + }, + "lib/fonts/c8ba52b05a9ef10f4758.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 98868, + "exportedPath": "lib/fonts/c8ba52b05a9ef10f4758.woff2", + "dependencies": [] + }, + "lib/fonts/cb10ffd7684cd9836a05.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 106876, + "exportedPath": "lib/fonts/cb10ffd7684cd9836a05.woff2", + "dependencies": [] + }, + "lib/fonts/b5f0f109bc88052d4000.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 105804, + "exportedPath": "lib/fonts/b5f0f109bc88052d4000.woff2", + "dependencies": [] + }, + "lib/fonts/cbe0ae49c52c920fd563.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 106108, + "exportedPath": "lib/fonts/cbe0ae49c52c920fd563.woff2", + "dependencies": [] + }, + "lib/fonts/535a6cf662596b3bd6a6.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 111708, + "exportedPath": "lib/fonts/535a6cf662596b3bd6a6.woff2", + "dependencies": [] + }, + "lib/fonts/70cc7ff27245e82ad414.ttf": { + "modifiedTime": 1723632202027, + "sourceSize": 192740, + "exportedPath": "lib/fonts/70cc7ff27245e82ad414.ttf", + "dependencies": [] + }, + "lib/fonts/454577c22304619db035.ttf": { + "modifiedTime": 1723632202027, + "sourceSize": 161376, + "exportedPath": "lib/fonts/454577c22304619db035.ttf", + "dependencies": [] + }, + "lib/fonts/52ac8f3034507f1d9e53.ttf": { + "modifiedTime": 1723632202027, + "sourceSize": 191568, + "exportedPath": "lib/fonts/52ac8f3034507f1d9e53.ttf", + "dependencies": [] + }, + "lib/fonts/05b618077343fbbd92b7.ttf": { + "modifiedTime": 1723632202027, + "sourceSize": 155288, + "exportedPath": "lib/fonts/05b618077343fbbd92b7.ttf", + "dependencies": [] + }, + "lib/fonts/4bb6ac751d1c5478ff3a.woff2": { + "modifiedTime": 1723632202027, + "sourceSize": 7876, + "exportedPath": "lib/fonts/4bb6ac751d1c5478ff3a.woff2", + "dependencies": [] + }, + "lib/media/874d8b8e340f75575caa.svg": { + "modifiedTime": 1723632202027, + "sourceSize": 317, + "exportedPath": "lib/media/874d8b8e340f75575caa.svg", + "dependencies": [] + }, + "lib/media/3d6c1bdc4d87cde4de67.svg": { + "modifiedTime": 1723632202027, + "sourceSize": 279, + "exportedPath": "lib/media/3d6c1bdc4d87cde4de67.svg", + "dependencies": [] + }, + "lib/scripts/graph-wasm.wasm": { + "modifiedTime": 1723632202027, + "sourceSize": 23377, + "exportedPath": "lib/scripts/graph-wasm.wasm", + "dependencies": [] + }, + "lib/html/file-tree.html": { + "modifiedTime": 1723632202027, + "sourceSize": 3834, + "exportedPath": "lib/html/file-tree.html", + "dependencies": [] + }, + "lib/scripts/webpage.js": { + "modifiedTime": 1723632202027, + "sourceSize": 47290, + "exportedPath": "lib/scripts/webpage.js", + "dependencies": [] + }, + "lib/scripts/graph-view.js": { + "modifiedTime": 1723632202027, + "sourceSize": 15519, + "exportedPath": "lib/scripts/graph-view.js", + "dependencies": [] + }, + "lib/scripts/graph-wasm.js": { + "modifiedTime": 1723632202027, + "sourceSize": 14021, + "exportedPath": "lib/scripts/graph-wasm.js", + "dependencies": [] + }, + "lib/scripts/graph-render-worker.js": { + "modifiedTime": 1723632202027, + "sourceSize": 5179, + "exportedPath": "lib/scripts/graph-render-worker.js", + "dependencies": [] + }, + "lib/scripts/tinycolor.js": { + "modifiedTime": 1723632202027, + "sourceSize": 29832, + "exportedPath": "lib/scripts/tinycolor.js", + "dependencies": [] + }, + "lib/scripts/pixi.js": { + "modifiedTime": 1723632202027, + "sourceSize": 449509, + "exportedPath": "lib/scripts/pixi.js", + "dependencies": [] + }, + "lib/scripts/minisearch.js": { + "modifiedTime": 1723632202027, + "sourceSize": 29422, + "exportedPath": "lib/scripts/minisearch.js", + "dependencies": [] + }, + "lib/media/favicon.png": { + "modifiedTime": 1723632202027, + "sourceSize": 1105, + "exportedPath": "lib/media/favicon.png", + "dependencies": [] + }, + "lib/scripts/graph-data.js": { + "modifiedTime": 1723632202027, + "sourceSize": 358, + "exportedPath": "lib/scripts/graph-data.js", + "dependencies": [] + }, + "lib/styles/obsidian.css": { + "modifiedTime": 1723632202027, + "sourceSize": 130471, + "exportedPath": "lib/styles/obsidian.css", + "dependencies": [] + }, + "lib/styles/theme.css": { + "modifiedTime": 1723632202027, + "sourceSize": 228140, + "exportedPath": "lib/styles/theme.css", + "dependencies": [] + }, + "lib/styles/global-variable-styles.css": { + "modifiedTime": 1723632202027, + "sourceSize": 236, + "exportedPath": "lib/styles/global-variable-styles.css", + "dependencies": [] + }, + "lib/styles/supported-plugins.css": { + "modifiedTime": 1723632202027, + "sourceSize": 3035, + "exportedPath": "lib/styles/supported-plugins.css", + "dependencies": [] + }, + "lib/styles/main-styles.css": { + "modifiedTime": 1723632202027, + "sourceSize": 23130, + "exportedPath": "lib/styles/main-styles.css", + "dependencies": [] + } + } +} \ No newline at end of file diff --git a/.server/lib/scripts/graph-data.js b/.server/lib/scripts/graph-data.js new file mode 100644 index 0000000..f7c04f0 --- /dev/null +++ b/.server/lib/scripts/graph-data.js @@ -0,0 +1 @@ +let graphData={graphOptions:{attractionForce:1,linkLength:10,repulsionForce:150,centralForce:3,edgePruning:100,minNodeRadius:3,maxNodeRadius:7},isInitialized:!0,paths:["party/alicia.html","party/lyra.html","party/zafira-moonchild.html"],nodeCount:3,linkSources:[],linkTargets:[],labels:["Alicia","Lyra","Zafira Moonchild"],radii:[null,null,null],linkCount:0} \ No newline at end of file diff --git a/.server/lib/scripts/graph-render-worker.js b/.server/lib/scripts/graph-render-worker.js new file mode 100644 index 0000000..01a4c7e --- /dev/null +++ b/.server/lib/scripts/graph-render-worker.js @@ -0,0 +1 @@ +if("function"==typeof importScripts){let e,t,o;importScripts("https://d157l7jdn8e5sf.cloudfront.net/v7.2.0/webworker.js","./tinycolor.js"),addEventListener("message",onMessage),isDrawing=!1;let n=0,a=[],r=[],i=0,l=[],c=[],d=[],s=[],u=[],g={x:0,y:0},p=new Float32Array(0),h=0,f=0,y={background:2302755,link:11184810,node:13421772,outline:11184810,text:16777215,accent:4203434},S=-1,x=-1,v=-1,m=!1,w=[],b=-1,C=1,k=1;function toScreenSpace(e,t,o=!0){return o?{x:Math.floor(e*C+g.x),y:Math.floor(t*C+g.y)}:{x:e*C+g.x,y:t*C+g.y}}function vecToScreenSpace({x:e,y:t},o=!0){return toScreenSpace(e,t,o)}function toWorldspace(e,t){return{x:(e-g.x)/C,y:(t-g.y)/C}}function vecToWorldspace({x:e,y:t}){return toWorldspace(e,t)}function setCameraCenterWorldspace({x:e,y:t}){g.x=canvas.width/2-e*C,g.y=canvas.height/2-t*C}function getCameraCenterWorldspace(){return toWorldspace(canvas.width/2,canvas.height/2)}function getNodeScreenRadius(e){return e*k}function getNodeWorldspaceRadius(e){return e/k}function getPosition(e){return{x:p[2*e],y:p[2*e+1]}}function mixColors(e,t,o){return tinycolor.mix(tinycolor(e.toString(16)),tinycolor(t.toString(16)),o).toHexNumber()}function darkenColor(e,t){return tinycolor(e.toString(16)).darken(t).toHexNumber()}function lightenColor(e,t){return tinycolor(e.toString(16)).lighten(t).toHexNumber()}function invertColor(e,t){for(e=e.toString(16);e.length<6;)e="0"+e;if(0===e.indexOf("#")&&(e=e.slice(1)),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),6!==e.length)throw new Error("Invalid HEX color:"+e);var o=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),a=parseInt(e.slice(4,6),16);return t?.299*o+.587*n+.114*a>186?"#000000":"#FFFFFF":(o=(255-o).toString(16),n=(255-n).toString(16),a=(255-a).toString(16),"#"+padZero(o)+padZero(n)+padZero(a))}function clamp(e,t,o){return Math.min(Math.max(e,t),o)}function lerp(e,t,o){return e+(t-e)*o}let N=0,T=.2,F=15,M=12,P=F/M;function showLabel(e,t,o=!1){let n=u[e];if(!n)return;if(d[e]=t,!(t>.01))return void hideLabel(e);n.visible=!0,n.style.fontSize=o?F:M;let a=vecToScreenSpace(getPosition(e)),r=s[e]*(o?P:1)/2;n.x=a.x-r,n.y=a.y+getNodeScreenRadius(l[e])+9,n.alpha=t}function hideLabel(e){u[e].visible=!1}function draw(){o.clear();let e=[];m&&(w=[]),N=-1!=S||-1!=v?Math.min(1,N+T):Math.max(0,N-T),o.lineStyle(1,mixColors(y.link,y.background,50*N),.7);for(let t=0;t2){showLabel(e,lerp(0,(t-4)/8-1/k/6*.9,Math.max(1-N,.2)))}else hideLabel(e);if(S==e||x==e&&0!=N||-1!=S&&w.includes(e))continue;let n=vecToScreenSpace(getPosition(e));o.drawCircle(n.x,n.y,t)}o.endFill(),t=.7*N,o.lineStyle(1,mixColors(mixColors(y.link,y.accent,100*N),y.background,20),t);for(let t=0;tMath.max(e,r))),GraphAssembly.averageRadius=GraphAssembly.radii.reduce(((e,r)=>e+r))/GraphAssembly.radii.length,GraphAssembly.minRadius=GraphAssembly.radii.reduce(((e,r)=>Math.min(e,r))),r=this.loadState(),Module.HEAP32.set(new Int32Array(r.buffer),GraphAssembly.#e/r.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.radii.buffer),GraphAssembly.#t/GraphAssembly.radii.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.linkSources.buffer),GraphAssembly.#a/GraphAssembly.linkSources.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.linkTargets.buffer),GraphAssembly.#s/GraphAssembly.linkTargets.BYTES_PER_ELEMENT),Module._Init(GraphAssembly.#e,GraphAssembly.#t,GraphAssembly.#a,GraphAssembly.#s,GraphAssembly.nodeCount,GraphAssembly.linkCount,batchFraction,dt,e.graphOptions.attractionForce,e.graphOptions.linkLength,e.graphOptions.repulsionForce,e.graphOptions.centralForce)}static get positions(){return Module.HEAP32.buffer.slice(GraphAssembly.#e,GraphAssembly.#e+GraphAssembly.#r)}static saveState(e){localStorage.setItem("positions",JSON.stringify(new Float32Array(GraphAssembly.positions).map((e=>Math.round(e)))))}static loadState(){let e=localStorage.getItem("positions"),r=null;if(e&&(r=new Float32Array(Object.values(JSON.parse(e)))),!r||!e||r.length!=2*GraphAssembly.nodeCount){r=new Float32Array(2*GraphAssembly.nodeCount);let e=GraphAssembly.averageRadius*Math.sqrt(GraphAssembly.nodeCount)*2;for(let t=0;t{try{var e=graphRenderer.canvasSidebar.classList.contains("is-collapsed")}catch(e){return}running&&e?running=!1:running||e||(running=!0,graphRenderer.autoResizeCanvas(),graphRenderer.centerCamera())}),1e3))}let firstUpdate=!0;function updateGraph(){if(running&&!graphRenderer.canvasSidebar.classList.contains("is-collapsed")&&(firstUpdate&&(setTimeout((()=>graphRenderer?.canvas?.classList.remove("hide")),500),firstUpdate=!1),GraphAssembly.update(mouseWorldPos,graphRenderer.grabbedNode,graphRenderer.cameraScale),GraphAssembly.hoveredNode!=graphRenderer.hoveredNode&&(graphRenderer.hoveredNode=GraphAssembly.hoveredNode,graphRenderer.canvas.style.cursor=-1==GraphAssembly.hoveredNode?"default":"pointer"),graphRenderer.autoResizeCanvas(),graphRenderer.draw(GraphAssembly.positions),averageFPS=.95*averageFPS+.05*pixiApp.ticker.FPS,averageFPS<.8*targetFPS&&batchFraction>minBatchFraction&&(batchFraction=Math.max(batchFraction-.5/targetFPS,minBatchFraction),GraphAssembly.batchFraction=batchFraction,GraphAssembly.repulsionForce=graphData.graphOptions.repulsionForce/batchFraction),averageFPS>1.2*targetFPS&&batchFraction<1&&(batchFraction=Math.min(batchFraction+.5/targetFPS,1),GraphAssembly.batchFraction=batchFraction,GraphAssembly.repulsionForce=graphData.graphOptions.repulsionForce/batchFraction),0!=scrollVelocity)){graphRenderer.getCameraCenterWorldspace();Math.abs(scrollVelocity)<.001&&(scrollVelocity=0),zoomGraphViewAroundPoint(mouseWorldPos,scrollVelocity),scrollVelocity*=.65}}function zoomGraphViewAroundPoint(e,r,t=.15,a=15){let s=graphRenderer.getCameraCenterWorldspace();if(graphRenderer.cameraScale=Math.max(Math.min(graphRenderer.cameraScale+r*graphRenderer.cameraScale,a),t),graphRenderer.cameraScale!=t&&graphRenderer.cameraScale!=a&&scrollVelocity>0&&null!=mouseWorldPos.x&&null!=mouseWorldPos.y){let t={x:e.x-s.x,y:e.y-s.y},a={x:s.x+t.x*r,y:s.y+t.y*r};graphRenderer.setCameraCenterWorldspace(a)}else graphRenderer.setCameraCenterWorldspace(s)}function scaleGraphViewAroundPoint(e,r,t=.15,a=15){let s=graphRenderer.getCameraCenterWorldspace(),i=graphRenderer.cameraScale;graphRenderer.cameraScale=Math.max(Math.min(r*graphRenderer.cameraScale,a),t);let o=(i-graphRenderer.cameraScale)/i;if(graphRenderer.cameraScale!=t&&graphRenderer.cameraScale!=a&&0!=r){let r={x:e.x-s.x,y:e.y-s.y},t={x:s.x-r.x*o,y:s.y-r.y*o};graphRenderer.setCameraCenterWorldspace(t)}else graphRenderer.setCameraCenterWorldspace(s)}function initializeGraphEvents(){window.addEventListener("beforeunload",(()=>{running=!1,GraphAssembly.free()}));let e=!1,r=graphRenderer.canvas.width;window.addEventListener("resize",(()=>{(e||graphRenderer.canvas.width!=r)&&(graphRenderer.autoResizeCanvas(),graphRenderer.centerCamera())}));let t=document.querySelector(".graph-view-container");function a(e){e.composedPath().includes(t)||s()}function s(){let r=t.clientWidth,s=t.clientHeight;t.classList.add("scale-down"),t.animate({opacity:0},{duration:100,easing:"ease-in",fill:"forwards"}).addEventListener("finish",(function(){t.classList.toggle("expanded"),graphRenderer.autoResizeCanvas(),graphRenderer.centerCamera();let e=t.clientWidth,a=t.clientHeight;graphRenderer.cameraScale*=(e/r+a/s)/2,t.classList.remove("scale-down"),t.classList.add("scale-up"),updateGraph(),t.animate({opacity:1},{duration:200,easing:"ease-out",fill:"forwards"}).addEventListener("finish",(function(){t.classList.remove("scale-up")}))})),e=!e,e?document.addEventListener("pointerdown",a):document.removeEventListener("pointerdown",a)}function i(e){var r=graphRenderer.canvas.getBoundingClientRect();let t=getPointerPosition(e);return{x:t.x-r.left,y:t.y-r.top}}let o={x:0,y:0},n={x:0,y:0},h={x:0,y:0},d={x:0,y:0},l={x:0,y:0},c=0,p=!1,m=!1,g=!1,u=document.querySelector(".graph-view-container"),y=-1;u.addEventListener("pointerenter",(function(r){let t=0,a=!1;function b(e){n=i(e),mouseWorldPos=graphRenderer.vecToWorldspace(n),d={x:n.x-h.x,y:n.y-h.y},h=n,-1!=graphRenderer.grabbedNode&&(l={x:n.x-o.x,y:n.y-o.y}),p&&-1!=graphRenderer.hoveredNode&&-1==graphRenderer.grabbedNode&&graphRenderer.hoveredNode!=graphRenderer.grabbedNode&&(graphRenderer.grabbedNode=graphRenderer.hoveredNode),p&&-1==graphRenderer.hoveredNode&&-1==graphRenderer.grabbedNode||m?graphRenderer.cameraOffset={x:graphRenderer.cameraOffset.x+d.x,y:graphRenderer.cameraOffset.y+d.y}:-1!=graphRenderer.hoveredNode?graphRenderer.canvas.style.cursor="pointer":graphRenderer.canvas.style.cursor="default"}function v(e){if(1==e.touches?.length)return a&&(h=i(e),a=!1),void b(e);if(2==e.touches?.length){let r=getTouchPosition(e.touches[0]),s=getTouchPosition(e.touches[1]);n=i(e),d={x:n.x-h.x,y:n.y-h.y},h=n;let o=Math.sqrt(Math.pow(r.x-s.x,2)+Math.pow(r.y-s.y,2));a||(a=!0,t=o,d={x:0,y:0},mouseWorldPos={x:void 0,y:void 0},graphRenderer.grabbedNode=-1,graphRenderer.hoveredNode=-1);let l=(o-t)/t;scaleGraphViewAroundPoint(graphRenderer.vecToWorldspace(n),1+l,.15,15),graphRenderer.cameraOffset={x:graphRenderer.cameraOffset.x+d.x,y:graphRenderer.cameraOffset.y+d.y},t=o}}function f(r){document.removeEventListener("pointerup",f);let t=Date.now();setTimeout((()=>{p&&-1!=graphRenderer.hoveredNode&&Math.abs(l.x)<=4&&Math.abs(l.y)<=4&&t-c<300&&async function(r){e?s():GraphAssembly.saveState(graphRenderer);let t=graphData.paths[r];window.location.pathname.endsWith(graphData.paths[r])||await loadDocument(t,!0,!0)}(graphRenderer.hoveredNode),p&&-1!=graphRenderer.grabbedNode&&(graphRenderer.grabbedNode=-1),0==r.button&&(p=!1),"touch"==r.pointerType&&y==r.pointerId&&(y=-1,p=!1),1==r.button&&(m=!1),g||(document.removeEventListener("mousemove",b),document.removeEventListener("touchmove",v))}),0)}function R(e){document.addEventListener("pointerup",f),mouseWorldPos=graphRenderer.vecToWorldspace(n),l={x:0,y:0},0==e.button&&(p=!0),"touch"==e.pointerType&&-1==y&&(y=e.pointerId,p=!0),1==e.button&&(m=!0),o=n,c=Date.now(),p&&-1!=graphRenderer.hoveredNode&&(graphRenderer.grabbedNode=graphRenderer.hoveredNode)}n=i(r),mouseWorldPos=graphRenderer.vecToWorldspace(n),h=i(r),g=!0,document.addEventListener("mousemove",b),document.addEventListener("touchmove",v),u.addEventListener("pointerdown",R),u.addEventListener("pointerleave",(function e(r){setTimeout((()=>{g=!1,p||(document.removeEventListener("mousemove",b),document.removeEventListener("touchmove",v),mouseWorldPos={x:void 0,y:void 0}),u.removeEventListener("pointerdown",R),u.removeEventListener("pointerleave",e)}),1)}))})),document.querySelector(".graph-expand.graph-icon")?.addEventListener("click",(e=>{e.stopPropagation(),s()})),u.addEventListener("wheel",(function(e){let r=.09;e.deltaY>0?(scrollVelocity>=-.09&&(scrollVelocity=-.09),scrollVelocity*=1.4):(scrollVelocity<=r&&(scrollVelocity=r),scrollVelocity*=1.4)})),u.addEventListener("dblclick",(function(e){graphRenderer.fitToNodes()})),document.querySelector(".theme-toggle-input")?.addEventListener("change",(e=>{setTimeout((()=>graphRenderer.resampleColors()),0)}))}window.addEventListener("load",(()=>{waitLoadScripts(["pixi","graph-data","graph-render-worker","graph-wasm"],(()=>{Module.onRuntimeInitialized=initializeGraphView,setTimeout((()=>Module.onRuntimeInitialized()),300)}))})) \ No newline at end of file diff --git a/.server/lib/scripts/graph-wasm.js b/.server/lib/scripts/graph-wasm.js new file mode 100644 index 0000000..6c0bc7f --- /dev/null +++ b/.server/lib/scripts/graph-wasm.js @@ -0,0 +1 @@ +var read_,readAsync,readBinary,setWindowTitle,Module=void 0!==Module?Module:{},moduleOverrides=Object.assign({},Module),arguments_=[],thisProgram="./this.program",quit_=(e,n)=>{throw n},ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,scriptDirectory="";function locateFile(e){return Module.locateFile?Module.locateFile(e,scriptDirectory):scriptDirectory+e}if(ENVIRONMENT_IS_NODE){var fs=require("fs"),nodePath=require("path");scriptDirectory=ENVIRONMENT_IS_WORKER?nodePath.dirname(scriptDirectory)+"/":__dirname+"/",read_=(e,n)=>(e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFileSync(e,n?void 0:"utf8")),readBinary=e=>{var n=read_(e,!0);return n.buffer||(n=new Uint8Array(n)),n},readAsync=(e,n,t)=>{e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFile(e,(function(e,r){e?t(e):n(r.buffer)}))},!Module.thisProgram&&process.argv.length>1&&(thisProgram=process.argv[1].replace(/\\/g,"/")),arguments_=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",(function(e){if(!("unwind"===e||e instanceof ExitStatus||e.context instanceof ExitStatus))throw e}));var nodeMajor=process.versions.node.split(".")[0];nodeMajor<15&&process.on("unhandledRejection",(function(e){throw e})),quit_=(e,n)=>{throw process.exitCode=e,n},Module.inspect=function(){return"[Emscripten Module object]"}}else(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:"undefined"!=typeof document&&document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf("blob:")?scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1):"",read_=e=>{var n=new XMLHttpRequest;return n.open("GET",e,!1),n.send(null),n.responseText},ENVIRONMENT_IS_WORKER&&(readBinary=e=>{var n=new XMLHttpRequest;return n.open("GET",e,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),readAsync=(e,n,t)=>{var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?n(r.response):t()},r.onerror=t,r.send(null)},setWindowTitle=e=>document.title=e);var wasmBinary,out=Module.print||console.log.bind(console),err=Module.printErr||console.warn.bind(console);Object.assign(Module,moduleOverrides),moduleOverrides=null,Module.arguments&&(arguments_=Module.arguments),Module.thisProgram&&(thisProgram=Module.thisProgram),Module.quit&&(quit_=Module.quit),Module.wasmBinary&&(wasmBinary=Module.wasmBinary);var wasmMemory,noExitRuntime=Module.noExitRuntime||!0;"object"!=typeof WebAssembly&&abort("no native wasm support detected");var EXITSTATUS,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,wasmTable,ABORT=!1;function updateMemoryViews(){var e=wasmMemory.buffer;Module.HEAP8=HEAP8=new Int8Array(e),Module.HEAP16=HEAP16=new Int16Array(e),Module.HEAP32=HEAP32=new Int32Array(e),Module.HEAPU8=HEAPU8=new Uint8Array(e),Module.HEAPU16=HEAPU16=new Uint16Array(e),Module.HEAPU32=HEAPU32=new Uint32Array(e),Module.HEAPF32=HEAPF32=new Float32Array(e),Module.HEAPF64=HEAPF64=new Float64Array(e)}var __ATPRERUN__=[],__ATINIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1;function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}var runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var n=dependenciesFulfilled;dependenciesFulfilled=null,n()}}function abort(e){throw Module.onAbort&&Module.onAbort(e),err(e="Aborted("+e+")"),ABORT=!0,EXITSTATUS=1,e+=". Build with -sASSERTIONS for more info.",new WebAssembly.RuntimeError(e)}var wasmBinaryFile,tempDouble,tempI64,dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(e){return e.startsWith(dataURIPrefix)}function isFileURI(e){return e.startsWith("file://")}function getBinary(e){try{if(e==wasmBinaryFile&&wasmBinary)return new Uint8Array(wasmBinary);if(readBinary)return readBinary(e);throw"both async and sync fetching of the wasm failed"}catch(e){abort(e)}}function getBinaryPromise(e){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if("function"==typeof fetch&&!isFileURI(e))return fetch(e,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+e+"'";return n.arrayBuffer()})).catch((function(){return getBinary(e)}));if(readAsync)return new Promise((function(n,t){readAsync(e,(function(e){n(new Uint8Array(e))}),t)}))}return Promise.resolve().then((function(){return getBinary(e)}))}function instantiateArrayBuffer(e,n,t){return getBinaryPromise(e).then((function(e){return WebAssembly.instantiate(e,n)})).then((function(e){return e})).then(t,(function(e){err("failed to asynchronously prepare wasm: "+e),abort(e)}))}function instantiateAsync(e,n,t,r){return e||"function"!=typeof WebAssembly.instantiateStreaming||isDataURI(n)||isFileURI(n)||ENVIRONMENT_IS_NODE||"function"!=typeof fetch?instantiateArrayBuffer(n,t,r):fetch(n,{credentials:"same-origin"}).then((function(e){let o=new Response(e.body,{headers:new Headers({"Content-Type":"application/wasm"})});return WebAssembly.instantiateStreaming(o,t).then(r,(function(e){return err("wasm streaming compile failed: "+e),err("falling back to ArrayBuffer instantiation"),instantiateArrayBuffer(n,t,r)}))}))}function createWasm(){var e={a:wasmImports};function n(e,n){var t=e.exports;return Module.asm=t,wasmMemory=Module.asm.f,updateMemoryViews(),wasmTable=Module.asm.r,addOnInit(Module.asm.g),removeRunDependency("wasm-instantiate"),t}if(addRunDependency("wasm-instantiate"),Module.instantiateWasm)try{return Module.instantiateWasm(e,n)}catch(e){return err("Module.instantiateWasm callback failed with error: "+e),!1}return instantiateAsync(wasmBinary,wasmBinaryFile,e,(function(e){n(e.instance)})),{}}isDataURI(wasmBinaryFile="graph-wasm.wasm")||(wasmBinaryFile=locateFile(wasmBinaryFile));var ASM_CONSTS={2304:e=>{console.log(UTF8ToString(e))}};function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function callRuntimeCallbacks(e){for(;e.length>0;)e.shift()(Module)}function getValue(e,n="i8"){switch(n.endsWith("*")&&(n="*"),n){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];case"*":return HEAPU32[e>>2];default:abort("invalid type for getValue: "+n)}}function setValue(e,n,t="i8"){switch(t.endsWith("*")&&(t="*"),t){case"i1":case"i8":HEAP8[e>>0]=n;break;case"i16":HEAP16[e>>1]=n;break;case"i32":HEAP32[e>>2]=n;break;case"i64":tempI64=[n>>>0,(tempDouble=n,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=n;break;case"double":HEAPF64[e>>3]=n;break;case"*":HEAPU32[e>>2]=n;break;default:abort("invalid type for setValue: "+t)}}function _abort(){abort("")}var readEmAsmArgsArray=[];function readEmAsmArgs(e,n){var t;for(readEmAsmArgsArray.length=0,n>>=2;t=HEAPU8[e++];)n+=105!=t&n,readEmAsmArgsArray.push(105==t?HEAP32[n]:HEAPF64[n++>>1]),++n;return readEmAsmArgsArray}function runEmAsmFunction(e,n,t){var r=readEmAsmArgs(n,t);return ASM_CONSTS[e].apply(null,r)}function _emscripten_asm_const_int(e,n,t){return runEmAsmFunction(e,n,t)}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(e,n,t){HEAPU8.copyWithin(e,n,n+t)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(e){var n=wasmMemory.buffer;try{return wasmMemory.grow(e-n.byteLength+65535>>>16),updateMemoryViews(),1}catch(e){}}function _emscripten_resize_heap(e){var n=HEAPU8.length;e>>>=0;var t=getHeapMax();if(e>t)return!1;for(var r=1;r<=4;r*=2){var o=n*(1+.2/r);if(o=Math.min(o,e+100663296),emscripten_realloc_buffer(Math.min(t,(a=Math.max(e,o))+((i=65536)-a%i)%i)))return!0}var a,i;return!1}function getCFunc(e){return Module["_"+e]}function writeArrayToMemory(e,n){HEAP8.set(e,n)}function lengthBytesUTF8(e){for(var n=0,t=0;t=55296&&r<=57343?(n+=4,++t):n+=3}return n}function stringToUTF8Array(e,n,t,r){if(!(r>0))return 0;for(var o=t,a=t+r-1,i=0;i=55296&&u<=57343)u=65536+((1023&u)<<10)|1023&e.charCodeAt(++i);if(u<=127){if(t>=a)break;n[t++]=u}else if(u<=2047){if(t+1>=a)break;n[t++]=192|u>>6,n[t++]=128|63&u}else if(u<=65535){if(t+2>=a)break;n[t++]=224|u>>12,n[t++]=128|u>>6&63,n[t++]=128|63&u}else{if(t+3>=a)break;n[t++]=240|u>>18,n[t++]=128|u>>12&63,n[t++]=128|u>>6&63,n[t++]=128|63&u}}return n[t]=0,t-o}function stringToUTF8(e,n,t){return stringToUTF8Array(e,HEAPU8,n,t)}function stringToUTF8OnStack(e){var n=lengthBytesUTF8(e)+1,t=stackAlloc(n);return stringToUTF8(e,t,n),t}var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,n,t){for(var r=n+t,o=n;e[o]&&!(o>=r);)++o;if(o-n>16&&e.buffer&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(n,o));for(var a="";n>10,56320|1023&s)}}else a+=String.fromCharCode((31&i)<<6|u)}else a+=String.fromCharCode(i)}return a}function UTF8ToString(e,n){return e?UTF8ArrayToString(HEAPU8,e,n):""}function ccall(e,n,t,r,o){var a={string:e=>{var n=0;return null!=e&&0!==e&&(n=stringToUTF8OnStack(e)),n},array:e=>{var n=stackAlloc(e.length);return writeArrayToMemory(e,n),n}};var i=getCFunc(e),u=[],l=0;if(r)for(var s=0;s"number"===e||"boolean"===e));return"string"!==n&&o&&!r?getCFunc(e):function(){return ccall(e,n,t,arguments,r)}}var calledRun,wasmImports={b:_abort,e:_emscripten_asm_const_int,d:_emscripten_date_now,c:_emscripten_memcpy_big,a:_emscripten_resize_heap},asm=createWasm(),___wasm_call_ctors=function(){return(___wasm_call_ctors=Module.asm.g).apply(null,arguments)},_SetBatchFractionSize=Module._SetBatchFractionSize=function(){return(_SetBatchFractionSize=Module._SetBatchFractionSize=Module.asm.h).apply(null,arguments)},_SetAttractionForce=Module._SetAttractionForce=function(){return(_SetAttractionForce=Module._SetAttractionForce=Module.asm.i).apply(null,arguments)},_SetLinkLength=Module._SetLinkLength=function(){return(_SetLinkLength=Module._SetLinkLength=Module.asm.j).apply(null,arguments)},_SetRepulsionForce=Module._SetRepulsionForce=function(){return(_SetRepulsionForce=Module._SetRepulsionForce=Module.asm.k).apply(null,arguments)},_SetCentralForce=Module._SetCentralForce=function(){return(_SetCentralForce=Module._SetCentralForce=Module.asm.l).apply(null,arguments)},_SetDt=Module._SetDt=function(){return(_SetDt=Module._SetDt=Module.asm.m).apply(null,arguments)},_Init=Module._Init=function(){return(_Init=Module._Init=Module.asm.n).apply(null,arguments)},_Update=Module._Update=function(){return(_Update=Module._Update=Module.asm.o).apply(null,arguments)},_SetPosition=Module._SetPosition=function(){return(_SetPosition=Module._SetPosition=Module.asm.p).apply(null,arguments)},_FreeMemory=Module._FreeMemory=function(){return(_FreeMemory=Module._FreeMemory=Module.asm.q).apply(null,arguments)},___errno_location=function(){return(___errno_location=Module.asm.__errno_location).apply(null,arguments)},_malloc=Module._malloc=function(){return(_malloc=Module._malloc=Module.asm.s).apply(null,arguments)},_free=Module._free=function(){return(_free=Module._free=Module.asm.t).apply(null,arguments)},stackSave=function(){return(stackSave=Module.asm.u).apply(null,arguments)},stackRestore=function(){return(stackRestore=Module.asm.v).apply(null,arguments)},stackAlloc=function(){return(stackAlloc=Module.asm.w).apply(null,arguments)},___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module.asm.__cxa_is_pointer_type).apply(null,arguments)};function run(){function e(){calledRun||(calledRun=!0,Module.calledRun=!0,ABORT||(initRuntime(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),postRun()))}runDependencies>0||(preRun(),runDependencies>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Module.setStatus("")}),1),e()}),1)):e()))}if(Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue,dependenciesFulfilled=function e(){calledRun||run(),calledRun||(dependenciesFulfilled=e)},Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();try{run()}catch(e){console.error(e)} \ No newline at end of file diff --git a/.server/lib/scripts/graph-wasm.wasm b/.server/lib/scripts/graph-wasm.wasm new file mode 100644 index 0000000..e94bee2 Binary files /dev/null and b/.server/lib/scripts/graph-wasm.wasm differ diff --git a/.server/lib/scripts/minisearch.js b/.server/lib/scripts/minisearch.js new file mode 100644 index 0000000..59455a6 --- /dev/null +++ b/.server/lib/scripts/minisearch.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).MiniSearch=e()}(this,(function(){"use strict";var t=function(){return t=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function r(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)u.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}"function"==typeof SuppressedError&&SuppressedError;var n,i="KEYS",o="VALUES",u="",a=function(){function t(t,e){var r=t._tree,n=Array.from(r.keys());this.set=t,this._type=e,this._path=n.length>0?[{node:r,keys:n}]:[]}return t.prototype.next=function(){var t=this.dive();return this.backtrack(),t},t.prototype.dive=function(){if(0===this._path.length)return{done:!0,value:void 0};var t=s(this._path),e=t.node,r=t.keys;if(s(r)===u)return{done:!1,value:this.result()};var n=e.get(s(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},t.prototype.backtrack=function(){if(0!==this._path.length){var t=s(this._path).keys;t.pop(),t.length>0||(this._path.pop(),this.backtrack())}},t.prototype.key=function(){return this.set._prefix+this._path.map((function(t){var e=t.keys;return s(e)})).filter((function(t){return t!==u})).join("")},t.prototype.value=function(){return s(this._path).node.get(u)},t.prototype.result=function(){switch(this._type){case o:return this.value();case i:return this.key();default:return[this.key(),this.value()]}},t.prototype[Symbol.iterator]=function(){return this},t}(),s=function(t){return t[t.length-1]},l=function(t,r,n,i,o,a,s,c){var h,d,f=a*s;try{t:for(var y=e(t.keys()),v=y.next();!v.done;v=y.next()){var p=v.value;if(p===u){var m=o[f-1];m<=n&&i.set(c,[t.get(p),m])}else{for(var _=a,g=0;gn)continue t}l(t.get(p),r,n,i,o,_,s,c+p)}}}catch(t){h={error:t}}finally{try{v&&!v.done&&(d=y.return)&&d.call(y)}finally{if(h)throw h.error}}},c=function(){function t(t,e){void 0===t&&(t=new Map),void 0===e&&(e=""),this._size=void 0,this._tree=t,this._prefix=e}return t.prototype.atPrefix=function(n){var i,o;if(!n.startsWith(this._prefix))throw new Error("Mismatched prefix");var a=r(h(this._tree,n.slice(this._prefix.length)),2),s=a[0],l=a[1];if(void 0===s){var c=r(m(l),2),d=c[0],f=c[1];try{for(var y=e(d.keys()),v=y.next();!v.done;v=y.next()){var p=v.value;if(p!==u&&p.startsWith(f)){var _=new Map;return _.set(p.slice(f.length),d.get(p)),new t(_,n)}}}catch(t){i={error:t}}finally{try{v&&!v.done&&(o=y.return)&&o.call(y)}finally{if(i)throw i.error}}}return new t(s,n)},t.prototype.clear=function(){this._size=void 0,this._tree.clear()},t.prototype.delete=function(t){return this._size=void 0,y(this._tree,t)},t.prototype.entries=function(){return new a(this,"ENTRIES")},t.prototype.forEach=function(t){var n,i;try{for(var o=e(this),u=o.next();!u.done;u=o.next()){var a=r(u.value,2);t(a[0],a[1],this)}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}},t.prototype.fuzzyGet=function(t,e){return function(t,e,r){var n=new Map;if(void 0===e)return n;for(var i=e.length+1,o=i+r,u=new Uint8Array(o*i).fill(r+1),a=0;a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new c,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},n.prototype.discard=function(t){var e=this,r=this._idToShortId.get(t);if(null==r)throw new Error("MiniSearch: cannot discard document with ID ".concat(t,": it is not in the index"));this._idToShortId.delete(t),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach((function(t,n){e.removeFieldLength(r,n,e._documentCount,t)})),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},n.prototype.maybeAutoVacuum=function(){if(!1!==this._options.autoVacuum){var t=this._options.autoVacuum,e=t.minDirtFactor,r=t.minDirtCount,n=t.batchSize,i=t.batchWait;this.conditionalVacuum({batchSize:n,batchWait:i},{minDirtCount:r,minDirtFactor:e})}},n.prototype.discardAll=function(t){var r,n,i=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var o=e(t),u=o.next();!u.done;u=o.next()){var a=u.value;this.discard(a)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}finally{this._options.autoVacuum=i}this.maybeAutoVacuum()},n.prototype.replace=function(t){var e=this._options,r=e.idField,n=(0,e.extractField)(t,r);this.discard(n),this.add(t)},n.prototype.vacuum=function(t){return void 0===t&&(t={}),this.conditionalVacuum(t)},n.prototype.conditionalVacuum=function(t,e){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&e,null!=this._enqueuedVacuum||(this._enqueuedVacuum=this._currentVacuum.then((function(){var e=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=S,r.performVacuuming(t,e)}))),this._enqueuedVacuum):!1===this.vacuumConditionsMet(e)?Promise.resolve():(this._currentVacuum=this.performVacuuming(t),this._currentVacuum)},n.prototype.performVacuuming=function(t,n){return function(t,e,r,n){return new(r||(r=Promise))((function(i,o){function u(t){try{s(n.next(t))}catch(t){o(t)}}function a(t){try{s(n.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(u,a)}s((n=n.apply(t,e||[])).next())}))}(this,void 0,void 0,(function(){var i,o,u,a,s,l,c,h,d,f,y,v,p,m,_,g,F,x,w,b,A,C,E,S,D;return function(t,e){var r,n,i,o,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(s){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(u=0)),u;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return u.label++,{value:a[1],done:!1};case 5:u.label++,n=a[1],a=[0];continue;case 7:a=u.ops.pop(),u.trys.pop();continue;default:if(!((i=(i=u.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]=e&&this.dirtFactor>=r},Object.defineProperty(n.prototype,"isVacuuming",{get:function(){return null!=this._currentVacuum},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),n.prototype.has=function(t){return this._idToShortId.has(t)},n.prototype.getStoredFields=function(t){var e=this._idToShortId.get(t);if(null!=e)return this._storedFields.get(e)},n.prototype.search=function(t,i){var o,u;void 0===i&&(i={});var a=this.executeQuery(t,i),s=[];try{for(var l=e(a),c=l.next();!c.done;c=l.next()){var h=r(c.value,2),d=h[0],f=h[1],y=f.score,v=f.terms,p=f.match,m=v.length||1,_={id:this._documentIds.get(d),score:y*m,terms:Object.keys(p),queryTerms:v,match:p};Object.assign(_,this._storedFields.get(d)),(null==i.filter||i.filter(_))&&s.push(_)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(u=l.return)&&u.call(l)}finally{if(o)throw o.error}}return t===n.wildcard&&null==i.boostDocument&&null==this._options.searchOptions.boostDocument||s.sort(M),s},n.prototype.autoSuggest=function(n,i){var o,u,a,s;void 0===i&&(i={}),i=t(t({},this._options.autoSuggestOptions),i);var l=new Map;try{for(var c=e(this.search(n,i)),h=c.next();!h.done;h=c.next()){var d=h.value,f=d.score,y=(x=d.terms).join(" ");null!=(g=l.get(y))?(g.score+=f,g.count+=1):l.set(y,{score:f,terms:x,count:1})}}catch(t){o={error:t}}finally{try{h&&!h.done&&(u=c.return)&&u.call(c)}finally{if(o)throw o.error}}var v=[];try{for(var p=e(l),m=p.next();!m.done;m=p.next()){var _=r(m.value,2),g=_[0],F=_[1],x=(f=F.score,F.terms),w=F.count;v.push({suggestion:g,terms:x,score:f/w})}}catch(t){a={error:t}}finally{try{m&&!m.done&&(s=p.return)&&s.call(p)}finally{if(a)throw a.error}}return v.sort(M),v},Object.defineProperty(n.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),n.loadJSON=function(t,e){if(null==e)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(t),e)},n.getDefault=function(t){if(A.hasOwnProperty(t))return F(A,t);throw new Error('MiniSearch: unknown option "'.concat(t,'"'))},n.loadJS=function(t,i){var o,u,a,s,l,h,d=t.index,f=t.documentCount,y=t.nextId,v=t.documentIds,p=t.fieldIds,m=t.fieldLength,_=t.averageFieldLength,g=t.storedFields,F=t.dirtCount,x=t.serializationVersion;if(1!==x&&2!==x)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var w=new n(i);w._documentCount=f,w._nextId=y,w._documentIds=V(v),w._idToShortId=new Map,w._fieldIds=p,w._fieldLength=V(m),w._avgFieldLength=_,w._storedFields=V(g),w._dirtCount=F||0,w._index=new c;try{for(var b=e(w._documentIds),A=b.next();!A.done;A=b.next()){var C=r(A.value,2),E=C[0],z=C[1];w._idToShortId.set(z,E)}}catch(t){o={error:t}}finally{try{A&&!A.done&&(u=b.return)&&u.call(b)}finally{if(o)throw o.error}}try{for(var S=e(d),D=S.next();!D.done;D=S.next()){var I=r(D.value,2),k=I[0],M=I[1],O=new Map;try{for(var T=(l=void 0,e(Object.keys(M))),L=T.next();!L.done;L=T.next()){var j=L.value,B=M[j];1===x&&(B=B.ds),O.set(parseInt(j,10),V(B))}}catch(t){l={error:t}}finally{try{L&&!L.done&&(h=T.return)&&h.call(T)}finally{if(l)throw l.error}}w._index.set(k,O)}}catch(t){a={error:t}}finally{try{D&&!D.done&&(s=S.return)&&s.call(S)}finally{if(a)throw a.error}}return w},n.prototype.executeQuery=function(e,r){var i=this;if(void 0===r&&(r={}),e===n.wildcard)return this.executeWildcardQuery(r);if("string"!=typeof e){var o=t(t(t({},r),e),{queries:void 0}),u=e.queries.map((function(t){return i.executeQuery(t,o)}));return this.combineResults(u,o.combineWith)}var a=this._options,s=a.tokenize,l=a.processTerm,c=a.searchOptions,h=t(t({tokenize:s,processTerm:l},c),r),d=h.tokenize,f=h.processTerm,y=d(e).flatMap((function(t){return f(t)})).filter((function(t){return!!t})).map(b(h)).map((function(t){return i.executeQuerySpec(t,h)}));return this.combineResults(y,h.combineWith)},n.prototype.executeQuerySpec=function(n,i){var o,u,a,s,l,c,h=t(t({},this._options.searchOptions),i),d=(h.fields||this._options.fields).reduce((function(e,r){var n;return t(t({},e),((n={})[r]=F(h.boost,r)||1,n))}),{}),f=h.boostDocument,y=h.weights,v=h.maxFuzzy,p=h.bm25,m=t(t({},C.weights),y),_=m.fuzzy,g=m.prefix,x=this._index.get(n.term),w=this.termResults(n.term,n.term,1,x,d,f,p);if(n.prefix&&(l=this._index.atPrefix(n.term)),n.fuzzy){var b=!0===n.fuzzy?.2:n.fuzzy,A=b<1?Math.min(v,Math.round(n.term.length*b)):b;A&&(c=this._index.fuzzyGet(n.term,A))}if(l)try{for(var E=e(l),z=E.next();!z.done;z=E.next()){var S=r(z.value,2),D=S[0],I=S[1];if(V=D.length-n.term.length){null==c||c.delete(D);var k=g*D.length/(D.length+.3*V);this.termResults(n.term,D,k,I,d,f,p,w)}}}catch(t){o={error:t}}finally{try{z&&!z.done&&(u=E.return)&&u.call(E)}finally{if(o)throw o.error}}if(c)try{for(var M=e(c.keys()),O=M.next();!O.done;O=M.next()){D=O.value;var V,T=r(c.get(D),2),L=T[0];(V=T[1])&&(k=_*D.length/(D.length+V),this.termResults(n.term,D,k,L,d,f,p,w))}}catch(t){a={error:t}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(a)throw a.error}}return w},n.prototype.executeWildcardQuery=function(n){var i,o,u=new Map,a=t(t({},this._options.searchOptions),n);try{for(var s=e(this._documentIds),l=s.next();!l.done;l=s.next()){var c=r(l.value,2),h=c[0],d=c[1],f=a.boostDocument?a.boostDocument(d,"",this._storedFields.get(h)):1;u.set(h,{score:f,terms:[],match:{}})}}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return u},n.prototype.combineResults=function(t,e){if(void 0===e&&(e=_),0===t.length)return new Map;var r=e.toLowerCase();return t.reduce(x[r])||new Map},n.prototype.toJSON=function(){var t,n,i,o,u=[];try{for(var a=e(this._index),s=a.next();!s.done;s=a.next()){var l=r(s.value,2),c=l[0],h=l[1],d={};try{for(var f=(i=void 0,e(h)),y=f.next();!y.done;y=f.next()){var v=r(y.value,2),p=v[0],m=v[1];d[p]=Object.fromEntries(m)}}catch(t){i={error:t}}finally{try{y&&!y.done&&(o=f.return)&&o.call(f)}finally{if(i)throw i.error}}u.push([c,d])}}catch(n){t={error:n}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:u,serializationVersion:2}},n.prototype.termResults=function(t,r,n,i,o,u,a,s){var l,c,h,d,f;if(void 0===s&&(s=new Map),null==i)return s;try{for(var y=e(Object.keys(o)),v=y.next();!v.done;v=y.next()){var p=v.value,m=o[p],_=this._fieldIds[p],g=i.get(_);if(null!=g){var x=g.size,b=this._avgFieldLength[_];try{for(var A=(h=void 0,e(g.keys())),C=A.next();!C.done;C=A.next()){var E=C.value;if(this._documentIds.has(E)){var z=u?u(this._documentIds.get(E),r,this._storedFields.get(E)):1;if(z){var S=g.get(E),D=this._fieldLength.get(E)[_],k=n*m*z*w(S,x,this._documentCount,D,b,a),M=s.get(E);if(M){M.score+=k,I(M.terms,t);var O=F(M.match,r);O?O.push(p):M.match[r]=[p]}else s.set(E,{score:k,terms:[t],match:(f={},f[r]=[p],f)})}}else this.removeTerm(_,E,r),x-=1}}catch(t){h={error:t}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}}}}catch(t){l={error:t}}finally{try{v&&!v.done&&(c=y.return)&&c.call(y)}finally{if(l)throw l.error}}return s},n.prototype.addTerm=function(t,e,r){var n=this._index.fetch(r,O),i=n.get(t);if(null==i)(i=new Map).set(e,1),n.set(t,i);else{var o=i.get(e);i.set(e,(o||0)+1)}},n.prototype.removeTerm=function(t,e,r){if(this._index.has(r)){var n=this._index.fetch(r,O),i=n.get(t);null==i||null==i.get(e)?this.warnDocumentChanged(e,t,r):i.get(e)<=1?i.size<=1?n.delete(t):i.delete(e):i.set(e,i.get(e)-1),0===this._index.get(r).size&&this._index.delete(r)}else this.warnDocumentChanged(e,t,r)},n.prototype.warnDocumentChanged=function(t,r,n){var i,o;try{for(var u=e(Object.keys(this._fieldIds)),a=u.next();!a.done;a=u.next()){var s=a.value;if(this._fieldIds[s]===r)return void this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(t),' has changed before removal: term "').concat(n,'" was not present in field "').concat(s,'". Removing a document after it has changed can corrupt the index!'),"version_conflict")}}catch(t){i={error:t}}finally{try{a&&!a.done&&(o=u.return)&&o.call(u)}finally{if(i)throw i.error}}},n.prototype.addDocumentId=function(t){var e=this._nextId;return this._idToShortId.set(t,e),this._documentIds.set(e,t),this._documentCount+=1,this._nextId+=1,e},n.prototype.addFields=function(t){for(var e=0;ee in t?qd(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,bt=(t,e)=>{for(var s in e||(e={}))$h.call(e,s)&&Wh(t,s,e[s]);if(ir)for(var s of ir(e))jh.call(e,s)&&Wh(t,s,e[s]);return t},Qi=(t,e)=>Kd(t,Zd(e)),zn=(t,e)=>{var s={};for(var i in t)$h.call(t,i)&&e.indexOf(i)<0&&(s[i]=t[i]);if(null!=t&&ir)for(var i of ir(t))e.indexOf(i)<0&&jh.call(t,i)&&(s[i]=t[i]);return s},PIXI=function(t){var e,s,i=((s=i||{})[s.WEBGL_LEGACY=0]="WEBGL_LEGACY",s[s.WEBGL=1]="WEBGL",s[s.WEBGL2=2]="WEBGL2",s),r=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.WEBGL=1]="WEBGL",t[t.CANVAS=2]="CANVAS",t))(r||{}),n=(t=>(t[t.COLOR=16384]="COLOR",t[t.DEPTH=256]="DEPTH",t[t.STENCIL=1024]="STENCIL",t))(n||{}),a=(t=>(t[t.NORMAL=0]="NORMAL",t[t.ADD=1]="ADD",t[t.MULTIPLY=2]="MULTIPLY",t[t.SCREEN=3]="SCREEN",t[t.OVERLAY=4]="OVERLAY",t[t.DARKEN=5]="DARKEN",t[t.LIGHTEN=6]="LIGHTEN",t[t.COLOR_DODGE=7]="COLOR_DODGE",t[t.COLOR_BURN=8]="COLOR_BURN",t[t.HARD_LIGHT=9]="HARD_LIGHT",t[t.SOFT_LIGHT=10]="SOFT_LIGHT",t[t.DIFFERENCE=11]="DIFFERENCE",t[t.EXCLUSION=12]="EXCLUSION",t[t.HUE=13]="HUE",t[t.SATURATION=14]="SATURATION",t[t.COLOR=15]="COLOR",t[t.LUMINOSITY=16]="LUMINOSITY",t[t.NORMAL_NPM=17]="NORMAL_NPM",t[t.ADD_NPM=18]="ADD_NPM",t[t.SCREEN_NPM=19]="SCREEN_NPM",t[t.NONE=20]="NONE",t[t.SRC_OVER=0]="SRC_OVER",t[t.SRC_IN=21]="SRC_IN",t[t.SRC_OUT=22]="SRC_OUT",t[t.SRC_ATOP=23]="SRC_ATOP",t[t.DST_OVER=24]="DST_OVER",t[t.DST_IN=25]="DST_IN",t[t.DST_OUT=26]="DST_OUT",t[t.DST_ATOP=27]="DST_ATOP",t[t.ERASE=26]="ERASE",t[t.SUBTRACT=28]="SUBTRACT",t[t.XOR=29]="XOR",t))(a||{}),o=(t=>(t[t.POINTS=0]="POINTS",t[t.LINES=1]="LINES",t[t.LINE_LOOP=2]="LINE_LOOP",t[t.LINE_STRIP=3]="LINE_STRIP",t[t.TRIANGLES=4]="TRIANGLES",t[t.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",t[t.TRIANGLE_FAN=6]="TRIANGLE_FAN",t))(o||{}),h=(t=>(t[t.RGBA=6408]="RGBA",t[t.RGB=6407]="RGB",t[t.RG=33319]="RG",t[t.RED=6403]="RED",t[t.RGBA_INTEGER=36249]="RGBA_INTEGER",t[t.RGB_INTEGER=36248]="RGB_INTEGER",t[t.RG_INTEGER=33320]="RG_INTEGER",t[t.RED_INTEGER=36244]="RED_INTEGER",t[t.ALPHA=6406]="ALPHA",t[t.LUMINANCE=6409]="LUMINANCE",t[t.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",t[t.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",t[t.DEPTH_STENCIL=34041]="DEPTH_STENCIL",t))(h||{}),l=(t=>(t[t.TEXTURE_2D=3553]="TEXTURE_2D",t[t.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",t[t.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",t[t.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",t[t.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",t[t.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",t[t.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",t[t.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",t[t.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",t))(l||{}),u=(t=>(t[t.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",t[t.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",t[t.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",t[t.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",t[t.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",t[t.UNSIGNED_INT=5125]="UNSIGNED_INT",t[t.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",t[t.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",t[t.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",t[t.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",t[t.BYTE=5120]="BYTE",t[t.SHORT=5122]="SHORT",t[t.INT=5124]="INT",t[t.FLOAT=5126]="FLOAT",t[t.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",t[t.HALF_FLOAT=36193]="HALF_FLOAT",t))(u||{}),d=(t=>(t[t.FLOAT=0]="FLOAT",t[t.INT=1]="INT",t[t.UINT=2]="UINT",t))(d||{}),c=(t=>(t[t.NEAREST=0]="NEAREST",t[t.LINEAR=1]="LINEAR",t))(c||{}),p=(t=>(t[t.CLAMP=33071]="CLAMP",t[t.REPEAT=10497]="REPEAT",t[t.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",t))(p||{}),f=(t=>(t[t.OFF=0]="OFF",t[t.POW2=1]="POW2",t[t.ON=2]="ON",t[t.ON_MANUAL=3]="ON_MANUAL",t))(f||{}),m=(t=>(t[t.NPM=0]="NPM",t[t.UNPACK=1]="UNPACK",t[t.PMA=2]="PMA",t[t.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",t[t.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",t[t.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA",t))(m||{}),_=(t=>(t[t.NO=0]="NO",t[t.YES=1]="YES",t[t.AUTO=2]="AUTO",t[t.BLEND=0]="BLEND",t[t.CLEAR=1]="CLEAR",t[t.BLIT=2]="BLIT",t))(_||{}),g=(t=>(t[t.AUTO=0]="AUTO",t[t.MANUAL=1]="MANUAL",t))(g||{}),x=(t=>(t.LOW="lowp",t.MEDIUM="mediump",t.HIGH="highp",t))(x||{}),v=(t=>(t[t.NONE=0]="NONE",t[t.SCISSOR=1]="SCISSOR",t[t.STENCIL=2]="STENCIL",t[t.SPRITE=3]="SPRITE",t[t.COLOR=4]="COLOR",t))(v||{}),y=(t=>(t[t.RED=1]="RED",t[t.GREEN=2]="GREEN",t[t.BLUE=4]="BLUE",t[t.ALPHA=8]="ALPHA",t))(y||{}),T=(t=>(t[t.NONE=0]="NONE",t[t.LOW=2]="LOW",t[t.MEDIUM=4]="MEDIUM",t[t.HIGH=8]="HIGH",t))(T||{}),b=(t=>(t[t.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",t[t.ARRAY_BUFFER=34962]="ARRAY_BUFFER",t[t.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",t))(b||{});const E={createCanvas:(t,e)=>{const s=document.createElement("canvas");return s.width=t,s.height=e,s},getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>{var t;return null!=(t=document.baseURI)?t:window.location.href},getFontFaceSet:()=>document.fonts,fetch:(t,e)=>fetch(t,e),parseXML:t=>(new DOMParser).parseFromString(t,"text/xml")},A={ADAPTER:E,RESOLUTION:1,CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1};var R=/iPhone/i,S=/iPod/i,w=/iPad/i,I=/\biOS-universal(?:.+)Mac\b/i,M=/\bAndroid(?:.+)Mobile\b/i,C=/Android/i,D=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,P=/Silk/i,O=/Windows Phone/i,F=/\bWindows(?:.+)ARM\b/i,B=/BlackBerry/i,N=/BB10/i,L=/Opera Mini/i,G=/\b(CriOS|Chrome)(?:.+)Mobile/i,U=/Mobile(?:.+)Firefox\b/i,k=function(t){return void 0!==t&&"MacIntel"===t.platform&&"number"==typeof t.maxTouchPoints&&t.maxTouchPoints>1&&"undefined"==typeof MSStream};function X(t){var e={userAgent:"",platform:"",maxTouchPoints:0};t||"undefined"==typeof navigator?"string"==typeof t?e.userAgent=t:t&&t.userAgent&&(e={userAgent:t.userAgent,platform:t.platform,maxTouchPoints:t.maxTouchPoints||0}):e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0};var s=e.userAgent,i=s.split("[FBAN");void 0!==i[1]&&(s=i[0]),void 0!==(i=s.split("Twitter"))[1]&&(s=i[0]);var r=function(t){return function(e){return e.test(t)}}(s),n={apple:{phone:r(R)&&!r(O),ipod:r(S),tablet:!r(R)&&(r(w)||k(e))&&!r(O),universal:r(I),device:(r(R)||r(S)||r(w)||r(I)||k(e))&&!r(O)},amazon:{phone:r(D),tablet:!r(D)&&r(P),device:r(D)||r(P)},android:{phone:!r(O)&&r(D)||!r(O)&&r(M),tablet:!r(O)&&!r(D)&&!r(M)&&(r(P)||r(C)),device:!r(O)&&(r(D)||r(P)||r(M)||r(C))||r(/\bokhttp\b/i)},windows:{phone:r(O),tablet:r(F),device:r(O)||r(F)},other:{blackberry:r(B),blackberry10:r(N),opera:r(L),firefox:r(U),chrome:r(G),device:r(B)||r(N)||r(L)||r(U)||r(G)},any:!1,phone:!1,tablet:!1};return n.any=n.apple.device||n.android.device||n.windows.device||n.other.device,n.phone=n.apple.phone||n.android.phone||n.windows.phone,n.tablet=n.apple.tablet||n.android.tablet||n.windows.tablet,n}const H=(null!=(e=X.default)?e:X)(globalThis.navigator);A.RETINA_PREFIX=/@([0-9\.]+)x/,A.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var V="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function z(t,e,s){return t(s={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&s.path)}},s.exports),s.exports}var W=z((function(t){"use strict";var e=Object.prototype.hasOwnProperty,s="~";function i(){}function r(t,e,s){this.fn=t,this.context=e,this.once=s||!1}function n(t,e,i,n,a){if("function"!=typeof i)throw new TypeError("The listener must be a function");var o=new r(i,n||t,a),h=s?s+e:e;return t._events[h]?t._events[h].fn?t._events[h]=[t._events[h],o]:t._events[h].push(o):(t._events[h]=o,t._eventsCount++),t}function a(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function o(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(s=!1)),o.prototype.eventNames=function(){var t,i,r=[];if(0===this._eventsCount)return r;for(i in t=this._events)e.call(t,i)&&r.push(s?i.slice(1):i);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(t)):r},o.prototype.listeners=function(t){var e=s?s+t:t,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var r=0,n=i.length,a=new Array(n);r80*s){i=n=t[0],r=a=t[1];for(var f=s;fn&&(n=o),h>a&&(a=h);l=0!==(l=Math.max(n-i,a-r))?32767/l:0}return Z(c,p,s,i,r,l,0),p}function q(t,e,s,i,r){var n,a;if(r===vt(t,e,s,i)>0)for(n=e;n=e;n-=i)a=_t(n,t[n],t[n+1],a);return a&&ut(a,a.next)&&(gt(a),a=a.next),a}function K(t,e){if(!t)return t;e||(e=t);var s,i=t;do{if(s=!1,i.steiner||!ut(i,i.next)&&0!==lt(i.prev,i,i.next))i=i.next;else{if(gt(i),(i=e=i.prev)===i.next)break;s=!0}}while(s||i!==e);return e}function Z(t,e,s,i,r,n,a){if(t){!a&&n&&function(t,e,s,i){var r=t;do{0===r.z&&(r.z=nt(r.x,r.y,e,s,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){var e,s,i,r,n,a,o,h,l=1;do{for(s=t,t=null,n=null,a=0;s;){for(a++,i=s,o=0,e=0;e0||h>0&&i;)0!==o&&(0===h||!i||s.z<=i.z)?(r=s,s=s.nextZ,o--):(r=i,i=i.nextZ,h--),n?n.nextZ=r:t=r,r.prevZ=n,n=r;s=i}n.nextZ=null,l*=2}while(a>1)}(r)}(t,i,r,n);for(var o,h,l=t;t.prev!==t.next;)if(o=t.prev,h=t.next,n?J(t,i,r,n):Q(t))e.push(o.i/s|0),e.push(t.i/s|0),e.push(h.i/s|0),gt(t),t=h.next,l=h.next;else if((t=h)===l){a?1===a?Z(t=tt(K(t),e,s),e,s,i,r,n,2):2===a&&et(t,e,s,i,r,n):Z(K(t),e,s,i,r,n,1);break}}}function Q(t){var e=t.prev,s=t,i=t.next;if(lt(e,s,i)>=0)return!1;for(var r=e.x,n=s.x,a=i.x,o=e.y,h=s.y,l=i.y,u=rn?r>a?r:a:n>a?n:a,p=o>h?o>l?o:l:h>l?h:l,f=i.next;f!==e;){if(f.x>=u&&f.x<=c&&f.y>=d&&f.y<=p&&ot(r,o,n,h,a,l,f.x,f.y)&<(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function J(t,e,s,i){var r=t.prev,n=t,a=t.next;if(lt(r,n,a)>=0)return!1;for(var o=r.x,h=n.x,l=a.x,u=r.y,d=n.y,c=a.y,p=oh?o>l?o:l:h>l?h:l,_=u>d?u>c?u:c:d>c?d:c,g=nt(p,f,e,s,i),x=nt(m,_,e,s,i),v=t.prevZ,y=t.nextZ;v&&v.z>=g&&y&&y.z<=x;){if(v.x>=p&&v.x<=m&&v.y>=f&&v.y<=_&&v!==r&&v!==a&&ot(o,u,h,d,l,c,v.x,v.y)&<(v.prev,v,v.next)>=0||(v=v.prevZ,y.x>=p&&y.x<=m&&y.y>=f&&y.y<=_&&y!==r&&y!==a&&ot(o,u,h,d,l,c,y.x,y.y)&<(y.prev,y,y.next)>=0))return!1;y=y.nextZ}for(;v&&v.z>=g;){if(v.x>=p&&v.x<=m&&v.y>=f&&v.y<=_&&v!==r&&v!==a&&ot(o,u,h,d,l,c,v.x,v.y)&<(v.prev,v,v.next)>=0)return!1;v=v.prevZ}for(;y&&y.z<=x;){if(y.x>=p&&y.x<=m&&y.y>=f&&y.y<=_&&y!==r&&y!==a&&ot(o,u,h,d,l,c,y.x,y.y)&<(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function tt(t,e,s){var i=t;do{var r=i.prev,n=i.next.next;!ut(r,n)&&dt(r,i,i.next,n)&&ft(r,n)&&ft(n,r)&&(e.push(r.i/s|0),e.push(i.i/s|0),e.push(n.i/s|0),gt(i),gt(i.next),i=t=n),i=i.next}while(i!==t);return K(i)}function et(t,e,s,i,r,n){var a=t;do{for(var o=a.next.next;o!==a.prev;){if(a.i!==o.i&&ht(a,o)){var h=mt(a,o);return a=K(a,a.next),h=K(h,h.next),Z(a,e,s,i,r,n,0),void Z(h,e,s,i,r,n,0)}o=o.next}a=a.next}while(a!==t)}function st(t,e){return t.x-e.x}function it(t,e){var s=function(t,e){var s,i=e,r=t.x,n=t.y,a=-1/0;do{if(n<=i.y&&n>=i.next.y&&i.next.y!==i.y){var o=i.x+(n-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(o<=r&&o>a&&(a=o,s=i.x=i.x&&i.x>=u&&r!==i.x&&ot(ns.x||i.x===s.x&&rt(s,i)))&&(s=i,c=h)),i=i.next}while(i!==l);return s}(t,e);if(!s)return e;var i=mt(s,t);return K(i,i.next),K(s,s.next)}function rt(t,e){return lt(t.prev,t,e.prev)<0&<(e.next,t,t.next)<0}function nt(t,e,s,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-s)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function at(t){var e=t,s=t;do{(e.x=(t-a)*(n-o)&&(t-a)*(i-o)>=(s-a)*(e-o)&&(s-a)*(n-o)>=(r-a)*(i-o)}function ht(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var s=t;do{if(s.i!==t.i&&s.next.i!==t.i&&s.i!==e.i&&s.next.i!==e.i&&dt(s,s.next,t,e))return!0;s=s.next}while(s!==t);return!1}(t,e)&&(ft(t,e)&&ft(e,t)&&function(t,e){var s=t,i=!1,r=(t.x+e.x)/2,n=(t.y+e.y)/2;do{s.y>n!=s.next.y>n&&s.next.y!==s.y&&r<(s.next.x-s.x)*(n-s.y)/(s.next.y-s.y)+s.x&&(i=!i),s=s.next}while(s!==t);return i}(t,e)&&(lt(t.prev,t,e.prev)||lt(t,e.prev,e))||ut(t,e)&<(t.prev,t,t.next)>0&<(e.prev,e,e.next)>0)}function lt(t,e,s){return(e.y-t.y)*(s.x-e.x)-(e.x-t.x)*(s.y-e.y)}function ut(t,e){return t.x===e.x&&t.y===e.y}function dt(t,e,s,i){var r=pt(lt(t,e,s)),n=pt(lt(t,e,i)),a=pt(lt(s,i,t)),o=pt(lt(s,i,e));return!!(r!==n&&a!==o||0===r&&ct(t,s,e)||0===n&&ct(t,i,e)||0===a&&ct(s,t,i)||0===o&&ct(s,e,i))}function ct(t,e,s){return e.x<=Math.max(t.x,s.x)&&e.x>=Math.min(t.x,s.x)&&e.y<=Math.max(t.y,s.y)&&e.y>=Math.min(t.y,s.y)}function pt(t){return t>0?1:t<0?-1:0}function ft(t,e){return lt(t.prev,t,t.next)<0?lt(t,e,t.next)>=0&<(t,t.prev,e)>=0:lt(t,e,t.prev)<0||lt(t,t.next,e)<0}function mt(t,e){var s=new xt(t.i,t.x,t.y),i=new xt(e.i,e.x,e.y),r=t.next,n=e.prev;return t.next=e,e.prev=t,s.next=r,r.prev=s,i.next=s,s.prev=i,n.next=i,i.prev=n,i}function _t(t,e,s,i){var r=new xt(t,e,s);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function gt(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function xt(t,e,s){this.i=t,this.x=e,this.y=s,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function vt(t,e,s,i){for(var r=0,n=e,a=s-i;n0&&(i+=t[r-1].length,s.holes.push(i))}return s},Y.default=j;var yt=z((function(t,e){/*! https://mths.be/punycode v1.3.2 by @mathias */!function(s){var i=e&&!e.nodeType&&e,r=t&&!t.nodeType&&t,n="object"==typeof V&&V;(n.global===n||n.window===n||n.self===n)&&(s=n);var a,o,h=2147483647,l=36,u=1,d=26,c=38,p=700,f=72,m=128,_="-",g=/^xn--/,x=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},T=l-u,b=Math.floor,E=String.fromCharCode;function A(t){throw RangeError(y[t])}function R(t,e){for(var s=t.length,i=[];s--;)i[s]=e(t[s]);return i}function S(t,e){var s=t.split("@"),i="";return s.length>1&&(i=s[0]+"@",t=s[1]),i+R((t=t.replace(v,".")).split("."),e).join(".")}function w(t){for(var e,s,i=[],r=0,n=t.length;r=55296&&e<=56319&&r65535&&(e+=E((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=E(t)})).join("")}function M(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:l}function C(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function D(t,e,s){var i=0;for(t=s?b(t/p):t>>1,t+=b(t/e);t>T*d>>1;i+=l)t=b(t/T);return b(i+(T+1)*t/(t+c))}function P(t){var e,s,i,r,n,a,o,c,p,g,x=[],v=t.length,y=0,T=m,E=f;for((s=t.lastIndexOf(_))<0&&(s=0),i=0;i=128&&A("not-basic"),x.push(t.charCodeAt(i));for(r=s>0?s+1:0;r=v&&A("invalid-input"),((c=M(t.charCodeAt(r++)))>=l||c>b((h-y)/a))&&A("overflow"),y+=c*a,!(c<(p=o<=E?u:o>=E+d?d:o-E));o+=l)a>b(h/(g=l-p))&&A("overflow"),a*=g;E=D(y-n,e=x.length+1,0==n),b(y/e)>h-T&&A("overflow"),T+=b(y/e),y%=e,x.splice(y++,0,T)}return I(x)}function O(t){var e,s,i,r,n,a,o,c,p,g,x,v,y,T,R,S=[];for(v=(t=w(t)).length,e=m,s=0,n=f,a=0;a=e&&xb((h-s)/(y=i+1))&&A("overflow"),s+=(o-e)*y,e=o,a=0;ah&&A("overflow"),x==e){for(c=s,p=l;!(c<(g=p<=n?u:p>=n+d?d:p-n));p+=l)R=c-g,T=l-g,S.push(E(C(g+R%T,0))),c=b(R/T);S.push(E(C(c,0))),n=D(s,y,i==r),s=0,++i}++s,++e}return S.join("")}if(a={version:"1.3.2",ucs2:{decode:w,encode:I},decode:P,encode:O,toASCII:function(t){return S(t,(function(t){return x.test(t)?"xn--"+O(t):t}))},toUnicode:function(t){return S(t,(function(t){return g.test(t)?P(t.slice(4).toLowerCase()):t}))}},i&&r)if(t.exports==i)r.exports=a;else for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);else s.punycode=a}(V)})),Tt={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}};function Et(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var At=function(t,e,s,i){e=e||"&",s=s||"=";var r={};if("string"!=typeof t||0===t.length)return r;var n=/\+/g;t=t.split(e);var a=1e3;i&&"number"==typeof i.maxKeys&&(a=i.maxKeys);var o=t.length;a>0&&o>a&&(o=a);for(var h=0;h=0?(l=p.substr(0,f),u=p.substr(f+1)):(l=p,u=""),d=decodeURIComponent(l),c=decodeURIComponent(u),Et(r,d)?Array.isArray(r[d])?r[d].push(c):r[d]=[r[d],c]:r[d]=c}return r},Rt=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}},St=function(t,e,s,i){return e=e||"&",s=s||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(i){var r=encodeURIComponent(Rt(i))+s;return Array.isArray(t[i])?t[i].map((function(t){return r+encodeURIComponent(Rt(t))})).join(e):r+encodeURIComponent(Rt(t[i]))})).join(e):i?encodeURIComponent(Rt(i))+s+encodeURIComponent(Rt(t)):""},wt=z((function(t,e){"use strict";e.decode=e.parse=At,e.encode=e.stringify=St})),It=zt,Mt=function(t,e){return zt(t,!1,!0).resolve(e)},Ct=function(t){return Tt.isString(t)&&(t=zt(t)),t instanceof Dt?t.format():Dt.prototype.format.call(t)};function Dt(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var Pt=/^([a-z0-9.+-]+:)/i,Ot=/:[0-9]*$/,Ft=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Bt=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),Nt=["'"].concat(Bt),Lt=["%","/","?",";","#"].concat(Nt),Gt=["/","?","#"],Ut=/^[+a-z0-9A-Z_-]{0,63}$/,kt=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Xt={javascript:!0,"javascript:":!0},Ht={javascript:!0,"javascript:":!0},Vt={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function zt(t,e,s){if(t&&Tt.isObject(t)&&t instanceof Dt)return t;var i=new Dt;return i.parse(t,e,s),i}Dt.prototype.parse=function(t,e,s){if(!Tt.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),r=-1!==i&&i127?y+="x":y+=v[T];if(!y.match(Ut)){var E=g.slice(0,c),A=g.slice(c+1),R=v.match(kt);R&&(E.push(R[1]),A.unshift(R[2])),A.length&&(a="/"+A.join(".")+a),this.hostname=E.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),_||(this.hostname=yt.toASCII(this.hostname));var S=this.port?":"+this.port:"",w=this.hostname||"";this.host=w+S,this.href+=this.host,_&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==a[0]&&(a="/"+a))}if(!Xt[l])for(c=0,x=Nt.length;c0)&&s.host.split("@"))&&(s.auth=R.shift(),s.host=s.hostname=R.shift());return s.search=t.search,s.query=t.query,(!Tt.isNull(s.pathname)||!Tt.isNull(s.search))&&(s.path=(s.pathname?s.pathname:"")+(s.search?s.search:"")),s.href=s.format(),s}if(!v.length)return s.pathname=null,s.search?s.path="/"+s.search:s.path=null,s.href=s.format(),s;for(var T=v.slice(-1)[0],b=(s.host||t.host||v.length>1)&&("."===T||".."===T)||""===T,E=0,A=v.length;A>=0;A--)"."===(T=v[A])?v.splice(A,1):".."===T?(v.splice(A,1),E++):E&&(v.splice(A,1),E--);if(!g&&!x)for(;E--;E)v.unshift("..");g&&""!==v[0]&&(!v[0]||"/"!==v[0].charAt(0))&&v.unshift(""),b&&"/"!==v.join("/").substr(-1)&&v.push("");var R,S=""===v[0]||v[0]&&"/"===v[0].charAt(0);y&&(s.hostname=s.host=S?"":v.length?v.shift():"",(R=!!(s.host&&s.host.indexOf("@")>0)&&s.host.split("@"))&&(s.auth=R.shift(),s.host=s.hostname=R.shift()));return(g=g||s.host&&v.length)&&!S&&v.unshift(""),v.length?s.pathname=v.join("/"):(s.pathname=null,s.path=null),(!Tt.isNull(s.pathname)||!Tt.isNull(s.search))&&(s.path=(s.pathname?s.pathname:"")+(s.search?s.search:"")),s.auth=t.auth||s.auth,s.slashes=s.slashes||t.slashes,s.href=s.format(),s},Dt.prototype.parseHost=function(){var t=this.host,e=Ot.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)};const Wt={parse:It,format:Ct,resolve:Mt};function Yt(t){if("string"!=typeof t)throw new TypeError(`Path must be a string. Received ${JSON.stringify(t)}`)}function jt(t){return t.split("?")[0].split("#")[0]}const $t={toPosix:t=>function(t,e,s){return t.replace(new RegExp(function(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(e),"g"),s)}(t,"\\","/"),isUrl(t){return/^https?:/.test(this.toPosix(t))},isDataUrl:t=>/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(t),hasProtocol(t){return/^[^/:]+:\//.test(this.toPosix(t))},getProtocol(t){Yt(t),t=this.toPosix(t);let e="";const s=/^file:\/\/\//.exec(t),i=/^[^/:]+:\/\//.exec(t),r=/^[^/:]+:\//.exec(t);if(s||i||r){const n=(null==s?void 0:s[0])||(null==i?void 0:i[0])||(null==r?void 0:r[0]);e=n,t=t.slice(n.length)}return e},toAbsolute(t,e,s){if(this.isDataUrl(t))return t;const i=jt(this.toPosix(null!=e?e:A.ADAPTER.getBaseUrl())),r=jt(this.toPosix(null!=s?s:this.rootname(i)));return Yt(t),(t=this.toPosix(t)).startsWith("/")?$t.join(r,t.slice(1)):this.isAbsolute(t)?t:this.join(i,t)},normalize(t){if(Yt(t=this.toPosix(t)),0===t.length)return".";let e="";const s=t.startsWith("/");this.hasProtocol(t)&&(e=this.rootname(t),t=t.slice(e.length));const i=t.endsWith("/");return t=function(t,e){let s="",i=0,r=-1,n=0,a=-1;for(let o=0;o<=t.length;++o){if(o2){const t=s.lastIndexOf("/");if(t!==s.length-1){-1===t?(s="",i=0):(s=s.slice(0,t),i=s.length-1-s.lastIndexOf("/")),r=o,n=0;continue}}else if(2===s.length||1===s.length){s="",i=0,r=o,n=0;continue}e&&(s.length>0?s+="/..":s="..",i=2)}else s.length>0?s+=`/${t.slice(r+1,o)}`:s=t.slice(r+1,o),i=o-r-1;r=o,n=0}else 46===a&&-1!==n?++n:n=-1}return s}(t,!1),t.length>0&&i&&(t+="/"),s?`/${t}`:e+t},isAbsolute(t){return Yt(t),t=this.toPosix(t),!!this.hasProtocol(t)||t.startsWith("/")},join(...t){var e;if(0===t.length)return".";let s;for(let i=0;i0)if(void 0===s)s=r;else{const n=null!=(e=t[i-1])?e:"";this.extname(n)?s+=`/../${r}`:s+=`/${r}`}}return void 0===s?".":this.normalize(s)},dirname(t){if(Yt(t),0===t.length)return".";let e=(t=this.toPosix(t)).charCodeAt(0);const s=47===e;let i=-1,r=!0;const n=this.getProtocol(t),a=t;for(let s=(t=t.slice(n.length)).length-1;s>=1;--s)if(e=t.charCodeAt(s),47===e){if(!r){i=s;break}}else r=!1;return-1===i?s?"/":this.isUrl(a)?n+t:n:s&&1===i?"//":n+t.slice(0,i)},rootname(t){Yt(t);let e="";if(e=(t=this.toPosix(t)).startsWith("/")?"/":this.getProtocol(t),this.isUrl(t)){const s=t.indexOf("/",e.length);e=-1!==s?t.slice(0,s):t,e.endsWith("/")||(e+="/")}return e},basename(t,e){Yt(t),e&&Yt(e),t=jt(this.toPosix(t));let s,i=0,r=-1,n=!0;if(void 0!==e&&e.length>0&&e.length<=t.length){if(e.length===t.length&&e===t)return"";let a=e.length-1,o=-1;for(s=t.length-1;s>=0;--s){const h=t.charCodeAt(s);if(47===h){if(!n){i=s+1;break}}else-1===o&&(n=!1,o=s+1),a>=0&&(h===e.charCodeAt(a)?-1==--a&&(r=s):(a=-1,r=o))}return i===r?r=o:-1===r&&(r=t.length),t.slice(i,r)}for(s=t.length-1;s>=0;--s)if(47===t.charCodeAt(s)){if(!n){i=s+1;break}}else-1===r&&(n=!1,r=s+1);return-1===r?"":t.slice(i,r)},extname(t){Yt(t);let e=-1,s=0,i=-1,r=!0,n=0;for(let a=(t=jt(this.toPosix(t))).length-1;a>=0;--a){const o=t.charCodeAt(a);if(47!==o)-1===i&&(r=!1,i=a+1),46===o?-1===e?e=a:1!==n&&(n=1):-1!==e&&(n=-1);else if(!r){s=a+1;break}}return-1===e||-1===i||0===n||1===n&&e===i-1&&e===s+1?"":t.slice(e,i)},parse(t){Yt(t);const e={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return e;let s=(t=jt(this.toPosix(t))).charCodeAt(0);const i=this.isAbsolute(t);let r;e.root=this.rootname(t),r=i||this.hasProtocol(t)?1:0;let n=-1,a=0,o=-1,h=!0,l=t.length-1,u=0;for(;l>=r;--l)if(s=t.charCodeAt(l),47!==s)-1===o&&(h=!1,o=l+1),46===s?-1===n?n=l:1!==u&&(u=1):-1!==n&&(u=-1);else if(!h){a=l+1;break}return-1===n||-1===o||0===u||1===u&&n===o-1&&n===a+1?-1!==o&&(e.base=e.name=0===a&&i?t.slice(1,o):t.slice(a,o)):(0===a&&i?(e.name=t.slice(1,n),e.base=t.slice(1,o)):(e.name=t.slice(a,n),e.base=t.slice(a,o)),e.ext=t.slice(n,o)),e.dir=this.dirname(t),e},sep:"/",delimiter:":"},qt={};function Kt(t,e,s=3){if(qt[e])return;let i=(new Error).stack;void 0===i?console.warn("PixiJS Deprecation Warning: ",`${e}\nDeprecated since v${t}`):(i=i.split("\n").splice(s).join("\n"),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",`${e}\nDeprecated since v${t}`),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",`${e}\nDeprecated since v${t}`),console.warn(i))),qt[e]=!0}let Zt;function Qt(){return void 0===Zt&&(Zt=function(){var t;const e={stencil:!0,failIfMajorPerformanceCaveat:A.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!A.ADAPTER.getWebGLRenderingContext())return!1;const s=A.ADAPTER.createCanvas();let i=s.getContext("webgl",e)||s.getContext("experimental-webgl",e);const r=!(null==(t=null==i?void 0:i.getContextAttributes())||!t.stencil);if(i){const t=i.getExtension("WEBGL_lose_context");t&&t.loseContext()}return i=null,r}catch(t){return!1}}()),Zt}var Jt={grad:.9,turn:360,rad:360/(2*Math.PI)},te=function(t){return"string"==typeof t?t.length>0:"number"==typeof t},ee=function(t,e,s){return void 0===e&&(e=0),void 0===s&&(s=Math.pow(10,e)),Math.round(s*t)/s+0},se=function(t,e,s){return void 0===e&&(e=0),void 0===s&&(s=1),t>s?s:t>e?t:e},ie=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},re=function(t){return{r:se(t.r,0,255),g:se(t.g,0,255),b:se(t.b,0,255),a:se(t.a)}},ne=function(t){return{r:ee(t.r),g:ee(t.g),b:ee(t.b),a:ee(t.a,3)}},ae=/^#([0-9a-f]{3,8})$/i,oe=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},he=function(t){var e=t.r,s=t.g,i=t.b,r=t.a,n=Math.max(e,s,i),a=n-Math.min(e,s,i),o=a?n===e?(s-i)/a:n===s?2+(i-e)/a:4+(e-s)/a:0;return{h:60*(o<0?o+6:o),s:n?a/n*100:0,v:n/255*100,a:r}},le=function(t){var e=t.h,s=t.s,i=t.v,r=t.a;e=e/360*6,s/=100,i/=100;var n=Math.floor(e),a=i*(1-s),o=i*(1-(e-n)*s),h=i*(1-(1-e+n)*s),l=n%6;return{r:255*[i,o,a,a,h,i][l],g:255*[h,i,i,o,a,a][l],b:255*[a,a,h,i,i,o][l],a:r}},ue=function(t){return{h:ie(t.h),s:se(t.s,0,100),l:se(t.l,0,100),a:se(t.a)}},de=function(t){return{h:ee(t.h),s:ee(t.s),l:ee(t.l),a:ee(t.a,3)}},ce=function(t){return le((s=(e=t).s,{h:e.h,s:(s*=((i=e.l)<50?i:100-i)/100)>0?2*s/(i+s)*100:0,v:i+s,a:e.a}));var e,s,i},pe=function(t){return{h:(e=he(t)).h,s:(r=(200-(s=e.s))*(i=e.v)/100)>0&&r<200?s*i/100/(r<=100?r:200-r)*100:0,l:r/2,a:e.a};var e,s,i,r},fe=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,me=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_e=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ge=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,xe={string:[[function(t){var e=ae.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:4===t.length?ee(parseInt(t[3]+t[3],16)/255,2):1}:6===t.length||8===t.length?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:8===t.length?ee(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=_e.exec(t)||ge.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:re({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:void 0===e[7]?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=fe.exec(t)||me.exec(t);if(!e)return null;var s,i,r=ue({h:(s=e[1],i=e[2],void 0===i&&(i="deg"),Number(s)*(Jt[i]||1)),s:Number(e[3]),l:Number(e[4]),a:void 0===e[5]?1:Number(e[5])/(e[6]?100:1)});return ce(r)},"hsl"]],object:[[function(t){var e=t.r,s=t.g,i=t.b,r=t.a,n=void 0===r?1:r;return te(e)&&te(s)&&te(i)?re({r:Number(e),g:Number(s),b:Number(i),a:Number(n)}):null},"rgb"],[function(t){var e=t.h,s=t.s,i=t.l,r=t.a,n=void 0===r?1:r;if(!te(e)||!te(s)||!te(i))return null;var a=ue({h:Number(e),s:Number(s),l:Number(i),a:Number(n)});return ce(a)},"hsl"],[function(t){var e=t.h,s=t.s,i=t.v,r=t.a,n=void 0===r?1:r;if(!te(e)||!te(s)||!te(i))return null;var a,o=(a={h:Number(e),s:Number(s),v:Number(i),a:Number(n)},{h:ie(a.h),s:se(a.s,0,100),v:se(a.v,0,100),a:se(a.a)});return le(o)},"hsv"]]},ve=function(t,e){for(var s=0;s=.5},t.prototype.toHex=function(){return e=(t=ne(this.rgba)).r,s=t.g,i=t.b,n=(r=t.a)<1?oe(ee(255*r)):"","#"+oe(e)+oe(s)+oe(i)+n;var t,e,s,i,r,n},t.prototype.toRgb=function(){return ne(this.rgba)},t.prototype.toRgbString=function(){return e=(t=ne(this.rgba)).r,s=t.g,i=t.b,(r=t.a)<1?"rgba("+e+", "+s+", "+i+", "+r+")":"rgb("+e+", "+s+", "+i+")";var t,e,s,i,r},t.prototype.toHsl=function(){return de(pe(this.rgba))},t.prototype.toHslString=function(){return e=(t=de(pe(this.rgba))).h,s=t.s,i=t.l,(r=t.a)<1?"hsla("+e+", "+s+"%, "+i+"%, "+r+")":"hsl("+e+", "+s+"%, "+i+"%)";var t,e,s,i,r},t.prototype.toHsv=function(){return t=he(this.rgba),{h:ee(t.h),s:ee(t.s),v:ee(t.v),a:ee(t.a,3)};var t},t.prototype.invert=function(){return Re({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},t.prototype.saturate=function(t){return void 0===t&&(t=.1),Re(Te(this.rgba,t))},t.prototype.desaturate=function(t){return void 0===t&&(t=.1),Re(Te(this.rgba,-t))},t.prototype.grayscale=function(){return Re(Te(this.rgba,-1))},t.prototype.lighten=function(t){return void 0===t&&(t=.1),Re(Ee(this.rgba,t))},t.prototype.darken=function(t){return void 0===t&&(t=.1),Re(Ee(this.rgba,-t))},t.prototype.rotate=function(t){return void 0===t&&(t=15),this.hue(this.hue()+t)},t.prototype.alpha=function(t){return"number"==typeof t?Re({r:(e=this.rgba).r,g:e.g,b:e.b,a:t}):ee(this.rgba.a,3);var e},t.prototype.hue=function(t){var e=pe(this.rgba);return"number"==typeof t?Re({h:t,s:e.s,l:e.l,a:e.a}):ee(e.h)},t.prototype.isEqual=function(t){return this.toHex()===Re(t).toHex()},t}(),Re=function(t){return t instanceof Ae?t:new Ae(t)},Se=[];!function(t){t.forEach((function(t){Se.indexOf(t)<0&&(t(Ae,xe),Se.push(t))}))}([function(t,e){var s={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},i={};for(var r in s)i[s[r]]=r;var n={};t.prototype.toName=function(e){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var r,a,o=i[this.toHex()];if(o)return o;if(null!=e&&e.closest){var h=this.toRgb(),l=1/0,u="black";if(!n.length)for(var d in s)n[d]=new t(s[d]).toRgb();for(var c in s){var p=(r=h,a=n[c],Math.pow(r.r-a.r,2)+Math.pow(r.g-a.g,2)+Math.pow(r.b-a.b,2));pt===e[s]));if(null!==t&&null!==e){const s=Object.keys(t),i=Object.keys(e);return s.length===i.length&&s.every((s=>t[s]===e[s]))}return t===e}toRgba(){const[t,e,s,i]=this._components;return{r:t,g:e,b:s,a:i}}toRgb(){const[t,e,s]=this._components;return{r:t,g:e,b:s}}toRgbaString(){const[t,e,s]=this.toUint8RgbArray();return`rgba(${t},${e},${s},${this.alpha})`}toUint8RgbArray(t){const[e,s,i]=this._components;return(t=null!=t?t:[])[0]=Math.round(255*e),t[1]=Math.round(255*s),t[2]=Math.round(255*i),t}toRgbArray(t){t=null!=t?t:[];const[e,s,i]=this._components;return t[0]=e,t[1]=s,t[2]=i,t}toNumber(){return this._int}toLittleEndianNumber(){const t=this._int;return(t>>16)+(65280&t)+((255&t)<<16)}multiply(t){const[e,s,i,r]=we.temp.setValue(t)._components;return this._components[0]*=e,this._components[1]*=s,this._components[2]*=i,this._components[3]*=r,this.refreshInt(),this._value=null,this}premultiply(t,e=!0){return e&&(this._components[0]*=t,this._components[1]*=t,this._components[2]*=t),this._components[3]=t,this.refreshInt(),this._value=null,this}toPremultiplied(t,e=!0){if(1===t)return(255<<24)+this._int;if(0===t)return e?0:this._int;let s=this._int>>16&255,i=this._int>>8&255,r=255&this._int;return e&&(s=s*t+.5|0,i=i*t+.5|0,r=r*t+.5|0),(255*t<<24)+(s<<16)+(i<<8)+r}toHex(){const t=this._int.toString(16);return`#${"000000".substring(0,6-t.length)+t}`}toHexa(){const t=Math.round(255*this._components[3]).toString(16);return this.toHex()+"00".substring(0,2-t.length)+t}setAlpha(t){return this._components[3]=this._clamp(t),this}round(t){const[e,s,i]=this._components;return this._components[0]=Math.round(e*t)/t,this._components[1]=Math.round(s*t)/t,this._components[2]=Math.round(i*t)/t,this.refreshInt(),this._value=null,this}toArray(t){t=null!=t?t:[];const[e,s,i,r]=this._components;return t[0]=e,t[1]=s,t[2]=i,t[3]=r,t}normalize(t){let e,s,i,r;if(("number"==typeof t||t instanceof Number)&&t>=0&&t<=16777215){e=(t>>16&255)/255,s=(t>>8&255)/255,i=(255&t)/255,r=1}else if((Array.isArray(t)||t instanceof Float32Array)&&t.length>=3&&t.length<=4)t=this._clamp(t),[e,s,i,r=1]=t;else if((t instanceof Uint8Array||t instanceof Uint8ClampedArray)&&t.length>=3&&t.length<=4)t=this._clamp(t,0,255),[e,s,i,r=255]=t,e/=255,s/=255,i/=255,r/=255;else if("string"==typeof t||"object"==typeof t){if("string"==typeof t){const e=we.HEX_PATTERN.exec(t);e&&(t=`#${e[2]}`)}const n=Re(t);n.isValid()&&(({r:e,g:s,b:i,a:r}=n.rgba),e/=255,s/=255,i/=255)}if(void 0===e)throw new Error(`Unable to convert color ${t}`);this._components[0]=e,this._components[1]=s,this._components[2]=i,this._components[3]=r,this.refreshInt()}refreshInt(){this._clamp(this._components);const[t,e,s]=this._components;this._int=(255*t<<16)+(255*e<<8)+(255*s|0)}_clamp(t,e=0,s=1){return"number"==typeof t?Math.min(Math.max(t,e),s):(t.forEach(((i,r)=>{t[r]=Math.min(Math.max(i,e),s)})),t)}};let Ie=we;function Me(t){return Kt("7.2.0","utils.hex2string is deprecated, use Color#toHex instead"),Ie.shared.setValue(t).toHex()}function Ce(t){return Kt("7.2.0","utils.rgb2hex is deprecated, use Color#toNumber instead"),Ie.shared.setValue(t).toNumber()}Ie.shared=new we,Ie.temp=new we,Ie.HEX_PATTERN=/^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;const De=function(){const t=[],e=[];for(let s=0;s<32;s++)t[s]=s,e[s]=s;t[a.NORMAL_NPM]=a.NORMAL,t[a.ADD_NPM]=a.ADD,t[a.SCREEN_NPM]=a.SCREEN,e[a.NORMAL]=a.NORMAL_NPM,e[a.ADD]=a.ADD_NPM,e[a.SCREEN]=a.SCREEN_NPM;const s=[];return s.push(e),s.push(t),s}();function Pe(t,e){return De[e?1:0][t]}const Oe=/^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i;function Fe(t,e=null){const s=6*t;if((e=e||new Uint16Array(s)).length!==s)throw new Error(`Out buffer length is incorrect, got ${e.length} and expected ${s}`);for(let t=0,i=0;t>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1}function Ge(t){return!(t&t-1||!t)}function Ue(t){let e=(t>65535?1:0)<<4,s=((t>>>=e)>255?1:0)<<3;return e|=s,s=((t>>>=s)>15?1:0)<<2,e|=s,s=((t>>>=s)>3?1:0)<<1,e|=s,e|(t>>>=s)>>1}function ke(t,e,s){const i=t.length;let r;if(e>=i||0===s)return;const n=i-(s=e+s>i?i-e:s);for(r=e;r(t.Renderer="renderer",t.Application="application",t.RendererSystem="renderer-webgl-system",t.RendererPlugin="renderer-webgl-plugin",t.CanvasRendererSystem="renderer-canvas-system",t.CanvasRendererPlugin="renderer-canvas-plugin",t.Asset="asset",t.LoadParser="load-parser",t.ResolveParser="resolve-parser",t.CacheParser="cache-parser",t.DetectionParser="detection-parser",t))(rs||{});const ns=t=>{if("function"==typeof t||"object"==typeof t&&t.extension){if(!t.extension)throw new Error("Extension class must have an extension object");const e="object"!=typeof t.extension?{type:t.extension}:t.extension;t=Qi(bt({},e),{ref:t})}if("object"!=typeof t)throw new Error("Invalid extension type");return"string"==typeof(t=bt({},t)).type&&(t.type=[t.type]),t},as=(t,e)=>{var s;return null!=(s=ns(t).priority)?s:e},os={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...t){return t.map(ns).forEach((t=>{t.type.forEach((e=>{var s,i;return null==(i=(s=this._removeHandlers)[e])?void 0:i.call(s,t)}))})),this},add(...t){return t.map(ns).forEach((t=>{t.type.forEach((e=>{const s=this._addHandlers,i=this._queue;s[e]?s[e](t):(i[e]=i[e]||[],i[e].push(t))}))})),this},handle(t,e,s){const i=this._addHandlers,r=this._removeHandlers;if(i[t]||r[t])throw new Error(`Extension type ${t} already has a handler`);i[t]=e,r[t]=s;const n=this._queue;return n[t]&&(n[t].forEach((t=>e(t))),delete n[t]),this},handleByMap(t,e){return this.handle(t,(t=>{e[t.name]=t.ref}),(t=>{delete e[t.name]}))},handleByList(t,e,s=-1){return this.handle(t,(t=>{e.includes(t.ref)||(e.push(t.ref),e.sort(((t,e)=>as(e,s)-as(t,s))))}),(t=>{const s=e.indexOf(t.ref);-1!==s&&e.splice(s,1)}))}};class hs{constructor(t){"number"==typeof t?this.rawBinaryData=new ArrayBuffer(t):t instanceof Uint8Array?this.rawBinaryData=t.buffer:this.rawBinaryData=t,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData)}get int8View(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View}get uint8View(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View}get int16View(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View}get uint16View(){return this._uint16View||(this._uint16View=new Uint16Array(this.rawBinaryData)),this._uint16View}get int32View(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View}view(t){return this[`${t}View`]}destroy(){this.rawBinaryData=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._uint16View=null,this._int32View=null,this.uint32View=null,this.float32View=null}static sizeOf(t){switch(t){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(`${t} isn't a valid view type`)}}}const ls=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join("\n");function us(t){let e="";for(let s=0;s0&&(e+="\nelse "),s=0;--i){const r=ps[i];if(r.test&&r.test(t,s))return new r(t,e)}throw new Error("Unrecognized source type to auto-detect Resource")}class ms{constructor(t){this.items=[],this._name=t,this._aliasCount=0}emit(t,e,s,i,r,n,a,o){if(arguments.length>8)throw new Error("max arguments reached");const{name:h,items:l}=this;this._aliasCount++;for(let u=0,d=l.length;u0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))}add(t){return t[this._name]&&(this.ensureNonAliasedItems(),this.remove(t),this.items.push(t)),this}remove(t){const e=this.items.indexOf(t);return-1!==e&&(this.ensureNonAliasedItems(),this.items.splice(e,1)),this}contains(t){return this.items.includes(t)}removeAll(){return this.ensureNonAliasedItems(),this.items.length=0,this}destroy(){this.removeAll(),this.items=null,this._name=null}get empty(){return 0===this.items.length}get name(){return this._name}}Object.defineProperties(ms.prototype,{dispatch:{value:ms.prototype.emit},run:{value:ms.prototype.emit}});class _s{constructor(t=0,e=0){this._width=t,this._height=e,this.destroyed=!1,this.internal=!1,this.onResize=new ms("setRealSize"),this.onUpdate=new ms("update"),this.onError=new ms("onError")}bind(t){this.onResize.add(t),this.onUpdate.add(t),this.onError.add(t),(this._width||this._height)&&this.onResize.emit(this._width,this._height)}unbind(t){this.onResize.remove(t),this.onUpdate.remove(t),this.onError.remove(t)}resize(t,e){(t!==this._width||e!==this._height)&&(this._width=t,this._height=e,this.onResize.emit(t,e))}get valid(){return!!this._width&&!!this._height}update(){this.destroyed||this.onUpdate.emit()}load(){return Promise.resolve(this)}get width(){return this._width}get height(){return this._height}style(t,e,s){return!1}dispose(){}destroy(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)}static test(t,e){return!1}}class gs extends _s{constructor(t,e){const{width:s,height:i}=e||{};if(!s||!i)throw new Error("BufferResource width or height invalid");super(s,i),this.data=t}upload(t,e,s){const i=t.gl;i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.alphaMode===m.UNPACK);const r=e.realWidth,n=e.realHeight;return s.width===r&&s.height===n?i.texSubImage2D(e.target,0,0,0,r,n,e.format,s.type,this.data):(s.width=r,s.height=n,i.texImage2D(e.target,0,s.internalFormat,r,n,0,e.format,s.type,this.data)),!0}dispose(){this.data=null}static test(t){return t instanceof Float32Array||t instanceof Uint8Array||t instanceof Uint32Array}}const xs={scaleMode:c.NEAREST,format:h.RGBA,alphaMode:m.NPM},vs=class extends W{constructor(t=null,e=null){super(),e=Object.assign({},vs.defaultOptions,e);const{alphaMode:s,mipmap:i,anisotropicLevel:r,scaleMode:n,width:a,height:o,wrapMode:h,format:l,type:u,target:d,resolution:c,resourceOptions:p}=e;t&&!(t instanceof _s)&&((t=fs(t,p)).internal=!0),this.resolution=c||A.RESOLUTION,this.width=Math.round((a||0)*this.resolution)/this.resolution,this.height=Math.round((o||0)*this.resolution)/this.resolution,this._mipmap=i,this.anisotropicLevel=r,this._wrapMode=h,this._scaleMode=n,this.format=l,this.type=u,this.target=d,this.alphaMode=s,this.uid=Ve(),this.touched=0,this.isPowerOfTwo=!1,this._refreshPOT(),this._glTextures={},this.dirtyId=0,this.dirtyStyleId=0,this.cacheId=null,this.valid=a>0&&o>0,this.textureCacheIds=[],this.destroyed=!1,this.resource=null,this._batchEnabled=0,this._batchLocation=0,this.parentTextureArray=null,this.setResource(t)}get realWidth(){return Math.round(this.width*this.resolution)}get realHeight(){return Math.round(this.height*this.resolution)}get mipmap(){return this._mipmap}set mipmap(t){this._mipmap!==t&&(this._mipmap=t,this.dirtyStyleId++)}get scaleMode(){return this._scaleMode}set scaleMode(t){this._scaleMode!==t&&(this._scaleMode=t,this.dirtyStyleId++)}get wrapMode(){return this._wrapMode}set wrapMode(t){this._wrapMode!==t&&(this._wrapMode=t,this.dirtyStyleId++)}setStyle(t,e){let s;return void 0!==t&&t!==this.scaleMode&&(this.scaleMode=t,s=!0),void 0!==e&&e!==this.mipmap&&(this.mipmap=e,s=!0),s&&this.dirtyStyleId++,this}setSize(t,e,s){return s=s||this.resolution,this.setRealSize(t*s,e*s,s)}setRealSize(t,e,s){return this.resolution=s||this.resolution,this.width=Math.round(t)/this.resolution,this.height=Math.round(e)/this.resolution,this._refreshPOT(),this.update(),this}_refreshPOT(){this.isPowerOfTwo=Ge(this.realWidth)&&Ge(this.realHeight)}setResolution(t){const e=this.resolution;return e===t||(this.resolution=t,this.valid&&(this.width=Math.round(this.width*e)/t,this.height=Math.round(this.height*e)/t,this.emit("update",this)),this._refreshPOT()),this}setResource(t){if(this.resource===t)return this;if(this.resource)throw new Error("Resource can be set only once");return t.bind(this),this.resource=t,this}update(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))}onError(t){this.emit("error",this,t)}destroy(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete $e[this.cacheId],delete je[this.cacheId],this.cacheId=null),this.dispose(),vs.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0}dispose(){this.emit("dispose",this)}castToBaseTexture(){return this}static from(t,e,s=A.STRICT_TEXTURE_CACHE){const i="string"==typeof t;let r=null;if(i)r=t;else{if(!t._pixiId){const s=(null==e?void 0:e.pixiIdPrefix)||"pixiid";t._pixiId=`${s}_${Ve()}`}r=t._pixiId}let n=$e[r];if(i&&s&&!n)throw new Error(`The cacheId "${r}" does not exist in BaseTextureCache.`);return n||(n=new vs(t,e),n.cacheId=r,vs.addToCache(n,r)),n}static fromBuffer(t,e,s,i){t=t||new Float32Array(e*s*4);const r=new gs(t,{width:e,height:s}),n=t instanceof Float32Array?u.FLOAT:u.UNSIGNED_BYTE;return new vs(r,Object.assign({},xs,{type:n},i))}static addToCache(t,e){e&&(t.textureCacheIds.includes(e)||t.textureCacheIds.push(e),$e[e]&&$e[e]!==t&&console.warn(`BaseTexture added to the cache with an id [${e}] that already had an entry`),$e[e]=t)}static removeFromCache(t){if("string"==typeof t){const e=$e[t];if(e){const s=e.textureCacheIds.indexOf(t);return s>-1&&e.textureCacheIds.splice(s,1),delete $e[t],e}}else if(null!=t&&t.textureCacheIds){for(let e=0;e1){for(let t=0;t(t[t.POLY=0]="POLY",t[t.RECT=1]="RECT",t[t.CIRC=2]="CIRC",t[t.ELIP=3]="ELIP",t[t.RREC=4]="RREC",t))(Fs||{});class Bs{constructor(t=0,e=0){this.x=0,this.y=0,this.x=t,this.y=e}clone(){return new Bs(this.x,this.y)}copyFrom(t){return this.set(t.x,t.y),this}copyTo(t){return t.set(this.x,this.y),t}equals(t){return t.x===this.x&&t.y===this.y}set(t=0,e=t){return this.x=t,this.y=e,this}toString(){return`[@pixi/math:Point x=${this.x} y=${this.y}]`}}const Ns=[new Bs,new Bs,new Bs,new Bs];class Ls{constructor(t=0,e=0,s=0,i=0){this.x=Number(t),this.y=Number(e),this.width=Number(s),this.height=Number(i),this.type=Fs.RECT}get left(){return this.x}get right(){return this.x+this.width}get top(){return this.y}get bottom(){return this.y+this.height}static get EMPTY(){return new Ls(0,0,0,0)}clone(){return new Ls(this.x,this.y,this.width,this.height)}copyFrom(t){return this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this}copyTo(t){return t.x=this.x,t.y=this.y,t.width=this.width,t.height=this.height,t}contains(t,e){return!(this.width<=0||this.height<=0)&&(t>=this.x&&t=this.y&&et.right?t.right:this.right)<=e)return!1;const s=this.yt.bottom?t.bottom:this.bottom)>s}const s=this.left,i=this.right,r=this.top,n=this.bottom;if(i<=s||n<=r)return!1;const a=Ns[0].set(t.left,t.top),o=Ns[1].set(t.left,t.bottom),h=Ns[2].set(t.right,t.top),l=Ns[3].set(t.right,t.bottom);if(h.x<=a.x||o.y<=a.y)return!1;const u=Math.sign(e.a*e.d-e.b*e.c);if(0===u||(e.apply(a,a),e.apply(o,o),e.apply(h,h),e.apply(l,l),Math.max(a.x,o.x,h.x,l.x)<=s||Math.min(a.x,o.x,h.x,l.x)>=i||Math.max(a.y,o.y,h.y,l.y)<=r||Math.min(a.y,o.y,h.y,l.y)>=n))return!1;const d=u*(o.y-a.y),c=u*(a.x-o.x),p=d*s+c*r,f=d*i+c*r,m=d*s+c*n,_=d*i+c*n;if(Math.max(p,f,m,_)<=d*a.x+c*a.y||Math.min(p,f,m,_)>=d*l.x+c*l.y)return!1;const g=u*(a.y-h.y),x=u*(h.x-a.x),v=g*s+x*r,y=g*i+x*r,T=g*s+x*n,b=g*i+x*n;return!(Math.max(v,y,T,b)<=g*a.x+x*a.y||Math.min(v,y,T,b)>=g*l.x+x*l.y)}pad(t=0,e=t){return this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this}fit(t){const e=Math.max(this.x,t.x),s=Math.min(this.x+this.width,t.x+t.width),i=Math.max(this.y,t.y),r=Math.min(this.y+this.height,t.y+t.height);return this.x=e,this.width=Math.max(s-e,0),this.y=i,this.height=Math.max(r-i,0),this}ceil(t=1,e=.001){const s=Math.ceil((this.x+this.width-e)*t)/t,i=Math.ceil((this.y+this.height-e)*t)/t;return this.x=Math.floor((this.x+e)*t)/t,this.y=Math.floor((this.y+e)*t)/t,this.width=s-this.x,this.height=i-this.y,this}enlarge(t){const e=Math.min(this.x,t.x),s=Math.max(this.x+this.width,t.x+t.width),i=Math.min(this.y,t.y),r=Math.max(this.y+this.height,t.y+t.height);return this.x=e,this.width=s-e,this.y=i,this.height=r-i,this}toString(){return`[@pixi/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`}}class Gs{constructor(t=0,e=0,s=0){this.x=t,this.y=e,this.radius=s,this.type=Fs.CIRC}clone(){return new Gs(this.x,this.y,this.radius)}contains(t,e){if(this.radius<=0)return!1;const s=this.radius*this.radius;let i=this.x-t,r=this.y-e;return i*=i,r*=r,i+r<=s}getBounds(){return new Ls(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}toString(){return`[@pixi/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`}}class Us{constructor(t=0,e=0,s=0,i=0){this.x=t,this.y=e,this.width=s,this.height=i,this.type=Fs.ELIP}clone(){return new Us(this.x,this.y,this.width,this.height)}contains(t,e){if(this.width<=0||this.height<=0)return!1;let s=(t-this.x)/this.width,i=(e-this.y)/this.height;return s*=s,i*=i,s+i<=1}getBounds(){return new Ls(this.x-this.width,this.y-this.height,this.width,this.height)}toString(){return`[@pixi/math:Ellipse x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`}}class ks{constructor(...t){let e=Array.isArray(t[0])?t[0]:t;if("number"!=typeof e[0]){const t=[];for(let s=0,i=e.length;se!=h>e&&t<(e-a)/(h-a)*(o-i)+i&&(s=!s)}return s}toString(){return`[@pixi/math:PolygoncloseStroke=${this.closeStroke}points=${this.points.reduce(((t,e)=>`${t}, ${e}`),"")}]`}}class Xs{constructor(t=0,e=0,s=0,i=0,r=20){this.x=t,this.y=e,this.width=s,this.height=i,this.radius=r,this.type=Fs.RREC}clone(){return new Xs(this.x,this.y,this.width,this.height,this.radius)}contains(t,e){if(this.width<=0||this.height<=0)return!1;if(t>=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height){const s=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(e>=this.y+s&&e<=this.y+this.height-s||t>=this.x+s&&t<=this.x+this.width-s)return!0;let i=t-(this.x+s),r=e-(this.y+s);const n=s*s;if(i*i+r*r<=n||(i=t-(this.x+this.width-s),i*i+r*r<=n)||(r=e-(this.y+this.height-s),i*i+r*r<=n)||(i=t-(this.x+s),i*i+r*r<=n))return!0}return!1}toString(){return`[@pixi/math:RoundedRectangle x=${this.x} y=${this.y}width=${this.width} height=${this.height} radius=${this.radius}]`}}class Hs{constructor(t=1,e=0,s=0,i=1,r=0,n=0){this.array=null,this.a=t,this.b=e,this.c=s,this.d=i,this.tx=r,this.ty=n}fromArray(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]}set(t,e,s,i,r,n){return this.a=t,this.b=e,this.c=s,this.d=i,this.tx=r,this.ty=n,this}toArray(t,e){this.array||(this.array=new Float32Array(9));const s=e||this.array;return t?(s[0]=this.a,s[1]=this.b,s[2]=0,s[3]=this.c,s[4]=this.d,s[5]=0,s[6]=this.tx,s[7]=this.ty,s[8]=1):(s[0]=this.a,s[1]=this.c,s[2]=this.tx,s[3]=this.b,s[4]=this.d,s[5]=this.ty,s[6]=0,s[7]=0,s[8]=1),s}apply(t,e){e=e||new Bs;const s=t.x,i=t.y;return e.x=this.a*s+this.c*i+this.tx,e.y=this.b*s+this.d*i+this.ty,e}applyInverse(t,e){e=e||new Bs;const s=1/(this.a*this.d+this.c*-this.b),i=t.x,r=t.y;return e.x=this.d*s*i+-this.c*s*r+(this.ty*this.c-this.tx*this.d)*s,e.y=this.a*s*r+-this.b*s*i+(-this.ty*this.a+this.tx*this.b)*s,e}translate(t,e){return this.tx+=t,this.ty+=e,this}scale(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this}rotate(t){const e=Math.cos(t),s=Math.sin(t),i=this.a,r=this.c,n=this.tx;return this.a=i*e-this.b*s,this.b=i*s+this.b*e,this.c=r*e-this.d*s,this.d=r*s+this.d*e,this.tx=n*e-this.ty*s,this.ty=n*s+this.ty*e,this}append(t){const e=this.a,s=this.b,i=this.c,r=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*s+t.b*r,this.c=t.c*e+t.d*i,this.d=t.c*s+t.d*r,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*s+t.ty*r+this.ty,this}setTransform(t,e,s,i,r,n,a,o,h){return this.a=Math.cos(a+h)*r,this.b=Math.sin(a+h)*r,this.c=-Math.sin(a-o)*n,this.d=Math.cos(a-o)*n,this.tx=t-(s*this.a+i*this.c),this.ty=e-(s*this.b+i*this.d),this}prepend(t){const e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){const e=this.a,s=this.c;this.a=e*t.a+this.b*t.c,this.b=e*t.b+this.b*t.d,this.c=s*t.a+this.d*t.c,this.d=s*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this}decompose(t){const e=this.a,s=this.b,i=this.c,r=this.d,n=t.pivot,a=-Math.atan2(-i,r),o=Math.atan2(s,e),h=Math.abs(a+o);return h<1e-5||Math.abs(Ds-h)<1e-5?(t.rotation=o,t.skew.x=t.skew.y=0):(t.rotation=0,t.skew.x=a,t.skew.y=o),t.scale.x=Math.sqrt(e*e+s*s),t.scale.y=Math.sqrt(i*i+r*r),t.position.x=this.tx+(n.x*e+n.y*i),t.position.y=this.ty+(n.x*s+n.y*r),t}invert(){const t=this.a,e=this.b,s=this.c,i=this.d,r=this.tx,n=t*i-e*s;return this.a=i/n,this.b=-e/n,this.c=-s/n,this.d=t/n,this.tx=(s*this.ty-i*r)/n,this.ty=-(t*this.ty-e*r)/n,this}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){const t=new Hs;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t}copyTo(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t}copyFrom(t){return this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.tx=t.tx,this.ty=t.ty,this}toString(){return`[@pixi/math:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`}static get IDENTITY(){return new Hs}static get TEMP_MATRIX(){return new Hs}}const Vs=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],zs=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],Ws=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],Ys=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],js=[],$s=[],qs=Math.sign;!function(){for(let t=0;t<16;t++){const e=[];js.push(e);for(let s=0;s<16;s++){const i=qs(Vs[t]*Vs[s]+Ws[t]*zs[s]),r=qs(zs[t]*Vs[s]+Ys[t]*zs[s]),n=qs(Vs[t]*Ws[s]+Ws[t]*Ys[s]),a=qs(zs[t]*Ws[s]+Ys[t]*Ys[s]);for(let t=0;t<16;t++)if(Vs[t]===i&&zs[t]===r&&Ws[t]===n&&Ys[t]===a){e.push(t);break}}}for(let t=0;t<16;t++){const e=new Hs;e.set(Vs[t],zs[t],Ws[t],Ys[t],0,0),$s.push(e)}}();const Ks={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:t=>Vs[t],uY:t=>zs[t],vX:t=>Ws[t],vY:t=>Ys[t],inv:t=>8&t?15&t:7&-t,add:(t,e)=>js[t][e],sub:(t,e)=>js[t][Ks.inv(e)],rotate180:t=>4^t,isVertical:t=>2==(3&t),byDirection:(t,e)=>2*Math.abs(t)<=Math.abs(e)?e>=0?Ks.S:Ks.N:2*Math.abs(e)<=Math.abs(t)?t>0?Ks.E:Ks.W:e>0?t>0?Ks.SE:Ks.SW:t>0?Ks.NE:Ks.NW,matrixAppendRotationInv:(t,e,s=0,i=0)=>{const r=$s[Ks.inv(e)];r.tx=s,r.ty=i,t.append(r)}};class Zs{constructor(t,e,s=0,i=0){this._x=s,this._y=i,this.cb=t,this.scope=e}clone(t=this.cb,e=this.scope){return new Zs(t,e,this._x,this._y)}set(t=0,e=t){return(this._x!==t||this._y!==e)&&(this._x=t,this._y=e,this.cb.call(this.scope)),this}copyFrom(t){return(this._x!==t.x||this._y!==t.y)&&(this._x=t.x,this._y=t.y,this.cb.call(this.scope)),this}copyTo(t){return t.set(this._x,this._y),t}equals(t){return t.x===this._x&&t.y===this._y}toString(){return`[@pixi/math:ObservablePoint x=0 y=0 scope=${this.scope}]`}get x(){return this._x}set x(t){this._x!==t&&(this._x=t,this.cb.call(this.scope))}get y(){return this._y}set y(t){this._y!==t&&(this._y=t,this.cb.call(this.scope))}}const Qs=class{constructor(){this.worldTransform=new Hs,this.localTransform=new Hs,this.position=new Zs(this.onChange,this,0,0),this.scale=new Zs(this.onChange,this,1,1),this.pivot=new Zs(this.onChange,this,0,0),this.skew=new Zs(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}onChange(){this._localID++}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++}toString(){return`[@pixi/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`}updateLocalTransform(){const t=this.localTransform;this._localID!==this._currentLocalID&&(t.a=this._cx*this.scale.x,t.b=this._sx*this.scale.x,t.c=this._cy*this.scale.y,t.d=this._sy*this.scale.y,t.tx=this.position.x-(this.pivot.x*t.a+this.pivot.y*t.c),t.ty=this.position.y-(this.pivot.x*t.b+this.pivot.y*t.d),this._currentLocalID=this._localID,this._parentID=-1)}updateTransform(t){const e=this.localTransform;if(this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==t._worldID){const s=t.worldTransform,i=this.worldTransform;i.a=e.a*s.a+e.b*s.c,i.b=e.a*s.b+e.b*s.d,i.c=e.c*s.a+e.d*s.c,i.d=e.c*s.b+e.d*s.d,i.tx=e.tx*s.a+e.ty*s.c+s.tx,i.ty=e.tx*s.b+e.ty*s.d+s.ty,this._parentID=t._worldID,this._worldID++}}setFromMatrix(t){t.decompose(this),this._localID++}get rotation(){return this._rotation}set rotation(t){this._rotation!==t&&(this._rotation=t,this.updateSkew())}};let Js=Qs;Js.IDENTITY=new Qs;function ti(t,e,s){const i=t.createShader(e);return t.shaderSource(i,s),t.compileShader(i),i}function ei(t){const e=new Array(t);for(let t=0;t"float"===t.type&&1===t.size&&!t.isArray,code:t=>`\n if(uv["${t}"] !== ud["${t}"].value)\n {\n ud["${t}"].value = uv["${t}"]\n gl.uniform1f(ud["${t}"].location, uv["${t}"])\n }\n `},{test:(t,e)=>!("sampler2D"!==t.type&&"samplerCube"!==t.type&&"sampler2DArray"!==t.type||1!==t.size||t.isArray||null!=e&&void 0===e.castToBaseTexture),code:t=>`t = syncData.textureCount++;\n\n renderer.texture.bind(uv["${t}"], t);\n\n if(ud["${t}"].value !== t)\n {\n ud["${t}"].value = t;\n gl.uniform1i(ud["${t}"].location, t);\n; // eslint-disable-line max-len\n }`},{test:(t,e)=>"mat3"===t.type&&1===t.size&&!t.isArray&&void 0!==e.a,code:t=>`\n gl.uniformMatrix3fv(ud["${t}"].location, false, uv["${t}"].toArray(true));\n `,codeUbo:t=>`\n var ${t}_matrix = uv.${t}.toArray(true);\n\n data[offset] = ${t}_matrix[0];\n data[offset+1] = ${t}_matrix[1];\n data[offset+2] = ${t}_matrix[2];\n \n data[offset + 4] = ${t}_matrix[3];\n data[offset + 5] = ${t}_matrix[4];\n data[offset + 6] = ${t}_matrix[5];\n \n data[offset + 8] = ${t}_matrix[6];\n data[offset + 9] = ${t}_matrix[7];\n data[offset + 10] = ${t}_matrix[8];\n `},{test:(t,e)=>"vec2"===t.type&&1===t.size&&!t.isArray&&void 0!==e.x,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v.x || cv[1] !== v.y)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud["${t}"].location, v.x, v.y);\n }`,codeUbo:t=>`\n v = uv.${t};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n `},{test:t=>"vec2"===t.type&&1===t.size&&!t.isArray,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2f(ud["${t}"].location, v[0], v[1]);\n }\n `},{test:(t,e)=>"vec4"===t.type&&1===t.size&&!t.isArray&&void 0!==e.width,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud["${t}"].location, v.x, v.y, v.width, v.height)\n }`,codeUbo:t=>`\n v = uv.${t};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n data[offset+2] = v.width;\n data[offset+3] = v.height;\n `},{test:(t,e)=>"vec4"===t.type&&1===t.size&&!t.isArray&&void 0!==e.red,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud["${t}"].location, v.red, v.green, v.blue, v.alpha)\n }`,codeUbo:t=>`\n v = uv.${t};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n data[offset+3] = v.alpha;\n `},{test:(t,e)=>"vec3"===t.type&&1===t.size&&!t.isArray&&void 0!==e.red,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.a)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n \n gl.uniform3f(ud["${t}"].location, v.red, v.green, v.blue)\n }`,codeUbo:t=>`\n v = uv.${t};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n `},{test:t=>"vec4"===t.type&&1===t.size&&!t.isArray,code:t=>`\n cv = ud["${t}"].value;\n v = uv["${t}"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(ud["${t}"].location, v[0], v[1], v[2], v[3])\n }`}],ri={float:"\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1f(location, v);\n }",vec2:"\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2f(location, v[0], v[1])\n }",vec3:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3f(location, v[0], v[1], v[2])\n }",vec4:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(location, v[0], v[1], v[2], v[3]);\n }",int:"\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }",ivec2:"\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }",ivec3:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }",ivec4:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }",uint:"\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1ui(location, v);\n }",uvec2:"\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2ui(location, v[0], v[1]);\n }",uvec3:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3ui(location, v[0], v[1], v[2]);\n }",uvec4:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4ui(location, v[0], v[1], v[2], v[3]);\n }",bool:"\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1i(location, v);\n }",bvec2:"\n if (cv[0] != v[0] || cv[1] != v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }",bvec3:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }",bvec4:"\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }",mat2:"gl.uniformMatrix2fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",sampler2D:"\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }",samplerCube:"\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }",sampler2DArray:"\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }"},ni={float:"gl.uniform1fv(location, v)",vec2:"gl.uniform2fv(location, v)",vec3:"gl.uniform3fv(location, v)",vec4:"gl.uniform4fv(location, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat2:"gl.uniformMatrix2fv(location, false, v)",int:"gl.uniform1iv(location, v)",ivec2:"gl.uniform2iv(location, v)",ivec3:"gl.uniform3iv(location, v)",ivec4:"gl.uniform4iv(location, v)",uint:"gl.uniform1uiv(location, v)",uvec2:"gl.uniform2uiv(location, v)",uvec3:"gl.uniform3uiv(location, v)",uvec4:"gl.uniform4uiv(location, v)",bool:"gl.uniform1iv(location, v)",bvec2:"gl.uniform2iv(location, v)",bvec3:"gl.uniform3iv(location, v)",bvec4:"gl.uniform4iv(location, v)",sampler2D:"gl.uniform1iv(location, v)",samplerCube:"gl.uniform1iv(location, v)",sampler2DArray:"gl.uniform1iv(location, v)"};const ai={};let oi,hi=ai;function li(){if(hi===ai||(null==hi?void 0:hi.isContextLost())){const t=A.ADAPTER.createCanvas();let e;A.PREFER_ENV>=i.WEBGL2&&(e=t.getContext("webgl2",{})),e||(e=t.getContext("webgl",{})||t.getContext("experimental-webgl",{}),e?e.getExtension("WEBGL_draw_buffers"):e=null),hi=e}return hi}function ui(t,e){const s=t.getShaderSource(e).split("\n").map(((t,e)=>`${e}: ${t}`)),i=t.getShaderInfoLog(e),r=i.split("\n"),n={},a=r.map((t=>parseFloat(t.replace(/^ERROR\: 0\:([\d]+)\:.*$/,"$1")))).filter((t=>!(!t||n[t])&&(n[t]=!0,!0))),o=[""];a.forEach((t=>{s[t-1]=`%c${s[t-1]}%c`,o.push("background: #FF0000; color:#FFFFFF; font-size: 10px","font-size: 10px")}));const h=s.join("\n");o[0]=h,console.error(i),console.groupCollapsed("click to view full shader code"),console.warn(...o),console.groupEnd()}const di={float:1,vec2:2,vec3:3,vec4:4,int:1,ivec2:2,ivec3:3,ivec4:4,uint:1,uvec2:2,uvec3:3,uvec4:4,bool:1,bvec2:2,bvec3:3,bvec4:4,mat2:4,mat3:9,mat4:16,sampler2D:1};function ci(t){return di[t]}let pi=null;const fi={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",UNSIGNED_INT:"uint",UNSIGNED_INT_VEC2:"uvec2",UNSIGNED_INT_VEC3:"uvec3",UNSIGNED_INT_VEC4:"uvec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",INT_SAMPLER_2D:"sampler2D",UNSIGNED_INT_SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube",INT_SAMPLER_CUBE:"samplerCube",UNSIGNED_INT_SAMPLER_CUBE:"samplerCube",SAMPLER_2D_ARRAY:"sampler2DArray",INT_SAMPLER_2D_ARRAY:"sampler2DArray",UNSIGNED_INT_SAMPLER_2D_ARRAY:"sampler2DArray"};function mi(t,e){if(!pi){const e=Object.keys(fi);pi={};for(let s=0;s0&&(e+="\nelse "),sthis.size&&this.flush(),this._vertexCount+=t.vertexData.length/2,this._indexCount+=t.indices.length,this._bufferedTextures[this._bufferSize]=t._texture.baseTexture,this._bufferedElements[this._bufferSize++]=t)}buildTexturesAndDrawCalls(){const{_bufferedTextures:t,maxTextures:e}=this,s=Mi._textureArrayPool,i=this.renderer.batch,r=this._tempBoundTextures,n=this.renderer.textureGC.count;let a=++ys._globalBatch,o=0,h=s[0],l=0;i.copyBoundTextures(r,e);for(let u=0;u=e&&(i.boundArray(h,r,a,e),this.buildDrawCalls(h,l,u),l=u,h=s[++o],++a),d._batchEnabled=a,d.touched=n,h.elements[h.count++]=d)}h.count>0&&(i.boundArray(h,r,a,e),this.buildDrawCalls(h,l,this._bufferSize),++o,++a);for(let t=0;t0);for(let t=0;t=0;--i)t[i]=s[i]||null,t[i]&&(t[i]._batchLocation=i)}boundArray(t,e,s,i){const{elements:r,ids:n,count:a}=t;let o=0;for(let t=0;t=0&&h=i.WEBGL2&&(s=t.getContext("webgl2",e)),s)this.webGLVersion=2;else if(this.webGLVersion=1,s=t.getContext("webgl",e)||t.getContext("experimental-webgl",e),!s)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=s,this.getExtensions(),this.gl}getExtensions(){const{gl:t}=this,e={loseContext:t.getExtension("WEBGL_lose_context"),anisotropicFiltering:t.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),s3tc:t.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:t.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:t.getExtension("WEBGL_compressed_texture_etc"),etc1:t.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:t.getExtension("WEBGL_compressed_texture_atc"),astc:t.getExtension("WEBGL_compressed_texture_astc")};1===this.webGLVersion?Object.assign(this.extensions,e,{drawBuffers:t.getExtension("WEBGL_draw_buffers"),depthTexture:t.getExtension("WEBGL_depth_texture"),vertexArrayObject:t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:t.getExtension("OES_element_index_uint"),floatTexture:t.getExtension("OES_texture_float"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),textureHalfFloat:t.getExtension("OES_texture_half_float"),textureHalfFloatLinear:t.getExtension("OES_texture_half_float_linear")}):2===this.webGLVersion&&Object.assign(this.extensions,e,{colorBufferFloat:t.getExtension("EXT_color_buffer_float")})}handleContextLost(t){t.preventDefault(),setTimeout((()=>{this.gl.isContextLost()&&this.extensions.loseContext&&this.extensions.loseContext.restoreContext()}),0)}handleContextRestored(){this.renderer.runners.contextChange.emit(this.gl)}destroy(){const t=this.renderer.view;this.renderer=null,void 0!==t.removeEventListener&&(t.removeEventListener("webglcontextlost",this.handleContextLost),t.removeEventListener("webglcontextrestored",this.handleContextRestored)),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()}postrender(){this.renderer.objectRenderer.renderingToScreen&&this.gl.flush()}validateContext(t){const e=t.getContextAttributes(),s="WebGL2RenderingContext"in globalThis&&t instanceof globalThis.WebGL2RenderingContext;s&&(this.webGLVersion=2),e&&!e.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");const i=s||!!t.getExtension("OES_element_index_uint");this.supports.uint32Indices=i,i||console.warn("Provided WebGL context does not support 32 index buffer, complex graphics may not render correctly")}}Ni.defaultOptions={context:null,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:"default"},Ni.extension={type:rs.RendererSystem,name:"context"},os.add(Ni);class Li extends gs{upload(t,e,s){const i=t.gl;i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.alphaMode===m.UNPACK);const r=e.realWidth,n=e.realHeight;return s.width===r&&s.height===n?i.texSubImage2D(e.target,0,0,0,r,n,e.format,s.type,this.data):(s.width=r,s.height=n,i.texImage2D(e.target,0,s.internalFormat,r,n,0,e.format,s.type,this.data)),!0}}class Gi{constructor(t,e){this.width=Math.round(t||100),this.height=Math.round(e||100),this.stencil=!1,this.depth=!1,this.dirtyId=0,this.dirtyFormat=0,this.dirtySize=0,this.depthTexture=null,this.colorTextures=[],this.glFramebuffers={},this.disposeRunner=new ms("disposeFramebuffer"),this.multisample=T.NONE}get colorTexture(){return this.colorTextures[0]}addColorTexture(t=0,e){return this.colorTextures[t]=e||new ys(null,{scaleMode:c.NEAREST,resolution:1,mipmap:f.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this}addDepthTexture(t){return this.depthTexture=t||new ys(new Li(null,{width:this.width,height:this.height}),{scaleMode:c.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:f.OFF,format:h.DEPTH_COMPONENT,type:u.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this}enableDepth(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this}enableStencil(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this}resize(t,e){if(t=Math.round(t),e=Math.round(e),t!==this.width||e!==this.height){this.width=t,this.height=e,this.dirtyId++,this.dirtySize++;for(let s=0;s{const s=this.source;this.url=s.src;const i=()=>{this.destroyed||(s.onload=null,s.onerror=null,this.resize(s.width,s.height),this._load=null,this.createBitmap?t(this.process()):t(this))};s.complete&&s.src?i():(s.onload=i,s.onerror=t=>{e(t),this.onError.emit(t)})}))),this._load}process(){const t=this.source;if(null!==this._process)return this._process;if(null!==this.bitmap||!globalThis.createImageBitmap)return Promise.resolve(this);const e=globalThis.createImageBitmap,s=!t.crossOrigin||"anonymous"===t.crossOrigin;return this._process=fetch(t.src,{mode:s?"cors":"no-cors"}).then((t=>t.blob())).then((s=>e(s,0,0,t.width,t.height,{premultiplyAlpha:null===this.alphaMode||this.alphaMode===m.UNPACK?"premultiply":"none"}))).then((t=>this.destroyed?Promise.reject():(this.bitmap=t,this.update(),this._process=null,Promise.resolve(this)))),this._process}upload(t,e,s){if("number"==typeof this.alphaMode&&(e.alphaMode=this.alphaMode),!this.createBitmap)return super.upload(t,e,s);if(!this.bitmap&&(this.process(),!this.bitmap))return!1;if(super.upload(t,e,s,this.bitmap),!this.preserveBitmap){let t=!0;const i=e._glTextures;for(const r in i){const n=i[r];if(n!==s&&n.dirtyId!==e.dirtyId){t=!1;break}}t&&(this.bitmap.close&&this.bitmap.close(),this.bitmap=null)}return!0}dispose(){this.source.onload=null,this.source.onerror=null,super.dispose(),this.bitmap&&(this.bitmap.close(),this.bitmap=null),this._process=null,this._load=null}static test(t){return"undefined"!=typeof HTMLImageElement&&("string"==typeof t||t instanceof HTMLImageElement)}}class Hi{constructor(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.uvsFloat32=new Float32Array(8)}set(t,e,s){const i=e.width,r=e.height;if(s){const e=t.width/2/i,n=t.height/2/r,a=t.x/i+e,o=t.y/r+n;s=Ks.add(s,Ks.NW),this.x0=a+e*Ks.uX(s),this.y0=o+n*Ks.uY(s),s=Ks.add(s,2),this.x1=a+e*Ks.uX(s),this.y1=o+n*Ks.uY(s),s=Ks.add(s,2),this.x2=a+e*Ks.uX(s),this.y2=o+n*Ks.uY(s),s=Ks.add(s,2),this.x3=a+e*Ks.uX(s),this.y3=o+n*Ks.uY(s)}else this.x0=t.x/i,this.y0=t.y/r,this.x1=(t.x+t.width)/i,this.y1=t.y/r,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/r,this.x3=t.x/i,this.y3=(t.y+t.height)/r;this.uvsFloat32[0]=this.x0,this.uvsFloat32[1]=this.y0,this.uvsFloat32[2]=this.x1,this.uvsFloat32[3]=this.y1,this.uvsFloat32[4]=this.x2,this.uvsFloat32[5]=this.y2,this.uvsFloat32[6]=this.x3,this.uvsFloat32[7]=this.y3}toString(){return`[@pixi/core:TextureUvs x0=${this.x0} y0=${this.y0} x1=${this.x1} y1=${this.y1} x2=${this.x2} y2=${this.y2} x3=${this.x3} y3=${this.y3}]`}}const Vi=new Hi;function zi(t){t.destroy=function(){},t.on=function(){},t.once=function(){},t.emit=function(){}}class Wi extends W{constructor(t,e,s,i,r,n,a){if(super(),this.noFrame=!1,e||(this.noFrame=!0,e=new Ls(0,0,1,1)),t instanceof Wi&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=i,this.valid=!1,this._uvs=Vi,this.uvMatrix=null,this.orig=s||e,this._rotate=Number(r||0),!0===r)this._rotate=2;else if(this._rotate%2!=0)throw new Error("attempt to use diamond-shaped UVs. If you are sure, set rotation manually");this.defaultAnchor=n?new Bs(n.x,n.y):new Bs(0,0),this.defaultBorders=a,this._updateID=0,this.textureCacheIds=[],t.valid?this.noFrame?t.valid&&this.onBaseTextureUpdated(t):this.frame=e:t.once("loaded",this.onBaseTextureUpdated,this),this.noFrame&&t.on("update",this.onBaseTextureUpdated,this)}update(){this.baseTexture.resource&&this.baseTexture.resource.update()}onBaseTextureUpdated(t){if(this.noFrame){if(!this.baseTexture.valid)return;this._frame.width=t.width,this._frame.height=t.height,this.valid=!0,this.updateUvs()}else this.frame=this._frame;this.emit("update",this)}destroy(t){if(this.baseTexture){if(t){const{resource:t}=this.baseTexture;(null==t?void 0:t.url)&&je[t.url]&&Wi.removeFromCache(t.url),this.baseTexture.destroy()}this.baseTexture.off("loaded",this.onBaseTextureUpdated,this),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture=null}this._frame=null,this._uvs=null,this.trim=null,this.orig=null,this.valid=!1,Wi.removeFromCache(this),this.textureCacheIds=null}clone(){var t;const e=this._frame.clone(),s=this._frame===this.orig?e:this.orig.clone(),i=new Wi(this.baseTexture,!this.noFrame&&e,s,null==(t=this.trim)?void 0:t.clone(),this.rotate,this.defaultAnchor,this.defaultBorders);return this.noFrame&&(i._frame=e),i}updateUvs(){this._uvs===Vi&&(this._uvs=new Hi),this._uvs.set(this._frame,this.baseTexture,this.rotate),this._updateID++}static from(t,e={},s=A.STRICT_TEXTURE_CACHE){const i="string"==typeof t;let r=null;if(i)r=t;else if(t instanceof ys){if(!t.cacheId){const s=(null==e?void 0:e.pixiIdPrefix)||"pixiid";t.cacheId=`${s}-${Ve()}`,ys.addToCache(t,t.cacheId)}r=t.cacheId}else{if(!t._pixiId){const s=(null==e?void 0:e.pixiIdPrefix)||"pixiid";t._pixiId=`${s}_${Ve()}`}r=t._pixiId}let n=je[r];if(i&&s&&!n)throw new Error(`The cacheId "${r}" does not exist in TextureCache.`);return n||t instanceof ys?!n&&t instanceof ys&&(n=new Wi(t),Wi.addToCache(n,r)):(e.resolution||(e.resolution=ss(t)),n=new Wi(new ys(t,e)),n.baseTexture.cacheId=r,ys.addToCache(n.baseTexture,r),Wi.addToCache(n,r)),n}static fromURL(t,e){const s=Object.assign({autoLoad:!1},null==e?void 0:e.resourceOptions),i=Wi.from(t,Object.assign({resourceOptions:s},e),!1),r=i.baseTexture.resource;return i.baseTexture.valid?Promise.resolve(i):r.load().then((()=>Promise.resolve(i)))}static fromBuffer(t,e,s,i){return new Wi(ys.fromBuffer(t,e,s,i))}static fromLoader(t,e,s,i){const r=new ys(t,Object.assign({scaleMode:ys.defaultOptions.scaleMode,resolution:ss(e)},i)),{resource:n}=r;n instanceof Xi&&(n.url=e);const a=new Wi(r);return s||(s=e),ys.addToCache(a.baseTexture,s),Wi.addToCache(a,s),s!==e&&(ys.addToCache(a.baseTexture,e),Wi.addToCache(a,e)),a.baseTexture.valid?Promise.resolve(a):new Promise((t=>{a.baseTexture.once("loaded",(()=>t(a)))}))}static addToCache(t,e){e&&(t.textureCacheIds.includes(e)||t.textureCacheIds.push(e),je[e]&&je[e]!==t&&console.warn(`Texture added to the cache with an id [${e}] that already had an entry`),je[e]=t)}static removeFromCache(t){if("string"==typeof t){const e=je[t];if(e){const s=e.textureCacheIds.indexOf(t);return s>-1&&e.textureCacheIds.splice(s,1),delete je[t],e}}else if(null!=t&&t.textureCacheIds){for(let e=0;ethis.baseTexture.width,a=s+r>this.baseTexture.height;if(n||a){const t=n&&a?"and":"or",o=`X: ${e} + ${i} = ${e+i} > ${this.baseTexture.width}`,h=`Y: ${s} + ${r} = ${s+r} > ${this.baseTexture.height}`;throw new Error(`Texture Error: frame does not fit inside the base Texture dimensions: ${o} ${t} ${h}`)}this.valid=i&&r&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=t),this.valid&&this.updateUvs()}get rotate(){return this._rotate}set rotate(t){this._rotate=t,this.valid&&this.updateUvs()}get width(){return this.orig.width}get height(){return this.orig.height}castToBaseTexture(){return this.baseTexture}static get EMPTY(){return Wi._EMPTY||(Wi._EMPTY=new Wi(new ys),zi(Wi._EMPTY),zi(Wi._EMPTY.baseTexture)),Wi._EMPTY}static get WHITE(){if(!Wi._WHITE){const t=A.ADAPTER.createCanvas(16,16),e=t.getContext("2d");t.width=16,t.height=16,e.fillStyle="white",e.fillRect(0,0,16,16),Wi._WHITE=new Wi(ys.from(t)),zi(Wi._WHITE),zi(Wi._WHITE.baseTexture)}return Wi._WHITE}}class Yi extends Wi{constructor(t,e){super(t,e),this.valid=!0,this.filterFrame=null,this.filterPoolKey=null,this.updateUvs()}get framebuffer(){return this.baseTexture.framebuffer}get multisample(){return this.framebuffer.multisample}set multisample(t){this.framebuffer.multisample=t}resize(t,e,s=!0){const i=this.baseTexture.resolution,r=Math.round(t*i)/i,n=Math.round(e*i)/i;this.valid=r>0&&n>0,this._frame.width=this.orig.width=r,this._frame.height=this.orig.height=n,s&&this.baseTexture.resize(r,n),this.updateUvs()}setResolution(t){const{baseTexture:e}=this;e.resolution!==t&&(e.setResolution(t),this.resize(e.width,e.height,!1))}static create(t){return new Yi(new Ui(t))}}class ji{constructor(t){this.texturePool={},this.textureOptions=t||{},this.enableFullScreen=!1,this._pixelsWidth=0,this._pixelsHeight=0}createTexture(t,e,s=T.NONE){const i=new Ui(Object.assign({width:t,height:e,resolution:1,multisample:s},this.textureOptions));return new Yi(i)}getOptimalTexture(t,e,s=1,i=T.NONE){let r;t=Math.ceil(t*s-1e-6),e=Math.ceil(e*s-1e-6),this.enableFullScreen&&t===this._pixelsWidth&&e===this._pixelsHeight?r=i>1?-i:-1:(r=((65535&(t=Le(t)))<<16|65535&(e=Le(e)))>>>0,i>1&&(r+=4294967296*i)),this.texturePool[r]||(this.texturePool[r]=[]);let n=this.texturePool[r].pop();return n||(n=this.createTexture(t,e,i)),n.filterPoolKey=r,n.setResolution(s),n}getFilterTexture(t,e,s){const i=this.getOptimalTexture(t.width,t.height,e||t.resolution,s||T.NONE);return i.filterFrame=t.filterFrame,i}returnTexture(t){const e=t.filterPoolKey;t.filterFrame=null,this.texturePool[e].push(t)}returnFilterTexture(t){this.returnTexture(t)}clear(t){if(t=!1!==t)for(const t in this.texturePool){const e=this.texturePool[t];if(e)for(let t=0;t0&&t.height>0;for(const t in this.texturePool){if(!(Number(t)<0))continue;const e=this.texturePool[t];if(e)for(let t=0;t1&&(i=this.getOptimalFilterTexture(t.width,t.height,e.resolution),i.filterFrame=t.filterFrame),s[r].apply(this,t,i,_.CLEAR,e);const n=t;t=i,i=n}s[r].apply(this,t,o.renderTexture,_.BLEND,e),r>1&&e.multisample>1&&this.returnFilterTexture(e.renderTexture),this.returnFilterTexture(t),this.returnFilterTexture(i)}e.clear(),this.statePool.push(e)}bindAndClear(t,e=_.CLEAR){const{renderTexture:s,state:i}=this.renderer;if(t===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,null!=t&&t.filterFrame){const e=this.tempRect;e.x=0,e.y=0,e.width=t.filterFrame.width,e.height=t.filterFrame.height,s.bind(t,t.filterFrame,e)}else t!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?s.bind(t):this.renderer.renderTexture.bind(t,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);const r=1&i.stateId||this.forceClear;(e===_.CLEAR||e===_.BLIT&&r)&&this.renderer.framebuffer.clear(0,0,0,0)}applyFilter(t,e,s,i){const r=this.renderer;r.state.set(t.state),this.bindAndClear(s,i),t.uniforms.uSampler=e,t.uniforms.filterGlobals=this.globalUniforms,r.shader.bind(t),t.legacy=!!t.program.attributeData.aTextureCoord,t.legacy?(this.quadUv.map(e._frame,e.filterFrame),r.geometry.bind(this.quadUv),r.geometry.draw(o.TRIANGLES)):(r.geometry.bind(this.quad),r.geometry.draw(o.TRIANGLE_STRIP))}calculateSpriteMatrix(t,e){const{sourceFrame:s,destinationFrame:i}=this.activeState,{orig:r}=e._texture,n=t.set(i.width,0,0,i.height,s.x,s.y),a=e.worldTransform.copyTo(Hs.TEMP_MATRIX);return a.invert(),n.prepend(a),n.scale(1/r.width,1/r.height),n.translate(e.anchor.x,e.anchor.y),n}destroy(){this.renderer=null,this.texturePool.clear(!1)}getOptimalFilterTexture(t,e,s=1,i=T.NONE){return this.texturePool.getOptimalTexture(t,e,s,i)}getFilterTexture(t,e,s){if("number"==typeof t){const s=t;t=e,e=s}t=t||this.activeState.renderTexture;const i=this.texturePool.getOptimalTexture(t.width,t.height,e||t.resolution,s||T.NONE);return i.filterFrame=t.filterFrame,i}returnFilterTexture(t){this.texturePool.returnTexture(t)}emptyPool(){this.texturePool.clear(!0)}resize(){this.texturePool.setScreenSize(this.renderer.view)}transformAABB(t,e){const s=Zi[0],i=Zi[1],r=Zi[2],n=Zi[3];s.set(e.left,e.top),i.set(e.left,e.bottom),r.set(e.right,e.top),n.set(e.right,e.bottom),t.apply(s,s),t.apply(i,i),t.apply(r,r),t.apply(n,n);const a=Math.min(s.x,i.x,r.x,n.x),o=Math.min(s.y,i.y,r.y,n.y),h=Math.max(s.x,i.x,r.x,n.x),l=Math.max(s.y,i.y,r.y,n.y);e.x=a,e.y=o,e.width=h-a,e.height=l-o}roundFrame(t,e,s,i,r){if(!(t.width<=0||t.height<=0||s.width<=0||s.height<=0)){if(r){const{a:t,b:e,c:s,d:i}=r;if((Math.abs(e)>1e-4||Math.abs(s)>1e-4)&&(Math.abs(t)>1e-4||Math.abs(i)>1e-4))return}(r=r?Ji.copyFrom(r):Ji.identity()).translate(-s.x,-s.y).scale(i.width/s.width,i.height/s.height).translate(i.x,i.y),this.transformAABB(r,t),t.ceil(e),this.transformAABB(r.invert(),t)}}}tr.extension={type:rs.RendererSystem,name:"filter"},os.add(tr);class er{constructor(t){this.framebuffer=t,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=T.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}}const sr=new Ls;class ir{constructor(t){this.renderer=t,this.managedFramebuffers=[],this.unknownFramebuffer=new Gi(10,10),this.msaaSamples=null}contextChange(){this.disposeAll(!0);const t=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new Ls,this.hasMRT=!0,this.writeDepthTexture=!0,1===this.renderer.context.webGLVersion){let e=this.renderer.context.extensions.drawBuffers,s=this.renderer.context.extensions.depthTexture;A.PREFER_ENV===i.WEBGL_LEGACY&&(e=null,s=null),e?t.drawBuffers=t=>e.drawBuffersWEBGL(t):(this.hasMRT=!1,t.drawBuffers=()=>{}),s||(this.writeDepthTexture=!1)}else this.msaaSamples=t.getInternalformatParameter(t.RENDERBUFFER,t.RGBA8,t.SAMPLES)}bind(t,e,s=0){const{gl:i}=this;if(t){const r=t.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(t);this.current!==t&&(this.current=t,i.bindFramebuffer(i.FRAMEBUFFER,r.framebuffer)),r.mipLevel!==s&&(t.dirtyId++,t.dirtyFormat++,r.mipLevel=s),r.dirtyId!==t.dirtyId&&(r.dirtyId=t.dirtyId,r.dirtyFormat!==t.dirtyFormat?(r.dirtyFormat=t.dirtyFormat,r.dirtySize=t.dirtySize,this.updateFramebuffer(t,s)):r.dirtySize!==t.dirtySize&&(r.dirtySize=t.dirtySize,this.resizeFramebuffer(t)));for(let e=0;e>s,i=e.height>>s,r=t/e.width;this.setViewport(e.x*r,e.y*r,t,i)}else{const e=t.width>>s,i=t.height>>s;this.setViewport(0,0,e,i)}}else this.current&&(this.current=null,i.bindFramebuffer(i.FRAMEBUFFER,null)),e?this.setViewport(e.x,e.y,e.width,e.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)}setViewport(t,e,s,i){const r=this.viewport;t=Math.round(t),e=Math.round(e),s=Math.round(s),i=Math.round(i),(r.width!==s||r.height!==i||r.x!==t||r.y!==e)&&(r.x=t,r.y=e,r.width=s,r.height=i,this.gl.viewport(t,e,s,i))}get size(){return this.current?{x:0,y:0,width:this.current.width,height:this.current.height}:{x:0,y:0,width:this.renderer.width,height:this.renderer.height}}clear(t,e,s,i,r=n.COLOR|n.DEPTH){const{gl:a}=this;a.clearColor(t,e,s,i),a.clear(r)}initFramebuffer(t){const{gl:e}=this,s=new er(e.createFramebuffer());return s.multisample=this.detectSamples(t.multisample),t.glFramebuffers[this.CONTEXT_UID]=s,this.managedFramebuffers.push(t),t.disposeRunner.add(this),s}resizeFramebuffer(t){const{gl:e}=this,s=t.glFramebuffers[this.CONTEXT_UID];s.stencil&&(e.bindRenderbuffer(e.RENDERBUFFER,s.stencil),s.msaaBuffer?e.renderbufferStorageMultisample(e.RENDERBUFFER,s.multisample,e.DEPTH24_STENCIL8,t.width,t.height):e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,t.width,t.height));const i=t.colorTextures;let r=i.length;e.drawBuffers||(r=Math.min(r,1));for(let n=0;n1&&this.canMultisampleFramebuffer(t)?i.msaaBuffer=i.msaaBuffer||s.createRenderbuffer():i.msaaBuffer&&(s.deleteRenderbuffer(i.msaaBuffer),i.msaaBuffer=null,i.blitFramebuffer&&(i.blitFramebuffer.dispose(),i.blitFramebuffer=null));const a=[];for(let o=0;o1&&s.drawBuffers(a),t.depthTexture&&this.writeDepthTexture){const i=t.depthTexture;this.renderer.texture.bind(i,0),s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,i._glTextures[this.CONTEXT_UID].texture,e)}!t.stencil&&!t.depth||t.depthTexture&&this.writeDepthTexture?i.stencil&&(s.deleteRenderbuffer(i.stencil),i.stencil=null):(i.stencil=i.stencil||s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,i.stencil),i.msaaBuffer?s.renderbufferStorageMultisample(s.RENDERBUFFER,i.multisample,s.DEPTH24_STENCIL8,t.width,t.height):s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_STENCIL,t.width,t.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.RENDERBUFFER,i.stencil))}canMultisampleFramebuffer(t){return 1!==this.renderer.context.webGLVersion&&t.colorTextures.length<=1&&!t.depthTexture}detectSamples(t){const{msaaSamples:e}=this;let s=T.NONE;if(t<=1||null===e)return s;for(let i=0;i=0&&this.managedFramebuffers.splice(r,1),t.disposeRunner.remove(this),e||(i.deleteFramebuffer(s.framebuffer),s.msaaBuffer&&i.deleteRenderbuffer(s.msaaBuffer),s.stencil&&i.deleteRenderbuffer(s.stencil)),s.blitFramebuffer&&this.disposeFramebuffer(s.blitFramebuffer,e)}disposeAll(t){const e=this.managedFramebuffers;this.managedFramebuffers=[];for(let s=0;se.createVertexArrayOES(),t.bindVertexArray=t=>e.bindVertexArrayOES(t),t.deleteVertexArray=t=>e.deleteVertexArrayOES(t)):(this.hasVao=!1,t.createVertexArray=()=>null,t.bindVertexArray=()=>null,t.deleteVertexArray=()=>null)}if(2!==e.webGLVersion){const e=t.getExtension("ANGLE_instanced_arrays");e?(t.vertexAttribDivisor=(t,s)=>e.vertexAttribDivisorANGLE(t,s),t.drawElementsInstanced=(t,s,i,r,n)=>e.drawElementsInstancedANGLE(t,s,i,r,n),t.drawArraysInstanced=(t,s,i,r)=>e.drawArraysInstancedANGLE(t,s,i,r)):this.hasInstance=!1}this.canUseUInt32ElementIndex=2===e.webGLVersion||!!e.extensions.uint32ElementIndex}bind(t,e){e=e||this.renderer.shader.shader;const{gl:s}=this;let i=t.glVertexArrayObjects[this.CONTEXT_UID],r=!1;i||(this.managedGeometries[t.id]=t,t.disposeRunner.add(this),t.glVertexArrayObjects[this.CONTEXT_UID]=i={},r=!0);const n=i[e.program.id]||this.initGeometryVao(t,e,r);this._activeGeometry=t,this._activeVao!==n&&(this._activeVao=n,this.hasVao?s.bindVertexArray(n):this.activateVao(t,e.program)),this.updateBuffers()}reset(){this.unbind()}updateBuffers(){const t=this._activeGeometry,e=this.renderer.buffer;for(let s=0;s0?this.maskStack[this.maskStack.length-1]._colorMask:15;s!==e&&this.renderer.gl.colorMask(0!=(1&s),0!=(2&s),0!=(4&s),0!=(8&s))}destroy(){this.renderer=null}}ur.extension={type:rs.RendererSystem,name:"mask"},os.add(ur);class dr{constructor(t){this.renderer=t,this.maskStack=[],this.glConst=0}getStackLength(){return this.maskStack.length}setMaskStack(t){const{gl:e}=this.renderer,s=this.getStackLength();this.maskStack=t;const i=this.getStackLength();i!==s&&(0===i?e.disable(this.glConst):(e.enable(this.glConst),this._useCurrent()))}_useCurrent(){}destroy(){this.renderer=null,this.maskStack=null}}const cr=new Hs,pr=[],fr=class extends dr{constructor(t){super(t),this.glConst=A.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST}getStackLength(){const t=this.maskStack[this.maskStack.length-1];return t?t._scissorCounter:0}calcScissorRect(t){var e;if(t._scissorRectLocal)return;const s=t._scissorRect,{maskObject:i}=t,{renderer:r}=this,n=r.renderTexture,a=i.getBounds(!0,null!=(e=pr.pop())?e:new Ls);this.roundFrameToPixels(a,n.current?n.current.resolution:r.resolution,n.sourceFrame,n.destinationFrame,r.projection.transform),s&&a.fit(s),t._scissorRectLocal=a}static isMatrixRotated(t){if(!t)return!1;const{a:e,b:s,c:i,d:r}=t;return(Math.abs(s)>1e-4||Math.abs(i)>1e-4)&&(Math.abs(e)>1e-4||Math.abs(r)>1e-4)}testScissor(t){const{maskObject:e}=t;if(!e.isFastRect||!e.isFastRect()||fr.isMatrixRotated(e.worldTransform)||fr.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(t);const s=t._scissorRectLocal;return s.width>0&&s.height>0}roundFrameToPixels(t,e,s,i,r){fr.isMatrixRotated(r)||((r=r?cr.copyFrom(r):cr.identity()).translate(-s.x,-s.y).scale(i.width/s.width,i.height/s.height).translate(i.x,i.y),this.renderer.filter.transformAABB(r,t),t.fit(i),t.x=Math.round(t.x*e),t.y=Math.round(t.y*e),t.width=Math.round(t.width*e),t.height=Math.round(t.height*e))}push(t){t._scissorRectLocal||this.calcScissorRect(t);const{gl:e}=this.renderer;t._scissorRect||e.enable(e.SCISSOR_TEST),t._scissorCounter++,t._scissorRect=t._scissorRectLocal,this._useCurrent()}pop(t){const{gl:e}=this.renderer;t&&pr.push(t._scissorRectLocal),this.getStackLength()>0?this._useCurrent():e.disable(e.SCISSOR_TEST)}_useCurrent(){const t=this.maskStack[this.maskStack.length-1]._scissorRect;let e;e=this.renderer.renderTexture.current?t.y:this.renderer.height-t.height-t.y,this.renderer.gl.scissor(t.x,e,t.width,t.height)}};let mr=fr;mr.extension={type:rs.RendererSystem,name:"scissor"},os.add(mr);class _r extends dr{constructor(t){super(t),this.glConst=A.ADAPTER.getWebGLRenderingContext().STENCIL_TEST}getStackLength(){const t=this.maskStack[this.maskStack.length-1];return t?t._stencilCounter:0}push(t){const e=t.maskObject,{gl:s}=this.renderer,i=t._stencilCounter;0===i&&(this.renderer.framebuffer.forceStencil(),s.clearStencil(0),s.clear(s.STENCIL_BUFFER_BIT),s.enable(s.STENCIL_TEST)),t._stencilCounter++;const r=t._colorMask;0!==r&&(t._colorMask=0,s.colorMask(!1,!1,!1,!1)),s.stencilFunc(s.EQUAL,i,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.INCR),e.renderable=!0,e.render(this.renderer),this.renderer.batch.flush(),e.renderable=!1,0!==r&&(t._colorMask=r,s.colorMask(0!=(1&r),0!=(2&r),0!=(4&r),0!=(8&r))),this._useCurrent()}pop(t){const e=this.renderer.gl;if(0===this.getStackLength())e.disable(e.STENCIL_TEST);else{const s=0!==this.maskStack.length?this.maskStack[this.maskStack.length-1]:null,i=s?s._colorMask:15;0!==i&&(s._colorMask=0,e.colorMask(!1,!1,!1,!1)),e.stencilOp(e.KEEP,e.KEEP,e.DECR),t.renderable=!0,t.render(this.renderer),this.renderer.batch.flush(),t.renderable=!1,0!==i&&(s._colorMask=i,e.colorMask(0!=(1&i),0!=(2&i),0!=(4&i),0!=(8&i))),this._useCurrent()}}_useCurrent(){const t=this.renderer.gl;t.stencilFunc(t.EQUAL,this.getStackLength(),4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP)}}_r.extension={type:rs.RendererSystem,name:"stencil"},os.add(_r);class gr{constructor(t){this.renderer=t,this.plugins={},Object.defineProperties(this.plugins,{extract:{enumerable:!1,get:()=>(Kt("7.0.0","renderer.plugins.extract has moved to renderer.extract"),t.extract)},prepare:{enumerable:!1,get:()=>(Kt("7.0.0","renderer.plugins.prepare has moved to renderer.prepare"),t.prepare)},interaction:{enumerable:!1,get:()=>(Kt("7.0.0","renderer.plugins.interaction has been deprecated, use renderer.events"),t.events)}})}init(){const t=this.rendererPlugins;for(const e in t)this.plugins[e]=new t[e](this.renderer)}destroy(){for(const t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null}}gr.extension={type:[rs.RendererSystem,rs.CanvasRendererSystem],name:"_plugin"},os.add(gr);class xr{constructor(t){this.renderer=t,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new Hs,this.transform=null}update(t,e,s,i){this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame,s,i),this.transform&&this.projectionMatrix.append(this.transform);const r=this.renderer;r.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,r.globalUniforms.update(),r.shader.shader&&r.shader.syncUniformGroup(r.shader.shader.uniforms.globals)}calculateProjection(t,e,s,i){const r=this.projectionMatrix,n=i?-1:1;r.identity(),r.a=1/e.width*2,r.d=n*(1/e.height*2),r.tx=-1-e.x*r.a,r.ty=-n-e.y*r.d}setTransform(t){}destroy(){this.renderer=null}}xr.extension={type:rs.RendererSystem,name:"projection"},os.add(xr);const vr=new Js;class yr{constructor(t){this.renderer=t,this._tempMatrix=new Hs}generateTexture(t,e){const s=e||{},{region:i}=s,r=zn(s,["region"]),n=i||t.getLocalBounds(null,!0);0===n.width&&(n.width=1),0===n.height&&(n.height=1);const a=Yi.create(bt({width:n.width,height:n.height},r));this._tempMatrix.tx=-n.x,this._tempMatrix.ty=-n.y;const o=t.transform;return t.transform=vr,this.renderer.render(t,{renderTexture:a,transform:this._tempMatrix,skipUpdateTransform:!!t.parent,blit:!0}),t.transform=o,a}destroy(){}}yr.extension={type:[rs.RendererSystem,rs.CanvasRendererSystem],name:"textureGenerator"},os.add(yr);const Tr=new Ls,br=new Ls;class Er{constructor(t){this.renderer=t,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new Ls,this.destinationFrame=new Ls,this.viewportFrame=new Ls}contextChange(){var t;const e=null==(t=this.renderer)?void 0:t.gl.getContextAttributes();this._rendererPremultipliedAlpha=!!(e&&e.alpha&&e.premultipliedAlpha)}bind(t=null,e,s){const i=this.renderer;let r,n,a;this.current=t,t?(r=t.baseTexture,a=r.resolution,e||(Tr.width=t.frame.width,Tr.height=t.frame.height,e=Tr),s||(br.x=t.frame.x,br.y=t.frame.y,br.width=e.width,br.height=e.height,s=br),n=r.framebuffer):(a=i.resolution,e||(Tr.width=i._view.screen.width,Tr.height=i._view.screen.height,e=Tr),s||((s=Tr).width=e.width,s.height=e.height));const o=this.viewportFrame;o.x=s.x*a,o.y=s.y*a,o.width=s.width*a,o.height=s.height*a,t||(o.y=i.view.height-(o.y+o.height)),o.ceil(),this.renderer.framebuffer.bind(n,o),this.renderer.projection.update(s,e,a,!n),t?this.renderer.mask.setMaskStack(r.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(e),this.destinationFrame.copyFrom(s)}clear(t,e){const s=this.current?this.current.baseTexture.clear:this.renderer.background.backgroundColor,i=Ie.shared.setValue(t||s);(this.current&&this.current.baseTexture.alphaMode>0||!this.current&&this._rendererPremultipliedAlpha)&&i.premultiply(i.alpha);const r=this.destinationFrame,n=this.current?this.current.baseTexture:this.renderer._view.screen,a=r.width!==n.width||r.height!==n.height;if(a){let{x:t,y:e,width:s,height:i}=this.viewportFrame;t=Math.round(t),e=Math.round(e),s=Math.round(s),i=Math.round(i),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(t,e,s,i)}this.renderer.framebuffer.clear(i.red,i.green,i.blue,i.alpha,e),a&&this.renderer.scissor.pop()}resize(){this.bind(null)}reset(){this.bind(null)}destroy(){this.renderer=null}}Er.extension={type:rs.RendererSystem,name:"renderTexture"},os.add(Er);class Ar{constructor(t,e){this.program=t,this.uniformData=e,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}destroy(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null}}function Rr(t,e){var s;const i=ti(t,t.VERTEX_SHADER,e.vertexSrc),r=ti(t,t.FRAGMENT_SHADER,e.fragmentSrc),n=t.createProgram();t.attachShader(n,i),t.attachShader(n,r);const a=null==(s=e.extra)?void 0:s.transformFeedbackVaryings;if(a&&("function"!=typeof t.transformFeedbackVaryings?console.warn("TransformFeedback is not supported but TransformFeedbackVaryings are given."):t.transformFeedbackVaryings(n,a.names,"separate"===a.bufferMode?t.SEPARATE_ATTRIBS:t.INTERLEAVED_ATTRIBS)),t.linkProgram(n),t.getProgramParameter(n,t.LINK_STATUS)||function(t,e,s,i){t.getProgramParameter(e,t.LINK_STATUS)||(t.getShaderParameter(s,t.COMPILE_STATUS)||ui(t,s),t.getShaderParameter(i,t.COMPILE_STATUS)||ui(t,i),console.error("PixiJS Error: Could not initialize shader."),""!==t.getProgramInfoLog(e)&&console.warn("PixiJS Warning: gl.getProgramInfoLog()",t.getProgramInfoLog(e)))}(t,n,i,r),e.attributeData=function(t,e){const s={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;rt>e?1:-1));for(let i=0;i({data:t,offset:0,dataLen:0,dirty:0})));let s=0,i=0,r=0;for(let t=0;t1&&(s=Math.max(s,16)*n.data.size),n.dataLen=s,i%s!=0&&i<16){const t=i%s%16;i+=t,r+=t}i+s>16?(r=16*Math.ceil(r/16),n.offset=r,r+=s,i=s):(n.offset=r,i+=s,r+=s)}return r=16*Math.ceil(r/16),{uboElements:e,size:r}}function Cr(t,e){const s=[];for(const i in t)e[i]&&s.push(e[i]);return s.sort(((t,e)=>t.index-e.index)),s}function Dr(t,e){if(!t.autoManage)return{size:0,syncFunc:Sr};const s=Cr(t.uniforms,e),{uboElements:i,size:r}=Mr(s),n=["\n var v = null;\n var v2 = null;\n var cv = null;\n var t = 0;\n var gl = renderer.gl\n var index = 0;\n var data = buffer.data;\n "];for(let e=0;e1){const t=ci(s.data.type),e=Math.max(Ir[s.data.type]/16,1),i=t/e,r=(4-i%4)%4;n.push(`\n cv = ud.${a}.value;\n v = uv.${a};\n offset = ${s.offset/4};\n\n t = 0;\n\n for(var i=0; i < ${s.data.size*e}; i++)\n {\n for(var j = 0; j < ${i}; j++)\n {\n data[offset++] = v[t++];\n }\n offset += ${r};\n }\n\n `)}else{const t=wr[s.data.type];n.push(`\n cv = ud.${a}.value;\n v = uv.${a};\n offset = ${s.offset/4};\n ${t};\n `)}}return n.push("\n renderer.buffer.update(buffer);\n "),{size:r,syncFunc:new Function("ud","uv","renderer","syncData","buffer",n.join("\n"))}}let Pr=0;const Or={textureCount:0,uboCount:0};class Fr{constructor(t){this.destroyed=!1,this.renderer=t,this.systemCheck(),this.gl=null,this.shader=null,this.program=null,this.cache={},this._uboCache={},this.id=Pr++}systemCheck(){if(!xi())throw new Error("Current environment does not allow unsafe-eval, please use @pixi/unsafe-eval module to enable support.")}contextChange(t){this.gl=t,this.reset()}bind(t,e){t.disposeRunner.add(this),t.uniforms.globals=this.renderer.globalUniforms;const s=t.program,i=s.glPrograms[this.renderer.CONTEXT_UID]||this.generateProgram(t);return this.shader=t,this.program!==s&&(this.program=s,this.gl.useProgram(i.program)),e||(Or.textureCount=0,Or.uboCount=0,this.syncUniformGroup(t.uniformGroup,Or)),i}setUniforms(t){const e=this.shader.program,s=e.glPrograms[this.renderer.CONTEXT_UID];e.syncUniforms(s.uniformData,t,this.renderer)}syncUniformGroup(t,e){const s=this.getGlProgram();(!t.static||t.dirtyId!==s.uniformDirtyGroups[t.id])&&(s.uniformDirtyGroups[t.id]=t.dirtyId,this.syncUniforms(t,s,e))}syncUniforms(t,e,s){(t.syncUniforms[this.shader.program.id]||this.createSyncGroups(t))(e.uniformData,t.uniforms,this.renderer,s)}createSyncGroups(t){const e=this.getSignature(t,this.shader.program.uniformData,"u");return this.cache[e]||(this.cache[e]=function(t,e){var s;const i=["\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n "];for(const r in t.uniforms){const n=e[r];if(!n){null!=(s=t.uniforms[r])&&s.group&&(t.uniforms[r].ubo?i.push(`\n renderer.shader.syncUniformBufferGroup(uv.${r}, '${r}');\n `):i.push(`\n renderer.shader.syncUniformGroup(uv.${r}, syncData);\n `));continue}const a=t.uniforms[r];let o=!1;for(let t=0;t>=1,s++;this.stateId=t.data}for(let e=0;et.systems[e])),i=[...s,...Object.keys(t.systems).filter((t=>!s.includes(t)))];for(const e of i)this.addSystem(t.systems[e],e)}addRunners(...t){t.forEach((t=>{this.runners[t]=new ms(t)}))}addSystem(t,e){const s=new t(this);if(this[e])throw new Error(`Whoops! The name "${e}" is already in use`);this[e]=s,this._systemsHash[e]=s;for(const t in this.runners)this.runners[t].add(s);return this}emitWithCustomOptions(t,e){const s=Object.keys(this._systemsHash);t.items.forEach((i=>{const r=s.find((t=>this._systemsHash[t]===i));i[t.name](e[r])}))}destroy(){Object.values(this.runners).forEach((t=>{t.destroy()})),this._systemsHash={}}}const Ur=class{constructor(t){this.renderer=t,this.count=0,this.checkCount=0,this.maxIdle=Ur.defaultMaxIdle,this.checkCountMax=Ur.defaultCheckCountMax,this.mode=Ur.defaultMode}postrender(){!this.renderer.objectRenderer.renderingToScreen||(this.count++,this.mode!==g.MANUAL&&(this.checkCount++,this.checkCount>this.checkCountMax&&(this.checkCount=0,this.run())))}run(){const t=this.renderer.texture,e=t.managedTextures;let s=!1;for(let i=0;ithis.maxIdle&&(t.destroyTexture(r,!0),e[i]=null,s=!0)}if(s){let t=0;for(let s=0;s=0;e--)this.unload(t.children[e])}destroy(){this.renderer=null}};let kr=Ur;kr.defaultMode=g.AUTO,kr.defaultMaxIdle=3600,kr.defaultCheckCountMax=600,kr.extension={type:rs.RendererSystem,name:"textureGC"},os.add(kr);class Xr{constructor(t){this.texture=t,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=u.UNSIGNED_BYTE,this.internalFormat=h.RGBA,this.samplerType=0}}class Hr{constructor(t){this.renderer=t,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new ys,this.hasIntegerTextures=!1}contextChange(){const t=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=function(t){let e;return e="WebGL2RenderingContext"in globalThis&&t instanceof globalThis.WebGL2RenderingContext?{[u.UNSIGNED_BYTE]:{[h.RGBA]:t.RGBA8,[h.RGB]:t.RGB8,[h.RG]:t.RG8,[h.RED]:t.R8,[h.RGBA_INTEGER]:t.RGBA8UI,[h.RGB_INTEGER]:t.RGB8UI,[h.RG_INTEGER]:t.RG8UI,[h.RED_INTEGER]:t.R8UI,[h.ALPHA]:t.ALPHA,[h.LUMINANCE]:t.LUMINANCE,[h.LUMINANCE_ALPHA]:t.LUMINANCE_ALPHA},[u.BYTE]:{[h.RGBA]:t.RGBA8_SNORM,[h.RGB]:t.RGB8_SNORM,[h.RG]:t.RG8_SNORM,[h.RED]:t.R8_SNORM,[h.RGBA_INTEGER]:t.RGBA8I,[h.RGB_INTEGER]:t.RGB8I,[h.RG_INTEGER]:t.RG8I,[h.RED_INTEGER]:t.R8I},[u.UNSIGNED_SHORT]:{[h.RGBA_INTEGER]:t.RGBA16UI,[h.RGB_INTEGER]:t.RGB16UI,[h.RG_INTEGER]:t.RG16UI,[h.RED_INTEGER]:t.R16UI,[h.DEPTH_COMPONENT]:t.DEPTH_COMPONENT16},[u.SHORT]:{[h.RGBA_INTEGER]:t.RGBA16I,[h.RGB_INTEGER]:t.RGB16I,[h.RG_INTEGER]:t.RG16I,[h.RED_INTEGER]:t.R16I},[u.UNSIGNED_INT]:{[h.RGBA_INTEGER]:t.RGBA32UI,[h.RGB_INTEGER]:t.RGB32UI,[h.RG_INTEGER]:t.RG32UI,[h.RED_INTEGER]:t.R32UI,[h.DEPTH_COMPONENT]:t.DEPTH_COMPONENT24},[u.INT]:{[h.RGBA_INTEGER]:t.RGBA32I,[h.RGB_INTEGER]:t.RGB32I,[h.RG_INTEGER]:t.RG32I,[h.RED_INTEGER]:t.R32I},[u.FLOAT]:{[h.RGBA]:t.RGBA32F,[h.RGB]:t.RGB32F,[h.RG]:t.RG32F,[h.RED]:t.R32F,[h.DEPTH_COMPONENT]:t.DEPTH_COMPONENT32F},[u.HALF_FLOAT]:{[h.RGBA]:t.RGBA16F,[h.RGB]:t.RGB16F,[h.RG]:t.RG16F,[h.RED]:t.R16F},[u.UNSIGNED_SHORT_5_6_5]:{[h.RGB]:t.RGB565},[u.UNSIGNED_SHORT_4_4_4_4]:{[h.RGBA]:t.RGBA4},[u.UNSIGNED_SHORT_5_5_5_1]:{[h.RGBA]:t.RGB5_A1},[u.UNSIGNED_INT_2_10_10_10_REV]:{[h.RGBA]:t.RGB10_A2,[h.RGBA_INTEGER]:t.RGB10_A2UI},[u.UNSIGNED_INT_10F_11F_11F_REV]:{[h.RGB]:t.R11F_G11F_B10F},[u.UNSIGNED_INT_5_9_9_9_REV]:{[h.RGB]:t.RGB9_E5},[u.UNSIGNED_INT_24_8]:{[h.DEPTH_STENCIL]:t.DEPTH24_STENCIL8},[u.FLOAT_32_UNSIGNED_INT_24_8_REV]:{[h.DEPTH_STENCIL]:t.DEPTH32F_STENCIL8}}:{[u.UNSIGNED_BYTE]:{[h.RGBA]:t.RGBA,[h.RGB]:t.RGB,[h.ALPHA]:t.ALPHA,[h.LUMINANCE]:t.LUMINANCE,[h.LUMINANCE_ALPHA]:t.LUMINANCE_ALPHA},[u.UNSIGNED_SHORT_5_6_5]:{[h.RGB]:t.RGB},[u.UNSIGNED_SHORT_4_4_4_4]:{[h.RGBA]:t.RGBA},[u.UNSIGNED_SHORT_5_5_5_1]:{[h.RGBA]:t.RGBA}},e}(t);const e=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=e;for(let t=0;t=0;--s){const t=e[s];t&&t._glTextures[i].samplerType!==d.FLOAT&&this.renderer.texture.unbind(t)}}initTexture(t){const e=new Xr(this.gl.createTexture());return e.dirtyId=-1,t._glTextures[this.CONTEXT_UID]=e,this.managedTextures.push(t),t.on("dispose",this.destroyTexture,this),e}initTextureType(t,e){var s,i;e.internalFormat=null!=(i=null==(s=this.internalFormats[t.type])?void 0:s[t.format])?i:t.format,2===this.webGLVersion&&t.type===u.HALF_FLOAT?e.type=this.gl.HALF_FLOAT:e.type=t.type}updateTexture(t){var e;const s=t._glTextures[this.CONTEXT_UID];if(!s)return;const i=this.renderer;if(this.initTextureType(t,s),null!=(e=t.resource)&&e.upload(i,t,s))s.samplerType!==d.FLOAT&&(this.hasIntegerTextures=!0);else{const e=t.realWidth,r=t.realHeight,n=i.gl;(s.width!==e||s.height!==r||s.dirtyId<0)&&(s.width=e,s.height=r,n.texImage2D(t.target,0,s.internalFormat,e,r,0,t.format,s.type,null))}t.dirtyStyleId!==s.dirtyStyleId&&this.updateTextureStyle(t),s.dirtyId=t.dirtyId}destroyTexture(t,e){const{gl:s}=this;if((t=t.castToBaseTexture())._glTextures[this.CONTEXT_UID]&&(this.unbind(t),s.deleteTexture(t._glTextures[this.CONTEXT_UID].texture),t.off("dispose",this.destroyTexture,this),delete t._glTextures[this.CONTEXT_UID],!e)){const e=this.managedTextures.indexOf(t);-1!==e&&ke(this.managedTextures,e,1)}}updateTextureStyle(t){var e;const s=t._glTextures[this.CONTEXT_UID];!s||(t.mipmap!==f.POW2&&2===this.webGLVersion||t.isPowerOfTwo?s.mipmap=t.mipmap>=1:s.mipmap=!1,2===this.webGLVersion||t.isPowerOfTwo?s.wrapMode=t.wrapMode:s.wrapMode=p.CLAMP,null!=(e=t.resource)&&e.style(this.renderer,t,s)||this.setStyle(t,s),s.dirtyStyleId=t.dirtyStyleId)}setStyle(t,e){const s=this.gl;if(e.mipmap&&t.mipmap!==f.ON_MANUAL&&s.generateMipmap(t.target),s.texParameteri(t.target,s.TEXTURE_WRAP_S,e.wrapMode),s.texParameteri(t.target,s.TEXTURE_WRAP_T,e.wrapMode),e.mipmap){s.texParameteri(t.target,s.TEXTURE_MIN_FILTER,t.scaleMode===c.LINEAR?s.LINEAR_MIPMAP_LINEAR:s.NEAREST_MIPMAP_NEAREST);const e=this.renderer.context.extensions.anisotropicFiltering;if(e&&t.anisotropicLevel>0&&t.scaleMode===c.LINEAR){const i=Math.min(t.anisotropicLevel,s.getParameter(e.MAX_TEXTURE_MAX_ANISOTROPY_EXT));s.texParameterf(t.target,e.TEXTURE_MAX_ANISOTROPY_EXT,i)}}else s.texParameteri(t.target,s.TEXTURE_MIN_FILTER,t.scaleMode===c.LINEAR?s.LINEAR:s.NEAREST);s.texParameteri(t.target,s.TEXTURE_MAG_FILTER,t.scaleMode===c.LINEAR?s.LINEAR:s.NEAREST)}destroy(){this.renderer=null}}Hr.extension={type:rs.RendererSystem,name:"texture"},os.add(Hr);class Vr{constructor(t){this.renderer=t}contextChange(){this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(t){const{gl:e,CONTEXT_UID:s}=this,i=t._glTransformFeedbacks[s]||this.createGLTransformFeedback(t);e.bindTransformFeedback(e.TRANSFORM_FEEDBACK,i)}unbind(){const{gl:t}=this;t.bindTransformFeedback(t.TRANSFORM_FEEDBACK,null)}beginTransformFeedback(t,e){const{gl:s,renderer:i}=this;e&&i.shader.bind(e),s.beginTransformFeedback(t)}endTransformFeedback(){const{gl:t}=this;t.endTransformFeedback()}createGLTransformFeedback(t){const{gl:e,renderer:s,CONTEXT_UID:i}=this,r=e.createTransformFeedback();t._glTransformFeedbacks[i]=r,e.bindTransformFeedback(e.TRANSFORM_FEEDBACK,r);for(let r=0;rys.defaultOptions.wrapMode,set(t){Kt("7.1.0","settings.WRAP_MODE is deprecated, use BaseTexture.defaultOptions.wrapMode"),ys.defaultOptions.wrapMode=t}},SCALE_MODE:{get:()=>ys.defaultOptions.scaleMode,set(t){Kt("7.1.0","settings.SCALE_MODE is deprecated, use BaseTexture.defaultOptions.scaleMode"),ys.defaultOptions.scaleMode=t}},MIPMAP_TEXTURES:{get:()=>ys.defaultOptions.mipmap,set(t){Kt("7.1.0","settings.MIPMAP_TEXTURES is deprecated, use BaseTexture.defaultOptions.mipmap"),ys.defaultOptions.mipmap=t}},ANISOTROPIC_LEVEL:{get:()=>ys.defaultOptions.anisotropicLevel,set(t){Kt("7.1.0","settings.ANISOTROPIC_LEVEL is deprecated, use BaseTexture.defaultOptions.anisotropicLevel"),ys.defaultOptions.anisotropicLevel=t}},FILTER_RESOLUTION:{get:()=>(Kt("7.1.0","settings.FILTER_RESOLUTION is deprecated, use Filter.defaultResolution"),Pi.defaultResolution),set(t){Pi.defaultResolution=t}},FILTER_MULTISAMPLE:{get:()=>(Kt("7.1.0","settings.FILTER_MULTISAMPLE is deprecated, use Filter.defaultMultisample"),Pi.defaultMultisample),set(t){Pi.defaultMultisample=t}},SPRITE_MAX_TEXTURES:{get:()=>Ci.defaultMaxTextures,set(t){Kt("7.1.0","settings.SPRITE_MAX_TEXTURES is deprecated, use BatchRenderer.defaultMaxTextures"),Ci.defaultMaxTextures=t}},SPRITE_BATCH_SIZE:{get:()=>Ci.defaultBatchSize,set(t){Kt("7.1.0","settings.SPRITE_BATCH_SIZE is deprecated, use BatchRenderer.defaultBatchSize"),Ci.defaultBatchSize=t}},CAN_UPLOAD_SAME_BUFFER:{get:()=>Ci.canUploadSameBuffer,set(t){Kt("7.1.0","settings.CAN_UPLOAD_SAME_BUFFER is deprecated, use BatchRenderer.canUploadSameBuffer"),Ci.canUploadSameBuffer=t}},GC_MODE:{get:()=>kr.defaultMode,set(t){Kt("7.1.0","settings.GC_MODE is deprecated, use TextureGCSystem.defaultMode"),kr.defaultMode=t}},GC_MAX_IDLE:{get:()=>kr.defaultMaxIdle,set(t){Kt("7.1.0","settings.GC_MAX_IDLE is deprecated, use TextureGCSystem.defaultMaxIdle"),kr.defaultMaxIdle=t}},GC_MAX_CHECK_COUNT:{get:()=>kr.defaultCheckCountMax,set(t){Kt("7.1.0","settings.GC_MAX_CHECK_COUNT is deprecated, use TextureGCSystem.defaultCheckCountMax"),kr.defaultCheckCountMax=t}},PRECISION_VERTEX:{get:()=>bi.defaultVertexPrecision,set(t){Kt("7.1.0","settings.PRECISION_VERTEX is deprecated, use Program.defaultVertexPrecision"),bi.defaultVertexPrecision=t}},PRECISION_FRAGMENT:{get:()=>bi.defaultFragmentPrecision,set(t){Kt("7.1.0","settings.PRECISION_FRAGMENT is deprecated, use Program.defaultFragmentPrecision"),bi.defaultFragmentPrecision=t}}});var Wr=(t=>(t[t.INTERACTION=50]="INTERACTION",t[t.HIGH=25]="HIGH",t[t.NORMAL=0]="NORMAL",t[t.LOW=-25]="LOW",t[t.UTILITY=-50]="UTILITY",t))(Wr||{});class Yr{constructor(t,e=null,s=0,i=!1){this.next=null,this.previous=null,this._destroyed=!1,this.fn=t,this.context=e,this.priority=s,this.once=i}match(t,e=null){return this.fn===t&&this.context===e}emit(t){this.fn&&(this.context?this.fn.call(this.context,t):this.fn(t));const e=this.next;return this.once&&this.destroy(!0),this._destroyed&&(this.next=null),e}connect(t){this.previous=t,t.next&&(t.next.previous=this),this.next=t.next,t.next=this}destroy(t=!1){this._destroyed=!0,this.fn=null,this.context=null,this.previous&&(this.previous.next=this.next),this.next&&(this.next.previous=this.previous);const e=this.next;return this.next=t?null:e,this.previous=null,e}}const jr=class{constructor(){this.autoStart=!1,this.deltaTime=1,this.lastTime=-1,this.speed=1,this.started=!1,this._requestId=null,this._maxElapsedMS=100,this._minElapsedMS=0,this._protected=!1,this._lastFrame=-1,this._head=new Yr(null,null,1/0),this.deltaMS=1/jr.targetFPMS,this.elapsedMS=1/jr.targetFPMS,this._tick=t=>{this._requestId=null,this.started&&(this.update(t),this.started&&null===this._requestId&&this._head.next&&(this._requestId=requestAnimationFrame(this._tick)))}}_requestIfNeeded(){null===this._requestId&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))}_cancelIfNeeded(){null!==this._requestId&&(cancelAnimationFrame(this._requestId),this._requestId=null)}_startIfPossible(){this.started?this._requestIfNeeded():this.autoStart&&this.start()}add(t,e,s=Wr.NORMAL){return this._addListener(new Yr(t,e,s))}addOnce(t,e,s=Wr.NORMAL){return this._addListener(new Yr(t,e,s,!0))}_addListener(t){let e=this._head.next,s=this._head;if(e){for(;e;){if(t.priority>e.priority){t.connect(s);break}s=e,e=e.next}t.previous||t.connect(s)}else t.connect(s);return this._startIfPossible(),this}remove(t,e){let s=this._head.next;for(;s;)s=s.match(t,e)?s.destroy():s.next;return this._head.next||this._cancelIfNeeded(),this}get count(){if(!this._head)return 0;let t=0,e=this._head;for(;e=e.next;)t++;return t}start(){this.started||(this.started=!0,this._requestIfNeeded())}stop(){this.started&&(this.started=!1,this._cancelIfNeeded())}destroy(){if(!this._protected){this.stop();let t=this._head.next;for(;t;)t=t.destroy(!0);this._head.destroy(),this._head=null}}update(t=performance.now()){let e;if(t>this.lastTime){if(e=this.elapsedMS=t-this.lastTime,e>this._maxElapsedMS&&(e=this._maxElapsedMS),e*=this.speed,this._minElapsedMS){const e=t-this._lastFrame|0;if(e$r.targetFPMS,set(t){Kt("7.1.0","settings.TARGET_FPMS is deprecated, use Ticker.targetFPMS"),$r.targetFPMS=t}}});class qr{static init(t){t=Object.assign({autoStart:!0,sharedTicker:!1},t),Object.defineProperty(this,"ticker",{set(t){this._ticker&&this._ticker.remove(this.render,this),this._ticker=t,t&&t.add(this.render,this,Wr.LOW)},get(){return this._ticker}}),this.stop=()=>{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=t.sharedTicker?$r.shared:new $r,t.autoStart&&this.start()}static destroy(){if(this._ticker){const t=this._ticker;this.ticker=null,t.destroy()}}}qr.extension=rs.Application,os.add(qr);const Kr=[];function Zr(t){for(const e of Kr)if(e.test(t))return new e(t);throw new Error("Unable to auto-detect a suitable renderer.")}os.handleByList(rs.Renderer,Kr);const Qr="attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n}",Jr="attribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n";class tn{constructor(t){this.renderer=t}contextChange(t){let e;if(1===this.renderer.context.webGLVersion){const s=t.getParameter(t.FRAMEBUFFER_BINDING);t.bindFramebuffer(t.FRAMEBUFFER,null),e=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.FRAMEBUFFER,s)}else{const s=t.getParameter(t.DRAW_FRAMEBUFFER_BINDING);t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),e=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,s)}e>=T.HIGH?this.multisample=T.HIGH:e>=T.MEDIUM?this.multisample=T.MEDIUM:e>=T.LOW?this.multisample=T.LOW:this.multisample=T.NONE}destroy(){}}tn.extension={type:rs.RendererSystem,name:"_multisample"},os.add(tn);class en{constructor(t){this.buffer=t||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}}class sn{constructor(t){this.renderer=t,this.managedBuffers={},this.boundBufferBases={}}destroy(){this.renderer=null}contextChange(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(t){const{gl:e,CONTEXT_UID:s}=this,i=t._glBuffers[s]||this.createGLBuffer(t);e.bindBuffer(t.type,i.buffer)}unbind(t){const{gl:e}=this;e.bindBuffer(t,null)}bindBufferBase(t,e){const{gl:s,CONTEXT_UID:i}=this;if(this.boundBufferBases[e]!==t){const r=t._glBuffers[i]||this.createGLBuffer(t);this.boundBufferBases[e]=t,s.bindBufferBase(s.UNIFORM_BUFFER,e,r.buffer)}}bindBufferRange(t,e,s){const{gl:i,CONTEXT_UID:r}=this;s=s||0;const n=t._glBuffers[r]||this.createGLBuffer(t);i.bindBufferRange(i.UNIFORM_BUFFER,e||0,n.buffer,256*s,256)}update(t){const{gl:e,CONTEXT_UID:s}=this,i=t._glBuffers[s]||this.createGLBuffer(t);if(t._updateID!==i.updateID)if(i.updateID=t._updateID,e.bindBuffer(t.type,i.buffer),i.byteLength>=t.data.byteLength)e.bufferSubData(t.type,0,t.data);else{const s=t.static?e.STATIC_DRAW:e.DYNAMIC_DRAW;i.byteLength=t.data.byteLength,e.bufferData(t.type,t.data,s)}}dispose(t,e){if(!this.managedBuffers[t.id])return;delete this.managedBuffers[t.id];const s=t._glBuffers[this.CONTEXT_UID],i=this.gl;t.disposeRunner.remove(this),s&&(e||i.deleteBuffer(s.buffer),delete t._glBuffers[this.CONTEXT_UID])}disposeAll(t){const e=Object.keys(this.managedBuffers);for(let s=0;st.resource)).filter((t=>t)).map((t=>t.load()));return this._load=Promise.all(t).then((()=>{const{realWidth:t,realHeight:e}=this.items[0];return this.resize(t,e),Promise.resolve(this)})),this._load}}class hn extends on{constructor(t,e){const{width:s,height:i}=e||{};let r,n;Array.isArray(t)?(r=t,n=t.length):n=t,super(n,{width:s,height:i}),r&&this.initFromArray(r,e)}addBaseTextureAt(t,e){if(!t.resource)throw new Error("ArrayResource does not support RenderTexture");return this.addResourceAt(t.resource,e),this}bind(t){super.bind(t),t.target=l.TEXTURE_2D_ARRAY}upload(t,e,s){const{length:i,itemDirtyIds:r,items:n}=this,{gl:a}=t;s.dirtyId<0&&a.texImage3D(a.TEXTURE_2D_ARRAY,0,s.internalFormat,this._width,this._height,i,0,e.format,s.type,null);for(let t=0;t0){if(!t.resource)throw new Error("CubeResource does not support copying of renderTexture.");this.addResourceAt(t.resource,e)}else t.target=l.TEXTURE_CUBE_MAP_POSITIVE_X+e,t.parentTextureArray=this.baseTexture,this.items[e]=t;return t.valid&&!this.valid&&this.resize(t.realWidth,t.realHeight),this.items[e]=t,this}upload(t,e,s){const i=this.itemDirtyIds;for(let r=0;r{if(null!==this.url)try{const e=await A.ADAPTER.fetch(this.url,{mode:this.crossOrigin?"cors":"no-cors"});if(this.destroyed)return;const s=await e.blob();if(this.destroyed)return;const i=await createImageBitmap(s,{premultiplyAlpha:null===this.alphaMode||this.alphaMode===m.UNPACK?"premultiply":"none"});if(this.destroyed)return;this.source=i,this.update(),t(this)}catch(t){if(this.destroyed)return;e(t),this.onError.emit(t)}else t(this)}))),this._load}upload(t,e,s){return this.source instanceof ImageBitmap?("number"==typeof this.alphaMode&&(e.alphaMode=this.alphaMode),super.upload(t,e,s)):(this.load(),!1)}dispose(){this.source instanceof ImageBitmap&&this.source.close(),super.dispose(),this._load=null}static test(t){return!!globalThis.createImageBitmap&&"undefined"!=typeof ImageBitmap&&("string"==typeof t||t instanceof ImageBitmap)}static get EMPTY(){var t;return cn._EMPTY=null!=(t=cn._EMPTY)?t:A.ADAPTER.createCanvas(0,0),cn._EMPTY}}const pn=class extends ki{constructor(t,e){e=e||{},super(A.ADAPTER.createCanvas()),this._width=0,this._height=0,this.svg=t,this.scale=e.scale||1,this._overrideWidth=e.width,this._overrideHeight=e.height,this._resolve=null,this._crossorigin=e.crossorigin,this._load=null,!1!==e.autoLoad&&this.load()}load(){return this._load||(this._load=new Promise((t=>{if(this._resolve=()=>{this.resize(this.source.width,this.source.height),t(this)},pn.SVG_XML.test(this.svg.trim())){if(!btoa)throw new Error("Your browser doesn't support base64 conversions.");this.svg=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(this.svg)))}`}this._loadSvg()}))),this._load}_loadSvg(){const t=new Image;ki.crossOrigin(t,this.svg,this._crossorigin),t.src=this.svg,t.onerror=e=>{!this._resolve||(t.onerror=null,this.onError.emit(e))},t.onload=()=>{if(!this._resolve)return;const e=t.width,s=t.height;if(!e||!s)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");let i=e*this.scale,r=s*this.scale;(this._overrideWidth||this._overrideHeight)&&(i=this._overrideWidth||this._overrideHeight/s*e,r=this._overrideHeight||this._overrideWidth/e*s),i=Math.round(i),r=Math.round(r);const n=this.source;n.width=i,n.height=r,n._pixiId=`canvas_${Ve()}`,n.getContext("2d").drawImage(t,0,0,e,s,0,0,i,r),this._resolve(),this._resolve=null}}static getSize(t){const e=pn.SVG_SIZE.exec(t),s={};return e&&(s[e[1]]=Math.round(parseFloat(e[3])),s[e[5]]=Math.round(parseFloat(e[7]))),s}dispose(){super.dispose(),this._resolve=null,this._crossorigin=null}static test(t,e){return"svg"===e||"string"==typeof t&&t.startsWith("data:image/svg+xml")||"string"==typeof t&&pn.SVG_XML.test(t)}};let fn=pn;fn.SVG_XML=/^(<\?xml[^?]+\?>)?\s*()]*-->)?\s*\]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i;const mn=class extends ki{constructor(t,e){if(e=e||{},!(t instanceof HTMLVideoElement)){const s=document.createElement("video");s.setAttribute("preload","auto"),s.setAttribute("webkit-playsinline",""),s.setAttribute("playsinline",""),"string"==typeof t&&(t=[t]);const i=t[0].src||t[0];ki.crossOrigin(s,i,e.crossorigin);for(let e=0;e{this.valid?e(this):(this._resolve=e,t.load())})),this._load}_onError(t){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(t)}_isSourcePlaying(){const t=this.source;return!t.paused&&!t.ended&&this._isSourceReady()}_isSourceReady(){return this.source.readyState>2}_onPlayStart(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&($r.shared.add(this.update,this),this._isConnectedToTicker=!0)}_onPlayStop(){this._isConnectedToTicker&&($r.shared.remove(this.update,this),this._isConnectedToTicker=!1)}_onCanPlay(){const t=this.source;t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay);const e=this.valid;this.resize(t.videoWidth,t.videoHeight),!e&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&t.play()}dispose(){this._isConnectedToTicker&&($r.shared.remove(this.update,this),this._isConnectedToTicker=!1);const t=this.source;t&&(t.removeEventListener("error",this._onError,!0),t.pause(),t.src="",t.load()),super.dispose()}get autoUpdate(){return this._autoUpdate}set autoUpdate(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?($r.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&($r.shared.add(this.update,this),this._isConnectedToTicker=!0))}get updateFPS(){return this._updateFPS}set updateFPS(t){t!==this._updateFPS&&(this._updateFPS=t)}static test(t,e){return globalThis.HTMLVideoElement&&t instanceof HTMLVideoElement||mn.TYPES.includes(e)}};let _n=mn;_n.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],_n.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},ps.push(cn,Xi,ln,_n,fn,gs,dn,hn);class gn{constructor(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}isEmpty(){return this.minX>this.maxX||this.minY>this.maxY}clear(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0}getRectangle(t){return this.minX>this.maxX||this.minY>this.maxY?Ls.EMPTY:((t=t||new Ls(0,0,1,1)).x=this.minX,t.y=this.minY,t.width=this.maxX-this.minX,t.height=this.maxY-this.minY,t)}addPoint(t){this.minX=Math.min(this.minX,t.x),this.maxX=Math.max(this.maxX,t.x),this.minY=Math.min(this.minY,t.y),this.maxY=Math.max(this.maxY,t.y)}addPointMatrix(t,e){const{a:s,b:i,c:r,d:n,tx:a,ty:o}=t,h=s*e.x+r*e.y+a,l=i*e.x+n*e.y+o;this.minX=Math.min(this.minX,h),this.maxX=Math.max(this.maxX,h),this.minY=Math.min(this.minY,l),this.maxY=Math.max(this.maxY,l)}addQuad(t){let e=this.minX,s=this.minY,i=this.maxX,r=this.maxY,n=t[0],a=t[1];e=ni?n:i,r=a>r?a:r,n=t[2],a=t[3],e=ni?n:i,r=a>r?a:r,n=t[4],a=t[5],e=ni?n:i,r=a>r?a:r,n=t[6],a=t[7],e=ni?n:i,r=a>r?a:r,this.minX=e,this.minY=s,this.maxX=i,this.maxY=r}addFrame(t,e,s,i,r){this.addFrameMatrix(t.worldTransform,e,s,i,r)}addFrameMatrix(t,e,s,i,r){const n=t.a,a=t.b,o=t.c,h=t.d,l=t.tx,u=t.ty;let d=this.minX,c=this.minY,p=this.maxX,f=this.maxY,m=n*e+o*s+l,_=a*e+h*s+u;d=mp?m:p,f=_>f?_:f,m=n*i+o*s+l,_=a*i+h*s+u,d=mp?m:p,f=_>f?_:f,m=n*e+o*r+l,_=a*e+h*r+u,d=mp?m:p,f=_>f?_:f,m=n*i+o*r+l,_=a*i+h*r+u,d=mp?m:p,f=_>f?_:f,this.minX=d,this.minY=c,this.maxX=p,this.maxY=f}addVertexData(t,e,s){let i=this.minX,r=this.minY,n=this.maxX,a=this.maxY;for(let o=e;on?e:n,a=s>a?s:a}this.minX=i,this.minY=r,this.maxX=n,this.maxY=a}addVertices(t,e,s,i){this.addVerticesMatrix(t.worldTransform,e,s,i)}addVerticesMatrix(t,e,s,i,r=0,n=r){const a=t.a,o=t.b,h=t.c,l=t.d,u=t.tx,d=t.ty;let c=this.minX,p=this.minY,f=this.maxX,m=this.maxY;for(let t=s;ti?t.maxX:i,this.maxY=t.maxY>r?t.maxY:r}addBoundsMask(t,e){const s=t.minX>e.minX?t.minX:e.minX,i=t.minY>e.minY?t.minY:e.minY,r=t.maxXa?r:a,this.maxY=n>o?n:o}}addBoundsMatrix(t,e){this.addFrameMatrix(e,t.minX,t.minY,t.maxX,t.maxY)}addBoundsArea(t,e){const s=t.minX>e.x?t.minX:e.x,i=t.minY>e.y?t.minY:e.y,r=t.maxXa?r:a,this.maxY=n>o?n:o}}pad(t=0,e=t){this.isEmpty()||(this.minX-=t,this.maxX+=t,this.minY-=e,this.maxY+=e)}addFramePad(t,e,s,i,r,n){t-=r,e-=n,s+=r,i+=n,this.minX=this.minXs?this.maxX:s,this.minY=this.minYi?this.maxY:i}}class xn extends W{constructor(){super(),this.tempDisplayObjectParent=null,this.transform=new Js,this.alpha=1,this.visible=!0,this.renderable=!0,this.cullable=!1,this.cullArea=null,this.parent=null,this.worldAlpha=1,this._lastSortedIndex=0,this._zIndex=0,this.filterArea=null,this.filters=null,this._enabledFilters=null,this._bounds=new gn,this._localBounds=null,this._boundsID=0,this._boundsRect=null,this._localBoundsRect=null,this._mask=null,this._maskRefCount=0,this._destroyed=!1,this.isSprite=!1,this.isMask=!1}static mixin(t){const e=Object.keys(t);for(let s=0;s1)for(let e=0;ethis.children.length)throw new Error(`${t}addChildAt: The index ${e} supplied is out of bounds ${this.children.length}`);return t.parent&&t.parent.removeChild(t),t.parent=this,this.sortDirty=!0,t.transform._parentID=-1,this.children.splice(e,0,t),this._boundsID++,this.onChildrenChange(e),t.emit("added",this),this.emit("childAdded",t,this,e),t}swapChildren(t,e){if(t===e)return;const s=this.getChildIndex(t),i=this.getChildIndex(e);this.children[s]=e,this.children[i]=t,this.onChildrenChange(s=this.children.length)throw new Error(`The index ${e} supplied is out of bounds ${this.children.length}`);const s=this.getChildIndex(t);ke(this.children,s,1),this.children.splice(e,0,t),this.onChildrenChange(e)}getChildAt(t){if(t<0||t>=this.children.length)throw new Error(`getChildAt: Index (${t}) does not exist.`);return this.children[t]}removeChild(...t){if(t.length>1)for(let e=0;e0&&i<=e){r=this.children.splice(s,i);for(let t=0;t1&&this.children.sort(Tn),this.sortDirty=!1}updateTransform(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(let t=0,e=this.children.length;t0&&e.height>0))return;let s,i;this.cullArea?(s=this.cullArea,i=this.worldTransform):this._render!==bn.prototype._render&&(s=this.getBounds(!0));const r=t.projection.transform;if(r&&(i?(i=yn.copyFrom(i),i.prepend(r)):i=r),s&&e.intersects(s,i))this._render(t);else if(this.cullArea)return;for(let e=0,s=this.children.length;eEn.defaultSortableChildren,set(t){Kt("7.1.0","settings.SORTABLE_CHILDREN is deprecated, use Container.defaultSortableChildren"),En.defaultSortableChildren=t}}});const An=new Bs,Rn=new Uint16Array([0,1,2,0,2,3]);class Sn extends En{constructor(t){super(),this._anchor=new Zs(this._onAnchorUpdate,this,t?t.defaultAnchor.x:0,t?t.defaultAnchor.y:0),this._texture=null,this._width=0,this._height=0,this._tintColor=new Ie(16777215),this._tintRGB=null,this.tint=16777215,this.blendMode=a.NORMAL,this._cachedTint=16777215,this.uvs=null,this.texture=t||Wi.EMPTY,this.vertexData=new Float32Array(8),this.vertexTrimmedData=null,this._transformID=-1,this._textureID=-1,this._transformTrimmedID=-1,this._textureTrimmedID=-1,this.indices=Rn,this.pluginName="batch",this.isSprite=!0,this._roundPixels=A.ROUND_PIXELS}_onTextureUpdate(){this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this._width&&(this.scale.x=Xe(this.scale.x)*this._width/this._texture.orig.width),this._height&&(this.scale.y=Xe(this.scale.y)*this._height/this._texture.orig.height)}_onAnchorUpdate(){this._transformID=-1,this._transformTrimmedID=-1}calculateVertices(){const t=this._texture;if(this._transformID===this.transform._worldID&&this._textureID===t._updateID)return;this._textureID!==t._updateID&&(this.uvs=this._texture._uvs.uvsFloat32),this._transformID=this.transform._worldID,this._textureID=t._updateID;const e=this.transform.worldTransform,s=e.a,i=e.b,r=e.c,n=e.d,a=e.tx,o=e.ty,h=this.vertexData,l=t.trim,u=t.orig,d=this._anchor;let c=0,p=0,f=0,m=0;if(l?(p=l.x-d._x*u.width,c=p+l.width,m=l.y-d._y*u.height,f=m+l.height):(p=-d._x*u.width,c=p+u.width,m=-d._y*u.height,f=m+u.height),h[0]=s*p+r*m+a,h[1]=n*m+i*p+o,h[2]=s*c+r*m+a,h[3]=n*m+i*c+o,h[4]=s*c+r*f+a,h[5]=n*f+i*c+o,h[6]=s*p+r*f+a,h[7]=n*f+i*p+o,this._roundPixels){const t=A.RESOLUTION;for(let e=0;e=i&&An.x=r&&An.y=s&&(i=t-r-1),a=a.replace("%value%",e[i].toString()),n+=a,n+="\n"}return r=r.replace("%blur%",n),r=r.replace("%size%",t.toString()),r}(r);super(n,a),this.horizontal=t,this.resolution=i,this._quality=0,this.quality=s,this.blur=e}apply(t,e,s,i){if(s?this.horizontal?this.uniforms.strength=1/s.width*(s.width/e.width):this.uniforms.strength=1/s.height*(s.height/e.height):this.horizontal?this.uniforms.strength=1/t.renderer.width*(t.renderer.width/e.width):this.uniforms.strength=1/t.renderer.height*(t.renderer.height/e.height),this.uniforms.strength*=this.strength,this.uniforms.strength/=this.passes,1===this.passes)t.applyFilter(this,e,s,i);else{const r=t.getFilterTexture(),n=t.renderer;let a=e,o=r;this.state.blend=!1,t.applyFilter(this,a,o,_.CLEAR);for(let e=1;e 0.0) {\n c.rgb /= c.a;\n }\n\n vec4 result;\n\n result.r = (m[0] * c.r);\n result.r += (m[1] * c.g);\n result.r += (m[2] * c.b);\n result.r += (m[3] * c.a);\n result.r += m[4];\n\n result.g = (m[5] * c.r);\n result.g += (m[6] * c.g);\n result.g += (m[7] * c.b);\n result.g += (m[8] * c.a);\n result.g += m[9];\n\n result.b = (m[10] * c.r);\n result.b += (m[11] * c.g);\n result.b += (m[12] * c.b);\n result.b += (m[13] * c.a);\n result.b += m[14];\n\n result.a = (m[15] * c.r);\n result.a += (m[16] * c.g);\n result.a += (m[17] * c.b);\n result.a += (m[18] * c.a);\n result.a += m[19];\n\n vec3 rgb = mix(c.rgb, result.rgb, uAlpha);\n\n // Premultiply alpha again.\n rgb *= result.a;\n\n gl_FragColor = vec4(rgb, result.a);\n}\n",t),this.alpha=1}_loadMatrix(t,e=!1){let s=t;e&&(this._multiply(s,this.uniforms.m,t),s=this._colorMatrix(s)),this.uniforms.m=s}_multiply(t,e,s){return t[0]=e[0]*s[0]+e[1]*s[5]+e[2]*s[10]+e[3]*s[15],t[1]=e[0]*s[1]+e[1]*s[6]+e[2]*s[11]+e[3]*s[16],t[2]=e[0]*s[2]+e[1]*s[7]+e[2]*s[12]+e[3]*s[17],t[3]=e[0]*s[3]+e[1]*s[8]+e[2]*s[13]+e[3]*s[18],t[4]=e[0]*s[4]+e[1]*s[9]+e[2]*s[14]+e[3]*s[19]+e[4],t[5]=e[5]*s[0]+e[6]*s[5]+e[7]*s[10]+e[8]*s[15],t[6]=e[5]*s[1]+e[6]*s[6]+e[7]*s[11]+e[8]*s[16],t[7]=e[5]*s[2]+e[6]*s[7]+e[7]*s[12]+e[8]*s[17],t[8]=e[5]*s[3]+e[6]*s[8]+e[7]*s[13]+e[8]*s[18],t[9]=e[5]*s[4]+e[6]*s[9]+e[7]*s[14]+e[8]*s[19]+e[9],t[10]=e[10]*s[0]+e[11]*s[5]+e[12]*s[10]+e[13]*s[15],t[11]=e[10]*s[1]+e[11]*s[6]+e[12]*s[11]+e[13]*s[16],t[12]=e[10]*s[2]+e[11]*s[7]+e[12]*s[12]+e[13]*s[17],t[13]=e[10]*s[3]+e[11]*s[8]+e[12]*s[13]+e[13]*s[18],t[14]=e[10]*s[4]+e[11]*s[9]+e[12]*s[14]+e[13]*s[19]+e[14],t[15]=e[15]*s[0]+e[16]*s[5]+e[17]*s[10]+e[18]*s[15],t[16]=e[15]*s[1]+e[16]*s[6]+e[17]*s[11]+e[18]*s[16],t[17]=e[15]*s[2]+e[16]*s[7]+e[17]*s[12]+e[18]*s[17],t[18]=e[15]*s[3]+e[16]*s[8]+e[17]*s[13]+e[18]*s[18],t[19]=e[15]*s[4]+e[16]*s[9]+e[17]*s[14]+e[18]*s[19]+e[19],t}_colorMatrix(t){const e=new Float32Array(t);return e[4]/=255,e[9]/=255,e[14]/=255,e[19]/=255,e}brightness(t,e){const s=[t,0,0,0,0,0,t,0,0,0,0,0,t,0,0,0,0,0,1,0];this._loadMatrix(s,e)}tint(t,e){const[s,i,r]=Ie.shared.setValue(t).toArray(),n=[s,0,0,0,0,0,i,0,0,0,0,0,r,0,0,0,0,0,1,0];this._loadMatrix(n,e)}greyscale(t,e){const s=[t,t,t,0,0,t,t,t,0,0,t,t,t,0,0,0,0,0,1,0];this._loadMatrix(s,e)}blackAndWhite(t){this._loadMatrix([.3,.6,.1,0,0,.3,.6,.1,0,0,.3,.6,.1,0,0,0,0,0,1,0],t)}hue(t,e){t=(t||0)/180*Math.PI;const s=Math.cos(t),i=Math.sin(t),r=1/3,n=(0,Math.sqrt)(r),a=[s+(1-s)*r,r*(1-s)-n*i,r*(1-s)+n*i,0,0,r*(1-s)+n*i,s+r*(1-s),r*(1-s)-n*i,0,0,r*(1-s)-n*i,r*(1-s)+n*i,s+r*(1-s),0,0,0,0,0,1,0];this._loadMatrix(a,e)}contrast(t,e){const s=(t||0)+1,i=-.5*(s-1),r=[s,0,0,0,i,0,s,0,0,i,0,0,s,0,i,0,0,0,1,0];this._loadMatrix(r,e)}saturate(t=0,e){const s=2*t/3+1,i=-.5*(s-1),r=[s,i,i,0,0,i,s,i,0,0,i,i,s,0,0,0,0,0,1,0];this._loadMatrix(r,e)}desaturate(){this.saturate(-1)}negative(t){this._loadMatrix([-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,0,0,0,1,0],t)}sepia(t){this._loadMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0],t)}technicolor(t){this._loadMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0],t)}polaroid(t){this._loadMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],t)}toBGR(t){this._loadMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0],t)}kodachrome(t){this._loadMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0],t)}browni(t){this._loadMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0],t)}vintage(t){this._loadMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0],t)}colorTone(t,e,s,i,r){t=t||.2,e=e||.15,s=s||16770432,i=i||3375104;const n=Ie.shared,[a,o,h]=n.setValue(s).toArray(),[l,u,d]=n.setValue(i).toArray(),c=[.3,.59,.11,0,0,a,o,h,t,0,l,u,d,e,0,a-l,o-u,h-d,0,0];this._loadMatrix(c,r)}night(t,e){const s=[-2*(t=t||.1),-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(s,e)}predator(t,e){const s=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(s,e)}lsd(t){this._loadMatrix([2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0],t)}reset(){this._loadMatrix([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],!1)}get matrix(){return this.uniforms.m}set matrix(t){this.uniforms.m=t}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}}Fn.prototype.grayscale=Fn.prototype.greyscale;class Bn extends Pi{constructor(t,e){const s=new Hs;t.renderable=!1,super("attribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\nuniform mat3 filterMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vFilterCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n}\n\nvoid main(void)\n{\n\tgl_Position = filterVertexPosition();\n\tvTextureCoord = filterTextureCoord();\n\tvFilterCoord = ( filterMatrix * vec3( vTextureCoord, 1.0) ).xy;\n}\n","varying vec2 vFilterCoord;\nvarying vec2 vTextureCoord;\n\nuniform vec2 scale;\nuniform mat2 rotation;\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nuniform highp vec4 inputSize;\nuniform vec4 inputClamp;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vFilterCoord);\n\n map -= 0.5;\n map.xy = scale * inputSize.zw * (rotation * map.xy);\n\n gl_FragColor = texture2D(uSampler, clamp(vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y), inputClamp.xy, inputClamp.zw));\n}\n",{mapSampler:t._texture,filterMatrix:s,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])}),this.maskSprite=t,this.maskMatrix=s,null==e&&(e=20),this.scale=new Bs(e,e)}apply(t,e,s,i){this.uniforms.filterMatrix=t.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;const r=this.maskSprite.worldTransform,n=Math.sqrt(r.a*r.a+r.b*r.b),a=Math.sqrt(r.c*r.c+r.d*r.d);0!==n&&0!==a&&(this.uniforms.rotation[0]=r.a/n,this.uniforms.rotation[1]=r.b/n,this.uniforms.rotation[2]=r.c/a,this.uniforms.rotation[3]=r.d/a),t.applyFilter(this,e,s,i)}get map(){return this.uniforms.mapSampler}set map(t){this.uniforms.mapSampler=t}}class Nn extends Pi{constructor(){super("\nattribute vec2 aVertexPosition;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nvarying vec2 vFragCoord;\n\nuniform vec4 inputSize;\nuniform vec4 outputFrame;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n}\n\nvoid texcoords(vec2 fragCoord, vec2 inverseVP,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void) {\n\n gl_Position = filterVertexPosition();\n\n vFragCoord = aVertexPosition * outputFrame.zw;\n\n texcoords(vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'varying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nvarying vec2 vFragCoord;\nuniform sampler2D uSampler;\nuniform highp vec4 inputSize;\n\n\n/**\n Basic FXAA implementation based on the code on geeks3d.com with the\n modification that the texture2DLod stuff was removed since it\'s\n unsupported by WebGL.\n\n --\n\n From:\n https://github.com/mitsuhiko/webgl-meincraft\n\n Copyright (c) 2011 by Armin Ronacher.\n\n Some rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef FXAA_REDUCE_MIN\n#define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n#define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n#define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 inverseVP,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\nvoid main() {\n\n vec4 color;\n\n color = fxaa(uSampler, vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n gl_FragColor = color;\n}\n')}}class Ln extends Pi{constructor(t=.5,e=Math.random()){super(Jr,"precision highp float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform float uNoise;\nuniform float uSeed;\nuniform sampler2D uSampler;\n\nfloat rand(vec2 co)\n{\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float randomValue = rand(gl_FragCoord.xy * uSeed);\n float diff = (randomValue - 0.5) * uNoise;\n\n // Un-premultiply alpha before applying the color matrix. See issue #3539.\n if (color.a > 0.0) {\n color.rgb /= color.a;\n }\n\n color.r += diff;\n color.g += diff;\n color.b += diff;\n\n // Premultiply alpha again.\n color.rgb *= color.a;\n\n gl_FragColor = color;\n}\n",{uNoise:0,uSeed:0}),this.noise=t,this.seed=e}get noise(){return this.uniforms.uNoise}set noise(t){this.uniforms.uNoise=t}get seed(){return this.uniforms.uSeed}set seed(t){this.uniforms.uSeed=t}}const Gn={AlphaFilter:Mn,BlurFilter:On,BlurFilterPass:Pn,ColorMatrixFilter:Fn,DisplacementFilter:Bn,FXAAFilter:Nn,NoiseFilter:Ln};Object.entries(Gn).forEach((([t,e])=>{Object.defineProperty(Gn,t,{get:()=>e})}));const Un=new class{constructor(){this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this.tickerAdded=!1,this._pauseUpdate=!0}init(t){this.removeTickerListener(),this.events=t,this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this.tickerAdded=!1,this._pauseUpdate=!0}get pauseUpdate(){return this._pauseUpdate}set pauseUpdate(t){this._pauseUpdate=t}addTickerListener(){this.tickerAdded||!this.domElement||($r.system.add(this.tickerUpdate,this,Wr.INTERACTION),this.tickerAdded=!0)}removeTickerListener(){!this.tickerAdded||($r.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)}pointerMoved(){this._didMove=!0}update(){if(!this.domElement||this._pauseUpdate)return;if(this._didMove)return void(this._didMove=!1);const t=this.events.rootPointerEvent;this.events.supportsTouchEvents&&"touch"===t.pointerType||globalThis.document.dispatchEvent(new PointerEvent("pointermove",{clientX:t.clientX,clientY:t.clientY}))}tickerUpdate(t){this._deltaTime+=t,!(this._deltaTimet.priority-e.priority))}dispatchEvent(t,e){t.propagationStopped=!1,t.propagationImmediatelyStopped=!1,this.propagate(t,e),this.dispatch.emit(e||t.type,t)}mapEvent(t){if(!this.rootTarget)return;const e=this.mappingTable[t.type];if(e)for(let s=0,i=e.length;s=0;i--)if(t.currentTarget=s[i],this.notifyTarget(t,e),t.propagationStopped||t.propagationImmediatelyStopped)return}}all(t,e,s=this._allInteractiveElements){if(0===s.length)return;t.eventPhase=t.BUBBLING_PHASE;const i=Array.isArray(e)?e:[e];for(let e=s.length-1;e>=0;e--)i.forEach((i=>{t.currentTarget=s[e],this.notifyTarget(t,i)}))}propagationPath(t){const e=[t];for(let s=0;s<2048&&t!==this.rootTarget;s++){if(!t.parent)throw new Error("Cannot find propagation path to disconnected target");e.push(t.parent),t=t.parent}return e.reverse(),e}hitTestMoveRecursive(t,e,s,i,r,n=!1){let a=!1;if(this._interactivePrune(t))return null;if(("dynamic"===t.eventMode||"dynamic"===e)&&(Un.pauseUpdate=!1),t.interactiveChildren&&t.children){const o=t.children;for(let h=o.length-1;h>=0;h--){const l=o[h],u=this.hitTestMoveRecursive(l,this._isInteractive(e)?e:l.eventMode,s,i,r,n||r(t,s));if(u){if(u.length>0&&!u[u.length-1].parent)continue;const e=t.isInteractive();(u.length>0||e)&&(e&&this._allInteractiveElements.push(t),u.push(t)),0===this._hitElements.length&&(this._hitElements=u),a=!0}}}const o=this._isInteractive(e),h=t.isInteractive();return h&&h&&this._allInteractiveElements.push(t),n||this._hitElements.length>0?null:a?this._hitElements:o&&!r(t,s)&&i(t,s)?h?[t]:[]:null}hitTestRecursive(t,e,s,i,r){if(this._interactivePrune(t)||r(t,s))return null;if(("dynamic"===t.eventMode||"dynamic"===e)&&(Un.pauseUpdate=!1),t.interactiveChildren&&t.children){const n=t.children;for(let a=n.length-1;a>=0;a--){const o=n[a],h=this.hitTestRecursive(o,this._isInteractive(e)?e:o.eventMode,s,i,r);if(h){if(h.length>0&&!h[h.length-1].parent)continue;const e=t.isInteractive();return(h.length>0||e)&&h.push(t),h}}}const n=this._isInteractive(e),a=t.isInteractive();return n&&i(t,s)?a?[t]:[]:null}_isInteractive(t){return"static"===t||"dynamic"===t}_interactivePrune(t){return!(t&&!t.isMask&&t.visible&&t.renderable&&"none"!==t.eventMode&&("passive"!==t.eventMode||t.interactiveChildren)&&!t.isMask)}hitPruneFn(t,e){var s;if(t.hitArea&&(t.worldTransform.applyInverse(e,Yn),!t.hitArea.contains(Yn.x,Yn.y)))return!0;if(t._mask){const i=t._mask.isMaskData?t._mask.maskObject:t._mask;if(i&&(null==(s=i.containsPoint)||!s.call(i,e)))return!0}return!1}hitTestFn(t,e){return"passive"!==t.eventMode&&(!!t.hitArea||!!t.containsPoint&&t.containsPoint(e))}notifyTarget(t,e){var s,i;const r=`on${e=null!=e?e:t.type}`;null==(i=(s=t.currentTarget)[r])||i.call(s,t);const n=t.eventPhase===t.CAPTURING_PHASE||t.eventPhase===t.AT_TARGET?`${e}capture`:e;this.notifyListeners(t,n),t.eventPhase===t.AT_TARGET&&this.notifyListeners(t,e)}mapPointerDown(t){if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.createPointerEvent(t);if(this.dispatchEvent(e,"pointerdown"),"touch"===e.pointerType)this.dispatchEvent(e,"touchstart");else if("mouse"===e.pointerType||"pen"===e.pointerType){const t=2===e.button;this.dispatchEvent(e,t?"rightdown":"mousedown")}this.trackingData(t.pointerId).pressTargetsByButton[t.button]=e.composedPath(),this.freeEvent(e)}mapPointerMove(t){var e,s,i;if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");this._allInteractiveElements.length=0,this._hitElements.length=0,this._isPointerMoveEvent=!0;const r=this.createPointerEvent(t);this._isPointerMoveEvent=!1;const n="mouse"===r.pointerType||"pen"===r.pointerType,a=this.trackingData(t.pointerId),o=this.findMountedTarget(a.overTargets);if((null==(e=a.overTargets)?void 0:e.length)>0&&o!==r.target){const e="mousemove"===t.type?"mouseout":"pointerout",s=this.createPointerEvent(t,e,o);if(this.dispatchEvent(s,"pointerout"),n&&this.dispatchEvent(s,"mouseout"),!r.composedPath().includes(o)){const e=this.createPointerEvent(t,"pointerleave",o);for(e.eventPhase=e.AT_TARGET;e.target&&!r.composedPath().includes(e.target);)e.currentTarget=e.target,this.notifyTarget(e),n&&this.notifyTarget(e,"mouseleave"),e.target=e.target.parent;this.freeEvent(e)}this.freeEvent(s)}if(o!==r.target){const e="mousemove"===t.type?"mouseover":"pointerover",s=this.clonePointerEvent(r,e);this.dispatchEvent(s,"pointerover"),n&&this.dispatchEvent(s,"mouseover");let i=null==o?void 0:o.parent;for(;i&&i!==this.rootTarget.parent&&i!==r.target;)i=i.parent;if(!i||i===this.rootTarget.parent){const t=this.clonePointerEvent(r,"pointerenter");for(t.eventPhase=t.AT_TARGET;t.target&&t.target!==o&&t.target!==this.rootTarget.parent;)t.currentTarget=t.target,this.notifyTarget(t),n&&this.notifyTarget(t,"mouseenter"),t.target=t.target.parent;this.freeEvent(t)}this.freeEvent(s)}const h=[],l=null==(s=this.enableGlobalMoveEvents)||s;this.moveOnAll?h.push("pointermove"):this.dispatchEvent(r,"pointermove"),l&&h.push("globalpointermove"),"touch"===r.pointerType&&(this.moveOnAll?h.splice(1,0,"touchmove"):this.dispatchEvent(r,"touchmove"),l&&h.push("globaltouchmove")),n&&(this.moveOnAll?h.splice(1,0,"mousemove"):this.dispatchEvent(r,"mousemove"),l&&h.push("globalmousemove"),this.cursor=null==(i=r.target)?void 0:i.cursor),h.length>0&&this.all(r,h),this._allInteractiveElements.length=0,this._hitElements.length=0,a.overTargets=r.composedPath(),this.freeEvent(r)}mapPointerOver(t){var e;if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");const s=this.trackingData(t.pointerId),i=this.createPointerEvent(t),r="mouse"===i.pointerType||"pen"===i.pointerType;this.dispatchEvent(i,"pointerover"),r&&this.dispatchEvent(i,"mouseover"),"mouse"===i.pointerType&&(this.cursor=null==(e=i.target)?void 0:e.cursor);const n=this.clonePointerEvent(i,"pointerenter");for(n.eventPhase=n.AT_TARGET;n.target&&n.target!==this.rootTarget.parent;)n.currentTarget=n.target,this.notifyTarget(n),r&&this.notifyTarget(n,"mouseenter"),n.target=n.target.parent;s.overTargets=i.composedPath(),this.freeEvent(i),this.freeEvent(n)}mapPointerOut(t){if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.trackingData(t.pointerId);if(e.overTargets){const s="mouse"===t.pointerType||"pen"===t.pointerType,i=this.findMountedTarget(e.overTargets),r=this.createPointerEvent(t,"pointerout",i);this.dispatchEvent(r),s&&this.dispatchEvent(r,"mouseout");const n=this.createPointerEvent(t,"pointerleave",i);for(n.eventPhase=n.AT_TARGET;n.target&&n.target!==this.rootTarget.parent;)n.currentTarget=n.target,this.notifyTarget(n),s&&this.notifyTarget(n,"mouseleave"),n.target=n.target.parent;e.overTargets=null,this.freeEvent(r),this.freeEvent(n)}this.cursor=null}mapPointerUp(t){if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");const e=performance.now(),s=this.createPointerEvent(t);if(this.dispatchEvent(s,"pointerup"),"touch"===s.pointerType)this.dispatchEvent(s,"touchend");else if("mouse"===s.pointerType||"pen"===s.pointerType){const t=2===s.button;this.dispatchEvent(s,t?"rightup":"mouseup")}const i=this.trackingData(t.pointerId),r=this.findMountedTarget(i.pressTargetsByButton[t.button]);let n=r;if(r&&!s.composedPath().includes(r)){let e=r;for(;e&&!s.composedPath().includes(e);){if(s.currentTarget=e,this.notifyTarget(s,"pointerupoutside"),"touch"===s.pointerType)this.notifyTarget(s,"touchendoutside");else if("mouse"===s.pointerType||"pen"===s.pointerType){const t=2===s.button;this.notifyTarget(s,t?"rightupoutside":"mouseupoutside")}e=e.parent}delete i.pressTargetsByButton[t.button],n=e}if(n){const r=this.clonePointerEvent(s,"click");r.target=n,r.path=null,i.clicksByButton[t.button]||(i.clicksByButton[t.button]={clickCount:0,target:r.target,timeStamp:e});const a=i.clicksByButton[t.button];if(a.target===r.target&&e-a.timeStamp<200?++a.clickCount:a.clickCount=1,a.target=r.target,a.timeStamp=e,r.detail=a.clickCount,"mouse"===r.pointerType){const t=2===r.button;this.dispatchEvent(r,t?"rightclick":"click")}else"touch"===r.pointerType&&this.dispatchEvent(r,"tap");this.dispatchEvent(r,"pointertap"),this.freeEvent(r)}this.freeEvent(s)}mapPointerUpOutside(t){if(!(t instanceof Hn))return void console.warn("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.trackingData(t.pointerId),s=this.findMountedTarget(e.pressTargetsByButton[t.button]),i=this.createPointerEvent(t);if(s){let r=s;for(;r;)i.currentTarget=r,this.notifyTarget(i,"pointerupoutside"),"touch"===i.pointerType?this.notifyTarget(i,"touchendoutside"):("mouse"===i.pointerType||"pen"===i.pointerType)&&this.notifyTarget(i,2===i.button?"rightupoutside":"mouseupoutside"),r=r.parent;delete e.pressTargetsByButton[t.button]}this.freeEvent(i)}mapWheel(t){if(!(t instanceof Vn))return void console.warn("EventBoundary cannot map a non-wheel event as a wheel event");const e=this.createWheelEvent(t);this.dispatchEvent(e),this.freeEvent(e)}findMountedTarget(t){if(!t)return null;let e=t[0];for(let s=1;s("globalMove"===e&&(this.rootBoundary.enableGlobalMoveEvents=s),t[e]=s,!0)}),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onPointerOverOut=this.onPointerOverOut.bind(this),this.onWheel=this.onWheel.bind(this)}static get defaultEventMode(){return this._defaultEventMode}init(t){var e,s;const{view:i,resolution:r}=this.renderer;this.setTargetElement(i),this.resolution=r,qn._defaultEventMode=null!=(e=t.eventMode)?e:"auto",Object.assign(this.features,null!=(s=t.eventFeatures)?s:{}),this.rootBoundary.enableGlobalMoveEvents=this.features.globalMove}resolutionChange(t){this.resolution=t}destroy(){this.setTargetElement(null),this.renderer=null}setCursor(t){t=t||"default";let e=!0;if(globalThis.OffscreenCanvas&&this.domElement instanceof OffscreenCanvas&&(e=!1),this.currentCursor===t)return;this.currentCursor=t;const s=this.cursorStyles[t];if(s)switch(typeof s){case"string":e&&(this.domElement.style.cursor=s);break;case"function":s(t);break;case"object":e&&Object.assign(this.domElement.style,s)}else e&&"string"==typeof t&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,t)&&(this.domElement.style.cursor=t)}get pointer(){return this.rootPointerEvent}onPointerDown(t){if(!this.features.click||(this.rootBoundary.rootTarget=this.renderer.lastObjectRendered,this.supportsTouchEvents&&"touch"===t.pointerType))return;const e=this.normalizeToPointerData(t);this.autoPreventDefault&&e[0].isNormalized&&(t.cancelable||!("cancelable"in t))&&t.preventDefault();for(let t=0,s=e.length;t0&&(e=t.composedPath()[0]);const s=e!==this.domElement?"outside":"",i=this.normalizeToPointerData(t);for(let t=0,e=i.length;t{this._isMobileAccessibility=!0,this.activate(),this.destroyTouchHook()})),document.body.appendChild(t),this._hookDiv=t}destroyTouchHook(){!this._hookDiv||(document.body.removeChild(this._hookDiv),this._hookDiv=null)}activate(){var t;this._isActive||(this._isActive=!0,globalThis.document.addEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),null==(t=this.renderer.view.parentNode)||t.appendChild(this.div))}deactivate(){var t;!this._isActive||this._isMobileAccessibility||(this._isActive=!1,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),null==(t=this.div.parentNode)||t.removeChild(this.div))}updateAccessibleObjects(t){if(!t.visible||!t.accessibleChildren)return;t.accessible&&t.isInteractive()&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);const e=t.children;if(e)for(let t=0;t title : ${t.title}
    tabIndex: ${t.tabIndex}`}capHitArea(t){t.x<0&&(t.width+=t.x,t.x=0),t.y<0&&(t.height+=t.y,t.y=0);const{width:e,height:s}=this.renderer;t.x+t.width>e&&(t.width=e-t.x),t.y+t.height>s&&(t.height=s-t.y)}addChild(t){let e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2..toString(),e.style.borderStyle="none",navigator.userAgent.toLowerCase().includes("chrome")?e.setAttribute("aria-live","off"):e.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?e.setAttribute("aria-relevant","additions"):e.setAttribute("aria-relevant","text"),e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.style.pointerEvents=t.accessiblePointerEvents,e.type=t.accessibleType,t.accessibleTitle&&null!==t.accessibleTitle?e.title=t.accessibleTitle:(!t.accessibleHint||null===t.accessibleHint)&&(e.title=`displayObject ${t.tabIndex}`),t.accessibleHint&&null!==t.accessibleHint&&e.setAttribute("aria-label",t.accessibleHint),this.debug&&this.updateDebugHTML(e),t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex}_dispatchEvent(t,e){const{displayObject:s}=t.target,i=this.renderer.events.rootBoundary,r=Object.assign(new kn(i),{target:s});i.rootTarget=this.renderer.lastObjectRendered,e.forEach((t=>i.dispatchEvent(r,t)))}_onClick(t){this._dispatchEvent(t,["click","pointertap","tap"])}_onFocus(t){t.target.getAttribute("aria-live")||t.target.setAttribute("aria-live","assertive"),this._dispatchEvent(t,["mouseover"])}_onFocusOut(t){t.target.getAttribute("aria-live")||t.target.setAttribute("aria-live","polite"),this._dispatchEvent(t,["mouseout"])}_onKeyDown(t){9===t.keyCode&&this.activate()}_onMouseMove(t){0===t.movementX&&0===t.movementY||this.deactivate()}destroy(){this.destroyTouchHook(),this.div=null,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown),this.pool=null,this.children=null,this.renderer=null}}ta.extension={name:"accessibility",type:[rs.RendererPlugin,rs.CanvasRendererPlugin]},os.add(ta);const ea=class{constructor(t){this.stage=new En,t=Object.assign({forceCanvas:!1},t),this.renderer=Zr(t),ea._plugins.forEach((e=>{e.init.call(this,t)}))}render(){this.renderer.render(this.stage)}get view(){return this.renderer.view}get screen(){return this.renderer.screen}destroy(t,e){const s=ea._plugins.slice(0);s.reverse(),s.forEach((t=>{t.destroy.call(this)})),this.stage.destroy(e),this.stage=null,this.renderer.destroy(t),this.renderer=null}};let sa=ea;sa._plugins=[],os.handleByList(rs.Application,sa._plugins);class ia{static init(t){Object.defineProperty(this,"resizeTo",{set(t){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=t,t&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{!this._resizeTo||(this.cancelResize(),this._resizeId=requestAnimationFrame((()=>this.resize())))},this.cancelResize=()=>{this._resizeId&&(cancelAnimationFrame(this._resizeId),this._resizeId=null)},this.resize=()=>{if(!this._resizeTo)return;let t,e;if(this.cancelResize(),this._resizeTo===globalThis.window)t=globalThis.innerWidth,e=globalThis.innerHeight;else{const{clientWidth:s,clientHeight:i}=this._resizeTo;t=s,e=i}this.renderer.resize(t,e),this.render()},this._resizeId=null,this._resizeTo=null,this.resizeTo=t.resizeTo||null}static destroy(){globalThis.removeEventListener("resize",this.queueResize),this.cancelResize(),this.cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}}ia.extension=rs.Application,os.add(ia);const ra={loader:rs.LoadParser,resolver:rs.ResolveParser,cache:rs.CacheParser,detection:rs.DetectionParser};os.handle(rs.Asset,(t=>{const e=t.ref;Object.entries(ra).filter((([t])=>!!e[t])).forEach((([t,s])=>{var i;return os.add(Object.assign(e[t],{extension:null!=(i=e[t].extension)?i:s}))}))}),(t=>{const e=t.ref;Object.keys(ra).filter((t=>!!e[t])).forEach((t=>os.remove(e[t])))}));class na{constructor(t,e=!1){this._loader=t,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=e}add(t){t.forEach((t=>{this._assetList.push(t)})),this.verbose&&console.log("[BackgroundLoader] assets: ",this._assetList),this._isActive&&!this._isLoading&&this._next()}async _next(){if(this._assetList.length&&this._isActive){this._isLoading=!0;const t=[],e=Math.min(this._assetList.length,this._maxConcurrent);for(let s=0;s(Array.isArray(t)||(t=[t]),e?t.map((t=>"string"==typeof t?e(t):t)):t),la=(t,e)=>{const s=e.split("?")[1];return s&&(t+=`?${s}`),t};function ua(t,e,s,i,r){const n=e[s];for(let a=0;a{const e=t.substring(1,t.length-1).split(",");i.push(e)})),ua(t,i,0,e,s)}else s.push(t);return s}const ca=t=>!Array.isArray(t);const pa=new class{constructor(){this._parsers=[],this._cache=new Map,this._cacheMap=new Map}reset(){this._cacheMap.clear(),this._cache.clear()}has(t){return this._cache.has(t)}get(t){const e=this._cache.get(t);return e||console.warn(`[Assets] Asset id ${t} was not found in the Cache`),e}set(t,e){const s=ha(t);let i;for(let t=0;t{i[t]=e})));const r=Object.keys(i),n={cacheKeys:r,keys:s};if(s.forEach((t=>{this._cacheMap.set(t,n)})),r.forEach((t=>{this._cache.has(t)&&this._cache.get(t)!==e&&console.warn("[Cache] already has key:",t),this._cache.set(t,i[t])})),e instanceof Wi){const t=e;s.forEach((e=>{t.baseTexture!==Wi.EMPTY.baseTexture&&ys.addToCache(t.baseTexture,e),Wi.addToCache(t,e)}))}}remove(t){if(this._cacheMap.get(t),!this._cacheMap.has(t))return void console.warn(`[Assets] Asset id ${t} was not found in the Cache`);const e=this._cacheMap.get(t);e.cacheKeys.forEach((t=>{this._cache.delete(t)})),e.keys.forEach((t=>{this._cacheMap.delete(t)}))}get parsers(){return this._parsers}};class fa{constructor(){this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(t,e,s)=>(this._parsersValidated=!1,t[e]=s,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(t,e){const s={promise:null,parser:null};return s.promise=(async()=>{var i,r;let n=null,a=null;if(e.loadParser&&(a=this._parserHash[e.loadParser],a||console.warn(`[Assets] specified load parser "${e.loadParser}" not found while loading ${t}`)),!a){for(let s=0;s({src:t}))),a=n.length,o=n.map((async t=>{const r=$t.toAbsolute(t.src);if(!i[t.src])try{this.promiseCache[r]||(this.promiseCache[r]=this._getLoadPromiseAndParser(r,t)),i[t.src]=await this.promiseCache[r].promise,e&&e(++s/a)}catch(e){throw delete this.promiseCache[r],delete i[t.src],new Error(`[Loader.load] Failed to load ${r}.\n${e}`)}}));return await Promise.all(o),r?i[n[0].src]:i}async unload(t){const e=ha(t,(t=>({src:t}))).map((async t=>{var e,s;const i=$t.toAbsolute(t.src),r=this.promiseCache[i];if(r){const n=await r.promise;null==(s=null==(e=r.parser)?void 0:e.unload)||s.call(e,n,t,this),delete this.promiseCache[i]}}));await Promise.all(e)}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter((t=>t.name)).reduce(((t,e)=>(t[e.name]&&console.warn(`[Assets] loadParser name conflict "${e.name}"`),Qi(bt({},t),{[e.name]:e}))),{})}}var ma=(t=>(t[t.Low=0]="Low",t[t.Normal=1]="Normal",t[t.High=2]="High",t))(ma||{});const _a={extension:{type:rs.LoadParser,priority:ma.Low},name:"loadJson",test:t=>aa(t,"application/json")||oa(t,".json"),load:async t=>await(await A.ADAPTER.fetch(t)).json()};os.add(_a);const ga={name:"loadTxt",extension:{type:rs.LoadParser,priority:ma.Low},test:t=>aa(t,"text/plain")||oa(t,".txt"),load:async t=>await(await A.ADAPTER.fetch(t)).text()};os.add(ga);const xa=["normal","bold","100","200","300","400","500","600","700","800","900"],va=[".ttf",".otf",".woff",".woff2"],ya=["font/ttf","font/otf","font/woff","font/woff2"],Ta=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;function ba(t){const e=$t.extname(t),s=$t.basename(t,e).replace(/(-|_)/g," ").toLowerCase().split(" ").map((t=>t.charAt(0).toUpperCase()+t.slice(1)));let i=s.length>0;for(const t of s)if(!t.match(Ta)){i=!1;break}let r=s.join(" ");return i||(r=`"${r.replace(/[\\"]/g,"\\$&")}"`),r}const Ea={extension:{type:rs.LoadParser,priority:ma.Low},name:"loadWebFont",test:t=>aa(t,ya)||oa(t,va),async load(t,e){var s,i,r,n,a,o;const h=A.ADAPTER.getFontFaceSet();if(h){const l=[],u=null!=(i=null==(s=e.data)?void 0:s.family)?i:ba(t),d=null!=(a=null==(n=null==(r=e.data)?void 0:r.weights)?void 0:n.filter((t=>xa.includes(t))))?a:["normal"],c=null!=(o=e.data)?o:{};for(let e=0;eA.ADAPTER.getFontFaceSet().delete(t)))}};os.add(Ea);let Aa,Ra=0;const Sa={id:"checkImageBitmap",code:"\n async function checkImageBitmap()\n {\n try\n {\n if (typeof createImageBitmap !== 'function') return false;\n\n const response = await fetch('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=');\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n }\n catch (e)\n {\n return false;\n }\n }\n checkImageBitmap().then((result) => { self.postMessage(result); });\n "},wa={id:"loadImageBitmap",code:"\n async function loadImageBitmap(url)\n {\n const response = await fetch(url);\n\n if (!response.ok)\n {\n throw new Error(`[WorkerManager.loadImageBitmap] Failed to fetch ${url}: `\n + `${response.status} ${response.statusText}`);\n }\n\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap;\n }\n self.onmessage = async (event) =>\n {\n try\n {\n const imageBitmap = await loadImageBitmap(event.data.data[0]);\n\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id,\n }, [imageBitmap]);\n }\n catch(e)\n {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id,\n });\n }\n };"};let Ia;const Ma=new class{constructor(){this._initialized=!1,this._createdWorkers=0,this.workerPool=[],this.queue=[],this.resolveHash={}}isImageBitmapSupported(){return void 0!==this._isImageBitmapSupported||(this._isImageBitmapSupported=new Promise((t=>{const e=URL.createObjectURL(new Blob([Sa.code],{type:"application/javascript"})),s=new Worker(e);s.addEventListener("message",(i=>{s.terminate(),URL.revokeObjectURL(e),t(i.data)}))}))),this._isImageBitmapSupported}loadImageBitmap(t){return this._run("loadImageBitmap",[t])}async _initWorkers(){this._initialized||(this._initialized=!0)}getWorker(){void 0===Aa&&(Aa=navigator.hardwareConcurrency||4);let t=this.workerPool.pop();return!t&&this._createdWorkers{this.complete(t.data),this.returnWorker(t.target),this.next()}))),t}returnWorker(t){this.workerPool.push(t)}complete(t){void 0!==t.error?this.resolveHash[t.uuid].reject(t.error):this.resolveHash[t.uuid].resolve(t.data),this.resolveHash[t.uuid]=null}async _run(t,e){await this._initWorkers();const s=new Promise(((s,i)=>{this.queue.push({id:t,arguments:e,resolve:s,reject:i})}));return this.next(),s}next(){if(!this.queue.length)return;const t=this.getWorker();if(!t)return;const e=this.queue.pop(),s=e.id;this.resolveHash[Ra]={resolve:e.resolve,reject:e.reject},t.postMessage({data:e.arguments,uuid:Ra++,id:s})}};function Ca(t,e,s){const i=new Wi(t);return i.baseTexture.on("dispose",(()=>{delete e.promiseCache[s]})),i}const Da=[".jpeg",".jpg",".png",".webp",".avif"],Pa=["image/jpeg","image/png","image/webp","image/avif"];async function Oa(t){const e=await A.ADAPTER.fetch(t);if(!e.ok)throw new Error(`[loadImageBitmap] Failed to fetch ${t}: ${e.status} ${e.statusText}`);const s=await e.blob();return await createImageBitmap(s)}const Fa={name:"loadTextures",extension:{type:rs.LoadParser,priority:ma.High},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test:t=>aa(t,Pa)||oa(t,Da),async load(t,e,s){let i=null;i=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&await Ma.isImageBitmapSupported()?await Ma.loadImageBitmap(t):await Oa(t):await new Promise((e=>{i=new Image,i.crossOrigin=this.config.crossOrigin,i.src=t,i.complete?e(i):i.onload=()=>{e(i)}}));const r=new ys(i,bt({resolution:ss(t)},e.data));return r.resource.src=t,Ca(r,s,t)},unload(t){t.destroy(!0)}};os.add(Fa);const Ba={extension:{type:rs.LoadParser,priority:ma.High},name:"loadSVG",test:t=>aa(t,"image/svg+xml")||oa(t,".svg"),testParse:async t=>fn.test(t),async parse(t,e,s){var i;const r=new fn(t,null==(i=null==e?void 0:e.data)?void 0:i.resourceOptions);await r.load();const n=new ys(r,bt({resolution:ss(t)},null==e?void 0:e.data));return n.resource.src=t,Ca(n,s,t)},load:async(t,e)=>(await A.ADAPTER.fetch(t)).text(),unload:Fa.unload};os.add(Ba);class Na{constructor(){this._defaultBundleIdentifierOptions={connector:"-",createBundleAssetId:(t,e)=>`${t}${this._bundleIdConnector}${e}`,extractAssetIdFromBundle:(t,e)=>e.replace(`${t}${this._bundleIdConnector}`,"")},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(t){var e,s,i;if(this._bundleIdConnector=null!=(e=t.connector)?e:this._bundleIdConnector,this._createBundleAssetId=null!=(s=t.createBundleAssetId)?s:this._createBundleAssetId,this._extractAssetIdFromBundle=null!=(i=t.extractAssetIdFromBundle)?i:this._extractAssetIdFromBundle,"bar"!==this._extractAssetIdFromBundle("foo",this._createBundleAssetId("foo","bar")))throw new Error("[Resolver] GenerateBundleAssetId are not working correctly")}prefer(...t){t.forEach((t=>{this._preferredOrder.push(t),t.priority||(t.priority=Object.keys(t.params))})),this._resolverHash={}}set basePath(t){this._basePath=t}get basePath(){return this._basePath}set rootPath(t){this._rootPath=t}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(t){if("string"==typeof t)this._defaultSearchParams=t;else{const e=t;this._defaultSearchParams=Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}}addManifest(t){this._manifest&&console.warn("[Resolver] Manifest already exists, this will be overwritten"),this._manifest=t,t.bundles.forEach((t=>{this.addBundle(t.name,t.assets)}))}addBundle(t,e){const s=[];Array.isArray(e)?e.forEach((e=>{if("string"==typeof e.name){const i=this._createBundleAssetId(t,e.name);s.push(i),this.add([e.name,i],e.srcs,e.data)}else{const i=e.name.map((e=>this._createBundleAssetId(t,e)));i.forEach((t=>{s.push(t)})),this.add([...e.name,...i],e.srcs)}})):Object.keys(e).forEach((i=>{s.push(this._createBundleAssetId(t,i)),this.add([i,this._createBundleAssetId(t,i)],e[i])})),this._bundles[t]=s}add(t,e,s){const i=ha(t);i.forEach((t=>{this.hasKey(t)&&console.warn(`[Resolver] already has key: ${t} overwriting`)})),Array.isArray(e)||(e="string"==typeof e?da(e):[e]);const r=e.map((t=>{var e;let r=t;if("string"==typeof t){let e=!1;for(let s=0;s{this._assetMap[t]=r}))}resolveBundle(t){const e=ca(t);t=ha(t);const s={};return t.forEach((t=>{const e=this._bundles[t];if(e){const i=this.resolve(e),r={};for(const e in i){const s=i[e];r[this._extractAssetIdFromBundle(t,e)]=s}s[t]=r}})),e?s[t[0]]:s}resolveUrl(t){const e=this.resolve(t);if("string"!=typeof t){const t={};for(const s in e)t[s]=e[s].src;return t}return e.src}resolve(t){const e=ca(t);t=ha(t);const s={};return t.forEach((t=>{var e;if(!this._resolverHash[t])if(this._assetMap[t]){let s=this._assetMap[t];const i=this._getPreferredOrder(s),r=s[0];null==i||i.priority.forEach((t=>{i.params[t].forEach((e=>{const i=s.filter((s=>!!s[t]&&s[t]===e));i.length&&(s=i)}))})),this._resolverHash[t]=null!=(e=s[0])?e:r}else{let e=t;(this._basePath||this._rootPath)&&(e=$t.toAbsolute(e,this._basePath,this._rootPath)),e=this._appendDefaultSearchParams(e),this._resolverHash[t]={src:e}}s[t]=this._resolverHash[t]})),e?s[t[0]]:s}hasKey(t){return!!this._assetMap[t]}hasBundle(t){return!!this._bundles[t]}_getPreferredOrder(t){for(let e=0;et.params.format.includes(e.format)));if(s)return s}return this._preferredOrder[0]}_appendDefaultSearchParams(t){if(!this._defaultSearchParams)return t;return`${t}${/\?/.test(t)?"&":"?"}${this._defaultSearchParams}`}}class La{constructor(){this._detections=[],this._initialized=!1,this.resolver=new Na,this.loader=new fa,this.cache=pa,this._backgroundLoader=new na(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(t={}){var e,s,i,r;if(this._initialized)return void console.warn("[Assets]AssetManager already initialized, did you load before calling this Asset.init()?");if(this._initialized=!0,t.defaultSearchParams&&this.resolver.setDefaultSearchParams(t.defaultSearchParams),t.basePath&&(this.resolver.basePath=t.basePath),t.bundleIdentifier&&this.resolver.setBundleIdentifier(t.bundleIdentifier),t.manifest){let e=t.manifest;"string"==typeof e&&(e=await this.load(e)),this.resolver.addManifest(e)}const n=null!=(s=null==(e=t.texturePreference)?void 0:e.resolution)?s:1,a="number"==typeof n?[n]:n;let o=[];if(null!=(i=t.texturePreference)&&i.format){const e=null==(r=t.texturePreference)?void 0:r.format;o="string"==typeof e?[e]:e;for(const t of this._detections)await t.test()||(o=await t.remove(o))}else for(const t of this._detections)await t.test()&&(o=await t.add(o));this.resolver.prefer({params:{format:o,resolution:a}}),t.preferences&&this.setPreferences(t.preferences)}add(t,e,s){this.resolver.add(t,e,s)}async load(t,e){this._initialized||await this.init();const s=ca(t),i=ha(t).map((t=>"string"!=typeof t?(this.resolver.add(t.src,t),t.src):(this.resolver.hasKey(t)||this.resolver.add(t,t),t))),r=this.resolver.resolve(i),n=await this._mapLoadToResolve(r,e);return s?n[i[0]]:n}addBundle(t,e){this.resolver.addBundle(t,e)}async loadBundle(t,e){this._initialized||await this.init();let s=!1;"string"==typeof t&&(s=!0,t=[t]);const i=this.resolver.resolveBundle(t),r={},n=Object.keys(i);let a=0,o=0;const h=()=>{null==e||e(++a/o)},l=n.map((t=>{const e=i[t];return o+=Object.keys(e).length,this._mapLoadToResolve(e,h).then((e=>{r[t]=e}))}));return await Promise.all(l),s?r[t[0]]:r}async backgroundLoad(t){this._initialized||await this.init(),"string"==typeof t&&(t=[t]);const e=this.resolver.resolve(t);this._backgroundLoader.add(Object.values(e))}async backgroundLoadBundle(t){this._initialized||await this.init(),"string"==typeof t&&(t=[t]);const e=this.resolver.resolveBundle(t);Object.values(e).forEach((t=>{this._backgroundLoader.add(Object.values(t))}))}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(t){if("string"==typeof t)return pa.get(t);const e={};for(let s=0;s{const s=r[t.src],a=[t.src];t.alias&&a.push(...t.alias),n[i[e]]=s,pa.set(a,s)})),n}async unload(t){this._initialized||await this.init();const e=ha(t).map((t=>"string"!=typeof t?t.src:t)),s=this.resolver.resolve(e);await this._unloadFromResolved(s)}async unloadBundle(t){this._initialized||await this.init(),t=ha(t);const e=this.resolver.resolveBundle(t),s=Object.keys(e).map((t=>this._unloadFromResolved(e[t])));await Promise.all(s)}async _unloadFromResolved(t){const e=Object.values(t);e.forEach((t=>{pa.remove(t.src)})),await this.loader.unload(e)}get detections(){return this._detections}get preferWorkers(){return Fa.config.preferWorkers}set preferWorkers(t){Kt("7.2.0","Assets.prefersWorkers is deprecated, use Assets.setPreferences({ preferWorkers: true }) instead."),this.setPreferences({preferWorkers:t})}setPreferences(t){this.loader.parsers.forEach((e=>{!e.config||Object.keys(e.config).filter((e=>e in t)).forEach((s=>{e.config[s]=t[s]}))}))}}const Ga=new La;os.handleByList(rs.LoadParser,Ga.loader.parsers).handleByList(rs.ResolveParser,Ga.resolver.parsers).handleByList(rs.CacheParser,Ga.cache.parsers).handleByList(rs.DetectionParser,Ga.detections);const Ua={extension:rs.CacheParser,test:t=>Array.isArray(t)&&t.every((t=>t instanceof Wi)),getCacheableAssets:(t,e)=>{const s={};return t.forEach((t=>{e.forEach(((e,i)=>{s[t+(0===i?"":i+1)]=e}))})),s}};os.add(Ua);const ka={extension:{type:rs.DetectionParser,priority:1},test:async()=>{if(!globalThis.createImageBitmap)return!1;const t=await A.ADAPTER.fetch("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=").then((t=>t.blob()));return createImageBitmap(t).then((()=>!0),(()=>!1))},add:async t=>[...t,"avif"],remove:async t=>t.filter((t=>"avif"!==t))};os.add(ka);const Xa={extension:{type:rs.DetectionParser,priority:0},test:async()=>{if(!globalThis.createImageBitmap)return!1;const t=await A.ADAPTER.fetch("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=").then((t=>t.blob()));return createImageBitmap(t).then((()=>!0),(()=>!1))},add:async t=>[...t,"webp"],remove:async t=>t.filter((t=>"webp"!==t))};os.add(Xa);const Ha=["png","jpg","jpeg"],Va={extension:{type:rs.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async t=>[...t,...Ha],remove:async t=>t.filter((t=>!Ha.includes(t)))};os.add(Va);const za={extension:rs.ResolveParser,test:Fa.test,parse:t=>{var e,s;return{resolution:parseFloat(null!=(s=null==(e=A.RETINA_PREFIX.exec(t))?void 0:e[1])?s:"1"),format:t.split(".").pop(),src:t}}};os.add(za);var Wa=(t=>(t[t.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",t[t.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",t[t.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",t[t.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",t[t.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",t[t.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",t[t.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",t[t.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",t[t.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",t[t.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",t[t.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",t[t.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",t[t.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",t[t.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",t[t.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",t[t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",t[t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",t[t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",t[t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",t[t.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",t[t.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",t[t.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",t[t.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",t[t.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",t))(Wa||{});const Ya={33776:.5,33777:.5,33778:1,33779:1,35916:.5,35917:.5,35918:1,35919:1,37488:.5,37489:.5,37490:1,37491:1,37492:.5,37496:1,37493:.5,37497:1,37494:.5,37495:.5,35840:.5,35842:.5,35841:.25,35843:.25,36196:.5,35986:.5,35986:1,34798:1,37808:1};let ja,$a;function qa(){$a={s3tc:ja.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:ja.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:ja.getExtension("WEBGL_compressed_texture_etc"),etc1:ja.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:ja.getExtension("WEBGL_compressed_texture_pvrtc")||ja.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:ja.getExtension("WEBGL_compressed_texture_atc"),astc:ja.getExtension("WEBGL_compressed_texture_astc")}}const Ka={extension:{type:rs.DetectionParser,priority:2},test:async()=>{const t=A.ADAPTER.createCanvas().getContext("webgl");return t?(ja=t,!0):(console.warn("WebGL not available for compressed textures."),!1)},add:async t=>{$a||qa();const e=[];for(const t in $a)!$a[t]||e.push(t);return[...e,...t]},remove:async t=>($a||qa(),t.filter((t=>!(t in $a))))};os.add(Ka);class Za extends gs{constructor(t,e={width:1,height:1,autoLoad:!0}){let s,i;"string"==typeof t?(s=t,i=new Uint8Array):(s=null,i=t),super(i,e),this.origin=s,this.buffer=i?new hs(i):null,this._load=null,this.loaded=!1,null!==this.origin&&!1!==e.autoLoad&&this.load(),null===this.origin&&this.buffer&&(this._load=Promise.resolve(this),this.loaded=!0,this.onBlobLoaded(this.buffer.rawBinaryData))}onBlobLoaded(t){}load(){return this._load||(this._load=fetch(this.origin).then((t=>t.blob())).then((t=>t.arrayBuffer())).then((t=>(this.data=new Uint32Array(t),this.buffer=new hs(t),this.loaded=!0,this.onBlobLoaded(t),this.update(),this)))),this._load}}class Qa extends Za{constructor(t,e){super(t,e),this.format=e.format,this.levels=e.levels||1,this._width=e.width,this._height=e.height,this._extension=Qa._formatToExtension(this.format),(e.levelBuffers||this.buffer)&&(this._levelBuffers=e.levelBuffers||Qa._createLevelBuffers(t instanceof Uint8Array?t:this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height))}upload(t,e,s){const i=t.gl;if(!t.context.extensions[this._extension])throw new Error(`${this._extension} textures are not supported on the current machine`);if(!this._levelBuffers)return!1;for(let t=0,e=this.levels;t=33776&&t<=33779)return"s3tc";if(t>=37488&&t<=37497)return"etc";if(t>=35840&&t<=35843)return"pvrtc";if(t>=36196)return"etc1";if(t>=35986&&t<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")}static _createLevelBuffers(t,e,s,i,r,n,a){const o=new Array(s);let h=t.byteOffset,l=n,u=a,d=l+i-1&~(i-1),c=u+r-1&~(r-1),p=d*c*Ya[e];for(let n=0;n1?l:d,levelHeight:s>1?u:c,levelBuffer:new Uint8Array(t.buffer,h,p)},h+=p,l=l>>1||1,u=u>>1||1,d=l+i-1&~(i-1),c=u+r-1&~(r-1),p=d*c*Ya[e];return o}}const Ja=124,to=3,eo=4,so=7,io=19,ro=2,no=0,ao=1,oo=2,ho=3;var lo=(t=>(t[t.DXGI_FORMAT_UNKNOWN=0]="DXGI_FORMAT_UNKNOWN",t[t.DXGI_FORMAT_R32G32B32A32_TYPELESS=1]="DXGI_FORMAT_R32G32B32A32_TYPELESS",t[t.DXGI_FORMAT_R32G32B32A32_FLOAT=2]="DXGI_FORMAT_R32G32B32A32_FLOAT",t[t.DXGI_FORMAT_R32G32B32A32_UINT=3]="DXGI_FORMAT_R32G32B32A32_UINT",t[t.DXGI_FORMAT_R32G32B32A32_SINT=4]="DXGI_FORMAT_R32G32B32A32_SINT",t[t.DXGI_FORMAT_R32G32B32_TYPELESS=5]="DXGI_FORMAT_R32G32B32_TYPELESS",t[t.DXGI_FORMAT_R32G32B32_FLOAT=6]="DXGI_FORMAT_R32G32B32_FLOAT",t[t.DXGI_FORMAT_R32G32B32_UINT=7]="DXGI_FORMAT_R32G32B32_UINT",t[t.DXGI_FORMAT_R32G32B32_SINT=8]="DXGI_FORMAT_R32G32B32_SINT",t[t.DXGI_FORMAT_R16G16B16A16_TYPELESS=9]="DXGI_FORMAT_R16G16B16A16_TYPELESS",t[t.DXGI_FORMAT_R16G16B16A16_FLOAT=10]="DXGI_FORMAT_R16G16B16A16_FLOAT",t[t.DXGI_FORMAT_R16G16B16A16_UNORM=11]="DXGI_FORMAT_R16G16B16A16_UNORM",t[t.DXGI_FORMAT_R16G16B16A16_UINT=12]="DXGI_FORMAT_R16G16B16A16_UINT",t[t.DXGI_FORMAT_R16G16B16A16_SNORM=13]="DXGI_FORMAT_R16G16B16A16_SNORM",t[t.DXGI_FORMAT_R16G16B16A16_SINT=14]="DXGI_FORMAT_R16G16B16A16_SINT",t[t.DXGI_FORMAT_R32G32_TYPELESS=15]="DXGI_FORMAT_R32G32_TYPELESS",t[t.DXGI_FORMAT_R32G32_FLOAT=16]="DXGI_FORMAT_R32G32_FLOAT",t[t.DXGI_FORMAT_R32G32_UINT=17]="DXGI_FORMAT_R32G32_UINT",t[t.DXGI_FORMAT_R32G32_SINT=18]="DXGI_FORMAT_R32G32_SINT",t[t.DXGI_FORMAT_R32G8X24_TYPELESS=19]="DXGI_FORMAT_R32G8X24_TYPELESS",t[t.DXGI_FORMAT_D32_FLOAT_S8X24_UINT=20]="DXGI_FORMAT_D32_FLOAT_S8X24_UINT",t[t.DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS=21]="DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",t[t.DXGI_FORMAT_X32_TYPELESS_G8X24_UINT=22]="DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",t[t.DXGI_FORMAT_R10G10B10A2_TYPELESS=23]="DXGI_FORMAT_R10G10B10A2_TYPELESS",t[t.DXGI_FORMAT_R10G10B10A2_UNORM=24]="DXGI_FORMAT_R10G10B10A2_UNORM",t[t.DXGI_FORMAT_R10G10B10A2_UINT=25]="DXGI_FORMAT_R10G10B10A2_UINT",t[t.DXGI_FORMAT_R11G11B10_FLOAT=26]="DXGI_FORMAT_R11G11B10_FLOAT",t[t.DXGI_FORMAT_R8G8B8A8_TYPELESS=27]="DXGI_FORMAT_R8G8B8A8_TYPELESS",t[t.DXGI_FORMAT_R8G8B8A8_UNORM=28]="DXGI_FORMAT_R8G8B8A8_UNORM",t[t.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB=29]="DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",t[t.DXGI_FORMAT_R8G8B8A8_UINT=30]="DXGI_FORMAT_R8G8B8A8_UINT",t[t.DXGI_FORMAT_R8G8B8A8_SNORM=31]="DXGI_FORMAT_R8G8B8A8_SNORM",t[t.DXGI_FORMAT_R8G8B8A8_SINT=32]="DXGI_FORMAT_R8G8B8A8_SINT",t[t.DXGI_FORMAT_R16G16_TYPELESS=33]="DXGI_FORMAT_R16G16_TYPELESS",t[t.DXGI_FORMAT_R16G16_FLOAT=34]="DXGI_FORMAT_R16G16_FLOAT",t[t.DXGI_FORMAT_R16G16_UNORM=35]="DXGI_FORMAT_R16G16_UNORM",t[t.DXGI_FORMAT_R16G16_UINT=36]="DXGI_FORMAT_R16G16_UINT",t[t.DXGI_FORMAT_R16G16_SNORM=37]="DXGI_FORMAT_R16G16_SNORM",t[t.DXGI_FORMAT_R16G16_SINT=38]="DXGI_FORMAT_R16G16_SINT",t[t.DXGI_FORMAT_R32_TYPELESS=39]="DXGI_FORMAT_R32_TYPELESS",t[t.DXGI_FORMAT_D32_FLOAT=40]="DXGI_FORMAT_D32_FLOAT",t[t.DXGI_FORMAT_R32_FLOAT=41]="DXGI_FORMAT_R32_FLOAT",t[t.DXGI_FORMAT_R32_UINT=42]="DXGI_FORMAT_R32_UINT",t[t.DXGI_FORMAT_R32_SINT=43]="DXGI_FORMAT_R32_SINT",t[t.DXGI_FORMAT_R24G8_TYPELESS=44]="DXGI_FORMAT_R24G8_TYPELESS",t[t.DXGI_FORMAT_D24_UNORM_S8_UINT=45]="DXGI_FORMAT_D24_UNORM_S8_UINT",t[t.DXGI_FORMAT_R24_UNORM_X8_TYPELESS=46]="DXGI_FORMAT_R24_UNORM_X8_TYPELESS",t[t.DXGI_FORMAT_X24_TYPELESS_G8_UINT=47]="DXGI_FORMAT_X24_TYPELESS_G8_UINT",t[t.DXGI_FORMAT_R8G8_TYPELESS=48]="DXGI_FORMAT_R8G8_TYPELESS",t[t.DXGI_FORMAT_R8G8_UNORM=49]="DXGI_FORMAT_R8G8_UNORM",t[t.DXGI_FORMAT_R8G8_UINT=50]="DXGI_FORMAT_R8G8_UINT",t[t.DXGI_FORMAT_R8G8_SNORM=51]="DXGI_FORMAT_R8G8_SNORM",t[t.DXGI_FORMAT_R8G8_SINT=52]="DXGI_FORMAT_R8G8_SINT",t[t.DXGI_FORMAT_R16_TYPELESS=53]="DXGI_FORMAT_R16_TYPELESS",t[t.DXGI_FORMAT_R16_FLOAT=54]="DXGI_FORMAT_R16_FLOAT",t[t.DXGI_FORMAT_D16_UNORM=55]="DXGI_FORMAT_D16_UNORM",t[t.DXGI_FORMAT_R16_UNORM=56]="DXGI_FORMAT_R16_UNORM",t[t.DXGI_FORMAT_R16_UINT=57]="DXGI_FORMAT_R16_UINT",t[t.DXGI_FORMAT_R16_SNORM=58]="DXGI_FORMAT_R16_SNORM",t[t.DXGI_FORMAT_R16_SINT=59]="DXGI_FORMAT_R16_SINT",t[t.DXGI_FORMAT_R8_TYPELESS=60]="DXGI_FORMAT_R8_TYPELESS",t[t.DXGI_FORMAT_R8_UNORM=61]="DXGI_FORMAT_R8_UNORM",t[t.DXGI_FORMAT_R8_UINT=62]="DXGI_FORMAT_R8_UINT",t[t.DXGI_FORMAT_R8_SNORM=63]="DXGI_FORMAT_R8_SNORM",t[t.DXGI_FORMAT_R8_SINT=64]="DXGI_FORMAT_R8_SINT",t[t.DXGI_FORMAT_A8_UNORM=65]="DXGI_FORMAT_A8_UNORM",t[t.DXGI_FORMAT_R1_UNORM=66]="DXGI_FORMAT_R1_UNORM",t[t.DXGI_FORMAT_R9G9B9E5_SHAREDEXP=67]="DXGI_FORMAT_R9G9B9E5_SHAREDEXP",t[t.DXGI_FORMAT_R8G8_B8G8_UNORM=68]="DXGI_FORMAT_R8G8_B8G8_UNORM",t[t.DXGI_FORMAT_G8R8_G8B8_UNORM=69]="DXGI_FORMAT_G8R8_G8B8_UNORM",t[t.DXGI_FORMAT_BC1_TYPELESS=70]="DXGI_FORMAT_BC1_TYPELESS",t[t.DXGI_FORMAT_BC1_UNORM=71]="DXGI_FORMAT_BC1_UNORM",t[t.DXGI_FORMAT_BC1_UNORM_SRGB=72]="DXGI_FORMAT_BC1_UNORM_SRGB",t[t.DXGI_FORMAT_BC2_TYPELESS=73]="DXGI_FORMAT_BC2_TYPELESS",t[t.DXGI_FORMAT_BC2_UNORM=74]="DXGI_FORMAT_BC2_UNORM",t[t.DXGI_FORMAT_BC2_UNORM_SRGB=75]="DXGI_FORMAT_BC2_UNORM_SRGB",t[t.DXGI_FORMAT_BC3_TYPELESS=76]="DXGI_FORMAT_BC3_TYPELESS",t[t.DXGI_FORMAT_BC3_UNORM=77]="DXGI_FORMAT_BC3_UNORM",t[t.DXGI_FORMAT_BC3_UNORM_SRGB=78]="DXGI_FORMAT_BC3_UNORM_SRGB",t[t.DXGI_FORMAT_BC4_TYPELESS=79]="DXGI_FORMAT_BC4_TYPELESS",t[t.DXGI_FORMAT_BC4_UNORM=80]="DXGI_FORMAT_BC4_UNORM",t[t.DXGI_FORMAT_BC4_SNORM=81]="DXGI_FORMAT_BC4_SNORM",t[t.DXGI_FORMAT_BC5_TYPELESS=82]="DXGI_FORMAT_BC5_TYPELESS",t[t.DXGI_FORMAT_BC5_UNORM=83]="DXGI_FORMAT_BC5_UNORM",t[t.DXGI_FORMAT_BC5_SNORM=84]="DXGI_FORMAT_BC5_SNORM",t[t.DXGI_FORMAT_B5G6R5_UNORM=85]="DXGI_FORMAT_B5G6R5_UNORM",t[t.DXGI_FORMAT_B5G5R5A1_UNORM=86]="DXGI_FORMAT_B5G5R5A1_UNORM",t[t.DXGI_FORMAT_B8G8R8A8_UNORM=87]="DXGI_FORMAT_B8G8R8A8_UNORM",t[t.DXGI_FORMAT_B8G8R8X8_UNORM=88]="DXGI_FORMAT_B8G8R8X8_UNORM",t[t.DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM=89]="DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",t[t.DXGI_FORMAT_B8G8R8A8_TYPELESS=90]="DXGI_FORMAT_B8G8R8A8_TYPELESS",t[t.DXGI_FORMAT_B8G8R8A8_UNORM_SRGB=91]="DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",t[t.DXGI_FORMAT_B8G8R8X8_TYPELESS=92]="DXGI_FORMAT_B8G8R8X8_TYPELESS",t[t.DXGI_FORMAT_B8G8R8X8_UNORM_SRGB=93]="DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",t[t.DXGI_FORMAT_BC6H_TYPELESS=94]="DXGI_FORMAT_BC6H_TYPELESS",t[t.DXGI_FORMAT_BC6H_UF16=95]="DXGI_FORMAT_BC6H_UF16",t[t.DXGI_FORMAT_BC6H_SF16=96]="DXGI_FORMAT_BC6H_SF16",t[t.DXGI_FORMAT_BC7_TYPELESS=97]="DXGI_FORMAT_BC7_TYPELESS",t[t.DXGI_FORMAT_BC7_UNORM=98]="DXGI_FORMAT_BC7_UNORM",t[t.DXGI_FORMAT_BC7_UNORM_SRGB=99]="DXGI_FORMAT_BC7_UNORM_SRGB",t[t.DXGI_FORMAT_AYUV=100]="DXGI_FORMAT_AYUV",t[t.DXGI_FORMAT_Y410=101]="DXGI_FORMAT_Y410",t[t.DXGI_FORMAT_Y416=102]="DXGI_FORMAT_Y416",t[t.DXGI_FORMAT_NV12=103]="DXGI_FORMAT_NV12",t[t.DXGI_FORMAT_P010=104]="DXGI_FORMAT_P010",t[t.DXGI_FORMAT_P016=105]="DXGI_FORMAT_P016",t[t.DXGI_FORMAT_420_OPAQUE=106]="DXGI_FORMAT_420_OPAQUE",t[t.DXGI_FORMAT_YUY2=107]="DXGI_FORMAT_YUY2",t[t.DXGI_FORMAT_Y210=108]="DXGI_FORMAT_Y210",t[t.DXGI_FORMAT_Y216=109]="DXGI_FORMAT_Y216",t[t.DXGI_FORMAT_NV11=110]="DXGI_FORMAT_NV11",t[t.DXGI_FORMAT_AI44=111]="DXGI_FORMAT_AI44",t[t.DXGI_FORMAT_IA44=112]="DXGI_FORMAT_IA44",t[t.DXGI_FORMAT_P8=113]="DXGI_FORMAT_P8",t[t.DXGI_FORMAT_A8P8=114]="DXGI_FORMAT_A8P8",t[t.DXGI_FORMAT_B4G4R4A4_UNORM=115]="DXGI_FORMAT_B4G4R4A4_UNORM",t[t.DXGI_FORMAT_P208=116]="DXGI_FORMAT_P208",t[t.DXGI_FORMAT_V208=117]="DXGI_FORMAT_V208",t[t.DXGI_FORMAT_V408=118]="DXGI_FORMAT_V408",t[t.DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE=119]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE",t[t.DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE=120]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE",t[t.DXGI_FORMAT_FORCE_UINT=121]="DXGI_FORMAT_FORCE_UINT",t))(lo||{}),uo=(t=>(t[t.DDS_DIMENSION_TEXTURE1D=2]="DDS_DIMENSION_TEXTURE1D",t[t.DDS_DIMENSION_TEXTURE2D=3]="DDS_DIMENSION_TEXTURE2D",t[t.DDS_DIMENSION_TEXTURE3D=6]="DDS_DIMENSION_TEXTURE3D",t))(uo||{});const co={827611204:Wa.COMPRESSED_RGBA_S3TC_DXT1_EXT,861165636:Wa.COMPRESSED_RGBA_S3TC_DXT3_EXT,894720068:Wa.COMPRESSED_RGBA_S3TC_DXT5_EXT},po={70:Wa.COMPRESSED_RGBA_S3TC_DXT1_EXT,71:Wa.COMPRESSED_RGBA_S3TC_DXT1_EXT,73:Wa.COMPRESSED_RGBA_S3TC_DXT3_EXT,74:Wa.COMPRESSED_RGBA_S3TC_DXT3_EXT,76:Wa.COMPRESSED_RGBA_S3TC_DXT5_EXT,77:Wa.COMPRESSED_RGBA_S3TC_DXT5_EXT,72:Wa.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,75:Wa.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,78:Wa.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT};function fo(t){const e=new Uint32Array(t);if(542327876!==e[0])throw new Error("Invalid DDS file magic word");const s=new Uint32Array(t,0,Ja/Uint32Array.BYTES_PER_ELEMENT),i=s[to],r=s[eo],n=s[so],a=new Uint32Array(t,io*Uint32Array.BYTES_PER_ELEMENT,32/Uint32Array.BYTES_PER_ELEMENT),o=a[1];if(4&o){const s=a[ro];if(808540228!==s){const e=co[s],a=new Uint8Array(t,128);return[new Qa(a,{format:e,width:r,height:i,levels:n})]}const o=128,h=new Uint32Array(e.buffer,o,20/Uint32Array.BYTES_PER_ELEMENT),l=h[no],u=h[ao],d=h[oo],c=h[ho],p=po[l];if(void 0===p)throw new Error(`DDSParser cannot parse texture data with DXGI format ${l}`);if(4===d)throw new Error("DDSParser does not support cubemap textures");if(6===u)throw new Error("DDSParser does not supported 3D texture data");const f=new Array,m=148;if(1===c)f.push(new Uint8Array(t,m));else{const e=Ya[p];let s=0,a=r,o=i;for(let t=0;t>>=1,o>>>=1}let h=m;for(let e=0;enew Qa(t,{format:p,width:r,height:i,levels:n})))}throw 64&o?new Error("DDSParser does not support uncompressed texture data."):512&o?new Error("DDSParser does not supported YUV uncompressed texture data."):131072&o?new Error("DDSParser does not support single-channel (lumninance) texture data!"):2&o?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}const mo=[171,75,84,88,32,49,49,187,13,10,26,10],_o=12,go=16,xo=24,vo=28,yo=36,To=40,bo=44,Eo=48,Ao=52,Ro=56,So=60,wo=64,Io={[u.UNSIGNED_BYTE]:1,[u.UNSIGNED_SHORT]:2,[u.INT]:4,[u.UNSIGNED_INT]:4,[u.FLOAT]:4,[u.HALF_FLOAT]:8},Mo={[h.RGBA]:4,[h.RGB]:3,[h.RG]:2,[h.RED]:1,[h.LUMINANCE]:1,[h.LUMINANCE_ALPHA]:2,[h.ALPHA]:1},Co={[u.UNSIGNED_SHORT_4_4_4_4]:2,[u.UNSIGNED_SHORT_5_5_5_1]:2,[u.UNSIGNED_SHORT_5_6_5]:2};function Do(t,e,s=!1){const i=new DataView(e);if(!function(t,e){for(let s=0;se-r){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}let h=0;for(;h1||0!==n?E:R,levelHeight:f>1||0!==n?A:S,levelBuffer:new Uint8Array(e,a,b)},a+=b}w+=s+4,w=w%4!=0?w+4-w%4:w,E=E>>1||1,A=A>>1||1,R=E+4-1&-4,S=A+4-1&-4,b=R*S*v}return 0!==n?{uncompressed:x.map((t=>{let e=t[0].levelBuffer,s=!1;return n===u.FLOAT?e=new Float32Array(t[0].levelBuffer.buffer,t[0].levelBuffer.byteOffset,t[0].levelBuffer.byteLength/4):n===u.UNSIGNED_INT?(s=!0,e=new Uint32Array(t[0].levelBuffer.buffer,t[0].levelBuffer.byteOffset,t[0].levelBuffer.byteLength/4)):n===u.INT&&(s=!0,e=new Int32Array(t[0].levelBuffer.buffer,t[0].levelBuffer.byteOffset,t[0].levelBuffer.byteLength/4)),{resource:new gs(e,{width:t[0].levelWidth,height:t[0].levelHeight}),type:n,format:s?Po(a):a}})),kvData:T}:{compressed:x.map((t=>new Qa(null,{format:o,width:h,height:l,levels:f,levelBuffers:t}))),kvData:T}}function Po(t){switch(t){case h.RGBA:return h.RGBA_INTEGER;case h.RGB:return h.RGB_INTEGER;case h.RG:return h.RG_INTEGER;case h.RED:return h.RED_INTEGER;default:return t}}const Oo={extension:{type:rs.LoadParser,priority:ma.High},name:"loadDDS",test:t=>oa(t,".dds"),async load(t,e,s){const i=fo(await(await A.ADAPTER.fetch(t)).arrayBuffer()).map((i=>Ca(new ys(i,bt({mipmap:f.OFF,alphaMode:m.NO_PREMULTIPLIED_ALPHA,resolution:ss(t)},e.data)),s,t)));return 1===i.length?i[0]:i},unload(t){Array.isArray(t)?t.forEach((t=>t.destroy(!0))):t.destroy(!0)}};os.add(Oo);const Fo={extension:{type:rs.LoadParser,priority:ma.High},name:"loadKTX",test:t=>oa(t,".ktx"),async load(t,e,s){const i=await(await A.ADAPTER.fetch(t)).arrayBuffer(),{compressed:r,uncompressed:n,kvData:a}=Do(t,i),o=null!=r?r:n,h=bt({mipmap:f.OFF,alphaMode:m.NO_PREMULTIPLIED_ALPHA,resolution:ss(t)},e.data),l=o.map((e=>{o===n&&Object.assign(h,{type:e.type,format:e.format});const i=new ys(e,h);return i.ktxKeyValueData=a,Ca(i,s,t)}));return 1===l.length?l[0]:l},unload(t){Array.isArray(t)?t.forEach((t=>t.destroy(!0))):t.destroy(!0)}};os.add(Fo);const Bo={extension:rs.ResolveParser,test:t=>{const e=t.split("?")[0].split(".").pop();return["basis","ktx","dds"].includes(e)},parse:t=>{var e,s,i,r;if("ktx"===t.split("?")[0].split(".").pop()){const i=[".s3tc.ktx",".s3tc_sRGB.ktx",".etc.ktx",".etc1.ktx",".pvrt.ktx",".atc.ktx",".astc.ktx"];if(i.some((e=>t.endsWith(e))))return{resolution:parseFloat(null!=(s=null==(e=A.RETINA_PREFIX.exec(t))?void 0:e[1])?s:"1"),format:i.find((e=>t.endsWith(e))),src:t}}return{resolution:parseFloat(null!=(r=null==(i=A.RETINA_PREFIX.exec(t))?void 0:i[1])?r:"1"),format:t.split(".").pop(),src:t}}};os.add(Bo);const No=new Ls,Lo=class{constructor(t){this.renderer=t}async image(t,e,s){const i=new Image;return i.src=await this.base64(t,e,s),i}async base64(t,e,s){const i=this.canvas(t);if(void 0!==i.toBlob)return new Promise(((t,r)=>{i.toBlob((e=>{if(!e)return void r(new Error("ICanvas.toBlob failed!"));const s=new FileReader;s.onload=()=>t(s.result),s.onerror=r,s.readAsDataURL(e)}),e,s)}));if(void 0!==i.toDataURL)return i.toDataURL(e,s);if(void 0!==i.convertToBlob){const t=await i.convertToBlob({type:e,quality:s});return new Promise(((e,s)=>{const i=new FileReader;i.onload=()=>e(i.result),i.onerror=s,i.readAsDataURL(t)}))}throw new Error("Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, or ICanvas.convertToBlob to be implemented")}canvas(t,e){const{pixels:s,width:i,height:r,flipY:n}=this._rawPixels(t,e);n&&Lo._flipY(s,i,r),Lo._unpremultiplyAlpha(s);const a=new qe(i,r,1),o=new ImageData(new Uint8ClampedArray(s.buffer),i,r);return a.context.putImageData(o,0,0),a.canvas}pixels(t,e){const{pixels:s,width:i,height:r,flipY:n}=this._rawPixels(t,e);return n&&Lo._flipY(s,i,r),Lo._unpremultiplyAlpha(s),s}_rawPixels(t,e){const s=this.renderer;if(!s)throw new Error("The Extract has already been destroyed");let i,r,n=!1,a=!1;if(t&&(t instanceof Yi?r=t:(r=s.generateTexture(t,{resolution:s.resolution,multisample:s.multisample}),a=!0)),r){if(i=r.baseTexture.resolution,e=null!=e?e:r.frame,n=!1,!a){s.renderTexture.bind(r);const t=r.framebuffer.glFramebuffers[s.CONTEXT_UID];t.blitFramebuffer&&s.framebuffer.bind(t.blitFramebuffer)}}else i=s.resolution,e||((e=No).width=s.width/i,e.height=s.height/i),n=!0,s.renderTexture.bind();const o=Math.round(e.width*i),h=Math.round(e.height*i),l=new Uint8Array(4*o*h),u=s.gl;return u.readPixels(Math.round(e.x*i),Math.round(e.y*i),o,h,u.RGBA,u.UNSIGNED_BYTE,l),a&&(null==r||r.destroy(!0)),{pixels:l,width:o,height:h,flipY:n}}destroy(){this.renderer=null}static _flipY(t,e,s){const i=e<<2,r=s>>1,n=new Uint8Array(i);for(let e=0;e=0&&o>=0&&r>=0&&n>=0))return void(e.length=0);const h=Math.ceil(2.3*Math.sqrt(a+o)),l=8*h+(r?4:0)+(n?4:0);if(e.length=l,0===l)return;if(0===h)return e.length=8,e[0]=e[6]=s+r,e[1]=e[3]=i+n,e[2]=e[4]=s-r,void(e[5]=e[7]=i-n);let u=0,d=4*h+(r?2:0)+2,c=d,p=l;{const t=r+a,o=n,h=s+t,l=s-t,f=i+o;if(e[u++]=h,e[u++]=f,e[--d]=f,e[--d]=l,n){const t=i-o;e[c++]=l,e[c++]=t,e[--p]=t,e[--p]=h}}for(let t=1;t0||e&&i<=0){const e=s/2;for(let i=e+e%2;i=6){ko(s,!1);const t=[];for(let e=0;e=0&&n>=0&&a.push(s,i,s+r,i,s+r,i+n,s,i+n)},triangulate(t,e){const s=t.points,i=e.points;if(0===s.length)return;const r=i.length/2;i.push(s[0],s[1],s[2],s[3],s[6],s[7],s[4],s[5]),e.indices.push(r,r+1,r+2,r+1,r+2,r+3)}},Vo={build(t){Uo.build(t)},triangulate(t,e){Uo.triangulate(t,e)}};var zo=(t=>(t.MITER="miter",t.BEVEL="bevel",t.ROUND="round",t))(zo||{}),Wo=(t=>(t.BUTT="butt",t.ROUND="round",t.SQUARE="square",t))(Wo||{});const Yo={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount(t,e=20){if(!this.adaptive||!t||isNaN(t))return e;let s=Math.ceil(t/this.maxLength);return sthis.maxSegments&&(s=this.maxSegments),s}},jo=Yo;class $o{static curveTo(t,e,s,i,r,n){const a=n[n.length-2],o=n[n.length-1]-e,h=a-t,l=i-e,u=s-t,d=Math.abs(o*u-h*l);if(d<1e-8||0===r)return(n[n.length-2]!==t||n[n.length-1]!==e)&&n.push(t,e),null;const c=o*o+h*h,p=l*l+u*u,f=o*l+h*u,m=r*Math.sqrt(c)/d,_=r*Math.sqrt(p)/d,g=m*f/c,x=_*f/p,v=m*u+_*h,y=m*l+_*o,T=h*(_+g),b=o*(_+g),E=u*(m+x),A=l*(m+x);return{cx:v+t,cy:y+e,radius:r,startAngle:Math.atan2(b-y,T-v),endAngle:Math.atan2(A-y,E-v),anticlockwise:h*l>u*o}}static arc(t,e,s,i,r,n,a,o,h){const l=a-n,u=Yo._segmentsCount(Math.abs(l)*r,40*Math.ceil(Math.abs(l)/Ds)),d=l/(2*u),c=2*d,p=Math.cos(d),f=Math.sin(d),m=u-1,_=m%1/m;for(let t=0;t<=m;++t){const e=d+n+c*(t+_*t),a=Math.cos(e),o=-Math.sin(e);h.push((p*a+f*o)*r+s,(p*-o+f*a)*r+i)}}}class qo{constructor(){this.reset()}begin(t,e,s){this.reset(),this.style=t,this.start=e,this.attribStart=s}end(t,e){this.attribSize=e-this.attribStart,this.size=t-this.start}reset(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0}}class Ko{static curveLength(t,e,s,i,r,n,a,o){let h=0,l=0,u=0,d=0,c=0,p=0,f=0,m=0,_=0,g=0,x=0,v=t,y=e;for(let T=1;T<=10;++T)l=T/10,u=l*l,d=u*l,c=1-l,p=c*c,f=p*c,m=f*t+3*p*l*s+3*c*u*r+d*a,_=f*e+3*p*l*i+3*c*u*n+d*o,g=v-m,x=y-_,v=m,y=_,h+=Math.sqrt(g*g+x*x);return h}static curveTo(t,e,s,i,r,n,a){const o=a[a.length-2],h=a[a.length-1];a.length-=2;const l=Yo._segmentsCount(Ko.curveLength(o,h,t,e,s,i,r,n));let u=0,d=0,c=0,p=0,f=0;a.push(o,h);for(let m=1,_=0;m<=l;++m)_=m/l,u=1-_,d=u*u,c=d*u,p=_*_,f=p*_,a.push(c*o+3*d*_*t+3*u*p*s+f*r,c*h+3*d*_*e+3*u*p*i+f*n)}}function Zo(t,e,s,i,r,n,a,o){let h,l;a?(h=i,l=-s):(h=-i,l=s);const u=t-s*r+h,d=e-i*r+l,c=t+s*n+h,p=e+i*n+l;return o.push(u,d,c,p),2}function Qo(t,e,s,i,r,n,a,o){const h=s-t,l=i-e;let u=Math.atan2(h,l),d=Math.atan2(r-t,n-e);o&&ud&&(d+=2*Math.PI);let c=u;const p=d-u,f=Math.abs(p),m=Math.sqrt(h*h+l*l),_=1+(15*f*Math.sqrt(m)/Math.PI>>0),g=p/_;if(c+=g,o){a.push(t,e,s,i);for(let s=1,i=c;s<_;s++,i+=g)a.push(t,e,t+Math.sin(i)*m,e+Math.cos(i)*m);a.push(t,e,r,n)}else{a.push(s,i,t,e);for(let s=1,i=c;s<_;s++,i+=g)a.push(t+Math.sin(i)*m,e+Math.cos(i)*m,t,e);a.push(r,n,t,e)}return 2*_}function Jo(t,e){t.lineStyle.native?function(t,e){let s=0;const i=t.shape,r=t.points||i.points,n=i.type!==Fs.POLY||i.closeStroke;if(0===r.length)return;const a=e.points,o=e.indices,h=r.length/2,l=a.length/2;let u=l;for(a.push(r[0],r[1]),s=1;s=0&&(n.join===zo.ROUND?c+=Qo(v,y,v-E*M,y-A*M,v-R*M,y-S*M,u,!1)+4:c+=2,u.push(v-R*C,y-S*C,v+R*M,y+S*M));continue}const d=(-E+g)*(-A+y)-(-E+v)*(-A+x),p=(-R+T)*(-S+y)-(-R+v)*(-S+b),I=(e*p-r*d)/h,D=(a*d-s*p)/h,P=(I-v)*(I-v)+(D-y)*(D-y),O=v+(I-v)*M,F=y+(D-y)*M,B=v-(I-v)*C,N=y-(D-y)*C,L=l?M:C,G=P<=Math.min(e*e+s*s,r*r+a*a)+L*L*m;let U=n.join;if(U===zo.MITER&&P/m>_&&(U=zo.BEVEL),G)switch(U){case zo.MITER:u.push(O,F,B,N);break;case zo.BEVEL:l?u.push(O,F,v+E*C,y+A*C,O,F,v+R*C,y+S*C):u.push(v-E*M,y-A*M,B,N,v-R*M,y-S*M,B,N),c+=2;break;case zo.ROUND:l?(u.push(O,F,v+E*C,y+A*C),c+=Qo(v,y,v+E*C,y+A*C,v+R*C,y+S*C,u,!0)+4,u.push(O,F,v+R*C,y+S*C)):(u.push(v-E*M,y-A*M,B,N),c+=Qo(v,y,v-E*M,y-A*M,v-R*M,y-S*M,u,!1)+4,u.push(v-R*M,y-S*M,B,N))}else{switch(u.push(v-E*M,y-A*M,v+E*C,y+A*C),U){case zo.MITER:l?u.push(B,N,B,N):u.push(O,F,O,F),c+=2;break;case zo.ROUND:c+=l?Qo(v,y,v+E*C,y+A*C,v+R*C,y+S*C,u,!0)+2:Qo(v,y,v-E*M,y-A*M,v-R*M,y-S*M,u,!1)+2}u.push(v-R*M,y-S*M,v+R*C,y+S*C),c+=2}}g=i[2*(d-2)],x=i[2*(d-2)+1],v=i[2*(d-1)],y=i[2*(d-1)+1],E=-(x-y),A=g-v,w=Math.sqrt(E*E+A*A),E/=w,A/=w,E*=f,A*=f,u.push(v-E*M,y-A*M,v+E*C,y+A*C),h||(n.cap===Wo.ROUND?c+=Qo(v-E*(M-C)*.5,y-A*(M-C)*.5,v-E*M,y-A*M,v+E*C,y+A*C,u,!1)+2:n.cap===Wo.SQUARE&&(c+=Zo(v,y,E,A,M,C,!1,u)));const D=e.indices,P=Yo.epsilon*Yo.epsilon;for(let t=p;t0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this}drawShape(t,e=null,s=null,i=null){const r=new rh(t,e,s,i);return this.graphicsData.push(r),this.dirty++,this}drawHole(t,e=null){if(!this.graphicsData.length)return null;const s=new rh(t,null,null,e),i=this.graphicsData[this.graphicsData.length-1];return s.lineStyle=i.lineStyle,i.holes.push(s),this.dirty++,this}destroy(){super.destroy();for(let t=0;t0&&(s=this.batches[this.batches.length-1],i=s.style);for(let r=this.shapeIndex;r65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&a===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=a?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}_compareStyles(t,e){return!(!t||!e||t.texture.baseTexture!==e.texture.baseTexture||t.color+t.alpha!==e.color+e.alpha||!!t.native!=!!e.native)}validateBatching(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(let t=0,e=this.graphicsData.length;t131070)return!1;const t=this.batches;for(let e=0;e0&&(i=ih.pop(),i||(i=new Ts,i.texArray=new wi),this.drawCalls.push(i)),i.start=u,i.size=0,i.texArray.count=0,i.type=l),_.touched=1,_._batchEnabled=t,_._batchLocation=r,_.wrapMode=p.REPEAT,i.texArray.elements[i.texArray.count++]=_,r++)),i.size+=c.size,u+=c.size,a=_._batchLocation,this.addColors(e,m.color,m.alpha,c.attribSize,c.attribStart),this.addTextureIds(s,a,c.attribSize,c.attribStart)}ys._globalBatch=t,this.packAttributes()}packAttributes(){const t=this.points,e=this.uvs,s=this.colors,i=this.textureIds,r=new ArrayBuffer(3*t.length*4),n=new Float32Array(r),a=new Uint32Array(r);let o=0;for(let r=0;r0&&t.alpha>0;return s?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._lineStyle,{visible:s},t)):this._lineStyle.reset(),this}startPoly(){if(this.currentPath){const t=this.currentPath.points,e=this.currentPath.points.length;e>2&&(this.drawShape(this.currentPath),this.currentPath=new ks,this.currentPath.closeStroke=!1,this.currentPath.points.push(t[e-2],t[e-1]))}else this.currentPath=new ks,this.currentPath.closeStroke=!1}finishPoly(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)}moveTo(t,e){return this.startPoly(),this.currentPath.points[0]=t,this.currentPath.points[1]=e,this}lineTo(t,e){this.currentPath||this.moveTo(0,0);const s=this.currentPath.points,i=s[s.length-2],r=s[s.length-1];return(i!==t||r!==e)&&s.push(t,e),this}_initCurve(t=0,e=0){this.currentPath?0===this.currentPath.points.length&&(this.currentPath.points=[t,e]):this.moveTo(t,e)}quadraticCurveTo(t,e,s,i){this._initCurve();const r=this.currentPath.points;return 0===r.length&&this.moveTo(0,0),th.curveTo(t,e,s,i,r),this}bezierCurveTo(t,e,s,i,r,n){return this._initCurve(),Ko.curveTo(t,e,s,i,r,n,this.currentPath.points),this}arcTo(t,e,s,i,r){this._initCurve(t,e);const n=this.currentPath.points,a=$o.curveTo(t,e,s,i,r,n);if(a){const{cx:t,cy:e,radius:s,startAngle:i,endAngle:r,anticlockwise:n}=a;this.arc(t,e,s,i,r,n)}return this}arc(t,e,s,i,r,n=!1){if(i===r)return this;if(!n&&r<=i?r+=Ds:n&&i<=r&&(i+=Ds),r-i==0)return this;const a=t+Math.cos(i)*s,o=e+Math.sin(i)*s,h=this._geometry.closePointEps;let l=this.currentPath?this.currentPath.points:null;if(l){const t=Math.abs(l[l.length-2]-a),e=Math.abs(l[l.length-1]-o);t0;return s?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._fillStyle,{visible:s},t)):this._fillStyle.reset(),this}endFill(){return this.finishPoly(),this._fillStyle.reset(),this}drawRect(t,e,s,i){return this.drawShape(new Ls(t,e,s,i))}drawRoundedRect(t,e,s,i,r){return this.drawShape(new Xs(t,e,s,i,r))}drawCircle(t,e,s){return this.drawShape(new Gs(t,e,s))}drawEllipse(t,e,s,i){return this.drawShape(new Us(t,e,s,i))}drawPolygon(...t){let e,s=!0;const i=t[0];i.points?(s=i.closeStroke,e=i.points):e=Array.isArray(t[0])?t[0]:t;const r=new ks(e);return r.closeStroke=s,this.drawShape(r),this}drawShape(t){return this._holeMode?this._geometry.drawHole(t,this._matrix):this._geometry.drawShape(t,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this}clear(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this}isFastRect(){const t=this._geometry.graphicsData;return!(1!==t.length||t[0].shape.type!==Fs.RECT||t[0].matrix||t[0].holes.length||t[0].lineStyle.visible&&t[0].lineStyle.width)}_render(t){this.finishPoly();const e=this._geometry;e.updateBatches(),e.batchable?(this.batchDirty!==e.batchDirty&&this._populateBatches(),this._renderBatched(t)):(t.batch.flush(),this._renderDirect(t))}_populateBatches(){const t=this._geometry,e=this.blendMode,s=t.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=t.batchDirty,this.batches.length=s,this.vertexData=new Float32Array(t.points);for(let i=0;i0){const s=o.x-t[e].x,i=o.y-t[e].y,r=Math.sqrt(s*s+i*i);o=t[e],a+=r/h}else a=e/(l-1);r[s]=a,r[s+1]=0,r[s+2]=a,r[s+3]=1}let u=0;for(let t=0;t0?this.textureScale*this._width/2:this._width/2;for(let h=0;h1&&(d=1);const c=Math.sqrt(i*i+r*r);c<1e-6?(i=0,r=0):(i/=c,r/=c,i*=o,r*=o),n[u]=l.x+i,n[u+1]=l.y+r,n[u+2]=l.x-i,n[u+3]=l.y-r,s=l}this.buffers[0].update()}update(){this.textureScale>0?this.build():this.updateVertices()}}class Eh extends xh{constructor(t,e,s){super(new Th(t.width,t.height,e,s),new yh(Wi.WHITE)),this.texture=t,this.autoResize=!0}textureUpdated(){this._textureID=this.shader.texture._updateID;const t=this.geometry,{width:e,height:s}=this.shader.texture;this.autoResize&&(t.width!==e||t.height!==s)&&(t.width=this.shader.texture.width,t.height=this.shader.texture.height,t.build())}set texture(t){this.shader.texture!==t&&(this.shader.texture=t,this._textureID=-1,t.baseTexture.valid?this.textureUpdated():t.once("update",this.textureUpdated,this))}get texture(){return this.shader.texture}_render(t){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),super._render(t)}destroy(t){this.shader.texture.off("update",this.textureUpdated,this),super.destroy(t)}}class Ah{constructor(t,e,s){this.geometry=new Ms,this.indexBuffer=null,this.size=s,this.dynamicProperties=[],this.staticProperties=[];for(let s=0;ss&&!t.autoResize&&(n=s);let a=t._buffers;a||(a=t._buffers=this.generateBuffers(t));const o=e[0]._texture.baseTexture,h=o.alphaMode>0;this.state.blendMode=Pe(t.blendMode,h),r.state.set(this.state);const l=r.gl,u=t.worldTransform.copyTo(this.tempMatrix);u.prepend(r.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=u.toArray(!0),this.shader.uniforms.uColor=Ie.shared.setValue(t.tintRgb).premultiply(t.worldAlpha,h).toArray(this.shader.uniforms.uColor),this.shader.uniforms.uSampler=o,this.renderer.shader.bind(this.shader);let d=!1;for(let s=0,o=0;si&&(h=i),o>=a.length&&a.push(this._generateOneMoreBuffer(t));const u=a[o];u.uploadDynamic(e,s,h);const c=t._bufferUpdateIDs[o]||0;d=d||u._updateID0);i[n]=o,i[n+r]=o,i[n+2*r]=o,i[n+3*r]=o,n+=4*r}}destroy(){super.destroy(),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null}}Rh.extension={name:"particle",type:rs.RendererPlugin},os.add(Rh);var Sh=(t=>(t[t.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",t[t.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL",t))(Sh||{});const wh={willReadFrequently:!0},Ih=class{static get experimentalLetterSpacingSupported(){let t=Ih._experimentalLetterSpacingSupported;if(void 0!==t){const e=A.ADAPTER.getCanvasRenderingContext2D().prototype;t=Ih._experimentalLetterSpacingSupported="letterSpacing"in e||"textLetterSpacing"in e}return t}constructor(t,e,s,i,r,n,a,o,h){this.text=t,this.style=e,this.width=s,this.height=i,this.lines=r,this.lineWidths=n,this.lineHeight=a,this.maxLineWidth=o,this.fontProperties=h}static measureText(t,e,s,i=Ih._canvas){s=null==s?e.wordWrap:s;const r=e.toFontString(),n=Ih.measureFont(r);0===n.fontSize&&(n.fontSize=e.fontSize,n.ascent=e.fontSize);const a=i.getContext("2d",wh);a.font=r;const o=(s?Ih.wordWrap(t,e,i):t).split(/(?:\r\n|\r|\n)/),h=new Array(o.length);let l=0;for(let t=0;t0&&(i?r-=e:r+=(Ih.graphemeSegmenter(t).length-1)*e),r}static wordWrap(t,e,s=Ih._canvas){const i=s.getContext("2d",wh);let r=0,n="",a="";const o=Object.create(null),{letterSpacing:h,whiteSpace:l}=e,u=Ih.collapseSpaces(l),d=Ih.collapseNewlines(l);let c=!u;const p=e.wordWrapWidth+h,f=Ih.tokenize(t);for(let t=0;tp)if(""!==n&&(a+=Ih.addLine(n),n="",r=0),Ih.canBreakWords(s,e.breakWords)){const t=Ih.wordWrapSplit(s);for(let l=0;lp&&(a+=Ih.addLine(n),c=!1,n="",r=0),n+=u,r+=m}}else{n.length>0&&(a+=Ih.addLine(n),n="",r=0);const e=t===f.length-1;a+=Ih.addLine(s,!e),c=!1,n="",r=0}else l+r>p&&(c=!1,a+=Ih.addLine(n),n="",r=0),(n.length>0||!Ih.isBreakingSpace(s)||c)&&(n+=s,r+=l)}return a+=Ih.addLine(n,!1),a}static addLine(t,e=!0){return t=Ih.trimRight(t),t=e?`${t}\n`:t}static getFromCache(t,e,s,i){let r=s[t];return"number"!=typeof r&&(r=Ih._measureText(t,e,i)+e,s[t]=r),r}static collapseSpaces(t){return"normal"===t||"pre-line"===t}static collapseNewlines(t){return"normal"===t}static trimRight(t){if("string"!=typeof t)return"";for(let e=t.length-1;e>=0;e--){const s=t[e];if(!Ih.isBreakingSpace(s))break;t=t.slice(0,-1)}return t}static isNewline(t){return"string"==typeof t&&Ih._newlines.includes(t.charCodeAt(0))}static isBreakingSpace(t,e){return"string"==typeof t&&Ih._breakingSpaces.includes(t.charCodeAt(0))}static tokenize(t){const e=[];let s="";if("string"!=typeof t)return e;for(let i=0;ia;--d){for(let t=0;t{if("function"==typeof(null==Intl?void 0:Intl.Segmenter)){const t=new Intl.Segmenter;return e=>[...t.segment(e)].map((t=>t.segment))}return t=>[...t]})(),Mh.experimentalLetterSpacing=!1,Mh._fonts={},Mh._newlines=[10,13],Mh._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];const Ch=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],Dh=class{constructor(t){this.styleID=0,this.reset(),Fh(this,t,t)}clone(){const t={};return Fh(t,this,Dh.defaultStyle),new Dh(t)}reset(){Fh(this,Dh.defaultStyle,Dh.defaultStyle)}get align(){return this._align}set align(t){this._align!==t&&(this._align=t,this.styleID++)}get breakWords(){return this._breakWords}set breakWords(t){this._breakWords!==t&&(this._breakWords=t,this.styleID++)}get dropShadow(){return this._dropShadow}set dropShadow(t){this._dropShadow!==t&&(this._dropShadow=t,this.styleID++)}get dropShadowAlpha(){return this._dropShadowAlpha}set dropShadowAlpha(t){this._dropShadowAlpha!==t&&(this._dropShadowAlpha=t,this.styleID++)}get dropShadowAngle(){return this._dropShadowAngle}set dropShadowAngle(t){this._dropShadowAngle!==t&&(this._dropShadowAngle=t,this.styleID++)}get dropShadowBlur(){return this._dropShadowBlur}set dropShadowBlur(t){this._dropShadowBlur!==t&&(this._dropShadowBlur=t,this.styleID++)}get dropShadowColor(){return this._dropShadowColor}set dropShadowColor(t){const e=Oh(t);this._dropShadowColor!==e&&(this._dropShadowColor=e,this.styleID++)}get dropShadowDistance(){return this._dropShadowDistance}set dropShadowDistance(t){this._dropShadowDistance!==t&&(this._dropShadowDistance=t,this.styleID++)}get fill(){return this._fill}set fill(t){const e=Oh(t);this._fill!==e&&(this._fill=e,this.styleID++)}get fillGradientType(){return this._fillGradientType}set fillGradientType(t){this._fillGradientType!==t&&(this._fillGradientType=t,this.styleID++)}get fillGradientStops(){return this._fillGradientStops}set fillGradientStops(t){(function(t,e){if(!Array.isArray(t)||!Array.isArray(e)||t.length!==e.length)return!1;for(let s=0;s=0;t--){let s=e[t].trim();!/([\"\'])[^\'\"]+\1/.test(s)&&!Ch.includes(s)&&(s=`"${s}"`),e[t]=s}return`${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${t} ${e.join(",")}`}};let Ph=Dh;function Oh(t){const e=Ie.shared;return Array.isArray(t)?t.map((t=>e.setValue(t).toHex())):e.setValue(t).toHex()}function Fh(t,e,s){for(const i in s)Array.isArray(e[i])?t[i]=e[i].slice():t[i]=e[i]}Ph.defaultStyle={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:Sh.LINEAR_VERTICAL,fillGradientStops:[],fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,lineJoin:"miter",miterLimit:10,padding:0,stroke:"black",strokeThickness:0,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};const Bh={texture:!0,children:!1,baseTexture:!0},Nh=class extends Sn{constructor(t,e,s){var i;let r=!1;s||(s=A.ADAPTER.createCanvas(),r=!0),s.width=3,s.height=3;const n=Wi.from(s);n.orig=new Ls,n.trim=new Ls,super(n),this._ownCanvas=r,this.canvas=s,this.context=s.getContext("2d",{willReadFrequently:!0}),this._resolution=null!=(i=Nh.defaultResolution)?i:A.RESOLUTION,this._autoResolution=Nh.defaultAutoResolution,this._text=null,this._style=null,this._styleListener=null,this._font="",this.text=t,this.style=e,this.localStyleID=-1}static get experimentalLetterSpacing(){return Mh.experimentalLetterSpacing}static set experimentalLetterSpacing(t){Kt("7.1.0","Text.experimentalLetterSpacing is deprecated, use TextMetrics.experimentalLetterSpacing"),Mh.experimentalLetterSpacing=t}updateText(t){const e=this._style;if(this.localStyleID!==e.styleID&&(this.dirty=!0,this.localStyleID=e.styleID),!this.dirty&&t)return;this._font=this._style.toFontString();const s=this.context,i=Mh.measureText(this._text||" ",this._style,this._style.wordWrap,this.canvas),r=i.width,n=i.height,a=i.lines,o=i.lineHeight,h=i.lineWidths,l=i.maxLineWidth,u=i.fontProperties;let d,c;this.canvas.width=Math.ceil(Math.ceil(Math.max(1,r)+2*e.padding)*this._resolution),this.canvas.height=Math.ceil(Math.ceil(Math.max(1,n)+2*e.padding)*this._resolution),s.scale(this._resolution,this._resolution),s.clearRect(0,0,this.canvas.width,this.canvas.height),s.font=this._font,s.lineWidth=e.strokeThickness,s.textBaseline=e.textBaseline,s.lineJoin=e.lineJoin,s.miterLimit=e.miterLimit;const p=e.dropShadow?2:1;for(let t=0;t0&&n>a&&(o=(a+n)/2);const d=a+i,c=s.lineHeight*(t+1);let p=d;t+10}}function Uh(t,e){var s;let i=!1;if(null!=(s=null==t?void 0:t._textures)&&s.length)for(let s=0;s{!this.queue||this.prepareItems()},this.registerFindHook(zh),this.registerFindHook(Wh),this.registerFindHook(Uh),this.registerFindHook(kh),this.registerFindHook(Xh),this.registerUploadHook(Hh),this.registerUploadHook(Vh)}upload(t){return new Promise((e=>{t&&this.add(t),this.queue.length?(this.completes.push(e),this.ticking||(this.ticking=!0,$r.system.addOnce(this.tick,this,Wr.UTILITY))):e()}))}tick(){setTimeout(this.delayedTick,0)}prepareItems(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){const t=this.queue[0];let e=!1;if(t&&!t._destroyed)for(let s=0,i=this.uploadHooks.length;s=0;e--)this.add(t.children[e]);return this}destroy(){this.ticking&&$r.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null}};let jh=Yh;function $h(t,e){return e instanceof ys&&(e._glTextures[t.CONTEXT_UID]||t.texture.bind(e),!0)}function qh(t,e){if(!(e instanceof ch))return!1;const{geometry:s}=e;e.finishPoly(),s.updateBatches();const{batches:i}=s;for(let e=0;ejh.uploadsPerFrame,set(t){Kt("7.1.0","settings.UPLOADS_PER_FRAME is deprecated, use prepare.BasePrepare.uploadsPerFrame"),jh.uploadsPerFrame=t}}});class Zh extends jh{constructor(t){super(t),this.uploadHookHelper=this.renderer,this.registerFindHook(Kh),this.registerUploadHook($h),this.registerUploadHook(qh)}}Zh.extension={name:"prepare",type:rs.RendererSystem},os.add(Zh);class Qh extends Sn{constructor(t,e=!0){super(t[0]instanceof Wi?t[0]:t[0].texture),this._textures=null,this._durations=null,this._autoUpdate=e,this._isConnectedToTicker=!1,this.animationSpeed=1,this.loop=!0,this.updateAnchor=!1,this.onComplete=null,this.onFrameChange=null,this.onLoop=null,this._currentTime=0,this._playing=!1,this._previousFrame=null,this.textures=t}stop(){!this._playing||(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&($r.shared.remove(this.update,this),this._isConnectedToTicker=!1))}play(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&($r.shared.add(this.update,this,Wr.HIGH),this._isConnectedToTicker=!0))}gotoAndStop(t){this.stop(),this.currentFrame=t}gotoAndPlay(t){this.currentFrame=t,this.play()}update(t){if(!this._playing)return;const e=this.animationSpeed*t,s=this.currentFrame;if(null!==this._durations){let s=this._currentTime%1*this._durations[this.currentFrame];for(s+=e/60*1e3;s<0;)this._currentTime--,s+=this._durations[this.currentFrame];const i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);s>=this._durations[this.currentFrame];)s-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=s/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):s!==this.currentFrame&&(this.loop&&this.onLoop&&(this.animationSpeed>0&&this.currentFrames)&&this.onLoop(),this.updateTexture())}updateTexture(){const t=this.currentFrame;this._previousFrame!==t&&(this._previousFrame=t,this._texture=this._textures[t],this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this.uvs=this._texture._uvs.uvsFloat32,this.updateAnchor&&this._anchor.copyFrom(this._texture.defaultAnchor),this.onFrameChange&&this.onFrameChange(this.currentFrame))}destroy(t){this.stop(),super.destroy(t),this.onComplete=null,this.onFrameChange=null,this.onLoop=null}static fromFrames(t){const e=[];for(let s=0;sthis.totalFrames-1)throw new Error(`[AnimatedSprite]: Invalid frame index value ${t}, expected to be between 0 and totalFrames ${this.totalFrames}.`);const e=this.currentFrame;this._currentTime=t,e!==this.currentFrame&&this.updateTexture()}get playing(){return this._playing}get autoUpdate(){return this._autoUpdate}set autoUpdate(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?($r.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&($r.shared.add(this.update,this),this._isConnectedToTicker=!0))}}const Jh=new Bs;class tl extends Sn{constructor(t,e=100,s=100){super(t),this.tileTransform=new Js,this._width=e,this._height=s,this.uvMatrix=this.texture.uvMatrix||new or(t),this.pluginName="tilingSprite",this.uvRespectAnchor=!1}get clampMargin(){return this.uvMatrix.clampMargin}set clampMargin(t){this.uvMatrix.clampMargin=t,this.uvMatrix.update(!0)}get tileScale(){return this.tileTransform.scale}set tileScale(t){this.tileTransform.scale.copyFrom(t)}get tilePosition(){return this.tileTransform.position}set tilePosition(t){this.tileTransform.position.copyFrom(t)}_onTextureUpdate(){this.uvMatrix&&(this.uvMatrix.texture=this._texture),this._cachedTint=16777215}_render(t){const e=this._texture;!e||!e.valid||(this.tileTransform.updateLocalTransform(),this.uvMatrix.update(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this))}_calculateBounds(){const t=this._width*-this._anchor._x,e=this._height*-this._anchor._y,s=this._width*(1-this._anchor._x),i=this._height*(1-this._anchor._y);this._bounds.addFrame(this.transform,t,e,s,i)}getLocalBounds(t){return 0===this.children.length?(this._bounds.minX=this._width*-this._anchor._x,this._bounds.minY=this._height*-this._anchor._y,this._bounds.maxX=this._width*(1-this._anchor._x),this._bounds.maxY=this._height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new Ls),t=this._localBoundsRect),this._bounds.getRectangle(t)):super.getLocalBounds.call(this,t)}containsPoint(t){this.worldTransform.applyInverse(t,Jh);const e=this._width,s=this._height,i=-e*this.anchor._x;if(Jh.x>=i&&Jh.x=t&&Jh.y1?Ri.from("#version 300 es\n#define SHADER_NAME Tiling-Sprite-300\n\nprecision lowp float;\n\nin vec2 aVertexPosition;\nin vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform mat3 uTransform;\n\nout vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n\n vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;\n}\n","#version 300 es\n#define SHADER_NAME Tiling-Sprite-100\n\nprecision lowp float;\n\nin vec2 vTextureCoord;\n\nout vec4 fragmentColor;\n\nuniform sampler2D uSampler;\nuniform vec4 uColor;\nuniform mat3 uMapCoord;\nuniform vec4 uClampFrame;\nuniform vec2 uClampOffset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord + ceil(uClampOffset - vTextureCoord);\n coord = (uMapCoord * vec3(coord, 1.0)).xy;\n vec2 unclamped = coord;\n coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\n\n vec4 texSample = texture(uSampler, coord, unclamped == coord ? 0.0f : -32.0f);// lod-bias very negative to force lod 0\n\n fragmentColor = texSample * uColor;\n}\n",e):Ri.from(el,"#version 100\n#ifdef GL_EXT_shader_texture_lod\n #extension GL_EXT_shader_texture_lod : enable\n#endif\n#define SHADER_NAME Tiling-Sprite-100\n\nprecision lowp float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec4 uColor;\nuniform mat3 uMapCoord;\nuniform vec4 uClampFrame;\nuniform vec2 uClampOffset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord + ceil(uClampOffset - vTextureCoord);\n coord = (uMapCoord * vec3(coord, 1.0)).xy;\n vec2 unclamped = coord;\n coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\n\n #ifdef GL_EXT_shader_texture_lod\n vec4 texSample = unclamped == coord\n ? texture2D(uSampler, coord) \n : texture2DLodEXT(uSampler, coord, 0);\n #else\n vec4 texSample = texture2D(uSampler, coord);\n #endif\n\n gl_FragColor = texSample * uColor;\n}\n",e)}render(t){const e=this.renderer,s=this.quad;let i=s.vertices;i[0]=i[6]=t._width*-t.anchor.x,i[1]=i[3]=t._height*-t.anchor.y,i[2]=i[4]=t._width*(1-t.anchor.x),i[5]=i[7]=t._height*(1-t.anchor.y);const r=t.uvRespectAnchor?t.anchor.x:0,n=t.uvRespectAnchor?t.anchor.y:0;i=s.uvs,i[0]=i[6]=-r,i[1]=i[3]=-n,i[2]=i[4]=1-r,i[5]=i[7]=1-n,s.invalidate();const a=t._texture,o=a.baseTexture,h=o.alphaMode>0,l=t.tileTransform.localTransform,u=t.uvMatrix;let d=o.isPowerOfTwo&&a.frame.width===o.width&&a.frame.height===o.height;d&&(o._glTextures[e.CONTEXT_UID]?d=o.wrapMode!==p.CLAMP:o.wrapMode===p.CLAMP&&(o.wrapMode=p.REPEAT));const c=d?this.simpleShader:this.shader,f=a.width,m=a.height,_=t._width,g=t._height;sl.set(l.a*f/_,l.b*f/g,l.c*m/_,l.d*m/g,l.tx/_,l.ty/g),sl.invert(),d?sl.prepend(u.mapCoord):(c.uniforms.uMapCoord=u.mapCoord.toArray(!0),c.uniforms.uClampFrame=u.uClampFrame,c.uniforms.uClampOffset=u.uClampOffset),c.uniforms.uTransform=sl.toArray(!0),c.uniforms.uColor=Ie.shared.setValue(t.tint).premultiply(t.worldAlpha,h).toArray(c.uniforms.uColor),c.uniforms.translationMatrix=t.transform.worldTransform.toArray(!0),c.uniforms.uSampler=a,e.shader.bind(c),e.geometry.bind(s),this.state.blendMode=Pe(t.blendMode,h),e.state.set(this.state),e.geometry.draw(this.renderer.gl.TRIANGLES,6,0)}}il.extension={name:"tilingSprite",type:rs.RendererPlugin},os.add(il);const rl=class{constructor(t,e,s=null){this.linkedSheets=[],this._texture=t instanceof Wi?t:null,this.baseTexture=t instanceof ys?t:this._texture.baseTexture,this.textures={},this.animations={},this.data=e;const i=this.baseTexture.resource;this.resolution=this._updateResolution(s||(i?i.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}_updateResolution(t=null){const{scale:e}=this.data.meta;let s=ss(t,null);return null===s&&(s=parseFloat(null!=e?e:"1")),1!==s&&this.baseTexture.setResolution(s),s}parse(){return new Promise((t=>{this._callback=t,this._batchIndex=0,this._frameKeys.length<=rl.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()}))}_processFrames(t){let e=t;const s=rl.BATCH_SIZE;for(;e-t{this._batchIndex*rl.BATCH_SIZE{i[t]=e})),Object.keys(e.textures).forEach((t=>{i[t]=e.textures[t]})),!s){const s=$t.dirname(t[0]);e.linkedSheets.forEach(((t,r)=>{const n=ol([`${s}/${e.data.meta.related_multi_packs[r]}`],t,!0);Object.assign(i,n)}))}return i}const hl={extension:rs.Asset,cache:{test:t=>t instanceof nl,getCacheableAssets:(t,e)=>ol(t,e,!1)},resolver:{test:t=>{const e=t.split("?")[0].split("."),s=e.pop(),i=e.pop();return"json"===s&&al.includes(i)},parse:t=>{var e,s;const i=t.split(".");return{resolution:parseFloat(null!=(s=null==(e=A.RETINA_PREFIX.exec(t))?void 0:e[1])?s:"1"),format:i[i.length-2],src:t}}},loader:{name:"spritesheetLoader",extension:{type:rs.LoadParser,priority:ma.Normal},testParse:async(t,e)=>".json"===$t.extname(e.src).toLowerCase()&&!!t.frames,async parse(t,e,s){var i,r;let n=$t.dirname(e.src);n&&n.lastIndexOf("/")!==n.length-1&&(n+="/");let a=n+t.meta.image;a=la(a,e.src);const o=(await s.load([a]))[a],h=new nl(o.baseTexture,t,e.src);await h.parse();const l=null==(i=null==t?void 0:t.meta)?void 0:i.related_multi_packs;if(Array.isArray(l)){const t=[];for(const i of l){if("string"!=typeof i)continue;let a=n+i;null!=(r=e.data)&&r.ignoreMultiPack||(a=la(a,e.src),t.push(s.load({src:a,data:{ignoreMultiPack:!0}})))}const i=await Promise.all(t);h.linkedSheets=i,i.forEach((t=>{t.linkedSheets=[h].concat(h.linkedSheets.filter((e=>e!==t)))}))}return h},unload(t){t.destroy(!0)}}};os.add(hl);class ll{constructor(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}}class ul{static test(t){return"string"==typeof t&&t.startsWith("info face=")}static parse(t){const e=t.match(/^[a-z]+\s+.+$/gm),s={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(const t in e){const i=e[t].match(/^[a-z]+/gm)[0],r=e[t].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),n={};for(const t in r){const e=r[t].split("="),s=e[0],i=e[1].replace(/"/gm,""),a=parseFloat(i),o=isNaN(a)?i:a;n[s]=o}s[i].push(n)}const i=new ll;return s.info.forEach((t=>i.info.push({face:t.face,size:parseInt(t.size,10)}))),s.common.forEach((t=>i.common.push({lineHeight:parseInt(t.lineHeight,10)}))),s.page.forEach((t=>i.page.push({id:parseInt(t.id,10),file:t.file}))),s.char.forEach((t=>i.char.push({id:parseInt(t.id,10),page:parseInt(t.page,10),x:parseInt(t.x,10),y:parseInt(t.y,10),width:parseInt(t.width,10),height:parseInt(t.height,10),xoffset:parseInt(t.xoffset,10),yoffset:parseInt(t.yoffset,10),xadvance:parseInt(t.xadvance,10)}))),s.kerning.forEach((t=>i.kerning.push({first:parseInt(t.first,10),second:parseInt(t.second,10),amount:parseInt(t.amount,10)}))),s.distanceField.forEach((t=>i.distanceField.push({distanceRange:parseInt(t.distanceRange,10),fieldType:t.fieldType}))),i}}class dl{static test(t){const e=t;return"getElementsByTagName"in e&&e.getElementsByTagName("page").length&&null!==e.getElementsByTagName("info")[0].getAttribute("face")}static parse(t){const e=new ll,s=t.getElementsByTagName("info"),i=t.getElementsByTagName("common"),r=t.getElementsByTagName("page"),n=t.getElementsByTagName("char"),a=t.getElementsByTagName("kerning"),o=t.getElementsByTagName("distanceField");for(let t=0;t"))&&dl.test(A.ADAPTER.parseXML(t))}static parse(t){return dl.parse(A.ADAPTER.parseXML(t))}}const pl=[ul,dl,cl];function fl(t){for(let e=0;e=h-r*a){if(0===x)throw new Error(`[BitmapFont] textureHeight ${h}px is too small (fontFamily: '${d.fontFamily}', fontSize: ${d.fontSize}px, char: '${e}')`);--t,f=null,m=null,_=null,x=0,g=0,v=0;continue}if(v=Math.max(r+s.fontProperties.descent,v),b*a+g>=c){if(0===g)throw new Error(`[BitmapFont] textureWidth ${o}px is too small (fontFamily: '${d.fontFamily}', fontSize: ${d.fontSize}px, char: '${e}')`);--t,x+=v*a,x=Math.ceil(x),g=0,v=0;continue}ml(f,m,s,g,x,a,d);const E=_l(s.text);p.char.push({id:E,page:T.length-1,x:g/a,y:x/a,width:b,height:r,xoffset:0,yoffset:0,xadvance:i-(d.dropShadow?d.dropShadowDistance:0)-(d.stroke?d.strokeThickness:0)}),g+=(b+2*n)*a,g=Math.ceil(g)}for(let t=0,e=u.length;t{this.dirty=!0}),this,0,0),this._roundPixels=A.ROUND_PIXELS,this.dirty=!0,this._resolution=A.RESOLUTION,this._autoResolution=!0,this._textureCache={}}updateText(){var t;const e=vl.available[this._fontName],s=this.fontSize,i=s/e.size,r=new Bs,n=[],o=[],h=[],l=gl(this._text.replace(/(?:\r\n|\r)/g,"\n")||" "),u=this._maxWidth*e.size/s,d="none"===e.distanceFieldType?yl:Tl;let c=null,p=0,f=0,m=0,_=-1,g=0,x=0,v=0,y=0;for(let t=0;t0&&r.x>u&&(++x,ke(n,1+_-x,1+t-_),t=_,_=-1,o.push(g),h.push(n.length>0?n[n.length-1].prevSpaces:0),f=Math.max(f,g),m++,r.x=0,r.y+=e.lineHeight,c=null,y=0)}const T=l[l.length-1];"\r"!==T&&"\n"!==T&&(/(?:\s)/.test(T)&&(p=g),o.push(p),f=Math.max(f,p),h.push(-1));const b=[];for(let t=0;t<=m;t++){let e=0;"right"===this._align?e=f-o[t]:"center"===this._align?e=(f-o[t])/2:"justify"===this._align&&(e=h[t]<0?0:(f-o[t])/h[t]),b.push(e)}const E=n.length,A={},R=[],S=this._activePagesMeshData;d.push(...S);for(let t=0;t 0.99) {\r\n alpha = 1.0;\r\n }\r\n\r\n // Gamma correction for coverage-like alpha\r\n float luma = dot(uColor.rgb, vec3(0.299, 0.587, 0.114));\r\n float gamma = mix(1.0, 1.0 / 2.2, luma);\r\n float coverage = pow(uColor.a * alpha, gamma); \r\n\r\n // NPM Textures, NPM outputs\r\n gl_FragColor = vec4(uColor.rgb, coverage);\r\n}\r\n"),uniforms:{uFWidth:0}}),r=a.NORMAL_NPM);const n=new xh(s,i);n.blendMode=r,t={index:0,indexCount:0,vertexCount:0,uvsCount:0,total:0,mesh:n,vertices:null,uvs:null,indices:null}}t.index=0,t.indexCount=0,t.vertexCount=0,t.uvsCount=0,t.total=0;const{_textureCache:r}=this;r[i]=r[i]||new Wi(s.baseTexture),t.mesh.texture=r[i],t.mesh.tint=this._tintColor.value,R.push(t),A[i]=t}A[i].total++}for(let t=0;t6*i)||s.vertices.length<2*xh.BATCHABLE_SIZE)s.vertices=new Float32Array(8*i),s.uvs=new Float32Array(8*i),s.indices=new Uint16Array(6*i);else{const t=s.total,e=s.vertices;for(let s=4*t*2;se[t.mesh.texture.baseTexture.uid])).forEach((t=>{t.mesh.texture=Wi.EMPTY}));for(const t in e)e[t].destroy(),delete e[t];this._font=null,this._tintColor=null,this._textureCache=null,super.destroy(t)}};let Al=El;Al.styleDefaults={align:"left",tint:16777215,maxWidth:0,letterSpacing:0};const Rl=[".xml",".fnt"],Sl={extension:{type:rs.LoadParser,priority:ma.Normal},name:"loadBitmapFont",test:t=>Rl.includes($t.extname(t).toLowerCase()),testParse:async t=>ul.test(t)||cl.test(t),async parse(t,e,s){const i=ul.test(t)?ul.parse(t):cl.parse(t),{src:r}=e,{page:n}=i,a=[];for(let t=0;to[t]));return vl.install(i,h,!0)},load:async(t,e)=>(await A.ADAPTER.fetch(t)).text(),unload(t){t.destroy()}};os.add(Sl);const wl=class extends Ph{constructor(){super(...arguments),this._fonts=[],this._overrides=[],this._stylesheet="",this.fontsDirty=!1}static from(t){return new wl(Object.keys(wl.defaultOptions).reduce(((e,s)=>Qi(bt({},e),{[s]:t[s]})),{}))}cleanFonts(){this._fonts.length>0&&(this._fonts.forEach((t=>{URL.revokeObjectURL(t.src),t.refs--,0===t.refs&&(t.fontFace&&document.fonts.delete(t.fontFace),delete wl.availableFonts[t.originalUrl])})),this.fontFamily="Arial",this._fonts.length=0,this.styleID++,this.fontsDirty=!0)}loadFont(t,e={}){const{availableFonts:s}=wl;if(s[t]){const e=s[t];return this._fonts.push(e),e.refs++,this.styleID++,this.fontsDirty=!0,Promise.resolve()}return A.ADAPTER.fetch(t).then((t=>t.blob())).then((async t=>new Promise(((e,s)=>{const i=URL.createObjectURL(t),r=new FileReader;r.onload=()=>e([i,r.result]),r.onerror=s,r.readAsDataURL(t)})))).then((async([i,r])=>{const n=Object.assign({family:$t.basename(t,$t.extname(t)),weight:"normal",style:"normal",src:i,dataSrc:r,refs:1,originalUrl:t,fontFace:null},e);s[t]=n,this._fonts.push(n),this.styleID++;const a=new FontFace(n.family,`url(${n.src})`,{weight:n.weight,style:n.style});n.fontFace=a,await a.load(),document.fonts.add(a),await document.fonts.ready,this.styleID++,this.fontsDirty=!0}))}addOverride(...t){const e=t.filter((t=>!this._overrides.includes(t)));e.length>0&&(this._overrides.push(...e),this.styleID++)}removeOverride(...t){const e=t.filter((t=>this._overrides.includes(t)));e.length>0&&(this._overrides=this._overrides.filter((t=>!e.includes(t))),this.styleID++)}toCSS(t){return[`transform: scale(${t})`,"transform-origin: top left","display: inline-block",`color: ${this.normalizeColor(this.fill)}`,`font-size: ${this.fontSize}px`,`font-family: ${this.fontFamily}`,`font-weight: ${this.fontWeight}`,`font-style: ${this.fontStyle}`,`font-variant: ${this.fontVariant}`,`letter-spacing: ${this.letterSpacing}px`,`text-align: ${this.align}`,`padding: ${this.padding}px`,`white-space: ${this.whiteSpace}`,...this.lineHeight?[`line-height: ${this.lineHeight}px`]:[],...this.wordWrap?["word-wrap: "+(this.breakWords?"break-all":"break-word"),`max-width: ${this.wordWrapWidth}px`]:[],...this.strokeThickness?[`-webkit-text-stroke-width: ${this.strokeThickness}px`,`-webkit-text-stroke-color: ${this.normalizeColor(this.stroke)}`,`text-stroke-width: ${this.strokeThickness}px`,`text-stroke-color: ${this.normalizeColor(this.stroke)}`,"paint-order: stroke"]:[],...this.dropShadow?[this.dropShadowToCSS()]:[],...this._overrides].join(";")}toGlobalCSS(){return this._fonts.reduce(((t,e)=>`${t}\n @font-face {\n font-family: "${e.family}";\n src: url('${e.dataSrc}');\n font-weight: ${e.weight};\n font-style: ${e.style}; \n }`),this._stylesheet)}get stylesheet(){return this._stylesheet}set stylesheet(t){this._stylesheet!==t&&(this._stylesheet=t,this.styleID++)}normalizeColor(t){return Array.isArray(t)&&(t=Ce(t)),"number"==typeof t?Me(t):t}dropShadowToCSS(){let t=this.normalizeColor(this.dropShadowColor);const e=this.dropShadowAlpha,s=Math.round(Math.cos(this.dropShadowAngle)*this.dropShadowDistance),i=Math.round(Math.sin(this.dropShadowAngle)*this.dropShadowDistance);t.startsWith("#")&&e<1&&(t+=(255*e|0).toString(16).padStart(2,"0"));const r=`${s}px ${i}px`;return this.dropShadowBlur>0?`text-shadow: ${r} ${this.dropShadowBlur}px ${t}`:`text-shadow: ${r} ${t}`}reset(){Object.assign(this,wl.defaultOptions)}onBeforeDraw(){const{fontsDirty:t}=this;return this.fontsDirty=!1,this.isSafari&&this._fonts.length>0&&t?new Promise((t=>setTimeout(t,100))):Promise.resolve()}get isSafari(){const{userAgent:t}=A.ADAPTER.getNavigator();return/^((?!chrome|android).)*safari/i.test(t)}set fillGradientStops(t){console.warn("[HTMLTextStyle] fillGradientStops is not supported by HTMLText")}get fillGradientStops(){return super.fillGradientStops}set fillGradientType(t){console.warn("[HTMLTextStyle] fillGradientType is not supported by HTMLText")}get fillGradientType(){return super.fillGradientType}set miterLimit(t){console.warn("[HTMLTextStyle] miterLimit is not supported by HTMLText")}get miterLimit(){return super.miterLimit}set trim(t){console.warn("[HTMLTextStyle] trim is not supported by HTMLText")}get trim(){return super.trim}set textBaseline(t){console.warn("[HTMLTextStyle] textBaseline is not supported by HTMLText")}get textBaseline(){return super.textBaseline}set leading(t){console.warn("[HTMLTextStyle] leading is not supported by HTMLText")}get leading(){return super.leading}set lineJoin(t){console.warn("[HTMLTextStyle] lineJoin is not supported by HTMLText")}get lineJoin(){return super.lineJoin}};let Il=wl;Il.availableFonts={},Il.defaultOptions={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",letterSpacing:0,lineHeight:0,padding:0,stroke:"black",strokeThickness:0,whiteSpace:"normal",wordWrap:!1,wordWrapWidth:100};const Ml=class extends Sn{constructor(t="",e={}){var s;super(Wi.EMPTY),this._text=null,this._style=null,this._autoResolution=!0,this._loading=!1,this.localStyleID=-1,this.dirty=!1,this.ownsStyle=!1;const i=new Image,r=Wi.from(i,{scaleMode:A.SCALE_MODE,resourceOptions:{autoLoad:!1}});r.orig=new Ls,r.trim=new Ls,this.texture=r;const n="http://www.w3.org/2000/svg",a="http://www.w3.org/1999/xhtml",o=document.createElementNS(n,"svg"),h=document.createElementNS(n,"foreignObject"),l=document.createElementNS(a,"div"),u=document.createElementNS(a,"style");h.setAttribute("width","10000"),h.setAttribute("height","10000"),h.style.overflow="hidden",o.appendChild(h),this.maxWidth=Ml.defaultMaxWidth,this.maxHeight=Ml.defaultMaxHeight,this._domElement=l,this._styleElement=u,this._svgRoot=o,this._foreignObject=h,this._foreignObject.appendChild(u),this._foreignObject.appendChild(l),this._image=i,this._loadImage=new Image,this._autoResolution=Ml.defaultAutoResolution,this._resolution=null!=(s=Ml.defaultResolution)?s:A.RESOLUTION,this.text=t,this.style=e}measureText(t){var e,s;const{text:i,style:r,resolution:n}=Object.assign({text:this._text,style:this._style,resolution:this._resolution},t);Object.assign(this._domElement,{innerHTML:i,style:r.toCSS(n)}),this._styleElement.textContent=r.toGlobalCSS(),document.body.appendChild(this._svgRoot);const a=this._domElement.getBoundingClientRect();this._svgRoot.remove();const o=Math.min(this.maxWidth,Math.ceil(a.width)),h=Math.min(this.maxHeight,Math.ceil(a.height));return this._svgRoot.setAttribute("width",o.toString()),this._svgRoot.setAttribute("height",h.toString()),i!==this._text&&(this._domElement.innerHTML=this._text),r!==this._style&&(Object.assign(this._domElement,{style:null==(e=this._style)?void 0:e.toCSS(n)}),this._styleElement.textContent=null==(s=this._style)?void 0:s.toGlobalCSS()),{width:o+2*r.padding,height:h+2*r.padding}}async updateText(t=!0){const{style:e,_image:s,_loadImage:i}=this;if(this.localStyleID!==e.styleID&&(this.dirty=!0,this.localStyleID=e.styleID),!this.dirty&&t)return;const{width:r,height:n}=this.measureText();s.width=i.width=Math.ceil(Math.max(1,r)),s.height=i.height=Math.ceil(Math.max(1,n)),this._loading||(this._loading=!0,await new Promise((t=>{i.onload=async()=>{await e.onBeforeDraw(),this._loading=!1,s.src=i.src,i.onload=null,i.src="",this.updateTexture(),t()};const r=(new XMLSerializer).serializeToString(this._svgRoot);i.src=`data:image/svg+xml;charset=utf8,${encodeURIComponent(r)}`})))}get source(){return this._image}updateTexture(){const{style:t,texture:e,_image:s,resolution:i}=this,{padding:r}=t,{baseTexture:n}=e;e.trim.width=e._frame.width=s.width/i,e.trim.height=e._frame.height=s.height/i,e.trim.x=-r,e.trim.y=-r,e.orig.width=e._frame.width-2*r,e.orig.height=e._frame.height-2*r,this._onTextureUpdate(),n.setRealSize(s.width,s.height,i),this.dirty=!1}_render(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0),this.updateText(!0),super._render(t)}_renderCanvas(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0),this.updateText(!0),super._renderCanvas(t)}getLocalBounds(t){return this.updateText(!0),super.getLocalBounds(t)}_calculateBounds(){this.updateText(!0),this.calculateVertices(),this._bounds.addQuad(this.vertexData)}_onStyleChange(){this.dirty=!0}destroy(t){var e,s,i,r,n;"boolean"==typeof t&&(t={children:t}),t=Object.assign({},Ml.defaultDestroyOptions,t),super.destroy(t);const a=null;this.ownsStyle&&(null==(e=this._style)||e.cleanFonts()),this._style=a,null==(s=this._svgRoot)||s.remove(),this._svgRoot=a,null==(i=this._domElement)||i.remove(),this._domElement=a,null==(r=this._foreignObject)||r.remove(),this._foreignObject=a,null==(n=this._styleElement)||n.remove(),this._styleElement=a,this._loadImage.src="",this._loadImage.onload=null,this._loadImage=a,this._image.src="",this._image=a}get width(){return this.updateText(!0),Math.abs(this.scale.x)*this._image.width/this.resolution}set width(t){this.updateText(!0);const e=Xe(this.scale.x)||1;this.scale.x=e*t/this._image.width/this.resolution,this._width=t}get height(){return this.updateText(!0),Math.abs(this.scale.y)*this._image.height/this.resolution}set height(t){this.updateText(!0);const e=Xe(this.scale.y)||1;this.scale.y=e*t/this._image.height/this.resolution,this._height=t}get style(){return this._style}set style(t){this._style!==t&&((t=t||{})instanceof Il?(this.ownsStyle=!1,this._style=t):t instanceof Ph?(console.warn("[HTMLText] Cloning TextStyle, if this is not what you want, use HTMLTextStyle"),this.ownsStyle=!0,this._style=Il.from(t)):(this.ownsStyle=!0,this._style=new Il(t)),this.localStyleID=-1,this.dirty=!0)}get text(){return this._text}set text(t){t=String(""===t||null==t?" ":t),t=this.sanitiseText(t),this._text!==t&&(this._text=t,this.dirty=!0)}get resolution(){return this._resolution}set resolution(t){this._autoResolution=!1,this._resolution!==t&&(this._resolution=t,this.dirty=!0)}sanitiseText(t){return t.replace(/

    /gi,"
    ").replace(/
    /gi,"
    ").replace(/ /gi," ")}};let Cl=Ml;return Cl.defaultDestroyOptions={texture:!0,children:!1,baseTexture:!0},Cl.defaultMaxWidth=2024,Cl.defaultMaxHeight=2024,Cl.defaultAutoResolution=!0,t.ALPHA_MODES=m,t.AbstractMultiResource=on,t.AccessibilityManager=ta,t.AlphaFilter=Mn,t.AnimatedSprite=Qh,t.Application=sa,t.ArrayResource=hn,t.Assets=Ga,t.AssetsClass=La,t.Attribute=As,t.BLEND_MODES=a,t.BUFFER_BITS=n,t.BUFFER_TYPE=b,t.BackgroundSystem=Oi,t.BaseImageResource=ki,t.BasePrepare=jh,t.BaseRenderTexture=Ui,t.BaseTexture=ys,t.BatchDrawCall=Ts,t.BatchGeometry=Cs,t.BatchRenderer=Ci,t.BatchShaderGenerator=Si,t.BatchSystem=Fi,t.BatchTextureArray=wi,t.BitmapFont=vl,t.BitmapFontData=ll,t.BitmapText=Al,t.BlobResource=Za,t.BlurFilter=On,t.BlurFilterPass=Pn,t.Bounds=gn,t.BrowserAdapter=E,t.Buffer=Es,t.BufferResource=gs,t.BufferSystem=sn,t.CLEAR_MODES=_,t.COLOR_MASK_BITS=y,t.Cache=pa,t.CanvasResource=ln,t.Circle=Gs,t.Color=Ie,t.ColorMatrixFilter=Fn,t.CompressedTextureResource=Qa,t.Container=En,t.ContextSystem=Ni,t.CountLimiter=Gh,t.CubeResource=dn,t.DEG_TO_RAD=Os,t.DRAW_MODES=o,t.DisplacementFilter=Bn,t.DisplayObject=xn,t.ENV=i,t.Ellipse=Us,t.EventBoundary=jn,t.EventSystem=Kn,t.ExtensionType=rs,t.Extract=Go,t.FORMATS=h,t.FORMATS_TO_COMPONENTS=Mo,t.FXAAFilter=Nn,t.FederatedDisplayObject=Qn,t.FederatedEvent=kn,t.FederatedMouseEvent=Xn,t.FederatedPointerEvent=Hn,t.FederatedWheelEvent=Vn,t.FillStyle=hh,t.Filter=Pi,t.FilterState=Ki,t.FilterSystem=tr,t.Framebuffer=Gi,t.FramebufferSystem=ir,t.GC_MODES=g,t.GLFramebuffer=er,t.GLProgram=Ar,t.GLTexture=Xr,t.GRAPHICS_CURVES=jo,t.GenerateTextureSystem=yr,t.Geometry=Ms,t.GeometrySystem=nr,t.Graphics=ch,t.GraphicsData=rh,t.GraphicsGeometry=oh,t.HTMLText=Cl,t.HTMLTextStyle=Il,t.IGLUniformData=class{},t.INSTALLED=ps,t.INTERNAL_FORMATS=Wa,t.INTERNAL_FORMAT_TO_BYTES_PER_PIXEL=Ya,t.ImageBitmapResource=cn,t.ImageResource=Xi,t.LINE_CAP=Wo,t.LINE_JOIN=zo,t.LineStyle=lh,t.LoaderParserPriority=ma,t.MASK_TYPES=v,t.MIPMAP_MODES=f,t.MSAA_QUALITY=T,t.MaskData=lr,t.MaskSystem=ur,t.Matrix=Hs,t.Mesh=xh,t.MeshBatchUvs=fh,t.MeshGeometry=vh,t.MeshMaterial=yh,t.MultisampleSystem=tn,t.NineSlicePlane=class extends Eh{constructor(t,e,s,i,r){var n,a,o,h,l,u,d,c;super(Wi.WHITE,4,4),this._origWidth=t.orig.width,this._origHeight=t.orig.height,this._width=this._origWidth,this._height=this._origHeight,this._leftWidth=null!=(a=null!=e?e:null==(n=t.defaultBorders)?void 0:n.left)?a:10,this._rightWidth=null!=(h=null!=i?i:null==(o=t.defaultBorders)?void 0:o.right)?h:10,this._topHeight=null!=(u=null!=s?s:null==(l=t.defaultBorders)?void 0:l.top)?u:10,this._bottomHeight=null!=(c=null!=r?r:null==(d=t.defaultBorders)?void 0:d.bottom)?c:10,this.texture=t}textureUpdated(){this._textureID=this.shader.texture._updateID,this._refresh()}get vertices(){return this.geometry.getBuffer("aVertexPosition").data}set vertices(t){this.geometry.getBuffer("aVertexPosition").data=t}updateHorizontalVertices(){const t=this.vertices,e=this._getMinScale();t[9]=t[11]=t[13]=t[15]=this._topHeight*e,t[17]=t[19]=t[21]=t[23]=this._height-this._bottomHeight*e,t[25]=t[27]=t[29]=t[31]=this._height}updateVerticalVertices(){const t=this.vertices,e=this._getMinScale();t[2]=t[10]=t[18]=t[26]=this._leftWidth*e,t[4]=t[12]=t[20]=t[28]=this._width-this._rightWidth*e,t[6]=t[14]=t[22]=t[30]=this._width}_getMinScale(){const t=this._leftWidth+this._rightWidth,e=this._width>t?1:this._width/t,s=this._topHeight+this._bottomHeight,i=this._height>s?1:this._height/s;return Math.min(e,i)}get width(){return this._width}set width(t){this._width=t,this._refresh()}get height(){return this._height}set height(t){this._height=t,this._refresh()}get leftWidth(){return this._leftWidth}set leftWidth(t){this._leftWidth=t,this._refresh()}get rightWidth(){return this._rightWidth}set rightWidth(t){this._rightWidth=t,this._refresh()}get topHeight(){return this._topHeight}set topHeight(t){this._topHeight=t,this._refresh()}get bottomHeight(){return this._bottomHeight}set bottomHeight(t){this._bottomHeight=t,this._refresh()}_refresh(){const t=this.texture,e=this.geometry.buffers[1].data;this._origWidth=t.orig.width,this._origHeight=t.orig.height;const s=1/this._origWidth,i=1/this._origHeight;e[0]=e[8]=e[16]=e[24]=0,e[1]=e[3]=e[5]=e[7]=0,e[6]=e[14]=e[22]=e[30]=1,e[25]=e[27]=e[29]=e[31]=1,e[2]=e[10]=e[18]=e[26]=s*this._leftWidth,e[4]=e[12]=e[20]=e[28]=1-s*this._rightWidth,e[9]=e[11]=e[13]=e[15]=i*this._topHeight,e[17]=e[19]=e[21]=e[23]=1-i*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()}},t.NoiseFilter=Ln,t.ObjectRenderer=Ii,t.ObjectRendererSystem=rn,t.ObservablePoint=Zs,t.PI_2=Ds,t.PRECISION=x,t.ParticleContainer=class extends En{constructor(t=1500,e,s=16384,i=!1){super();s>16384&&(s=16384),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=s,this._buffers=null,this._bufferUpdateIDs=[],this._updateID=0,this.interactiveChildren=!1,this.blendMode=a.NORMAL,this.autoResize=i,this.roundPixels=!0,this.baseTexture=null,this.setProperties(e),this._tintColor=new Ie(0),this.tintRgb=new Float32Array(3),this.tint=16777215}setProperties(t){t&&(this._properties[0]="vertices"in t||"scale"in t?!!t.vertices||!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="tint"in t||"alpha"in t?!!t.tint||!!t.alpha:this._properties[4])}updateTransform(){this.displayObjectUpdateTransform()}get tint(){return this._tintColor.value}set tint(t){this._tintColor.setValue(t),this._tintColor.toRgbArray(this.tintRgb)}render(t){!this.visible||this.worldAlpha<=0||!this.children.length||!this.renderable||(this.baseTexture||(this.baseTexture=this.children[0]._texture.baseTexture,this.baseTexture.valid||this.baseTexture.once("update",(()=>this.onChildrenChange(0)))),t.batch.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))}onChildrenChange(t){const e=Math.floor(t/this._batchSize);for(;this._bufferUpdateIDs.length0&&(t.baseTexture.wrapMode=p.REPEAT),super(i,r),this.autoUpdate=!0}_render(t){const e=this.geometry;(this.autoUpdate||e._width!==this.shader.texture.height)&&(e._width=this.shader.texture.height,e.update()),super._render(t)}},t.Sprite=Sn,t.SpriteMaskFilter=hr,t.Spritesheet=nl,t.StartupSystem=Br,t.State=cs,t.StateSystem=Lr,t.StencilSystem=_r,t.SystemManager=Gr,t.TARGETS=l,t.TEXT_GRADIENT=Sh,t.TYPES=u,t.TYPES_TO_BYTES_PER_COMPONENT=Io,t.TYPES_TO_BYTES_PER_PIXEL=Co,t.TemporaryDisplayObject=vn,t.Text=Lh,t.TextFormat=ul,t.TextMetrics=Mh,t.TextStyle=Ph,t.Texture=Wi,t.TextureGCSystem=kr,t.TextureMatrix=or,t.TextureSystem=Hr,t.TextureUvs=Hi,t.Ticker=$r,t.TickerPlugin=qr,t.TilingSprite=tl,t.TilingSpriteRenderer=il,t.TimeLimiter=class{constructor(t){this.maxMilliseconds=t,this.frameStart=0}beginFrame(){this.frameStart=Date.now()}allowedToUpload(){return Date.now()-this.frameStart0&&-1==t.indexOf("(")&&(t="ncol("+t+")"),"rgb"==t.substr(0,3)||"hsl"==t.substr(0,3)||"hwb"==t.substr(0,3)||"ncol"==t.substr(0,4)||"cmyk"==t.substr(0,4)){if("ncol"==t.substr(0,4)?(4==t.split(",").length&&-1==t.indexOf("ncola")&&(t=t.replace("ncol","ncola")),a="ncol",t=t.substr(4)):"cmyk"==t.substr(0,4)?(a="cmyk",t=t.substr(4)):(a=t.substr(0,3),t=t.substr(3)),n=3,s=!1,"a"==t.substr(0,1).toLowerCase()?(n=4,s=!0,t=t.substr(1)):"cmyk"==a&&(n=4,5==t.split(",").length&&(n=5,s=!0)),c=(t=(t=t.replace("(","")).replace(")","")).split(","),"rgb"==a){if(c.length!=n)return emptyObject();for(i=0;i-1&&(c[i]=c[i].replace("%",""),c[i]=Number(c[i]/100),i<3&&(c[i]=Math.round(255*c[i]))),isNaN(c[i]))return emptyObject();parseInt(c[i])>255&&(c[i]=255),i<3&&(c[i]=parseInt(c[i])),3==i&&Number(c[i])>1&&(c[i]=1)}l={r:c[0],g:c[1],b:c[2]},1==s&&(h=Number(c[3]))}if("hsl"==a||"hwb"==a||"ncol"==a){for(;c.length=360&&(c[0]=0),i=1;i-1){if(c[i]=c[i].replace("%",""),c[i]=Number(c[i]),isNaN(c[i]))return emptyObject();c[i]=c[i]/100}else c[i]=Number(c[i]);Number(c[i])>1&&(c[i]=1),0>Number(c[i])&&(c[i]=0)}"hsl"==a&&(l=hslToRgb(c[0],c[1],c[2]),f=Number(c[0]),u=Number(c[1])),"hwb"==a&&(l=hwbToRgb(c[0],c[1],c[2])),"ncol"==a&&(l=ncolToRgb(c[0],c[1],c[2])),1==s&&(h=Number(c[3]))}if("cmyk"==a){for(;c.length-1){if(c[i]=c[i].replace("%",""),c[i]=Number(c[i]),isNaN(c[i]))return emptyObject();c[i]=c[i]/100}else c[i]=Number(c[i]);Number(c[i])>1&&(c[i]=1),0>Number(c[i])&&(c[i]=0)}l=cmykToRgb(c[0],c[1],c[2],c[3]),1==s&&(h=Number(c[4]))}}else if("ncs"==t.substr(0,3))l=ncsToRgb(t);else{for(i=0,o=!1,b=getColorArr("names");i=6&&(r-=6),r<1?(e-t)*r+t:r<3?e:r<4?(e-t)*(4-r)+t:t}function hwbToRgb(t,e,r){var a,n,i,s=[];for(n=hslToRgb(t,1,.5),s[0]=n.r/255,s[1]=n.g/255,s[2]=n.b/255,(i=e+r)>1&&(e=Number((e/i).toFixed(2)),r=Number((r/i).toFixed(2))),a=0;a<3;a++)s[a]*=1-e-r,s[a]+=e,s[a]=Number(255*s[a]);return{r:s[0],g:s[1],b:s[2]}}function cmykToRgb(t,e,r,a){return{r:255-255*Math.min(1,t*(1-a)+a),g:255-255*Math.min(1,e*(1-a)+a),b:255-255*Math.min(1,r*(1-a)+a)}}function ncolToRgb(t,e,r){var a,n,i;if(i=t,isNaN(t.substr(0,1))){if(a=t.substr(0,1).toUpperCase(),""==(n=t.substr(1))&&(n=0),isNaN(n=Number(n)))return!1;"R"==a&&(i=0+.6*n),"Y"==a&&(i=60+.6*n),"G"==a&&(i=120+.6*n),"C"==a&&(i=180+.6*n),"B"==a&&(i=240+.6*n),"M"==a&&(i=300+.6*n),"W"==a&&(i=0,e=1-n/100,r=n/100)}return hwbToRgb(i,e,r)}function hueToNcol(t){for(;t>=360;)t-=360;return t<60?"R"+t/.6:t<120?"Y"+(t-60)/.6:t<180?"G"+(t-120)/.6:t<240?"C"+(t-180)/.6:t<300?"B"+(t-240)/.6:t<360?"M"+(t-300)/.6:void 0}function ncsToRgb(t){var e,r,a,n,i,s,o,h,f,u,l,c,b,d,g,m,p;return-1==(t=(t=(t=(t=(t=w3trim(t).toUpperCase()).replace("(","")).replace(")","")).replace("NCS","NCS ")).replace(/ /g," ")).indexOf("NCS")&&(t="NCS "+t),null!==(t=t.match(/^(?:NCS|NCS\sS)\s(\d{2})(\d{2})-(N|[A-Z])(\d{2})?([A-Z])?$/))&&(e=parseInt(t[1],10),r=parseInt(t[2],10),("N"==(a=t[3])||"Y"==a||"R"==a||"B"==a||"G"==a)&&(n=parseInt(t[4],10)||0,"N"!==a?(i=1.05*e-5.25,s=r,"Y"===a&&n<=60?o=1:"Y"===a&&n>60||"R"===a&&n<=80?o=(Math.sqrt(14884-Math.pow(h="Y"===a?n-60:n+40,2))-22)/100:"R"===a&&n>80||"B"===a?o=0:"G"===a&&(o=(Math.sqrt(33800-Math.pow(h=n-170,2))-70)/100),"Y"===a&&n<=80?f=0:"Y"===a&&n>80||"R"===a&&n<=60?f=(104-Math.sqrt(11236-Math.pow(h="Y"===a?n-80+20.5:n+20+20.5,2)))/100:"R"===a&&n>60||"B"===a&&n<=80?f=(Math.sqrt(1e4-Math.pow(h="R"===a?n-60-60:n+40-60,2))-10)/100:"B"===a&&n>80||"G"===a&&n<=40?f=(122-Math.sqrt(19881-Math.pow(h="B"===a?n-80-131:n+20-131,2)))/100:"G"===a&&n>40&&(f=0),"Y"===a?green1=(85-.85*n)/100:"R"===a&&n<=60?green1=0:"R"===a&&n>60?green1=(67.5-Math.sqrt(5776-Math.pow(h=n-60+35,2)))/100:"B"===a&&n<=60?green1=(6.5+Math.sqrt(7044.5-Math.pow(h=1*n-68.5,2)))/100:"B"===a&&n>60||"G"===a&&n<=60?green1=.9:"G"===a&&n>60&&(green1=(90-1/8*(h=n-60))/100),u=((h=(o+green1+f)/3)-o)*(100-s)/100+o,c=(h-f)*(100-s)/100+f,b=1/(u>(l=(h-green1)*(100-s)/100+green1)&&u>c?u:l>u&&l>c?l:c>u&&c>l?c:(u+l+c)/3),(g=parseInt(u*b*(100-i)/100*255,10))>255&&(g=255),(m=parseInt(l*b*(100-i)/100*255,10))>255&&(m=255),(p=parseInt(c*b*(100-i)/100*255,10))>255&&(p=255),g<0&&(g=0),m<0&&(m=0),p<0&&(p=0)):((d=parseInt(255*(1-e/100),10))>255&&(d=255),d<0&&(d=0),g=d,m=d,p=d),{r:g,g:m,b:p}))}function rgbToHsl(t,e,r){var a,n,i,s,o,h,f=[];for(i=0,f[0]=t/255,f[1]=e/255,f[2]=r/255,a=f[0],n=f[0],o=0;i=n&&(n=f[i+1],o=i+1);return 0==o&&(h=(f[1]-f[2])/(n-a)),1==o&&(h=2+(f[2]-f[0])/(n-a)),2==o&&(h=4+(f[0]-f[1])/(n-a)),isNaN(h)&&(h=0),(h*=60)<0&&(h+=360),s=(a+n)/2,{h:h,s:a==n?0:s<.5?(n-a)/(n+a):(n-a)/(2-n-a),l:s}}function rgbToHwb(t,e,r){return t/=255,e/=255,r/=255,{h:0==(chroma=(max=Math.max(t,e,r))-(min=Math.min(t,e,r)))?0:t==max?(e-r)/chroma%6*360:e==max?((r-t)/chroma+2)%6*360:((t-e)/chroma+4)%6*360,w:min,b:1-max}}function rgbToCmyk(t,e,r){var a,n,i,s;return t/=255,e/=255,r/=255,1==(s=1-(max=Math.max(t,e,r)))?(a=0,n=0,i=0):(a=(1-t-s)/(1-s),n=(1-e-s)/(1-s),i=(1-r-s)/(1-s)),{c:a,m:n,y:i,k:s}}function toHex(t){for(var e=t.toString(16);e.length<2;)e="0"+e;return e}function cl(t){console.log(t)}function w3trim(t){return t.replace(/^\s+|\s+$/g,"")}function isHex(t){return"0123456789ABCDEFabcdef".indexOf(t)>-1}function w3SetColorsByAttribute(){var t,e,r;for(e=0,t=document.getElementsByTagName("*");e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=w(t,360),e=w(e,100),r=w(r,100),0===e)a=n=i=r;else{var o=r<.5?r*(1+e):r+e-r*e,h=2*r-o;a=s(h,o,t+1/3),n=s(h,o,t),i=s(h,o,t-1/3)}return{r:255*a,g:255*n,b:255*i}}(s.h,f,u),l=!0,c="hsl"),s.hasOwnProperty("a")&&(h=s.a)),h=_(h),{ok:l,format:s.format||c,r:Math.min(255,Math.max(o.r,0)),g:Math.min(255,Math.max(o.g,0)),b:Math.min(255,Math.max(o.b,0)),a:h});this._originalInput=n,this._r=G.r,this._g=G.g,this._b=G.b,this._a=G.a,this._roundA=Math.round(100*this._a)/100,this._format=i.format||G.format,this._gradientType=i.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=G.ok}function n(t,e,r){t=w(t,255),e=w(e,255),r=w(r,255);var a,n,i=Math.max(t,e,r),s=Math.min(t,e,r),o=(i+s)/2;if(i==s)a=n=0;else{var h=i-s;switch(n=o>.5?h/(2-i-s):h/(i+s),i){case t:a=(e-r)/h+(e>1)+720)%360;--e;)n.h=(n.h+i)%360,s.push(a(n));return s}function M(t,e){e=e||6;for(var r=a(t).toHsv(),n=r.h,i=r.s,s=r.v,o=[],h=1/e;e--;)o.push(a({h:n,s:i,v:s})),s=(s+h)%1;return o}a.prototype={isDark:function(){return 128>this.getBrightness()},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,a=this.toRgb();return t=a.r/255,e=a.g/255,r=a.b/255,.2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=_(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=i(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=i(this._r,this._g,this._b),e=Math.round(360*t.h),r=Math.round(100*t.s),a=Math.round(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+a+"%)":"hsva("+e+", "+r+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var t=n(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=n(this._r,this._g,this._b),e=Math.round(360*t.h),r=Math.round(100*t.s),a=Math.round(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+a+"%)":"hsla("+e+", "+r+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHexNumber:function(){return Number("0x"+this.toHex())},toHex8:function(t){var e,r,a,n,i,s;return e=this._r,r=this._g,a=this._b,n=this._a,i=t,s=[A(Math.round(e).toString(16)),A(Math.round(r).toString(16)),A(Math.round(a).toString(16)),A(R(n))],i&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0):s.join("")},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*w(this._r,255))+"%",g:Math.round(100*w(this._g,255))+"%",b:Math.round(100*w(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*w(this._r,255))+"%, "+Math.round(100*w(this._g,255))+"%, "+Math.round(100*w(this._b,255))+"%)":"rgba("+Math.round(100*w(this._r,255))+"%, "+Math.round(100*w(this._g,255))+"%, "+Math.round(100*w(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1||!v[s(this._r,this._g,this._b,!0)])},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var i=a(t);r="#"+o(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,a=this._a<1&&this._a>=0;return e||!a||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),("hex"===t||"hex6"===t)&&(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return a(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(l,arguments)},brighten:function(){return this._applyModification(c,arguments)},darken:function(){return this._applyModification(b,arguments)},desaturate:function(){return this._applyModification(h,arguments)},saturate:function(){return this._applyModification(f,arguments)},greyscale:function(){return this._applyModification(u,arguments)},spin:function(){return this._applyModification(d,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(M,arguments)},splitcomplement:function(){return this._applyCombination(p,arguments)},triad:function(){return this._applyCombination(m,[3])},tetrad:function(){return this._applyCombination(m,[4])}},a.fromRatio=function(e,r){if("object"==t(e)){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]="a"===i?e[i]:N(e[i]));e=n}return a(e,r)},a.equals=function(t,e){return!!t&&!!e&&a(t).toRgbString()==a(e).toRgbString()},a.random=function(){return a.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},a.mix=function(t,e,r){r=0===r?0:r||50;var n=a(t).toRgb(),i=a(e).toRgb(),s=r/100;return a({r:(i.r-n.r)*s+n.r,g:(i.g-n.g)*s+n.g,b:(i.b-n.b)*s+n.b,a:(i.a-n.a)*s+n.a})},a.readability=function(t,e){var r=a(t),n=a(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)},a.isReadable=function(t,e,r){var n,i,s,o,h,f=a.readability(t,e);switch(i=!1,(s=r,o=((s=s||{level:"AA",size:"small"}).level||"AA").toUpperCase(),h=(s.size||"small").toLowerCase(),"AA"!==o&&"AAA"!==o&&(o="AA"),"small"!==h&&"large"!==h&&(h="small"),n={level:o,size:h}).level+n.size){case"AAsmall":case"AAAlarge":i=f>=4.5;break;case"AAlarge":i=f>=3;break;case"AAAsmall":i=f>=7}return i},a.mostReadable=function(t,e,r){var n,i,s,o,h=null,f=0;i=(r=r||{}).includeFallbackColors,s=r.level,o=r.size;for(var u=0;uf&&(f=n,h=a(e[u]));return a.isReadable(t,h,{level:s,size:o})||!i?h:(r.includeFallbackColors=!1,a.mostReadable(t,["#fff","#000"],r))};var k=a.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},v=a.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(k);function _(t){return(isNaN(t=parseFloat(t))||t<0||t>1)&&(t=1),t}function w(t,e){"string"==typeof(r=t)&&-1!=r.indexOf(".")&&1===parseFloat(r)&&(t="100%");var r,a,n="string"==typeof(a=t)&&-1!=a.indexOf("%");return t=Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),1e-6>Math.abs(t-e)?1:t%e/parseFloat(e)}function x(t){return Math.min(1,Math.max(0,t))}function S(t){return parseInt(t,16)}function A(t){return 1==t.length?"0"+t:""+t}function N(t){return t<=1&&(t=100*t+"%"),t}function R(t){return Math.round(255*parseFloat(t)).toString(16)}function C(t){return S(t)/255}var H,G,B,T=(G="[\\s|\\(]+("+(H="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",B="[\\s|\\(]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",{CSS_UNIT:RegExp(H),rgb:RegExp("rgb"+G),rgba:RegExp("rgba"+B),hsl:RegExp("hsl"+G),hsla:RegExp("hsla"+B),hsv:RegExp("hsv"+G),hsva:RegExp("hsva"+B),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function F(t){return!!T.CSS_UNIT.exec(t)}return a})),w3color.prototype={toRgbString:function(){return"rgb("+this.red+", "+this.green+", "+this.blue+")"},toRgbaString:function(){return"rgba("+this.red+", "+this.green+", "+this.blue+", "+this.opacity+")"},toHwbString:function(){return"hwb("+this.hue+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%)"},toHwbStringDecimal:function(){return"hwb("+this.hue+", "+this.whiteness+", "+this.blackness+")"},toHwbaString:function(){return"hwba("+this.hue+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%, "+this.opacity+")"},toHslString:function(){return"hsl("+this.hue+", "+Math.round(100*this.sat)+"%, "+Math.round(100*this.lightness)+"%)"},toHslStringDecimal:function(){return"hsl("+this.hue+", "+this.sat+", "+this.lightness+")"},toHslaString:function(){return"hsla("+this.hue+", "+Math.round(100*this.sat)+"%, "+Math.round(100*this.lightness)+"%, "+this.opacity+")"},toCmykString:function(){return"cmyk("+Math.round(100*this.cyan)+"%, "+Math.round(100*this.magenta)+"%, "+Math.round(100*this.yellow)+"%, "+Math.round(100*this.black)+"%)"},toCmykStringDecimal:function(){return"cmyk("+this.cyan+", "+this.magenta+", "+this.yellow+", "+this.black+")"},toNcolString:function(){return this.ncol+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%"},toNcolStringDecimal:function(){return this.ncol+", "+this.whiteness+", "+this.blackness},toNcolaString:function(){return this.ncol+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%, "+this.opacity},toName:function(){var t,e,r,a=getColorArr("hexs");for(i=0;i1&&(this.sat=1),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},desaturate:function(t){var e,r;e=t/100||.1,this.sat-=e,this.sat<0&&(this.sat=0),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},lighter:function(t){var e,r;e=t/100||.1,this.lightness+=e,this.lightness>1&&(this.lightness=1),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},darker:function(t){var e,r;e=t/100||.1,this.lightness-=e,this.lightness<0&&(this.lightness=0),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},attachValues:function(t){this.red=t.red,this.green=t.green,this.blue=t.blue,this.hue=t.hue,this.sat=t.sat,this.lightness=t.lightness,this.whiteness=t.whiteness,this.blackness=t.blackness,this.cyan=t.cyan,this.magenta=t.magenta,this.yellow=t.yellow,this.black=t.black,this.ncol=t.ncol,this.opacity=t.opacity,this.valid=t.valid}} \ No newline at end of file diff --git a/.server/lib/scripts/webpage.js b/.server/lib/scripts/webpage.js new file mode 100644 index 0000000..daf949e --- /dev/null +++ b/.server/lib/scripts/webpage.js @@ -0,0 +1 @@ +let absoluteBasePath,relativeBasePath,relativePathname,webpageContainer,documentContainer,viewContent,leftSidebar,rightSidebar,sidebarCollapseIcons,sidebarGutters,sidebars,sidebarDefaultWidth,sidebarTargetWidth,contentTargetWidth,themeToggle,searchInput,fileTree,outlineTree,fileTreeItems,outlineTreeItems,canvasWrapper,canvas,canvasNodes,canvasBackground,canvasBackgroundPattern,focusedCanvasNode,loadingIcon,documentType,embedType,customType,deviceSize,lastScreenWidth,loadedURL=new URL(window.location.href),isOffline=!1,collapseIconUp=["m7 15 5 5 5-5","m7 9 5-5 5 5"],collapseIconDown=["m7 20 5-5 5 5","m7 4 5 5 5-5"],isTouchDevice=isTouchCapable(),fullyInitialized=!1;async function initGlobalObjects(){"file:"!=window.location.protocol&&await loadIncludes(),loadingIcon=document.createElement("div"),loadingIcon.classList.add("loading-icon"),document.body.appendChild(loadingIcon),loadingIcon.innerHTML="
    ",webpageContainer=document.querySelector(".webpage-container"),documentContainer=document.querySelector(".document-container"),leftSidebar=document.querySelector(".sidebar-left"),rightSidebar=document.querySelector(".sidebar-right"),fileTree=document.querySelector(".file-tree"),outlineTree=document.querySelector(".outline-tree"),fileTreeItems=Array.from(document.querySelectorAll(".tree-container.file-tree .tree-item")),sidebars=[],sidebarGutters=[],sidebarCollapseIcons=[],leftSidebar&&rightSidebar&&(sidebarCollapseIcons=Array.from(document.querySelectorAll(".sidebar-collapse-icon")),sidebarGutters=[sidebarCollapseIcons[0].parentElement,sidebarCollapseIcons[1].parentElement],sidebars=[sidebarGutters[0].parentElement,sidebarGutters[1].parentElement]),themeToggle=document.querySelector(".theme-toggle-input")}async function initializePage(){focusedCanvasNode=null,canvasWrapper=document.querySelector(".canvas-wrapper")??canvasWrapper,canvas=document.querySelector(".canvas")??canvas;let e=document.querySelectorAll(".canvas-node");canvasNodes=e.length>0?e:canvasNodes,canvasBackground=document.querySelector(".canvas-background")??canvasBackground,canvasBackgroundPattern=document.querySelector(".canvas-background pattern")??canvasBackgroundPattern,viewContent=document.querySelector(".document-container > .view-content")??document.querySelector(".document-container > .markdown-preview-view")??viewContent,outlineTreeItems=Array.from(document.querySelectorAll(".tree-container.outline-tree .tree-item")),fullyInitialized||("file:"==window.location.protocol&&initializeForFileProtocol(),await initGlobalObjects(),initializeDocumentTypes(document),setupSidebars(),setupThemeToggle(),await setupSearch(),setupRootPath(document),sidebarDefaultWidth=await getComputedPixelValue("--sidebar-width"),contentTargetWidth=.9*await getComputedPixelValue("--line-width"),window.addEventListener("resize",(()=>onResize())),onResize()),setTimeout((()=>documentContainer.classList.remove("hide"))),!rightSidebar||"video"!=embedType&&"embed"!=embedType&&"excalidraw"!=customType&&"kanban"!=customType&&"canvas"!=documentType?rightSidebar&&rightSidebar.temporarilyCollapsed&&rightSidebar.collapsed&&(rightSidebar.collapse(!1),rightSidebar.temporarilyCollapsed=!1):rightSidebar.collapsed||rightSidebar.temporaryCollapse(),parseURLParams(),relativePathname=getVaultRelativePath(loadedURL.href)}function initializePageEvents(e){e&&(setupHeaders(e),setupTrees(e),setupLists(e),setupCallouts(e),setupCheckboxes(e),setupCanvas(e),setupCodeblocks(e),setupLinks(e),setupScroll(e))}function initializeDocumentTypes(e){e.querySelector(".document-container > .markdown-preview-view")?documentType="markdown":e.querySelector(".canvas-wrapper")?documentType="canvas":(documentType="custom",e.querySelector(".kanban-plugin")?customType="kanban":e.querySelector(".excalidraw-plugin")&&(customType="excalidraw"))}function initializeForFileProtocol(){let e=document.querySelector(".graph-view-placeholder");e&&(console.log("Running locally, skipping graph view initialization and hiding graph."),e.style.display="none",e.previousElementSibling.style.display="none")}function onEndResize(){document.body.classList.toggle("resizing",!1)}function onStartResize(){document.body.classList.toggle("resizing",!0)}window.onload=async function(){await initializePage(),initializePageEvents(document),setActiveDocument(loadedURL,!0,!1,!1),fullyInitialized=!0},window.onpopstate=function(e){if(e.preventDefault(),e.stopPropagation(),document.body.classList.contains("floating-sidebars")&&(!leftSidebar.collapsed||!rightSidebar.collapsed))return leftSidebar.collapse(!0),void rightSidebar.collapse(!0);loadDocument(getURLPath(),!1,!0),console.log("Popped state: "+getURLPath())};let checkStillResizingTimeout,isResizing=!1;function onResize(e=!1){function t(e,t){let o=window.innerWidth;return o>e&&oe&&o=t)}function o(e){let t=window.innerWidth;return t>e&&null==lastScreenWidth||t>e&&lastScreenWidthe}isResizing||(onStartResize(),isResizing=!0),o(contentTargetWidth+2*sidebarDefaultWidth)||o(1025)?(deviceSize="large-screen",document.body.classList.toggle("floating-sidebars",!1),document.body.classList.toggle("is-large-screen",!0),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!1),sidebars.forEach((function(e){e.collapse(!1)})),sidebarGutters.forEach((function(e){e.collapse(!1)}))):t(1*(contentTargetWidth+sidebarDefaultWidth),contentTargetWidth+2*sidebarDefaultWidth)||t(769,1024)?(deviceSize="small screen",document.body.classList.toggle("floating-sidebars",!1),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!0),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!1),sidebarGutters.forEach((function(e){e.collapse(!1)})),leftSidebar&&rightSidebar&&!leftSidebar.collapsed&&rightSidebar.collapse(!0)):t(2*sidebarDefaultWidth,1*(contentTargetWidth+sidebarDefaultWidth))||t(481,768)?(deviceSize="tablet",document.body.classList.toggle("floating-sidebars",!0),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!0),document.body.classList.toggle("is-phone",!1),sidebarGutters.forEach((function(e){e.collapse(!1)})),leftSidebar&&rightSidebar&&!leftSidebar.collapsed&&rightSidebar.collapse(!0),leftSidebar&&!fullyInitialized&&leftSidebar.collapse(!0)):(n(2*sidebarDefaultWidth)||n(480))&&(deviceSize="phone",document.body.classList.toggle("floating-sidebars",!0),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!0),sidebars.forEach((function(e){e.collapse(!0)})),sidebarGutters.forEach((function(e){e.collapse(!1)}))),lastScreenWidth=window.innerWidth,null!=checkStillResizingTimeout&&clearTimeout(checkStillResizingTimeout);let i=window.innerWidth;checkStillResizingTimeout=setTimeout((function(){window.innerWidth==i&&(checkStillResizingTimeout=void 0,isResizing=!1,onEndResize())}),200)}function clamp(e,t,o){return Math.min(Math.max(e,t),o)}async function delay(e){return new Promise((t=>setTimeout(t,e)))}async function waitUntil(e,t=100,o=2e3){return new Promise((n=>{let i=0,a=setTimeout((()=>{clearInterval(i),n()}),o);i=setInterval((()=>{e()&&(clearInterval(i),clearTimeout(a),n())}),t)}))}function getElBounds(e){let t=e.getBoundingClientRect(),o=t.x,n=t.y,i=t.width,a=t.height;return{x:o,y:n,width:i,height:a,minX:o,minY:n,maxX:o+i,maxY:n+a,centerX:t.x+t.width/2,centerY:t.y+t.height/2}}async function getComputedPixelValue(e){const t=document.createElement("div");document.body.appendChild(t),t.style.position="absolute",t.style.width=`var(${e})`,await new Promise((e=>setTimeout(e,10)));const o=window.getComputedStyle(t).width;return t.remove(),parseFloat(o)}function getPointerPosition(e){let t=e.touches?Array.from(e.touches):[];return{x:t.length>0?t.reduce(((e,t)=>e+t.clientX),0)/e.touches.length:e.clientX,y:t.length>0?t.reduce(((e,t)=>e+t.clientY),0)/e.touches.length:e.clientY}}function getTouchPosition(e){return{x:e.clientX,y:e.clientY}}function getAllChildrenRecursive(e){let t=[];for(let o=0;o0||navigator.msMaxTouchPoints>0}function downloadBlob(e,t="file.txt"){if(window.navigator&&window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(e);const o=window.URL.createObjectURL(e),n=document.createElement("a");n.href=o,n.download=t,n.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),setTimeout((()=>{window.URL.revokeObjectURL(o),n.remove()}),100)}function extentionToTag(e){return["png","jpg","jpeg","svg","gif","bmp","ico"].includes(e)?"img":["mp4","mov","avi","webm","mpeg"].includes(e)?"video":["mp3","wav","ogg","aac"].includes(e)?"audio":["pdf"].includes(e)?"embed":void 0}let slideUp=(e,t=500)=>{e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,window.setTimeout((async()=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideUpAll=(e,t=500)=>{e.forEach((async e=>{e&&(e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0)})),window.setTimeout((async()=>{e.forEach((async e=>{e&&(e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property"))}))}),t)},slideDown=(e,t=500)=>{e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),window.setTimeout((async()=>{e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideDownAll=(e,t=500)=>{e.forEach((async e=>{if(!e)return;e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom")})),window.setTimeout((async()=>{e.forEach((async e=>{e&&(e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property"))}))}),t)};var slideToggle=(e,t=500)=>"none"===window.getComputedStyle(e).display?slideDown(e,t):slideUp(e,t),slideToggleAll=(e,t=500)=>"none"===window.getComputedStyle(e[0]).display?slideDownAll(e,t):slideUpAll(e,t);function getURLExtention(e){return e.split(".").pop().split("?")[0].split("#")[0].toLowerCase().trim()}let transferDocument=document.implementation.createHTMLDocument(),loading=!1;async function loadDocument(e,t,o){if(e=decodeURI(e),loading)return void console.log("Already loading document.");loading=!0;let n=new URL(e,absoluteBasePath);if(relativePathname=getVaultRelativePath(n.href),console.log("Loading document: ",n.pathname),n.pathname==loadedURL?.pathname)return console.log("Document already loaded."),loadedURL=n,setActiveDocument(loadedURL,!1,!1),await initializePage(),void(loading=!1);loadedURL=n;let i,a=loadedURL.pathname;await showLoading(!0);try{i=await fetch(a)}catch(e){return window.location.assign(a),void(loading=!1)}if(i.ok){setActiveDocument(loadedURL,o,t);let n=getURLExtention(e);if("/"==n&&(n="html"),documentType="none",embedType="none",customType="none","html"==n){let e=(await i.text()).replaceAll("","").replaceAll("","").replaceAll("","");transferDocument.write(e),setupRootPath(transferDocument),initializeDocumentTypes(transferDocument);let t=transferDocument.querySelector(".document-container");documentContainer.innerHTML=t.innerHTML;let o=transferDocument.querySelector(".outline-tree");outlineTree&&o&&(outlineTree.innerHTML=o.innerHTML),document.title=transferDocument.title,transferDocument.close()}else if(documentType="embed",embedType=extentionToTag(n),null!=embedType){let t=document.createElement(embedType);t.controls=!0,t.src=e,t.style.maxWidth="100%","embed"==embedType&&(t.style.width="100%",t.style.height="100%"),t.style.objectFit="contain",viewContent.innerHTML="",viewContent.setAttribute("class","view-content embed"),viewContent.appendChild(t),document.querySelector(".outline-tree")&&(document.querySelector(".outline-tree").innerHTML=""),document.title=e.split("/").pop()}else{downloadBlob(await i.blob(),e.split("/").pop())}await initializePage(),initializePageEvents(documentContainer),initializePageEvents(outlineTree)}else pageNotFound(viewContent);await showLoading(!1),loading=!1}function setActiveDocument(e,t,o,n=!0){let i=getVaultRelativePath(e.href),a=decodeURI(i).split("#")[0].split("?")[0].replace('"','\\"').replace("'","\\'");"/"!=a&&""!=a||(a="index.html");let l=document.querySelector(".file-tree .tree-item.mod-active"),s=document.querySelector(`.file-tree .tree-item:has(>.tree-link[href^="${a}"])`);if(s&&!s.isEqualNode(l)&&(l?.classList.remove("mod-active"),s.classList.add("mod-active"),t&&scrollIntoView(s,{block:"center",inline:"nearest"},n)),"undefined"!=typeof graphData&&window.graphRenderer){let e=graphData?.paths.findIndex((function(e){return e.endsWith(a)}))??-1;e>=0&&(window.graphRenderer.activeNode=e)}console.log("Active document: "+o),o&&"file:"!=window.location.protocol&&(window.history.pushState({path:i},"",i),console.log("Pushed state: "+i))}function parseURLParams(){const e=loadedURL.searchParams.get("mark"),t=loadedURL.searchParams.get("query"),o=decodeURI(loadedURL.hash);if(e&&searchCurrentDocument(e),t&&search(t),o){const e=document.getElementById(o.substring(1));e?scrollIntoView(e,{behavior:"smooth",block:"start"}):console.log("Heading not found: "+o)}}async function showLoading(e){if(documentContainer.style.transitionDuration="",loadingIcon.classList.toggle("show",e),documentContainer.classList.toggle("hide",e),e){let e=getViewBounds();loadingIcon.style.left=e.centerX-loadingIcon.offsetWidth/2+"px",loadingIcon.style.top=e.centerY-loadingIcon.offsetHeight/2+"px","phone"==deviceSize&&leftSidebar.collapse(!0)}await delay(200)}function pageNotFound(e){e.innerHTML="\n\t
    \n\t\t
    \n\t\t\t

    Page Not Found

    \n\t\t
    \n\t
    \n\t",document.querySelector(".outline-tree")&&(document.querySelector(".outline-tree").innerHTML=""),console.log("Page not found: "+absoluteBasePath+loadedURL.pathname);let t=getURLRootPath(absoluteBasePath+loadedURL.pathname);relativeBasePath=t,document.querySelector("base").href=t,document.title="Page Not Found"}function setupRootPath(e){let t=e.getElementById("root-path");if(!t)return;let o=t.getAttribute("root-path"),n=document.createElement("base");n.href=o,console.log("Setting root path: "+o),document.querySelector("base").replaceWith(n),document.querySelector("#root-path").setAttribute("root-path",o),relativeBasePath=o,absoluteBasePath=new URL(o,window.location.href).href}function getURLPath(e=window.location.pathname){return null==absoluteBasePath&&setupRootPath(document),e.replace(absoluteBasePath,"")}function getURLRootPath(e=window.location.pathname){let t=getURLPath(e).split("/"),o="";for(let e=0;ee+t.offsetHeight),0);e.markdownPreviewSizer.style.minHeight=t+"px"}}if(i.style.height=a+"px",t||"canvas"!=documentType||e.show(!0),e.collapsed=t,n)return i.style.transitionDuration="0s",e.classList.toggle("is-collapsed",t),i.style.height="",i.style.transitionDuration="",void l();let s=getComputedStyle(i).transitionDuration;s=s.endsWith("s")?parseFloat(s):s.endsWith("ms")?parseFloat(s)/1e3:0;let r=Math.min(s*Math.sqrt(a)/16,.5);i.style.transitionDuration=`${r}s`,i.style.height=t?"0px":a+"px",e.classList.toggle("is-animating",!0),e.classList.toggle("is-collapsed",t),e.markdownPreviewSizer.closest(".markdown-embed")&&l(t?0:void 0),setTimeout((function(){i.style.transitionDuration="",t||(i.style.height=""),e.classList.toggle("is-animating",!1),l()}),1e3*r)}function toggleTreeHeaderOpen(e,t=!0){e.collapse(!e.collapsed,t)}function hideHeader(e){if(e.forceShown)return;if(e.classList.contains("is-hidden")||e.classList.contains("is-collapsed"))return;if("none"==getComputedStyle(e).display)return;let t=e.offsetHeight;e.classList.toggle("is-hidden",!0),0!=t&&(e.style.height=t+"px"),e.style.visibility="hidden"}function showHeader(e,t=!0,o=!1,n=!1){if(n&&(e.forceShown=!0),t){let t=e.parentHeader;isHeadingWrapper(t)&&t.show(!0,!1,n)}if(o){e.querySelectorAll(".heading-wrapper").forEach((function(e){e.show(!1,!0,n)}))}e.classList.contains("is-hidden")&&!e.classList.contains("is-collapsed")&&(e.classList.toggle("is-hidden",!1),e.style.height="",e.style.visibility="")}function setupTrees(e){e.querySelectorAll(".collapse-tree-button").forEach((function(e){e.treeRoot=e.closest(".tree-container"),e.icon=e.firstChild,e.icon.innerHTML="",e.setIcon=function(t){e.icon.children[0].setAttribute("d",t?collapseIconUp[0]:collapseIconDown[0]),e.icon.children[1].setAttribute("d",t?collapseIconUp[1]:collapseIconDown[1])},e.collapse=function(t){setTreeCollapsedAll(e.treeRoot.classList.contains("file-tree")?fileTreeItems:outlineTreeItems,t),e.setIcon(t),e.collapsed=t},e.toggleCollapse=function(){e.collapse(!e.collapsed)},e.toggleState=function(t){void 0===t&&(t=!e.collapsed),e.collapsed=t,e.setIcon(t)},e.addEventListener("click",(function(t){return t.preventDefault(),t.stopPropagation(),e.toggleCollapse(),!1})),(e.treeRoot.classList.contains("file-tree")?fileTreeItems:outlineTreeItems).some((e=>!e.classList.contains("is-collapsed")&&e.classList.contains("mod-collapsible")))&&e.toggleState(!1)}));let t=Array.from(e.querySelectorAll(".tree-container.file-tree .tree-item:has(.collapse-icon) > .tree-link")),o=Array.from(e.querySelectorAll(".tree-container.outline-tree .tree-item:has(.collapse-icon) > .tree-link .collapse-icon")),n=Array.from(t).concat(Array.from(o));for(let e of n){let t=e?.closest(".tree-item");t&&e&&e?.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation(),toggleTreeCollapsed(t)}))}}async function setTreeCollapsed(e,t,o=!0,n=!0){if(e.classList.contains("mod-collapsible")||(e=e.closest(".mod-collapsible")),!e||!e.classList.contains("mod-collapsible"))return;if(e.classList.contains("is-collapsed")==t)return;if(n){let t=e.parentElement.closest(".mod-collapsible");t&&await setTreeCollapsed(t,!1,o,n)}let i=e.querySelector(".tree-item-children");if(t)e.classList.add("is-collapsed"),o?slideUp(i,100):i.style.display="none";else{e.classList.remove("is-collapsed"),o?slideDown(i,100):i.style.display="";let t=e.closest(".tree-container");if(t){let e=t.querySelector(".collapse-tree-button");e&&e.toggleState(!1)}}}async function setTreeCollapsedAll(e,t,o=!0){let n=[];e.forEach((async e=>{if(!e||!e.classList.contains("mod-collapsible"))return;let o=e.querySelector(".tree-item-children");t?e.classList.add("is-collapsed"):e.classList.remove("is-collapsed"),n.push(o)})),t?o?slideUpAll(n,100):n.forEach((async e=>{e&&(e.style.display="none")})):o?slideDownAll(n,100):n.forEach((async e=>{e&&(e.style.display="")}))}function toggleTreeCollapsed(e){(e=e.closest(".tree-item"))&&setTreeCollapsed(e,!e.classList.contains("is-collapsed"))}function toggleTreeCollapsedAll(e){e&&setTreeCollapsedAll(e,!e[0].classList.contains("is-collapsed"))}function getFileTreeItemFromPath(e){return document.querySelector(`.file-tree .tree-item:has(> .tree-link[href^="${e}"])`)}async function filterFileTree(e,t,o,n=!0){n&&await setTreeCollapsedAll(fileTreeItems,!1,!1);let i=Array.from(document.querySelectorAll(".file-tree .tree-item:not(.filtered-out)"));for await(let l of i)l.classList.add("filtered-out");await removeTreeHintLabels();for(let s=0;s0){let p=d.querySelector(".tree-link").appendChild(document.createElement("div"));function a(e,t){if(""==(e=e.trim()))return;let o=document.createElement("a");o.classList.add("tree-hint-label"),o.classList.add("internal-link"),o.textContent=e,o.href=decodeURI(t).replaceAll(" ","_"),p.appendChild(o)}p.classList.add("tree-hint-container");for(let h of c)a(h,r+"#"+h);setupLinks(p)}}}}async function clearFileTreeFilter(e=!0){await removeTreeHintLabels();let t=document.querySelectorAll(".file-tree .filtered-out");for await(let e of t)e.classList.remove("filtered-out");let o=document.querySelectorAll(".file-tree .tree-link[href*='?mark=']");for await(let e of o){let t=e.href.split("?")[0];t=getVaultRelativePath(t),e.href=t}e&&await setTreeCollapsedAll(fileTreeItems,!0,!1)}async function removeTreeHintLabels(){let e=document.querySelectorAll(".tree-hint-container");for await(let t of e)t.remove()}function sortFileTreeDocuments(e){let t=Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)"));t.sort(e);for(let e=1;e=0;i--){let e=o[i];if(t.parentElement==e.parentElement){e.after(t),n=!0;break}}n||t.parentElement.prepend(t)}}function sortFileTree(e){let t=Array.from(document.querySelectorAll(".file-tree .tree-item.mod-tree-file:not(.filtered-out)"));t.sort(e);for(let e=1;e=0;i--){let e=o[i];if(t.parentElement==e.parentElement){e.after(t),n=!0;break}}n||t.parentElement.prepend(t)}}function sortFileTreeAlphabetically(e=!1){sortFileTree((function(t,o){const n=t.querySelector(".tree-item-title"),i=o.querySelector(".tree-item-title");if(!n||!i)return 0;const a=n.textContent.toLowerCase(),l=i.textContent.toLowerCase();return a.localeCompare(l,void 0,{numeric:!0})*(e?-1:1)}))}function setupLists(e){let t=Array.from(e.querySelectorAll(".list-collapse-indicator"));for(let e=0;e1)&&(1==e.button||0==e.button||t.length>0)){let n=getPointerPosition(e),i=!1,a=0,l=t.length,s=function(t){let s=t.touches??[],r=getPointerPosition(t);l!=s.length&&(n=r,l=s.length);let c=r.x-n.x,d=r.y-n.y;if((1==e.button||1==s.length)&&focusedCanvasNode){let e=Math.abs(c)>Math.abs(1.5*d),t=Math.abs(d)>Math.abs(1.5*c),n=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(n){let i=n.scrollHeight>n.parentElement.clientHeight+1,a=n.scrollWidth>n.parentElement.clientWidth+1;o=!(!(e&&a||t&&i)||!(window?.navigator?.platform?.startsWith("Win")??1))}}if(0==e.button&&focusedCanvasNode&&""!=focusedCanvasNode.querySelector(".canvas-node-content").textContent.trim()&&(o=!0),o||(translateCanvas(c,d),n=r),2==s.length){let e=getPointerPosition(t,!1),o=getTouchPosition(t.touches[0]),n=getTouchPosition(t.touches[1]),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2));i||(i=!0,a=l),scaleCanvasAroundPoint(1+(l-a)/a,e.x,e.y),a=l}},r=function(e){document.body.removeEventListener("mousemove",s),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mouseenter",c),document.body.removeEventListener("touchmove",s),document.body.removeEventListener("touchend",r),document.body.removeEventListener("touchcancel",r),o=!1},c=function(e){1!=e.buttons&&4!=e.buttons&&r(e)};document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",r),document.body.addEventListener("mouseenter",c),document.body.addEventListener("touchmove",s),document.body.addEventListener("touchend",r),document.body.addEventListener("touchcancel",r)}}let i=0,a=0;canvasWrapper.addEventListener("mousemove",(function(e){let t=getPointerPosition(e);i=t.x,a=t.y}));let l=1,s=0,r=!1;canvasWrapper.addEventListener("wheel",(function(e){if(focusedCanvasNode){let e=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(e&&e.scrollHeight>e.parentElement.clientHeight)return}if(e.preventDefault(),e.stopPropagation(),r){let t=1;t-=e.deltaY/700*t,t=clamp(t,.1,10);let o=getViewBounds();scaleCanvasAroundPoint(t,o.centerX,o.centerY)}else{let t=0==s;s-=e.deltaY/200;const o=.14*l;s=clamp(s,-o,o),t&&requestAnimationFrame(m)}}));let c=0,d=0,u=0;function m(e){if(c=e-d,0==d&&(c=30),d=e,u=.05*c+.95*u,u>50)return console.log("Scrolling too slow, turning on instant scroll"),void(r=!0);let t=l;l+=s*(c/1e3)*30,l=clamp(l,.1,10);getViewBounds();scaleCanvasAroundPoint(l/t,i,a),s*=.4,Math.abs(s)<.01?(s=0,d=0):requestAnimationFrame(m)}setTimeout(fitViewToCanvas,300)}function getViewBounds(){let e=viewContent.getBoundingClientRect(),t=e.x,o=e.y,n=e.x+e.width,i=e.y+e.height;return{x:t,y:o,width:n-t,height:i-o,minX:t,minY:o,maxX:n,maxY:i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function getNodesBounds(){let e=1/0,t=1/0,o=-1/0,n=-1/0;canvasNodes.forEach((function(i){let a=i.getBoundingClientRect();a.xo&&(o=a.x+a.width),a.y+a.height>n&&(n=a.y+a.height)}));let i=o-e,a=n-t;return{x:e,y:t,width:i,height:a,minX:e,minY:t,maxX:o,maxY:n,centerX:e+i/2,centerY:t+a/2}}function getCanvasBounds(){let e=canvas.getBoundingClientRect(),t=e.x,o=e.y,n=e.width,i=e.height;return{x:t,y:o,width:n,height:i,minX:t,minY:o,maxX:t+n,maxY:o+i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function scaleCanvasAroundPoint(e,t,o){let n=getCanvasBounds(),i=t-n.x,a=o-n.y,l=t-(n.x+i*e),s=o-(n.y+a*e);return scaleCanvas(e),translateCanvas(l,s),{x:l,y:s}}function scaleCanvas(e){let t=Math.max(e*canvas.style.scale,.001);canvas.style.scale=t,canvasWrapper.style.setProperty("--zoom-multiplier",1/Math.sqrt(t))}function translateCanvas(e,t){let o=canvas.style.translate,n=o.split(" "),i=n.length>0?parseFloat(o.split(" ")[0].trim()):0,a=n.length>1?parseFloat(o.split(" ")[1].trim()):i;canvas.style.translate=`${i+e}px ${a+t}px`}function setViewCenter(e,t){let o=getViewBounds();translateCanvas(o.centerX-e,o.centerY-t)}function getCanvasTranslation(){let e=canvas.style.translate,t=e.split(" "),o=t.length>0?parseFloat(e.split(" ")[0].trim()):0;return{x:o,y:t.length>1?parseFloat(e.split(" ")[1].trim()):o}}function scaleCanvasBackground(e){let t=e*canvasBackgroundPattern.getAttribute("width"),o=e*canvasBackgroundPattern.getAttribute("height");canvasBackgroundPattern.setAttribute("width",t),canvasBackgroundPattern.setAttribute("height",o)}function translateCanvasBackground(e,t){canvasBackgroundPattern.setAttribute("x",e+canvasBackgroundPattern.getAttribute("x")),canvasBackgroundPattern.setAttribute("y",t+canvasBackgroundPattern.getAttribute("y"))}function fitViewToNode(e){let t=getElBounds(e),o=getViewBounds(),n=getCanvasBounds(),i=.8*Math.min(o.width/t.width,o.height/t.height),a=n.x,l=n.y,s=a+(t.centerX-a)*i,r=l+(t.centerY-l)*i,c=o.centerX-s,d=o.centerY-r;t=getElBounds(e),canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(i),translateCanvas(c,d),setTimeout((function(){canvas.style.transition=""}),550)}function fitViewToCanvas(){let e=getNodesBounds(),t=getViewBounds(),o=getCanvasBounds(),n=.8*Math.min(t.width/e.width,t.height/e.height),i=o.x,a=o.y,l=i+(e.centerX-i)*n,s=a+(e.centerY-a)*n,r=t.centerX-l,c=t.centerY-s;canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(n),translateCanvas(r,c),setTimeout((function(){canvas.style.transition=""}),550)}function setupCallouts(e){e.querySelectorAll(".callout.is-collapsible .callout-title").forEach((function(e){e.addEventListener("click",(function(){var t=this.parentElement;t.classList.toggle("is-collapsed"),e.querySelector(".callout-fold").classList.toggle("is-collapsed"),slideToggle(t.querySelector(".callout-content"),100)}))}))}function setupCheckboxes(e){e.querySelectorAll(".task-list-item-checkbox").forEach((function(e){e.addEventListener("click",(function(){var e=this.parentElement;e.classList.toggle("is-checked"),e.setAttribute("data-task",e.classList.contains("is-checked")?"x":" ")}))})),e.querySelectorAll('.plugin-tasks-list-item input[type="checkbox"]').forEach((function(e){e.checked=e.parentElement.classList.contains("is-checked")})),e.querySelectorAll(".kanban-plugin__item.is-complete").forEach((function(e){e.querySelector('input[type="checkbox"]').checked=!0}))}function setupCodeblocks(e){e.querySelectorAll(".copy-code-button").forEach((function(t){t.addEventListener("click",(function(){var t=this.parentElement.querySelector("code").textContent;navigator.clipboard.writeText(t),this.textContent="Copied!",setTimeout((function(){e.querySelectorAll(".copy-code-button").forEach((function(e){e.textContent="Copy"}))}),2e3)}))}))}function setupLinks(e){e.querySelectorAll(".internal-link, a.tag, .tree-link, .footnote-link").forEach((function(e){e.addEventListener("click",(function(t){let o=e.getAttribute("href");if(t.preventDefault(),t.stopPropagation(),!o)return void console.log("No target found for link");let n=relativePathname.split("#")[0].split("?")[0];(o.startsWith("#")||o.startsWith("?"))&&(o=n+o),loadDocument(o,!0,!e.classList.contains("tree-link"))}))}))}function setupSidebars(){rightSidebar&&leftSidebar&&(sidebarCollapseIcons[0].otherIcon=sidebarCollapseIcons[1],sidebarCollapseIcons[1].otherIcon=sidebarCollapseIcons[0],sidebarCollapseIcons[0].gutter=sidebarGutters[0],sidebarCollapseIcons[1].gutter=sidebarGutters[1],sidebarCollapseIcons[0].sidebar=sidebars[0],sidebarCollapseIcons[1].sidebar=sidebars[1],sidebarGutters[0].otherGutter=sidebarGutters[1],sidebarGutters[1].otherGutter=sidebarGutters[0],sidebarGutters[0].collapseIcon=sidebarCollapseIcons[0],sidebarGutters[1].collapseIcon=sidebarCollapseIcons[1],sidebars[0].otherSidebar=sidebars[1],sidebars[1].otherSidebar=sidebars[0],sidebars[0].gutter=sidebarGutters[0],sidebars[1].gutter=sidebarGutters[1],sidebars.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(t=!0){if(!t&&this.temporarilyCollapsed&&"large-screen"==deviceSize&&this.gutter.collapse(!0),!t&&document.body.classList.contains("floating-sidebars")){document.body.addEventListener("click",(function t(o){o.target.closest(".sidebar")||(e.collapse(!0),document.body.removeEventListener("click",t))}))}"phone"==deviceSize&&(t||e.otherSidebar.fullCollapse(!0,!0),t&&e.gutter.otherGutter.collapse(!1,!0)),"tablet"==deviceSize&&(t||e.otherSidebar.collapse(!0)),this.classList.toggle("is-collapsed",t),this.collapsed=t},e.temporaryCollapse=function(e=!0){this.temporarilyCollapsed=!0,this.collapse(!0),this.gutter.collapse(!1),this.collapsed=e},e.fullCollapse=function(e=!0,t=!1){this.collapse(e),this.gutter.collapse(!0,t),this.collapsed=e},e.toggleCollapse=function(){this.collapse(!this.collapsed)},e.toggleFullCollapse=function(){this.fullCollapse(!this.collapsed)}})),sidebarGutters.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(e,t=!1){t&&(this.classList.toggle("is-collapsed",e),this.collapsed=e)},e.toggleCollapse=function(){this.collapse(!this.collapsed)}})),sidebarCollapseIcons.forEach((function(e){e.addEventListener("click",(function(t){t.stopPropagation(),e.sidebar.toggleCollapse()}))})),isMobile()||setupSidebarResize())}function setupSidebarResize(){let e=document.querySelector(".sidebar-left .sidebar-handle"),t=document.querySelector(".sidebar-right .sidebar-handle");if(!e||!t)return;let o=null,n=15*parseFloat(getComputedStyle(e.parentElement).fontSize),i=n/4,a=localStorage.getItem("sidebar-right-width"),l=localStorage.getItem("sidebar-left-width");function s(e){if(!o)return;var t=o.classList.contains("sidebar-left")?e.clientX:window.innerWidth-e.clientX,a=`min(max(${t}px, 15em), 40vw)`;tn&&(o.style.transitionDuration="0s"))}function r(e){o=e.target.closest(".sidebar"),o.classList.add("is-resizing"),document.addEventListener("pointermove",s),document.addEventListener("pointerup",(function(){document.removeEventListener("pointermove",s);var e=getComputedStyle(o).getPropertyValue("--sidebar-width");let t=o.classList.contains("sidebar-left");localStorage.setItem(t?"sidebar-left-width":"sidebar-right-width",e),o.classList.remove("is-resizing"),o.style.removeProperty("transition-duration")}))}function c(e){let t=e.target.closest(".sidebar");if(t){t.style.removeProperty("transition-duration"),t.style.removeProperty("--sidebar-width");let e=t.classList.contains("sidebar-left");localStorage.removeItem(e?"sidebar-left-width":"sidebar-right-width")}}a&&document.querySelector(".sidebar-right").style.setProperty("--sidebar-width",a),l&&document.querySelector(".sidebar-left").style.setProperty("--sidebar-width",l),e.addEventListener("pointerdown",r),t.addEventListener("pointerdown",r),e.addEventListener("dblclick",c),t.addEventListener("dblclick",c)}function getSidebarWidthProp(){return getComputedPixelValue("--sidebar-width")}function setupThemeToggle(){function e(e,t=!1){if(themeToggle.checked=e,t){var o=document.body.style.transition;document.body.style.transition="none"}!themeToggle.classList.contains("is-checked")&&e?themeToggle.classList.add("is-checked"):themeToggle.classList.contains("is-checked")&&!e&&themeToggle.classList.remove("is-checked"),e?(document.body.classList.contains("theme-dark")&&document.body.classList.remove("theme-dark"),document.body.classList.contains("theme-light")||document.body.classList.add("theme-light")):(document.body.classList.contains("theme-light")&&document.body.classList.remove("theme-light"),document.body.classList.contains("theme-dark")||document.body.classList.add("theme-dark")),t&&setTimeout((function(){document.body.style.transition=o}),100),localStorage.setItem("theme",e?"light":"dark")}themeToggle&&(null!=localStorage.getItem("theme")&&e("light"==localStorage.getItem("theme")),document.body.classList.contains("theme-light")?e(!0):e(!1),document.querySelector(".theme-toggle-input")?.addEventListener("change",(t=>{let o=!("light"==localStorage.getItem("theme"));console.log("Theme toggle changed to: "+o),e(o)})))}let index,searchResults,flashElement=null,flashAnimation=null;function scrollIntoView(e,t,o=!0){setTreeCollapsed(e,!1,o);flashElement&&(flashElement.remove(),flashAnimation.cancel()),flashElement=document.createElement("div"),flashElement.classList.add("scroll-highlight"),e.appendChild(flashElement),t?flashElement.scrollIntoView({behavior:o?"smooth":"auto",...t}):flashElement.scrollIntoView({behavior:o?"smooth":"auto"});var n=e.style.position;e.style.position="relative",flashAnimation=flashElement.animate([{opacity:0},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:.8},{opacity:0}],{duration:1500,iterations:1,delay:300}),flashAnimation.onfinish=function(){flashElement.remove(),e.style.position=n}}function setupScroll(e){if("canvas"!=documentType)return;let t=Array.from(e.querySelectorAll(".markdown-preview-view")),o=0,n=0;t.forEach((async function(e){console.log("Setting up markdown view");let t=Array.from(e.querySelectorAll(".heading-wrapper"));e.updateVisibleWindowMarkdown=function(o=!0,i=!0){let a=e.getBoundingClientRect();n=Math.min(.1*a.height,150);let l=a.top-n,s=a.bottom+n;async function r(e){let t=e?.getBoundingClientRect();if(!t)return;let n=t.tops&&t.bottom>s;n&&o?e.hide():!n&&i&&e.show()}for(let e=0;en/3&&e.updateVisibleWindowMarkdown(!1,!0),o=e.scrollTop}))})),setInterval((async function(){t.length>0&&(t[o].updateVisibleWindowMarkdown(),o=(o+1)%t.length)}),200)}function setupExcalidraw(e){e.querySelectorAll(".excalidraw-svg svg").forEach((function(e){let t=e.querySelector("rect").getAttribute("fill")>"#7F7F7F";e.classList.add(t?"light":"dark")}))}async function setupSearch(){if(isFileProtocol)return;if(searchInput=document.querySelector('input[type="search"]'),!searchInput)return;const e=await fetch("lib/search-index.json"),t=await e.text();index=MiniSearch.loadJSON(t,{fields:["title","path","tags","headers"]});document.querySelector(".search-input-clear-button").addEventListener("click",(e=>{search("")})),searchInput.addEventListener("input",(e=>{const t=e.target.value??"";startsWithAny(t,["#","tag:","title:","name:","header:","H:"])?searchInput.style.color="var(--text-accent)":searchInput.style.color="",search(t)})),searchResults=document.createElement("div"),searchResults.setAttribute("id","search-results")}async function search(e){searchInput.value=e;let t=["title","content","tags","headers","path"];if(e.startsWith("#")&&(t=["tags","headers"]),e.startsWith("tag:")&&(e=e.substring(e.indexOf(":")+1),t=["tags"]),startsWithAny(e,["title:","name:"])&&(e=e.substring(e.indexOf(":")+1),t=["title"]),startsWithAny(e,["header:","H:"])&&(e=e.substring(e.indexOf(":")+1),t=["headers"]),startsWithAny(e,["path:"])&&(e=e.substring(e.indexOf(":")+1),t=["path"]),e.length>=1){const o=index.search(e,{prefix:!0,fuzzy:.3,boost:{title:4,headers:3,tags:2,path:1},fields:t});let n=[],i=[];for(let t of o){if((t.score<.33*o[0].score||n.length>12)&&n.length>3||t.score<.1*o[0].score)break;n.push(t.path);let a=[],l=!1;for(match in t.match){if(t.match[match].includes("headers"))for(let o of t.headers)if(o.toLowerCase().includes(match.toLowerCase())&&(a.push(o),e.toLowerCase()!=match.toLowerCase())){l=!0;break}if(l)break}i.push(a)}if(document.querySelector(".file-tree"))filterFileTree(n,i,e).then((()=>sortFileTreeDocuments(((e,t)=>{if(!e||!t)return 0;let o=getVaultRelativePath(e.firstChild.href),i=getVaultRelativePath(t.firstChild.href);return n.findIndex((e=>o.startsWith(e)))-n.findIndex((e=>i.startsWith(e)))}))));else{const t=document.createElement("div");o.slice(0,10).forEach((o=>{const n=document.createElement("div");n.classList.add("search-result");const i=document.createElement("a");i.classList.add("tree-link");const a=o.path+"?mark="+encodeURIComponent(e);i.setAttribute("href",a),i.appendChild(document.createTextNode(o.title)),n.appendChild(i),t.append(n)})),searchResults.replaceChildren(t),searchInput.parentElement.after(searchResults),initializePageEvents(searchResults)}}else searchResults&&searchResults.parentElement&&searchResults.parentNode.removeChild(searchResults),clearCurrentDocumentSearch(),fileTree&&clearFileTreeFilter().then((()=>sortFileTreeAlphabetically()))}function startsWithAny(e,t){for(let o=0;o{const o=t.nodeValue,n=o.replace(new RegExp(e,"gi"),(e=>`${e}`));if(n!==o){const e=document.createElement("div");e.innerHTML=n;Array.from(e.childNodes).forEach((e=>{e.nodeType!=Node.TEXT_NODE&&e.setAttribute("class","search-mark"),t.parentNode.insertBefore(e,t)})),t.parentNode.removeChild(t)}}));let t=document.querySelector(".search-mark");setTimeout((()=>{t&&scrollIntoView(t,{behavior:"smooth",block:"start"})}),500)}function clearCurrentDocumentSearch(){document.querySelectorAll(".search-mark").forEach((e=>{e.outerHTML=e.innerHTML}))}function getTextNodes(e){const t=[],o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);let n;for(;n=o.nextNode();)t.push(n);return t} \ No newline at end of file diff --git a/.server/lib/search-index.json b/.server/lib/search-index.json new file mode 100644 index 0000000..e7c3095 --- /dev/null +++ b/.server/lib/search-index.json @@ -0,0 +1 @@ +{"documentCount":35,"nextId":35,"documentIds":{"0":"party/alicia.html","1":"party/lyra.html","2":"party/zafira-moonchild.html","3":"lib\\scripts\\graph-wasm.wasm","4":"lib\\fonts\\94f2f163d4b698242fef.otf","5":"lib\\fonts\\72505e6a122c6acd5471.woff2","6":"lib\\fonts\\2d5198822ab091ce4305.woff2","7":"lib\\fonts\\c8ba52b05a9ef10f4758.woff2","8":"lib\\fonts\\cb10ffd7684cd9836a05.woff2","9":"lib\\fonts\\b5f0f109bc88052d4000.woff2","10":"lib\\fonts\\cbe0ae49c52c920fd563.woff2","11":"lib\\fonts\\535a6cf662596b3bd6a6.woff2","12":"lib\\fonts\\70cc7ff27245e82ad414.ttf","13":"lib\\fonts\\454577c22304619db035.ttf","14":"lib\\fonts\\52ac8f3034507f1d9e53.ttf","15":"lib\\fonts\\05b618077343fbbd92b7.ttf","16":"lib\\fonts\\4bb6ac751d1c5478ff3a.woff2","17":"lib\\media\\874d8b8e340f75575caa.svg","18":"lib\\media\\3d6c1bdc4d87cde4de67.svg","19":"lib\\html\\file-tree.html","20":"lib\\scripts\\webpage.js","21":"lib\\scripts\\graph-view.js","22":"lib\\scripts\\graph-wasm.js","23":"lib\\scripts\\graph-render-worker.js","24":"lib\\scripts\\tinycolor.js","25":"lib\\scripts\\pixi.js","26":"lib\\scripts\\minisearch.js","27":"lib\\media\\favicon.png","28":"lib\\scripts\\graph-data.js","29":"lib\\styles\\obsidian.css","30":"lib\\styles\\theme.css","31":"lib\\styles\\global-variable-styles.css","32":"lib\\styles\\supported-plugins.css","33":"lib\\styles\\main-styles.css","34":"lib\\metadata.json"},"fieldIds":{"path":0,"title":1,"content":2,"tags":3,"headers":4},"fieldLength":{"0":[3,1,40,1,1],"1":[3,1,1,1,1],"2":[4,2,2,1,2],"3":[4,2,1,1,1],"4":[4,1,1,1,1],"5":[4,1,1,1,1],"6":[4,1,1,1,1],"7":[4,1,1,1,1],"8":[4,1,1,1,1],"9":[4,1,1,1,1],"10":[4,1,1,1,1],"11":[4,1,1,1,1],"12":[4,1,1,1,1],"13":[4,1,1,1,1],"14":[4,1,1,1,1],"15":[4,1,1,1,1],"16":[4,1,1,1,1],"17":[4,1,1,1,1],"18":[4,1,1,1,1],"19":[4,2,1,1,1],"20":[4,1,1,1,1],"21":[5,2,1,1,1],"22":[5,2,1,1,1],"23":[6,3,1,1,1],"24":[4,1,1,1,1],"25":[4,1,1,1,1],"26":[4,1,1,1,1],"27":[4,1,1,1,1],"28":[5,2,1,1,1],"29":[4,1,1,1,1],"30":[4,1,1,1,1],"31":[5,3,1,1,1],"32":[5,2,1,1,1],"33":[4,2,1,1,1],"34":[3,1,1,1,1]},"averageFieldLength":[4.114285714285716,1.3428571428571427,2.142857142857143,1,1.0285714285714285],"storedFields":{"0":{"path":"party/alicia.html","title":"Alicia","tags":[],"headers":["Alicia"]},"1":{"path":"party/lyra.html","title":"Lyra","tags":[],"headers":["Lyra"]},"2":{"path":"party/zafira-moonchild.html","title":"Zafira Moonchild","tags":[],"headers":["Zafira Moonchild"]},"3":{"path":"lib\\scripts\\graph-wasm.wasm","title":"graph-wasm","tags":[],"headers":[]},"4":{"path":"lib\\fonts\\94f2f163d4b698242fef.otf","title":"94f2f163d4b698242fef","tags":[],"headers":[]},"5":{"path":"lib\\fonts\\72505e6a122c6acd5471.woff2","title":"72505e6a122c6acd5471","tags":[],"headers":[]},"6":{"path":"lib\\fonts\\2d5198822ab091ce4305.woff2","title":"2d5198822ab091ce4305","tags":[],"headers":[]},"7":{"path":"lib\\fonts\\c8ba52b05a9ef10f4758.woff2","title":"c8ba52b05a9ef10f4758","tags":[],"headers":[]},"8":{"path":"lib\\fonts\\cb10ffd7684cd9836a05.woff2","title":"cb10ffd7684cd9836a05","tags":[],"headers":[]},"9":{"path":"lib\\fonts\\b5f0f109bc88052d4000.woff2","title":"b5f0f109bc88052d4000","tags":[],"headers":[]},"10":{"path":"lib\\fonts\\cbe0ae49c52c920fd563.woff2","title":"cbe0ae49c52c920fd563","tags":[],"headers":[]},"11":{"path":"lib\\fonts\\535a6cf662596b3bd6a6.woff2","title":"535a6cf662596b3bd6a6","tags":[],"headers":[]},"12":{"path":"lib\\fonts\\70cc7ff27245e82ad414.ttf","title":"70cc7ff27245e82ad414","tags":[],"headers":[]},"13":{"path":"lib\\fonts\\454577c22304619db035.ttf","title":"454577c22304619db035","tags":[],"headers":[]},"14":{"path":"lib\\fonts\\52ac8f3034507f1d9e53.ttf","title":"52ac8f3034507f1d9e53","tags":[],"headers":[]},"15":{"path":"lib\\fonts\\05b618077343fbbd92b7.ttf","title":"05b618077343fbbd92b7","tags":[],"headers":[]},"16":{"path":"lib\\fonts\\4bb6ac751d1c5478ff3a.woff2","title":"4bb6ac751d1c5478ff3a","tags":[],"headers":[]},"17":{"path":"lib\\media\\874d8b8e340f75575caa.svg","title":"874d8b8e340f75575caa","tags":[],"headers":[]},"18":{"path":"lib\\media\\3d6c1bdc4d87cde4de67.svg","title":"3d6c1bdc4d87cde4de67","tags":[],"headers":[]},"19":{"path":"lib\\html\\file-tree.html","title":"file-tree","tags":[],"headers":[]},"20":{"path":"lib\\scripts\\webpage.js","title":"webpage","tags":[],"headers":[]},"21":{"path":"lib\\scripts\\graph-view.js","title":"graph-view","tags":[],"headers":[]},"22":{"path":"lib\\scripts\\graph-wasm.js","title":"graph-wasm","tags":[],"headers":[]},"23":{"path":"lib\\scripts\\graph-render-worker.js","title":"graph-render-worker","tags":[],"headers":[]},"24":{"path":"lib\\scripts\\tinycolor.js","title":"tinycolor","tags":[],"headers":[]},"25":{"path":"lib\\scripts\\pixi.js","title":"pixi","tags":[],"headers":[]},"26":{"path":"lib\\scripts\\minisearch.js","title":"minisearch","tags":[],"headers":[]},"27":{"path":"lib\\media\\favicon.png","title":"favicon","tags":[],"headers":[]},"28":{"path":"lib\\scripts\\graph-data.js","title":"graph-data","tags":[],"headers":[]},"29":{"path":"lib\\styles\\obsidian.css","title":"obsidian","tags":[],"headers":[]},"30":{"path":"lib\\styles\\theme.css","title":"theme","tags":[],"headers":[]},"31":{"path":"lib\\styles\\global-variable-styles.css","title":"global-variable-styles","tags":[],"headers":[]},"32":{"path":"lib\\styles\\supported-plugins.css","title":"supported-plugins","tags":[],"headers":[]},"33":{"path":"lib\\styles\\main-styles.css","title":"main-styles","tags":[],"headers":[]},"34":{"path":"lib\\metadata.json","title":"metadata","tags":[],"headers":[]}},"dirtCount":0,"index":[["variable",{"0":{"31":1},"1":{"31":1}}],["view",{"0":{"21":1},"1":{"21":1}}],["global",{"0":{"31":1},"1":{"31":1}}],["graph",{"0":{"3":1,"21":1,"22":1,"23":1,"28":1},"1":{"3":1,"21":1,"22":1,"23":1,"28":1}}],["plugins",{"0":{"32":1},"1":{"32":1}}],["png",{"0":{"27":1}}],["pixi",{"0":{"25":1},"1":{"25":1}}],["party",{"0":{"0":1,"1":1,"2":1}}],["json",{"0":{"34":1}}],["js",{"0":{"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"28":1}}],["3d6c1bdc4d87cde4de67",{"0":{"18":1},"1":{"18":1}}],["874d8b8e340f75575caa",{"0":{"17":1},"1":{"17":1}}],["4bb6ac751d1c5478ff3a",{"0":{"16":1},"1":{"16":1}}],["454577c22304619db035",{"0":{"13":1},"1":{"13":1}}],["05b618077343fbbd92b7",{"0":{"15":1},"1":{"15":1}}],["52ac8f3034507f1d9e53",{"0":{"14":1},"1":{"14":1}}],["535a6cf662596b3bd6a6",{"0":{"11":1},"1":{"11":1}}],["70cc7ff27245e82ad414",{"0":{"12":1},"1":{"12":1}}],["72505e6a122c6acd5471",{"0":{"5":1},"1":{"5":1}}],["b5f0f109bc88052d4000",{"0":{"9":1},"1":{"9":1}}],["boys",{"2":{"0":1}}],["css",{"0":{"29":1,"30":1,"31":1,"32":1,"33":1}}],["cbe0ae49c52c920fd563",{"0":{"10":1},"1":{"10":1}}],["cb10ffd7684cd9836a05",{"0":{"8":1},"1":{"8":1}}],["c8ba52b05a9ef10f4758",{"0":{"7":1},"1":{"7":1}}],["concentration",{"2":{"0":1}}],["2d5198822ab091ce4305",{"0":{"6":1},"1":{"6":1}}],["worker",{"0":{"23":1},"1":{"23":1}}],["woff2",{"0":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"16":1}}],["webpage",{"0":{"20":1},"1":{"20":1}}],["wasm",{"0":{"3":2,"22":1},"1":{"3":1,"22":1}}],["was",{"2":{"0":2}}],["obsidian",{"0":{"29":1},"1":{"29":1}}],["otf",{"0":{"4":1}}],["or",{"2":{"0":1}}],["94f2f163d4b698242fef",{"0":{"4":1},"1":{"4":1}}],["metadata",{"0":{"34":1},"1":{"34":1}}],["media",{"0":{"17":1,"18":1,"27":1}}],["main",{"0":{"33":1},"1":{"33":1}}],["minisearch",{"0":{"26":1},"1":{"26":1}}],["moonchild",{"0":{"2":1},"1":{"2":1},"2":{"2":1},"4":{"2":1}}],["much",{"2":{"0":1}}],["music",{"2":{"0":1}}],["zafira",{"0":{"2":1},"1":{"2":1},"2":{"2":1},"4":{"2":1}}],["instrument",{"2":{"0":1}}],["up",{"2":{"0":1}}],["favicon",{"0":{"27":1},"1":{"27":1}}],["file",{"0":{"19":1},"1":{"19":1}}],["find",{"2":{"0":1}}],["fonts",{"0":{"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1}}],["force",{"2":{"0":1}}],["never",{"2":{"0":1}}],["nature",{"2":{"0":1}}],["her",{"2":{"0":1}}],["html",{"0":{"0":1,"1":1,"2":1,"19":2}}],["data",{"0":{"28":1},"1":{"28":1}}],["danced",{"2":{"0":1}}],["due",{"2":{"0":1}}],["yet",{"2":{"0":1}}],["render",{"0":{"23":1},"1":{"23":1}}],["reconned",{"2":{"0":1}}],["ran",{"2":{"0":1}}],["tinycolor",{"0":{"24":1},"1":{"24":1}}],["time",{"2":{"0":1}}],["tree",{"0":{"19":1},"1":{"19":1}}],["ttf",{"0":{"12":1,"13":1,"14":1,"15":1}}],["test",{"2":{"0":1}}],["take",{"2":{"0":1}}],["to",{"2":{"0":3}}],["theme",{"0":{"30":1},"1":{"30":1}}],["the",{"2":{"0":2}}],["lib",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1}}],["lively",{"2":{"0":2}}],["lyra",{"0":{"1":1},"1":{"1":1},"2":{"1":1},"4":{"1":1}}],["loved",{"2":{"0":1}}],["supported",{"0":{"32":1},"1":{"32":1}}],["styles",{"0":{"29":1,"30":1,"31":2,"32":1,"33":2},"1":{"31":1,"33":1}}],["svg",{"0":{"17":1,"18":1}}],["scripts",{"0":{"3":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"28":1}}],["sang",{"2":{"0":1}}],["showing",{"2":{"0":1}}],["shouted",{"2":{"0":1}}],["she",{"2":{"0":7}}],["kid",{"2":{"0":1}}],["already",{"2":{"0":1}}],["alicia",{"0":{"0":1},"1":{"0":1},"2":{"0":2},"4":{"0":1}}]],"serializationVersion":2} \ No newline at end of file diff --git a/.server/lib/styles/global-variable-styles.css b/.server/lib/styles/global-variable-styles.css new file mode 100644 index 0000000..c017093 --- /dev/null +++ b/.server/lib/styles/global-variable-styles.css @@ -0,0 +1 @@ +:root body{--line-width:min(40em, calc(100vw - 2em));--line-width-adaptive:min(40em, calc(100vw - 2em));--file-line-width:min(40em, calc(100vw - 2em));--sidebar-width:min(20em, 80vw)}body{--zoom-factor:1!important;--font-text-size:16px} \ No newline at end of file diff --git a/.server/lib/styles/main-styles.css b/.server/lib/styles/main-styles.css new file mode 100644 index 0000000..b10711c --- /dev/null +++ b/.server/lib/styles/main-styles.css @@ -0,0 +1 @@ +body{--color-fade-speed:0.2s}.tree-container{position:relative;height:100%;width:auto;margin-top:3em;margin-bottom:0}.tree-container .tree-header{display:flex;flex-direction:row;align-items:center;position:absolute;top:-3em}.tree-container .tree-header .sidebar-section-header{margin-block:1em;white-space:nowrap}.tree-container:has(.tree-scroll-area:empty){display:none}body .webpage-container .tree-container .tree-scroll-area{width:100%;height:100%;max-height:100%;overflow-y:auto;border-radius:0;position:absolute;margin:0;background-color:transparent}.tree-container .tree-item{display:flex;flex-direction:column;align-items:flex-start;padding:0;padding-block:1px;overflow:hidden!important;flex:none}.tree-container .tree-item-children{padding:0;margin:0;border-left:none;width:100%}.tree-item-title>*{padding:0;margin:0;overflow:hidden;display:inline;text-overflow:ellipsis}.tree-container .tree-item-icon *{color:var(--text-muted);font-family:emoji}.tree-container .tree-item-icon :is(svg,img){-webkit-mask-image-repeat:no-repeat;-webkit-mask-image-position:center;max-width:1.3em;height:100%}.tree-container .tree-item-icon :has(svg){display:contents!important}.tree-container .tree-item-icon{min-width:1.6em;max-width:1.6em;margin-left:2px;display:flex;align-items:center;justify-content:flex-start}.tree-container .tree-item.mod-active>.tree-link>.tree-item-contents{color:var(--interactive-accent)}.tree-container .tree-link{position:relative;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;border-radius:var(--radius-s);color:var(--nav-item-color);text-decoration-line:none;width:-webkit-fill-available;width:-moz-available;width:fill-available;margin-left:var(--tree-horizontal-spacing)}.tree-container .tree-link:active{color:var(--nav-item-color-active)}.tree-container .tree-item-contents{width:100%;height:100%;margin:0!important;padding:0!important;font-size:unset!important;padding-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size))!important;border-radius:var(--radius-s);display:flex!important;flex-direction:row!important;align-items:center!important;color:var(--nav-item-color);transition:background-color .1s}.tree-container .tree-item-title{overflow:hidden;text-overflow:ellipsis!important;text-wrap:nowrap!important;white-space:nowrap!important;position:relative!important;border:none!important;width:100%;width:-webkit-fill-available;width:-moz-available;width:fill-available;background-color:transparent!important;padding-top:calc(var(--tree-vertical-spacing)/ 2)!important;padding-bottom:calc(var(--tree-vertical-spacing)/ 2)!important;margin:0!important;left:0!important;right:0!important;top:0!important;bottom:0!important}.tree-container .tree-item-title::after{right:0;position:absolute!important;margin-right:.5em!important}.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file>.tree-link>.tree-item-contents{padding-left:calc(var(--tree-horizontal-spacing) * 2)!important}.tree-container .collapse-icon{translate:calc(0px - var(--collapse-arrow-size) - var(--tree-horizontal-spacing) * 2) 0;position:absolute;height:100%;padding:var(--tree-horizontal-spacing)}.tree-container .tree-item.mod-tree-folder>.tree-link>.collapse-icon{width:100%}.collapse-icon:hover{color:var(--nav-item-color-hover)}.tree-container .clickable-icon{width:3.2em;height:2.2em}.tree-container .tree-item.is-collapsed>.tree-link>.tree-item-contents>.collapse-icon>svg{transition:transform .1s ease-in-out;transform:rotate(-90deg)}.tree-container .tree-item-contents:hover{color:var(--nav-item-color-hover)}.filtered-out{display:none!important}.tree-container>.tree-scroll-area>* .tree-item{margin-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size)/ 2)}.tree-container>.tree-scroll-area>* .tree-item{border-left:var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color)}.tree-container .tree-scroll-area>*>*>.tree-item{margin-left:calc(var(--tree-horizontal-spacing) + var(--collapse-arrow-size)/ 2)}.tree-container:not(.mod-nav-indicator) .tree-scroll-area .tree-item{border-color:transparent!important}.tree-container .tree-item.mod-active{border-color:var(--interactive-accent)!important;box-shadow:2px 0 0 0 var(--interactive-accent) inset;transition:box-shadow .4s ease-in-out}.tree-container .tree-item:hover:not(.mod-active):not(.mod-collapsible):not(:has(.tree-item:hover)):not(.mod-root > * > *){border-left:var(--nav-indentation-guide-width) solid var(--nav-item-color-hover)}.tree-container .mod-active>.tree-link,.tree-container .tree-link:hover{background-color:var(--nav-item-background-hover);cursor:pointer}.webpage-container .tree-container .tree-item:not(.mod-collapsible)>.tree-item-children>.tree-item>.tree-link,.webpage-container .tree-container>.tree-scroll-area>.tree-item>.tree-link{margin-left:0!important}.tree-container.outline-tree .tree-item[data-depth='1']>.tree-link>.tree-item-contents{font-weight:900;font-size:1.1em;margin-left:0;padding-left:1em}.nav-folder.mod-root .nav-folder>.nav-folder-children{padding:0!important;margin:0!important;border:none!important}.nav-file{border-radius:0!important}.nav-folder.mod-root .nav-folder>.nav-folder-children{border-radius:var(--radius-s)!important}.webpage-container .nav-file-tag{margin-right:1em}.nav-file-title-content,.nav-folder-title-content{margin-bottom:unset!important;display:unset!important;border-radius:unset!important;cursor:unset!important;font-size:unset!important;font-weight:unset!important;line-height:unset!important;padding:unset!important}#webpage-icon :is(svg,img){width:100%;height:100%;box-shadow:none!important;border:none!important;border-radius:0!important;stroke:currentColor}#webpage-icon :has(:is(svg,img)){display:contents!important}#webpage-icon:has(:is(svg,img)){font-size:40px;width:40px;height:40px}#webpage-icon{font-size:40px;margin-bottom:8px;font-family:emoji;width:fit-content}body.show-inline-title .page-title{font-weight:var(--inline-title-weight);font-size:var(--inline-title-size);font-style:var(--inline-title-style);font-variant:var(--inline-title-variant);font-family:var(--inline-title-font);letter-spacing:-.015em;color:var(--inline-title-color)}.heading{position:relative}.heading-wrapper.is-collapsed>.heading::after{content:"..."!important;display:inline-block!important;position:absolute!important;margin:0!important;padding:0!important;margin-left:.3em!important;color:var(--text-muted)}.heading-wrapper{transition:height ease-in-out,margin-bottom ease-in-out;transition-duration:.2s;display:flex;flex-direction:column;position:relative}html>body>.webpage-container>.document-container>.markdown-preview-view>.markdown-preview-sizer>div{margin-inline:0!important;margin:0!important;padding:0!important;width:100%;max-width:100%}.markdown-rendered .heading-wrapper:has(> .heading-children > div:last-child > :is(p,pre,table,ul,ol))+.heading-wrapper>.heading:first-child{margin-top:var(--heading-spacing)}.heading-children{transition:height ease-in-out,margin-bottom ease-in-out;transition-duration:.2s;display:flow;position:relative;contain:inline-size}.heading-children.is-collapsed{padding-top:0}.heading-wrapper.is-animating>.heading-children,.heading-wrapper.is-collapsed>.heading-children{overflow:hidden;overflow:clip}.heading-wrapper>.heading>.heading-after{display:none}.heading-wrapper.is-collapsed>.heading>.heading-after{display:inline-block;margin-left:.3em;opacity:.4;font-size:1em;cursor:auto;user-select:none}.heading-wrapper.is-hidden>*{display:none}.heading-wrapper.is-hidden{visibility:hidden}.collapse-icon:not(.list-collapse-indicator) svg.svg-icon{color:var(--nav-collapse-icon-color);width:var(--collapse-arrow-size);height:var(--collapse-arrow-size);transition:transform .1s ease-in-out 0s;stroke-width:4px;min-width:10px;min-height:10px}div.is-collapsed>*>.heading-collapse-indicator.collapse-icon>svg{transition:transform .1s ease-in-out;transform:rotate(-90deg)}.heading-wrapper .heading-collapse-indicator{opacity:0;transition:opacity .15s ease-in-out;position:absolute;z-index:1;padding:0!important;padding-left:40px!important;padding-right:40px!important;left:-40px!important}.heading-wrapper .heading-collapse-indicator:hover,.heading:hover>.heading-collapse-indicator{opacity:1}.heading-wrapper-span{position:absolute;width:200vw;height:calc(100% + var(--p-spacing) * 2);top:calc(0px - var(--p-spacing));left:-100vw;z-index:-1}.markdown-embed .markdown-embed-content .markdown-preview-view .heading-wrapper-span{width:100%}.theme-toggle-container{--toggle-width:3.5em;--toggle-height:1.75em;--border-radius:calc(var(--toggle-height) / 2);--handle-width:calc(var(--toggle-height) * 0.65);--handle-radius:calc(var(--handle-width) / 2);--handle-margin:calc((var(--toggle-height) / 2.0) - var(--handle-radius));--handle-translation:calc(var(--toggle-width) - var(--handle-width) - (var(--handle-margin) * 2));display:inline-block;cursor:pointer}.clickable-icon,.sidebar-section-header{transition:color var(--color-fade-speed) ease-in-out}@keyframes toggle-slide-right{0%{width:var(--handle-width);transform:translateX(0)}50%{width:calc(var(--toggle-width) * .5)}90%{width:var(--handle-width)}100%{transform:translateX(var(--handle-translation))}}@keyframes toggle-slide-left{0%{width:var(--handle-width);transform:translateX(calc(var(--handle-translation) - ((var(--toggle-width) * .33) - var(--handle-width))))}70%{width:calc(var(--toggle-width) * .5)}100%{width:var(--handle-width);transform:translateX(0)}}@keyframes toggle-expand-right{0%{width:var(--handle-width)}100%{width:calc(var(--toggle-width) * .33)}}@keyframes toggle-expand-left{0%{width:var(--handle-width);transform:translateX(var(--handle-translation))}100%{width:calc(var(--toggle-width) * .33);transform:translateX(calc(var(--handle-translation) - ((var(--toggle-width) * .33) - var(--handle-width))))}}@keyframes toggle-contract{0%{width:calc(var(--toggle-width) * .33)}100%{width:var(--handle-width)}}.theme-toggle-input{display:none;z-index:1000}.toggle-background{position:relative;width:var(--toggle-width);height:var(--toggle-height);border-radius:var(--border-radius);background-color:var(--background-modifier-border);transition:background-color var(--color-fade-speed);z-index:1000;animation-duration:.2s}.toggle-background::before{content:"";position:absolute;left:var(--handle-margin);top:var(--handle-margin);height:var(--handle-width);width:var(--handle-width);border-radius:var(--handle-radius);background-color:var(--text-normal);box-shadow:inset 0 1px 1px rgba(0,0,0,.2);animation:toggle-slide-left ease-in-out normal both;animation-duration:inherit;z-index:1000}.theme-toggle-input:checked~.toggle-background::before{animation:toggle-slide-right ease-in-out normal both;animation-duration:inherit}.theme-toggle-input:active~.toggle-background::before{animation:toggle-expand-right ease-in-out normal both;animation-duration:inherit}.theme-toggle-input:active:checked~.toggle-background::before{animation:toggle-expand-left ease-in-out normal both;animation-duration:inherit}.toggle-background::after{content:"";position:absolute;right:var(--handle-margin);top:calc(var(--handle-margin));height:var(--handle-width);width:var(--handle-width);transition:transform .3s;background:url('data:image/svg+xml,') no-repeat center center;transform:scale(.9)}.theme-toggle-input:checked~.toggle-background::after{transform:translateX(calc(var(--handle-translation) * -1)) scale(.9);background:url('data:image/svg+xml,') no-repeat center center}.graph-view-wrapper{--graph-view-max-height:35vh}#graph-canvas{width:100%;height:100%;aspect-ratio:1;transition:opacity .2s ease-in-out}.graph-view-container.expanded{position:fixed;width:90%;height:90%;max-height:unset;right:5%;top:5%;background-color:var(--background-secondary);z-index:100}body:is(.is-phone,.is-tablet) .graph-view-container.expanded{width:95%;height:95%;right:2.5%;top:2.5%}.graph-view-container{position:relative;width:100%;aspect-ratio:1;max-height:var(--graph-view-max-height);display:flex;transition:background-color var(--color-fade-speed) ease-in-out;touch-action:none;border:1px solid var(--modal-border-color);border-radius:var(--modal-radius);overflow:hidden}.graph-icon{cursor:pointer;color:var(--text-muted)}.graph-view-container .graph-icon>svg{width:24px;height:24px;background-color:var(--color-base-00);outline-width:6px;outline-color:var(--color-base-00);outline-offset:-1px;outline-style:solid;border-radius:100px;margin:10px;transition:outline-color,background-color;transition-timing-function:ease-in-out;transition-duration:var(--color-fade-speed)}.graph-view-placeholder{padding:0;width:100%;aspect-ratio:1;max-height:var(--graph-view-max-height);position:relative;flex:none}.graph-view-placeholder:has(.expanded){border-radius:var(--modal-radius);border:1px solid var(--modal-border-color)}.scale-down{transition:transform .2s ease-in-out;transform:scale(.9)}.scale-up{transition:transform .2s ease-in-out;transform:scale(1)}.graph-expand{position:absolute;top:5px;right:5px}body :is(.canvas-node-container,.canvas-wrapper){cursor:unset!important}.canvas{translate:0 0;scale:1 1;will-change:translate,scale}.canvas-controls{display:none;cursor:default!important}.canvas-card-menu{display:none;cursor:default!important}.canvas-node-content-blocker{pointer-events:none}body.is-phone .sidebar{font-size:1.15em;--tree-vertical-spacing:0.9em;--sidebar-width:85vw!important}body.is-phone{--collapse-arrow-size:13px;--tree-vertical-spacing:0.8em;--tree-horizontal-spacing:0.5em}body.is-phone .heading-wrapper .heading-collapse-indicator{transition:transform .2s ease-in-out .2s}.loading-icon{--width:80px;--height:80px;display:inline-block;position:fixed;left:calc(50% - var(--width)/ 2);top:calc(50% - var(--height)/ 2);width:var(--width);height:var(--height);opacity:0;transition:opacity .5s ease-in-out;pointer-events:none}.loading-icon.show{opacity:1}.loading-icon div{position:absolute;top:33px;width:13px;height:13px;border-radius:50%;background:var(--interactive-accent);animation-timing-function:cubic-bezier(0,1,1,0)}.loading-icon div:first-child{left:8px;animation:lds-ellipsis1 .6s infinite}.loading-icon div:nth-child(2){left:8px;animation:lds-ellipsis2 .6s infinite}.loading-icon div:nth-child(3){left:32px;animation:lds-ellipsis2 .6s infinite}.loading-icon div:nth-child(4){left:56px;animation:lds-ellipsis3 .6s infinite}.loading-icon:not(.show) div{animation-play-state:paused}@keyframes lds-ellipsis1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes lds-ellipsis2{0%{transform:translate(0,0)}100%{transform:translate(24px,0)}}@media print{body .webpage-container .document-container *{overflow:visible!important;overflow-y:visible!important;overflow-x:visible!important}html body.publish :is(.sidebar,script,style,include){display:none!important}:root,html body.publish>:is(.webpage-container,.document-container,.markdown-preview-view):not(script,style,include){display:contents!important}:root,html body.publish .document-container>.markdown-preview-view{background-color:transparent!important}body{display:inline!important;background:var(--background-primary)}.document-container>.markdown-preview-view>.markdown-preview-sizer{padding:0!important;margin:0!important;padding:var(--file-margins)!important;padding-bottom:0!important}html body.publish :is(.document-container,.markdown-preview-view){margin:0!important;padding:0!important}}.tree-hint-label{font-size:var(--font-smallest);color:var(--text-accent);width:100%;width:-webkit-fill-available;width:-moz-available;width:fill-available;white-space:pre-wrap;text-decoration-line:none}.tree-hint-label:hover{text-decoration-line:underline}.tree-hint-container{width:100%;padding-left:calc(var(--tree-horizontal-spacing) * 2 + var(--collapse-arrow-size));padding-bottom:calc(var(--tree-vertical-spacing)/ 2);display:flex;flex-direction:column}.tree-container .mod-tree-folder:not(:has(.mod-tree-folder)) .mod-tree-file>.tree-link>.tree-hint-container{padding-left:calc(var(--tree-horizontal-spacing) * 2)}.tree-item-contents:has(.tree-item-icon)+.tree-hint-container{margin-left:calc(1.6em + 2px)}a.tree-hint-label:hover{text-decoration-line:underline}.search-mark{margin:0!important;padding:0!important;scroll-margin:2em!important}.search-input-container:has(+ #search-results)>input[type=search]{border-bottom-left-radius:0;border-bottom-right-radius:0}input[type=search]{box-shadow:none!important;height:2.5em;font-size:1em;transition:background,background-color,border;transition-duration:var(--color-fade-speed);transition-timing-function:ease-in-out}.search-input-container{width:100%!important}.search-input-container::before{mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;top:50%;transform:translateY(-50%)}.sidebar .sidebar-handle:hover~.sidebar-content,.sidebar.is-resizing .sidebar-content{box-shadow:0 0 0 var(--divider-width-hover) var(--divider-color-hover)}.sidebar-handle{width:min(max(calc(var(--sidebar-margin)/ 2),3px),12px);height:calc(100vh - 2 * var(--radius-l));margin-top:var(--radius-l);margin-bottom:var(--radius-l);top:0;position:absolute;cursor:ew-resize;z-index:1;transition:background-color .2s ease-in-out}.sidebar-left .sidebar-handle{right:0}.sidebar-right .sidebar-handle{left:0}.nav-folder-children .nav-folder-title-content::before{margin-right:.5em}.tree-item::before{margin-left:calc(var(--tree-horizontal-spacing) - .3em)}.tree-item-contents:has(.tree-item-icon) .tree-item-title::before,.tree-item-contents:has(.tree-item-icon)::before,.tree-item:has(.tree-item-contents > .tree-item-icon)::before{display:none!important}.anp-simple-rainbow-color-toggle.anp-simple-rainbow-indentation-toggle .tree-container.file-tree .tree-item{border-color:rgba(var(--rainbow-folder-color),.5)}.anp-collapse-folders .tree-container .tree-item .collapse-icon{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M6 14l1.45-2.9A2 2 0 0 1 9.24 10H22a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background-color:currentColor;display:flex;flex-basis:100%;height:16px;width:17px}.anp-collapse-folders .tree-container .tree-item.is-collapsed .collapse-icon{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 24' fill='none' stroke='currentColor' stroke-linejoin='round' stroke-linecap='round' stroke-width='2'%3E%3Cpath d='M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z'/%3E%3Cpath d='M2 10h20' /%3E%3C/svg%3E%0A")}.anp-file-icons .nav-file .nav-file-title::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background-color:currentColor;content:"";display:flex;flex-shrink:0;height:var(--size-4-4);margin-left:calc(-1 * var(--size-4-5));opacity:var(--icon-opacity);position:absolute;width:var(--size-4-4)}.anp-collapse-folders .tree-container .tree-item .collapse-icon:hover{color:currentColor}.anp-collapse-folders .tree-container .tree-item .collapse-icon svg{display:none}.document-container .kanban-plugin{position:absolute;padding:0;margin:0;height:100%}.document-container .kanban-plugin{font-family:var(--font-text, var(--default-font));font-size:.875rem;line-height:var(--line-height-tight);width:unset;overflow-y:unset;overflow-wrap:unset;color:unset;user-select:unset;-webkit-user-select:unset}.document-container .kanban-plugin__item-button-wrapper,.kanban-plugin__item-postfix-button.clickable-icon,.kanban-plugin__lane-grip,.kanban-plugin__lane-settings-button.clickable-icon{display:none}.excalidraw-plugin rect,.excalidraw-svg rect{fill:transparent}body.theme-dark .excalidraw-plugin svg.dark,body.theme-dark .excalidraw-svg svg.dark,body.theme-light .excalidraw-plugin svg.light,body.theme-light .excalidraw-svg svg.light{filter:invert(93%) hue-rotate(180deg)}.excalidraw-plugin>svg{width:100%;height:100%}.excalidraw-plugin{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%;padding:10px}.columnParent{display:flex;padding:15px 20px;flex-wrap:wrap;gap:20px}.columnParent{white-space:normal}.columnChild{flex-grow:1;flex-basis:0px}.obsidian-banner .lock-button{display:none}.markdown-preview-view:has(.obsidian-banner-wrapper){padding-top:0!important}.view-content:has(.mm-mindmap){overflow-y:none}.view-content .mm-mindmap{transform:scale(1);translate:-4000px -4000px;top:70%;left:50%;position:absolute;overflow:hidden;width:100vw} \ No newline at end of file diff --git a/.server/lib/styles/obsidian.css b/.server/lib/styles/obsidian.css new file mode 100644 index 0000000..ce11936 --- /dev/null +++ b/.server/lib/styles/obsidian.css @@ -0,0 +1 @@ +:root{--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}:root{--annotation-unfocused-field-background:url("data:image/svg+xml; charset=UTF-8,");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}:root{--xfa-unfocused-field-background:url("data:image/svg+xml; charset=UTF-8,");--xfa-focus-outline:auto}:root{--viewer-container-height:0;--pdfViewer-padding-bottom:0;--page-margin:1px auto -8px;--page-border:9px solid transparent;--spreadHorizontalWrapped-margin-LR:-3.5px;--loading-icon-delay:400ms}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%,-100%)}[data-main-rotation="270"]{transform:rotate(270deg) translateX(-100%)}.hiddenCopyElement{position:absolute;top:0;left:0;width:0;height:0;display:none}.spread{margin-left:3.5px;margin-right:3.5px;text-align:center}.spread{white-space:nowrap}.spread .dummyPage,.spread .page{display:inline-block;vertical-align:middle}body{--anim-duration-none:0;--anim-duration-superfast:70ms;--anim-duration-fast:140ms;--anim-duration-moderate:300ms;--anim-duration-slow:560ms;--anim-motion-smooth:cubic-bezier(0.45, 0.05, 0.55, 0.95);--anim-motion-delay:cubic-bezier(0.65, 0.05, 0.36, 1);--anim-motion-jumpy:cubic-bezier(0.68, -0.55, 0.27, 1.55);--anim-motion-swing:cubic-bezier(0, 0.55, 0.45, 1);--blockquote-border-thickness:2px;--blockquote-border-color:var(--interactive-accent);--blockquote-font-style:normal;--blockquote-color:inherit;--blockquote-background-color:transparent;--bold-modifier:200;--bold-color:inherit;--bold-weight:calc(var(--font-weight) + var(--bold-modifier));--border-width:1px;--button-radius:var(--input-radius);--callout-border-width:0px;--callout-border-opacity:0.25;--callout-padding:var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6);--callout-radius:var(--radius-s);--callout-blend-mode:var(--highlight-mix-blend-mode);--callout-title-color:inherit;--callout-title-padding:0;--callout-title-size:inherit;--callout-title-weight:calc(var(--font-weight) + var(--bold-modifier));--callout-content-padding:0;--callout-content-background:transparent;--callout-bug:var(--color-red-rgb);--callout-default:var(--color-blue-rgb);--callout-error:var(--color-red-rgb);--callout-example:var(--color-purple-rgb);--callout-fail:var(--color-red-rgb);--callout-important:var(--color-cyan-rgb);--callout-info:var(--color-blue-rgb);--callout-question:var(--color-orange-rgb);--callout-success:var(--color-green-rgb);--callout-summary:var(--color-cyan-rgb);--callout-tip:var(--color-cyan-rgb);--callout-todo:var(--color-blue-rgb);--callout-warning:var(--color-orange-rgb);--callout-quote:158,158,158;--canvas-background:var(--background-primary);--canvas-card-label-color:var(--text-faint);--canvas-color-1:var(--color-red-rgb);--canvas-color-2:var(--color-orange-rgb);--canvas-color-3:var(--color-yellow-rgb);--canvas-color-4:var(--color-green-rgb);--canvas-color-5:var(--color-cyan-rgb);--canvas-color-6:var(--color-purple-rgb);--canvas-dot-pattern:var(--color-base-30);--caret-color:var(--text-normal);--checkbox-radius:var(--radius-s);--checkbox-size:var(--font-text-size);--checkbox-marker-color:var(--background-primary);--checkbox-color:var(--interactive-accent);--checkbox-color-hover:var(--interactive-accent-hover);--checkbox-border-color:var(--text-faint);--checkbox-border-color-hover:var(--text-muted);--checkbox-margin-inline-start:0.85em;--checklist-done-decoration:line-through;--checklist-done-color:var(--text-muted);--code-white-space:pre-wrap;--code-radius:var(--radius-s);--code-size:var(--font-smaller);--code-background:var(--background-primary-alt);--code-normal:var(--text-muted);--code-comment:var(--text-faint);--code-function:var(--color-yellow);--code-important:var(--color-orange);--code-keyword:var(--color-pink);--code-operator:var(--color-red);--code-property:var(--color-cyan);--code-punctuation:var(--text-muted);--code-string:var(--color-green);--code-tag:var(--color-red);--code-value:var(--color-purple);--collapse-icon-color:var(--text-faint);--collapse-icon-color-collapsed:var(--text-accent);--cursor:default;--cursor-link:pointer;--dialog-width:560px;--dialog-max-width:80vw;--dialog-max-height:85vh;--divider-color:var(--background-modifier-border);--divider-color-hover:var(--interactive-accent);--divider-width:1px;--divider-width-hover:3px;--divider-vertical-height:calc(100% - var(--header-height));--drag-ghost-background:rgba(0, 0, 0, 0.85);--drag-ghost-text-color:#fff;--dropdown-background:var(--interactive-normal);--dropdown-background-blend-mode:hard-light;--dropdown-background-hover:var(--interactive-hover);--dropdown-background-position:right 0.5em top 50%,0 0;--dropdown-background-size:1em auto,100%;--dropdown-padding:0 1.9em 0 0.8em;--embed-max-height:4000px;--embed-canvas-max-height:400px;--embed-background:inherit;--embed-border-start:2px solid var(--interactive-accent);--embed-border-end:none;--embed-border-top:none;--embed-border-bottom:none;--embed-padding:0 0 0 var(--size-4-6);--embed-font-style:inherit;--embed-block-shadow-hover:0 0 0 1px var(--background-modifier-border),inset 0 0 0 1px var(--background-modifier-border);--file-line-width:700px;--file-folding-offset:24px;--file-margins:var(--size-4-8);--file-header-font-size:var(--font-ui-small);--file-header-font-weight:400;--file-header-border:var(--border-width) solid transparent;--file-header-justify:center;--font-smallest:0.8em;--font-smaller:0.875em;--font-small:0.933em;--font-ui-smaller:12px;--font-ui-small:13px;--font-ui-medium:15px;--font-ui-large:20px;--font-weight:var(--font-normal);--font-thin:100;--font-extralight:200;--font-light:300;--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:700;--font-extrabold:800;--font-black:900;--footnote-size:var(--font-smaller);--graph-controls-width:240px;--graph-text:var(--text-normal);--graph-line:var(--color-base-35, var(--background-modifier-border-focus));--graph-node:var(--text-muted);--graph-node-unresolved:var(--text-faint);--graph-node-focused:var(--text-accent);--graph-node-tag:var(--color-green);--graph-node-attachment:var(--color-yellow);--heading-formatting:var(--text-faint);--heading-spacing:calc(var(--p-spacing) * 2.5);--h1-color:inherit;--h2-color:inherit;--h3-color:inherit;--h4-color:inherit;--h5-color:inherit;--h6-color:inherit;--h1-font:inherit;--h2-font:inherit;--h3-font:inherit;--h4-font:inherit;--h5-font:inherit;--h6-font:inherit;--h1-line-height:1.2;--h2-line-height:1.2;--h3-line-height:1.3;--h4-line-height:1.4;--h5-line-height:var(--line-height-normal);--h6-line-height:var(--line-height-normal);--h1-size:1.802em;--h2-size:1.602em;--h3-size:1.424em;--h4-size:1.266em;--h5-size:1.125em;--h6-size:1em;--h1-style:normal;--h2-style:normal;--h3-style:normal;--h4-style:normal;--h5-style:normal;--h6-style:normal;--h1-variant:normal;--h2-variant:normal;--h3-variant:normal;--h4-variant:normal;--h5-variant:normal;--h6-variant:normal;--h1-weight:700;--h2-weight:600;--h3-weight:600;--h4-weight:600;--h5-weight:600;--h6-weight:600;--header-height:40px;--hr-color:var(--background-modifier-border);--hr-thickness:2px;--icon-size:var(--icon-m);--icon-stroke:var(--icon-m-stroke-width);--icon-xs:14px;--icon-s:16px;--icon-m:18px;--icon-l:18px;--icon-xl:32px;--icon-xs-stroke-width:2px;--icon-s-stroke-width:2px;--icon-m-stroke-width:1.75px;--icon-l-stroke-width:1.75px;--icon-xl-stroke-width:1.25px;--icon-color:var(--text-muted);--icon-color-hover:var(--text-muted);--icon-color-active:var(--text-accent);--icon-color-focused:var(--text-normal);--icon-opacity:0.85;--icon-opacity-hover:1;--icon-opacity-active:1;--clickable-icon-radius:var(--radius-s);--indentation-guide-width:1px;--indentation-guide-width-active:1px;--indentation-guide-color:rgba(var(--mono-rgb-100), 0.12);--indentation-guide-color-active:rgba(var(--mono-rgb-100), 0.3);--indentation-guide-editing-indent:0.85em;--indentation-guide-reading-indent:-0.85em;--indentation-guide-source-indent:0.25em;--inline-title-color:var(--h1-color);--inline-title-font:var(--h1-font);--inline-title-line-height:var(--h1-line-height);--inline-title-size:var(--h1-size);--inline-title-style:var(--h1-style);--inline-title-variant:var(--h1-variant);--inline-title-weight:var(--h1-weight);--inline-title-margin-bottom:0.5em;--input-height:30px;--input-radius:5px;--input-font-weight:var(--font-normal);--input-border-width:1px;--italic-color:inherit;--italic-weight:inherit;--layer-cover:5;--layer-sidedock:10;--layer-status-bar:15;--layer-popover:30;--layer-slides:45;--layer-modal:50;--layer-notice:60;--layer-menu:65;--layer-tooltip:70;--layer-dragged-item:80;--line-height-normal:1.5;--line-height-tight:1.3;--link-color:var(--text-accent);--link-color-hover:var(--text-accent-hover);--link-decoration:underline;--link-decoration-hover:underline;--link-decoration-thickness:auto;--link-weight:var(--font-weight);--link-external-color:var(--text-accent);--link-external-color-hover:var(--text-accent-hover);--link-external-decoration:underline;--link-external-decoration-hover:underline;--link-external-filter:none;--link-unresolved-color:var(--text-accent);--link-unresolved-opacity:0.7;--link-unresolved-filter:none;--link-unresolved-decoration-style:solid;--link-unresolved-decoration-color:hsla(var(--interactive-accent-hsl), 0.3);--list-indent:2.25em;--list-indent-editing:0.75em;--list-indent-source:0;--list-spacing:0.075em;--list-marker-color:var(--text-faint);--list-marker-color-hover:var(--text-muted);--list-marker-color-collapsed:var(--text-accent);--list-bullet-border:none;--list-bullet-radius:50%;--list-bullet-size:0.3em;--list-bullet-transform:none;--list-numbered-style:decimal;--list-bullet-end-padding:1.3rem;--nav-item-size:var(--font-ui-small);--nav-item-color:var(--text-muted);--nav-item-color-hover:var(--text-normal);--nav-item-color-active:var(--text-normal);--nav-item-color-selected:var(--text-normal);--nav-item-color-highlighted:var(--text-accent);--nav-item-background-hover:var(--background-modifier-hover);--nav-item-background-active:var(--background-modifier-hover);--nav-item-background-selected:hsla(var(--color-accent-hsl), 0.15);--nav-item-padding:var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-6);--nav-item-parent-padding:var(--nav-item-padding);--nav-item-children-padding-start:var(--size-2-2);--nav-item-children-margin-start:var(--size-4-3);--nav-item-weight:inherit;--nav-item-weight-hover:inherit;--nav-item-weight-active:inherit;--nav-item-white-space:pre;--nav-indentation-guide-width:var(--indentation-guide-width);--nav-indentation-guide-color:var(--indentation-guide-color);--nav-collapse-icon-color:var(--collapse-icon-color);--nav-collapse-icon-color-collapsed:var(--text-faint);--nav-heading-color:var(--text-normal);--nav-heading-color-hover:var(--text-normal);--nav-heading-color-collapsed:var(--text-faint);--nav-heading-color-collapsed-hover:var(--text-muted);--nav-heading-weight:var(--font-medium);--nav-heading-weight-hover:var(--font-medium);--metadata-background:transparent;--metadata-display-reading:block;--metadata-display-editing:block;--metadata-max-width:none;--metadata-padding:var(--size-4-2) 0;--metadata-border-color:var(--background-modifier-border);--metadata-border-radius:0;--metadata-border-width:0;--metadata-divider-color:var(--background-modifier-border);--metadata-divider-color-hover:transparent;--metadata-divider-color-focus:transparent;--metadata-divider-width:0;--metadata-gap:3px;--metadata-property-padding:0;--metadata-property-radius:6px;--metadata-property-radius-hover:6px;--metadata-property-radius-focus:6px;--metadata-property-background:transparent;--metadata-property-background-hover:transparent;--metadata-property-background-active:var(--background-modifier-hover);--metadata-label-background-hover:transparent;--metadata-label-background-active:var(--background-modifier-hover);--metadata-label-font-size:var(--font-smaller);--metadata-label-font-weight:inherit;--metadata-label-text-color:var(--text-muted);--metadata-label-text-color-hover:var(--text-muted);--metadata-label-width:9em;--metadata-input-height:calc(var(--font-text-size) * 1.75);--metadata-input-text-color:var(--text-normal);--metadata-input-font-size:var(--font-smaller);--metadata-input-background:transparent;--metadata-input-background-hover:transparent;--metadata-input-background-active:var(--background-modifier-hover);--metadata-sidebar-label-font-size:var(--font-ui-small);--metadata-sidebar-input-font-size:var(--font-ui-small);--modal-background:var(--background-primary);--modal-width:90vw;--modal-height:85vh;--modal-max-width:1100px;--modal-max-height:1000px;--modal-max-width-narrow:800px;--modal-border-width:var(--border-width);--modal-border-color:var(--color-base-40, var(--background-modifier-border-focus));--modal-radius:var(--radius-l);--modal-community-sidebar-width:280px;--pill-color:var(--text-muted);--pill-color-hover:var(--text-normal);--pill-color-remove:var(--text-faint);--pill-color-remove-hover:var(--text-accent);--pill-decoration:none;--pill-decoration-hover:none;--pill-background:transparent;--pill-background-hover:transparent;--pill-border-color:var(--background-modifier-border);--pill-border-color-hover:var(--background-modifier-border-hover);--pill-border-width:var(--border-width);--pill-padding-x:0.65em;--pill-padding-y:0.25em;--pill-radius:2em;--pill-weight:inherit;--p-spacing:1rem;--p-spacing-empty:0rem;--pdf-background:var(--background-primary);--pdf-page-background:var(--background-primary);--pdf-shadow:0 0 0 1px rgba(0, 0, 0, 0.05),0 2px 8px rgba(0, 0, 0, 0.1);--pdf-spread-shadow:0 0 0 1px rgba(0, 0, 0, 0.05);--pdf-sidebar-background:var(--background-primary);--pdf-thumbnail-shadow:0 0 0 1px rgba(0, 0, 0, 0.15),0 2px 8px rgba(0, 0, 0, 0.2);--popover-width:450px;--popover-height:400px;--popover-max-height:95vh;--popover-pdf-width:450px;--popover-pdf-height:400px;--popover-font-size:var(--font-text-size);--prompt-input-height:40px;--prompt-width:700px;--prompt-max-width:80vw;--prompt-max-height:70vh;--prompt-border-width:var(--border-width);--prompt-border-color:var(--color-base-40, var(--background-modifier-border-focus));--radius-s:4px;--radius-m:8px;--radius-l:12px;--radius-xl:16px;--ribbon-background:var(--background-secondary);--ribbon-background-collapsed:var(--background-primary);--ribbon-width:44px;--ribbon-padding:var(--size-4-2) var(--size-4-1) var(--size-4-3);--scrollbar-active-thumb-bg:rgba(var(--mono-rgb-100), 0.2);--scrollbar-bg:rgba(var(--mono-rgb-100), 0.05);--scrollbar-thumb-bg:rgba(var(--mono-rgb-100), 0.1);--search-clear-button-color:var(--text-muted);--search-clear-button-size:13px;--search-icon-color:var(--text-muted);--search-icon-size:18px;--search-result-background:var(--background-primary);--size-2-1:2px;--size-2-2:4px;--size-2-3:6px;--size-4-1:4px;--size-4-2:8px;--size-4-3:12px;--size-4-4:16px;--size-4-5:20px;--size-4-6:24px;--size-4-8:32px;--size-4-9:36px;--size-4-10:40px;--size-4-12:48px;--size-4-16:64px;--size-4-18:72px;--sidebar-markdown-font-size:calc(var(--font-text-size) * 0.9);--sidebar-tab-text-display:none;--slider-thumb-border-width:1px;--slider-thumb-border-color:var(--background-modifier-border-hover);--slider-thumb-height:18px;--slider-thumb-width:18px;--slider-thumb-y:-6px;--slider-thumb-radius:50%;--slider-s-thumb-size:15px;--slider-s-thumb-position:-5px;--slider-track-background:var(--background-modifier-border);--slider-track-height:3px;--status-bar-background:var(--background-secondary);--status-bar-border-color:var(--divider-color);--status-bar-border-width:1px 0 0 1px;--status-bar-font-size:var(--font-ui-smaller);--status-bar-text-color:var(--text-muted);--status-bar-position:fixed;--status-bar-radius:var(--radius-m) 0 0 0;--status-bar-scroll-padding:calc(var(--status-bar-font-size) + 18px);--sync-avatar-color-current-user:transparent;--sync-avatar-color-1:var(--color-red);--sync-avatar-color-2:var(--color-orange);--sync-avatar-color-3:var(--color-yellow);--sync-avatar-color-4:var(--color-green);--sync-avatar-color-5:var(--color-cyan);--sync-avatar-color-6:var(--color-blue);--sync-avatar-color-7:var(--color-purple);--sync-avatar-color-8:var(--color-pink);--swatch-radius:14px;--swatch-height:24px;--swatch-width:24px;--swatch-shadow:inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15);--tab-background-active:var(--background-primary);--tab-text-color:var(--text-faint);--tab-text-color-active:var(--text-muted);--tab-text-color-focused:var(--text-muted);--tab-text-color-focused-active:var(--text-muted);--tab-text-color-focused-highlighted:var(--text-accent);--tab-text-color-focused-active-current:var(--text-normal);--tab-font-size:var(--font-ui-small);--tab-font-weight:inherit;--tab-container-background:var(--background-secondary);--tab-divider-color:var(--background-modifier-border-hover);--tab-outline-color:var(--divider-color);--tab-outline-width:1px;--tab-curve:6px;--tab-radius:var(--radius-s);--tab-radius-active:6px 6px 0 0;--tab-width:200px;--tab-max-width:320px;--tab-stacked-pane-width:700px;--tab-stacked-header-width:var(--header-height);--tab-stacked-font-size:var(--font-ui-small);--tab-stacked-font-weight:400;--tab-stacked-text-align:start;--tab-stacked-text-transform:rotate(0deg);--tab-stacked-text-writing-mode:vertical-lr;--tab-stacked-shadow:-8px 0 8px 0 rgba(0, 0, 0, 0.05);--table-background:transparent;--table-border-width:1px;--table-border-color:var(--background-modifier-border);--table-white-space:break-spaces;--table-header-background:var(--table-background);--table-header-background-hover:inherit;--table-header-border-width:var(--table-border-width);--table-header-border-color:var(--table-border-color);--table-header-font:inherit;--table-header-size:var(--table-text-size);--table-header-weight:calc(var(--font-weight) + var(--bold-modifier));--table-header-color:var(--text-normal);--table-line-height:var(--line-height-tight);--table-text-size:var(--font-text-size);--table-text-color:inherit;--table-column-min-width:6ch;--table-column-max-width:none;--table-column-alt-background:var(--table-background);--table-column-first-border-width:var(--table-border-width);--table-column-last-border-width:var(--table-border-width);--table-row-background-hover:var(--table-background);--table-row-alt-background:var(--table-background);--table-row-alt-background-hover:var(--table-background);--table-row-last-border-width:var(--table-border-width);--table-selection:hsla(var(--color-accent-hsl), 0.1);--table-selection-blend-mode:var(--highlight-mix-blend-mode);--table-selection-border-color:var(--interactive-accent);--table-selection-border-width:2px;--table-selection-border-radius:4px;--table-cell-vertical-alignment:top;--table-drag-handle-background:transparent;--table-drag-handle-background-active:var(--table-selection-border-color);--table-drag-handle-color:var(--text-faint);--table-drag-handle-color-active:var(--text-on-accent);--table-add-button-background:transparent;--table-add-button-border-width:var(--table-border-width);--table-add-button-border-color:var(--background-modifier-border);--tag-size:var(--font-smaller);--tag-color:var(--text-accent);--tag-color-hover:var(--text-accent);--tag-decoration:none;--tag-decoration-hover:none;--tag-background:hsla(var(--interactive-accent-hsl), 0.1);--tag-background-hover:hsla(var(--interactive-accent-hsl), 0.2);--tag-border-color:hsla(var(--interactive-accent-hsl), 0.15);--tag-border-color-hover:hsla(var(--interactive-accent-hsl), 0.15);--tag-border-width:0px;--tag-padding-x:0.65em;--tag-padding-y:0.25em;--tag-radius:2em;--tag-weight:inherit;--titlebar-background:var(--background-secondary);--titlebar-background-focused:var(--background-secondary-alt);--titlebar-border-width:0px;--titlebar-border-color:var(--background-modifier-border);--titlebar-text-color:var(--text-muted);--titlebar-text-color-focused:var(--text-normal);--titlebar-text-weight:var(--font-bold);--toggle-border-width:2px;--toggle-width:40px;--toggle-radius:18px;--toggle-thumb-color:white;--toggle-thumb-radius:18px;--toggle-thumb-height:18px;--toggle-thumb-width:18px;--toggle-s-border-width:2px;--toggle-s-width:34px;--toggle-s-thumb-height:15px;--toggle-s-thumb-width:15px;--vault-profile-font-size:var(--font-ui-small);--vault-profile-font-weight:var(--font-medium);--vault-profile-color:var(--text-normal);--vault-profile-color-hover:var(--vault-profile-color);--vault-name-font-size:var(--font-ui-small);--vault-name-font-weight:var(--font-medium);--vault-name-color:var(--text-normal);--workspace-background-translucent:rgba(var(--mono-rgb-0), 0.6);--accent-h:258;--accent-s:88%;--accent-l:66%;--background-primary:var(--color-base-00);--background-primary-alt:var(--color-base-10);--background-secondary:var(--color-base-20);--background-modifier-hover:rgba(var(--mono-rgb-100), 0.075);--background-modifier-active-hover:hsla(var(--interactive-accent-hsl), 0.15);--background-modifier-border:var(--color-base-30);--background-modifier-border-hover:var(--color-base-35);--background-modifier-border-focus:var(--color-base-40);--background-modifier-error-rgb:var(--color-red-rgb);--background-modifier-error:var(--color-red);--background-modifier-error-hover:var(--color-red);--background-modifier-success-rgb:var(--color-green-rgb);--background-modifier-success:var(--color-green);--background-modifier-message:rgba(0, 0, 0, 0.9);--background-modifier-form-field:var(--color-base-00);--text-normal:var(--color-base-100);--text-muted:var(--color-base-70);--text-faint:var(--color-base-50);--text-on-accent:white;--text-on-accent-inverted:black;--text-error:var(--color-red);--text-warning:var(--color-orange);--text-success:var(--color-green);--text-selection:hsla(var(--color-accent-hsl), 0.2);--text-highlight-bg-rgb:255,208,0;--text-highlight-bg:rgba(var(--text-highlight-bg-rgb), 0.4);--text-accent:var(--color-accent);--text-accent-hover:var(--color-accent-2);--interactive-normal:var(--color-base-00);--interactive-hover:var(--color-base-10);--interactive-accent-hsl:var(--color-accent-hsl);--interactive-accent:var(--color-accent-1);--interactive-accent-hover:var(--color-accent-2)}.theme-light{color-scheme:light;--highlight-mix-blend-mode:darken;--mono-rgb-0:255,255,255;--mono-rgb-100:0,0,0;--color-red-rgb:233,49,71;--color-red:#e93147;--color-orange-rgb:236,117,0;--color-orange:#ec7500;--color-yellow-rgb:224,172,0;--color-yellow:#e0ac00;--color-green-rgb:8,185,78;--color-green:#08b94e;--color-cyan-rgb:0,191,188;--color-cyan:#00bfbc;--color-blue-rgb:8,109,221;--color-blue:#086ddd;--color-purple-rgb:120,82,238;--color-purple:#7852ee;--color-pink-rgb:213,57,132;--color-pink:#d53984;--color-base-00:#ffffff;--color-base-05:#fcfcfc;--color-base-10:#fafafa;--color-base-20:#f6f6f6;--color-base-25:#e3e3e3;--color-base-30:#e0e0e0;--color-base-35:#d4d4d4;--color-base-40:#bdbdbd;--color-base-50:#ababab;--color-base-60:#707070;--color-base-70:#5c5c5c;--color-base-100:#222222;--color-accent-hsl:var(--accent-h),var(--accent-s),var(--accent-l);--color-accent:hsl(var(--accent-h), var(--accent-s), var(--accent-l));--color-accent-1:hsl(calc(var(--accent-h) - 1), calc(var(--accent-s) * 1.01), calc(var(--accent-l) * 1.075));--color-accent-2:hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15));--background-secondary-alt:var(--color-base-05);--background-modifier-box-shadow:rgba(0, 0, 0, 0.1);--background-modifier-cover:rgba(220, 220, 220, 0.4);--input-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.12),0 2px 3px 0 rgba(0,0,0,.05),0 1px 1.5px 0 rgba(0,0,0,.03),0 1px 2px 0 rgba(0,0,0,.04),0 0 0 0 transparent;--input-shadow-hover:inset 0 0 0 1px rgba(0, 0, 0, 0.17),0 2px 3px 0 rgba(0,0,0,.1),0 1px 1.5px 0 rgba(0,0,0,.03),0 1px 2px 0 rgba(0,0,0,.04),0 0 0 0 transparent;--shadow-s:0px 1px 2px rgba(0, 0, 0, 0.028),0px 3.4px 6.7px rgba(0, 0, 0, .042),0px 15px 30px rgba(0, 0, 0, .07);--shadow-l:0px 1.8px 7.3px rgba(0, 0, 0, 0.071),0px 6.3px 24.7px rgba(0, 0, 0, 0.112),0px 30px 90px rgba(0, 0, 0, 0.2)}.theme-dark{color-scheme:dark;--highlight-mix-blend-mode:lighten;--mono-rgb-0:0,0,0;--mono-rgb-100:255,255,255;--color-red-rgb:251,70,76;--color-red:#fb464c;--color-orange-rgb:233,151,63;--color-orange:#e9973f;--color-yellow-rgb:224,222,113;--color-yellow:#e0de71;--color-green-rgb:68,207,110;--color-green:#44cf6e;--color-cyan-rgb:83,223,221;--color-cyan:#53dfdd;--color-blue-rgb:2,122,255;--color-blue:#027aff;--color-purple-rgb:168,130,255;--color-purple:#a882ff;--color-pink-rgb:250,153,205;--color-pink:#fa99cd;--color-base-00:#1e1e1e;--color-base-05:#212121;--color-base-10:#242424;--color-base-20:#262626;--color-base-25:#2a2a2a;--color-base-30:#363636;--color-base-35:#3f3f3f;--color-base-40:#555555;--color-base-50:#666666;--color-base-60:#999999;--color-base-70:#b3b3b3;--color-base-100:#dadada;--color-accent-hsl:var(--accent-h),var(--accent-s),var(--accent-l);--color-accent:hsl(var(--accent-h), var(--accent-s), var(--accent-l));--color-accent-1:hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15));--color-accent-2:hsl(calc(var(--accent-h) - 5), calc(var(--accent-s) * 1.05), calc(var(--accent-l) * 1.29));--background-modifier-form-field:var(--color-base-25);--background-secondary-alt:var(--color-base-30);--interactive-normal:var(--color-base-30);--interactive-hover:var(--color-base-35);--text-accent:var(--color-accent-1);--interactive-accent:var(--color-accent);--interactive-accent-hover:var(--color-accent-1);--background-modifier-box-shadow:rgba(0, 0, 0, 0.3);--background-modifier-cover:rgba(10, 10, 10, 0.4);--text-selection:hsla(var(--interactive-accent-hsl), 0.25);--input-shadow:inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09),0 2px 4px 0 rgba(0,0,0,.15),0 1px 1.5px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.2),0 0 0 0 transparent;--input-shadow-hover:inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16),0 2px 3px 0 rgba(0,0,0,.3),0 1px 1.5px 0 rgba(0,0,0,.2),0 1px 2px 0 rgba(0,0,0,.4),0 0 0 0 transparent;--shadow-s:0px 1px 2px rgba(0, 0, 0, 0.121),0px 3.4px 6.7px rgba(0, 0, 0, 0.179),0px 15px 30px rgba(0, 0, 0, 0.3);--shadow-l:0px 1.8px 7.3px rgba(0, 0, 0, 0.071),0px 6.3px 24.7px rgba(0, 0, 0, 0.112),0px 30px 90px rgba(0, 0, 0, 0.2);--pdf-shadow:0 0 0 1px var(--background-modifier-border);--pdf-thumbnail-shadow:0 0 0 1px var(--background-modifier-border)}iframe{color-scheme:normal}@font-face{font-family:"Avenir Next";font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/94f2f163d4b698242fef.otf")}@font-face{font-family:Inter;font-style:normal;font-weight:200;font-display:swap;src:url("../../lib/fonts/72505e6a122c6acd5471.woff2") format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url("../../lib/fonts/2d5198822ab091ce4305.woff2") format("woff2")}@font-face{font-family:Inter;font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/c8ba52b05a9ef10f4758.woff2")}@font-face{font-family:Inter;font-weight:400;font-style:italic;font-display:swap;src:url("../../lib/fonts/cb10ffd7684cd9836a05.woff2")}@font-face{font-family:Inter;font-weight:600;font-style:normal;font-display:swap;src:url("../../lib/fonts/b5f0f109bc88052d4000.woff2")}@font-face{font-family:Inter;font-weight:800;font-style:normal;font-display:swap;src:url("../../lib/fonts/cbe0ae49c52c920fd563.woff2")}@font-face{font-family:Inter;font-weight:800;font-style:italic;font-display:swap;src:url("../../lib/fonts/535a6cf662596b3bd6a6.woff2")}@font-face{font-family:"Source Code Pro";font-weight:400;font-style:normal;font-display:swap;src:url("../../lib/fonts/70cc7ff27245e82ad414.ttf")}@font-face{font-family:"Source Code Pro";font-weight:400;font-style:italic;font-display:swap;src:url("../../lib/fonts/454577c22304619db035.ttf")}@font-face{font-family:"Source Code Pro";font-weight:700;font-style:normal;font-display:swap;src:url("../../lib/fonts/52ac8f3034507f1d9e53.ttf")}@font-face{font-family:"Source Code Pro";font-weight:700;font-style:italic;font-display:swap;src:url("../../lib/fonts/05b618077343fbbd92b7.ttf")}@font-face{font-family:"Flow Circular";font-display:swap;src:url("../../lib/fonts/4bb6ac751d1c5478ff3a.woff2")}@font-face{font-family:"??";unicode-range:U+0}body{--font-default:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Inter","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Microsoft YaHei Light",sans-serif;--font-monospace-default:ui-monospace,SFMono-Regular,"Cascadia Mono","Roboto Mono","DejaVu Sans Mono","Liberation Mono",Menlo,Monaco,"Consolas","Source Code Pro",monospace;--font-interface-override:'??';--font-interface-theme:'??';--font-interface:var(--font-interface-override),var(--font-interface-theme),var(--default-font, '??'),var(--font-default);--font-text-override:'??';--font-text-theme:'??';--font-text:var(--font-text-override),var(--font-text-theme),var(--font-interface);--font-print-override:'??';--font-print:var(--font-print-override),var(--font-text-override),var(--font-text-theme),'Arial';--font-monospace-override:'??';--font-monospace-theme:'??';--font-monospace:var(--font-monospace-override),var(--font-monospace-theme),var(--font-monospace-default);--font-text-size:16px;--font-mermaid:var(--font-text)}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;width:100%;overscroll-behavior:none}body{text-rendering:optimizelegibility;font-family:var(--font-interface);line-height:var(--line-height-tight);font-size:var(--font-ui-medium);background-color:var(--background-primary);color:var(--text-normal);-webkit-tap-highlight-color:rgba(255,255,255,0)}.node-insert-event{animation-duration:10ms;animation-name:node-inserted}.is-flashing{transition:all .25s ease 0s;color:var(--text-normal);mix-blend-mode:var(--highlight-mix-blend-mode);border-radius:var(--radius-s);background-color:var(--text-highlight-bg)!important}body{user-select:none;caret-color:var(--caret-color)}body [contenteditable=""],body [contenteditable=true]{user-select:text}body.is-grabbing{cursor:grabbing!important}body.is-grabbing iframe:not(.is-controlled),body.is-grabbing webview{pointer-events:none}.app-container{display:flex;height:100%;width:100%;position:relative;flex-direction:column}.app-container.no-transition *{transition:none 0s ease 0s!important}.horizontal-main-container{width:100%;display:flex;overflow:hidden;flex:1 0 0px}:focus{outline:0}.is-text-garbled *{font-family:"Flow Circular",sans-serif!important;line-height:1.45em!important}.markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row{max-width:100%}.markdown-source-view.mod-cm6 .cm-content>[contenteditable=false]{contain:paint!important}.markdown-source-view.mod-cm6 .cm-table-widget{white-space:normal;overflow-wrap:normal;word-break:normal}.markdown-source-view.mod-cm6 .cm-table-widget{--table-drag-handle-size:var(--size-4-4);padding:var(--table-drag-handle-size);overflow:auto hidden;margin:0 calc(-1 * var(--size-4-4))!important}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget{--table-drag-handle-size:var(--size-4-6)}.markdown-source-view.mod-cm6 .cm-table-widget.is-loading{padding:0;margin:0!important}.markdown-source-view.mod-cm6 .cm-table-widget .table-wrapper{position:relative;width:fit-content}.markdown-source-view.mod-cm6 .cm-table-widget tr{height:1px}.markdown-source-view.mod-cm6 .cm-table-widget td,.markdown-source-view.mod-cm6 .cm-table-widget th{height:inherit;min-width:var(--table-column-min-width);cursor:text;overflow:visible;padding:0;position:relative}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected .table-cell-wrapper,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected .table-cell-wrapper{user-select:none}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected::after{pointer-events:none;content:"";display:block;position:absolute;top:calc(-1 * var(--table-border-width));inset-inline-end:calc(-1 * var(--table-border-width));bottom:calc(-1 * var(--table-border-width));inset-inline-start:calc(-1 * var(--table-border-width));background-color:var(--table-selection);border:0 solid var(--table-selection-border-color);mix-blend-mode:var(--table-selection-blend-mode);z-index:1}.markdown-source-view.mod-cm6 .cm-table-widget td.top::after,.markdown-source-view.mod-cm6 .cm-table-widget th.top::after{border-top-width:var(--table-selection-border-width);top:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.bottom::after,.markdown-source-view.mod-cm6 .cm-table-widget th.bottom::after{border-bottom-width:var(--table-selection-border-width);bottom:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection{--text-selection:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-content{caret-color:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-cursorLayer,.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-selectionLayer{display:none}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected{--text-selection:transparent}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table{position:relative}.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table::after{pointer-events:none;content:"";display:block;position:absolute;top:calc(-1 * var(--table-border-width));inset-inline-end:calc(-1 * var(--table-border-width));bottom:calc(-1 * var(--table-border-width));inset-inline-start:calc(-1 * var(--table-border-width));background-color:var(--table-selection)}.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper{height:100%;padding:var(--size-2-2) var(--size-4-2)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);position:absolute;display:flex;align-items:center;justify-content:center;cursor:grab;background-color:var(--table-drag-handle-background);color:var(--table-drag-handle-color);touch-action:none;opacity:0}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:hover,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:hover{opacity:1}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active{cursor:grabbing;background-color:var(--table-drag-handle-background-active);color:var(--table-drag-handle-color-active);box-shadow:0 0 0 var(--table-selection-border-width) var(--table-selection-border-color)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle *,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle *{pointer-events:none}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{top:0;inset-inline-end:100%;width:calc(var(--table-drag-handle-size) - var(--table-selection-border-width));height:100%;border-start-start-radius:var(--radius-s);border-end-start-radius:var(--radius-s)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle{inset-block-end:100%;width:100%;height:calc(var(--table-drag-handle-size) - var(--table-selection-border-width));border-start-start-radius:var(--radius-s);border-start-end-radius:var(--radius-s)}.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle,.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle{display:none}.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle:active,.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle:active{display:flex}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target{position:absolute;border-radius:2px;background-color:var(--interactive-accent)}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-row{height:3px;transform:translateY(-2px)}.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-col{width:3px;transform:translateX(-2px)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);position:absolute;display:flex;align-items:center;justify-content:center;height:var(--table-drag-handle-size);width:var(--table-drag-handle-size);background-color:var(--table-add-button-background);border:var(--table-add-button-border-width) solid var(--table-add-button-border-color);color:var(--text-faint);transition:opacity 0s ease .1s;opacity:0;user-select:none}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn:hover,.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn:hover{opacity:1}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{display:none}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-col-handle>.table-col-drag-handle,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-row-handle>.table-row-drag-handle{opacity:1;display:flex}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-col-btn,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-row-btn{pointer-events:none}.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-col-btn,.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-row-btn{opacity:1}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn{top:100%;inset-inline-start:0px;width:100%;border-top:none;cursor:s-resize}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn{top:0;height:100%}.markdown-source-view.mod-cm6 .cm-table-widget .cm-editor{flex-basis:content}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content,.markdown-source-view.mod-cm6 .cm-table-widget .cm-line{max-width:none}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content{width:auto}.markdown-source-view.mod-cm6 .cm-table-widget .cm-content.cm-lineWrapping{overflow-wrap:normal;white-space:var(--table-white-space);word-break:normal}.markdown-source-view.mod-cm6 .cm-table-widget .cm-scroller{overflow-y:hidden;scrollbar-gutter:auto;line-height:var(--table-line-height)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn{inset-inline-start:100%;border-inline-start:none;cursor:e-resize}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.start::after{border-inline-start-width:var(--table-selection-border-width);inset-inline-start:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.end::after{border-inline-end-width:var(--table-selection-border-width);inset-inline-end:calc(-1 * var(--table-selection-border-width))}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.end::after{border-start-end-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.end::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.end::after{border-end-end-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.start::after{border-start-start-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.start::after,.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.start::after{border-end-start-radius:var(--table-selection-border-radius)}.markdown-source-view.mod-cm6 .cm-table-widget:dir(rtl) .table-col-btn,.markdown-source-view.mod-cm6.is-rtl .cm-table-widget .table-col-btn{cursor:w-resize}.markdown-source-view.mod-cm6 .cm-panels.cm-panels-bottom input[type=text]:focus{background-color:transparent;box-shadow:none}.empty-state{position:absolute;height:100%;width:100%;top:0;inset-inline-start:0px;display:flex;align-items:center;justify-content:center;flex-direction:column}.empty-state-container{max-width:480px;max-height:280px;margin:20px;text-align:center}.empty-state-title{margin:20px 0;font-weight:var(--h2-weight);font-size:var(--h2-size);line-height:var(--line-height-tight);position:relative}.empty-state-action-list{font-size:var(--font-text-size);line-height:var(--line-height-tight);color:var(--text-muted);margin-top:20px}.empty-state-action{cursor:var(--cursor);line-height:36px;color:var(--text-accent)}.empty-state-close-button{display:none}body{--zoom-factor:1;--titlebar-height:30px}.pane-empty{color:var(--text-faint);font-size:var(--font-ui-small);margin:var(--size-4-2) auto;padding:var(--size-4-6) var(--size-4-4);text-align:center}.pane-empty .pane-empty-actions{margin-top:var(--size-4-4)}.view-header-title::-webkit-scrollbar{display:none}.view-content{width:100%;height:calc(100% - var(--header-height))}.inline-title{font-weight:var(--inline-title-weight);font-size:var(--inline-title-size);line-height:var(--inline-title-line-height);font-style:var(--inline-title-style);font-variant:var(--inline-title-variant);font-family:var(--inline-title-font);margin-bottom:var(--inline-title-margin-bottom);letter-spacing:-.015em;color:var(--inline-title-color);white-space:pre-wrap}.inline-embed .inline-title{display:none}body:not(.show-inline-title) .inline-title:not([data-level]){display:none}::selection{background-color:var(--text-selection)}.markdown-reading-view{display:flex;flex-direction:column}.markdown-preview-view{font-size:var(--font-text-size);font-family:var(--font-text);line-height:var(--line-height-normal);width:100%;height:100%;padding:var(--file-margins);position:relative;overflow-y:auto;overflow-wrap:break-word;color:var(--text-normal);user-select:text;scrollbar-gutter:stable}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.markdown-rendered.rtl{direction:rtl}body:not(.show-ribbon){--ribbon-width:0px}.side-dock-actions{flex-direction:column}.side-dock-actions .side-dock-ribbon-action{margin:0 auto}.release-notes-view{padding:var(--file-margins)}.release-notes-view .markdown-preview-view{overflow:visible}.release-notes-view .is-readable-line-width{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.inline-title,.metadata-property-key-input,.multi-select-pill-content,.nav-file-title-content,.nav-folder-title-content,.search-result-file-match,.tree-item-inner,input{unicode-bidi:plaintext}[dir=ltr],body{--direction:1}.mod-rtl,[dir=rtl]{--direction:-1}.is-rtl,.mod-rtl,.rtl{--callout-padding:var(--size-4-3) var(--size-4-6) var(--size-4-3) var(--size-4-3);--embed-padding:0 var(--size-4-6) 0 0;--nav-item-padding:var(--size-4-1) var(--size-4-6) var(--size-4-1) var(--size-4-2)}.is-rtl .metadata-container,.mod-rtl .metadata-container,.rtl .metadata-container{--direction:-1}.is-rtl .metadata-container,.is-rtl input.metadata-input-number,.is-rtl input.metadata-property-key-input,.mod-rtl .metadata-container,.mod-rtl input.metadata-input-number,.mod-rtl input.metadata-property-key-input,.rtl .metadata-container,.rtl input.metadata-input-number,.rtl input.metadata-property-key-input{text-align:right}.is-rtl input[type=date],.is-rtl input[type=datetime-local],.mod-rtl input[type=date],.mod-rtl input[type=datetime-local],.rtl input[type=date],.rtl input[type=datetime-local]{direction:rtl}.is-rtl input[type=date]::-webkit-calendar-picker-indicator,.is-rtl input[type=datetime-local]::-webkit-calendar-picker-indicator,.mod-rtl input[type=date]::-webkit-calendar-picker-indicator,.mod-rtl input[type=datetime-local]::-webkit-calendar-picker-indicator,.rtl input[type=date]::-webkit-calendar-picker-indicator,.rtl input[type=datetime-local]::-webkit-calendar-picker-indicator{right:var(--size-4-1);left:auto}.mod-rtl{--dropdown-background-position:left 0.5em top 50%,0 0;--dropdown-padding:0 0.8em 0 1.9em;--tab-stacked-text-transform:rotate(180deg)}.mod-rtl .canvas-wrapper{direction:ltr}.mod-rtl .modal,.mod-rtl .notice{direction:rtl}.mod-rtl input{text-align:right}.mod-rtl .checkbox-container,.mod-rtl .search-input-container::before{transform:scale(-1,1)}.popupWrapper{--pdf-popup-width:280px;font-size:var(--font-ui-medium);pointer-events:none;position:absolute;transform:translate(-50%,0);z-index:10000}.popupWrapper>div{margin:var(--size-4-3);background-color:var(--background-primary);border-radius:var(--radius-s);filter:drop-shadow(rgba(0, 0, 0, .2) 0px 0px 1px) drop-shadow(rgba(0, 0, 0, .3) 0px 1px 2px) drop-shadow(rgba(0, 0, 0, .3) 0px 4px 6px)}.popupWrapper>div::after{background:var(--background-primary);border-start-start-radius:2px;content:"";height:var(--size-4-3);inset-inline-start:calc(50% - 2px);position:absolute;top:-5px;transform:rotate(45deg);width:var(--size-4-3);z-index:-1}.popup{cursor:initial;display:flex;flex-direction:column;pointer-events:auto;user-select:text;white-space:normal;width:var(--pdf-popup-width);overflow-wrap:break-word}.popupContent{font-size:var(--font-ui-small);line-height:var(--line-height-tight);max-height:200px;overflow:auto;padding:var(--size-4-4)}.popupContent:empty{display:none}.popupMeta{--icon-size:var(--font-ui-small);--icon-stroke:2.5px;align-items:center;background-color:var(--background-secondary);border-top:1px solid var(--background-modifier-border);color:var(--text-muted);display:flex;font-size:var(--font-ui-smaller);gap:var(--size-4-1);justify-content:space-between;padding:var(--size-4-1) var(--size-4-2);border-bottom-left-radius:var(--radius-s);border-bottom-right-radius:var(--radius-s)}.popupContent:empty+.popupMeta{border-top:none;background-color:var(--background-primary);border-top-left-radius:var(--radius-s);border-top-right-radius:var(--radius-s)}.popupMeta .clickable-icon{margin-inline-end:calc(var(--size-4-1) * -1);margin-inline-start:calc(var(--size-2-1) * -1)}.popupDate{white-space:nowrap}.markdown-rendered video{max-width:100%;outline:0}.markdown-rendered blockquote{color:var(--blockquote-color);font-style:var(--blockquote-font-style);background-color:var(--blockquote-background-color);border-inline-start:var(--blockquote-border-thickness) solid var(--blockquote-border-color);padding-top:0;padding-bottom:0;padding-inline-start:var(--size-4-6);margin-inline:0px}.markdown-rendered blockquote>:first-child{margin-top:0}.markdown-rendered blockquote>:last-child{margin-bottom:0}.callout{--callout-color:var(--callout-default);--callout-icon:lucide-pencil}.callout[data-callout=abstract],.callout[data-callout=summary],.callout[data-callout=tldr]{--callout-color:var(--callout-summary);--callout-icon:lucide-clipboard-list}.callout[data-callout=info]{--callout-color:var(--callout-info);--callout-icon:lucide-info}.callout[data-callout=todo]{--callout-color:var(--callout-todo);--callout-icon:lucide-check-circle-2}.callout[data-callout=important]{--callout-color:var(--callout-important);--callout-icon:lucide-flame}.callout[data-callout=hint],.callout[data-callout=tip]{--callout-color:var(--callout-tip);--callout-icon:lucide-flame}.callout[data-callout=check],.callout[data-callout=done],.callout[data-callout=success]{--callout-color:var(--callout-success);--callout-icon:lucide-check}.callout[data-callout=faq],.callout[data-callout=help],.callout[data-callout=question]{--callout-color:var(--callout-question);--callout-icon:help-circle}.callout[data-callout=attention],.callout[data-callout=caution],.callout[data-callout=warning]{--callout-color:var(--callout-warning);--callout-icon:lucide-alert-triangle}.callout[data-callout=fail],.callout[data-callout=failure],.callout[data-callout=missing]{--callout-color:var(--callout-fail);--callout-icon:lucide-x}.callout[data-callout=danger],.callout[data-callout=error]{--callout-color:var(--callout-error);--callout-icon:lucide-zap}.callout[data-callout=bug]{--callout-color:var(--callout-bug);--callout-icon:lucide-bug}.callout[data-callout=example]{--callout-color:var(--callout-example);--callout-icon:lucide-list}.callout[data-callout=cite],.callout[data-callout=quote]{--callout-color:var(--callout-quote);--callout-icon:quote-glyph}.callout{overflow:hidden;border-style:solid;border-color:rgba(var(--callout-color),var(--callout-border-opacity));border-width:var(--callout-border-width);border-radius:var(--callout-radius);margin:1em 0;mix-blend-mode:var(--callout-blend-mode);background-color:rgba(var(--callout-color),.1);padding:var(--callout-padding)}.callout.is-collapsible .callout-title{cursor:var(--cursor)}.callout-title{padding:var(--callout-title-padding);display:flex;gap:var(--size-4-1);font-size:var(--callout-title-size);color:rgb(var(--callout-color));line-height:var(--line-height-tight);align-items:flex-start}.callout-content{overflow-x:auto;padding:var(--callout-content-padding);background-color:var(--callout-content-background)}.callout-content .callout{margin-top:20px}.callout-icon{flex:0 0 auto;display:flex;align-items:center}.callout-icon .svg-icon{color:rgb(var(--callout-color))}.callout-icon::after{content:"​"}.callout-title-inner{--font-weight:var(--callout-title-weight);font-weight:var(--font-weight);color:var(--callout-title-color)}.callout-fold{display:flex;align-items:center;padding-inline-end:var(--size-4-2)}.callout-fold::after{content:"​"}.callout-fold .svg-icon{transition:transform .1s ease-in-out 0s}.callout-fold.is-collapsed .svg-icon{transform:rotate(calc(var(--direction) * -1 * 90deg))}.markdown-rendered code{color:var(--code-normal);font-family:var(--font-monospace);background-color:var(--code-background);border-radius:var(--code-radius);font-size:var(--code-size);padding:.1em .25em;-webkit-box-decoration-break:clone}.cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token{font-size:0px}.markdown-rendered pre{position:relative;padding:var(--size-4-3) var(--size-4-4);min-height:38px;background-color:var(--code-background);border-radius:var(--code-radius);white-space:var(--code-white-space);overflow-x:auto}.markdown-rendered pre code{border:none;padding:0;background-color:transparent}.markdown-rendered pre:not(:hover)>button.copy-code-button{display:none}.markdown-rendered button.copy-code-button{margin:6px;padding:6px 8px;height:auto;background-color:transparent;box-shadow:none;color:var(--text-muted);font-size:var(--font-ui-smaller);font-family:var(--font-interface);position:absolute;top:0;inset-inline-end:0px}code[class*=language-],pre[class*=language-]{color:var(--code-normal);background:0 0;overflow-wrap:break-word;white-space:pre-wrap;word-break:normal;direction:ltr;font-family:var(--font-monospace);text-align:left;word-spacing:normal;line-height:var(--line-height-normal);hyphens:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--code-background)}pre[class*=language-]{overflow:hidden}code[class*=language-]{display:block;padding:1em;overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--code-comment)}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.symbol,.token.tag{color:var(--code-tag)}.token.punctuation{color:var(--code-punctuation)}.token.boolean,.token.number{color:var(--code-value)}.token.attr-name,.token.char,.token.inserted,.token.selector,.token.string{color:var(--code-string)}.token.operator{color:var(--code-operator)}.language-css .token.string,.style .token.string,.token.entity,.token.parameter,.token.property,.token.url,.token.variable{color:var(--code-property)}.token.atrule,.token.attr-value,.token.builtin,.token.class-name,.token.function,.token.property-access{color:var(--code-function)}.token.keyword{color:var(--code-keyword)}.token.important,.token.regex{color:var(--code-important)}.markdown-preview-view .markdown-embed .markdown-preview-view{--file-folding-offset:0px;height:100%;padding:0}.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5,.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6{margin-top:0}.file-embed,.markdown-embed{position:relative}.file-embed-link,.markdown-embed-link{position:absolute;top:4px;inset-inline-end:4px;color:var(--icon-color);opacity:var(--icon-opacity);cursor:var(--cursor-link);padding:var(--size-2-2);border-radius:var(--radius-s);display:flex;align-items:center;--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.file-embed-title{display:flex;align-items:center;justify-content:center;gap:var(--size-4-2)}.file-embed-icon{color:var(--text-muted);display:flex}.file-embed{display:flex;justify-content:center;border-radius:var(--radius-m);background-color:var(--background-primary-alt)}.file-embed.mod-empty,.file-embed.mod-generic{cursor:var(--cursor-link);padding:var(--size-4-2);color:var(--text-muted);text-align:center;font-size:var(--font-smaller)}.file-embed.mod-empty-attachment{padding:var(--size-4-2);color:var(--text-muted);text-align:center;font-size:var(--font-smaller)}.markdown-embed-content{height:100%}.embed-title{align-items:center;display:flex;gap:var(--size-4-1);font-size:var(--font-text-size);font-weight:calc(var(--font-weight) + var(--bold-modifier));text-align:start;text-overflow:ellipsis;white-space:nowrap;padding:0 0 var(--size-4-2) 0}.markdown-embed{font-style:var(--embed-font-style);background-color:var(--embed-background);border-top:var(--embed-border-top);border-inline-end:var(--embed-border-end,var(--embed-border-right));border-bottom:var(--embed-border-bottom);border-inline-start:var(--embed-border-start,var(--embed-border-left));margin:0;padding:var(--embed-padding)}.markdown-embed .markdown-preview-view{padding:0}.internal-embed:not(.image-embed){display:block}.internal-embed audio,.internal-embed img:not([width]),.internal-embed video{max-width:100%}.inline-embed .markdown-embed-content{height:fit-content;max-height:var(--embed-max-height);overflow:auto}.inline-embed .markdown-embed-content p:first-child{margin-top:0}.inline-embed .markdown-source-view.mod-cm6 .cm-editor{min-height:unset}.embed-iframe{width:100%;height:100%}iframe.external-embed{width:600px;max-width:100%;height:350px}.footnote-link{text-decoration:none}.footnotes{font-size:var(--footnote-size)}.footnote-ref{vertical-align:super}.footnote-backref{display:inline-block;margin-inline-start:var(--size-4-1);color:var(--text-faint);text-decoration:none}.markdown-rendered .frontmatter.mod-failed{position:relative}.markdown-rendered .frontmatter.mod-failed .mod-error{color:var(--text-error);font-size:var(--font-smaller)}.markdown-rendered .frontmatter.mod-failed::after{content:"";position:absolute;top:0;inset-inline-end:0px;width:100%;height:100%;background-color:var(--background-modifier-error);opacity:.3;mix-blend-mode:var(--highlight-mix-blend-mode)}.metadata-container{--input-height:var(--metadata-input-height);border-radius:var(--metadata-border-radius);background-color:var(--metadata-background);border-color:var(--metadata-border-color);border-style:solid;border-width:var(--metadata-border-width);padding:var(--metadata-padding);color:var(--text-muted);position:relative;max-width:var(--metadata-max-width);margin-block-end:var(--p-spacing);transform:translateX(calc(var(--size-4-1) * -1 * var(--direction)))}.metadata-container .metadata-add-button{padding-inline-start:var(--size-2-3);margin-top:.5em;font-size:var(--metadata-label-font-size)}.markdown-embed-content .metadata-container{display:none}.metadata-container.is-collapsed .metadata-property{display:none}.metadata-container:focus-within .metadata-property.is-selected{color:var(--nav-item-color-selected);background-color:var(--nav-item-background-selected)}.metadata-properties{display:flex;flex-direction:column;gap:var(--metadata-gap)}.metadata-properties-heading{display:inline-block;padding:var(--size-4-1);margin-bottom:var(--size-4-2);position:relative;line-height:1.2}.metadata-properties-heading::before{content:"";border-radius:var(--metadata-property-radius);position:absolute;display:inline-block;inset:0px}.metadata-properties-heading:focus::before{box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.metadata-properties-heading .collapse-indicator{position:absolute;inset-inline-start:-22px;padding:0 6px}.metadata-properties-title{user-select:none;font-size:max(var(--font-ui-small), 1em);color:var(--text-normal);font-weight:var(--font-medium)}.metadata-input-text{background-color:transparent;width:100%;min-height:var(--input-height);border-width:0;resize:none;overflow-y:hidden}.metadata-input-text::-webkit-date-and-time-value{text-align:start}.metadata-input-text.mod-date{padding-inline-end:0px;width:auto}.metadata-property{position:relative;display:flex;align-items:start;padding:var(--metadata-property-padding);border-radius:var(--metadata-property-radius);overflow:hidden;background-color:var(--metadata-property-background)}.metadata-property:focus-within{background-color:var(--metadata-property-background-hover);--metadata-divider-color:var(--metadata-divider-color-focus);border-radius:var(--metadata-property-radius-focus);box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.metadata-property-icon{cursor:var(--cursor);color:var(--icon-color);display:flex;align-items:center;padding:var(--size-4-1) 0;height:var(--input-height);user-select:none}.metadata-property-icon::before{content:"​";width:var(--size-4-1)}.metadata-input-number{background-color:transparent;width:100%;border-width:0}input[type=checkbox].metadata-input-checkbox{margin-inline-start:var(--size-4-2)}.metadata-property-key{display:flex;align-self:stretch;align-items:flex-start;flex-direction:row;flex-shrink:0;border-bottom:var(--metadata-divider-width) solid var(--metadata-divider-color);background-color:var(--metadata-label-background);width:var(--metadata-label-width);min-width:var(--metadata-label-width)}.metadata-property-key:focus-within{background-color:var(--metadata-label-background-active)}input.metadata-property-key-input{border:none;flex-grow:1;color:var(--metadata-label-text-color);font-size:var(--metadata-label-font-size);font-weight:var(--metadata-label-font-weight);height:var(--input-height);background-color:transparent;display:flex;align-items:center;text-overflow:ellipsis;overflow:hidden;text-align:left}input.metadata-property-key-input:active,input.metadata-property-key-input:focus{background-color:transparent}.metadata-property button{margin-top:var(--size-4-2)}.metadata-property .multi-select-container,.metadata-property input[type=date],.metadata-property input[type=datetime-local],.metadata-property input[type=number],.metadata-property input[type=text]{border-radius:0;border:none}.metadata-property .multi-select-container:active,.metadata-property .multi-select-container:focus,.metadata-property .multi-select-container:hover,.metadata-property input[type=date]:active,.metadata-property input[type=date]:focus,.metadata-property input[type=date]:hover,.metadata-property input[type=datetime-local]:active,.metadata-property input[type=datetime-local]:focus,.metadata-property input[type=datetime-local]:hover,.metadata-property input[type=number]:active,.metadata-property input[type=number]:focus,.metadata-property input[type=number]:hover,.metadata-property input[type=text]:active,.metadata-property input[type=text]:focus,.metadata-property input[type=text]:hover{box-shadow:none;border:none}.metadata-property .metadata-input-number,.metadata-property .metadata-input-text,.metadata-property .multi-select-container{background-color:transparent}.metadata-property .metadata-input-number:hover,.metadata-property .metadata-input-text:hover,.metadata-property .multi-select-container:hover{background-color:transparent}.metadata-property .metadata-input-number:active,.metadata-property .metadata-input-number:focus,.metadata-property .metadata-input-number:focus-within,.metadata-property .metadata-input-text:active,.metadata-property .metadata-input-text:focus,.metadata-property .metadata-input-text:focus-within,.metadata-property .multi-select-container:active,.metadata-property .multi-select-container:focus,.metadata-property .multi-select-container:focus-within{background-color:transparent}.metadata-property .metadata-input-text{text-overflow:ellipsis;overflow:hidden}.metadata-property .multi-select-container input{background-color:transparent}.metadata-property .multi-select-container{padding:var(--size-4-1) var(--size-4-2)}.metadata-property[data-property-key=tags]{--pill-color:var(--tag-color);--pill-color-hover:var(--tag-color-hover);--pill-color-remove:var(--tag-color);--pill-color-remove-hover:var(--tag-color-hover);--pill-decoration:var(--tag-decoration);--pill-decoration-hover:var(--tag-decoration-hover);--pill-background:var(--tag-background);--pill-background-hover:var(--tag-background-hover);--pill-border-color:var(--tag-border-color);--pill-border-color-hover:var(--tag-border-color-hover);--pill-border-width:var(--tag-border-width);--pill-padding-x:var(--tag-padding-x);--pill-padding-y:var(--tag-padding-y);--pill-radius:var(--tag-radius);--pill-weight:var(--tag-weight);--pill-focus-width:100%;--pill-focus-left-adjust:0}.metadata-property[data-property-key=tags] .multi-select-pill{cursor:var(--cursor-link)}.metadata-property:not([data-property-key=tags]){--pill-border-width:0;--pill-padding-x:0;--pill-padding-y:0;--pill-color:var(--metadata-input-text-color)}.metadata-property:not([data-property-key=tags]) .multi-select-pill{line-height:var(--line-height-tight)}.metadata-property-warning-icon{--icon-size:var(--icon-s);position:absolute;inset-inline-end:var(--size-2-1);top:var(--size-2-1);bottom:var(--size-2-1);align-items:center;display:flex;color:var(--text-warning)}.metadata-property-value{display:flex;flex:1 1 auto;gap:var(--size-2-2);align-items:center;align-self:stretch;min-height:var(--input-height);background-color:var(--metadata-input-background);border-bottom:var(--metadata-divider-width) solid var(--metadata-divider-color);overflow:hidden}.metadata-property-value.mod-external-link:not(:placeholder-shown){text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);text-decoration-color:var(--text-faint)}.metadata-property-value .mod-unknown{color:var(--text-warning);padding:var(--size-4-1) var(--size-4-2);font-size:var(--metadata-input-font-size);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.metadata-property-value .multi-select-input{font-size:inherit}.metadata-property-value .metadata-link-inner,.metadata-property-value .multi-select-container,.metadata-property-value input{font-size:var(--metadata-input-font-size)}.metadata-property-value .multi-select-container{--background-modifier-form-field:transparent;--background-modifier-border:transparent;align-items:center}.metadata-property-value .multi-select-container .multi-select-pill.is-invalid{--pill-background:transparent;--pill-color:var(--text-error);--pill-color-remove:var(--text-error)}.metadata-property-value .external-link.multi-select-pill-content,.metadata-property-value .internal-link .multi-select-pill-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.metadata-property-value .clickable-icon{--icon-size:var(--icon-xs);--icon-stroke:var(--icon-xs-stroke-width);margin-inline:-4px 2px;padding:4px}.metadata-property-value .clickable-icon:hover{background:0 0;color:var(--text-normal);cursor:var(--cursor-link)}.metadata-property-value:focus-within{background-color:var(--metadata-input-background-active)}.metadata-input-longtext{cursor:text;white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:3;color:var(--metadata-input-text-color);font-size:var(--metadata-input-font-size);max-height:300px;overflow-y:auto;padding:var(--size-4-1) var(--size-4-2);width:100%}.metadata-input-longtext:focus{-webkit-line-clamp:unset}.metadata-input-longtext:not(:empty){display:-webkit-box}.metadata-input-longtext:empty::before{content:attr(placeholder);color:var(--text-faint)}.metadata-link{cursor:text;align-items:center;padding:var(--size-4-1) var(--size-4-2);display:flex;gap:var(--size-4-2);width:100%}.metadata-link-inner{cursor:var(--cursor-link);color:var(--link-color);text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.metadata-link-flair{--icon-size:var(--icon-xs);background-color:transparent;cursor:text;margin-inline-start:auto;display:flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--clickable-icon-radius);color:var(--icon-color);opacity:0;transition:opacity .15s ease-in-out 0s;height:auto}.markdown-preview-view .metadata-container{display:none}.markdown-preview-view.show-properties .metadata-container{display:var(--metadata-display-reading)}.markdown-preview-view.show-properties .metadata-container[data-property-count="0"]{display:none}.markdown-rendered li h1,.markdown-rendered li h2,.markdown-rendered li h3,.markdown-rendered li h4,.markdown-rendered li h5{margin-top:0;margin-bottom:0}.markdown-rendered div:has(> :is(p,pre,table,ul,ol))+div>:is(h1,h2,h3,h4,h5,h6){margin-top:var(--heading-spacing)}.markdown-rendered h1,h1{--font-weight:var(--h1-weight);font-variant:var(--h1-variant);letter-spacing:-.015em;line-height:var(--h1-line-height);font-size:var(--h1-size);color:var(--h1-color);font-weight:var(--font-weight);font-style:var(--h1-style);font-family:var(--h1-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h1 a,h1 a{--link-weight:var(--h1-weight)}.markdown-rendered h2,h2{--font-weight:var(--h2-weight);font-variant:var(--h2-variant);letter-spacing:-.015em;line-height:var(--h2-line-height);font-size:var(--h2-size);color:var(--h2-color);font-weight:var(--font-weight);font-style:var(--h2-style);font-family:var(--h2-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h2 a,h2 a{--link-weight:var(--h2-weight)}.markdown-rendered h3,h3{--font-weight:var(--h3-weight);font-variant:var(--h3-variant);letter-spacing:-.015em;line-height:var(--h3-line-height);font-size:var(--h3-size);color:var(--h3-color);font-weight:var(--font-weight);font-style:var(--h3-style);font-family:var(--h3-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h3 a,h3 a{--link-weight:var(--h3-weight)}.markdown-rendered h4,h4{--font-weight:var(--h4-weight);font-variant:var(--h4-variant);letter-spacing:.015em;line-height:var(--h4-line-height);font-size:var(--h4-size);color:var(--h4-color);font-weight:var(--font-weight);font-style:var(--h4-style);font-family:var(--h4-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h4 a,h4 a{--link-weight:var(--h4-weight)}.markdown-rendered h5,h5{--font-weight:var(--h5-weight);font-variant:var(--h5-variant);letter-spacing:.015em;font-size:var(--h5-size);line-height:var(--h5-line-height);color:var(--h5-color);font-weight:var(--font-weight);font-style:var(--h5-style);font-family:var(--h5-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h5 a,h5 a{--link-weight:var(--h5-weight)}.markdown-rendered h6,h6{--font-weight:var(--h6-weight);font-variant:var(--h6-variant);letter-spacing:.015em;font-size:var(--h6-size);line-height:var(--h6-line-height);color:var(--h6-color);font-weight:var(--font-weight);font-style:var(--h6-style);font-family:var(--h6-font);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered h6 a,h6 a{--link-weight:var(--h6-weight)}.inline-title[data-level="1"]{--font-weight:var(--h1-weight);font-variant:var(--h1-variant);letter-spacing:-.015em;line-height:var(--h1-line-height);font-size:var(--h1-size);color:var(--h1-color);font-weight:var(--font-weight);font-style:var(--h1-style);font-family:var(--h1-font)}.inline-title[data-level="1"] a{--link-weight:var(--h1-weight)}.inline-title[data-level="2"]{--font-weight:var(--h2-weight);font-variant:var(--h2-variant);letter-spacing:-.015em;line-height:var(--h2-line-height);font-size:var(--h2-size);color:var(--h2-color);font-weight:var(--font-weight);font-style:var(--h2-style);font-family:var(--h2-font)}.inline-title[data-level="2"] a{--link-weight:var(--h2-weight)}.inline-title[data-level="3"]{--font-weight:var(--h3-weight);font-variant:var(--h3-variant);letter-spacing:-.015em;line-height:var(--h3-line-height);font-size:var(--h3-size);color:var(--h3-color);font-weight:var(--font-weight);font-style:var(--h3-style);font-family:var(--h3-font)}.inline-title[data-level="3"] a{--link-weight:var(--h3-weight)}.inline-title[data-level="4"]{--font-weight:var(--h4-weight);font-variant:var(--h4-variant);line-height:var(--h4-line-height);font-size:var(--h4-size);color:var(--h4-color);font-weight:var(--font-weight);font-style:var(--h4-style);font-family:var(--h4-font)}.inline-title[data-level="4"] a{--link-weight:var(--h4-weight)}.inline-title[data-level="5"]{--font-weight:var(--h5-weight);font-variant:var(--h5-variant);font-size:var(--h5-size);line-height:var(--h5-line-height);color:var(--h5-color);font-weight:var(--font-weight);font-style:var(--h5-style);font-family:var(--h5-font)}.inline-title[data-level="5"] a{--link-weight:var(--h5-weight)}.inline-title[data-level="6"]{--font-weight:var(--h6-weight);font-variant:var(--h6-variant);letter-spacing:.015em;font-size:var(--h6-size);line-height:var(--h6-line-height);color:var(--h6-color);font-weight:var(--font-weight);font-style:var(--h6-style);font-family:var(--h6-font)}.inline-title[data-level="6"] a{--link-weight:var(--h6-weight)}hr{border-right-width:initial;border-bottom-width:initial;border-left-width:initial;border-right-style:none;border-bottom-style:none;border-left-style:none;border-image:initial;border-color:var(--hr-color);margin:2rem 0}.markdown-rendered hr{border-right-width:initial;border-bottom-width:initial;border-left-width:initial;border-right-style:none;border-bottom-style:none;border-left-style:none;border-image:initial;border-color:var(--hr-color)}.cm-s-obsidian .hmd-fold-html-stub.omittable,.cm-s-obsidian .omittable.hmd-fold-code-stub{display:none}.cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable,.cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub{display:block;right:0;bottom:100%;margin:0;position:absolute;z-index:100}.markdown-preview-view img,.markdown-rendered img{image-rendering:-webkit-optimize-contrast}.markdown-preview-view img:not([width]),.markdown-rendered img:not([width]){max-width:100%;outline:0}.internal-query{margin:0;border-top:1px solid var(--background-modifier-border)}.internal-query .search-result-container{padding:var(--size-4-2);max-height:800px;overflow:auto;border:1px solid var(--background-modifier-border);background-color:var(--background-secondary);border-radius:var(--radius-m)}ol ol ul,ol ul,ol ul ul,ul ol ul,ul ul,ul ul ul{list-style-type:disc}ol{list-style-type:var(--list-numbered-style)}ol>li,ul>li{text-align:start}ol>li::marker,ul>li::marker{color:var(--list-marker-color)}ol>li.is-collapsed::marker,ul>li.is-collapsed::marker{color:var(--list-marker-color-collapsed)}.markdown-rendered ol,.markdown-rendered ul{padding-inline-start:0px;margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.markdown-rendered ol ol,.markdown-rendered ol ul,.markdown-rendered ul ol,.markdown-rendered ul ul{margin-block:0px}.markdown-rendered ol li p:first-of-type,.markdown-rendered ul li p:first-of-type{margin-block-start:0px}.markdown-rendered ol li p:last-of-type,.markdown-rendered ul li p:last-of-type{margin-block-end:0px}.markdown-rendered ol>li,.markdown-rendered ul>li{margin-inline-start:var(--list-indent);padding-top:var(--list-spacing);padding-bottom:var(--list-spacing);position:relative}.markdown-preview-view ol>li,.markdown-preview-view ul>li{padding-top:var(--list-spacing);padding-bottom:var(--list-spacing)}.markdown-rendered .list-collapse-indicator{margin-inline-start:-2.65em;padding-inline-end:2em}.markdown-rendered .list-bullet{float:inline-start;margin-inline-start:-.8em}.markdown-rendered .task-list-item>.list-bullet{display:none}.markdown-rendered ul.has-list-bullet{list-style-type:"​"}.markdown-rendered ul.has-list-bullet>li::marker{color:transparent}.list-bullet{color:transparent;position:relative;display:inline-flex;justify-content:center;align-items:center}.list-bullet::before{content:"​"}.list-bullet::after{position:absolute;content:"​";pointer-events:none;color:var(--list-marker-color);border-radius:var(--list-bullet-radius);width:var(--list-bullet-size);height:var(--list-bullet-size);border:var(--list-bullet-border);transform:var(--list-bullet-transform);background-color:var(--list-marker-color);transition:transform .15s ease 0s,box-shadow .15s ease 0s}.list-bullet::selection{background-color:transparent!important}li.is-collapsed .list-bullet::after{background-color:var(--list-marker-color-collapsed);box-shadow:0 0 0 4px var(--background-modifier-active-hover)}a{--font-weight:var(--link-weight);color:var(--link-color);font-weight:var(--link-weight);outline:0;text-decoration-line:var(--link-decoration);text-decoration-thickness:var(--link-decoration-thickness);cursor:var(--cursor-link);transition:opacity .15s ease-in-out 0s}.external-link{color:var(--link-external-color);text-decoration-line:var(--link-external-decoration);background-position:right 4px;background-repeat:no-repeat;background-image:linear-gradient(transparent,transparent),url("../../lib/media/874d8b8e340f75575caa.svg");background-size:13px;padding-inline-end:16px;cursor:var(--cursor-link);filter:var(--link-external-filter);transition:opacity .15s ease-in-out 0s}:dir(rtl) .external-link{background-position:left center;background-image:linear-gradient(transparent,transparent),url("../../lib/media/3d6c1bdc4d87cde4de67.svg")}.markdown-rendered .internal-link,.metadata-container .internal-link{cursor:var(--cursor-link);text-decoration-line:var(--link-decoration);color:var(--link-color);transition:opacity .15s ease-in-out 0s}.markdown-rendered .internal-link.mobile-tap{opacity:.5}.markdown-rendered .internal-link.is-unresolved,.metadata-container .internal-link.is-unresolved{color:var(--link-unresolved-color);opacity:var(--link-unresolved-opacity);filter:var(--link-unresolved-filter);text-decoration-style:var(--link-unresolved-decoration-style);text-decoration-color:var(--link-unresolved-decoration-color)}.inline-block{display:inline-block;vertical-align:middle}.hidden-token{display:inline;letter-spacing:-1ch;font-family:monospace;color:transparent;font-size:1px!important}.cm-s-obsidian span.hmd-hidden-token.cm-formatting-code,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-em,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-link,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough,.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong{display:inline;letter-spacing:-1ch;font-family:monospace;color:transparent;font-size:1px!important}.cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task{color:transparent!important}mjx-container{outline:0}.markdown-reading-view table{margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.cm-html-embed table,.markdown-rendered table{border-collapse:collapse;line-height:var(--table-line-height)}.markdown-rendered td,.markdown-rendered th{padding:var(--size-2-2) var(--size-4-2);border:var(--table-border-width) solid var(--table-border-color);max-width:var(--table-column-max-width);min-width:var(--table-column-min-width);vertical-align:var(--table-cell-vertical-alignment)}.markdown-rendered td{font-size:var(--table-text-size);color:var(--table-text-color)}.markdown-rendered th{font-size:var(--table-header-size);font-weight:var(--table-header-weight);color:var(--table-header-color);font-family:var(--table-header-font);line-height:var(--line-height-tight)}.markdown-rendered td,.markdown-rendered th{text-align:start}.markdown-rendered td[align=left],.markdown-rendered th[align=left]{text-align:start}.markdown-rendered td[align=center],.markdown-rendered th[align=center]{text-align:center}.markdown-rendered td[align=right],.markdown-rendered th[align=right]{text-align:end}.markdown-rendered tbody>tr>td,.markdown-rendered thead>tr>th{white-space:var(--table-white-space);text-overflow:ellipsis;overflow:hidden}.markdown-rendered tbody tr{background-color:var(--table-background)}.markdown-rendered tbody tr:nth-child(odd){background-color:var(--table-row-alt-background)}.markdown-rendered tbody tr>td:nth-child(2n+2){background-color:var(--table-column-alt-background)}.markdown-rendered tbody tr:last-child>td{border-bottom-width:var(--table-row-last-border-width)}.markdown-rendered tbody tr>td:first-child{border-left-width:var(--table-column-first-border-width)}.markdown-rendered tbody tr>td:last-child{border-right-width:var(--table-column-last-border-width)}.markdown-rendered thead tr{background-color:var(--table-header-background)}.markdown-rendered thead tr>th{border-top-width:var(--table-header-border-width);border-color:var(--table-header-border-color)}.markdown-rendered thead tr>th:nth-child(2n+2){background-color:var(--table-column-alt-background)}.markdown-rendered thead tr>th:first-child{border-left-width:var(--table-column-first-border-width)}.markdown-rendered thead tr>th:last-child{border-right-width:var(--table-column-last-border-width)}.cm-s-obsidian .HyperMD-table-row{white-space:pre;word-break:normal;overflow-wrap:normal;font-size:.95em;font-family:var(--font-monospace)}.cm-s-obsidian .HyperMD-table-rtl{direction:rtl}.cm-s-obsidian .hmd-table-column,.cm-s-obsidian .hmd-table-column-content{display:inline-block}.cm-s-obsidian .hmd-table-column-left{text-align:left}.cm-s-obsidian .hmd-table-column-center{text-align:center}.cm-s-obsidian .hmd-table-column-right{text-align:right}.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep,.cm-s-obsidian .HyperMD-table-row-1{color:var(--text-faint)}.cm-s-obsidian .HyperMD-table-row-0{color:var(--table-header-color)}.cm-s-obsidian .hmd-fold-html table{border-collapse:collapse}.cm-s-obsidian .hmd-fold-html table td,.cm-s-obsidian .hmd-fold-html table th{padding:10px;border:1px solid #ccc}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1{color:transparent;text-shadow:none}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1>span{background:url("data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=") 0 center repeat-x}.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep{color:transparent}.markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row{min-width:max-content}.markdown-source-view.mod-cm6 .cm-table-widget table{margin-bottom:0}a.tag{background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);border-radius:var(--tag-radius);color:var(--tag-color);font-size:var(--tag-size);font-weight:var(--tag-weight);text-decoration:var(--tag-decoration);padding:var(--tag-padding-y) var(--tag-padding-x);line-height:1}a.tag{background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);border-radius:var(--tag-radius);color:var(--tag-color);font-size:var(--tag-size);font-weight:var(--tag-weight);text-decoration:var(--tag-decoration);padding:var(--tag-padding-y) var(--tag-padding-x);line-height:1}input[type=checkbox]{appearance:none;border-radius:var(--checkbox-radius);border:1px solid var(--checkbox-border-color);flex-shrink:0;padding:0;margin:0;margin-inline-end:6px;width:var(--checkbox-size);height:var(--checkbox-size);position:relative;transition:box-shadow .15s ease-in-out 0s}input[type=checkbox]:active,input[type=checkbox]:focus,input[type=checkbox]:hover{outline:0;border-color:var(--checkbox-border-color-hover)}input[type=checkbox]:focus-visible{box-shadow:0 0 0 2px var(--background-modifier-border-focus)}input[type=checkbox]:checked::after{content:"";top:-1px;inset-inline-start:-1px;position:absolute;width:var(--checkbox-size);height:var(--checkbox-size);display:block;background-color:var(--checkbox-marker-color);mask-position:52% 52%;mask-size:65%;mask-repeat:no-repeat;mask-image:url("data:image/svg+xml; utf8, ")}input[type=checkbox]:checked{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}input[type=checkbox][data-indeterminate=true]:not(:checked)::after{content:"";position:absolute;top:calc(var(--checkbox-size)/ 2 - 2px);width:calc(var(--checkbox-size) - 6px);left:0;right:0;margin:0 auto;height:2px;display:block;border-radius:2px;background-color:var(--text-normal)}.task-list-item-checkbox{width:var(--checkbox-size);height:var(--checkbox-size)}.markdown-preview-view .task-list-item-checkbox{position:relative;top:.2em;margin-inline-end:.6em}ul>li.task-list-item{list-style:none}ul>li.task-list-item .task-list-item-checkbox{margin-inline-start:calc(var(--checkbox-size) * -1.5)}ul>li.task-list-item[data-task="X"],ul>li.task-list-item[data-task="x"]{text-decoration:var(--checklist-done-decoration);color:var(--checklist-done-color)}.cm-s-obsidian span.hmd-hidden-token.cm-formatting-task{color:transparent!important}b,strong{font-weight:calc(var(--font-weight) + var(--bold-modifier));color:var(--bold-color)}b a,strong a{font-weight:calc(var(--link-weight) + var(--bold-modifier))}em,i{font-style:italic;color:var(--italic-color)}.markdown-rendered p{margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing);unicode-bidi:plaintext}.markdown-rendered mark{background-color:var(--text-highlight-bg);color:var(--text-normal)}.markdown-rendered mark .internal-link{color:var(--text-normal)}.outgoing-link-pane{padding-top:var(--size-4-3)}.outgoing-link-pane{overflow-y:auto;flex:1 0 0px;padding-inline-start:var(--size-4-3);padding-inline-end:var(--size-4-3);padding-bottom:var(--size-4-8)}.outgoing-link-pane .search-result-container{padding:var(--size-4-1) 1px var(--size-4-4)}.backlink-pane>.tree-item-self,.outgoing-link-pane>.tree-item-self{color:var(--nav-heading-color);padding-inline-start:var(--size-4-2)}.backlink-pane>.tree-item-self .tree-item-inner,.outgoing-link-pane>.tree-item-self .tree-item-inner{font-weight:var(--nav-heading-weight)}.backlink-pane>.tree-item-self.is-clickable.is-collapsed,.outgoing-link-pane>.tree-item-self.is-clickable.is-collapsed{color:var(--nav-heading-color-collapsed)}.backlink-pane>.tree-item-self .collapse-icon,.outgoing-link-pane>.tree-item-self .collapse-icon{display:none}.embedded-backlinks .backlink-pane .tree-item-self{font-size:max(var(--font-ui-small),var(--font-smaller));align-items:center}.embedded-backlinks .backlink-pane>.tree-item-self{font-size:max(var(--font-ui-small),1em);width:fit-content}.embedded-backlinks .backlink-pane>.tree-item-self .tree-item-inner{margin-inline-end:var(--size-2-3)}.embedded-backlinks .backlink-pane .tree-item-flair{font-size:max(var(--font-ui-small),var(--font-smallest))}.view-action.mod-bookmarked{--icon-color:var(--icon-color-active);--icon-color-hover:var(--icon-color-active)}.nav-buttons-container.has-separator{border-bottom:1px solid var(--background-modifier-border);padding-bottom:var(--size-2-3);margin-bottom:var(--size-4-2)}.nav-files-container{flex-grow:1;overflow:hidden auto;padding:var(--size-4-1) var(--size-4-3) var(--size-4-6) var(--size-4-3);scroll-padding-block:var(--size-4-2)}.nav-file-tag{background-color:var(--background-modifier-hover);border-radius:var(--radius-s);font-size:9px;font-weight:var(--font-semibold);letter-spacing:.05em;line-height:var(--line-height-normal);margin-inline-start:var(--size-2-3);padding:0 var(--size-4-1);text-transform:uppercase;align-self:center}.nav-file-icon{display:inline-flex;align-items:center;margin-inline-end:var(--size-2-3);position:relative;color:var(--icon-color);opacity:var(--icon-opacity)}.nav-files-container:not(.show-unsupported) .is-unsupported{display:none}.nav-file-title-content,.nav-folder-title-content{display:inline-block;overflow-wrap:anywhere;overflow:hidden;white-space:var(--nav-item-white-space);text-overflow:ellipsis}.nav-folder.is-being-dragged-over{border-radius:var(--radius-s);background:hsla(var(--interactive-accent-hsl),.1)}.nav-folder.is-being-dragged-over>.nav-folder-title{color:var(--nav-item-color-highlighted)}.nav-folder.is-being-dragged-over>.nav-folder-title .collapse-icon{color:var(--nav-item-color-highlighted)}.nav-folder-title{padding:var(--nav-item-parent-padding)}.nav-file-title{padding:var(--nav-item-padding)}.nav-file-title,.nav-folder-title{margin-bottom:var(--size-2-1);display:flex;border-radius:var(--radius-s);cursor:var(--cursor);color:var(--nav-item-color);font-size:var(--nav-item-size);font-weight:var(--nav-item-weight);line-height:var(--line-height-tight)}.nav-file-title.is-active,.nav-folder-title.is-active,body:not(.is-grabbing) .nav-file-title.is-active:hover,body:not(.is-grabbing) .nav-folder-title.is-active:hover{color:var(--nav-item-color-active);background-color:var(--nav-item-background-active);font-weight:var(--nav-item-weight-active)}.nav-file-title.is-selected,.nav-folder-title.is-selected,body:not(.is-grabbing) .nav-file-title.is-selected:hover,body:not(.is-grabbing) .nav-folder-title.is-selected:hover{color:var(--nav-item-color-selected);background-color:var(--nav-item-background-selected)}.nav-file-title.is-being-dragged,.nav-folder-title.is-being-dragged,body:not(.is-grabbing) .nav-file-title.is-being-dragged,body:not(.is-grabbing) .nav-folder-title.is-being-dragged{background-color:var(--interactive-accent);color:var(--text-on-accent)}.nav-file-title.is-being-dragged .nav-folder-collapse-indicator,.nav-folder-title.is-being-dragged .nav-folder-collapse-indicator,body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-folder-collapse-indicator,body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator{color:var(--text-on-accent)}.nav-file-title.is-being-dragged .nav-file-tag,.nav-folder-title.is-being-dragged .nav-file-tag,body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-file-tag,body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag{color:var(--text-normal)}.file-tree-item-checkbox,.file-tree-item-icon{flex-shrink:0}.file-tree-item-title{flex-grow:1;word-break:break-word}.file-tree-item-icon{--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width);margin-right:var(--size-4-1);color:var(--icon-color);position:relative;top:var(--size-2-1)}.file-tree .tree-item-inner{display:flex;align-items:center;position:relative;width:100%}.file-tree .tree-item-flair{line-height:1;padding:var(--size-2-1) var(--size-2-3);color:var(--text-on-accent)}.file-tree .is-selected{color:var(--text-normal)}.file-tree .mod-changed.is-selected{background-color:hsla(var(--interactive-accent-hsl),.2)}.file-tree .mod-changed .tree-item-flair{color:var(--text-accent-hover)}.file-tree .mod-new.is-selected{background-color:rgba(var(--background-modifier-success-rgb),.2)}.file-tree .mod-new .tree-item-flair{color:var(--text-success)}.file-tree .mod-deleted.is-selected,.file-tree .mod-to-delete.is-selected{background-color:rgba(var(--background-modifier-error-rgb),.2)}.file-tree .mod-deleted .tree-item-flair,.file-tree .mod-to-delete .tree-item-flair{color:var(--text-error)}.file-tree .mod-to-delete .tree-item-flair{display:none}.file-tree .mod-to-delete.is-selected .tree-item-flair{display:block}.file-tree .clickable-icon{display:flex;--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.file-recovery-list-item-container{overflow:auto;flex:1 1 0px}.file-recovery-list{overflow:auto;padding:var(--size-4-3) var(--size-4-2);flex-grow:1;display:flex;flex-direction:column}.file-recovery-list .search-input-container{width:100%}.file-recovery-list-container{display:flex;flex-direction:column;flex-basis:250px;flex-shrink:0;border-inline-end:1px solid var(--background-modifier-border)}.graph-view.color-fill{color:var(--graph-node)}.graph-view.color-fill-focused{color:var(--graph-node-focused)}.graph-view.color-fill-tag{color:var(--graph-node-tag)}.graph-view.color-fill-attachment{color:var(--graph-node-attachment)}.graph-view.color-fill-unresolved{color:var(--graph-node-unresolved);opacity:.5}.graph-view.color-fill-1{color:var(--text-muted)}.graph-view.color-fill-2{color:var(--text-muted)}.graph-view.color-fill-3{color:var(--text-muted)}.graph-view.color-fill-4{color:var(--text-muted)}.graph-view.color-fill-5{color:var(--text-muted)}.graph-view.color-fill-6{color:var(--text-muted)}.graph-view.color-arrow{color:var(--text-normal);opacity:.5}.graph-view.color-circle{color:var(--graph-node-focused)}.graph-view.color-line{color:var(--graph-line)}.graph-view.color-text{color:var(--graph-text)}.graph-view.color-fill-highlight{color:var(--interactive-accent)}.graph-view.color-line-highlight{color:var(--interactive-accent)}.graph-controls{border-radius:var(--radius-m);position:absolute;inset-inline-end:var(--size-4-3);top:var(--size-4-3);padding:0;background-color:var(--background-primary);width:var(--graph-controls-width);overflow:auto}.graph-controls:not(.is-close){max-height:calc(100% - var(--size-4-4));border:1px solid var(--background-modifier-border);box-shadow:var(--shadow-s)}.graph-controls.is-close{min-width:inherit;width:auto;background-color:var(--background-primary);border:1px solid transparent;padding:var(--size-2-3)}.graph-controls.is-close>.graph-control-section{display:none}.graph-controls input[type=range],.graph-controls input[type=text]{width:100%;font-size:var(--font-ui-small)}.graph-controls .mod-cta{margin-top:var(--size-2-3);width:100%}.graph-controls::-webkit-scrollbar,.graph-controls::-webkit-scrollbar-thumb{display:none}.graph-color-group{--swatch-height:18px;--swatch-width:18px;position:relative;display:flex;align-items:center;padding:0 0 6px;transition:top .2s ease-in-out 0s}.graph-color-group input[type=color]{margin:0 2px 0 6px}.graph-color-group .clickable-icon{padding:var(--size-2-2)}.graph-color-button-container{text-align:center;margin-bottom:10px}.graph-color-button-container button{margin:0;width:100%}.graph-color-group.drag-ghost input[type=text]{width:100%}.graph-color-group.drag-ghost input[type=color]{margin-inline-start:6px}.graph-control-section.mod-color-groups .tree-item-children.is-grabbing .graph-color-groups-container{padding-bottom:40px}.graph-controls-button{display:none;z-index:1}.graph-controls-button.mod-close,.graph-controls-button.mod-reset{position:absolute;top:var(--size-4-2);inset-inline-end:var(--size-4-2);padding:var(--size-2-2)}.graph-controls:not(.is-close) .graph-controls-button.mod-close,.graph-controls:not(.is-close) .graph-controls-button.mod-reset{display:flex}.graph-controls-button.mod-reset{inset-inline-end:36px}.graph-controls.is-close .graph-controls-button.mod-open{display:flex}.graph-controls-button.mod-animate{margin-top:var(--size-4-2)}.graph-controls.is-close .graph-controls-button.mod-animate{display:flex}.graph-control-section{padding:var(--size-2-3) var(--size-4-3);border-bottom:1px solid var(--background-modifier-border)}.graph-control-section:last-child{border-bottom:none}.graph-control-section:last-child .tree-item-children{padding-bottom:var(--size-4-4)}.graph-control-section>.tree-item-self{padding-inline-start:var(--size-4-4)}.graph-control-section .tree-item-children{margin:0;padding:var(--size-4-1) 0;border-inline-start:none}.metadata-container{container:metadata/inline-size}.site-list-container{border-top:1px solid var(--background-modifier-border);margin-bottom:var(--size-4-4)}.site-list-container .list-item:last-child{padding-top:var(--size-4-4)}.site-list-item-name{flex-grow:1}.slug-input{text-transform:lowercase}.passwords-container{margin-bottom:var(--size-4-4)}.password-item{border-radius:var(--radius-s);padding:var(--size-4-2) var(--size-4-4);margin:var(--size-4-1) 0}.tree-item.mod-custom-nav.hidden .tree-item-self{color:var(--text-faint)}.tree-item.mod-custom-nav .tree-item-inner{display:flex;align-items:center;position:relative}.tree-list{padding:var(--size-4-4) 0}.tree-list-header{border-bottom:1px solid var(--background-modifier-border);padding:var(--size-4-2) 0;line-height:1.1;display:flex;align-items:center;justify-content:space-between}.tree-list-title{font-size:var(--font-ui-medium);font-weight:var(--font-semibold)}.tree-list-action{align-items:center;display:flex;color:var(--text-muted);font-size:var(--font-ui-small)}.search-input-container{position:relative}.search-input-container::before{top:calc((var(--input-height) - var(--search-icon-size))/ 2);inset-inline-start:var(--size-4-2);position:absolute;content:"";height:var(--search-icon-size);width:var(--search-icon-size);display:block;background-color:var(--search-icon-color);mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat}.search-input-container input{display:block;width:100%;padding-inline-start:36px}.search-input-clear-button{position:absolute;background:0 0;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:0;inset-inline-end:2px;bottom:0;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color .15s ease-in-out 0s}.search-input-clear-button::after{content:"";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentcolor;mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat}.search-input-clear-button:active,.search-input-clear-button:hover{color:var(--text-normal);transition:color .15s ease-in-out 0s}.search-input-suggest-button{position:absolute;left:0;top:0;color:var(--text-faint);cursor:var(--cursor);padding:var(--size-4-1) var(--size-4-2);opacity:0;z-index:10}.search-result-container{padding:var(--size-4-3) var(--size-4-3) var(--size-4-4);position:relative;flex:1 0 0px}.search-result-container.mod-global-search{overflow-y:auto}.search-result-container::before{content:" ";position:absolute;top:0;width:0;height:3px}.search-suggest-info-text{color:var(--text-muted);margin-inline-start:4px}.search-suggest-icon{padding:4px;border-radius:var(--radius-s)}.search-suggest-icon{align-items:center;display:flex}.search-suggest-item{padding:var(--size-4-1) var(--size-4-2);border-radius:var(--radius-s)}.search-suggest-item.mod-group{align-items:center;margin:0;color:var(--text-muted);padding:0 0 0 var(--size-4-2);cursor:default;font-weight:var(--font-semibold);font-size:var(--font-ui-smaller);border-radius:0}.search-suggest-item.mod-group:not(:first-child){border-top:1px solid var(--background-modifier-border);margin-top:6px;padding-top:6px;padding-inline:14px 6px;padding-bottom:0;margin-inline-end:-6px}.search-suggest-item.mod-group.is-selected,.search-suggest-item.mod-group:hover{background-color:initial}.search-empty-state{color:var(--text-faint);font-size:var(--font-ui-small);margin:0 0 var(--size-4-3);padding-inline-start:var(--size-4-2)}.search-result{word-break:break-word}.search-result:not(.is-collapsed) .search-result-file-title{color:var(--nav-item-color-active)}.search-result-file-matches{font-size:var(--font-ui-smaller);line-height:var(--line-height-tight);background-color:var(--search-result-background);border-radius:var(--radius-s);overflow:hidden;margin:var(--size-4-1) 0 var(--size-4-2);color:var(--text-muted);box-shadow:0 0 0 1px var(--background-modifier-border)}.search-result-file-matches:empty{display:none}.search-info-more-matches{color:var(--text-faint)}.search-result-file-match{cursor:var(--cursor);position:relative;padding:var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3);white-space:pre-wrap;width:100%;border-bottom:1px solid var(--background-modifier-border)}.search-result-file-match:last-child{border-bottom:none}.search-result-file-match:hover .search-result-file-match-replace-button{display:block}.search-result-file-match-replace-button{display:none;position:absolute;height:auto;bottom:5px;inset-inline-end:24px;padding:var(--size-4-1) var(--size-4-2);color:var(--text-muted);font-size:var(--font-ui-smaller)}.search-result-hover-button{position:absolute;display:flex;inset-inline-end:2px;border-radius:var(--radius-s);color:var(--text-faint);padding:1px 3px}.search-result-hover-button.mod-top{top:2px}.search-result-hover-button.mod-bottom{bottom:2px}.search-result-file-matched-text{color:var(--text-normal);background-color:var(--text-highlight-bg)}.search-info-container{color:var(--text-muted);padding:var(--size-4-1) var(--size-4-4) var(--size-4-2);font-size:var(--font-ui-smaller)}.search-info-children{padding-inline-start:20px;border-inline-start:1px solid var(--background-modifier-border);margin:1px 0}.copy-search-result-container{display:flex;flex-direction:column}.copy-search-result-textarea{height:300px;max-height:20vh;resize:none}.search-result-file-match-destination-file-container{display:flex;flex-wrap:wrap;margin-top:var(--size-2-3);gap:var(--size-2-1)}.search-result-file-match-destination-file{display:inline-flex;background-color:var(--interactive-normal);border-radius:var(--radius-s);box-shadow:var(--input-shadow);color:var(--text-muted);padding:var(--size-2-2) var(--size-2-3)}.search-result-file-match-destination-file-icon{--icon-size:var(--icon-xs);--icon-stroke:var(--icon-xs-stroke-width);margin-inline-end:var(--size-4-1);display:flex;color:var(--text-faint)}.search-result-file-match-destination-file-icon .svg-icon{align-self:center}.search-result-file-match-destination-file-name{white-space:pre-wrap;word-break:break-all}body:not(.is-phone) .workspace-leaf.mod-active .search-result.has-focus .tree-item-self{border-radius:var(--radius-s);box-shadow:inset 0 0 0 2px var(--background-modifier-border-focus)}.search-results-info{color:var(--text-muted);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--background-modifier-border);margin:0;min-width:0;padding:0 var(--size-4-3) var(--size-4-2);white-space:nowrap}.search-results-result-count{font-size:var(--font-ui-smaller);font-variant-numeric:tabular-nums}.search-row{display:flex;margin:var(--size-4-3) var(--size-4-3) var(--size-4-2);gap:var(--size-4-1)}.search-params{margin:var(--size-4-1) var(--size-4-4)}.search-params input[type=range],.search-params input[type=text]{width:100%;font-size:var(--font-ui-small)}.search-params .mod-cta{margin-top:var(--size-2-3);width:100%}.search-params::-webkit-scrollbar,.search-params::-webkit-scrollbar-thumb{display:none}.global-search-input-container{flex-grow:1}.more-options-icon{--icon-size:10px;background-color:var(--icon-color);border-radius:50%;color:var(--background-secondary);display:flex;margin-inline-start:var(--size-2-3);opacity:var(--icon-opacity);padding:.5px}.clickable-icon:hover .more-options-icon{background-color:var(--icon-color-hover);opacity:var(--icon-opacity-hover)}.slides-container{position:fixed;top:0;inset-inline-start:0px;height:100vh;width:100vw;transition:-webkit-transform .8s ease 0s;background-color:#191919;z-index:var(--layer-slides);border:none}.slides-container li .collapse-indicator{display:none}.slides-close-btn{display:inline-block;position:absolute;top:var(--size-4-2);inset-inline-end:var(--size-4-2);color:var(--text-faint);cursor:var(--cursor);z-index:1}.reveal input[type=checkbox]{width:24px;height:24px}.reveal .footnote-item,.reveal .task-list-item{list-style:none}.reveal .task-list-item{margin-inline-start:-1.5em}.sync-history-list-item-header .tree-item-flair{padding:var(--size-4-1)}.mod-selectable{cursor:var(--cursor);padding:var(--size-4-2) var(--size-4-4);border-radius:var(--radius-m)}.sync-file-tree-container{max-height:calc(min(90vh,var(--modal-max-height)) - 250px);overflow:auto}.recent-changes-container{padding:var(--size-4-3) var(--size-4-3) var(--size-4-8);overflow:hidden auto}.recent-changes-container .nav-folder-title{font-weight:var(--nav-heading-weight);color:var(--nav-heading-color)}.recent-changes-container .nav-folder-title:hover{font-weight:var(--nav-heading-weight)!important}.recent-changes-container .nav-folder-title .collapse-icon{display:none}.recent-changes-container .tree-item.nav-folder.is-collapsed .nav-folder-title{color:var(--nav-heading-color-collapsed)}.recent-changes-container .nav-folder-children{margin-bottom:var(--size-4-4)}.recent-changes-container .nav-file-title,.recent-changes-container .nav-folder-title{padding-inline-start:var(--size-4-2)}.recent-changes-container .tree-item-children{border-inline-start:unset;padding-inline-start:0px;margin-inline-start:0}.tag-pane-tag.is-active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.tag-pane-tag.is-active .tag-pane-tag-count{background-color:var(--background-modifier-hover);color:var(--text-normal)}.tag-container{font-size:var(--font-ui-small);padding:var(--size-4-3) var(--size-4-3) var(--size-4-8);overflow:auto}.tree-item-children .tag-pane-tag .tag-pane-tag-parent{display:none}body:not(.is-phone) .workspace-leaf.mod-active .tree-item.has-focus>.tag-pane-tag{border-radius:var(--radius-s);box-shadow:0 0 0 2px var(--background-modifier-border-focus)}.mod-canvas-color-1{--canvas-color:var(--canvas-color-1)}.mod-canvas-color-2{--canvas-color:var(--canvas-color-2)}.mod-canvas-color-3{--canvas-color:var(--canvas-color-3)}.mod-canvas-color-4{--canvas-color:var(--canvas-color-4)}.mod-canvas-color-5{--canvas-color:var(--canvas-color-5)}.mod-canvas-color-6{--canvas-color:var(--canvas-color-6)}body{--canvas-color:192,192,192}body.theme-dark{--canvas-color:126,126,126}.canvas-wrapper{position:absolute;width:100%;height:100%;left:0;top:0;--resizer-size:20px;--shadow-stationary:0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1);--shadow-drag:0px 2px 10px rgba(0, 0, 0, 0.1);--shadow-border-accent:0 0 0 2px var(--color-accent);--zoom-multiplier:1;background-color:var(--canvas-background);overflow:hidden;contain:strict;touch-action:none;user-select:none}.canvas-wrapper.is-dragging{cursor:grabbing}.canvas-wrapper.is-dragging iframe:not(.is-controlled),.canvas-wrapper.is-dragging webview{pointer-events:none}.canvas-wrapper.is-screenshotting{z-index:999999}.canvas-wrapper.is-screenshotting .canvas-controls{display:none!important}.canvas-wrapper.is-screenshotting *{pointer-events:none!important}.canvas-mover{position:absolute;width:100%;height:100%;left:0;top:0;cursor:grab}.canvas-mover:active{cursor:grabbing}.canvas-background{position:absolute;width:100%;height:100%;left:0;top:0;pointer-events:none}.canvas-background circle{fill:var(--canvas-dot-pattern)}.canvas{position:absolute;width:100%;height:100%;left:0;top:0;transform-origin:0px 0px;pointer-events:none}.canvas>*{pointer-events:initial}.canvas-selection{pointer-events:none;position:absolute;background-color:hsla(var(--color-accent-hsl),.1);border:2px solid var(--color-accent);z-index:-1}.canvas-selection.mod-group-selection{border-width:3px;border-radius:3px;background-color:hsla(var(--color-accent-hsl),.03);border-color:hsla(var(--color-accent-hsl),.3);pointer-events:initial}.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection:active{cursor:grabbing}.canvas-selection.mod-node-highlight{border-radius:var(--radius-m)}.canvas-controls{display:flex;position:absolute;z-index:var(--layer-cover);font-size:var(--font-ui-medium)}.canvas-controls{right:var(--size-4-2);top:var(--size-4-2);gap:var(--size-4-2);display:flex;flex-direction:column}.canvas-control-group{border-radius:var(--radius-s);background-color:var(--background-primary);border:1px solid var(--background-modifier-border);box-shadow:var(--input-shadow);display:flex;flex-direction:column;overflow:hidden}.canvas-control-item{border-radius:0;box-shadow:none;height:auto;display:flex;line-height:1;font-size:inherit;align-items:center;justify-content:center;cursor:var(--cursor);padding:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border);color:var(--text-muted);background-color:var(--interactive-normal);--icon-size:var(--icon-s);--icon-stroke:var(--icon-s-stroke-width)}.canvas-control-item:last-child{border-bottom:none}.canvas-control-item.is-active{color:var(--color-accent)}.canvas-control-item.is-disabled svg{color:var(--text-faint)}.canvas-control-item svg{pointer-events:none}.canvas-node-container{background-color:var(--background-primary);border-radius:var(--radius-m);border:2px solid rgb(var(--canvas-color));contain:strict;display:flex;flex-direction:column;overflow:hidden;position:absolute;left:0;top:0;width:100%;height:100%;box-shadow:var(--shadow-stationary)}.canvas-node-label{position:absolute;left:0;top:calc(-1 * var(--size-4-1) * var(--zoom-multiplier));transform:translate(0,-100%) scale(var(--zoom-multiplier));transform-origin:left bottom;max-width:calc(100% / var(--zoom-multiplier));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--canvas-card-label-color);--icon-size:1em}body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-node-label{transition:transform .5s cubic-bezier(.16, 1, .3, 1) 0s}.canvas-node-label svg{position:relative;top:2px;margin-right:var(--size-4-1)}.canvas-node-label.mod-hover-label{opacity:0}.canvas-wrapper.mod-zoomed-out .canvas-node-label{display:none}.canvas-node-placeholder{display:flex;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;overflow:hidden;overflow-wrap:anywhere;padding:var(--size-4-6);font-size:32px;font-weight:var(--font-semibold)}.canvas-node-placeholder::after{border-radius:var(--radius-s);content:" ";display:block;position:absolute;top:var(--size-4-4);right:var(--size-4-4);bottom:var(--size-4-4);left:var(--size-4-4);background-color:rgba(var(--canvas-color),.1)}.canvas-icon-placeholder{display:flex;width:40%;height:40%}.canvas-icon-placeholder svg{opacity:.3;color:rgb(var(--canvas-color));width:100%;height:100%}.canvas-node-interaction-layer{position:absolute;width:0;height:0;pointer-events:none}.canvas-node-interaction-layer>*{pointer-events:initial}.canvas-node{--shadow-border-themed-inset:inset 0 0 0 1px rgb(var(--canvas-color));--shadow-border-themed:0 0 0 2px rgb(var(--canvas-color));position:absolute;width:0;height:0}.canvas-node.is-dragging{pointer-events:none}.canvas-node.is-dragging .canvas-node-container{box-shadow:var(--shadow-drag)}.canvas-node.is-focused,.canvas-node.is-selected{touch-action:initial}.canvas-node.is-focused .canvas-node-label,.canvas-node.is-selected .canvas-node-label{color:var(--text-muted)}.canvas-node.is-focused .canvas-node-container,.canvas-node.is-selected .canvas-node-container{border-color:var(--color-accent);box-shadow:var(--shadow-stationary),var(--shadow-border-accent)}.canvas-node.is-focused.is-dragging .canvas-node-container,.canvas-node.is-selected.is-dragging .canvas-node-container{box-shadow:var(--shadow-drag),var(--shadow-border-accent)}.canvas-node.is-themed .canvas-node-container{border-color:rgba(var(--canvas-color),.7);box-shadow:inset 0 0 0 1px rgba(var(--canvas-color),.7),var(--shadow-stationary)}.canvas-node.is-focused.is-themed .canvas-node-container,.canvas-node.is-selected.is-themed .canvas-node-container{border-color:rgb(var(--canvas-color));box-shadow:var(--shadow-border-themed-inset),var(--shadow-border-themed)}.canvas-node.is-focused.is-themed.is-dragging .canvas-node-container,.canvas-node.is-selected.is-themed.is-dragging .canvas-node-container{box-shadow:var(--shadow-border-themed-inset),var(--shadow-border-themed)}.canvas-node.is-dummy{cursor:grabbing}.canvas-node.is-dummy .canvas-node-container{border:4px solid var(--color-accent);box-shadow:rgba(0,0,0,.15) 0 2px 10px;background-color:hsla(var(--color-accent-hsl),.2)}.canvas-node.is-focused:not(.is-dragging) .canvas-node-content-blocker{display:none}.canvas-node-content-blocker{position:absolute;width:100%;height:100%;left:0;top:0;z-index:var(--layer-cover)}.canvas-node-group:not(.is-focused):not(.is-selected){pointer-events:none}.canvas-node-group .canvas-node-resizer{pointer-events:initial}.canvas-node-group .canvas-node-container{background-color:transparent}.canvas-node-group .canvas-node-content{background-color:rgba(var(--canvas-color),.07)}.canvas-group-label{position:absolute;left:0;top:calc(-1 * var(--size-4-1) * var(--zoom-multiplier));transform:translate(0,-100%) scale(var(--zoom-multiplier));transform-origin:left bottom;max-width:calc(100% / var(--zoom-multiplier));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:initial;font-size:1.5em;padding:var(--size-4-1) var(--size-4-2);border-radius:var(--radius-s);color:var(--text-muted);background-color:rgba(var(--canvas-color),.1);line-height:1}body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label{transition:transform .5s cubic-bezier(.16, 1, .3, 1) 0s}.canvas-wrapper:not(.mod-readonly) .canvas-group-label{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-group-label:active{cursor:grabbing}.canvas-group-label[contenteditable=true]{cursor:text;background-color:var(--background-primary);box-shadow:0 0 0 2px rgb(var(--canvas-color));color:var(--text-normal);text-overflow:initial}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]){background-color:rgb(var(--canvas-color))}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]).mod-foreground-light{color:var(--text-on-accent)}.canvas-node-group.is-themed .canvas-group-label:not([contenteditable=true]).mod-foreground-dark{color:var(--text-on-accent-inverted)}.canvas-node-content{backface-visibility:hidden;width:100%;height:100%;overflow:hidden;position:relative}.canvas-node-content.markdown-embed{border:none;padding:0}.canvas-node-content.markdown-embed .inline-title{cursor:text}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{padding:0 var(--size-4-6);display:flex;flex-direction:column}.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{user-select:none}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view::after,.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view::before{content:" ";display:block;min-height:min(calc(var(--canvas-node-height) * .1 - 3px),var(--size-4-6));max-height:var(--size-4-4);flex:1 1 0px}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view>.markdown-preview-sizer{flex:1 0 0px}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .callout{mix-blend-mode:normal}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .markdown-preview-pusher+div>:first-child{margin-top:0}.canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view .markdown-preview-sizer>div:last-child>:last-child{margin-bottom:0}.is-focused .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{transform:translateZ(0)}.canvas-node.is-themed .canvas-node-content{background-color:rgba(var(--canvas-color),.07)}.canvas-node-content.media-embed{justify-content:center;align-items:center;display:flex}.canvas-node-content.media-embed audio,.canvas-node-content.media-embed img,.canvas-node-content.media-embed video{flex-shrink:0;flex-grow:1}.canvas-node-content.media-embed audio,.canvas-node-content.media-embed img:not([width]),.canvas-node-content.media-embed video{max-width:100%}.canvas-node-resizer{position:absolute;height:calc(var(--resizer-size) * var(--zoom-multiplier));width:calc(var(--resizer-size) * var(--zoom-multiplier))}.is-selected .canvas-node-resizer{pointer-events:none}.canvas-wrapper.mod-readonly .canvas-node-resizer{display:none}.canvas-node-resizer[data-resize=top]{left:0;right:0;width:auto;top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ns-resize}.canvas-node-resizer[data-resize=bottom]{left:0;right:0;width:auto;bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ns-resize}.canvas-node-resizer[data-resize=left]{top:0;bottom:0;height:auto;left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ew-resize}.canvas-node-resizer[data-resize=right]{top:0;bottom:0;height:auto;right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:ew-resize}.canvas-node-resizer[data-resize=topright]{right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nesw-resize}.canvas-node-resizer[data-resize=bottomright]{right:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nwse-resize}.canvas-node-resizer[data-resize=topleft]{left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);top:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nwse-resize}.canvas-node-resizer[data-resize=bottomleft]{left:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);bottom:calc(var(--resizer-size) * var(--zoom-multiplier) * -.5);cursor:nesw-resize}.canvas-node-connection-point{width:calc(var(--resizer-size) * var(--zoom-multiplier));height:calc(var(--resizer-size) * var(--zoom-multiplier));position:absolute;pointer-events:all;cursor:pointer}.canvas-node-connection-point[data-side=top]{top:1px;left:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=right]{right:1px;top:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=bottom]{bottom:1px;left:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point[data-side=left]{left:1px;top:calc(50% - var(--resizer-size) * var(--zoom-multiplier)/ 2)}.canvas-node-connection-point::after{content:" ";background-color:var(--color-accent);border-radius:50%;border:3px solid var(--background-modifier-border);box-sizing:border-box;display:block;height:calc(var(--resizer-size) * var(--zoom-multiplier));opacity:0;position:relative;width:calc(var(--resizer-size) * var(--zoom-multiplier));left:0;top:0}.canvas-node-resizer:hover .canvas-node-connection-point::after{opacity:1}.canvas-snaps{position:absolute;width:100%;height:100%;left:0;top:0;overflow:visible;pointer-events:none;opacity:.6}.canvas-snaps line{stroke-width:1px;stroke:var(--color-accent)}.canvas-snaps circle{fill:var(--color-accent)}.canvas-edges{position:absolute;width:100%;height:100%;left:0;top:0;overflow:visible;pointer-events:none}.canvas-edges>*{pointer-events:initial}.canvas-edges path.canvas-display-path{pointer-events:none;stroke-width:calc(3px * var(--zoom-multiplier));stroke:rgb(var(--canvas-color));fill:none;transition:stroke-width .1s ease-out 0s}.canvas-edges path.canvas-interaction-path{pointer-events:stroke;stroke-width:calc(24px * var(--zoom-multiplier));stroke-linecap:round;stroke:transparent;fill:none;transition:stroke .1s ease-out 0s}.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path{cursor:grab}.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path:active{cursor:grabbing}.canvas-edges polygon.canvas-path-end{pointer-events:none;stroke:rgb(var(--canvas-color));fill:rgb(var(--canvas-color));stroke-linecap:round;stroke-linejoin:round;stroke-width:1px;transform-box:fill-box;transform:scale(var(--zoom-multiplier));transform-origin:center top}.canvas-edges g.is-focused path.canvas-display-path,.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-display-path{stroke-width:calc(5.5px * var(--zoom-multiplier))}.canvas-edges g.is-focused path.canvas-interaction-path,.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-interaction-path{stroke:rgba(var(--canvas-color),0.1)}.canvas-path-label-wrapper{position:absolute;width:fit-content;height:fit-content}.canvas-path-label{font-size:calc(var(--font-ui-large) * var(--zoom-multiplier));background-color:var(--background-primary);border-radius:var(--radius-s);padding:calc(var(--size-2-3) * var(--zoom-multiplier));line-height:var(--line-height-tight);white-space:pre-wrap;transform:translate(-50%,-50%);text-align:center;max-width:calc(17em * var(--zoom-multiplier))}.canvas-color-picker-item{cursor:var(--cursor);width:24px;height:24px;margin:2px;border-radius:12px;border:2px solid var(--background-primary);background-color:rgb(var(--canvas-color))}.canvas-color-picker-item.is-active{box-shadow:0 0 0 2px rgb(var(--canvas-color))}.canvas-color-picker-item input[type=color]{margin:-4px 0 0 -2px;--swatch-width:20px;--swatch-height:20px;opacity:0}.canvas-color-picker-item.canvas-color-picker-custom:not(.is-active){background:conic-gradient(var(--color-red),var(--color-yellow),var(--color-green),var(--color-blue),var(--color-purple),var(--color-red))}.canvas-empty-embed-container{align-items:center;display:flex;flex-direction:column;gap:var(--size-4-6);justify-content:center;height:100%;padding:var(--size-4-3);text-align:center}.canvas-empty-embed-action-list{display:flex;flex-direction:column;gap:var(--size-4-3)}.canvas-empty-embed-action-list button{font-size:var(--font-text-size);padding:var(--size-4-5) var(--size-4-9)}.canvas-help{display:flex;flex-direction:column;gap:var(--size-4-3)}.canvas-instruction{display:flex;justify-content:space-between}.canvas-instruction-desc{display:flex;gap:var(--size-4-1)}.canvas-minimap{width:100%;height:100%;padding:var(--size-4-1)}.inline-embed>.canvas-minimap{max-height:var(--embed-canvas-max-height)}.canvas-minimap rect{stroke-width:5px;stroke:var(--background-modifier-border);fill:var(--background-modifier-border);fill-opacity:0.65}.canvas-minimap rect.is-themed{stroke:rgb(var(--canvas-color));fill:rgb(var(--canvas-color));fill-opacity:0.5}.canvas-minimap path{stroke:rgb(192,192,192);fill:none}.canvas-minimap path.is-themed{stroke:rgb(var(--canvas-color))}.canvas-cursor{position:absolute;width:1px;height:1px;border:5px solid var(--color-accent);border-radius:5px;pointer-events:none}.canvas-watermark *{font-family:var(--font-default)!important}.browser-favicon-container{display:flex;align-items:center}.browser-favicon-container>*{height:var(--icon-size);max-width:var(--icon-size)}.view-action.mod-browser{--icon-color:var(--icon-color-active);--icon-color-hover:var(--icon-color-active)}.browser-container{height:100%;display:flex;flex-direction:column}.browser-address{width:100%;display:flex;margin:0 2px}.browser-address input{flex-grow:1;min-width:50px}.browser-address-container{padding:0 var(--size-4-2)}.browser-address-container::after{background:0 0!important}.view-content.browser-content{padding:0}.browser-content{border-top:1px solid var(--divider-color);height:100%;display:flex;flex-direction:column}.browser-content webview{flex-grow:1;width:100%}.browser-content .reader-mode-content{overflow-y:auto}.browser-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.browser-content .markdown-preview-view .external-link{background-image:none;padding-right:0}.browser-content .error-notice{max-width:var(--file-line-width);margin:25% auto 0;padding:var(--file-margins)}.browser-history-view-item{text-wrap:nowrap;overflow:hidden}textarea.browser-adblock-lists{flex-grow:1}.starter{user-select:none;padding-top:0!important}.starter-screen{display:flex;flex-direction:column;background-color:var(--background-primary);width:100%;height:100%}.starter-screen-inner{flex-grow:1;display:flex;height:calc(100% - 24px)}.splash{align-items:center;background-color:var(--background-primary);display:flex;flex-direction:column;justify-content:center;flex:1 1 auto;text-align:center;padding:36px 0 0}.splash-brand{flex:0 0 content;padding:20px 0}.splash-brand-logo-text{margin-top:20px;color:#fff}.splash-brand-version{color:var(--text-muted);margin-top:8px;font-size:var(--font-ui-small)}.help-options-container{flex:1 0 0px;overflow:auto;width:100%;max-width:82%;text-align:start;padding:var(--size-4-6) 0}.help-options-container::-webkit-scrollbar{display:none}.open-vault-options-container::-webkit-scrollbar{display:none}.open-vault-options input[type=text]{width:150px}.open-vault-options.mod-login input[type=text]{width:250px}.quick-start-container{margin-bottom:10px}.quick-start-container button{font-size:var(--font-ui-medium);padding:8px 60px}.open-folder-input[type=text]{font-size:var(--font-ui-small);width:200px;height:28px}.browse-folder-button{margin-left:10px}.open-folder-button{margin-top:14px;padding:6px 36px}.starter .notice{top:38px}.recent-vaults-list-item-name[contenteditable]{cursor:text;border-color:var(--interactive-accent);background-color:var(--background-modifier-hover);font-size:.9em;padding:0 var(--size-4-1)}:root{--safe-area-inset-top:env(safe-area-inset-top);--safe-area-inset-bottom:env(safe-area-inset-bottom);--safe-area-inset-left:env(safe-area-inset-left);--safe-area-inset-right:env(safe-area-inset-right)}body.hide-cursor{caret-color:transparent!important}.is-tablet{--nav-item-padding:var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6);--tab-font-size:var(--font-ui-smaller);--system-status-background:var(--titlebar-background)}.is-tablet.theme-dark{--titlebar-background:var(--background-primary);--titlebar-background-focused:var(--background-primary);--interactive-normal:var(--background-modifier-border);--interactive-hover:var(----background-modifier-border-hover);--modal-background:var(--background-secondary)}.is-mobile .tree-item .tree-item-self{padding-inline-end:var(--size-4-2)}.is-mobile input[type=text]{width:100%}.is-mobile .markdown-rendered pre:not(:hover)>button.copy-code-button{display:block}.is-mobile .markdown-rendered button.copy-code-button{width:auto}.is-mobile .markdown-rendered .heading-collapse-indicator{margin-inline-start:-20px}.is-tablet button:not(.clickable-icon){padding:var(--size-4-1) var(--size-4-5)}.mod-fade{--scroll-fade-offset-right:0;--scroll-fade-offset-left:0}.mod-fade:not(.mod-at-start)::before{content:" ";position:absolute;top:0;z-index:1;left:var(--scroll-fade-offset-left);width:30px;height:100%;background:linear-gradient(to right,var(--background-primary),transparent)}.mod-fade:not(.mod-at-end)::after{content:" ";position:absolute;top:0;right:var(--scroll-fade-offset-right);width:30px;height:100%;background:linear-gradient(to right,transparent,var(--background-primary))}.is-tablet .mod-left-split-toggle{display:none}.is-tablet .horizontal-tab-nav-item,.is-tablet .vertical-tab-nav-item{padding:var(--size-4-2) var(--size-4-3)}.is-tablet .modal.mod-settings .vertical-tab-header{max-width:none}.is-tablet.theme-dark .community-item,.is-tablet.theme-dark .vertical-tab-content{background-color:var(--background-secondary)}body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner{padding-left:var(--ribbon-width)}.workspace-drawer .nav-buttons-container::-webkit-scrollbar,.workspace-drawer .nav-buttons-container::-webkit-scrollbar-thumb,.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar,.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar-thumb{visibility:hidden}.workspace-drawer-ribbon::-webkit-scrollbar,.workspace-drawer-ribbon::-webkit-scrollbar-thumb{visibility:hidden;width:0}body.is-tablet .sidebar-toggle-button{--icon-color:var(--interactive-accent);--icon-color-hover:var(--interactive-accent);--icon-color-active:var(--interactive-accent-hover);--icon-color-focus:var(--interactive-accent-hover);--icon-size:var(--icon-l);--icon-stroke:var(--icon-l-stroke-width)}body.is-tablet .sidebar-toggle-button.mod-left{padding-left:var(--size-4-2)}body.is-tablet .mobile-navbar{display:none}.is-mobile .prompt-input[type=text]{padding:var(--size-4-4)}.is-phone .prompt-input[type=text]{border:none}.pull-action{position:absolute;background-color:var(--background-secondary);z-index:var(--layer-popover);color:var(--text-muted);font-size:90%;transition:background-color 150ms ease-in-out 0s}.pull-action.mod-activated{background-color:var(--interactive-accent);color:var(--text-on-accent)}.pull-down-action{top:0;left:0;right:0;width:96%;max-width:500px;margin:var(--safe-area-inset-top) auto 0 auto;padding:var(--size-4-3) var(--size-4-4);text-align:center;border-radius:40px}.pull-out-action{top:50%;padding:var(--size-4-3) var(--size-4-4);border-radius:40px;margin:0 var(--size-4-4)}.is-tablet{--toolbar-option-width:50px}.is-tablet.is-ios .mobile-toolbar{padding-bottom:var(--safe-area-inset-bottom)}.mobile-toolbar-options-list::-webkit-scrollbar{width:0!important;height:0!important}.is-tablet.theme-dark .suggestion-container{background-color:var(--background-secondary)}.is-mobile .file-tree .tree-item-self{font-size:var(--font-ui-small)}.markdown-preview-view .heading-collapse-indicator{margin-left:calc(0px - var(--collapse-arrow-size) - 10px)!important;padding:0 0!important}.node-insert-event{animation-duration:unset!important;animation-name:none!important}hr{border:none;border-top:var(--hr-thickness) solid;border-color:var(--hr-color)}.cm-fold-indicator.is-collapsed .collapse-indicator,.cm-gutterElement .is-collapsed .collapse-indicator,.cm-gutterElement:hover .collapse-indicator,.cm-line:hover .cm-fold-indicator .collapse-indicator,.collapse-indicator:hover,.fold-gutter.is-collapsed,.fold-gutter:hover,.is-collapsed .collapse-indicator,.metadata-properties-heading:hover .collapse-indicator,h1:hover .collapse-indicator,h2:hover .collapse-indicator,h3:hover .collapse-indicator,h4:hover .collapse-indicator,h5:hover .collapse-indicator,h6:hover .collapse-indicator{opacity:1;transition:opacity .15s ease-in-out}.collapse-indicator,.fold-gutter{opacity:0;transition:opacity .15s ease-in-out}@media print{html body>:not(.print){display:unset!important}.collapse-indicator{display:none!important}.is-collapsed>element>.collapse-indicator{display:unset!important}}.mod-header .metadata-container{display:none!important}.markdown-embed .heading-collapse-indicator{translate:-1em 0}.markdown-embed.internal-embed.inline-embed .markdown-embed-content,.markdown-embed.internal-embed.inline-embed .markdown-embed-content .markdown-preview-view{overflow:visible!important}.markdown-embed-link{display:none!important}.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed>.markdown-embed-content>.markdown-preview-view{user-select:text!important}.canvas-card-menu{display:none;cursor:default!important}.canvas-controls{display:none;cursor:default!important}.canvas-background{pointer-events:visible!important;cursor:grab!important}.canvas-background:active{cursor:grabbing!important}.canvas-node-connection-point{display:none;cursor:default!important}.canvas-node-content{backface-visibility:visible!important}.canvas-menu-container{display:none}.canvas-node-content-blocker{cursor:pointer!important}.canvas-wrapper{position:relative;cursor:default!important}.canvas-node-resizer{cursor:default!important}.canvas-node-container{cursor:default!important}.markdown-rendered pre:not(:hover)>button.copy-code-button{display:unset;opacity:0}.markdown-rendered pre:hover>button.copy-code-button{opacity:1}.markdown-rendered pre button.copy-code-button{transition:opacity .2s ease-in-out,width .3s ease-in-out,background-color .2s ease-in-out;text-overflow:clip}.markdown-rendered pre>button.copy-code-button:hover{background-color:var(--interactive-normal)}.markdown-rendered pre>button.copy-code-button:active{background-color:var(--interactive-hover);box-shadow:var(--input-shadow);transition:none}.webpage-container .is-collapsed .collapse-indicator svg.svg-icon,.webpage-container .is-collapsed .list-collapse-indicator svg.svg-icon{color:var(--collapse-icon-color-collapsed)} \ No newline at end of file diff --git a/.server/lib/styles/supported-plugins.css b/.server/lib/styles/supported-plugins.css new file mode 100644 index 0000000..9b19c27 --- /dev/null +++ b/.server/lib/styles/supported-plugins.css @@ -0,0 +1 @@ +label.svelte-zh5x8.svelte-zh5x8{min-width:4em;width:4em;display:inline-flex;flex-direction:row;justify-content:flex-end}ul.svelte-zh5x8.svelte-zh5x8{flex-grow:1;display:inline-flex;flex-direction:column;list-style-type:none;margin-block:0px;margin-inline:0px;padding-inline-start:0px}li.svelte-zh5x8.svelte-zh5x8{padding:var(--size-2-1) var(--size-4-1);display:inline-flex;flex-grow:1;align-items:center;justify-content:flex-end;gap:var(--size-4-2)}li.svelte-zh5x8 input.svelte-zh5x8{min-width:10em}button.iconbutton.svelte-zh5x8.svelte-zh5x8{max-width:4em}.buttonsWrap.svelte-if2qsj.svelte-if2qsj{padding-bottom:4px}h3.svelte-if2qsj.svelte-if2qsj{position:sticky;top:0;background-color:var(--modal-background)}.labelrow.svelte-if2qsj.svelte-if2qsj{margin-left:.4em;display:flex;justify-content:flex-start;align-items:center;border-top:1px solid var(--background-modifier-border);padding:4px;flex-wrap:wrap}.filerow.svelte-if2qsj.svelte-if2qsj{margin-left:1.25em;display:flex;justify-content:flex-start;align-items:center;padding-right:4px;flex-wrap:wrap}.filerow.hideeven.svelte-if2qsj.svelte-if2qsj:has(.even),.labelrow.hideeven.svelte-if2qsj.svelte-if2qsj:has(.even){display:none}.noterow.svelte-if2qsj.svelte-if2qsj{min-height:2em;display:flex}button.status.svelte-if2qsj.svelte-if2qsj{flex-grow:0;margin:2px 4px;min-width:3em;max-width:4em}.statusnote.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:flex-end;padding-right:var(--size-4-12);align-items:center;min-width:10em;flex-grow:1}.list.svelte-if2qsj.svelte-if2qsj{overflow-y:auto}.title.svelte-if2qsj.svelte-if2qsj{color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto}.body.svelte-if2qsj.svelte-if2qsj{margin-left:auto;display:flex;justify-content:flex-start;align-items:center}.filetitle.svelte-if2qsj.svelte-if2qsj{color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto}.buttons.svelte-if2qsj.svelte-if2qsj{display:flex;flex-flow:wrap;justify-content:flex-end;margin-top:8px}.buttons.svelte-if2qsj>button.svelte-if2qsj{margin-left:4px;width:auto}label.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:center;align-items:center}label.svelte-if2qsj>span.svelte-if2qsj{margin-right:.25em}.is-mobile .filetitle.svelte-if2qsj.svelte-if2qsj,.is-mobile .title.svelte-if2qsj.svelte-if2qsj{width:100%}.center.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:center;align-items:center;min-height:3em}.maintenancerow.svelte-if2qsj.svelte-if2qsj{display:flex;justify-content:flex-end;align-items:center}.maintenancerow.svelte-if2qsj label.svelte-if2qsj{margin-right:.5em;margin-left:.5em}.loading.svelte-if2qsj.svelte-if2qsj{transition:height .25s ease-in-out 4ms;overflow-y:hidden;flex-shrink:0;display:flex;justify-content:flex-start;align-items:center}.loading.svelte-if2qsj.svelte-if2qsj:empty{height:0;transition:height .25s ease-in-out 1s}.loading.svelte-if2qsj.svelte-if2qsj:not(:empty){height:2em;transition:height .25s ease-in-out 0s} \ No newline at end of file diff --git a/.server/lib/styles/theme.css b/.server/lib/styles/theme.css new file mode 100644 index 0000000..928b08d --- /dev/null +++ b/.server/lib/styles/theme.css @@ -0,0 +1 @@ +body{--font-editor-theme:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,Ubuntu,sans-serif;--font-editor:var(--font-editor-override),var(--font-text-override),var(--font-editor-theme)}body{--blockquote-style:normal;--blockquote-color:var(--text-muted);--blockquote-border-thickness:1px;--blockquote-border-color:var(--quote-opening-modifier);--embed-block-shadow-hover:none;--font-ui-smaller:11px;--normal-weight:400;--inline-title-margin-bottom:1rem;--h1-size:1.125em;--h2-size:1.05em;--h3-size:1em;--h4-size:0.90em;--h5-size:0.85em;--h6-size:0.85em;--h1-weight:600;--h2-weight:600;--h3-weight:500;--h4-weight:500;--h5-weight:500;--h6-weight:400;--h1-variant:normal;--h2-variant:normal;--h3-variant:normal;--h4-variant:normal;--h5-variant:small-caps;--h6-variant:small-caps;--h1-style:normal;--h2-style:normal;--h3-style:normal;--h4-style:normal;--h5-style:normal;--h6-style:normal;--line-width:40rem;--line-height:1.5;--line-height-normal:var(--line-height);--max-width:88%;--max-col-width:18em;--icon-muted:0.5;--nested-padding:1.1em;--folding-offset:32px;--list-edit-offset:0.5em;--list-indent:2em;--list-spacing:0.075em;--input-height:32px;--header-height:40px;--metadata-label-width:9rem;--metadata-label-font-size:var(--font-adaptive-small);--metadata-input-font-size:var(--font-adaptive-small);--mobile-left-sidebar-width:280pt;--mobile-right-sidebar-width:240pt;--top-left-padding-y:0px;--image-muted:0.7;--image-radius:4px;--heading-spacing:2em;--p-spacing:1.75rem;--border-width:1px;--table-border-width:var(--border-width);--table-selection:var(--text-selection);--table-selection-border-color:var(--text-accent);--table-selection-border-width:0px;--table-selection-border-radius:0px;--table-drag-handle-background-active:var(--text-selection);--table-drag-handle-color-active:var(--text-accent);--table-add-button-border-width:0px;--file-margins:var(--size-4-2) var(--size-4-12)}.mod-macos{--top-left-padding-y:24px}.is-phone{--metadata-label-font-size:var(--font-adaptive-smaller);--metadata-input-font-size:var(--font-adaptive-smaller)}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.is-phone{--border-width:0.75px}}body{--base-h:0;--base-s:0%;--base-l:96%;--accent-h:201;--accent-s:17%;--accent-l:50%}.theme-dark,.theme-light{--color-red-rgb:208,66,85;--color-orange-rgb:213,118,63;--color-yellow-rgb:229,181,103;--color-green-rgb:168,195,115;--color-cyan-rgb:115,187,178;--color-blue-rgb:108,153,187;--color-purple-rgb:158,134,200;--color-pink-rgb:176,82,121;--color-red:#d04255;--color-orange:#d5763f;--color-yellow:#e5b567;--color-green:#a8c373;--color-cyan:#73bbb2;--color-blue:#6c99bb;--color-purple:#9e86c8;--color-pink:#b05279}.theme-light,.theme-light.minimal-default-light,body .excalidraw{--bg1:white;--bg2:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) - 50%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 20%) );--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 90%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) - 50%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 25%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 60%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 6%) );--hl1:hsla( var(--accent-h), 50%, calc(var(--base-l) - 20%), 30% );--hl2:rgba(255, 225, 0, 0.5);--sp1:white}.excalidraw.theme--dark,.theme-dark,.theme-dark.minimal-default-dark,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-l:60%;--base-l:15%;--bg1:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 2%) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) + 40%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 20%) );--tx1:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 67%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) + 45%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 20%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 50%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 5%) );--hl1:hsla( var(--accent-h), 50%, 40%, 30% );--hl2:rgba(255, 177, 80, 0.3);--sp1:white}.theme-light.minimal-light-white{--background-primary:white;--background-secondary:white;--background-secondary-alt:white;--ribbon-background:white;--titlebar-background:white;--bg1:white}.theme-dark.minimal-dark-black{--base-d:0%;--titlebar-background:black;--background-primary:black;--background-secondary:black;--background-secondary-alt:black;--ribbon-background:black;--background-modifier-hover:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 10%));--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 75%) );--tx2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 50%) );--tx3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 25%) );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 12%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 20%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 30%) )}.theme-light{--mono100:black;--mono0:white}.theme-dark{--mono100:white;--mono0:black}.theme-dark,.theme-light,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.is-mobile .workspace-drawer.mod-left,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--background-modifier-accent:var(--ax3);--background-modifier-border-focus:var(--ui3);--background-modifier-border-hover:var(--ui2);--background-modifier-border:var(--ui1);--mobile-sidebar-background:var(--bg1);--background-modifier-form-field-highlighted:var(--bg1);--background-modifier-form-field:var(--bg1);--background-modifier-success:var(--color-green);--background-modifier-hover:var(--bg3);--background-modifier-active-hover:var(--bg3);--background-primary:var(--bg1);--background-primary-alt:var(--bg2);--background-secondary:var(--bg2);--background-secondary-alt:var(--bg1);--background-table-rows:var(--bg2);--checkbox-color:var(--ax3);--code-normal:var(--tx1);--divider-color:var(--ui1);--frame-divider-color:var(--ui1);--icon-color-active:var(--tx1);--icon-color-focused:var(--tx1);--icon-color-hover:var(--tx2);--icon-color:var(--tx2);--icon-hex:var(--mono0);--interactive-accent-hover:var(--ax1);--interactive-accent:var(--ax3);--interactive-hover:var(--ui1);--list-marker-color:var(--tx3);--nav-item-background-active:var(--bg3);--nav-item-background-hover:var(--bg3);--nav-item-color:var(--tx2);--nav-item-color-active:var(--tx1);--nav-item-color-hover:var(--tx1);--nav-item-color-selected:var(--tx1);--nav-collapse-icon-color:var(--tx2);--nav-collapse-icon-color-collapsed:var(--tx2);--nav-indentation-guide-color:var(--ui1);--prompt-border-color:var(--ui3);--quote-opening-modifier:var(--ui2);--ribbon-background:var(--bg2);--scrollbar-active-thumb-bg:var(--ui3);--scrollbar-bg:transparent;--scrollbar-thumb-bg:var(--ui1);--search-result-background:var(--bg1);--tab-text-color-focused-active:var(--tx1);--tab-outline-color:var(--ui1);--text-accent-hover:var(--ax2);--text-accent:var(--ax1);--text-blockquote:var(--tx2);--text-bold:var(--tx1);--text-code:var(--tx4);--text-error:var(--color-red);--text-faint:var(--tx3);--text-highlight-bg:var(--hl2);--text-italic:var(--tx1);--text-muted:var(--tx2);--text-normal:var(--tx1);--text-on-accent:var(--sp1);--text-selection:var(--hl1);--text-formatting:var(--tx3);--title-color-inactive:var(--tx2);--title-color:var(--tx1);--titlebar-background:var(--bg2);--titlebar-background-focused:var(--bg2);--titlebar-text-color-focused:var(--tx1);--vault-profile-color:var(--tx1);--vault-profile-color-hover:var(--tx1);--workspace-background-translucent:hsla(var(--base-h),var(--base-s), var(--base-l), 0.7)}.theme-dark .view-actions,.theme-light .view-actions{--icon-color-active:var(--ax1)}.theme-light.minimal-light-contrast{--workspace-background-translucent:rgba(0,0,0,0.6)}.theme-light.minimal-light-contrast .theme-dark{--tab-container-background:var(--bg2);--ribbon-background-collapsed:var(--bg2)}.theme-light{--interactive-normal:var(--bg1);--interactive-accent-rgb:220,220,220;--active-line-bg:rgba(0,0,0,0.035);--background-modifier-cover:hsla(var(--base-h),calc(var(--base-s) - 70%),calc(var(--base-l) - 20%),0.5);--text-highlight-bg-active:rgba(0, 0, 0, 0.1);--background-modifier-error:rgba(255,0,0,0.14);--background-modifier-error-hover:rgba(255,0,0,0.08);--shadow-color:rgba(0, 0, 0, 0.1);--btn-shadow-color:rgba(0, 0, 0, 0.05)}.theme-dark{--interactive-normal:var(--bg3);--interactive-accent-rgb:66,66,66;--active-line-bg:rgba(255,255,255,0.04);--background-modifier-cover:hsla(var(--base-h),var(--base-s), calc(var(--base-l) - 12%), 0.5);--text-highlight-bg-active:rgba(255, 255, 255, 0.1);--background-modifier-error:rgba(255,20,20,0.12);--background-modifier-error-hover:rgba(255,20,20,0.18);--background-modifier-box-shadow:rgba(0, 0, 0, 0.3);--shadow-color:rgba(0, 0, 0, 0.3);--btn-shadow-color:rgba(0, 0, 0, 0.2);--modal-border-color:var(--ui2)}.theme-light.minimal-light-white{--background-table-rows:var(--bg2)}.theme-light.minimal-light-tonal{--background-primary:var(--bg2);--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-tonal{--ribbon-background:var(--bg1);--background-secondary:var(--bg1);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-black{--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3);--modal-border:var(--ui2);--active-line-bg:rgba(255,255,255,0.085);--background-modifier-form-field:var(--bg3);--background-modifier-cover:hsla(var(--base-h),var(--base-s),calc(var(--base-d) + 8%),0.9);--background-modifier-box-shadow:rgba(0, 0, 0, 1)}body{--font-adaptive-normal:var(--font-text-size,var(--editor-font-size));--font-adaptive-small:calc(var(--font-ui-small) * 1.07);--font-adaptive-smaller:var(--font-ui-small);--font-adaptive-smallest:var(--font-ui-smaller);--line-width-wide:calc(var(--line-width) + 12.5%);--font-code:calc(var(--font-adaptive-normal) * 0.9);--table-text-size:calc(var(--font-adaptive-normal) * 0.875)}.minimal-dev-block-width .mod-root .workspace-leaf-content:after{display:flex;align-items:flex-end;content:" pane ";font-size:12px;color:gray;font-family:var(--font-monospace);width:100%;max-width:100%;height:100vh;top:0;z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:max(50% - var(--line-width)/2 - 1px,50% - var(--max-width)/2 - 1px);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable-off .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:calc(50% - var(--max-width)/ 2 - 1px);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width .mod-root .view-content:before{display:flex;align-items:flex-end;content:" max ";font-size:12px;color:red;width:var(--max-width);height:100vh;border-left:1px solid red;border-right:1px solid red;top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .workspace-leaf-content:before{display:flex;align-items:flex-end;content:" wide ";font-size:12px;color:orange;font-family:var(--font-monospace);width:var(--line-width-wide);max-width:var(--max-width);height:100vh;border-left:1px solid orange;border-right:1px solid orange;background-color:rgba(255,165,0,.05);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-content:after{display:flex;align-items:flex-end;color:#00f;font-size:12px;font-family:var(--font-monospace);content:" normal";width:var(--line-width);max-width:var(--max-width);height:100vh;border-left:1px solid #00f;border-right:1px solid #00f;background-color:rgba(0,0,255,.08);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.CodeMirror-wrap>div>textarea{opacity:0}.markdown-source-view.mod-cm6 hr{border-width:2px}.cm-editor .cm-content{padding-top:.5em}.markdown-source-view{color:var(--text-normal)}.markdown-source-view.mod-cm6 .cm-sizer{display:block}.markdown-source-view.mod-cm6 .cm-scroller{padding-inline-end:0;padding-inline-start:0}.cm-s-obsidian .cm-line.HyperMD-header{padding-top:calc(var(--p-spacing)/2)}.markdown-rendered .mod-header+div>*{margin-block-start:0}body :not(.canvas-node) .markdown-source-view.mod-cm6 .cm-gutters{position:absolute!important;z-index:0;margin-inline-end:0}body :not(.canvas-node) .markdown-source-view.mod-cm6 .cm-gutters .cm-gutter:before{content:"";height:100%;top:-100%;width:100%;position:absolute;z-index:1;background-color:var(--gutter-background);min-width:var(--folding-offset)}body :not(.canvas-node) .markdown-source-view.mod-cm6.is-rtl .cm-gutters{right:0}body{--line-number-color:var(--text-faint);--line-number-color-active:var(--text-muted)}.markdown-source-view.mod-cm6 .cm-gutters{color:var(--line-number-color)!important}.markdown-source-view.mod-cm6 .cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.markdown-source-view.mod-cm6 .cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--line-number-color-active)}.cm-editor .cm-lineNumbers{background-color:var(--gutter-background)}.cm-editor .cm-lineNumbers .cm-gutterElement{min-width:var(--folding-offset);padding-inline-end:.5em}.is-rtl .cm-editor .cm-lineNumbers .cm-gutterElement{text-align:left}@media(max-width:400pt){.cm-editor .cm-lineNumbers .cm-gutterElement{padding-inline-end:4px;padding-inline-start:8px}}.cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button{cursor:var(--cursor);color:var(--text-faint);background-color:var(--background-primary);top:0;opacity:0;transition:opacity .2s;padding:4px 4px 4px 9px}.markdown-source-view.mod-cm6 .edit-block-button svg{margin:0!important}.markdown-source-view.mod-cm6.is-live-preview.is-readable-line-width .cm-embed-block>.edit-block-button{width:30px!important;padding-inline-start:7px!important}.is-live-preview:not(.is-readable-line-width) .cm-embed-block>.edit-block-button{padding-inline-start:0px!important;margin-inline-start:0!important;padding:4px}.markdown-source-view.mod-cm6 .edit-block-button:hover{background-color:var(--background-primary);color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button svg{opacity:1}.markdown-source-view.mod-cm6 .edit-block-button:hover svg{opacity:1}.markdown-source-view.mod-cm6 .cm-embed-block{padding:0;border:0;border-radius:0}.markdown-source-view.mod-cm6 .cm-embed-block:hover{border:0}.metadata-container{--input-height:2rem}body.metadata-heading-off .metadata-properties-heading{display:none}.metadata-add-property-off .mod-root .metadata-add-button{display:none}.metadata-dividers{--metadata-divider-width:1px;--metadata-gap:0px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-inner{margin-inline-start:-16px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-icon{display:none}.metadata-icons-off .metadata-property-icon{display:none}figure{margin-inline-start:0;margin-inline-end:0}.markdown-preview-view .mod-highlighted{transition:background-color .3s ease;background-color:var(--text-selection);color:inherit}.inline-title{padding-top:16px}.mod-macos.hider-frameless .workspace-ribbon{border:none}.is-tablet.hider-ribbon{--ribbon-width:0px}.is-tablet.hider-ribbon .side-dock-ribbon{display:none}.hider-ribbon .workspace-ribbon{padding:0}:root{--hider-ribbon-display:none;--ribbon-animation-duration:0.1s}.ribbon-bottom-left-hover-vertical:not(.is-mobile),.ribbon-bottom-left-hover:not(.is-mobile){--hider-ribbon-display:flex}body.ribbon-vertical-expand:not(.is-mobile){--ribbon-width:0px}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left{width:10px;flex-basis:10px;opacity:0;position:fixed;height:100%;top:0;bottom:0;left:0;z-index:10;transition:all var(--ribbon-animation-duration) linear .6s}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left .side-dock-actions{transition:opacity var(--ribbon-animation-duration) linear .3s}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left:hover{width:44px;opacity:1;flex-basis:44px;transition:opacity var(--ribbon-animation-duration) linear .1s}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left:hover .side-dock-actions{opacity:1;transition:opacity calc(var(--ribbon-animation-duration)*2) linear .2s}body.ribbon-vertical-expand:not(.is-mobile).labeled-nav .workspace-ribbon.mod-left~.mod-left-split .workspace-tab-header-container{margin-left:0;transition:all var(--ribbon-animation-duration) linear .6s}body.ribbon-vertical-expand:not(.is-mobile).labeled-nav .workspace-ribbon.mod-left:hover~.mod-left-split .workspace-tab-header-container{margin-left:44px;transition:all var(--ribbon-animation-duration) linear}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left~.mod-left-split .workspace-tab-container{padding-left:0;transition:all var(--ribbon-animation-duration) linear .6s}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left~.mod-left-split .workspace-sidedock-vault-profile{transition:all var(--ribbon-animation-duration) linear .6s}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left:hover~.mod-left-split .workspace-tab-container{padding-left:44px;transition:all var(--ribbon-animation-duration) linear}body.ribbon-vertical-expand:not(.is-mobile) .workspace-ribbon.mod-left:hover~.mod-left-split .workspace-sidedock-vault-profile{padding-left:52px;transition:all var(--ribbon-animation-duration) linear}.hider-ribbon .workspace-ribbon.mod-left:before,.ribbon-bottom-left-hover .workspace-ribbon.mod-left:before,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left:before{opacity:0}.hider-ribbon .workspace-ribbon-collapse-btn,.ribbon-bottom-left-hover .workspace-ribbon-collapse-btn,.ribbon-bottom-left-hover-vertical .workspace-ribbon-collapse-btn{display:none}.hider-ribbon .workspace-ribbon.mod-right,.ribbon-bottom-left-hover .workspace-ribbon.mod-right,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-right{pointer-events:none}.hider-ribbon .workspace-ribbon.mod-left,.ribbon-bottom-left-hover .workspace-ribbon.mod-left,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left{overflow:visible;border-top:var(--border-width) solid var(--background-modifier-border)!important;border-right:var(--border-width) solid var(--background-modifier-border)!important;border-top-right-radius:var(--radius-m);padding:0;position:absolute;border-right:0px;margin:0;width:auto;height:44px;flex-basis:0;bottom:0;top:auto;background:var(--background-secondary);display:var(--hider-ribbon-display)!important;flex-direction:row;z-index:17;opacity:0;transition:opacity calc(var(--ribbon-animation-duration)*2) ease-in-out;filter:drop-shadow(2px 10px 30px rgba(0, 0, 0, .2));gap:0}.hider-ribbon .side-dock-actions,.hider-ribbon .side-dock-settings,.ribbon-bottom-left-hover .side-dock-actions,.ribbon-bottom-left-hover .side-dock-settings,.ribbon-bottom-left-hover-vertical .side-dock-actions,.ribbon-bottom-left-hover-vertical .side-dock-settings{flex-direction:row;display:var(--hider-ribbon-display);background:rgba(0,0,0,0);margin:0;position:relative;gap:var(--size-2-2)}.hider-ribbon .side-dock-actions,.ribbon-bottom-left-hover .side-dock-actions,.ribbon-bottom-left-hover-vertical .side-dock-actions{padding:6px 6px 6px 8px}.hider-ribbon .side-dock-settings:empty,.ribbon-bottom-left-hover .side-dock-settings:empty,.ribbon-bottom-left-hover-vertical .side-dock-settings:empty{display:none}.hider-ribbon .workspace-ribbon.mod-left .side-dock-ribbon-action,.ribbon-bottom-left-hover .workspace-ribbon.mod-left .side-dock-ribbon-action,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left .side-dock-ribbon-action{display:var(--hider-ribbon-display)}.hider-ribbon .workspace-ribbon.mod-left:hover,.ribbon-bottom-left-hover .workspace-ribbon.mod-left:hover,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left:hover{opacity:1;transition:opacity .25s ease-in-out}.hider-ribbon .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn,.ribbon-bottom-left-hover .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn,.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn{opacity:0}.hider-ribbon .workspace-split.mod-left-split,.ribbon-bottom-left-hover .workspace-split.mod-left-split,.ribbon-bottom-left-hover-vertical .workspace-split.mod-left-split{margin:0}.hider-ribbon .workspace-leaf-content .item-list,.ribbon-bottom-left-hover .workspace-leaf-content .item-list,.ribbon-bottom-left-hover-vertical .workspace-leaf-content .item-list{padding-bottom:40px}.ribbon-bottom-left-hover-vertical .workspace-ribbon.mod-left{height:auto}.ribbon-bottom-left-hover-vertical .side-dock-actions{flex-direction:column;padding:8px 6px}.minimal-status-off .status-bar{--status-bar-position:static;--status-bar-radius:0;--status-bar-border-width:1px 0 0 0;--status-bar-background:var(--background-secondary);--status-bar-border-color:var(--ui1)}body:not(.minimal-status-off) .status-bar{background-color:var(--background-primary);--status-bar-border-width:0}.status-bar{transition:color .2s linear;color:var(--text-faint);font-size:var(--font-adaptive-smallest)}.status-bar .sync-status-icon.mod-success,.status-bar .sync-status-icon.mod-working{color:var(--text-faint)}.status-bar:hover,.status-bar:hover .sync-status-icon.mod-success,.status-bar:hover .sync-status-icon.mod-working{color:var(--text-muted);transition:color .2s linear}.status-bar .plugin-sync:hover .sync-status-icon.mod-success,.status-bar .plugin-sync:hover .sync-status-icon.mod-working{color:var(--text-normal)}.status-bar .status-bar-item{cursor:var(--cursor)!important}.status-bar .status-bar-item.cMenu-statusbar-button:hover,.status-bar .status-bar-item.mod-clickable:hover,.status-bar .status-bar-item.plugin-editor-status:hover,.status-bar .status-bar-item.plugin-sync:hover{text-align:center;background-color:var(--background-modifier-hover)!important}.tab-stack-top-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:right}.tab-stack-center{--tab-stacked-text-align:center}.tab-stack-center-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:center}.tab-stack-bottom{--tab-stacked-text-transform:rotate(180deg)}.tab-stack-bottom-flipped{--tab-stacked-text-align:right}.view-header-title,.view-header-title-parent{text-overflow:ellipsis}.view-header-title-container:not(.mod-at-end):after{display:none}body:not(.is-mobile) .view-actions .view-action:last-child{margin-left:-1px}.minimal-focus-mode .workspace-ribbon:not(.is-collapsed)~.mod-root .view-header:hover .view-actions,.mod-right.is-collapsed~.mod-root .view-header:hover .view-actions,.view-action.is-active:hover,.workspace-ribbon.mod-left.is-collapsed~.mod-root .view-header:hover .view-actions,body:not(.minimal-focus-mode) .workspace-ribbon:not(.is-collapsed)~.mod-root .view-actions{opacity:1;transition:opacity .25s ease-in-out}.view-header-title-container{opacity:0;transition:opacity .1s ease-in-out}.view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.view-header:hover .view-header-title-container,.workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:1;transition:opacity .1s ease-in-out}.is-phone .view-header-title-container,.minimal-tab-title-visible .view-header-title-container{opacity:1}.minimal-tab-title-hidden .view-header-title-container{opacity:0}.minimal-tab-title-hidden .view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.minimal-tab-title-hidden .view-header:hover .view-header-title-container,.minimal-tab-title-hidden .workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:0}body.window-title-off .titlebar-text{display:none}.titlebar-button-container.mod-right{background-color:rgba(0,0,0,0)!important}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white){--titlebar-background:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-tabs.mod-top,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-tabs.mod-top{--titlebar-background-focused:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed){--titlebar-background:var(--bg2)}.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right{right:0;padding-right:var(--size-4-2)}body.is-focused{--titlebar-background-focused:var(--background-secondary)}.is-hidden-frameless:not(.colorful-frame) .mod-left-split .mod-top .workspace-tab-header-container{--tab-container-background:var(--background-secondary)}.mod-root .workspace-tab-header-status-icon{color:var(--text-muted)}.is-collapsed .workspace-sidedock-vault-profile{opacity:0}body:not(.is-mobile).hide-help .workspace-drawer-vault-actions .clickable-icon:first-child{display:none}body:not(.is-mobile).hide-settings .workspace-drawer-vault-actions .clickable-icon:last-child{display:none}body:not(.is-mobile).hide-help.hide-settings .workspace-drawer-vault-actions{display:none!important}body:not(.is-grabbing):not(.is-fullscreen).labeled-nav.is-hidden-frameless.vault-profile-top .mod-left-split .mod-top .workspace-tab-header-container{-webkit-app-region:no-drag}body:not(.is-grabbing):not(.is-fullscreen).labeled-nav.is-hidden-frameless.vault-profile-top .mod-left-split .mod-top .workspace-tab-header-container:before{position:absolute;top:0;content:"";height:var(--header-height);width:100%;-webkit-app-region:drag}body:not(.is-mobile):not(.labeled-nav).vault-profile-top .workspace-split.mod-left-split .mod-top .workspace-tab-container{margin-top:calc(var(--header-height) + 8px)}body:not(.is-mobile):not(.labeled-nav).vault-profile-top .workspace-split.mod-left-split .workspace-sidedock-vault-profile{-webkit-app-region:no-drag;position:absolute;top:var(--header-height);z-index:6;width:100%;border-top:0;border-bottom:1px solid var(--background-modifier-border)}body:not(.is-mobile):not(.labeled-nav).vault-profile-top .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher{padding-left:var(--size-4-2)}body:not(.is-mobile).labeled-nav.vault-profile-top .workspace-split.mod-left-split .workspace-sidedock-vault-profile{-webkit-app-region:no-drag;position:absolute;top:var(--labeled-nav-top-margin);z-index:6;width:100%;background-color:rgba(0,0,0,0);border-top:0;border-bottom:1px solid var(--background-modifier-border)}body:not(.is-mobile).labeled-nav.vault-profile-top .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher{padding-left:var(--size-4-2)}.vault-profile-top .workspace-tab-header-container-inner{--labeled-nav-top-margin:84px}.modal button:not(.mod-warning),.modal.mod-settings button:not(.mod-cta):not(.mod-warning),.modal.mod-settings button:not(.mod-warning){white-space:nowrap;transition:background-color .2s ease-out,border-color .2s ease-out}button.mod-warning{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 1px 1px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}button.mod-warning:hover{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 2px 3px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}.document-replace,.document-search{max-width:100%;padding:0}.document-search-container{margin:0 auto;max-width:var(--max-width);width:var(--line-width)}.modal-button-container .mod-checkbox{--checkbox-radius:4px}.modal-container.mod-confirmation .modal{width:480px;min-width:0}.popover{--file-margins:var(--size-4-6) var(--size-4-6) var(--size-4-6)}.minimal-line-nums .popover .markdown-source-view{--file-margins:var(--size-4-4) var(--size-4-6) var(--size-4-6) var(--size-4-12)}.minimal-line-nums .popover .markdown-source-view.is-rtl{--file-margins:var(--size-4-4) var(--size-4-12) var(--size-4-6) var(--size-4-6)}body{--progress-outline:var(--background-modifier-border);--progress-complete:var(--text-accent)}.markdown-preview-view progress,.markdown-rendered progress,.markdown-source-view.is-live-preview progress{width:220px}.markdown-preview-view progress[value]::-webkit-progress-bar,.markdown-rendered progress[value]::-webkit-progress-bar,.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar{box-shadow:inset 0 0 0 var(--border-width) var(--progress-outline)}.markdown-preview-view progress[value^="1"]::-webkit-progress-value,.markdown-preview-view progress[value^="2"]::-webkit-progress-value,.markdown-preview-view progress[value^="3"]::-webkit-progress-value,.markdown-rendered progress[value^="1"]::-webkit-progress-value,.markdown-rendered progress[value^="2"]::-webkit-progress-value,.markdown-rendered progress[value^="3"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="1"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="2"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="3"]::-webkit-progress-value{background-color:var(--color-red)}.markdown-preview-view progress[value^="4"]::-webkit-progress-value,.markdown-preview-view progress[value^="5"]::-webkit-progress-value,.markdown-rendered progress[value^="4"]::-webkit-progress-value,.markdown-rendered progress[value^="5"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="4"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="5"]::-webkit-progress-value{background-color:var(--color-orange)}.markdown-preview-view progress[value^="6"]::-webkit-progress-value,.markdown-preview-view progress[value^="7"]::-webkit-progress-value,.markdown-rendered progress[value^="6"]::-webkit-progress-value,.markdown-rendered progress[value^="7"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="6"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="7"]::-webkit-progress-value{background-color:var(--color-yellow)}.markdown-preview-view progress[value^="8"]::-webkit-progress-value,.markdown-preview-view progress[value^="9"]::-webkit-progress-value,.markdown-rendered progress[value^="8"]::-webkit-progress-value,.markdown-rendered progress[value^="9"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="8"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^="9"]::-webkit-progress-value{background-color:var(--color-green)}.markdown-preview-view progress[value="1"]::-webkit-progress-value,.markdown-preview-view progress[value="100"]::-webkit-progress-value,.markdown-rendered progress[value="1"]::-webkit-progress-value,.markdown-rendered progress[value="100"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="1"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="100"]::-webkit-progress-value{background-color:var(--progress-complete)}.markdown-preview-view progress[value="0"]::-webkit-progress-value,.markdown-preview-view progress[value="2"]::-webkit-progress-value,.markdown-preview-view progress[value="3"]::-webkit-progress-value,.markdown-preview-view progress[value="4"]::-webkit-progress-value,.markdown-preview-view progress[value="5"]::-webkit-progress-value,.markdown-preview-view progress[value="6"]::-webkit-progress-value,.markdown-preview-view progress[value="7"]::-webkit-progress-value,.markdown-preview-view progress[value="8"]::-webkit-progress-value,.markdown-preview-view progress[value="9"]::-webkit-progress-value,.markdown-rendered progress[value="0"]::-webkit-progress-value,.markdown-rendered progress[value="2"]::-webkit-progress-value,.markdown-rendered progress[value="3"]::-webkit-progress-value,.markdown-rendered progress[value="4"]::-webkit-progress-value,.markdown-rendered progress[value="5"]::-webkit-progress-value,.markdown-rendered progress[value="6"]::-webkit-progress-value,.markdown-rendered progress[value="7"]::-webkit-progress-value,.markdown-rendered progress[value="8"]::-webkit-progress-value,.markdown-rendered progress[value="9"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="0"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="2"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="3"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="4"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="5"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="6"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="7"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="8"]::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value="9"]::-webkit-progress-value{background-color:var(--color-red)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar,body:not(.native-scrollbars) ::-webkit-scrollbar{width:11px;background-color:rgba(0,0,0,0)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar:horizontal,body:not(.native-scrollbars) ::-webkit-scrollbar:horizontal{height:11px}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-corner,body:not(.native-scrollbars) ::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-track,body:not(.native-scrollbars) ::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb{background-clip:padding-box;border-radius:20px;border:3px solid transparent;background-color:var(--background-modifier-border);border-width:3px 3px 3px 3px;min-height:45px}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover{background-color:var(--background-modifier-border-hover)}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active{background-color:var(--background-modifier-border-focus)}.tooltip{transition:none;animation:none}.tooltip.mod-left,.tooltip.mod-right{animation:none}.tooltip.mod-error{color:var(--text-error)}.markdown-preview-view blockquote{padding-inline-start:var(--nested-padding);font-size:var(--blockquote-size)}.markdown-source-view.mod-cm6 .HyperMD-quote,.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote{font-size:var(--blockquote-size)}.is-live-preview .cm-hmd-indent-in-quote{color:var(--text-faint)}.is-live-preview.is-readable-line-width>.cm-callout .callout{max-width:var(--max-width);margin:0 auto}.callouts-outlined .callout .callout-title{background-color:var(--background-primary);margin-top:-24px;z-index:200;width:fit-content;padding:0 .5em;margin-left:-.75em;letter-spacing:.05em;font-variant-caps:all-small-caps}.callouts-outlined .callout{overflow:visible;--callout-border-width:1px;--callout-border-opacity:0.5;--callout-title-size:0.8em;--callout-blend-mode:normal;background-color:rgba(0,0,0,0)}.callouts-outlined .cm-embed-block.cm-callout{padding-top:12px}.callouts-outlined .callout-content .callout{margin-top:18px}body{--checkbox-radius:50%;--checkbox-top:2px;--checkbox-left:0px;--checkbox-margin:0px 6px 0px -2em}.checkbox-square{--checkbox-size:calc(var(--font-text-size) * 0.85);--checkbox-radius:4px;--checkbox-top:1px;--checkbox-left:0px;--checkbox-margin:0px 8px 0px -2em}body.minimal-strike-lists{--checklist-done-decoration:line-through}body:not(.minimal-strike-lists){--checklist-done-decoration:none;--checklist-done-color:var(--text-normal)}.markdown-preview-section>.contains-task-list{padding-bottom:.5em}.mod-cm6 .HyperMD-task-line[data-task] .cm-formatting-list-ol~.task-list-label .task-list-item-checkbox{margin:1px}.markdown-preview-view .task-list-item-checkbox{position:relative;top:var(--checkbox-top);left:var(--checkbox-left)}.markdown-preview-view ul>li.task-list-item{text-indent:0}.minimal-code-scroll{--code-white-space:pre}.minimal-code-scroll .HyperMD-codeblock.HyperMD-codeblock-bg{overflow-y:scroll;white-space:pre}.minimal-code-scroll .cm-hmd-codeblock{white-space:pre!important}@media print{.print{--code-background:#eee!important}}body{--embed-max-height:none;--embed-decoration-style:solid;--embed-decoration-color:var(--background-modifier-border-hover)}.embed-strict{--embed-background:transparent;--embed-border-start:0;--embed-border-left:0;--embed-padding:0}.embed-strict .markdown-embed-content{--folding-offset:0px}.embed-strict .internal-embed .markdown-embed,.embed-strict .markdown-preview-view .markdown-embed,.embed-strict.markdown-preview-view .markdown-embed{padding:0}.embed-strict .internal-embed .markdown-embed .markdown-embed-title,.embed-strict .markdown-embed-title{display:none}.embed-strict .internal-embed:not([src*="#^"]) .markdown-embed-link{width:24px;opacity:0}.embed-underline .internal-embed:not(.pdf-embed){text-decoration-line:underline;text-decoration-style:var(--embed-decoration-style);text-decoration-color:var(--embed-decoration-color)}.embed-hide-title .markdown-embed-title{display:none}.contextual-typography .embed-strict .internal-embed .markdown-preview-view .markdown-preview-sizer>div,.embed-strict.contextual-typography .internal-embed .markdown-preview-view .markdown-preview-sizer>div{margin:0;width:100%}.markdown-embed .markdown-preview-view .markdown-preview-sizer{padding-bottom:0!important}.markdown-preview-view.is-readable-line-width .markdown-embed .markdown-preview-sizer,.markdown-preview-view.markdown-embed .markdown-preview-sizer{max-width:100%;width:100%;min-height:0!important;padding-bottom:0!important}.markdown-embed .markdown-preview-section div:last-child p,.markdown-embed .markdown-preview-section div:last-child ul{margin-block-end:2px}.markdown-preview-view .markdown-embed{margin-top:var(--nested-padding);padding:0 calc(var(--nested-padding)/2) 0 var(--nested-padding)}.internal-embed:not([src*="#^"]) .markdown-embed-link{right:0;width:100%}.file-embed-link,.markdown-embed-link{top:0;right:0;text-align:right;justify-content:flex-end}.file-embed-link svg,.markdown-embed-link svg{width:16px;height:16px}.markdown-embed .file-embed-link,.markdown-embed .markdown-embed-link{opacity:.6;transition:opacity .1s linear}.markdown-embed .file-embed-link:hover,.markdown-embed .markdown-embed-link:hover{opacity:1}.markdown-embed .file-embed-link:hover:hover,.markdown-embed .markdown-embed-link:hover:hover{background-color:rgba(0,0,0,0);--icon-color:var(--text-accent)}.file-embed-link:hover,.markdown-embed-link:hover{color:var(--text-muted)}.markdown-embed .markdown-preview-view{padding:0}.internal-embed .markdown-embed{border:0;border-left:1px solid var(--quote-opening-modifier);border-radius:0}a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}.theme-dark a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}.plain-external-links .external-link{background-image:none;padding-right:0}body{--adaptive-list-edit-offset:var(--list-edit-offset)}.is-rtl{--adaptive-list-edit-offset:calc(var(--list-edit-offset)*-1)}.markdown-preview-view ol>li,.markdown-preview-view ul>li,.markdown-source-view ol>li,.markdown-source-view ul>li,.mod-cm6 .HyperMD-list-line.cm-line{padding-top:var(--list-spacing);padding-bottom:var(--list-spacing)}.is-mobile ul>li:not(.task-list-item)::marker{font-size:.8em}.is-mobile .workspace-leaf-content:not([data-type=search]) .workspace-leaf-content[data-type=markdown] .nav-buttons-container{border-bottom:none;padding-top:5px}.is-mobile .mod-root .workspace-leaf-content[data-type=markdown] .search-input-container{width:calc(100% - 160px)}.embedded-backlinks .backlink-pane>.tree-item-self,.embedded-backlinks .backlink-pane>.tree-item-self:hover{text-transform:none;color:var(--text-normal);font-size:var(--font-adaptive-normal);font-weight:500;letter-spacing:unset}body{--pdf-dark-opacity:1}.theme-dark:not(.pdf-shadows-on),.theme-light:not(.pdf-shadows-on){--pdf-shadow:none;--pdf-thumbnail-shadow:none}.theme-dark:not(.pdf-shadows-on) .pdf-viewer .page,.theme-light:not(.pdf-shadows-on) .pdf-viewer .page{border:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing{padding:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after{right:var(--size-4-2);bottom:var(--size-4-2)}.theme-dark{--pdf-thumbnail-shadow:0 0 1px 0 rgba(0,0,0,0.6);--pdf-shadow:0 0 1px 0 rgba(0,0,0,0.6)}.theme-dark .pdf-viewer .canvasWrapper{opacity:var(--pdf-dark-opacity)}.theme-dark.pdf-invert-dark .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-light.pdf-blend-light .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{mix-blend-mode:multiply}body{--table-header-border-width:0;--table-column-first-border-width:0;--table-column-last-border-width:0;--table-row-last-border-width:0;--table-edge-cell-padding-first:0;--table-edge-cell-padding-last:0;--table-cell-padding:4px 10px;--table-header-size:var(--table-text-size)}.markdown-source-view.mod-cm6 table{border-collapse:collapse}.markdown-rendered th{--table-header-size:var(--table-text-size)}.markdown-preview-view table,.markdown-source-view.mod-cm6 table{border:var(--border-width) solid var(--border-color);border-collapse:collapse}.markdown-preview-view td,.markdown-preview-view th,.markdown-source-view.mod-cm6 td,.markdown-source-view.mod-cm6 th{padding:var(--table-cell-padding)}.markdown-preview-view td:first-child,.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 td:first-child,.markdown-source-view.mod-cm6 th:first-child{padding-inline-start:var(--table-edge-cell-padding-first)}.markdown-preview-view td:first-child .table-cell-wrapper,.markdown-preview-view th:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:first-child .table-cell-wrapper{padding-inline-start:0}.markdown-preview-view td:last-child,.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 td:last-child,.markdown-source-view.mod-cm6 th:last-child{padding-inline-end:var(--table-edge-cell-padding-last)}.markdown-preview-view td:last-child .table-cell-wrapper,.markdown-preview-view th:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:last-child .table-cell-wrapper{padding-inline-end:0}.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper{padding:var(--table-cell-padding)}.markdown-reading-view table{--p-spacing:0.5rem}.cm-embed-block.cm-table-widget.markdown-rendered{padding:var(--table-drag-padding);overscroll-behavior-x:none}.is-mobile .cm-embed-block.cm-table-widget.markdown-rendered{padding-bottom:40px}.markdown-preview-view th,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,.table-view-table>thead>tr>th{padding:var(--table-cell-padding)}.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:first-child,.table-view-table>thead>tr>th:first-child{padding-inline-start:var(--table-edge-cell-padding-first)}.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:last-child,.table-view-table>thead>tr>th:last-child{padding-inline-end:var(--table-edge-cell-padding-last)}.cm-hmd-table-sep-dummy,.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep{color:var(--text-faint);font-weight:400}body.minimal-unstyled-tags{--tag-background:transparent;--tag-background-hover:transparent;--tag-border-width:0px;--tag-padding-x:0;--tag-padding-y:0;--tag-size:inherit;--tag-color-hover:var(--text-accent-hover)}body.minimal-unstyled-tags.is-mobile.theme-dark{--tag-background:transparent}body:not(.minimal-unstyled-tags){--tag-size:0.8em;--tag-padding-y:0.2em;--tag-background:transparent;--tag-background-hover:transparent;--tag-color:var(--text-muted);--tag-border-width:1px;--tag-border-color:var(--background-modifier-border);--tag-border-color-hover:var(--background-modifier-border-hover);--tag-color-hover:var(--text-normal)}body.is-mobile.theme-dark{--tag-background:transparent}h1,h2,h3,h4{letter-spacing:-.02em}body,button,input{font-family:var(--font-interface)}.cm-s-obsidian span.cm-error{color:var(--color-red)}.markdown-preview-view,.popover,.workspace-leaf-content[data-type=markdown]{font-family:var(--font-text)}.markdown-preview-view,.view-content>.cm-s-obsidian,.view-content>.markdown-source-view.mod-cm6.is-live-preview>.cm-scroller,body{font-size:var(--font-adaptive-normal);font-weight:var(--normal-weight)}.view-content>.cm-s-obsidian,.view-content>.markdown-source-view,.view-content>.markdown-source-view.mod-cm6 .cm-scroller{font-family:var(--font-editor)}.cm-formatting:not(.cm-formatting-code-block):not(.cm-formatting-hashtag){color:var(--text-formatting)}.hide-markdown .is-live-preview .cm-formatting.cm-formatting-code.cm-inline-code,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-em,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-highlight,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strikethrough,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strong{display:none}.hide-markdown .is-live-preview .cm-formatting-quote{opacity:0}.hide-markdown .is-live-preview .cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting:has(+.cm-header),.hide-markdown .is-live-preview .cm-hmd-internal-link.cm-link-has-alias,.hide-markdown .is-live-preview .cm-link-alias-pipe{display:none}.active-line-on .workspace-leaf-content[data-type=markdown] .cm-line.cm-active,.active-line-on .workspace-leaf-content[data-type=markdown] .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote.cm-active{background-color:var(--active-line-bg);box-shadow:-25vw 0 var(--active-line-bg),25vw 0 var(--active-line-bg)}.disable-animations{--ribbon-animation-duration:0ms;--focus-animation-duration:0ms}.disable-animations .mod-sidedock{transition-duration:0s!important}.fast-animations{--ribbon-animation-duration:0.05s;--focus-animation-duration:0.05s}.fast-animations .mod-sidedock{transition-duration:70ms!important}body{--content-margin:auto;--content-margin-start:max( calc(50% - var(--line-width)/2), calc(50% - var(--max-width)/2) );--content-line-width:min(var(--line-width), var(--max-width))}.markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer{max-width:100%;margin-inline:auto;width:100%}.markdown-source-view.mod-cm6.is-readable-line-width .cm-content,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer{max-width:100%;width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.embedded-backlinks,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.inline-title,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.metadata-container{max-width:var(--max-width);width:var(--line-width);margin-inline:var(--content-margin)!important}.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>:not(div){max-width:var(--content-line-width);margin-inline-start:var(--content-margin-start)!important}.is-readable-line-width{--file-margins:1rem 0 0 0}.is-mobile .markdown-preview-view{--folding-offset:0}.minimal-line-nums .workspace-leaf-content[data-type=markdown]{--file-margins:var(--size-4-8) var(--size-4-8) var(--size-4-8) 48px}.minimal-line-nums .workspace-leaf-content[data-type=markdown].is-rtl{--file-margins:var(--size-4-8) 48px var(--size-4-8) var(--size-4-8)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width{--file-margins:1rem 0 0 var(--folding-offset)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width.is-rtl{--file-margins:1rem var(--folding-offset) 0 0}.minimal-line-nums .mod-left-split .markdown-preview-view,.minimal-line-nums .mod-left-split .markdown-source-view.mod-cm6 .cm-scroller,.minimal-line-nums .mod-right-split .markdown-preview-view,.minimal-line-nums .mod-right-split .markdown-source-view.mod-cm6 .cm-scroller{--file-margins:var(--size-4-5) var(--size-4-5) var(--size-4-5) 48px}.view-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer{max-width:var(--max-width);width:var(--line-width)}.markdown-preview-view .inline-embed{--max-width:100%}body{--container-table-max-width:var(--max-width);--table-max-width:none;--table-width:auto;--table-margin:inherit;--table-wrapper-width:fit-content;--container-dataview-table-width:var(--line-width);--container-img-width:var(--line-width);--container-img-max-width:var(--max-width);--img-max-width:100%;--img-width:auto;--img-margin-start:var(--content-margin-start);--img-line-width:var(--content-line-width);--container-chart-width:var(--line-width);--container-chart-max-width:var(--max-width);--chart-max-width:none;--chart-width:auto;--container-map-width:var(--line-width);--container-map-max-width:var(--max-width);--map-max-width:none;--map-width:auto;--container-iframe-width:var(--line-width);--container-iframe-max-width:var(--max-width);--iframe-max-width:none;--iframe-width:auto}body .wide{--line-width:var(--line-width-wide);--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-img-width:var(--line-width-wide);--container-iframe-width:var(--line-width-wide);--container-map-width:var(--line-width-wide);--container-chart-width:var(--line-width-wide)}body .max{--line-width:var(--max-width);--container-table-width:var(--max-width);--container-dataview-table-width:var(--max-width);--container-img-width:var(--max-width);--container-iframe-width:var(--max-width);--container-map-width:var(--max-width);--container-chart-width:var(--max-width)}table.dataview{--table-min-width:min(var(--line-width),var(--max-width))}.cards table.dataview{--table-width:100%;--table-min-width:none}body{--table-drag-space:16px;--container-table-margin:calc(var(--content-margin-start) - var(--table-drag-space));--container-table-width:calc(var(--line-width) + var(--table-drag-space)*2);--table-drag-padding:var(--table-drag-space)}.is-mobile{--table-drag-space:16px;--container-table-max-width:calc(100% - var(--container-table-margin))}.maximize-tables-auto{--container-table-max-width:100%;--container-table-width:100%;--container-dataview-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-max-width:100%;--table-margin:var(--content-margin-start) auto;--table-width:auto}.maximize-tables-auto .cards{--container-table-max-width:var(--max-width)}.maximize-tables-auto .cards .block-language-dataview{--table-margin:auto}.maximize-tables{--container-table-max-width:100%;--container-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-min-width:min(var(--line-width), var(--max-width));--table-max-width:100%;--table-margin:auto;--table-width:auto;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-wrapper-width:auto}.table-100,.table-max,.table-wide{--table-max-width:100%;--table-width:100%}.table-wide{--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-table-margin:auto;--table-edge-cell-padding-first:0px}.table-max{--container-table-width:var(--max-width);--container-table-max-width:calc(var(--max-width) + var(--table-drag-space)*2);--container-dataview-table-width:var(--max-width);--container-table-margin:auto;--table-edge-cell-padding-first:0px;--table-margin:0}.table-100{--container-table-width:100%;--container-dataview-table-width:100%;--container-table-max-width:100%;--container-table-margin:0;--table-edge-cell-padding-first:16px;--table-edge-cell-padding-last:16px;--table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-wrapper-width:min(fit-content, 100%)}.table-100 .dataview.list-view-ul{max-width:var(--max-width);width:var(--line-width);margin-inline:auto}.table-100 .table-col-btn{display:none!important}.img-100,.img-max,.img-wide{--img-max-width:100%;--img-width:100%}.img-wide{--container-img-width:var(--line-width-wide);--img-line-width:var(--line-width-wide);--img-margin-start:calc(50% - var(--line-width-wide)/2)}.img-max{--container-img-width:var(--max-width);--img-line-width:var(--max-width);--img-margin-start:calc(50% - var(--max-width)/2)}.img-100{--container-img-width:100%;--container-img-max-width:100%;--img-line-width:100%;--img-margin-start:0}.map-100,.map-max,.map-wide{--map-max-width:100%;--map-width:100%}.map-wide{--container-map-width:var(--line-width-wide)}.map-max{--container-map-width:var(--max-width)}.map-100{--container-map-width:100%;--container-map-max-width:100%}.chart-100,.chart-max,.chart-wide{--chart-max-width:100%;--chart-width:100%}.chart-wide{--container-chart-width:var(--line-width-wide)}.chart-max{--container-chart-width:var(--max-width)}.chart-100{--container-chart-width:100%;--container-chart-max-width:100%}.iframe-100,.iframe-max,.iframe-wide{--iframe-max-width:100%;--iframe-width:100%}.iframe-wide{--container-iframe-width:var(--line-width-wide)}.iframe-max{--container-iframe-width:var(--max-width)}.iframe-100{--container-iframe-width:100%;--container-iframe-max-width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .cm-table-widget,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .cm-table-widget,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>table){width:var(--container-table-width);max-width:var(--container-table-max-width);margin-inline:var(--container-table-margin)!important;padding-inline-start:var(--table-drag-padding)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .table-wrapper,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .table-wrapper{width:var(--table-wrapper-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataview table),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataviewjs table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataview table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataviewjs table){width:var(--container-dataview-table-width);max-width:var(--container-table-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer table,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content table{width:var(--table-width);max-width:var(--table-max-width);margin-inline:var(--table-margin);min-width:var(--table-min-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6){width:var(--line-width);margin-inline:var(--content-margin)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>.dataview-error,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>.dataview-error{margin:0 auto;width:var(--content-line-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .dataview.dataview-error-box,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .dataview.dataview-error-box{margin-inline:var(--table-margin)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed{padding-top:.25rem;padding-bottom:.25rem}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed){width:var(--container-img-width);max-width:var(--container-img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed img,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed) img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed) img{max-width:var(--img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>img{max-width:var(--img-line-width);margin-inline-start:var(--img-margin-start)!important}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas){width:var(--container-chart-width);max-width:var(--container-chart-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart) canvas,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas) canvas{max-width:var(--map-chart-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet){width:var(--container-map-width);max-width:var(--container-map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet) iframe{max-width:var(--map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe){width:var(--container-iframe-width);max-width:var(--container-iframe-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed) iframe,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe) iframe{max-width:var(--iframe-max-width)}.borders-none{--divider-width:0px;--tab-outline-width:0px}body:is(.borders-none) .mod-root .workspace-tab-header-container:is(div,:hover){--tab-outline-width:0px}body{--cards-min-width:180px;--cards-max-width:1fr;--cards-mobile-width:120px;--cards-image-height:400px;--cards-padding:1.2em;--cards-image-fit:contain;--cards-background:transparent;--cards-background-hover:transparent;--cards-border-width:1px;--cards-aspect-ratio:auto;--cards-columns:repeat(auto-fit, minmax(var(--cards-min-width), var(--cards-max-width)))}@media(max-width:400pt){body{--cards-min-width:var(--cards-mobile-width)}}.cards.table-100 table.dataview tbody,.table-100 .cards table.dataview tbody{padding:.25rem .75rem}.cards table.dataview{--table-width:100%;--table-edge-cell-padding-first:calc(var(--cards-padding)/2);--table-edge-cell-padding-last:calc(var(--cards-padding)/2);--table-cell-padding:calc(var(--cards-padding)/3) calc(var(--cards-padding)/2);line-height:1.3}.cards table.dataview tbody{clear:both;padding:.5rem 0;display:grid;grid-template-columns:var(--cards-columns);grid-column-gap:.75rem;grid-row-gap:.75rem}.cards table.dataview>tbody>tr{background-color:var(--cards-background);border:var(--cards-border-width) solid var(--background-modifier-border);display:flex;flex-direction:column;margin:0;padding:0 0 calc(var(--cards-padding)/3) 0;border-radius:6px;overflow:hidden;transition:box-shadow .15s linear;max-width:var(--cards-max-width);height:auto}.cards table.dataview>tbody>tr:hover{background-color:var(--cards-background-hover)!important;border:var(--cards-border-width) solid var(--background-modifier-border-hover);box-shadow:0 4px 6px 0 rgba(0,0,0,.05),0 1px 3px 1px rgba(0,0,0,.025);transition:box-shadow .15s linear}.cards table.dataview tbody>tr>td:first-child{font-weight:var(--bold-weight);border:none}.cards table.dataview tbody>tr>td:first-child a{display:block}.cards table.dataview tbody>tr>td:last-child{border:none}.cards table.dataview tbody>tr>td:not(:first-child){font-size:calc(var(--table-text-size)*.9);color:var(--text-muted)}.cards table.dataview tbody>tr>td>*{padding:calc(var(--cards-padding)/3) 0}.cards table.dataview tbody>tr>td:not(:last-child):not(:first-child){padding:4px 0;border-bottom:1px solid var(--background-modifier-border);width:calc(100% - var(--cards-padding));margin:0 calc(var(--cards-padding)/2)}.cards table.dataview tbody>tr>td a{text-decoration:none}.cards table.dataview tbody>tr>td>button{width:100%;margin:calc(var(--cards-padding)/2) 0}.cards table.dataview tbody>tr>td:last-child>button{margin-bottom:calc(var(--cards-padding)/6)}.cards table.dataview tbody>tr>td>ul{width:100%;padding:.25em 0!important;margin:0 auto!important}.cards table.dataview tbody>tr>td:has(img){padding:0!important;background-color:var(--background-secondary);display:block;margin:0;width:100%}.cards table.dataview tbody>tr>td img{aspect-ratio:var(--cards-aspect-ratio);width:100%;object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.markdown-source-view.mod-cm6.cards .dataview.table-view-table>tbody>tr>td,.trim-cols .cards table.dataview tbody>tr>td{white-space:normal}.links-int-on .cards table{--link-decoration:none}.markdown-source-view.mod-cm6.cards .edit-block-button{top:-1px;right:28px;opacity:1}.cards.table-100 table.dataview thead>tr,.table-100 .cards table.dataview thead>tr{right:.75rem}.cards.table-100 table.dataview thead:before,.table-100 .cards table.dataview thead:before{margin-right:.75rem}.cards table.dataview thead{user-select:none;width:180px;display:block;float:right;position:relative;text-align:right;height:24px;padding-bottom:0}.cards table.dataview thead:hover:after{background-color:var(--background-modifier-hover)}.cards table.dataview thead:hover:before{background-color:var(--text-muted)}.cards table.dataview thead:after,.cards table.dataview thead:before{content:"";position:absolute;right:0;top:0;width:10px;height:16px;cursor:var(--cursor);text-align:right;padding:var(--size-4-1) var(--size-4-2);margin-bottom:2px;border-radius:var(--radius-s);font-weight:500;font-size:var(--font-adaptive-small)}.cards table.dataview thead:before{background-color:var(--text-faint);-webkit-mask-repeat:no-repeat;-webkit-mask-size:16px;-webkit-mask-position:center center;-webkit-mask-image:url('data:image/svg+xml;utf8,')}.cards table.dataview thead>tr{top:-1px;position:absolute;display:none;z-index:9;border:1px solid var(--background-modifier-border-hover);background-color:var(--background-secondary);box-shadow:var(--shadow-s);padding:6px;border-radius:var(--radius-m);flex-direction:column;margin:24px 0 0 0;width:100%}.cards table.dataview thead:hover>tr{display:flex;height:auto}.cards table.dataview thead>tr>th{display:block;padding:3px 30px 3px 6px!important;border-radius:var(--radius-s);width:100%;font-weight:400;color:var(--text-normal);cursor:var(--cursor);border:none;font-size:var(--font-ui-small)}.cards table.dataview thead>tr>th[sortable-style=sortable-asc],.cards table.dataview thead>tr>th[sortable-style=sortable-desc]{color:var(--text-normal)}.cards table.dataview thead>tr>th:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}.list-cards.markdown-preview-view .list-bullet,.list-cards.markdown-preview-view .list-collapse-indicator,.list-cards.markdown-preview-view.markdown-rendered.show-indentation-guide li>ul::before{display:none}.list-cards.markdown-preview-view div>ul{display:grid;gap:.75rem;grid-template-columns:var(--cards-columns);padding:0;line-height:var(--line-height-tight)}.list-cards.markdown-preview-view div>ul .contains-task-list{padding-inline-start:calc(var(--cards-padding)*1.5)}.list-cards.markdown-preview-view div>ul>li{background-color:var(--cards-background);padding:calc(var(--cards-padding)/2);border-radius:var(--radius-s);border:var(--cards-border-width) solid var(--background-modifier-border);overflow:hidden;margin-inline-start:0}.list-cards.markdown-preview-view div>ul .image-embed{padding:0;display:block;background-color:var(--background-secondary);border-radius:var(--image-radius)}.list-cards.markdown-preview-view div>ul .image-embed img{aspect-ratio:var(--cards-aspect-ratio);object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.list-cards.markdown-preview-view div>ul>li>a{--link-decoration:none;--link-external-decoration:none;font-weight:var(--bold-weight)}.list-cards.markdown-preview-view div ul>li:hover{border-color:var(--background-modifier-border-hover)}.list-cards.markdown-preview-view div ul ul{display:block;width:100%;color:var(--text-muted);font-size:var(--font-smallest);margin:calc(var(--cards-padding)/-4) 0;padding:calc(var(--cards-padding)/2) 0}.list-cards.markdown-preview-view div ul ul ul{padding-bottom:calc(var(--cards-padding)/4)}.list-cards.markdown-preview-view div ul ul>li{display:block;margin-inline-start:0}.cards.cards-16-9,.list-cards.cards-16-9{--cards-aspect-ratio:16/9}.cards.cards-1-1,.list-cards.cards-1-1{--cards-aspect-ratio:1/1}.cards.cards-2-1,.list-cards.cards-2-1{--cards-aspect-ratio:2/1}.cards.cards-2-3,.list-cards.cards-2-3{--cards-aspect-ratio:2/3}.cards.cards-cols-1,.list-cards.cards-cols-1{--cards-columns:repeat(1, minmax(0, 1fr))}.cards.cards-cols-2,.list-cards.cards-cols-2{--cards-columns:repeat(2, minmax(0, 1fr))}.cards.cards-cover,.list-cards.cards-cover{--cards-image-fit:cover}.cards.cards-align-bottom table.dataview tbody>tr>td:last-child,.list-cards.cards-align-bottom table.dataview tbody>tr>td:last-child{margin-top:auto}@media(max-width:400pt){.cards table.dataview tbody>tr>td:not(:first-child){font-size:80%}}@media(min-width:400pt){.cards-cols-3{--cards-columns:repeat(3, minmax(0, 1fr))}.cards-cols-4{--cards-columns:repeat(4, minmax(0, 1fr))}.cards-cols-5{--cards-columns:repeat(5, minmax(0, 1fr))}.cards-cols-6{--cards-columns:repeat(6, minmax(0, 1fr))}.cards-cols-7{--cards-columns:repeat(7, minmax(0, 1fr))}.cards-cols-8{--cards-columns:repeat(8, minmax(0, 1fr))}}.cm-formatting.cm-formatting-task.cm-property{font-family:var(--font-monospace)}input[data-task="!"]:checked,input[data-task="*"]:checked,input[data-task="-"]:checked,input[data-task="<"]:checked,input[data-task=">"]:checked,input[data-task=I]:checked,input[data-task=b]:checked,input[data-task=c]:checked,input[data-task=d]:checked,input[data-task=f]:checked,input[data-task=k]:checked,input[data-task=l]:checked,input[data-task=p]:checked,input[data-task=u]:checked,input[data-task=w]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked,li[data-task=I]>input:checked,li[data-task=I]>p>input:checked,li[data-task=b]>input:checked,li[data-task=b]>p>input:checked,li[data-task=c]>input:checked,li[data-task=c]>p>input:checked,li[data-task=d]>input:checked,li[data-task=d]>p>input:checked,li[data-task=f]>input:checked,li[data-task=f]>p>input:checked,li[data-task=k]>input:checked,li[data-task=k]>p>input:checked,li[data-task=l]>input:checked,li[data-task=l]>p>input:checked,li[data-task=p]>input:checked,li[data-task=p]>p>input:checked,li[data-task=u]>input:checked,li[data-task=u]>p>input:checked,li[data-task=w]>input:checked,li[data-task=w]>p>input:checked{--checkbox-marker-color:transparent;border:none;border-radius:0;background-image:none;background-color:currentColor;-webkit-mask-size:var(--checkbox-icon);-webkit-mask-position:50% 50%}input[data-task=">"]:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked{color:var(--text-faint);transform:rotate(90deg);-webkit-mask-position:50% 100%;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M10.894 2.553a1 1 0 00-1.788 0l-7 14a1 1 0 001.169 1.409l5-1.429A1 1 0 009 15.571V11a1 1 0 112 0v4.571a1 1 0 00.725.962l5 1.428a1 1 0 001.17-1.408l-7-14z' /%3E%3C/svg%3E")}input[data-task="<"]:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z' clip-rule='evenodd' /%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="?"]:checked,li[data-task="?"]>input:checked,li[data-task="?"]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-yellow);border-color:var(--color-yellow);background-position:50% 50%;background-size:200% 90%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="white" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="?"]:checked,.theme-dark li[data-task="?"]>input:checked,.theme-dark li[data-task="?"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="black" fill-opacity="0.8" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}input[data-task="/"]:checked,li[data-task="/"]>input:checked,li[data-task="/"]>p>input:checked{background-image:none;background-color:rgba(0,0,0,0);position:relative;overflow:hidden}input[data-task="/"]:checked:after,li[data-task="/"]>input:checked:after,li[data-task="/"]>p>input:checked:after{top:0;left:0;content:" ";display:block;position:absolute;background-color:var(--background-modifier-accent);width:calc(50% - .5px);height:100%;-webkit-mask-image:none}input[data-task="!"]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task='"']:checked,input[data-task=“]:checked,li[data-task='"']>input:checked,li[data-task='"']>p>input:checked,li[data-task=“]>input:checked,li[data-task=“]>p>input:checked{--checkbox-marker-color:transparent;background-position:50% 50%;background-color:var(--color-cyan);border-color:var(--color-cyan);background-size:75%;background-repeat:no-repeat;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="white" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task='"']:checked,.theme-dark input[data-task=“]:checked,.theme-dark li[data-task='"']>input:checked,.theme-dark li[data-task='"']>p>input:checked,.theme-dark li[data-task=“]>input:checked,.theme-dark li[data-task=“]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="black" fill-opacity="0.7" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}input[data-task="-"]:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}body:not(.tasks) .markdown-preview-view ul li[data-task="-"].task-list-item.is-checked,body:not(.tasks) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task="-"]),body:not(.tasks) li[data-task="-"].task-list-item.is-checked{color:var(--text-faint);text-decoration:line-through solid var(--text-faint) 1px}input[data-task="*"]:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z' /%3E%3C/svg%3E")}input[data-task=l]:checked,li[data-task=l]>input:checked,li[data-task=l]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=i]:checked,li[data-task=i]>input:checked,li[data-task=i]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-blue);border-color:var(--color-blue);background-position:50%;background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="white" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task=i]:checked,.theme-dark li[data-task=i]>input:checked,.theme-dark li[data-task=i]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="black" fill-opacity="0.8" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}input[data-task=S]:checked,li[data-task=S]>input:checked,li[data-task=S]>p>input:checked{--checkbox-marker-color:transparent;border-color:var(--color-green);background-color:var(--color-green);background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill="white" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task=S]:checked,.theme-dark li[data-task=S]>input:checked,.theme-dark li[data-task=S]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill-opacity="0.8" fill="black" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}input[data-task=I]:checked,li[data-task=I]>input:checked,li[data-task=I]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z' /%3E%3C/svg%3E")}input[data-task=f]:checked,li[data-task=f]>input:checked,li[data-task=f]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.395 2.553a1 1 0 00-1.45-.385c-.345.23-.614.558-.822.88-.214.33-.403.713-.57 1.116-.334.804-.614 1.768-.84 2.734a31.365 31.365 0 00-.613 3.58 2.64 2.64 0 01-.945-1.067c-.328-.68-.398-1.534-.398-2.654A1 1 0 005.05 6.05 6.981 6.981 0 003 11a7 7 0 1011.95-4.95c-.592-.591-.98-.985-1.348-1.467-.363-.476-.724-1.063-1.207-2.03zM12.12 15.12A3 3 0 017 13s.879.5 2.5.5c0-1 .5-4 1.25-4.5.5 1 .786 1.293 1.371 1.879A2.99 2.99 0 0113 13a2.99 2.99 0 01-.879 2.121z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=k]:checked,li[data-task=k]>input:checked,li[data-task=k]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M18 8a6 6 0 01-7.743 5.743L10 14l-1 1-1 1H6v2H2v-4l4.257-4.257A6 6 0 1118 8zm-6-4a1 1 0 100 2 2 2 0 012 2 1 1 0 102 0 4 4 0 00-4-4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=u]:checked,li[data-task=u]>input:checked,li[data-task=u]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=d]:checked,li[data-task=d]>input:checked,li[data-task=d]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 13a1 1 0 100 2h5a1 1 0 001-1V9a1 1 0 10-2 0v2.586l-4.293-4.293a1 1 0 00-1.414 0L8 9.586 3.707 5.293a1 1 0 00-1.414 1.414l5 5a1 1 0 001.414 0L11 9.414 14.586 13H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=w]:checked,li[data-task=w]>input:checked,li[data-task=w]>p>input:checked{color:var(--color-purple);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 3a1 1 0 011-1h.01a1 1 0 010 2H7a1 1 0 01-1-1zm2 3a1 1 0 00-2 0v1a2 2 0 00-2 2v1a2 2 0 00-2 2v.683a3.7 3.7 0 011.055.485 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0A3.7 3.7 0 0118 12.683V12a2 2 0 00-2-2V9a2 2 0 00-2-2V6a1 1 0 10-2 0v1h-1V6a1 1 0 10-2 0v1H8V6zm10 8.868a3.704 3.704 0 01-4.055-.036 1.704 1.704 0 00-1.89 0 3.704 3.704 0 01-4.11 0 1.704 1.704 0 00-1.89 0A3.704 3.704 0 012 14.868V17a1 1 0 001 1h14a1 1 0 001-1v-2.132zM9 3a1 1 0 011-1h.01a1 1 0 110 2H10a1 1 0 01-1-1zm3 0a1 1 0 011-1h.01a1 1 0 110 2H13a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task=p]:checked,li[data-task=p]>input:checked,li[data-task=p]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M2 10.5a1.5 1.5 0 113 0v6a1.5 1.5 0 01-3 0v-6zM6 10.333v5.43a2 2 0 001.106 1.79l.05.025A4 4 0 008.943 18h5.416a2 2 0 001.962-1.608l1.2-6A2 2 0 0015.56 8H12V4a2 2 0 00-2-2 1 1 0 00-1 1v.667a4 4 0 01-.8 2.4L6.8 7.933a4 4 0 00-.8 2.4z' /%3E%3C/svg%3E")}input[data-task=c]:checked,li[data-task=c]>input:checked,li[data-task=c]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M18 9.5a1.5 1.5 0 11-3 0v-6a1.5 1.5 0 013 0v6zM14 9.667v-5.43a2 2 0 00-1.105-1.79l-.05-.025A4 4 0 0011.055 2H5.64a2 2 0 00-1.962 1.608l-1.2 6A2 2 0 004.44 12H8v4a2 2 0 002 2 1 1 0 001-1v-.667a4 4 0 01.8-2.4l1.4-1.866a4 4 0 00.8-2.4z' /%3E%3C/svg%3E")}input[data-task=b]:checked,li[data-task=b]>input:checked,li[data-task=b]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z' /%3E%3C/svg%3E")}.colorful-active .nav-files-container{--nav-item-background-active:var(--interactive-accent);--nav-item-color-active:var(--text-on-accent)}.colorful-active .nav-files-container .is-active .nav-file-tag{color:var(--text-on-accent);opacity:.6}.colorful-active .tree-item-self.is-being-renamed:focus-within{--nav-item-color-active:var(--text-normal)}.colorful-active #calendar-container .active,.colorful-active #calendar-container .active.today,.colorful-active #calendar-container .active:hover,.colorful-active #calendar-container .day:active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.colorful-active #calendar-container .active .dot,.colorful-active #calendar-container .day:active .dot,.colorful-active #calendar-container .today.active .dot{fill:var(--text-on-accent)}body:not(.colorful-active) .horizontal-tab-nav-item.is-active,body:not(.colorful-active) .vertical-tab-nav-item.is-active{background-color:var(--bg3);color:var(--text-normal)}body{--frame-background:hsl( var(--frame-background-h), var(--frame-background-s), var(--frame-background-l));--frame-icon-color:var(--frame-muted-color)}.theme-light{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) + 30%);--frame-outline-color:hsla( var(--frame-background-h), var(--frame-background-s), calc(var(--frame-background-l) - 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) - 35%))}.theme-dark{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) - 25%);--frame-outline-color:hsla( var(--frame-background-h), calc(var(--frame-background-s) - 2%), calc(var(--frame-background-l) + 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) + 25%))}.colorful-frame.theme-dark{--tab-outline-width:0px}.colorful-frame,.colorful-frame.is-focused{--frame-divider-color:var(--frame-outline-color);--titlebar-background:var(--frame-background);--titlebar-background-focused:var(--frame-background);--titlebar-text-color:var(--frame-muted-color);--minimal-tab-text-color:var(--frame-muted-color)}.colorful-frame .workspace-tabs:not(.mod-stacked),.colorful-frame.is-focused .workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color)}.colorful-frame .mod-top .workspace-tab-header-container,.colorful-frame .titlebar,.colorful-frame .workspace-ribbon.mod-left:before,.colorful-frame.is-focused .mod-top .workspace-tab-header-container,.colorful-frame.is-focused .titlebar,.colorful-frame.is-focused .workspace-ribbon.mod-left:before{--tab-outline-color:var(--frame-outline-color);--tab-divider-color:var(--frame-outline-color)}.colorful-frame .mod-root .workspace-tab-header .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-root .workspace-tab-header .workspace-tab-header-inner-icon{--icon-color:var(--minimal-tab-text-color-active);--icon-color-hover:var(--minimal-tab-text-color-active);--icon-color-active:var(--minimal-tab-text-color-active);--icon-color-focused:var(--minimal-tab-text-color-active)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header,.colorful-frame .mod-right-split .mod-top .workspace-tab-header,.colorful-frame .sidebar-toggle-button,.colorful-frame .workspace-tab-header-new-tab,.colorful-frame .workspace-tab-header-tab-list,.colorful-frame .workspace-tab-header:not(.is-active),.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .sidebar-toggle-button,.colorful-frame.is-focused .workspace-tab-header-new-tab,.colorful-frame.is-focused .workspace-tab-header-tab-list,.colorful-frame.is-focused .workspace-tab-header:not(.is-active){--background-modifier-hover:var(--frame-outline-color);--icon-color:var(--frame-icon-color);--icon-color-hover:var(--frame-icon-color);--icon-color-active:var(--frame-icon-color);--icon-color-focused:var(--frame-icon-color);--icon-color-focus:var(--frame-icon-color)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon{color:var(--frame-icon-color)}.workspace-leaf-resize-handle{transition:none}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle{-webkit-app-region:no-drag;border:0;z-index:15}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{content:"";height:100%;width:1px;background:linear-gradient(180deg,var(--frame-outline-color) var(--header-height),var(--divider-color) var(--header-height));top:0;position:absolute}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:hover:after{background:var(--divider-color-hover)}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after{left:0}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{right:0}body.colorful-headings{--h1-color:var(--color-red);--h2-color:var(--color-orange);--h3-color:var(--color-yellow);--h4-color:var(--color-green);--h5-color:var(--color-blue);--h6-color:var(--color-purple)}body.colorful-headings .modal{--h1-color:var(--text-normal);--h2-color:var(--text-normal);--h3-color:var(--text-normal);--h4-color:var(--text-normal);--h5-color:var(--text-normal);--h6-color:var(--text-normal)}.is-mobile .tree-item-self .collapse-icon{width:20px}body:not(.minimal-icons-off) svg.calendar-day,body:not(.minimal-icons-off) svg.excalidraw-icon,body:not(.minimal-icons-off) svg.globe,body:not(.minimal-icons-off) svg.longform,body:not(.minimal-icons-off) svg.obsidian-leaflet-plugin-icon-map{background-color:currentColor}body:not(.minimal-icons-off) svg.excalidraw-icon path{display:none}body:not(.minimal-icons-off) svg.bar-graph{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.excalidraw-icon{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.longform{-webkit-mask-image:url('data:image/svg+xml;utf8,')}.workspace-ribbon.mod-left{border-left:0;transition:none}:root{--focus-animation-duration:0.1s}.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed,.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary)!important}.minimal-focus-mode .workspace-ribbon.mod-left{transition:background-color 0s linear 0s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed{border-color:transparent;background-color:var(--background-primary)}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary);border-color:transparent}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-settings{opacity:0;transition:opacity var(--focus-animation-duration) ease-in-out .1s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-settings{opacity:1;transition:opacity var(--focus-animation-duration) ease-in-out .1s}.minimal-focus-mode.borders-title .workspace-ribbon.mod-left.is-collapsed{border-right:none}.minimal-focus-mode .mod-root .sidebar-toggle-button.mod-right{opacity:0;transition:opacity var(--focus-animation-duration) ease-in-out .5s}.minimal-focus-mode:not(.minimal-status-off) .status-bar{opacity:0;transition:opacity var(--focus-animation-duration) ease-in-out}.minimal-focus-mode .status-bar:hover{opacity:1;transition:opacity var(--focus-animation-duration) ease-in-out}.minimal-focus-mode .mod-root .workspace-tabs{position:relative}.minimal-focus-mode .mod-root .workspace-tabs:before:hover{background-color:#00f}.minimal-focus-mode .mod-root .workspace-tab-header-container{height:0;transition:all var(--focus-animation-duration) linear .6s;--tab-outline-width:0px}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-tab-list{opacity:0;transition:all var(--focus-animation-duration) linear .6s}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-spacer:before{width:100%;content:" ";background-color:rgba(0,0,0,0);height:15px;position:absolute;z-index:100;top:0;left:0}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner .workspace-tab-header.is-active,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner .workspace-tab-header.is-active::after,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner .workspace-tab-header.is-active::before{transition:all var(--focus-animation-duration) linear .6s}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{height:var(--header-height);--tab-outline-width:1px;transition:all var(--focus-animation-duration) linear .05s}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .sidebar-toggle-button.mod-right,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-tab-list{opacity:1;transition:all var(--focus-animation-duration) linear .05s}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner .workspace-tab-header.is-active,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner .workspace-tab-header.is-active::after,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner .workspace-tab-header.is-active::before{transition:all var(--focus-animation-duration) linear .05s}.minimal-focus-mode.mod-macos:not(.is-fullscreen) .workspace:not(.is-left-sidedock-open) .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner{padding-top:30px}body.show-view-header .app-container .workspace-split.mod-root>.workspace-leaf .view-header{transition:height var(--focus-animation-duration) linear .1s}body.minimal-focus-mode.show-view-header .mod-top-left-space .view-header{padding-left:var(--frame-left-space)}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header{height:0;transition:all var(--focus-animation-duration) linear .5s}body.minimal-focus-mode.show-view-header .view-header::after{width:100%;content:" ";background-color:rgba(0,0,0,0);height:40px;position:absolute;z-index:-9;top:0}body.minimal-focus-mode.show-view-header .view-actions,body.minimal-focus-mode.show-view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header-title-container{opacity:0;transition:all var(--focus-animation-duration) linear .5s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:focus-within,body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:hover,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header{height:calc(var(--header-height) + 2px);transition:all var(--focus-animation-duration) linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-actions,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-actions,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:hover .view-actions,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-title-container{opacity:1;transition:all var(--focus-animation-duration) linear .1s}body.minimal-focus-mode.show-view-header .view-content{height:100%}.full-width-media{--iframe-width:100%}.full-width-media .markdown-preview-view .external-embed,.full-width-media .markdown-preview-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view audio,.full-width-media .markdown-preview-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view p:has(.external-embed),.full-width-media .markdown-preview-view video,.full-width-media .markdown-source-view .external-embed,.full-width-media .markdown-source-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view audio,.full-width-media .markdown-source-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view p:has(.external-embed),.full-width-media .markdown-source-view video{width:100%}.markdown-rendered img:not(.emoji),.markdown-rendered video,.markdown-source-view img:not(.emoji),.markdown-source-view video{border-radius:var(--image-radius)}.tabular{font-variant-numeric:tabular-nums}.table-small table:not(.calendar){--table-text-size:85%}.table-tiny table:not(.calendar){--table-text-size:75%}.row-hover{--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-row-background-hover:var(--hl1);--table-row-alt-background-hover:var(--hl1)}.row-alt{--table-row-alt-background:var(--background-table-rows);--table-row-alt-background-hover:var(--background-table-rows);--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px}.col-alt .markdown-rendered:not(.cards){--table-column-alt-background:var(--background-table-rows)}.table-tabular table:not(.calendar){font-variant-numeric:tabular-nums}.table-center .markdown-preview-view .markdown-preview-sizer table,.table-center .markdown-source-view.mod-cm6 .table-wrapper,.table-center.markdown-preview-view .markdown-preview-sizer table,.table-center.markdown-source-view.mod-cm6 .table-wrapper{margin:0 auto}.table-lines{--table-border-width:var(--border-width);--table-header-border-width:var(--border-width);--table-column-first-border-width:var(--border-width);--table-column-last-border-width:var(--border-width);--table-row-last-border-width:var(--border-width);--table-edge-cell-padding:8px;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-add-button-border-width:1px}.table-nowrap{--table-white-space:nowrap}.table-nowrap-first table tbody>tr>td:first-child,.table-nowrap-first table thead>tr>th:first-child{--table-white-space:nowrap}.table-nowrap .table-wrap,.trim-cols{--table-white-space:normal}.table-numbers{--table-numbers-padding-right:0.5em}.table-numbers table:not(.calendar){counter-reset:section}.table-numbers table:not(.calendar)>thead>tr>th:first-child{white-space:nowrap}.table-numbers table:not(.calendar)>thead>tr>th:first-child::before{content:" ";padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em}.table-numbers table:not(.calendar)>thead>tr>th:first-child .cm-s-obsidian,.table-numbers table:not(.calendar)>thead>tr>th:first-child .table-cell-wrapper{display:inline-block;min-width:10px}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child{white-space:nowrap}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper::before,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child::before{counter-increment:section;content:counter(section) " ";text-align:center;padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em;color:var(--text-faint);font-variant-numeric:tabular-nums}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper .cm-s-obsidian,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child .cm-s-obsidian{display:inline-block;min-width:10px}.table-numbers .table-editor{--table-numbers-padding-right:0}.row-lines-off{--table-row-last-border-width:0}.row-lines-off .table-view-table>tbody>tr>td,.row-lines-off table:not(.calendar) tbody>tr:last-child>td,.row-lines-off table:not(.calendar) tbody>tr>td{border-bottom:none}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards),.row-lines:not(.table-lines) .markdown-source-view:not(.cards){--table-row-last-border-width:0px}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td{border-bottom:var(--table-border-width) solid var(--table-border-color)}.col-lines .table-view-table thead>tr>th:not(:last-child),.col-lines .table-view-table>tbody>tr>td:not(:last-child),.col-lines table:not(.calendar) tbody>tr>td:not(:last-child){border-right:var(--table-border-width) solid var(--background-modifier-border)}:root{--image-mix:normal}.image-blend-light{--image-mix:multiply}.theme-dark .markdown-preview-view img,.theme-dark .markdown-source-view img{opacity:var(--image-muted);transition:opacity .25s linear}@media print{body{--image-muted:1}}.theme-dark .markdown-preview-view img:hover,.theme-dark .markdown-source-view img:hover,.theme-dark .print-preview img{opacity:1;transition:opacity .25s linear}.theme-light img{mix-blend-mode:var(--image-mix)}div[src$="#invert"],div[src$="#multiply"]{background-color:var(--background-primary)}.theme-dark div[src$="#invert"] img,.theme-dark img[src$="#invert"],.theme-dark span[src$="#invert"] img{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-dark div[src$="#multiply"] img,.theme-dark img[src$="#multiply"],.theme-dark span[src$="#multiply"] img{mix-blend-mode:screen}.theme-light div[src$="#multiply"] img,.theme-light img[src$="#multiply"],.theme-light span[src$="#multiply"] img{mix-blend-mode:multiply}.theme-light div[src$="#invertW"] img,.theme-light img[src$="#invertW"],.theme-light span[src$=invertW] img{filter:invert(1) hue-rotate(180deg)}img[src$="#circle"]:not(.emoji),span[src$="#circle"] img:not(.emoji),span[src$="#round"] img:not(.emoji){border-radius:50%;aspect-ratio:1/1}div[src$="#outline"] img,img[src$="#outline"],span[src$="#outline"] img{border:1px solid var(--ui1)}img[src$="#interface"],span[src$="#interface"] img{border:1px solid var(--ui1);box-shadow:0 .5px .9px rgba(0,0,0,.021),0 1.3px 2.5px rgba(0,0,0,.03),0 3px 6px rgba(0,0,0,.039),0 10px 20px rgba(0,0,0,.06);margin-top:10px;margin-bottom:15px;border-radius:var(--radius-m)}body{--image-grid-fit:cover;--image-grid-background:transparent;--img-grid-gap:0.5rem}@media(max-width:400pt){body{--img-grid-gap:0.25rem}}.img-grid-ratio{--image-grid-fit:contain}.img-grid .image-embed.is-loaded{line-height:0}.img-grid .image-embed.is-loaded img{background-color:var(--image-grid-background)}.img-grid .image-embed.is-loaded img:active{background-color:rgba(0,0,0,0)}.img-grid .markdown-preview-section>div:has(img) .image-embed~br,.img-grid .markdown-preview-section>div:has(img) img~br,.img-grid .markdown-preview-section>div:has(img) p:empty{display:none}.img-grid .markdown-preview-section div:has(>.image-embed~.image-embed),.img-grid .markdown-preview-section div:has(>img~img),.img-grid .markdown-preview-section p:has(>.image-embed~.image-embed),.img-grid .markdown-preview-section p:has(>.image-embed~img),.img-grid .markdown-preview-section p:has(>img~.image-embed),.img-grid .markdown-preview-section p:has(>img~img){display:grid;margin-block-start:var(--img-grid-gap);margin-block-end:var(--img-grid-gap);grid-column-gap:var(--img-grid-gap);grid-row-gap:0;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.img-grid .markdown-preview-section div:has(>.image-embed~.image-embed)>img,.img-grid .markdown-preview-section div:has(>img~img)>img,.img-grid .markdown-preview-section p:has(>.image-embed~.image-embed)>img,.img-grid .markdown-preview-section p:has(>.image-embed~img)>img,.img-grid .markdown-preview-section p:has(>img~.image-embed)>img,.img-grid .markdown-preview-section p:has(>img~img)>img{object-fit:var(--image-grid-fit);align-self:stretch}.img-grid .markdown-preview-section div:has(>.image-embed~.image-embed)>.internal-embed img,.img-grid .markdown-preview-section div:has(>img~img)>.internal-embed img,.img-grid .markdown-preview-section p:has(>.image-embed~.image-embed)>.internal-embed img,.img-grid .markdown-preview-section p:has(>.image-embed~img)>.internal-embed img,.img-grid .markdown-preview-section p:has(>img~.image-embed)>.internal-embed img,.img-grid .markdown-preview-section p:has(>img~img)>.internal-embed img{object-fit:var(--image-grid-fit);height:100%;align-self:center}.img-grid .markdown-preview-section>div:has(img)>p{display:grid;margin-block-start:var(--img-grid-gap);margin-block-end:var(--img-grid-gap);grid-column-gap:var(--img-grid-gap);grid-row-gap:0;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.img-grid .markdown-preview-section>div:has(img)>p>br{display:none}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content div:not(.canvas-node-content) img{cursor:zoom-in}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content img:active{cursor:zoom-out;max-width:100%;z-index:900}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active,body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .markdown-source-view.mod-cm6 .cm-content>img[contenteditable=false]:active{background-color:var(--background-primary)}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .image-embed:not(.canvas-node-content):active,body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active,body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .markdown-source-view.mod-cm6 .cm-content>img[contenteditable=false]:active{--container-img-width:100%;--container-img-max-width:100%;aspect-ratio:unset;cursor:zoom-out;display:block;z-index:200;position:fixed;max-height:calc(100% + 1px);max-width:100%;height:calc(100% + 1px);width:100%;object-fit:contain;margin:-.5px auto 0!important;text-align:center;padding:0;left:0;right:0;bottom:0}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .image-embed:not(.canvas-node-content):active:after{background-color:var(--background-primary);opacity:.9;content:" ";height:calc(100% + 1px);width:100%;position:fixed;left:0;right:1px;z-index:0}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .image-embed:not(.canvas-node-content):active img{aspect-ratio:unset;z-index:99;padding:0;margin:0 auto;width:calc(100% - 20px);max-height:95vh;object-fit:contain;left:0;right:0;bottom:0;position:absolute;opacity:1}body:not(.zoom-off):not(.is-mobile) .workspace-leaf-content[data-type=markdown] .view-content .markdown-source-view.mod-cm6 .cm-content>[contenteditable=false]:has(.image-embed:not(.canvas-node-content):active){contain:unset!important}.labeled-nav.is-fullscreen:not(.colorful-frame),.labeled-nav.mod-windows{--labeled-nav-top-margin:0}.labeled-nav{--labeled-nav-top-margin:var(--header-height)}.labeled-nav.is-translucent .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{background-color:rgba(0,0,0,0)}.labeled-nav.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav.mod-macos .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before{-webkit-app-region:drag;position:absolute;width:calc(100% - var(--divider-width));height:calc(var(--header-height) - var(--tab-outline-width));border-bottom:0 solid var(--tab-outline-color)}.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed){border:none;--tab-outline-width:0px}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos:not(.hider-ribbon) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{border-bottom:var(--tab-outline-width) solid var(--tab-outline-color)}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav.mod-macos:not(.hider-ribbon) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav:not(.is-hidden-frameless) .workspace-ribbon.mod-left:not(.is-collapsed){--tab-outline-width:1px}.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{position:absolute;top:0;content:" "}.labeled-nav.hider-ribbon.mod-macos.is-hidden-frameless:not(.is-fullscreen):not(.is-popout-window) .mod-left-split:not(.is-sidedock-collapsed) .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-spacer{display:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-inner-title{display:inline-block;font-weight:500;font-size:var(--font-adaptive-smaller)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{position:relative;flex-direction:column-reverse!important;height:auto;width:100%}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .sidebar-toggle-button.mod-left{position:absolute;justify-content:flex-end;padding-right:var(--size-4-2);top:0;right:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{padding:var(--size-4-2) var(--size-4-2);margin-top:var(--labeled-nav-top-margin);flex-direction:column!important;background-color:var(--background-secondary)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-container-inner{flex-grow:1;gap:0;padding:var(--size-4-2) var(--size-4-3)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header{--icon-color:var(--text-muted);--tab-text-color:var(--text-muted);--tab-text-color-focused:var(--text-muted);padding:0;margin-bottom:2px;border:none;height:auto}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:not(:hover){background-color:rgba(0,0,0,0)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover{opacity:1;--tab-text-color-active:var(--text-normal);--tab-text-color-focused:var(--text-normal);--tab-text-color-focused-active:var(--text-normal);--tab-text-color-focused-active-current:var(--text-normal);--icon-color:var(--text-normal)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header .workspace-tab-header-inner{gap:var(--size-2-3);padding:var(--size-4-1) var(--size-4-2);box-shadow:none;border:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.has-active-menu:hover,.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover{background-color:rgba(0,0,0,0)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover .workspace-tab-header-inner,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:var(--nav-item-background-hover)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover .workspace-tab-header-inner-icon{color:var(--icon-color-active)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{border:none;padding:0}body:not(.links-int-on){--link-decoration:none}body:not(.links-ext-on){--link-external-decoration:none}body:not(.sidebar-color) .mod-right-split{--background-secondary:var(--background-primary)}body:not(.sidebar-color) .mod-right-split :not(.mod-top) .workspace-tab-header-container{--tab-container-background:var(--background-primary)}.theme-dark,.theme-light{--minimal-tab-text-color:var(--tx2);--minimal-tab-text-color-active:var(--tx1)}.workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color);--tab-text-color-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active-current:var(--minimal-tab-text-color-active)}.tabs-plain-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-plain-square .mod-root .workspace-tab-header-container{padding-left:0;padding-right:0}.tabs-plain-square .mod-root .workspace-tab-header-container-inner{margin-top:-1px;margin-left:-15px}.tabs-plain-square .mod-root .workspace-tab-header{padding:0}.tabs-plain-square .mod-root .workspace-tab-header-inner{padding:0 8px}.tabs-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-underline .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0;--tab-outline-width:0px;--tab-background-active:transparent}.tabs-underline .mod-root .workspace-tab-header-container{border-bottom:1px solid var(--divider-color)}.tabs-underline .mod-root .workspace-tab-header{border-bottom:2px solid transparent}.tabs-underline .mod-root .workspace-tab-header:hover{border-bottom:2px solid var(--ui2)}.tabs-underline .mod-root .workspace-tab-header:hover .workspace-tab-header-inner{background-color:rgba(0,0,0,0)}.tabs-underline .mod-root .workspace-tab-header.is-active{border-bottom:2px solid var(--ax3)}.tabs-underline .mod-root .workspace-tab-header-inner:hover{background-color:rgba(0,0,0,0)}body:not(.sidebar-tabs-underline):not(.sidebar-tabs-index):not(.sidebar-tabs-square) .workspace>.workspace-split:not(.mod-root) .workspace-tabs:not(.mod-top) .workspace-tab-header-container{--tab-outline-width:0}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked){--tab-background:var(--frame-outline-color);--tab-outline-width:1px}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button{color:var(--minimal-tab-text-color-active)}.tabs-modern.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{--tab-outline-width:0px}.tabs-modern .mod-root{--tab-container-background:var(--background-primary)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked){--tab-background:var(--background-modifier-hover);--tab-height:calc(var(--header-height) - 14px);--tab-outline-width:0px}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::before{display:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner{align-items:center;margin:0;padding:2px var(--size-4-2) 0 var(--size-4-1)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-title{text-overflow:ellipsis;-webkit-mask-image:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header{background:rgba(0,0,0,0);border-radius:5px;border:none;box-shadow:none;height:var(--tab-height);margin-left:var(--size-4-1);padding:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-title{color:var(--tab-text-color-active)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active.mod-active,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover{opacity:1;background-color:var(--tab-background)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-new-tab{margin-inline-end:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner{padding:0 var(--size-4-1) 0 var(--size-4-2);border:1px solid transparent}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:rgba(0,0,0,0)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:not(.mod-active) .workspace-tab-header-inner,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(:hover):not(.mod-active) .workspace-tab-header-inner{border:1px solid var(--tab-outline-color)}.tab-names-on .workspace-split:not(.mod-root) .workspace-tab-header-container-inner{--sidebar-tab-text-display:static}.tab-names-on .workspace-split:not(.mod-root) .workspace-tab-header-container-inner .workspace-tab-header-inner-title{font-weight:500}.tab-names-on .workspace-split:not(.mod-root) .workspace-tab-header-container-inner .workspace-tab-header-inner{gap:var(--size-2-3)}.tab-names-single .workspace>.workspace-split:not(.mod-root) .workspace-tab-header-container-inner .workspace-tab-header:only-child{--sidebar-tab-text-display:static;background-color:rgba(0,0,0,0)}.tab-names-single .workspace>.workspace-split:not(.mod-root) .workspace-tab-header-container-inner .workspace-tab-header:only-child .workspace-tab-header-inner-title{font-weight:500}.tab-names-single .workspace>.workspace-split:not(.mod-root) .workspace-tab-header-container-inner .workspace-tab-header:only-child .workspace-tab-header-inner{gap:var(--size-2-3)}.tabs-modern.sidebar-tabs-default .mod-right-split,.tabs-modern.sidebar-tabs-wide .mod-right-split{--tab-outline-width:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:0;margin:0;flex-grow:1;gap:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header{flex-grow:1;border-radius:0;max-width:100px}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover{background-color:rgba(0,0,0,0)}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner{background-color:rgba(0,0,0,0)}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner{border-bottom:2px solid transparent;border-radius:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover{border-color:var(--ui2)}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner{border-color:var(--ax3);padding-top:1px}.sidebar-tabs-square .mod-left-split,.sidebar-tabs-square .mod-right-split{--tab-radius:0px}.sidebar-tabs-plain-square .mod-left-split,.sidebar-tabs-plain-square .mod-right-split{--tab-radius:0px}.sidebar-tabs-plain-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-plain-square:not(.labeled-nav) .mod-left-split{--tab-background-active:var(--background-secondary)}.sidebar-tabs-plain-square .mod-right-split .workspace-tab-header-container,.sidebar-tabs-plain-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-plain-square:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-left:0}.sidebar-tabs-plain-square .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-plain-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-plain-square:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:0;margin:0 0 calc(var(--tab-outline-width)*-1);flex-grow:1;gap:0}.sidebar-tabs-plain-square .mod-right-split .workspace-tab-header,.sidebar-tabs-plain-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-plain-square:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1;max-width:100px;border-radius:var(--tab-radius) var(--tab-radius) 0 0}.sidebar-tabs-plain-square .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-plain-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-plain-square:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{box-shadow:0 0 0 var(--tab-outline-width) var(--tab-outline-color);color:var(--tab-text-color-active);background-color:var(--tab-background-active)}.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-index:not(.labeled-nav) .mod-left-split,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-square:not(.labeled-nav) .mod-left-split{--tab-background-active:var(--background-secondary)}.sidebar-tabs-index .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner,.sidebar-tabs-square .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:1px var(--size-4-2) 0;margin:6px 0 calc(var(--tab-outline-width)*-1);flex-grow:1}.sidebar-tabs-index .mod-right-split .workspace-tab-header,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header,.sidebar-tabs-square .mod-right-split .workspace-tab-header,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1;max-width:100px;border-radius:var(--tab-radius) var(--tab-radius) 0 0}.sidebar-tabs-index .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active,.sidebar-tabs-square .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{box-shadow:0 0 0 var(--tab-outline-width) var(--tab-outline-color);color:var(--tab-text-color-active);background-color:var(--tab-background-active)}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{flex-grow:1;border:1px solid var(--tab-outline-color);padding:3px;margin:6px 8px 6px;border-radius:4px}.sidebar-tabs-wide .mod-right-split .workspace-tab-header,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1}.sidebar-tabs-wide .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{border-color:transparent}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.full-file-names{--nav-item-white-space:normal}body:not(.full-file-names){--nav-item-white-space:nowrap}body:not(.full-file-names) .tree-item-self{white-space:nowrap}body:not(.full-file-names) .tree-item-inner{text-overflow:ellipsis;overflow:hidden}.theme-dark,.theme-light{--h1l:var(--ui1);--h2l:var(--ui1);--h3l:var(--ui1);--h4l:var(--ui1);--h5l:var(--ui1);--h6l:var(--ui1)}.h1-l .markdown-reading-view h1:not(.embedded-note-title),.h1-l .mod-cm6 .cm-editor .HyperMD-header-1{border-bottom:1px solid var(--h1l);padding-bottom:.4em;margin-block-end:.6em}.h2-l .markdown-reading-view h2,.h2-l .mod-cm6 .cm-editor .HyperMD-header-2{border-bottom:1px solid var(--h2l);padding-bottom:.4em;margin-block-end:.6em}.h3-l .markdown-reading-view h3,.h3-l .mod-cm6 .cm-editor .HyperMD-header-3{border-bottom:1px solid var(--h3l);padding-bottom:.4em;margin-block-end:.6em}.h4-l .markdown-reading-view h4,.h4-l .mod-cm6 .cm-editor .HyperMD-header-4{border-bottom:1px solid var(--h4l);padding-bottom:.4em;margin-block-end:.6em}.h5-l .markdown-reading-view h5,.h5-l .mod-cm6 .cm-editor .HyperMD-header-5{border-bottom:1px solid var(--h5l);padding-bottom:.4em;margin-block-end:.6em}.h6-l .markdown-reading-view h6,.h6-l .mod-cm6 .cm-editor .HyperMD-header-6{border-bottom:1px solid var(--h6l);padding-bottom:.4em;margin-block-end:.6em}.is-tablet .workspace-drawer{padding-top:0}.is-tablet .workspace-drawer:not(.is-pinned){margin:30px 16px 0;height:calc(100vh - 48px);border-radius:15px;border:none}.is-tablet .workspace-drawer-ribbon{background-color:var(--background-primary);border-right:1px solid var(--background-modifier-border)}.is-tablet .workspace-drawer-header,.is-tablet .workspace-drawer.is-pinned .workspace-drawer-header{padding-top:var(--size-4-4)}.is-tablet .workspace-drawer-header-icon{margin-inline-start:0}.is-mobile{--font-bold:600;--font-ui-medium:var(--font-adaptive-small);--interactive-normal:var(--background-modifier-hover);--background-modifier-form-field:var(--background-secondary);--background-modifier-form-field-highlighted:var(--background-secondary)}.is-mobile .markdown-source-view.mod-cm6 .cm-gutters{margin-left:0}.is-mobile .workspace-drawer.mod-left.is-pinned{width:var(--mobile-left-sidebar-width);min-width:150pt}.is-mobile .workspace-drawer.mod-right.is-pinned{width:var(--mobile-right-sidebar-width);min-width:150pt}.backlink-pane>.tree-item-self,.backlink-pane>.tree-item-self:hover,.outgoing-link-pane>.tree-item-self,.outgoing-link-pane>.tree-item-self:hover{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500}body{--canvas-dot-pattern:var(--background-modifier-border-hover)}.canvas-node-label{font-size:var(--font-adaptive-small)}.canvas-edges :not(.is-themed) path.canvas-display-path{stroke:var(--background-modifier-border-focus)}.canvas-edges :not(.is-themed) polyline.canvas-path-end{stroke:var(--background-modifier-border-focus);fill:var(--background-modifier-border-focus)}.canvas-node-container{border:1.5px solid var(--background-modifier-border-focus)}.node-insert-event.mod-inside-iframe{--max-width:100%;--folding-offset:0px}.node-insert-event.mod-inside-iframe .cm-editor .cm-content{padding-top:0}.hider-file-nav-header:not(.labeled-nav) .nav-files-container{padding-top:var(--size-4-3)}.is-mobile .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{display:none}body:not(.is-mobile) .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest)}.nav-buttons-container{justify-content:flex-start}.nav-file-tag{padding-top:.2em;background-color:rgba(0,0,0,0);color:var(--text-faint)}.nav-file .is-active .nav-file-tag,.nav-file:hover .nav-file-tag{color:var(--text-muted)}input.prompt-input,input.prompt-input:focus,input.prompt-input:focus-visible,input.prompt-input:hover{border-color:rgba(var(--mono-rgb-100),.05)}.is-mobile .mod-publish .modal-content{display:unset;padding:10px 10px 10px;margin-bottom:120px;overflow-x:hidden}.is-mobile .mod-publish .button-container,.is-mobile .modal.mod-publish .modal-button-container{padding:10px 15px 30px;margin-left:0;left:0}.is-mobile .modal.mod-publish .modal-title{padding:10px 20px;margin:0 -10px;border-bottom:1px solid var(--background-modifier-border)}.is-mobile .publish-site-settings-container{margin-right:0;padding:0}.is-mobile .modal.mod-publish .modal-content .publish-sections-container{margin-right:0;padding-right:0}@media(max-width:400pt){.is-mobile .publish-changes-info,.is-mobile .publish-section-header{flex-wrap:wrap;border:none}.is-mobile .publish-changes-info .publish-changes-add-linked-btn{flex-basis:100%;margin-top:10px}.is-mobile .publish-section-header-text{flex-basis:100%;margin-bottom:10px;margin-left:20px;margin-top:-8px}.is-mobile .publish-section{background:var(--background-secondary);border-radius:10px;padding:12px 12px 1px}.is-mobile .publish-changes-switch-site{flex-grow:0;margin-right:10px}}.release-notes-view .cm-scroller.is-readable-line-width{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.search-results-info{border-bottom:none}.workspace-leaf-content[data-type=sync] .tree-item.nav-folder .nav-folder-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500;margin-bottom:4px}.workspace-leaf-content[data-type=sync] .tree-item.nav-folder .nav-folder-title:hover{color:var(--text-normal)}.workspace-leaf-content[data-type=sync] .tree-item.nav-folder.is-collapsed .nav-folder-title{color:var(--text-faint)}.workspace-leaf-content[data-type=sync] .tree-item.nav-folder.is-collapsed .nav-folder-title:hover{color:var(--text-muted)}.obsidian-banner.solid{border-bottom:var(--divider-width) solid var(--divider-color)}.contextual-typography .markdown-preview-view div.has-banner-icon.obsidian-banner-wrapper{overflow:visible}.theme-dark .markdown-preview-view img.emoji{opacity:1}body.theme-dark .button-default,body.theme-light .button-default{border:none;box-shadow:none;height:var(--input-height);background:var(--background-modifier-hover);color:var(--text-normal);font-size:revert;font-weight:500;transform:none;transition:all .1s linear;padding:0 20px}body.theme-dark .button-default:hover,body.theme-light .button-default:hover{border:none;background:var(--background-modifier-border-hover);box-shadow:none;transform:none;transition:all .1s linear}body.theme-dark .button-default:active,body.theme-dark .button-default:focus,body.theme-light .button-default:active,body.theme-light .button-default:focus{box-shadow:none}body .button-default.blue{background-color:var(--color-blue)!important}.button-default.red{background-color:var(--color-red)!important}.button-default.green{background-color:var(--color-green)!important}.button-default.yellow{background-color:var(--color-yellow)!important}.button-default.purple{background-color:var(--color-purple)!important}.workspace-leaf-content[data-type=calendar] .view-content{padding:5px 0 0 0}.mod-root #calendar-container{width:var(--line-width);max-width:var(--max-width);margin:0 auto;padding:0}body{--calendar-dot-active:var(--text-faint);--calendar-dot-today:var(--text-accent)}#calendar-container{padding:0 var(--size-4-4) var(--size-4-1);--color-background-day-empty:var(--background-secondary-alt);--color-background-day-active:var(--background-modifier-hover);--color-background-day-hover:var(--background-modifier-hover);--color-dot:var(--text-faint);--calendar-text-active:inherit;--color-text-title:var(--text-normal);--color-text-heading:var(--text-muted);--color-text-day:var(--text-normal);--color-text-today:var(--text-normal);--color-arrow:var(--text-faint);--color-background-day-empty:transparent}#calendar-container .table{border-collapse:separate;table-layout:fixed}#calendar-container h2{font-weight:400;font-size:var(--h2)}#calendar-container .arrow{cursor:var(--cursor);width:22px;border-radius:4px;padding:3px 7px}#calendar-container .arrow svg{width:12px;height:12px;color:var(--text-faint);opacity:.7}#calendar-container .arrow:hover{fill:var(--text-muted);color:var(--text-muted);background-color:var(--background-modifier-hover)}#calendar-container .arrow:hover svg{color:var(--text-muted);opacity:1}#calendar-container tr th{padding:2px 0 4px;font-weight:500;letter-spacing:.1em;font-size:var(--font-adaptive-smallest)}#calendar-container tr th:first-child{padding-left:0!important}#calendar-container tr td{padding:2px 0 0 0;border-radius:var(--radius-m);cursor:var(--cursor);border:1px solid transparent;transition:none}#calendar-container tr td:first-child{padding-left:0!important}#calendar-container .nav{padding:0;margin:var(--size-4-2) var(--size-4-1)}#calendar-container .dot{margin:0}#calendar-container .month,#calendar-container .title,#calendar-container .year{font-size:calc(var(--font-adaptive-small) + 2px);font-weight:400;color:var(--text-normal)}#calendar-container .today,#calendar-container .today.active{color:var(--text-accent);font-weight:600}#calendar-container .today .dot,#calendar-container .today.active .dot{fill:var(--calendar-dot-today)}#calendar-container .active .task{stroke:var(--text-faint)}#calendar-container .active{color:var(--text-normal)}#calendar-container .reset-button{text-transform:none;letter-spacing:0;font-size:var(--font-adaptive-smaller);font-weight:500;color:var(--text-muted);border-radius:4px;margin:0;padding:2px 8px}#calendar-container .reset-button:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}#calendar-container .day,#calendar-container .reset-button,#calendar-container .week-num{cursor:var(--cursor)}#calendar-container .day.adjacent-month{color:var(--text-faint);opacity:1}#calendar-container .day{padding:2px 4px 4px;transition:none}#calendar-container .day,#calendar-container .week-num{font-size:calc(var(--font-adaptive-smaller) + 5%)}#calendar-container .active,#calendar-container .active.today,#calendar-container .day:hover,#calendar-container .week-num:hover{background-color:var(--color-background-day-active);color:var(--calendar-text-active);transition:none}#calendar-container .active .dot{fill:var(--calendar-dot-active)}#calendar-container .active .task{stroke:var(--text-faint)}.block-language-chart canvas,.block-language-dataviewjs canvas{margin:1em 0}.theme-dark,.theme-light{--chart-color-1:var(--color-blue);--chart-color-2:var(--color-red);--chart-color-3:var(--color-yellow);--chart-color-4:var(--color-green);--chart-color-5:var(--color-orange);--chart-color-6:var(--color-purple);--chart-color-7:var(--color-cyan);--chart-color-8:var(--color-pink)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact,.checklist-plugin-main .group .page,.checklist-plugin-main .group svg{cursor:var(--cursor)}.workspace .view-content .checklist-plugin-main{padding:10px 10px 15px 15px;--todoList-togglePadding--compact:2px;--todoList-listItemMargin--compact:2px}.checklist-plugin-main .title{font-weight:400;color:var(--text-muted);font-size:var(--font-adaptive-small)}.checklist-plugin-main .group svg{fill:var(--text-faint)}.checklist-plugin-main .group svg:hover{fill:var(--text-normal)}.checklist-plugin-main .group .title:hover{color:var(--text-normal)}.checklist-plugin-main .group:not(:last-child){border-bottom:1px solid var(--background-modifier-border)}.checklist-plugin-main .group{padding:0 0 2px 0}.checklist-plugin-main .group .classic:last-child,.checklist-plugin-main .group .compact:last-child{margin-bottom:10px}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{font-size:var(--font-adaptive-small)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{background:rgba(0,0,0,0);border-radius:0;margin:1px auto;padding:0}.checklist-plugin-main .group .classic .content{padding:0}.checklist-plugin-main .group .classic:hover,.checklist-plugin-main .group .compact:hover{background:rgba(0,0,0,0)}.markdown-preview-view.checklist-plugin-main ul>li:not(.task-list-item)::before{display:none}.checklist-plugin-main .group .compact>.toggle .checked{background:var(--text-accent);top:-1px;left:-1px;height:18px;width:18px}.checklist-plugin-main .compact .toggle:hover{opacity:1!important}.checklist-plugin-main .group .count{font-size:var(--font-adaptive-smaller);padding:0;background:rgba(0,0,0,0);font-weight:400;color:var(--text-faint)}.checklist-plugin-main .group .group-header:hover .count{color:var(--text-muted)}.checklist-plugin-main .group .checkbox{border:1px solid var(--background-modifier-border-hover);min-height:18px;min-width:18px;height:18px;width:18px}.checklist-plugin-main .group .checkbox:hover{border:1px solid var(--background-modifier-border-focus)}.checklist-plugin-main button:active,.checklist-plugin-main button:focus,.checklist-plugin-main button:hover{box-shadow:none!important}.checklist-plugin-main button.collapse{padding:0}body:not(.is-mobile) .checklist-plugin-main button.collapse svg{width:18px;height:18px}.is-mobile .checklist-plugin-main .group-header .title{flex-grow:1;flex-shrink:0}.is-mobile .checklist-plugin-main button{width:auto}.is-mobile .checklist-plugin-main.markdown-preview-view ul{padding-inline-start:0}.is-mobile .workspace .view-content .checklist-plugin-main{padding-bottom:50px}body #cMenuModalBar{box-shadow:0 2px 20px var(--shadow-color)}body #cMenuModalBar .cMenuCommandItem{cursor:var(--cursor)}body #cMenuModalBar button.cMenuCommandItem:hover{background-color:var(--background-modifier-hover)}.MiniSettings-statusbar-button{padding-top:0;padding-bottom:0}.MySnippets-statusbar-menu .menu-item .MS-OpenSnippet{height:auto;border:none;background:rgba(0,0,0,0);box-shadow:none;width:auto;padding:4px 6px;margin-left:0}.MySnippets-statusbar-menu .menu-item .MS-OpenSnippet svg path{fill:var(--text-muted)}.MySnippets-statusbar-menu .menu-item .MS-OpenSnippet:hover{background-color:var(--background-modifier-hover)}.dataview-inline-lists .markdown-preview-view .dataview-ul,.dataview-inline-lists .markdown-source-view .dataview-ul{--list-spacing:0}.dataview-inline-lists .markdown-preview-view .dataview-ol li:not(:last-child):after,.dataview-inline-lists .markdown-preview-view .dataview-ul li:not(:last-child):after,.dataview-inline-lists .markdown-source-view .dataview-ol li:not(:last-child):after,.dataview-inline-lists .markdown-source-view .dataview-ul li:not(:last-child):after{content:", "}.dataview-inline-lists .markdown-preview-view ul.dataview-ol>li::before,.dataview-inline-lists .markdown-preview-view ul.dataview-ul>li::before,.dataview-inline-lists .markdown-source-view ul.dataview-ol>li::before,.dataview-inline-lists .markdown-source-view ul.dataview-ul>li::before{display:none}.dataview-inline-lists .markdown-preview-view .dataview-ol li,.dataview-inline-lists .markdown-preview-view .dataview-ul li,.dataview-inline-lists .markdown-source-view .dataview-ol li,.dataview-inline-lists .markdown-source-view .dataview-ul li{display:inline-block;padding-inline-end:.25em;margin-inline-start:0}.markdown-rendered table.dataview{margin-block-start:0;margin-block-end:0}.markdown-rendered table.dataview .dataview-result-list-li{margin-inline-start:0}.markdown-preview-view .table-view-table>thead>tr>th,body .table-view-table>thead>tr>th{font-weight:400;font-size:var(--table-text-size);color:var(--text-muted);border-bottom:var(--table-border-width) solid var(--table-border-color);cursor:var(--cursor)}table.dataview ul.dataview-ul{list-style:none;padding-inline-start:0;margin-block-start:0em!important;margin-block-end:0em!important}.markdown-preview-view:not(.cards) .table-view-table>tbody>tr>td,.markdown-source-view.mod-cm6:not(.cards) .table-view-table>tbody>tr>td{max-width:var(--max-col-width)}body .dataview.small-text{color:var(--text-faint)}body:not(.row-hover) .dataview.task-list-basic-item:hover,body:not(.row-hover) .dataview.task-list-item:hover,body:not(.row-hover) .table-view-table>tbody>tr:hover{background-color:rgba(0,0,0,0)!important;box-shadow:none}body.row-hover .dataview.task-list-basic-item:hover,body.row-hover .dataview.task-list-item:hover,body.row-hover .table-view-table>tbody>tr:hover{background-color:var(--table-row-background-hover)}body .dataview-error{background-color:rgba(0,0,0,0)}.dataview.dataview-error,.markdown-source-view.mod-cm6 .cm-content .dataview.dataview-error{color:var(--text-muted)}body div.dataview-error-box{min-height:0;border:none;background-color:rgba(0,0,0,0);font-size:var(--table-text-size);border-radius:var(--radius-m);padding:15px 0;justify-content:flex-start}body div.dataview-error-box p{margin-block-start:0;margin-block-end:0;color:var(--text-faint)}table.dataview:has(+.dataview-error-box){display:none}.trim-cols .markdown-preview-view .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>thead>tr>th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ul .dataview .task-list-basic-item:hover,ul .dataview .task-list-item:hover{background-color:rgba(0,0,0,0);box-shadow:none}body .dataview.result-group{padding-left:0}body .dataview .inline-field-standalone-value,body .dataview.inline-field-key,body .dataview.inline-field-value{font-family:var(--font-text);font-size:calc(var(--font-adaptive-normal) - 2px);background:rgba(0,0,0,0);color:var(--text-muted)}body .dataview.inline-field-key{padding:0}body .dataview .inline-field-standalone-value{padding:0}body .dataview.inline-field-key::after{margin-left:3px;content:"|";color:var(--background-modifier-border)}body .dataview.inline-field-value{padding:0 1px 0 3px}.markdown-preview-view .block-language-dataview table.calendar th{border:none;cursor:default;background-image:none}.markdown-preview-view .block-language-dataview table.calendar .day{font-size:var(--font-adaptive-small)}.database-plugin__navbar,.database-plugin__scroll-container,.database-plugin__table{width:100%}.dbfolder-table-container{--font-adaptive-normal:var(--table-text-size);--font-size-text:12px}.database-plugin__cell_size_wide .database-plugin__td{padding:.15rem}.database-plugin__table{border-spacing:0!important}.MuiAppBar-root{background-color:rgba(0,0,0,0)!important}.workspace-leaf-content .view-content.dictionary-view-content{padding:0}div[data-type=dictionary-view] .contents{padding-bottom:2rem}div[data-type=dictionary-view] .results>.container{background-color:rgba(0,0,0,0);margin-top:0;max-width:none;padding:0 10px}div[data-type=dictionary-view] .error,div[data-type=dictionary-view] .errorDescription{text-align:left;font-size:var(--font-adaptive-small);padding:10px 12px 0;margin:0}div[data-type=dictionary-view] .results>.container h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 0 2px;margin-bottom:6px}div[data-type=dictionary-view] .container .main{border-radius:0;background-color:rgba(0,0,0,0);font-size:var(--font-adaptive-smaller);line-height:1.3;color:var(--text-muted);padding:5px 0 0}div[data-type=dictionary-view] .main .definition{padding:10px;border:1px solid var(--background-modifier-border);border-radius:5px;margin:10px 0 5px;background-color:var(--background-primary)}div[data-type=dictionary-view] .main .definition:last-child{border:1px solid var(--background-modifier-border)}div[data-type=dictionary-view] .main .synonyms{padding:10px 0 0}div[data-type=dictionary-view] .main .synonyms p{margin:0}div[data-type=dictionary-view] .main .definition>blockquote{margin:0}div[data-type=dictionary-view] .main .label{color:var(--text-normal);margin-bottom:2px;font-size:var(--font-adaptive-smaller);font-weight:500}div[data-type=dictionary-view] .main .mark{color:var(--text-normal);background-color:var(--text-selection);box-shadow:none}div[data-type=dictionary-view] .main>.opener{font-size:var(--font-adaptive-small);color:var(--text-normal);padding-left:5px}body .excalidraw,body .excalidraw.theme--dark{--color-primary-light:var(--text-selection);--color-primary:var(--interactive-accent);--color-primary-darker:var(--interactive-accent-hover);--color-primary-darkest:var(--interactive-accent-hover);--ui-font:var(--font-interface);--island-bg-color:var(--background-secondary);--icon-fill-color:var(--text-normal);--button-hover:var(--background-modifier-hover);--button-gray-1:var(--background-modifier-hover);--button-gray-2:var(--background-modifier-hover);--focus-highlight-color:var(--background-modifier-border-focus);--default-bg-color:var(--background-primary);--default-border-color:var(--background-modifier-border);--input-border-color:var(--background-modifier-border);--link-color:var(--text-accent);--overlay-bg-color:rgba(255, 255, 255, 0.88);--text-primary-color:var(--text-normal)}.git-view-body .opener{text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 5px 10px;margin-bottom:6px}.git-view-body .file-view .opener{text-transform:none;letter-spacing:normal;font-size:var(--font-adaptive-smallest);font-weight:400;padding:initial;margin-bottom:0}.git-view-body .file-view .opener .collapse-icon{display:flex!important;margin-left:-7px}.git-view-body{margin-top:6px}.git-view-body .file-view{margin-left:4px}.git-view-body .file-view main:hover{color:var(--text-normal)}.git-view-body .file-view .tools .type{display:none!important}.git-view-body .file-view .tools{opacity:0;transition:opacity .1s}.git-view-body .file-view main:hover>.tools{opacity:1}.git-view-body .staged{margin-bottom:12px}.git-view-body .opener.open{color:var(--text-normal)}div[data-type=git-view] .search-input-container{margin-left:0;width:100%}.git-view-body .opener .collapse-icon{display:none!important}.git-view-body main{background-color:var(--background-primary)!important;width:initial!important}.git-view-body .file-view>main:not(.topLevel){margin-left:7px}div[data-type=git-view] .commit-msg{min-height:2.5em!important;height:2.5em!important;padding:6.5px 8px!important}div[data-type=git-view] .search-input-clear-button{bottom:5.5px}.hider-vault .nav-folder.mod-root>.nav-folder-title{height:4px}.popover.hover-editor{--folding-offset:10px}.theme-dark,.theme-light{--he-title-bar-inactive-bg:var(--background-secondary);--he-title-bar-inactive-pinned-bg:var(--background-secondary);--he-title-bar-active-pinned-bg:var(--background-secondary);--he-title-bar-active-bg:var(--background-secondary);--he-title-bar-inactive-fg:var(--text-muted);--he-title-bar-active-fg:var(--text-normal);--he-title-bar-font-size:14px}.theme-light{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.032),0px 5.9px 8.7px rgba(0, 0, 0, 0.052),0px 10.4px 18.1px rgba(0, 0, 0, 0.071),0px 20px 40px rgba(0, 0, 0, 0.11)}.theme-dark{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.081),0px 5.9px 8.7px rgba(0, 0, 0, 0.131),0px 10.4px 18.1px rgba(0, 0, 0, 0.18),0px 20px 40px rgba(0, 0, 0, 0.28)}.popover.hover-editor:not(.snap-to-viewport){--max-width:92%}.popover.hover-editor:not(.snap-to-viewport) .markdown-preview-view,.popover.hover-editor:not(.snap-to-viewport) .markdown-source-view .cm-content{font-size:90%}body .popover.hover-editor:not(.is-loaded){box-shadow:var(--popover-shadow)}body .popover.hover-editor:not(.is-loaded) .markdown-preview-view{padding:15px 0 0 0}body .popover.hover-editor:not(.is-loaded) .view-content{height:100%;background-color:var(--background-primary)}body .popover.hover-editor:not(.is-loaded) .view-actions{height:auto}body .popover.hover-editor:not(.is-loaded) .popover-content{border:1px solid var(--background-modifier-border-hover)}body .popover.hover-editor:not(.is-loaded) .popover-titlebar{padding:0 4px}body .popover.hover-editor:not(.is-loaded) .popover-titlebar .popover-title{padding-left:4px;letter-spacing:-.02em;font-weight:var(--title-weight)}body .popover.hover-editor:not(.is-loaded) .markdown-embed{height:auto;font-size:unset;line-height:unset}body .popover.hover-editor:not(.is-loaded) .markdown-embed .markdown-preview-view{padding:0}body .popover.hover-editor:not(.is-loaded).show-navbar .popover-titlebar{border-bottom:var(--border-width) solid var(--background-modifier-border)}body .popover.hover-editor:not(.is-loaded) .popover-action,body .popover.hover-editor:not(.is-loaded) .popover-header-icon{cursor:var(--cursor);margin:4px 0;padding:4px 3px;border-radius:var(--radius-m);color:var(--icon-color)}body .popover.hover-editor:not(.is-loaded) .popover-action.mod-pin-popover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.mod-pin-popover{padding:4px 2px}body .popover.hover-editor:not(.is-loaded) .popover-action svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon svg{opacity:var(--icon-muted)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover{background-color:var(--background-modifier-hover);color:var(--icon-color-hover)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover svg{opacity:1;transition:opacity .1s ease-in-out}body .popover.hover-editor:not(.is-loaded) .popover-action.is-active,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.is-active{color:var(--icon-color)}body.minimal-dark-black.theme-dark,body.minimal-dark-tonal.theme-dark,body.minimal-light-tonal.theme-light,body.minimal-light-white.theme-light,body.theme-dark{--kanban-border:0px}body:not(.is-mobile) .kanban-plugin__grow-wrap>textarea:focus{box-shadow:none}body:not(.minimal-icons-off) .kanban-plugin svg.cross{height:14px;width:14px}body .kanban-plugin__icon>svg,body .kanban-plugin__lane-settings-button svg{width:18px;height:18px}body .kanban-plugin{--kanban-border:var(--border-width);--interactive-accent:var(--text-selection);--interactive-accent-hover:var(--background-modifier-hover);--text-on-accent:var(--text-normal);background-color:var(--background-primary)}body .kanban-plugin__markdown-preview-view{font-family:var(--font-text)}body .kanban-plugin__board>div{margin:0 auto}body .kanban-plugin__checkbox-label{color:var(--text-muted)}body .kanban-plugin__item-markdown ul{margin:0}body .kanban-plugin__item-content-wrapper{box-shadow:none}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea{padding:0;border:0;border-radius:0}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__item-title p,body .kanban-plugin__markdown-preview-view{font-size:var(--font-ui-medium);line-height:1.3}body .kanban-plugin__item{background-color:var(--background-primary)}body .kanban-plugin__item-title-wrapper{align-items:center}body .kanban-plugin__lane-form-wrapper{border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane-header-wrapper{border-bottom:0}body .kanban-plugin__lane-header-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-input-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-title p{background:rgba(0,0,0,0);color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:500}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea{padding:0;border-radius:0;height:auto}body .kanban-plugin__item-form .kanban-plugin__grow-wrap{background-color:var(--background-primary)}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea::placeholder{color:var(--text-faint)}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button,body .kanban-plugin__item button.kanban-plugin__item-edit-button,body .kanban-plugin__item-settings-actions>button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane-action-wrapper>button{background:rgba(0,0,0,0);transition:color .1s ease-in-out}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button:hover,body .kanban-plugin__item button.kanban-plugin__item-edit-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-edit-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{color:var(--text-normal);transition:color .1s ease-in-out;background:rgba(0,0,0,0)}body .kanban-plugin__new-lane-button-wrapper{position:fixed;bottom:30px}body .kanban-plugin__lane-items>.kanban-plugin__placeholder:only-child{border:1px dashed var(--background-modifier-border);height:2em}body .kanban-plugin__item-postfix-button-wrapper{align-self:flex-start}body .kanban-plugin__item button.kanban-plugin__item-postfix-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-prefix-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled{color:var(--text-muted)}body .kanban-plugin button{box-shadow:none;cursor:var(--cursor);height:auto}body .kanban-plugin__item button.kanban-plugin__item-postfix-button:hover,body .kanban-plugin__item button.kanban-plugin__item-prefix-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{background-color:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button{color:var(--text-muted);font-weight:400;background:rgba(0,0,0,0);min-height:calc(var(--input-height) + 8px)}body .kanban-plugin__item-button-wrapper>button:hover{color:var(--text-normal);background:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button:focus{box-shadow:none}body .kanban-plugin__item-button-wrapper{padding:1px 6px 5px;border-top:none}body .kanban-plugin__lane-setting-wrapper>div:last-child{border:none;margin:0}body .kanban-plugin.something-is-dragging{cursor:grabbing;cursor:-webkit-grabbing}body .kanban-plugin__item.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15),0 0 0 2px var(--text-selection)}body .kanban-plugin__lane-items{border:var(--kanban-border) solid var(--background-modifier-border);padding:0 4px;margin:0;background-color:var(--background-secondary)}body .kanban-plugin__lane{background:rgba(0,0,0,0);padding:0;border:var(--border-width) solid transparent}body .kanban-plugin__lane.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15);border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane .kanban-plugin__item-button-wrapper{border-top-left-radius:8px;border-top-right-radius:8px;border-top:1px solid var(--background-modifier-border);border-bottom-width:0;padding:4px 4px 0 4px}body .kanban-plugin__lane.will-prepend .kanban-plugin__lane-items{border-radius:8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form{border-top:1px solid var(--background-modifier-border);border-radius:8px 8px 0 0;padding:4px 4px 0;border-bottom-width:0}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-button-wrapper+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper,body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-form{border-top:none;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper{padding:0 4px 4px 4px;border-bottom-width:1px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__lane-items{border-bottom:none;border-top-width:1px;border-radius:8px 8px 0 0}body .kanban-plugin__item-form .kanban-plugin__item-input-wrapper{min-height:calc(var(--input-height) + 8px);display:flex;justify-content:center}body .kanban-plugin__item-button-wrapper,body .kanban-plugin__item-form{background-color:var(--background-secondary);border:var(--kanban-border) solid var(--background-modifier-border)}body .kanban-plugin__item-form{padding:0 4px 5px}body .kanban-plugin__markdown-preview-view ol,body .kanban-plugin__markdown-preview-view ol.contains-task-list .contains-task-list,body .kanban-plugin__markdown-preview-view ul,body .kanban-plugin__markdown-preview-view ul.contains-task-list .contains-task-list{padding-inline-start:1.8em!important}@media(max-width:400pt){.kanban-plugin__board{flex-direction:column!important}.kanban-plugin__lane{width:100%!important;margin-bottom:1rem!important}}body .cm-heading-marker{cursor:var(--cursor);padding-left:10px}.theme-light{--leaflet-buttons:var(--bg1);--leaflet-borders:rgba(0,0,0,0.1)}.theme-dark{--leaflet-buttons:var(--bg2);--leaflet-borders:rgba(255,255,255,0.1)}.leaflet-container{--image-radius:0}.leaflet-top{transition:top .1s linear}body .leaflet-container{background-color:var(--background-secondary);font-family:var(--font-interface)}.leaflet-control-attribution{display:none}.leaflet-popup-content{margin:10px}.block-language-leaflet{border-radius:var(--radius-m);overflow:hidden;border:var(--border-width) solid var(--background-modifier-border)}.map-wide .block-language-leaflet{border-radius:var(--radius-l)}.map-max .block-language-leaflet{border-radius:var(--radius-xl)}.workspace-leaf-content[data-type=obsidian-leaflet-map-view] .block-language-leaflet{border-radius:0;border:none}.map-100 .block-language-leaflet{border-radius:0;border-left:none;border-right:none}.block-language-leaflet .leaflet-control-expandable-list .input-container .input-item>input{appearance:none}body .block-language-leaflet .leaflet-bar.disabled>a{background-color:rgba(0,0,0,0);opacity:.3}body .leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}body .leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}body .leaflet-control-layers-toggle{border-radius:4px}body .block-language-leaflet .leaflet-control-expandable,body .block-language-leaflet .leaflet-control-has-actions .control-actions.expanded,body .block-language-leaflet .leaflet-distance-control,body .leaflet-bar,body .leaflet-bar a,body .leaflet-control-layers-expanded,body .leaflet-control-layers-toggle{background-color:var(--leaflet-buttons);color:var(--text-muted);border:none;user-select:none}body .leaflet-bar a.leaflet-disabled,body .leaflet-bar a.leaflet-disabled:hover{background-color:var(--leaflet-buttons);color:var(--text-faint);opacity:.6;cursor:not-allowed}body .leaflet-control a{cursor:var(--cursor);color:var(--text-normal)}body .leaflet-bar a:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);border:none}body .leaflet-touch .leaflet-control-layers{background-color:var(--leaflet-buttons)}body .leaflet-touch .leaflet-bar,body .leaflet-touch .leaflet-control-layers{border-radius:5px;box-shadow:2px 0 8px 0 rgba(0,0,0,.1);border:1px solid var(--ui1)}body .block-language-leaflet .leaflet-control-has-actions .control-actions{box-shadow:0;border:1px solid var(--ui1)}body .leaflet-control-expandable-list .leaflet-bar{box-shadow:none;border-radius:0}body .block-language-leaflet .leaflet-distance-control{padding:4px 10px;height:auto;cursor:var(--cursor)!important}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper>*{font-size:var(--font-adaptive-small);font-family:var(--font-interface)}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper{padding:4px 10px!important}.leaflet-marker-icon svg path{stroke:var(--background-primary);stroke-width:18px}.map-view-marker-name{font-weight:400}.workspace-leaf-content[data-type=map] .graph-controls{background-color:var(--background-primary)}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-split.mod-root .workspace-leaf-content[data-type=map] .view-header{position:fixed;background:rgba(0,0,0,0)!important;width:100%;z-index:99}body:not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-header-title{display:none}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-actions{background:rgba(0,0,0,0)}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-content{height:100%}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .leaflet-top.leaflet-right{top:var(--header-height)}.obsidian-metatable{--metatable-font-size:calc(var(--font-adaptive-normal) - 2px);--metatable-font-family:var(--font-interface);--metatable-background:transparent;--metatable-foreground:var(--text-faint);--metatable-key-background:transparent;--metatable-key-border-width:0;--metatable-key-border-color:transparent;--metatable-value-background:transparent;padding-bottom:.5rem}.obsidian-metatable::part(key),.obsidian-metatable::part(value){border-bottom:0 solid var(--background-modifier-border);padding:.1rem 0;text-overflow:ellipsis;overflow:hidden}.obsidian-metatable::part(key){font-weight:400;color:var(--tx3);font-size:calc(var(--font-adaptive-normal) - 2px)}.obsidian-metatable::part(value){font-size:calc(var(--font-adaptive-normal) - 2px);color:var(--tx1)}body .NLT__header-menu-header-container{font-size:85%}body .NLT__button{background:rgba(0,0,0,0);box-shadow:none;color:var(--text-muted)}body .NLT__button:active,body .NLT__button:focus,body .NLT__button:hover{background:rgba(0,0,0,0);color:var(--text-normal);box-shadow:none}.NLT__app .NLT__button{background:rgba(0,0,0,0);border:1px solid var(--background-modifier-border);box-shadow:0 .5px 1px 0 var(--btn-shadow-color);color:var(--text-muted);padding:2px 8px}.NLT__app .NLT__button:active,.NLT__app .NLT__button:focus,.NLT__app .NLT__button:hover{background:rgba(0,0,0,0);border-color:var(--background-modifier-border-hover);color:var(--text-normal);box-shadow:0 .5px 1px 0 var(--btn-shadow-color)}.NLT__td:nth-last-child(2),.NLT__th:nth-last-child(2){border-right:0}.NLT__app .NLT__td:last-child,.NLT__app .NLT__th:last-child{padding-right:0}.NLT__app .NLT__th{background-image:none!important}.NLT__app th.NLT__selectable:hover{background-color:rgba(0,0,0,0);cursor:var(--cursor)}.NLT__menu .NLT__menu-container{background-color:var(--background-secondary)}.NLT__menu .NLT__header-menu-item{font-size:var(--font-adaptive-small)}.NLT__menu .NLT__header-menu{padding:6px 4px}.NLT__menu .NLT__drag-menu{font-size:var(--font-adaptive-small);padding:6px 4px}.NLT__menu svg{color:var(--text-faint);margin-right:6px}.NLT__menu .NLT__selectable:hover,.NLT__menu .NLT__selected{background:rgba(0,0,0,0)}.NLT__menu .NLT__selected>.NLT__selectable{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__selectable{cursor:var(--cursor)}.NLT__menu div.NLT__selectable{min-width:110px;border-radius:var(--radius-m);padding:3px 8px 3px 4px;margin:1px 2px 1px;cursor:var(--cursor);height:auto;line-height:20px}.NLT__menu div.NLT__selectable:hover{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__textarea{font-size:var(--table-text-size)}.NLT__tfoot tr:hover td{background-color:rgba(0,0,0,0)}.modal .quickAddPrompt>h1,.modal .quickAddYesNoPrompt h1{margin-top:0;text-align:left!important;font-size:var(--h1);font-weight:600}.modal .quickAddYesNoPrompt p{text-align:left!important}.modal .quickAddYesNoPrompt button{font-size:var(--font-ui-small)}.modal .yesNoPromptButtonContainer{font-size:var(--font-ui-small);justify-content:flex-end}.quickAddModal .modal-content{padding:20px 2px 5px}div#quick-explorer{display:flex}div#quick-explorer span.explorable{align-items:center;color:var(--text-muted);display:flex;font-size:var(--font-adaptive-smaller);line-height:16px}div#quick-explorer span.explorable:last-of-type{font-size:var(--font-adaptive-smaller)}div#quick-explorer span.explorable.selected,div#quick-explorer span.explorable:hover{background-color:unset!important}div#quick-explorer span.explorable.selected .explorable-name,div#quick-explorer span.explorable:hover .explorable-name{color:var(--text-normal)}div#quick-explorer span.explorable.selected .explorable-separator,div#quick-explorer span.explorable:hover .explorable-separator{color:var(--text-normal)}div#quick-explorer .explorable-name{padding:0 4px;border-radius:4px}div#quick-explorer .explorable-separator::before{content:" ›"!important;font-size:1.3em;font-weight:400;margin:0}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover{background-color:var(--background-modifier-hover);color:var(--text-normal)}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected .menu-item-icon,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover .menu-item-icon{color:var(--text-normal)}.workspace-leaf-content[data-type=recent-files] .view-content{padding-top:10px}.mod-root .workspace-leaf-content[data-type=reminder-list] main{max-width:var(--max-width);margin:0 auto;padding:0}.modal .reminder-actions .later-select{font-size:var(--font-settings-small);vertical-align:bottom;margin-left:3px}.modal .reminder-actions .icon{line-height:1}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main{margin:0 auto;padding:15px}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .group-name{font-weight:500;color:var(--text-muted);font-size:var(--font-adaptive-small);padding-bottom:.5em;border-bottom:1px solid var(--background-modifier-border)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-list-item{line-height:1.3;font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .no-reminders{color:var(--text-faint)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-time{font-family:var(--font-text);font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-file{color:var(--text-faint)}body .modal .dtchooser{background-color:rgba(0,0,0,0)}body .modal .dtchooser .reminder-calendar .year-month{font-weight:400;font-size:var(--font-adaptive-normal);padding-bottom:10px}body .modal .dtchooser .reminder-calendar .year-month .month,body .modal .dtchooser .reminder-calendar .year-month .year{color:var(--text-normal)}body .modal .dtchooser .reminder-calendar .year-month .month-nav:first-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav:last-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav{-webkit-mask-size:20px 20px;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;color:var(--text-faint);cursor:var(--cursor);border-radius:var(--radius-m);padding:0;width:30px;display:inline-block}body .modal .dtchooser .reminder-calendar .year-month .month-nav:hover{color:var(--text-muted)}body .modal .dtchooser .reminder-calendar th{padding:.5em 0;font-size:var(--font-adaptive-smallest);font-weight:500;text-transform:uppercase;letter-spacing:.1em}body .modal .dtchooser .reminder-calendar .calendar-date{transition:background-color .1s ease-in;padding:.3em 0;border-radius:var(--radius-m)}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected,body .modal .dtchooser .reminder-calendar .calendar-date:hover{transition:background-color .1s ease-in;background-color:var(--background-modifier-hover)!important}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected{font-weight:var(--bold-weight);color:var(--text-accent)!important}body .markdown-preview-view th,body .markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,body .table-view-table>thead>tr>th{cursor:var(--cursor);background-image:none}.markdown-source-view.mod-cm6 th{background-repeat:no-repeat;background-position:right}.style-settings-container[data-level="2"]{background:var(--background-secondary);border:1px solid var(--ui1);border-radius:5px;padding:10px 20px;margin:2px 0 2px -20px}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-name{display:none}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-description{color:var(--text-normal);font-size:var(--font-adaptive-smaller);padding-bottom:.5em}.workspace-leaf-content[data-type=style-settings] .view-content{padding:var(--size-4-4) 0}.workspace-leaf-content[data-type=style-settings] .view-content>div{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.workspace-leaf-content[data-type=style-settings] .style-settings-heading[data-level="0"] .setting-item-name{padding-left:17px}.workspace-leaf-content[data-type=style-settings] .setting-item{max-width:100%;margin:0 auto}.workspace-leaf-content[data-type=style-settings] .setting-item-name{position:relative}.workspace-leaf-content[data-type=style-settings] .style-settings-collapse-indicator{position:absolute;left:0}.setting-item-heading.style-settings-heading,.style-settings-container .style-settings-heading{cursor:var(--cursor)}.modal.mod-settings .setting-item .pickr button.pcr-button{box-shadow:none;border-radius:40px;height:24px;width:24px}.setting-item .pickr .pcr-button:after,.setting-item .pickr .pcr-button:before{border-radius:40px;box-shadow:none;border:none}.setting-item.setting-item-heading.style-settings-heading.is-collapsed{border-bottom:1px solid var(--background-modifier-border)}.setting-item.setting-item-heading.style-settings-heading{border:0;padding:10px 0 5px;margin-bottom:0}.setting-item .style-settings-export,.setting-item .style-settings-import{text-decoration:none;font-size:var(--font-ui-small);font-weight:500;color:var(--text-muted);margin:0;padding:2px 8px;border-radius:5px;cursor:var(--cursor)}.setting-item .style-settings-export:hover,.setting-item .style-settings-import:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);cursor:var(--cursor)}.mod-root .workspace-leaf-content[data-type=style-settings] .style-settings-container .setting-item:not(.setting-item-heading){flex-direction:row;align-items:center;padding:.5em 0}.workspace-split:not(.mod-root) .workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-smaller)}.themed-color-wrapper>div+div{margin-top:0;margin-left:6px}.theme-light .themed-color-wrapper>.theme-light{background-color:rgba(0,0,0,0)}.theme-light .themed-color-wrapper>.theme-dark{background-color:rgba(0,0,0,.8)}.theme-dark .themed-color-wrapper>.theme-dark{background-color:rgba(0,0,0,0)}@media(max-width:400pt){.workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-small)}.workspace-leaf-content[data-type=style-settings] .setting-item-info:has(.search-input-container){width:100%;margin-right:0}}body .todoist-query-title{display:inline;font-size:var(--h4);font-variant:var(--h4-variant);letter-spacing:.02em;color:var(--h4-color);font-weight:var(--h4-weight);font-style:var(--h4-style)}body .is-live-preview .block-language-todoist{padding-left:0}ul.todoist-task-list>li.task-list-item .task-list-item-checkbox{margin:0}body .todoist-refresh-button{display:inline;float:right;background:rgba(0,0,0,0);padding:5px 6px 0;margin-right:0}body .is-live-preview .todoist-refresh-button{margin-right:30px}body .todoist-refresh-button:hover{box-shadow:none;background-color:var(--background-modifier-hover)}.todoist-refresh-button svg{width:15px;height:15px;opacity:var(--icon-muted)}ul.todoist-task-list{margin-left:-.25em}.is-live-preview ul.todoist-task-list{padding-left:0;margin-left:.5em;margin-block-start:0;margin-block-end:0}.contains-task-list.todoist-task-list .task-metadata{font-size:var(--font-adaptive-small);display:flex;color:var(--text-muted);justify-content:space-between;margin-left:.1em;margin-bottom:.25rem}.is-live-preview .contains-task-list.todoist-task-list .task-metadata{padding-left:calc(var(--checkbox-size) + .6em)}.todoist-task-list .task-date.task-overdue{color:var(--color-orange)}body .todoist-p1>input[type=checkbox]{border:1px solid var(--color-red)}body .todoist-p1>input[type=checkbox]:hover{opacity:.8}body .todoist-p2>input[type=checkbox]{border:1px solid var(--color-yellow)}body .todoist-p2>input[type=checkbox]:hover{opacity:.8}body .todoist-p3>input[type=checkbox]{border:1px solid var(--color-blue)}body .todoist-p3>input[type=checkbox]:hover{opacity:.8}body.theme-light{--color-axis-label:var(--tx1);--color-tick-label:var(--tx2);--color-dot-fill:var(--ax1);--color-line:var(--ui1)}.tracker-axis-label{font-family:var(--font-interface)}.tracker-axis{color:var(--ui2)}.tabs-manager .chat-view{--assistant-message-color:var(--background-primary);--padding-md:var(--size-4-2) var(--size-4-3);--padding-lg:var(--size-4-3) var(--size-4-3);--chat-box-color:var(--background-primary)}.tabs-manager .chat-view .ow-dialogue-timeline{padding:var(--size-4-4) var(--size-4-3) var(--size-4-8)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble .ow-content-wrapper{box-shadow:none;border-color:var(--background-modifier-border);border-radius:var(--radius-m)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble.ow-user-bubble .ow-content-wrapper{border-width:0;background-color:var(--interactive-accent)}.tabs-manager .chat-view .input-area .input-form .chat-box{border-radius:0;box-shadow:none;grid-row:1;grid-column:1/3;height:100px;border:none;padding:var(--size-4-3) var(--size-4-4) var(--size-4-2)}.tabs-manager .chat-view .input-area .input-form .chat-box:hover{height:100px}.tabs-manager .chat-view .input-area{padding:0;gap:0}.tabs-manager .chat-view .header{border-bottom:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-form{border-top:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-area .input-form .chat-box .info-bar span{color:var(--text-faint)}.tabs-manager .chat-view .input-area .input-form .btn-new-chat{display:none}.zoom-plugin-header{--link-color:var(--text-normal);--link-decoration:none;font-size:var(--font-ui-small);padding:0;justify-content:center;margin:var(--size-4-2) auto;max-width:var(--max-width)}.zoom-plugin-header>.zoom-plugin-title{text-decoration:none;max-width:15em;overflow:hidden}.zoom-plugin-header>.zoom-plugin-delimiter{color:var(--text-faint);padding:0 var(--size-4-1)}.theme-dark.minimal-atom-dark{--color-red-rgb:225,109,118;--color-orange-rgb:209,154,102;--color-yellow-rgb:206,193,103;--color-green-rgb:152,195,121;--color-cyan-rgb:88,182,194;--color-blue-rgb:98,175,239;--color-purple-rgb:198,120,222;--color-pink-rgb:225,109,118;--color-red:#e16d76;--color-orange:#d19a66;--color-yellow:#cec167;--color-green:#98c379;--color-cyan:#58b6c2;--color-blue:#62afef;--color-purple:#c678de;--color-pink:#e16d76}.theme-light.minimal-atom-light{--color-red-rgb:228,87,73;--color-orange-rgb:183,107,2;--color-yellow-rgb:193,131,2;--color-green-rgb:80,161,80;--color-cyan-rgb:13,151,179;--color-blue-rgb:98,175,239;--color-purple-rgb:166,38,164;--color-pink-rgb:228,87,73;--color-red:#e45749;--color-orange:#b76b02;--color-yellow:#c18302;--color-green:#50a150;--color-cyan:#0d97b3;--color-blue:#62afef;--color-purple:#a626a4;--color-pink:#e45749}.theme-light.minimal-atom-light{--base-h:106;--base-s:0%;--base-l:98%;--accent-h:231;--accent-s:76%;--accent-l:62%;--bg1:#fafafa;--bg2:#eaeaeb;--bg3:rgba(0,0,0,.1);--ui1:#dbdbdc;--ui2:#d8d8d9;--tx1:#232324;--tx2:#8e8e90;--tx3:#a0a1a8;--hl1:rgba(180,180,183,0.3);--hl2:rgba(209,154,102,0.35)}.theme-light.minimal-atom-light.minimal-light-white{--bg3:#eaeaeb}.theme-dark.minimal-atom-dark,.theme-light.minimal-atom-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-atom-light.minimal-light-contrast .theme-dark,.theme-light.minimal-atom-light.minimal-light-contrast .titlebar,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-atom-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:12%;--base-l:18%;--accent-h:220;--accent-s:86%;--accent-l:65%;--bg1:#282c34;--bg2:#21252c;--bg3:#3a3f4b;--divider-color:#181a1f;--tab-outline-color:#181a1f;--tx1:#d8dae1;--tx2:#898f9d;--tx3:#5d6370;--hl1:rgba(114,123,141,0.3);--hl2:rgba(209,154,102,0.3);--sp1:#fff}.theme-dark.minimal-atom-dark.minimal-dark-black{--base-d:5%;--bg3:#282c34;--divider-color:#282c34;--tab-outline-color:#282c34}.theme-light.minimal-ayu-light{--color-red-rgb:230,80,80;--color-orange-rgb:250,141,62;--color-yellow-rgb:242,174,73;--color-green-rgb:108,191,67;--color-cyan-rgb:76,191,153;--color-blue-rgb:57,158,230;--color-purple-rgb:163,122,204;--color-pink-rgb:255,115,131;--color-red:#e65050;--color-orange:#fa8d3e;--color-yellow:#f2ae49;--color-green:#6CBF43;--color-cyan:#4cbf99;--color-blue:#399ee6;--color-purple:#a37acc;--color-pink:#ff7383}.theme-dark.minimal-ayu-dark{--color-red-rgb:255,102,102;--color-orange-rgb:250,173,102;--color-yellow-rgb:255,209,55;--color-green-rgb:135,217,108;--color-cyan-rgb:149,230,203;--color-blue-rgb:115,208,255;--color-purple-rgb:223,191,255;--color-pink-rgb:242,121,131;--color-red:#ff6666;--color-orange:#ffad66;--color-yellow:#ffd137;--color-green:#87D96C;--color-cyan:#95e6cb;--color-blue:#73d0ff;--color-purple:#dfbfff;--color-pink:#f27983}.theme-light.minimal-ayu-light{--base-h:210;--base-s:17%;--base-l:98%;--accent-h:36;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f8f9fa;--bg3:rgba(209,218,224,0.5);--ui1:#E6EAED;--tx1:#5C6165;--tx2:#8A9199;--tx3:#AAAEB0;--hl1:rgba(3,91,214,0.15)}.theme-dark.minimal-ayu-dark,.theme-light.minimal-ayu-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-ayu-light.minimal-light-contrast .theme-dark,.theme-light.minimal-ayu-light.minimal-light-contrast .titlebar,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-ayu-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:222;--base-s:22%;--base-l:15%;--accent-h:35;--accent-s:100%;--accent-l:60%;--bg1:#232937;--bg2:#1E2431;--bg3:rgba(51,61,80,0.5);--ui1:#333C4A;--ui2:#333C4A;--ui3:#333C4A;--tx1:#cccac2;--tx2:#707A8C;--tx3:#495063;--hl1:rgba(64,159,255,0.25)}.theme-dark.minimal-ayu-dark.minimal-dark-black{--accent-h:40;--accent-s:75%;--accent-l:61%;--bg3:#0E1017;--tx1:#BFBDB6;--divider-color:#11151C;--tab-outline-color:#11151C}.theme-light.minimal-catppuccin-light{--color-red-rgb:230,69,83;--color-orange-rgb:254,100,12;--color-yellow-rgb:223,142,29;--color-green-rgb:64,160,43;--color-cyan-rgb:23,146,154;--color-blue-rgb:33,102,246;--color-purple-rgb:137,56,239;--color-pink-rgb:234,119,203;--color-red:#E64553;--color-orange:#FE640C;--color-yellow:#DF8E1D;--color-green:#40A02B;--color-cyan:#17929A;--color-blue:#2166F6;--color-purple:#8938EF;--color-pink:#EA77CB}.theme-dark.minimal-catppuccin-dark{--color-red-rgb:235,153,156;--color-orange-rgb:239,160,118;--color-yellow-rgb:229,200,144;--color-green-rgb:166,209,138;--color-cyan-rgb:129,200,190;--color-blue-rgb:140,170,238;--color-purple-rgb:202,158,230;--color-pink-rgb:244,185,229;--color-red:#EB999C;--color-orange:#EFA076;--color-yellow:#E5C890;--color-green:#A6D18A;--color-cyan:#81C8BE;--color-blue:#8CAAEE;--color-purple:#CA9EE6;--color-pink:#F4B9E5}.theme-light.minimal-catppuccin-light{--base-h:228;--base-s:20%;--base-l:95%;--accent-h:11;--accent-s:59%;--accent-l:67%;--bg1:#F0F1F5;--bg2:#DCE0E8;--bg3:hsla(228,11%,65%,.25);--ui1:#CCD0DA;--ui2:#BCC0CC;--ui3:#ACB0BE;--tx1:#4D4F69;--tx2:#5D5F77;--tx3:#8D8FA2;--hl1:rgba(172,176,190,.3);--hl2:rgba(223,142,29,.3)}.theme-light.minimal-catppuccin-light.minimal-light-tonal{--bg2:#DCE0E8}.theme-light.minimal-catppuccin-light.minimal-light-white{--bg3:#F0F1F5;--ui1:#DCE0E8}.theme-dark.minimal-catppuccin-dark,.theme-light.minimal-catppuccin-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-catppuccin-light.minimal-light-contrast .theme-dark,.theme-light.minimal-catppuccin-light.minimal-light-contrast .titlebar,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-catppuccin-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:229;--base-s:19%;--base-l:23%;--accent-h:10;--accent-s:57%;--accent-l:88%;--bg1:#303446;--bg2:#242634;--bg3:hsla(229,13%,52%,0.25);--ui1:#41455A;--ui2:#51576D;--ui3:#626880;--tx1:#C6D0F5;--tx2:#A6ADCE;--tx3:#848BA7;--sp1:#242634;--hl1:rgba(98,104,128,.5);--hl2:rgba(223,142,29,.4)}.theme-dark.minimal-catppuccin-dark.minimal-dark-black{--ui1:#303446;--hl2:rgba(223,142,29,.5)}.theme-dark.minimal-dracula-dark{--color-red-rgb:255,85,85;--color-orange-rgb:255,184,108;--color-yellow-rgb:241,250,140;--color-green-rgb:80,250,123;--color-cyan-rgb:139,233,253;--color-blue-rgb:98,114,164;--color-purple-rgb:189,147,249;--color-pink-rgb:255,121,198;--color-red:#ff5555;--color-orange:#ffb86c;--color-yellow:#f1fa8c;--color-green:#50fa7b;--color-cyan:#8be9fd;--color-blue:#6272a4;--color-purple:#bd93f9;--color-pink:#ff79c6}.theme-dark.minimal-dracula-dark,.theme-light.minimal-dracula-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-dracula-light.minimal-light-contrast .theme-dark,.theme-light.minimal-dracula-light.minimal-light-contrast .titlebar,.theme-light.minimal-dracula-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-dracula-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-dracula-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:232;--base-s:16%;--base-l:19%;--accent-h:265;--accent-s:89%;--accent-l:78%;--bg1:#282a37;--bg2:#21222c;--ui2:#44475a;--ui3:#6272a4;--tx1:#f8f8f2;--tx2:#949FBE;--tx3:#6272a4;--hl1:rgba(134, 140, 170, 0.3);--hl2:rgba(189, 147, 249, 0.35)}.theme-dark.minimal-dracula-dark.minimal-dark-black{--ui1:#282a36}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light{--collapse-icon-color:var(--text-normal);--icon-color-active:var(--bg1);--icon-color-hover:var(--bg1);--icon-color-focused:var(--bg1);--icon-opacity:1;--indentation-guide-color:var(--tx1);--indentation-guide-color-active:var(--tx1);--indentation-guide-width-active:3px;--interactive-normal:var(--bg1);--input-shadow:0 0 0 1px var(--tx1);--link-unresolved-opacity:1;--link-unresolved-decoration-style:dashed;--link-unresolved-decoration-color:var(--tx1);--metadata-label-background-active:var(--bg1);--metadata-input-background-active:var(--bg1);--modal-border-color:var(--tx1);--modal-border-width:2px;--prompt-border-color:var(--tx1);--prompt-border-width:2px;--calendar-dot-active:var(--bg1);--calendar-dot-today:var(--bg1);--calendar-text-active:var(--bg1);--tag-border-width:1.25px;--tag-background:transparent;--tag-background-hover:transparent;--tag-border-color:var(--tx1);--tag-border-color-hover:var(--tx1);--text-on-accent:var(--bg1);--text-on-accent-inverted:var(--bg1);--text-selection:var(--tx1);--vault-profile-color:var(--tx1);--nav-item-color-active:var(--bg1);--nav-item-color-hover:var(--bg1)}.theme-dark.minimal-eink-dark ::selection,.theme-dark.minimal-eink-dark button:hover,.theme-light.minimal-eink-light ::selection,.theme-light.minimal-eink-light button:hover{color:var(--bg1)}.theme-dark.minimal-eink-dark .nav-files-container,.theme-light.minimal-eink-light .nav-files-container{--nav-item-color-active:var(--bg1)}.theme-dark.minimal-eink-dark .tree-item-self:hover,.theme-light.minimal-eink-light .tree-item-self:hover{--nav-collapse-icon-color:var(--bg1)}.theme-dark.minimal-eink-dark.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.theme-dark.minimal-eink-dark.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.theme-dark.minimal-eink-dark.tabs-modern,.theme-light.minimal-eink-light.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.theme-light.minimal-eink-light.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.theme-light.minimal-eink-light.tabs-modern{--minimal-tab-text-color-active:var(--bg1);--tab-text-color-focused:var(--bg1);--tab-text-color-focused-active-current:var(--bg1)}.theme-dark.minimal-eink-dark .setting-hotkey,.theme-light.minimal-eink-light .setting-hotkey{background-color:rgba(0,0,0,0);border:1px solid var(--tx1)}.theme-dark.minimal-eink-dark .suggestion-container,.theme-light.minimal-eink-light .suggestion-container{border-width:3px}.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-inline-code,.theme-dark.minimal-eink-dark .markdown-rendered code,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-inline-code,.theme-light.minimal-eink-light .markdown-rendered code{font-weight:600}.theme-dark.minimal-eink-dark .tree-item-self.is-active,.theme-dark.minimal-eink-dark .tree-item-self:hover,.theme-light.minimal-eink-light .tree-item-self.is-active,.theme-light.minimal-eink-light .tree-item-self:hover{--icon-color:var(--bg1)}.theme-dark.minimal-eink-dark .metadata-property-icon,.theme-light.minimal-eink-light .metadata-property-icon{--icon-color-focused:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container,.theme-light.minimal-eink-light .checkbox-container{background-color:var(--bg1);box-shadow:0 0 0 1px var(--tx1);--toggle-thumb-color:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container.is-enabled,.theme-light.minimal-eink-light .checkbox-container.is-enabled{background-color:var(--tx1);--toggle-thumb-color:var(--bg1)}.theme-dark.minimal-eink-dark.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:not(:hover),.theme-dark.minimal-eink-dark.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active,.theme-light.minimal-eink-light.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:not(:hover),.theme-light.minimal-eink-light.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active{background-color:var(--tx1)}.theme-dark.minimal-eink-dark #calendar-container .reset-button:hover,.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-formatting-highlight,.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-highlight,.theme-dark.minimal-eink-dark .community-item .suggestion-highlight,.theme-dark.minimal-eink-dark .dropdown:hover,.theme-dark.minimal-eink-dark .horizontal-tab-nav-item:hover,.theme-dark.minimal-eink-dark .markdown-rendered mark,.theme-dark.minimal-eink-dark .mod-root .workspace-tab-header-status-icon,.theme-dark.minimal-eink-dark .mod-root .workspace-tab-header:hover,.theme-dark.minimal-eink-dark .search-result-file-match:hover,.theme-dark.minimal-eink-dark .search-result-file-matched-text,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-dark.minimal-eink-dark .status-bar-item.mod-clickable:hover,.theme-dark.minimal-eink-dark .suggestion-item.is-selected,.theme-dark.minimal-eink-dark .text-icon-button:hover,.theme-dark.minimal-eink-dark .vertical-tab-nav-item:hover,.theme-dark.minimal-eink-dark button.mod-cta,.theme-dark.minimal-eink-dark select:hover,.theme-dark.minimal-eink-dark.is-focused.tabs-modern .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title,.theme-dark.minimal-eink-dark.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.theme-dark.minimal-eink-dark.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover,.theme-dark.minimal-eink-dark:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-dark.minimal-eink-dark:not(.colorful-active) .vertical-tab-nav-item.is-active,.theme-light.minimal-eink-light #calendar-container .reset-button:hover,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-formatting-highlight,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-highlight,.theme-light.minimal-eink-light .community-item .suggestion-highlight,.theme-light.minimal-eink-light .dropdown:hover,.theme-light.minimal-eink-light .horizontal-tab-nav-item:hover,.theme-light.minimal-eink-light .markdown-rendered mark,.theme-light.minimal-eink-light .mod-root .workspace-tab-header-status-icon,.theme-light.minimal-eink-light .mod-root .workspace-tab-header:hover,.theme-light.minimal-eink-light .search-result-file-match:hover,.theme-light.minimal-eink-light .search-result-file-matched-text,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-light.minimal-eink-light .status-bar-item.mod-clickable:hover,.theme-light.minimal-eink-light .suggestion-item.is-selected,.theme-light.minimal-eink-light .text-icon-button:hover,.theme-light.minimal-eink-light .vertical-tab-nav-item:hover,.theme-light.minimal-eink-light button.mod-cta,.theme-light.minimal-eink-light select:hover,.theme-light.minimal-eink-light.is-focused.tabs-modern .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title,.theme-light.minimal-eink-light.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.theme-light.minimal-eink-light.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover,.theme-light.minimal-eink-light:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-light.minimal-eink-light:not(.colorful-active) .vertical-tab-nav-item.is-active{color:var(--bg1)}.theme-dark.minimal-eink-dark .is-flashing,.theme-light.minimal-eink-light .is-flashing{--text-highlight-bg:#999}.theme-dark.minimal-eink-dark #calendar-container .day:hover,.theme-light.minimal-eink-light #calendar-container .day:hover{--color-dot:var(--bg1)}.theme-light.minimal-eink-light{--base-h:0;--base-s:0%;--base-l:100%;--accent-h:0;--accent-s:0%;--accent-l:0%;--ax3:#000;--bg1:#fff;--bg2:#fff;--bg3:#000;--ui1:#000;--ui2:#000;--ui3:#000;--tx1:#000;--tx2:#000;--tx3:#000;--hl1:#000;--hl2:#000;--sp1:#fff;--text-on-accent:#fff;--background-modifier-cover:rgba(235,235,235,1)}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-eink-light.minimal-light-contrast .theme-dark,.theme-light.minimal-eink-light.minimal-light-contrast .titlebar,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-eink-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:0;--base-s:0%;--base-l:0%;--accent-h:0;--accent-s:0%;--accent-l:100%;--ax3:#fff;--bg1:#000;--bg2:#000;--bg3:#fff;--ui1:#fff;--ui2:#fff;--ui3:#fff;--tx1:#fff;--tx2:#fff;--tx3:#fff;--hl1:#fff;--hl2:#fff;--sp1:#000;--background-modifier-cover:rgba(20,20,20,1);--vault-profile-color:var(--tx1);--vault-profile-color-hover:var(--bg1);--nav-item-color-hover:var(--bg1);--nav-item-color-active:var(--bg1)}.theme-light.minimal-eink-light.minimal-light-tonal{--bg3:#bbb;--ui1:#bbb;--tx3:#999}.theme-dark.minimal-eink-dark.minimal-dark-tonal{--bg3:#444;--ui1:#444;--tx3:#999}.theme-dark.minimal-eink-dark.minimal-dark-tonal,.theme-light.minimal-eink-light.minimal-light-tonal{--hl2:var(--bg3);--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1);--tag-border-color:var(--ui1);--text-selection:var(--bg3);--icon-color-active:var(--tx1);--icon-color-focused:var(--tx1);--nav-item-color-active:var(--tx1);--nav-item-color-hover:var(--tx1);--minimal-tab-text-color-active:var(--tx1)}.theme-dark.minimal-eink-dark.minimal-dark-tonal .is-flashing,.theme-dark.minimal-eink-dark.minimal-dark-tonal .search-result-file-matched-text,.theme-light.minimal-eink-light.minimal-light-tonal .is-flashing,.theme-light.minimal-eink-light.minimal-light-tonal .search-result-file-matched-text{background-color:var(--bg3);color:var(--tx1)}.theme-dark.minimal-eink-dark.minimal-dark-tonal #calendar-container .reset-button:hover,.theme-dark.minimal-eink-dark.minimal-dark-tonal ::selection,.theme-dark.minimal-eink-dark.minimal-dark-tonal:not(.colorful-active) .vertical-tab-nav-item.is-active,.theme-dark.minimal-eink-dark.minimal-dark-tonal:not(.colorful-active) .vertical-tab-nav-item:hover,.theme-light.minimal-eink-light.minimal-light-tonal #calendar-container .reset-button:hover,.theme-light.minimal-eink-light.minimal-light-tonal ::selection,.theme-light.minimal-eink-light.minimal-light-tonal:not(.colorful-active) .vertical-tab-nav-item.is-active,.theme-light.minimal-eink-light.minimal-light-tonal:not(.colorful-active) .vertical-tab-nav-item:hover{color:var(--tx1)}.theme-light.minimal-everforest-light{--color-red-rgb:248,85,82;--color-orange-rgb:245,125,38;--color-yellow-rgb:223,160,0;--color-green-rgb:141,161,1;--color-cyan-rgb:53,167,124;--color-blue-rgb:56,148,196;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#f85552;--color-orange:#f57d26;--color-yellow:#dfa000;--color-green:#8da101;--color-cyan:#35a77c;--color-blue:#3795C5;--color-purple:#df69ba;--color-pink:#df69ba}.theme-dark.minimal-everforest-dark{--color-red-rgb:230,126,128;--color-orange-rgb:230,152,117;--color-yellow-rgb:219,188,127;--color-green-rgb:167,192,128;--color-cyan-rgb:131,192,146;--color-blue-rgb:127,187,179;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#e67e80;--color-orange:#e69875;--color-yellow:#dbbc7f;--color-green:#a7c080;--color-cyan:#83c092;--color-blue:#7fbbb3;--color-purple:#d699b6;--color-pink:#d699b6}.theme-light.minimal-everforest-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:83;--accent-s:36%;--accent-l:53%;--bg1:#fdf6e3;--bg2:#efebd4;--bg3:rgba(226,222,198,.5);--ui1:#e0dcc7;--ui2:#bec5b2;--ui3:#bec5b2;--tx1:#5C6A72;--tx2:#829181;--tx3:#a6b0a0;--hl1:rgba(198,214,152,.4);--hl2:rgba(222,179,51,.3)}.theme-light.minimal-everforest-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-light.minimal-everforest-light.minimal-light-white{--bg3:#f3efda;--ui1:#edead5}.theme-dark.minimal-everforest-dark,.theme-light.minimal-everforest-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-everforest-light.minimal-light-contrast .theme-dark,.theme-light.minimal-everforest-light.minimal-light-contrast .titlebar,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-everforest-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:15%;--base-l:23%;--accent-h:81;--accent-s:34%;--accent-l:63%;--bg1:#2d353b;--bg2:#232a2e;--bg3:rgba(71,82,88,0.5);--ui1:#475258;--ui2:#4f585e;--ui3:#525c62;--tx1:#d3c6aa;--tx2:#9da9a0;--tx3:#7a8478;--hl1:rgba(134,70,93,.5);--hl2:rgba(147,185,96,.3)}.theme-dark.minimal-everforest-dark.minimal-dark-black{--hl1:rgba(134,70,93,.4);--ui1:#2b3339}.theme-light.minimal-flexoki-light{--color-red-rgb:175,48,41;--color-orange-rgb:188,82,21;--color-yellow-rgb:173,131,1;--color-green-rgb:102,128,11;--color-cyan-rgb:36,131,123;--color-blue-rgb:32,94,166;--color-purple-rgb:94,64,157;--color-pink-rgb:160,47,111;--color-red:#AF3029;--color-orange:#BC5215;--color-yellow:#AD8301;--color-green:#66800B;--color-cyan:#24837B;--color-blue:#205EA6;--color-purple:#5E409D;--color-pink:#A02F6F}.theme-dark.minimal-flexoki-dark{--color-red-rgb:209,77,65;--color-orange-rgb:218,112,44;--color-yellow-rgb:208,162,21;--color-green-rgb:135,154,57;--color-cyan-rgb:58,169,159;--color-blue-rgb:67,133,190;--color-purple-rgb:139,126,200;--color-pink-rgb:206,93,151;--color-red:#D14D41;--color-orange:#DA702C;--color-yellow:#D0A215;--color-green:#879A39;--color-cyan:#3AA99F;--color-blue:#4385BE;--color-purple:#8B7EC8;--color-pink:#CE5D97}.theme-light.minimal-flexoki-light{--base-h:48;--base-s:100%;--base-l:97%;--accent-h:175;--accent-s:57%;--accent-l:33%;--bg1:#FFFCF0;--bg2:#F2F0E5;--bg3:rgba(16,15,15,0.05);--ui1:#E6E4D9;--ui2:#DAD8CE;--ui3:#CECDC3;--tx1:#100F0F;--tx2:#6F6E69;--tx3:#B7B5AC;--hl1:rgba(187,220,206,0.3);--hl2:rgba(247,209,61,0.3)}.theme-light.minimal-flexoki-light.minimal-light-tonal{--bg2:#FFFCF0}.theme-dark.minimal-flexoki-dark,.theme-light.minimal-flexoki-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-flexoki-light.minimal-light-contrast .theme-dark,.theme-light.minimal-flexoki-light.minimal-light-contrast .titlebar,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-flexoki-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:360;--base-s:3%;--base-l:6%;--accent-h:175;--accent-s:49%;--accent-l:45%;--bg1:#100F0F;--bg2:#1C1B1A;--bg3:rgba(254,252,240,0.05);--ui1:#282726;--ui2:#343331;--ui3:#403E3C;--tx1:#CECDC3;--tx2:#878580;--tx3:#575653;--hl1:rgba(30,95,91,0.3);--hl2:rgba(213,159,17,0.3)}.theme-dark.minimal-flexoki-dark.minimal-dark-black{--ui1:#1C1B1A}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light{--color-red-rgb:204,36,29;--color-orange-rgb:214,93,14;--color-yellow-rgb:215,153,33;--color-green-rgb:152,151,26;--color-cyan-rgb:104,157,106;--color-blue-rgb:69,133,136;--color-purple-rgb:177,98,134;--color-pink-rgb:177,98,134;--color-red:#cc241d;--color-orange:#d65d0e;--color-yellow:#d79921;--color-green:#98971a;--color-cyan:#689d6a;--color-blue:#458588;--color-purple:#b16286;--color-pink:#b16286}.theme-light.minimal-gruvbox-light{--base-h:49;--base-s:92%;--base-l:89%;--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#fcf2c7;--bg2:#f2e6bd;--bg3:#ebd9b3;--ui1:#ebdbb2;--ui2:#d5c4a1;--ui3:#bdae93;--tx1:#282828;--tx2:#7c7065;--tx3:#a89a85;--hl1:rgba(192,165,125,.3);--hl2:rgba(215,153,33,.4)}.theme-light.minimal-gruvbox-light.minimal-light-tonal{--bg2:#fcf2c7}.theme-light.minimal-gruvbox-light.minimal-light-white{--bg3:#faf5d7;--ui1:#f2e6bd}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-gruvbox-light.minimal-light-contrast .theme-dark,.theme-light.minimal-gruvbox-light.minimal-light-contrast .titlebar,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-gruvbox-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#282828;--bg2:#1e2021;--bg3:#3d3836;--bg3:rgba(62,57,55,0.5);--ui1:#3c3836;--ui2:#504945;--ui3:#665c54;--tx1:#fbf1c7;--tx2:#bdae93;--tx3:#7c6f64;--hl1:rgba(173,149,139,0.3);--hl2:rgba(215,153,33,.4)}.theme-dark.minimal-gruvbox-dark.minimal-dark-black{--hl1:rgba(173,149,139,0.4);--ui1:#282828}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light{--color-red-rgb:255,59,49;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,204,0;--color-green-rgb:42,205,65;--color-cyan-rgb:2,199,190;--color-blue-rgb:2,122,255;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#ff3b31;--color-orange:#ff9502;--color-yellow:#ffcc00;--color-green:#2acd41;--color-cyan:#02c7be;--color-blue:#027aff;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-macos-light{--base-h:106;--base-s:0%;--base-l:94%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f0f0f0;--bg3:rgba(0,0,0,.1);--ui1:#e7e7e7;--tx1:#454545;--tx2:#808080;--tx3:#b0b0b0;--hl1:#b3d7ff}.theme-light.minimal-macos-light.minimal-light-tonal{--bg1:#f0f0f0;--bg2:#f0f0f0}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-macos-light.minimal-light-contrast .theme-dark,.theme-light.minimal-macos-light.minimal-light-contrast .titlebar,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-macos-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:106;--base-s:0%;--base-l:12%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#1e1e1e;--bg2:#282828;--bg3:rgba(255,255,255,0.11);--divider-color:#000;--tab-outline-color:#000;--ui1:#373737;--ui2:#515151;--ui3:#595959;--tx1:#dcdcdc;--tx2:#8c8c8c;--tx3:#686868;--hl1:rgba(98,169,252,0.5);--sp1:#fff}.theme-dark.minimal-macos-dark.minimal-dark-black{--divider-color:#1e1e1e;--tab-outline-color:#1e1e1e}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light{--color-red-rgb:191,97,106;--color-orange-rgb:208,138,112;--color-yellow-rgb:235,203,139;--color-green-rgb:163,190,140;--color-cyan-rgb:136,192,208;--color-blue-rgb:129,161,193;--color-purple-rgb:180,142,173;--color-pink-rgb:180,142,173;--color-red:#BF616A;--color-orange:#D08770;--color-yellow:#EBCB8B;--color-green:#A3BE8C;--color-cyan:#88C0D0;--color-blue:#81A1C1;--color-purple:#B48EAD;--color-pink:#B48EAD}.theme-light.minimal-nord-light{--base-h:221;--base-s:27%;--base-l:94%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#fff;--bg2:#eceff4;--bg3:rgba(157,174,206,0.25);--ui1:#d8dee9;--ui2:#BBCADC;--ui3:#81a1c1;--tx1:#2e3440;--tx2:#7D8697;--tx3:#ADB1B8;--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-nord-light.minimal-light-contrast .theme-dark,.theme-light.minimal-nord-light.minimal-light-contrast .titlebar,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-nord-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:16%;--base-l:22%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#2e3440;--bg2:#3b4252;--bg3:rgba(135,152,190,0.15);--ui1:#434c5e;--ui2:#58647b;--ui3:#58647b;--tx1:#d8dee9;--tx2:#9eafcc;--tx3:#4c566a;--hl1:rgba(129,142,180,0.3);--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark.minimal-dark-black{--ui1:#2e3440}.theme-light.minimal-notion-light{--base-h:39;--base-s:18%;--base-d:96%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg2:#f7f6f4;--bg3:#e8e7e4;--ui1:#ededec;--ui2:#dbdbda;--ui3:#aaa9a5;--tx1:#37352f;--tx2:#72706c;--tx3:#aaa9a5;--hl1:rgba(131,201,229,0.3)}.theme-dark.minimal-notion-dark,.theme-light.minimal-notion-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-notion-light.minimal-light-contrast .theme-dark,.theme-light.minimal-notion-light.minimal-light-contrast .titlebar,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-notion-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:8%;--base-d:20%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg1:#2f3437;--bg2:#373c3f;--bg3:#4b5053;--ui1:#3e4245;--ui2:#585d5f;--ui3:#585d5f;--tx1:#ebebeb;--tx2:#909295;--tx3:#585d5f;--hl1:rgba(57,134,164,0.3)}.theme-dark.minimal-notion-dark.minimal-dark-black{--base-d:5%;--bg3:#232729;--ui1:#2f3437}.theme-light.minimal-rose-pine-light{--color-red-rgb:180,99,122;--color-orange-rgb:215,130,125;--color-yellow-rgb:234,157,53;--color-green-rgb:40,105,131;--color-cyan-rgb:87,147,159;--color-blue-rgb:87,147,159;--color-purple-rgb:144,122,169;--color-pink-rgb:144,122,169;--color-red:#b4637a;--color-orange:#d7827e;--color-yellow:#ea9d34;--color-green:#286983;--color-cyan:#56949f;--color-blue:#56949f;--color-purple:#907aa9;--color-pink:#907aa9}.theme-dark.minimal-rose-pine-dark{--color-red-rgb:234,111,146;--color-orange-rgb:233,155,151;--color-yellow-rgb:246,193,119;--color-green-rgb:47,116,143;--color-cyan-rgb:157,207,215;--color-blue-rgb:157,207,215;--color-purple-rgb:196,167,231;--color-pink-rgb:196,167,231;--color-red:#eb6f92;--color-orange:#ea9a97;--color-yellow:#f6c177;--color-green:#31748f;--color-cyan:#9ccfd8;--color-blue:#9ccfd8;--color-purple:#c4a7e7;--color-pink:#c4a7e7}.theme-light.minimal-rose-pine-light{--base-h:32;--base-s:57%;--base-l:95%;--accent-h:3;--accent-s:53%;--accent-l:67%;--bg1:#fffaf3;--bg2:#faf4ed;--bg3:rgba(233,223,218,0.5);--ui1:#EAE3E1;--ui2:#dfdad9;--ui3:#cecacd;--tx1:#575279;--tx2:#797593;--tx3:#9893a5;--hl1:rgba(191,180,181,0.35)}.theme-dark.minimal-rose-pine-dark,.theme-light.minimal-rose-pine-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-rose-pine-light.minimal-light-contrast .theme-dark,.theme-light.minimal-rose-pine-light.minimal-light-contrast .titlebar,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-rose-pine-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:247;--base-s:23%;--base-l:15%;--accent-h:2;--accent-s:55%;--accent-l:83%;--bg1:#1f1d2e;--bg2:#191724;--bg3:rgba(68,66,86,0.5);--ui1:#312F41;--ui2:#403d52;--ui3:#524f67;--tx1:#e0def4;--tx2:#908caa;--tx3:#6e6a86;--hl1:rgba(126,121,155,0.35)}.theme-dark.minimal-rose-pine-dark.minimal-dark-black{--ui1:#21202e}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light{--color-red-rgb:220,50,47;--color-orange-rgb:203,77,22;--color-yellow-rgb:181,137,0;--color-green-rgb:133,153,0;--color-cyan-rgb:42,161,152;--color-blue-rgb:38,139,210;--color-purple-rgb:108,113,196;--color-pink-rgb:211,54,130;--color-red:#dc322f;--color-orange:#cb4b16;--color-yellow:#b58900;--color-green:#859900;--color-cyan:#2aa198;--color-blue:#268bd2;--color-purple:#6c71c4;--color-pink:#d33682}.theme-light.minimal-solarized-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:205;--accent-s:70%;--accent-l:48%;--bg1:#fdf6e3;--bg2:#eee8d5;--bg3:rgba(0,0,0,0.062);--ui1:#e9e1c8;--ui2:#d0cab8;--ui3:#d0cab8;--tx1:#073642;--tx2:#586e75;--tx3:#ABB2AC;--tx4:#586e75;--hl1:rgba(202,197,182,0.3);--hl2:rgba(203,75,22,0.3)}.theme-light.minimal-solarized-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-solarized-light.minimal-light-contrast .theme-dark,.theme-light.minimal-solarized-light.minimal-light-contrast .titlebar,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-solarized-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:205;--accent-s:70%;--accent-l:48%;--base-h:193;--base-s:98%;--base-l:11%;--bg1:#002b36;--bg2:#073642;--bg3:rgba(255,255,255,0.062);--ui1:#19414B;--ui2:#274850;--ui3:#31535B;--tx1:#93a1a1;--tx2:#657b83;--tx3:#31535B;--tx4:#657b83;--hl1:rgba(15,81,98,0.3);--hl2:rgba(203, 75, 22, 0.35)}.theme-dark.minimal-solarized-dark.minimal-dark-black{--hl1:rgba(15,81,98,0.55);--ui1:#002b36}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light{--color-red-rgb:255,48,108;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,213,0;--color-green-rgb:75,191,94;--color-cyan-rgb:73,174,164;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#FF306C;--color-orange:#ff9502;--color-yellow:#FFD500;--color-green:#4BBF5E;--color-cyan:#49AEA4;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-things-light{--color-blue-rgb:27,97,194;--color-blue:#1b61c2}.theme-dark.minimal-things-dark{--color-blue-rgb:77,149,247;--color-blue:#4d95f7}.theme-light.minimal-things-light{--accent-h:215;--accent-s:76%;--accent-l:43%;--bg1:white;--bg2:#f5f6f8;--bg3:rgba(162,177,187,0.25);--ui1:#eef0f4;--ui2:#D8DADD;--ui3:#c1c3c6;--tx1:#26272b;--tx2:#7D7F84;--tx3:#a9abb0;--hl1:#cae2ff}.theme-light.minimal-things-light.minimal-light-tonal{--ui1:#e6e8ec}.theme-light.minimal-things-light.minimal-light-white{--bg3:#f5f6f8}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-things-light.minimal-light-contrast .theme-dark,.theme-light.minimal-things-light.minimal-light-contrast .titlebar,.theme-light.minimal-things-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-things-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-things-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:218;--base-s:9%;--base-l:15%;--accent-h:215;--accent-s:91%;--accent-l:64%;--bg1:#24262a;--bg2:#202225;--bg3:#3d3f41;--divider-color:#17191c;--tab-outline-color:#17191c;--ui1:#3A3B3F;--ui2:#45464a;--ui3:#6c6e70;--tx1:#fbfbfb;--tx2:#CBCCCD;--tx3:#6c6e70;--hl1:rgba(40,119,236,0.35);--sp1:#fff}.theme-dark.minimal-things-dark.minimal-dark-black{--base-d:5%;--bg3:#24262a;--divider-color:#24262a;--tab-outline-color:#24262a} \ No newline at end of file diff --git a/.trash/Lyra.md b/.trash/Lyra.md new file mode 100644 index 0000000..e69de29 diff --git a/NPCs/NPCs.md b/NPCs/NPCs.md new file mode 100644 index 0000000..e69de29 diff --git a/Party/Alicia.md b/Party/Alicia.md new file mode 100644 index 0000000..04f8dfd --- /dev/null +++ b/Party/Alicia.md @@ -0,0 +1,4 @@ +Alicia was a already lively as a kid. She ran, she shouted, she sang, she danced. +She loved music just as much as showing the boys she was a force to be reconned with. Yet, due to her lively nature she could never find the time or concentration to take up an instrument. + +One day she was just walking somewhere \ No newline at end of file diff --git a/Party/Ashley Char.md b/Party/Ashley Char.md new file mode 100644 index 0000000..38e9830 --- /dev/null +++ b/Party/Ashley Char.md @@ -0,0 +1 @@ +Dragon go rawr diff --git a/Party/Dhargana.md b/Party/Dhargana.md new file mode 100644 index 0000000..e69de29 diff --git a/Party/Party.md b/Party/Party.md new file mode 100644 index 0000000..e540d27 --- /dev/null +++ b/Party/Party.md @@ -0,0 +1,4 @@ +[[Alicia]] +[[Dhargana]] +[[Zafira Moonchild]] +[[Ashley Char]] \ No newline at end of file diff --git a/Party/Zafira Moonchild.md b/Party/Zafira Moonchild.md new file mode 100644 index 0000000..e69de29 diff --git a/settings b/settings new file mode 100644 index 0000000..c5cb8ec --- /dev/null +++ b/settings @@ -0,0 +1,141 @@ +This file contains Self-hosted LiveSync settings as YAML. +Except for the `livesync-setting` code block, we can add a note for free. + +If the name of this file matches the value of the "settingSyncFile" setting inside the `livesync-setting` block, LiveSync will tell us whenever the settings change. We can decide to accept or decline the remote setting. (In other words, we can back up this file by renaming it to another name). + +We can perform a command in this file. +- `Parse setting file` : load the setting from the file. + +**Note** Please handle it with all of your care if you have configured to write credentials in. + + +````yaml:livesync-setting +remoteType: "" +useCustomRequestHandler: false +couchDB_URI: http://couch.bruynooghe.dev/ +couchDB_DBNAME: obsidian +liveSync: true +syncOnSave: true +syncOnStart: false +savingDelay: 200 +lessInformationInLog: false +gcDelay: 0 +versionUpFlash: "" +minimumChunkSize: 20 +longLineThreshold: 250 +showVerboseLog: false +suspendFileWatching: false +trashInsteadDelete: true +periodicReplication: false +periodicReplicationInterval: 60 +syncOnFileOpen: false +encrypt: false +usePathObfuscation: false +doNotDeleteFolder: true +resolveConflictsByNewerFile: true +batchSave: false +batchSaveMinimumDelay: 5 +batchSaveMaximumDelay: 60 +deviceAndVaultName: "" +usePluginSettings: false +showOwnPlugins: false +showStatusOnEditor: true +showStatusOnStatusbar: true +showOnlyIconsOnEditor: false +usePluginSync: true +autoSweepPlugins: true +autoSweepPluginsPeriodic: true +notifyPluginOrSettingUpdated: true +checkIntegrityOnSave: false +batch_size: 25 +batches_limit: 25 +useHistory: true +disableRequestURI: true +skipOlderFilesOnSync: true +checkConflictOnlyOnOpen: false +showMergeDialogOnlyOnActive: false +syncInternalFiles: true +syncInternalFilesBeforeReplication: false +syncInternalFilesIgnorePatterns: \/node_modules\/, \/\.git\/, \/obsidian-livesync\/ +syncInternalFilesInterval: 60 +additionalSuffixOfDatabaseName: 3719da583cc6987d +ignoreVersionCheck: false +lastReadUpdates: 23 +deleteMetadataOfDeletedFiles: true +syncIgnoreRegEx: "" +syncOnlyRegEx: "" +customChunkSize: 50 +readChunksOnline: true +watchInternalFileChanges: true +automaticallyDeleteMetadataOfDeletedFiles: 0 +disableMarkdownAutoMerge: false +writeDocumentsIfConflicted: false +useDynamicIterationCount: false +syncAfterMerge: false +configPassphraseStore: "" +permitEmptyPassphrase: false +useIndexedDBAdapter: true +useTimeouts: false +writeLogToTheFile: false +doNotPaceReplication: false +hashCacheMaxCount: 300 +hashCacheMaxAmount: 50 +concurrencyOfReadChunksOnline: 30 +minimumIntervalOfReadChunksOnline: 25 +hashAlg: xxhash64 +suspendParseReplicationResult: false +doNotSuspendOnFetching: false +useIgnoreFiles: false +ignoreFiles: .gitignore +syncOnEditorSave: false +pluginSyncExtendedSetting: + PLUGIN_DATA/folder-note-plugin: + key: PLUGIN_DATA/folder-note-plugin + mode: 1 + files: + - plugins/folder-note-plugin/data.json + PLUGIN_MAIN/folder-note-plugin: + key: PLUGIN_MAIN/folder-note-plugin + mode: 1 + files: + - plugins/folder-note-plugin/manifest.json + - plugins/folder-note-plugin/main.js + - plugins/folder-note-plugin/styles.css + PLUGIN_DATA/obsidian-livesync: + key: PLUGIN_DATA/obsidian-livesync + mode: 1 + files: + - plugins/obsidian-livesync/data.json + PLUGIN_MAIN/obsidian-livesync: + key: PLUGIN_MAIN/obsidian-livesync + mode: 1 + files: + - plugins/obsidian-livesync/manifest.json + - plugins/obsidian-livesync/main.js + - plugins/obsidian-livesync/styles.css +syncMaxSizeInMB: 50 +settingSyncFile: settings +writeCredentialsForSettingSync: false +notifyAllSettingSyncFile: true +isConfigured: true +settingVersion: 0 +enableCompression: false +accessKey: "" +bucket: "" +endpoint: "" +region: auto +secretKey: "" +useEden: false +maxChunksInEden: 10 +maxTotalLengthInEden: 1024 +maxAgeInEden: 10 +disableCheckingConfigMismatch: false +displayLanguage: "" +enableChunkSplitterV2: false +disableWorkerForGeneratingChunks: false +processSmallFilesInUIThread: false +notifyThresholdOfRemoteStorageSize: 0 +usePluginSyncV2: false +usePluginEtc: false + +```` \ No newline at end of file